周期性任务丶find
文件查找:find命令
locate :在数据库中查找,非实时查找,精确度不高,查找速度快,模糊查找 /tmp/passwad/a.text
find:实时查找:速度慢 ,精确匹配
find [option] [查找路径][查找标准][执行动作](默认为显示)
查找路径:默认为当前路径
查找标准:默认为指定路径下的所有文件
查找标准:
-name “文件名称”:根据文件名查找 支持使用globbing(文件名统配符)
-iname 忽略大小写
-user UserName :根据属主查找
-group groupname:根据属组查找
-uid UID:根据UID查找
-gid GID:根据GID查找 以上两个作用在于,有些用户被删除了,但是属于该用户的文件没被删除,所以通过UID,GID 来查找
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
组合条件
-a :且 -标准1 -a -标准2 两标准都满足,-a可省略,
-o:或
-not:反
-type:根据文件类型查找
f:普通文件
d:目录文件
b:块设备
c:字符设备
l:符号链接文件
p:命名管道
s:套接字
-size:根据文件大小查找
-size [+|-](大于|小于)#Unit
例如:-size +2M
常用单位:K,M,G
另外在一个单位之内的都表示等于 20K也是被当做1M文件,但是搜索-1M文件只能查找到0K的文件
根据时间查找:
以天为单位(time)
最近访问时间 -atime [+|-]#unit #:表示(#+1)天之外被访问过
:表示#天内被访问过的
无符号:表示短于(#+1)>x>=#天的时间段被访问过
最近更改时间-mtime
最近状态改动时间-ctime
以分钟为单位(min)
-amin
-mmin
-cmin
根据权限查找:
-perm [+|-]MODE
MODE:精确匹配
+MODE:任何一类用户的任何一位权限都得匹配
-MODE:每类用户的指定要检查的权限位都匹配
如 文件权限 644
-perm -600 :否
-perm +222 :是
处理动作:
-ls :以长格式输出各文件信息
-exec COMMAND {} \; :对查找到的文件指定的命令
-ok COMMAND {} \; :交互式
find把查找到的所有文件一次性地传递给-exec执行
find |xargs
文件的特殊权限:
有这么一个问题:对于设置用户密码的文件/etc/shadow 他的权限是000,也就是说除了管理员以外,其他用户都不能修改这个文件的内容
那么,当用户想要修改自己的用户密码时究竟要怎么实现呢。
让可执行文件有suid
任何用户执行可执行可执行文件时,不再以用户自己的身份达成进程的属主,而是以文件的属主当作进程的属主
suid表现为文件属主权限执行位上的s或S
x:s
-:S
如何设定suid权限
chmod u+s FILE
或者:假设原来的权限为755
chmod 4755
目录文件的sgid
具有sgid的目录,用户再此创建文件时,新建文件的属组不再是用户的属组,而是目录的属组
chmod g+s FILE
或者:假设原来的权限为755
chmod 2755
粘滞位:sticky
对于公共可写的目录,用户可创建文件,可以删除自己的文件,但无法删除别的用户的文件
chmod o+t FILE
或者:假设原来的权限为755
chmod 1755
sticky表示其在其他用户上表示为t或者T
x:t
-:T
suid sgid sticky
0 0 0
Linux任务计划
一次性任务计划
at,batch
周期性任务计划:
crontab
anacron
一次性任务计划:
at 交互式:让用户在at>提示符输入多个要执行命令:
批处理:让任务的个命令写入文件由at进行调用
at TIME
at>
Ctrl+d 提交作业
at -l:查看作业 =atq
at -q 字母 TIME 添加别的队列
at -d job_name 删除一个尚未执行的作业= atrm
at批模式:
at -f 文件路径 TIME
TIME:
模糊时间:
now,noon(中午) midnight(午夜)teatime(下午4点)tomorrow
任务的执行结果会议邮件的形式发送给提交者
使用mail
交互模式接受邮件
交互模式发动邮件
-s 指定主题
< /path/to/somefile
可以通过管道来提交邮件内容
batch:一批,与at不同的是,不能指定时间:它自动选择系统空闲时执行
周期性任务计划:cron,建议写全路径 ,否则有些命令可能找不到路径
crond:守护进程,运行在后台,随时监视着进程等待执行
服务进程:阻塞,轮训
系统cron
文件:/etc/crontab
/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
时间表示法:
1.每个事件为都应该使用其可用的有效取之范围内的值
2.某事件围上的*表示对应位的有效取值
3、-:连续的相邻时间点取值
4、,:离散的时间点取值
5,/# :表示在指定时间范围内每隔#一次
注意:通过输出重定向而拒收邮件:
&> /dev/null
> /dev/null 2>&1
用户cron
/var/spool/cron/UserName 该目录下存储crontab任务
使用crontab命令来实现:
-l:查看自己的cron任务列表
-e:通过EDITOR变量中定义的编辑器打开用户自己的cron配置文件:
编辑单独的任务都使用-e选项,无论是删除、修改还是新建
-r:移除crontab文件
如果是管理员:
-u UserName :为别的用户配置crontab作业;
提醒:如果在crontab的用户命令中使用%,得转义为\%
5 3 * * * /bin/touch ~/testfile_`date +\%Y-\%m-\%d`.txt
在使用单引号后,%也可以不转义
5 3 * * * /bin/touch ~/testfile_`date +’%Y-%m-%d‘`.txt
如何实现秒级别的任务:
* * * * for i in {0..4};do /bin/echo “how are you?”;sleep10;done
crontab文件的格式
空白行会被忽略
#开头的行是注释
anacron: 是crontab的补充,用于检查crontab中某任务在过去的一个周期内是否没有执行,
如果没有执行,则在开机以后的某时间点让其执行一次,无论其周期是否到达
facl:文件访问控制列表
普通用户无法安全地将某文件授权给其他用户访问
facl:附加原有权限模型之上另一层权限控制机制,保存至文件扩展属性信息中
getfacl FILE。。。获取facl
setfacl[-m|-x]权限 文件
-m:设定权限
-m u:UserName:Perms
-m g:GroupName:Perms
-m m::Perms
-x:取消权限
-x u:UserName
-x g:GroupName
-x m:
ll表示为+,有额外的权限属性
-R:递归,对文件夹内的文件也生效
bash编制之循环控制
for varName in LIST;do
循环体
done
while CONDITION;do
循环体
done
until CONDITION;do
循环体
done
循环控制:
continue:提前结束本次循环而开始评估下一轮
break[n]:跳出当前循环
网络详解
网络基本知识
TCP/IP
物理层
链路层:从设备到设备主机通信,MAC地址,MAC<-->IP(RARP/ARP)
网络层: 从源主机到目标主机之间通信,IP地址,IP报文
传输层:从源主机进程到目标主机特定进程之间通信,tcp/udp
应用层:
ISO/OSI:七层
1-4:通信子网
5-7:资源子网
会话层
表示层
应用层
TCP:有连接协议,建立逻辑链接
SYN,ACK,FIN,RST,PSH,URG
三次握手:
SYN=1 ACK=0,FIN=0
SYN=1 ACK=1 FIN=0
SYN=0 ACK=1 FIN=0
四次断开:
主机:TCP/IP协议栈
配置主机介入TCP/IP网络:
IP/Netmask
路由:
主机路由:一台主机
网络路由:是一个网络
默认路由:
DNS服务器:
主DNS服务器
备用DNS服务器
主机名:
动态指定:
IP/Netmask
动态配置:
DHCP服务器
Dynamic Host Configuration Protocol
静态指定:
用户空间工具
ifconfig
ip
网络设备服务配置文件:
/etc/sysconfig/network-script/ifcfg-eth0
完成长久有效配置
GUI/TUI
用户空间的命令行工具:立即生效,当不会长久有效
ifconfig
iproute2(ip,ss)
网络设备如何表示
内核识别设备:驱动
设备:别名
以太网设备:ethX
PPP设备:pppX
本地回环:lo
ifconfig ip addr ip link
ifconfig:显示所有活动状态的相关信息
ifconfig Interface:仅显示指定接口的相关信息
ifconfig Interface Address
ip/mask
长格式:
ifconfig Interface IP netmask MASK
CIDR:无类别的预见路由
ifconfig Interface IP/MASK
route:ip route
route:显示路由信息
-n:使用数字格式显示,不反解地址到主机名
route add:
-host HOST_IP gw Next [dev Device]
-net Net_ADDR
-net 0.0.0.0 目标地址为任意地址
route del
-host HOST_IP gw 下一跳
-net Net_ADDR gw 下一跳
DNS服务器指向:
配置文件:/etc/resolv.conf
最多三个:
nameserver DNS_SERVER_IP
dig -t A 域名
正解测试
dig -x IP
反解测试
Centos5/6:
服务脚本:/etc/init.d/network
Centos 6
服务脚本:/etc/init.d/NetworkManager
服务脚本:SysV style LSB
控制运行在后台守护进程,接受参数{start|stop|restart|status}
脚本位置:/etc/rc.d/init.d或/etc/init.d
配置某服务开机自动启动:chkconfig Src_Script_Name on
禁止开机自动启动:chkconfig Src_Script_Name off
查看 chkconfig --list
调用机制:
1./etc/init.d/Script_Name {start|stop|restart|status}
1.service Script_Name {start|stop|restart|status}
与网络设备相关的服务控制脚本
他们通常能够读取为网络配置的配置文件,以之实现其配置生效或失效等管理功能
配置文件有两类(/etc/sysconfig/network-scripts/)
配置IP、掩码、网关
以太网:ifcfg-ethX
PPP:ifcfg-pppX
匹配路由
route-ethX
route-pppX
配置IP、掩码、网关:ethX
DEVICE="eth0"
此配置关联至的设备。设备名要与文件ifcfg-后ude内容保持一致
BOOTPROTO=none
引导协议:{none|static|dhcp|bootp}
HWADDR="00:0C:29:26:62:92"
MAC地址:要与真实MAC地址保持一致,可省略
NM_CONTROLLED="yes"
是否接受NetworkManager脚本控制:{yes|no}
ONBOOT="yes"
是否开机自动启动此网络设备{yes|no}
TYPE="Ethernet"
设备类型Etheraget Bridge(桥接)
UUID="14351f7f-a726-4dfc-966e-dfb1f352f226"
唯一标识,可省略
IPADDR=
ip地址
NETMASK=
掩码
GATEWAY=
默认网关
DNS1=
DNS1服务地址
IPV6INIT=no
是否开启ipv6
USERCTL=no
是否允许普通用户操作网卡
PEERDNS={yes|no}
是否允许DHCP服务分配地址时直接更新/etc/resolv。conf中的DNS服务器地址
配置路由:route-ethX
配置文件的格式1:每行一个要配置的路径条目
目标 via 下一跳
配置文件的格式2:每一组一个路由条目
ADDRESS#=目标
NETMASK#=掩码
GATEWAY#=下一跳
ADDRESS0=192.168.0.0
NETMASK0=255.255.255.0
GATEWAY0=172.16.100.1
如何实现在单网卡上配置多个地址:
通过网络接口别名来实现
eth0X
eth0:X eth0:0 eth0:1....
配置1:
ifconfig ethX:Y IP/mask
配置2:
ifcfg-ethX:Y
DEVICE=ethX:Y
BOOTPROTO={none|static}
IPADDR=
NETMASK=
GATEWAY=
非主地址不支持DHCP协议获取
ip命令的使用
ip link
ip link show 查看默认信息
ip link set 接口 [up|down] [multicast on|off]:
ip addr
可以在一个接口配置多个地址而不使用接口别名:显示这些地址
ip addr show
ip addr add dev 接口 ip地址/掩码 [ ladel 别名 ]
ip addr add dev 接口 ip地址 [ ladel 别名 ]
ip addr flush 接口 [to 网络地址]
ip route
ip route add 目标 via 下一跳 src 源地址 [dev 设备] 发到 “目标” 网段的网络包,下一跳的路由器 IP 是 “下一跳“”,包的源IP地址设为“源地址“” src 选项只会影响该 host 上产生的网络包。如果是一个被路由的外来包,明显地它已经带有了一个源 IP 地址,这时候,src 参数的配置对它没有任何影响
ip route del 目标
ip route show
启用/禁用接口:
ip link set 接口 up|down
ifconfig 接口 up|down
ifdown 接口,ifup 接口
重置网络连接
TUI或GUI
system-config-network-tui
配置结束后将保存配置文件中
setup --> Network Configuration
网络管理或检测等相关的工具:
ping:ICMP
ping [options] ip
-c 次数
-w 测试执行时长
traceroute HOST:
获取当前主机到目标主机所经过的网关
mtr HOST
netstat
-t:tcp协议的连接
-u:udp协议的链接
-l:监听状态的连接
-a:所有状态的连接
-p:连接相关的进程
-n:数字格式显示
-r: 显示路由表,类似于route或ip route show
常用组合:
netstat -tan
netstat -tunl
netstat -rn
ss,用于取代netstat
-t:tcp协议的连接
-u:udp协议的链接
-l:监听状态的连接
-a:所有状态的连接
-e:显示扩展信息
-m:显示套接连接使用的内存信息
-p:进程及UDP
-n:数字格式显示
-o state (established)
ethtool 接口: 显示接口设备属性
ethtool -S 接口:显示设备接口的统计数据
进程管理
进程管理:
二进制的格式为ELF,是CPU指令集中的指令
程序=指令+数据,
进程是程序的副本,可以有多个
内核是一个资源调度监视器
Linux是抢占式多任务
内存被事先划分成多个相同大小的页框
LIU:最近最少使用
mmap 共享内存
通过fork()进程生成
内存泄漏
init是所有进程的父进程
task_struct任务结构:是一种数据结构
双向循环链表
线程是一个进程内的多个执行流
WLP:轻量级进程
模式转换:
时钟驱动:
进程优先级:
是进程调度的核心资源
公平:
结果公平:
起点公平:
算法:完成工作的调度方式
BIG O
O(1)
O(logn)
O(n)
O(N^2)
O(2^N)
一共140个队列
0-99 为实时优先级
进程间通信:IPC
InterProcess Communication
signal:信号
shm:共享内存
semerphor:旗语
socket:
rpc:Remoter Procedure Calling
xml-rpc,rest
过程:没有返回值的函数
函数:
进程的分类:
CPU-Bound:CPU密集型
I/O-Bound:I/O密集型
进程的分类:
批处理进程
交互式进程
实时进程
进程调度器:
进程优先级:0-139
实时优先级: 1-99,数字越大,优先级越高
静态优先级:100-139,nice值调整,数字越大,优先级越低
nice:-20,19
priority:100,139
动态优先级:由内核维护,动态调整
进程状态:
运行态:running R
就绪态:
睡眠态:sleeping
可中断睡眠 inruptable
不可中断睡眠 uninruptable
停止态:不会被调度 stopped
僵死态:zombie
进程管理命令:
ps pstree pidof top htop pmap vmstat dstat
ps:显示进程状态的命令
进程:
与终端相关的进程:a
与终端无关的进程:x
STAT:
R:运行或可运行
S:可中端睡眠
D:不可中端睡眠
T:停止
Z:僵死
s:session leader 有子进程
+:前台进程
l:多线程进程
N:低优先级进程
<: 高优先级进程
u:以用户为中心显示进程相关信息
%CPU:cputime/realtime
VSZ:虚拟内存集,Virutal menmory Size
RSS:常驻内存集,
STIME:启动时间
TIME:累计占用的内存时间 []表示内核线程
常用组合一:ps aux
其他常用选项:
-e:显示所有进程
-f:以进程的长格式显示
常用组合之二:ps -ef
常用组合之三:ps -eFH
-F:显示额外信息
-H:显示进程的层次信息
pstree:显示进程树
自定义要显示的信息:-o
ps auo pid, command
rtprio:实时优先级
ni:nice值
pri:优先级
psr:运行的cpu
pgrep pattern:
例如:pgrep bash
-U Username:仅显示指定用户的进程的进程的PID
-G Groupname:仅显示指定用户组的进程的进程的PID
pidof:显示指定命令所启动的pid
pidof command
top:
M:按内存占用百分比大小排序
P:按cpu占用百分比大小排序,默认
T:按累计占有时长进行排序
1:分开显示
l: 是否显示负载信息
t:是否显示cpu和进程的统计信息
m:是否显示内存和交互分区的信息
q:退出
k:kill,杀掉进程
s:改变top刷新频率
top - 11:49:38 up 3:18, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 502168k total, 420160k used, 82008k free, 57496k buffers
Swap: 2097144k total, 0k used, 2097144k free, 254164k cached
us — 用户空间占用CPU的百分比。
sy — 内核空间占用CPU的百分比。
ni — 改变过优先级的进程占用CPU的百分比
id — 空闲CPU百分比
wa — IO等待占用CPU的百分比
hi — 硬中断(Hardware IRQ)占用CPU的百分比
si — 软中断(Software Interrupts)占用CPU的百分比
VIRT:virtual memory usage 虚拟内存
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
3、计算某个进程所占的物理内存大小公式:RES – SHR
4、swap out后,它将会降下来
DATA
1、数据占用的内存。如果top没有显示,按f键可以显示出来。
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
常用选项:
-d #:指定刷新时间间隔
-b:以批次显示top的刷新
-n # 指定指定的次数
htop
u:选择指定用户的进程
l: 显示进程所打开的文件列表
s:显示进程执行的系统调用
a:显示进程的进程的cpu上
#:快速将光标定位之指定的PID进程上
quit
vmstst
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 57460 54564 285520 0 0 30 5 21 14 0 0 99 1
procs
r:运行或等待cpu时间片的进程的个数
b:被阻塞(通常为等待I/O完成)的进程的长度
memory
swpd:从物理内存交互至swap中的数据量
free:未使用的内存大小
buffer:buffer空间大小,通常与缓存写操作相关
cache:cache空间大小,通常与缓存读操作相关
swap
si:swap in 数据进入swap中的数据量,通常是速率。kb/s
so:swap out 数据离开swap中的数据量,通常是速率。kb/s
io:
bi:block in:从块设备读入的数据量,通常是速率,kb/s
bo:block out:保存至块设备中的数据量,通常是速率,kb/s
in:中断发生频率。每秒的中断数
cs:context switch 上下文切换,进程切换,通常是速率,kb/s
cpu:
us:用户空间的使用率
sy:内核空间的使用率
id:空闲
wa:等待的
st:被偷走的
使用格式
vmstat [delay [counts]]
-s:显示内存统计数据
进程:nice
用来手动调整进程优先级
-20,19
100,139
默认nice为0.其默认优先级为120
nice:普通用户只能调大此值
对于尚未启动的程序
nice -n # COMMAND 表示进程以#进程启动
对于运行中的进程:
renice # PID 调整PID的nice值
查看 ps axo ni,command, pid
进程间通信(IPC):
信号:
kill命令:可以实现向其他进程发送信息
kill -l :可以查看向进程发送的所有信息
man 7 sigual
kill -SIGNAL PID
-SIGNAL:
数字代号:比如1,9等
信号名称:如SIGHUP等
简写的信号名称:如HUP等
1) SIGHUP:让程序重读配置文件,而不用重启程序
2) SIGINT:中断信号。Ctrl+c即发送次信号
9) SIGKILL:杀死进程
15) SIGTERM:终止进程,比较优雅(默认)
killall -SIGNAL 进程名
Linux的作业控制
前台作业:占据着一个终端
后台作业:作业执行时不占据终端,作业启动后就释放终端
非守护进程类的程序,启动以后都在前台工作
如果已经启动:前台-->后台。ctrl+z把前台作业送往后台,作业被”停止“
如果尚未启动:COMMAND &
退出当前会话,作业也会终止,因为作业与当前终端相关,如果把作业送往后台后,不期望作业随终止结束而停止
nohup COMMAND &
如何让送往后台的作业继续执行:
fg [[%]作业号码]:将作业调回前台继续进行
bg [[%]作业号码]:让作业在后台继续进行
默认的为最后一个进入后台的任务
kill %作业号码:终止作业
查看作业号:
jobs
系统初始化流程丶拯救模式
内核管理
os:
内核的功能:
进程管理:task_struct,scheduler
内存管理:
I/O管理:中断及中断处理
文件系统:ext3,ext4,reiserfs,xfs
驱动程序:
安全相关:SELinux
是通用软件,平台类的软件
内核设计流派:
单内核:单一体系结构
Linux
模块化设计:核心+外围功能性模块组成
.ko:Kernel object
内核支持动态装卸载模块
微内核:内核子系统
Windows
Solaris
fock()
init:负责管理用户空间的进程
init:PID 1
/sbin/init:可执行文件
Linux的初始化流程
POST:ROM+RAM
BIOS:Boot Sequence
MBR:
446:bootloader,用以选择操作系统。还要能识别文件系统
64:分区表,16个字节一个分区
2:5A
kernel文件:基本磁盘分区,无法放在LVM上
vmlinuz 压缩存放,有两段代码组成,一个解压代码,一个为内核代码
/sbin/init
/lib/
initrd:
rd:ram disk
/sbin/init:
/etc/inittab
/etc/rc.d/rc.sysinit脚本
init:
CentOS 5: SysV格式的系统初始化程序
串行化:
CentOS 6:Upstart
dbus
A
B
C
SystemD:参考OS X中并行初始化过程
运行级别:
0-6:7个级别
0:关机
1:单用户模式,直接以root用户登录
2:多用户模式,不支持NFS文件系统
3:完全多用户模式,文本模式,不启动图形界面
4:预留级别
5:完全多用户模式,图形模式
6:重启
/sbin/init的配置文件:
每行定义一种操作:
id:操作的id
运行级别:runlevels:在那些级别下执行此操作
action:动作
initdefault:设置默认运行级别,无需定义操作
sysinit:指定系统初始化脚本
si::sysinit:/etc/rc.d/rc.sysinit
wait:等待系统切换至此级别时运行一次;
ctrlaltdel:定义组合键被按下时要运行的命令:
respawn:当指定的操作进程被关闭时立即在重启一次
tty1:2345:respawn:/sbin/mingetty tty1
process:操作
/etc/inittab中定义的操作(init要完成的任务)
指定默认运行级别
指定系统运行的初始脚本
启动指定级别下的要启动的服务,关闭要停止的服务
/etc/init.d
/etc/rc.d/rc.N.d(0-6)
s##
k##
定义ctrlaltdel组合的动作
初始化字符终端
终端:对应的是设备
/dev/tty#,/dev/ttyS#,/dev/console,/dev/pts/#
调用:login-->/etc/issue
启动图形终端
cmdline:内核启动时传递给内核的参数
系统初始化脚本:/etc/rc.d/rcinit
设置主机名:
打印文本欢迎信息
激活SELinux和udev
激活swap
挂载/etc/fstab定义的本地文件系统
实现检查根文件系统并对其以读写重新挂载
设置系统时钟
装载键盘映射
根据/etc/sysctl.conf设置内核参数
激活RAID和LVM设备
清理操作
MBR:
bootloader:引导加载器,是一个程序
LILO:LInux LOader
不能引导位于1024 Cylinder(柱面)以后的分区中的os;
GRUB:GRand Unified Bootloader
1st stage:位于MBR中,为了引导2nd stage
1.5 stage:位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件识别扩展
2nd stage:位于boot基本磁盘分区中,GRUB的引导成勋
boot分区大小
Centos5:100M
Centos6:200M
/boot/grub/
stage2:读取配置文件grub.conf
Grub的功能:
1.选择要启动的内核或系统
隐藏交互式接口
2.交互式接口
e: 编辑模式
3.基于密码保护:在配置文件中 输入 password --md5 密码
启用内核映像
定义在相应title下
传递参数(进入编辑模式)
定义在全局段中
grub接口
title:操作系统或内核的标题
root:设定内核文件所在的分区为grub的根
kernel:定义要使用的文件,后面可以附加传递给内核的启动参数
initrd:指定为内核提供额外驱动等功能的ram disk或ram fs文件
init的级别1的表示方法:
1,s single S
单用户模式几乎不会启动任何服务,且不需要用户登录;单是会执行/etc/rc.d/rc.sysinit脚本
如果连/etc/rc.d/rc.sysinit文件也不加载,则传递emergency
运行级别的切换
#init [0-6]
查看运行级别:
runlevel
who -r
grub.conf配置文件语法:
default=#:指定默认启动的内核或os
timeout=#:等待用户选择要启动的内核或os的时长,单位为秒钟
splashimage= :指定使用的背景图片
hiddenmenu:隐藏菜单
title
root(hd0,0)
(Device Part)
Device(磁盘)表示方式:在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始
part表示方式:代表分区,从0开始编号
kernel
指定内核文件及传递给内核的参数
参数:ro root=设备文件,quiet 静默模式输出
initrd
文件:通常为cpio归档,并使用gzip压缩,通常以.img作为文件后缀名
在紧急救援模式下:
grub的安装:
第一种方式
#grub
grub root(hd0,0)
grub setup(hd0)
grub quit
第二种方式:
# chroot /mnt/sysimage
# grub-install --root-directory=/ /dev/sda
sync 将内存文件加载到硬盘上
启动流程:POST-->BIOS(boot sequence) --> GRUB(bootloader(stage1:mbr;stage2:grub目录中)) --> kernel(initrd) --> SHELL
HOST:宿主机
Target:目标机
基于HOST只做一个简单的可启动的Linux
1.给目标磁盘分区
两个:
宿主机上:/dev/sdb1 /dev/sdb2
/dev/sdb1 挂载至 /mnt/boot
/dev/sdb2 挂载至 /mnt/sysroot
2.安装grub至目标磁盘
# grub-install --root-directory=/mnt /dev/sdb
3、复制内核和initrd文件
cp /boot/vmlinuz-Version /mnt/boot/vmlinuz
cp /boot/initramfs-Version.img /mnt/boot/iniyramfs.img
4.创建目标文件的根系统文件
mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,src,mnt,media,home,root}
接着去移植bash等至目标主机的根文件系统
5.为grub提供配置文件
vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title
root(hd0,0)
kernel /vmlinuz ro root=/dev/sda1 selinux=0 init=/bin/bash
initramfs /initramfs
Linux的内核,单内核,支持动态装载和卸载
模块:/lib/modules/Kernel_version/
查看pci设备的命令
lspci -v
查看当前内核装载的所有模块
lsmod
查看某模块的详细信息
modinfo 模块
动态卸载某模块
modprobe -r 模块
rmmod 模块
动态装载某模块
modprobe 模块
insmod 路径文件
/sbin/init
/etc/inittab
/etc/rc.d/rc.sysinit
启动对应级别的需要启动的服务。停止需要关闭的服务
/etc/rc.d/rcN.d/
S##
K##
符号链接:/etc/init.d
##:表示优先级(0-99),数字越小,优先级越大
chkconfig --add 添加服务
指定级别
--level
删除:
chkconfig --del