CentOS 6.x基本启动流程
一、服务器加电,加载BIOS信息,BIOS进行系统检测,依照BIOS设定找到第一个可以启动的设备(一般是硬盘)
二、读取第一个启动设备的MBR(主引导记录),加载MBR中的Boot Loader(启动引导程序,最常见为GRUB)
三、依据Boot Loader的设置加载内核,内核会再进行一遍系统检测,系统一般会采用内核检测硬件的信息,而不一定采用BIOS的自检信息。内核在检测硬件的同时,还会通过加载动态模块的形式加载硬件的驱动
内核启动系统的第一个进程,就是/sbin/init
由/sbin/init进程调用/etc/init/rcS.conf配置文件,通过这个配置文件调用/etc/rc.d/rc.sysinit配置文件。而/etc/rc.d/rc.sysinit配置文件是用来进行系统初始化的,主要配置计算机的初始环境,还是通过/etc/init/rcS.conf配置文件,调用/etc/inittab配置文件。通过/etc/inittab配置文件来确定系统的默认运行级别,确定默认运行级别后,调用/etc/init/rc.conf配置文件,通过/etc/init/rc.conf配置文件调用并执行/etc/rc.d/rc脚本,并传入运行级别参数,/etc/rc.d/rc确定传入的运行级别,然后运行相应的运行级别目录/etc/rc[0-6].d中的脚本。
/etc/rc[0-6].d目录中的脚本依据设定好的优先级依次启动和关闭。最后执行/etc/rc.d/rc.local中的程序。
如果是字符界面启动,就可以看到登陆界面了。如果是图形界面启动,就会调用相应的X-Window接口。
四、BIOS自检
BIOS(基本输入输出系统)是固化在主板上一个ROM芯片上的程序,主要保存计算机的基本输入输出信息、系统设置信息、开机自检程序和系统自启动程序。用来为计算机提供最底层和最直接的硬件设置和控制。
BIOS在系统的启动过程中会加载这些主机信息,并完成了第一次系统的自检(第二次自检由内核完成),我们把BIOS的自检过程称作POST(加电自检)。自检完成之后开始执行硬件的初始化,之后定义可以启动的设备的顺序,然后从第一个可以启动的设备的MBR(主引导记录)中读取Boot Loader(启动引导程序)。Linux中最常见的Boot Loader就是GRUB程序。
MBR的结构
MBR也就是主引导记录,位于硬盘的0磁道,0柱面,1扇区中。主要记录了启动引导程序和磁盘的分区表。
MBR总共占用了一个扇区,也就是512Byte。其中446Byte安装了启动引导程序,其后64Byte描述分区表,最后的2个Byte是结束标记。每块硬盘只能划分4个主分区,原因就是在MBR中描述分区表的空间只有64个Byte。其中每个分区必须占用16个Byte,那么64个Byte就只能划分4个主分区。
第1字节:引导标志
第2字节:本分区的起始磁道号
第3字节:本分区的起始扇区号
第4字节:本分区的起始柱面号
第5字节:分区类型,分区类型可以识别主分区和扩展分区
第6字节:本分区的磁道结束号
第7字节:本分区的结束扇区号
第8字节:本分区的结束柱面号
第9-12字节:本分区之前已经占用的扇区数
第13-16字节:本分区的总扇区数
启动引导程序的作用
加载操作系统的内核。这是启动引导程序最主要的功能。
拥有一个可以让用户选择的菜单,来选择到底启动哪个系统。
可以调用其它的启动引导程序(多系统建议先安装Windows,后安装Linux)
加载内核,内核重新自检并加载内核模块
内核的加载和内核模块
Grub加载了内核之后,内核首先会再进行一次系统的自检,而不一定使用BIOS检测的硬件信息。这时内核终于开始替代BIOS接管Linux的启动过程了。内核完成再次硬件自检之后,开始采用动态的方式加载每个硬件的模块,这个动态的模块可以想象为硬件的驱动(默认Linux硬件的驱动是不需要手工安装的,如果是重要的功能会直接编译到内核当中,非重要的功能,比如硬件驱动会编译为模块,在需要时由内核调用。不过要是没有被内核识别的硬件,要想驱动,就需要手工安装这个硬件的模块了)
在多数的Linux中,都会把硬件的驱动程序编译成为模块,这些模块保存在/lib/modules目录中,常见的USB、SATA和SCSI等硬盘设备的驱动,还有一些特殊的文件系统(如LVM、RAID等)的驱动都是以模块的方式来保存的。
initramfs内存文件系统
CentOS 6.x中使用initramfs内存文件系统取代了CentOS 5.x中的initrd RaM Disk。他们的作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需要的内核模块,比如USB、SATA、SCSI硬盘的驱动和LVM、RAID文件系统的驱动。也就是说通过initramfs虚拟文件系统在内存中模拟一个根目录,然后在这个模拟根目录中加载SCSI等硬件的驱动,就可以记载真正的根目录了,才能调用Linux的第一个进程/sbin/init.
调用/sbin/init进程,在内核加载完毕,并进行完硬件检测与驱动程序加载后,这时主机硬件已经准备完毕,内核会主动呼叫第一个进程,也就是/sbin/init。/sbin/init最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语言、文件系统格式及其他服务的启动等。在CentOS 5.x的系统中,主要是通过init进程的配置文件/etc/inittab来设定系统,并启动Linux的。在CentOS 6.x中由Upstart启动服务来替换以前的init,所以/etc/inittab这个配置文件中只能定义系统的默认运行级别,而其他的功能是靠/etc/init目录中的其他配置文件实现。
调用/etc/init/rcS.conf配置文件,加载/sbin/init进程后,由init进程调用/etc/init/rcS.conf配置文件,这个配置文件的主要功能:先调用/etc/rc.d/rc.sysinit,然后由/etc/rc.d/rc.sysinit配置文件进行Linux系统初始化。然后再调用/etc/inittab,然后由/etc/inittab配置文件确定系统的默认运行级别。由/etc/rc.d/rc.sysinit配置文件进行Linux系统初始化
获得网络环境
挂载设备
开机启动画面Plymouth(取代了过往的RHGB)
判断是否启用SElinux
显示开机过程中的欢迎画面
初始化硬件
用户自定义模块的加载
配置内核的参数
设置主机名
同步存储器
设备映射器及相关的初始化
初始化软件磁盘阵列(RAID)
初始化LVM的文件系统功能
检验磁盘文件系统(fsck)
设置磁盘配额(quota)
重新以可读写模式挂载系统磁盘
更新quota(非必要)
启动系统虚拟随机数生成器
配置机器(非必要)
清除开机过程当中的临时文件
创建ICE目录
启动交换分区(swap)
将开机信息写入/var/log/dmesg文件中
查看系统的初始化信息,可以查询/var/log/dmesg文件或使用dmesg命令,通过dmesg命令也可以查看Linux服务器的硬件信息。
由/etc/inittab配置文件确定系统的默认运行级别
运行级别
0 关机
1 单用户模式,可以想象为Windows的安全模式,主要用于系统修复
2 不完全的命令模式,不含NFS服务
3 完全的命令行模式,就是标准字符界面
4 系统保留
5 图形模式
6 重启动
runlevel #查看系统运行级别
init 级别名 #进入另一级别
/etc/init/rcS.conf配置文件调用/etc/inittab配置文件的目的就是为了确定系统的默认运行级别,也就是系统一开机后会进入的那个运行级别。默认是3或5.调用/etc/init/rc.conf,再调用/etc /rc.d/rc文件,一旦确定了默认运行级别,系统就会调用/etc/init/rc.conf配置文件,传入默认级别作为参数,而/etc/init/rc.conf配置文件的作用是调用/etc/rc.d/rc脚本文件。
运行级别参数传入/etc/rc.d/rc这个脚本之后,由这个脚本文件按照不同的运行级别启动/etc/rc[0-6].d/目录中的相应的程序。而/etc/rc[0-6].d/目录中的程序已经设定好了优先级顺序,按照优先级顺序依次启动相应的程序。比如默认运行级别是3,那么这个默认运行级别会先传入/etc/init/rc.conf配置文件,然后再传入/etc/rc.d/rc脚本,由此脚本调用/etc/rc3.d/目录中的所有程序,程序如下:
/etc/rc3.d/K??开头的文件(??是数字),会按照数字顺序依次关闭
/etc/rc3.d/S??开头的文件(??是数字),会按照数字顺序依次启动
这些数字就是设定好的优先级,按照数字顺序依次启动和关闭对应的程序,系统就会启动了。/etc/rc3.d/目录中的程序都是链接文件,启动这些文件,实际是启动/etc/init.d目录中的系统服务。
调用/etc/rc.d/rc.local文件,在/etc/rc[0-6].d/目录中的程序启动起来之后,系统的启动就已经完成。不过总有些程序是需要在系统启动之后,随着系统一起启动的。这时并不需要自己把需要启动的服务链接到/etc/rc3.d这个目录中,系统准备了/etc/rc.d/rc.local这个配置文件。
这个配置文件会在用户登录之前读取,这个文件中写入什么命令,在每次系统启动时都会执行一次。也就是说,如果有任何需要在系统启动就运行的工作,只需要写入/etc/rc.d/rc.local这个配置文件即可。
光盘启动 |
启动
|
单用户 |
早期的Lilo引导程序已经不是很常见,Grub相比来讲有很多优势:
支持更多的文件系统;
grub的主程序可以直接在文件系统中查找内核文件;
在系统启动时,可以利用grub的交互界面编辑和修改启动选项;
可以动态的修改grub的配置文件,这样在修改配置文件之后不需要重新安装grub,而只需要重新启动就可以生效了。
grub加载内核的过程
Stage 1:执行grub主程序
第一阶段是用来执行grub的主程序的,这个主程序必须放在启动区中(也就是MBR或者引导扇区中)。但是MBR太小了,只能安装grub的最小主程序,但不能安装grub的相关配置文件。这个主程序的主要功能是用来启动Stage 1.5和Stage 2阶段的。
Stage 1.5:识别不同的文件系统
Stage1.5是在安装grub时,直接安装到紧跟MBR之后的32KB的空间中,这一段硬盘空间是空白无用的,而且是没有文件系统的,所以Stage 1可以直接读取Stage 1.5,读取了Stage 1.5就能识别不同的文件系统了,才能加载Stage 2。
Stage 2:加载grub的配置文件
Stage2比较大,只能放在文件系统当中(分区)。Stage 2阶段主要就是加载grub的配置文件/boot/grub/grub.conf,然后根据配置文件中的定义,就可以加载内核和虚拟文件系统了。接下来内核就可以接管启动过程,继续自检与加载硬件模块了。
/boot/grub目录中主要就是grub的配置文件和各种文件系统的Stage1.5文件,不过grub的配置文件有两个/boot/grub/grub.conf和/boot/grub/menu.1st,这两个配置文件是软链接,修改哪一个都可以。
grub中分区的表示方法
硬盘 | 分区 | Linux中设备文件名 | Grub中设备文件名 |
第一块SCSI硬盘 | 第一个主分区 | /dev/sda1 | hd(0,0) |
第二个主分区 | /dev/sda2 | hd(0,1) | |
扩展分区 | /dev/sda3 | hd(0,2) | |
第一个逻辑分区 | /dev/sda5 | hd(0,4) | |
第二块SCSI硬盘 | 第一个主分区 | /dev/sdb1 | hd(1,0) |
第二个主分区 | /dev/sdb2 | hd(1,1) | |
扩展分区 | /dev/sdb3 | hd(1,2) | |
第一个逻辑分区 | /dev/sdb5 | hd(1,4) |
grub的配置文件/boot/grub/grub.conf
default=0 默认启动第一个系统,也就是如果在等待时间结束后,用户没有选择进入哪个系统,系统会默认进入第一个系统
timeout=5 等待时间,默认是5秒,也就是进入系统时,如果5秒内用户没有按下任意键,那么系统会进入default字段定义的系统。如果timeout=0则不会等待直接进入系统,timeout=-1则是一直等待用户输入,而不会自动进入系统。
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz
指定grub启动时的背景图像文件的保存位置
hiddenmenu 隐藏菜单。启动时默认只能看到读秒,而不能看到菜单,如果想要看到菜单需要按任意键
root (hd0,0)启动程序的保存分区
需要手工安装grub主要有两种情况,一是Linux系统原先不是使用grub作为引导程序,现在想用grub来作为引导程序,二是MBR中的引导程序被覆盖,需要在MBR中重新安装grub,如先安装Linux,后安装了Windows。
在Linux系统中安装grub,或者在新分区中安装grub的步骤
第一:需要在Linux的指定分区中安装grub的相关文件,这时通过grub-install命令实现的。
grub-install [选项] 设备文件名
--root-directory=DIR:DIR为实际目录,也就是手工指定grub相关文件的安装目录
第二:需要按照要求修改grub的配置文件,也就是/boot/grub/grub.conf
第三:需要在分区的启动扇区中安装grub,这是通过grub命令的交互模式实现的
grub>root (hd0,0)
grub>find /grub/stage 1
grub>find /vmlinuz-2.6.32-279.el6.i686
grub>setup (hd1,0)
grub>quit
覆盖安装,进入光盘修复模式
sh-4.1#grub
grub>root (hd0,0)
gurb>setup (hd0)
grub>quit
grub加密
grub-md5-crypt 生成加密密码字串
将“password--md5 加密密码字串”写入/boot/grub/grub.conf配置文件timeout下
在配置文件title字段下,加入lock,代表锁死,如果不输入正确的grub密码也不能启动。
Linux中所有的模块都放在/lib/modules/2.6.32-279.el6.i686/modules.dep文件中,在安装模块时,依赖这个文件查找所有的模块,所以不需要指定模块的所在位置的绝对路径,而且也依赖这个文件来解决模块的依赖性。
arch 与硬件相关的模块
crypto 内核支持的加密技术的相关模块
drivers 硬件的驱动程序模块,如显卡、网卡等
fs 文件系统模块,如fat,vfat,nfs等
lib 函数库
net 网络协议相关模块
sound 音效相关模块
depmod [选项]
#不加选项,depmod命令会扫描系统中的内核模块,并写入modules.dep文件
-a 扫描所有模块
-A 扫描新模块,只有有新模块,才会更新modules.dep文件
-n 把扫描结果不写入modules.dep文件,而是输出到屏幕上
modprobe [选项] 模块名 #安装模块
-f 强制加载模块
-l 列出所有模块的文件名,依赖modules.dep文件
-r 删除模块
lsmod #查看系统中安装的内核
lsmod命令结果总共三列:
Module: 模块名
Size: 模块大小
Usedby: 模块是否被其他模块调用
modinfo 模块名 #查看模块说明
在单用户模式(运行级别为1)中,Linux引导进入根shell,网络被禁用,只有少数进程运行。单用户模式可以用来修改文件系统损坏、还原配置文件(如系统运行级别)、移动用户数据等。
进入单用户模式在quiet后输入空格1或single
绝大多数系统错误都可以通过单用户模式进行修复,理论上是只要能够进入单用户模式,那么系统错误就可以被单用户模式修复。
光盘修复可以修复大多数的常见错误
如果系统中的重要系统文件丢失,会导致系统无法正常启动。这时可以利用光盘修复模式修复。在光盘修复模式需要使用chroot命令。
chroot 目录名 #改变系统根目录
在光盘修复模式中,系统根目录被当成外来设备放在/mnt/sysp_w_picpath/目录中。
如/etc/inittab文件丢失
chroot /mnt/sysp_w_picpath
cd /root
rpm –qf /etc/inittab
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
rpm2cpio/mnt/cdrom/Packages/initscripts-9.03.31-2.el6.centos.i686.rpm | cpio -idv./etc/inittab
cp etc/inittab /etc/inittab
Linux服务分为RPM包默认安装的服务(分为独立的服务和基于xinetd服务)和源码包安装的服务。
RPM包默认安装的服务,这些服务是通过RPM包安装的,可以被服务管理命令识别。
独立的服务:就是独立启动的意思,这类型的服务可以自行启动,而不用依赖其他的管理服务。不依赖其他管理服务,那么当客户端请求访问时,独立的服务响应请求更快速。Linux中目前大多数服务都是独立的服务,比如apache服务,FTP服务,Samba服务等。
基于xinetd的服务:这种服务就不能独立启动了,而是要依靠管理服务来调用这种服务。这个负责管理的服务就是xinetd服务,xinetd服务是系统的超级守护进程。xinetd服务的作用就是管理不能独立启动的服务,当有客户端请求时,先请求xinetd服务,由xinetd服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动xinetd服务,而其他基于xinetd的服务只有在需要时才启动,不会占用过多的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以响应时间相对较慢。
独立服务的启动管理:
使用/etc/init.d/目录中的启动脚本启动服务
使用service命令来启动独立的服务
chkconfig --list [服务名] #列出所有RPM默认安装服务的自启动状态
独立服务的自启动管理
chkconfig[--level 运行级别] [独立服务名] [on|off] (运行级别不写默认为2345)
修改/etc/rc.d/rc.local文件,设置服务自启动( 写入命令)
ntsysv [--level 运行级别]
上下键:在不同服务之间移动
空格键:选定或取消服务的自启动。就是在服务之前是否打入“*”
tab键:在不同项目间切换
F1键:显示服务的说明
基于xinetd服务的启动
vi /etc/xinetd.d/服务名
disable=no
基于xinetd服务的自启动(同时生效)
使用chkconfig命令管理(不用指定运行级别)
使用ntsysv命令管理自启动
源码包服务的启动管理(绝对路径)
源码包服务的自启动管理(修改/etc/rc.d/rc.local配置文件)
让源码包服务能被service命令管理启动
把源码包的启动脚本软链接到/etc/init.d目录
让源码包服务能被chkconfig命令管理启动(先被service命令识别)
vi /usr/local/服务启动脚本
#chkconfig:运行级别 启动顺序 关闭顺序(自定顺序,100前,不要和系统中的冲突)
#description:(说明随意写)
以上两句话必须加入
chkconfig --add 服务名 #把服务加入chkconfig命令管理
--del #把服务从chkconfig命令管理中删除
修改了chkconfig命令,就能被ntsysv命令识别了(setup,ntsysv,service为红帽专有)
Xshell传输文件get(下载)put(上传)ls lcd cd
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。程序被执行时,执行人的权限和属性、以及程序的代码都会被加载入内存,操作系统给这个进程分配一个ID号,称为PID(进程ID)。
进程管理的作用:
判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想状态是,在服务器出现问题,但是还没有造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为干预。如果服务器的CPU占用率、内存占用率过高,就需要人为介入解决问题了。
查看系统中所有的进程:查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服务运行。
杀死进程:当需要停止服务时,会通过正确关闭命令来停止服务。只有当正确终止进程的手段失效的情况下,才会考虑使用kill命令杀死进程。
ps命令是用来静态显示系统中进程的命令。
a:显示一个终端的所有进程,除了会话引线
u:显示进程的归属用户及内存的使用情况
x:显示没有控制终端的进程
-l:长格式显示,显示更加详细的 信息
-e:显示所有进程,和-A作用一致
ps aux #查看系统中所有进程,使用BSD操作系统格式
USER:该进程是由哪个用户产生的
PID:进程的ID号
%CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEN:该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ:该进程占用虚拟内存的大小,单位KB
RSS:该进程占用实际物理内存的大小,单位KB
TTY:该进程是在哪个终端中运行的,其中tty1-tty6是本地字符界面终端,tty7是图像终端(alt+F1-F7切换),pts/0-255代表虚拟终端,一般是远程连接的终端。
STAT:进程状态
D:不可被唤醒的睡眠状态,通常用于I/0情况
R:该进程正在运行
S:该进程在睡眠状态,可被唤醒
T:停止状态,可能是在后台暂停或进程在除错状态
W:内存交互状态(从2.6内核开始无效)
X:死掉的进程(应该不会出现)
Z:僵尸进程。进程已经终止,但是部分进程还在内存当中
<:高优先级(以下状态在BSD格式当中出现)
N:低优先级
L:被锁入内存
s:包含子进程
l:多线程
+:位于后台
START:该进程的启动时间
TIME:该进程占用CPU的运算时间
COMMAND:产生此进程的命令名
ps –le #查看系统中所有进程,使用Linux标准命令格式
F:进程标志,说明进程的权限,常见的标志有:
1:进程可以复制,但是不能执行
4:进程使用超级用户权限
S:进程状态。具体的状态和“psaux”命令中STAT状态一致
UID:进程是哪个UID用户调用运行的
PID:进程的ID号
PPID:父进程的ID号
C:该进程的CPU使用率,单位是百分比
PRI:进程的优先级,数值越小该进程优先级越高,越快被CPU执行
NI:进程的优先级,也是数值越小越早被执行
ADDR:该进程在内存的哪个位置
SZ:该进程占用多大内存
WCHAN:该进程是否运行。“-”代表正在运行
TTY:该进程由哪个终端产生
TIME:该进程占用CPU的运算时间
CMD:产生此进程的命令名
top [选项] #动态查看进程
-d秒数:指定top命令每隔几秒更新,默认是3秒
-b:使用批处理模式输出。一般和“-n”选项合用,用于把top命令重定向到文件中
-n次数:指定top命令执行的次数,一般和“-b”选项合用
-p:指定PID,只查看某个PID的进程
-s:使top在安全模式运行,避免在交互模式中出现错误
-u用户名:只监听某个用户的进程
在top命令的交互模式当中可以执行的命令
?或h:显示交互模式的帮助
P:以CPU使用率排序,默认就是此项
M:以内存的使用率排序
N:以PID排序
T:按照CPU的累积运算时间排序,也就是用TIME+项排序
k:按照PID号,给予某个进程一个信号。一般用于终止某个进程,信号9是强制终止的信号
r:按照PID号,给某个进程重设优先级值(只能修改Nice优先级,不能修改priority的优先级)
q:退出top
命令的输出主要分为两大部分:第一部分是前五行,显示的是整个系统的资源使用状况,通过这些输出判断服务器的健康状态;第二部分从第六行开始,显示的是系统中进程的信息。
第一行信息为任务队列信息:系统当前时间;系统的运行时间;当前登录用户数;系统在之前1分钟,5分钟,15分钟的平均负载(如果CPU是单核,则这个数超过1,就是高负载,一般认为不应该超过服务器CPU的核数)
第二行为进程信息:系统中的进程总数;正在运行的进程数;睡眠的进程;正在停止的进程;僵尸进程,如果不是0,需要手工检查僵尸进程。
第三行为CPU信息:用户模式占用的CPU百分比;系统模式占用的CPU百分比;改变过优先级的用户进程占用的CPU百分比;空闲CPU的CPU百分比;等待输入/输出的进程占用的百分比;硬中断请求服务占用的CPU百分比;软中断请求服务占用的CPU百分比;st虚拟时间百分比,就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。
第四行为物理内存信息:物理内存的总量,单位为KB;已经使用的物理内存数量;空闲的物理内存数量;作为缓冲的内存数量。
第五行为交换分区信息:交换分区(虚拟内存)的总大小;已经使用的交换分区的大小;空闲交换分区的大小;作为缓存的交换分区的大小。
第二部分输出,主要是系统进程信息
PID:进程ID
USER:该进程所属用户
PR:优先级,数值越小优先级越高
NI:优先级,数值越小优先级越高
VIRT:该进程使用的虚拟内存的大小,单位KB
RES:该进程使用的物理内存的大小,单位KB
SHR:共享内存大小,单位KB
S:进程状态。
%CPU:该进程占用CPU资源的百分比
%MEN:该进程占用物理内存的百分比
TIME+:该进程总共占用的CPU时间
COMMAND:进程的命令名
pstree [选项]
-p:显示进程的PID
-u:显示进程的所属用户
kill –l /man 7 signal #查看进程管理的命令
信号代号 | 信号名称 | 说明 |
1 | SIGHUP | 该信号让进程立即关闭,然后重新读取配置文件之后重启 |
2 | SIGINT | 程序终止进程,用于终止前台进程。相当于输出ctrl+c快捷键 |
8 | SIGFPE | 在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其他所有的算术的错误 |
9 | SIGKILL | 用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程 |
14 | SIGALRM | 始终定时信号,计算的是实际时间或时钟时间,alarm函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill命令的默认信号。 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行,本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入ctrl+z快捷键,不能被阻断 |
kill [信号] PID
killall [选项] [信号] 进程名
-i:交互式,询问是否要杀死某个进程
-I:忽略进程名的大小写
pkill [选项] [信号] 进程名
-t终端号:按照终端号踢出用户(pkill -9 –t pts/1)
其中PRI代表Priority,NI代表Nice。这两个值都是优先级,数字越小代表该进程越优先被CPU处理。不过PRI的值是由内核动态调整的,用户不能直接修改。只能通过修改NI的值,来影响PRI的值,间接的调整进程优先级。PRI和NI的关系是:PRI(最终值)=PRI(原始值)+NI。修改NI值需注意:
NI的值的范围是-20到19;
普通用户调整NI值的范围是0到19,而且只能调整自己的进程;
普通用户只能调高NI值,而不能降低,如原本NI值为0,则只能调整为大于0;
root用户才能设定进程NI值为负值,而且可以调整任何用户的进程。
nice命令可以给新执行的命令直接赋予NI值,但是不能修改已经存在进程的NI值。
nice [选项] 命令
-nNI值:给命令赋予NI值
renice命令是修改已经存在进程的NI值的命令
renice [优先级] PID
后台管理注意事项:
前台是指当前可以操控和执行命令的这个操作环境,后台是指工作可以自行运行,但是不能直接用ctrl+c来终止它,只能使用fg/bg来调用工作;
当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作。如tty1登录的终端是不能管理tty2终端中的工作的;
放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作。如果把ls命令放入后台执行,它很快就会执行完成,我们很难操作它。
放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行。比如vi命令放入后台只能暂停,而不能执行,因为vi需要前台输入信息。top命令也不能放入后台执行,而只能放入后台暂停,因为top命令需要和前台有交互。
命令 & #把命令放入后台执行
在命令后面加入“空格&”,这种方法放入后台的命令,在后台是执行状态。放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的。
命令放入后台执行,每个后台命令会分配一个工作号和进程号。[工作号] 进程号
如果终端上出现[1]+ Done,证明这个后台任务已经完成,当然命令如果有执行结果,也会显示到操作终端上。[1]是这个命令的工作号,+号代表这个任务是最近一个被放入后台的工作。倒数第二个放入后台的任务用“-”表示,之后的后台任务没有符号。
在命令执行过程中按ctrl+z快捷键,命令在后台是暂停状态,使用这种方法放入后台的命令,就算是不和前台有交互,能在后台执行的命令,也是暂停状态。
jobs [-l] #查看后台工作
-l:显示工作的PID
fg %工作号 #将后台暂停的工作恢复到前台执行
%工作号:%可以省略,注意工作号和PID的区别
bg %工作号 #把后台暂停的工作恢复到后台执行
后台命令脱离登录终端运行:
第一种方法是把需要后台执行的命令加入/etc/rc.local文件,让系统在启动时执行这个后台程序。这种方法的问题是,服务器不能随便重启,万一有临时后台任务,就不能执行;
第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的;
最后一种方法是使用nohup命令。nohup命令的作用就是让后台工作在离开操作终端时,也能够正确的在后台执行。
nohup 命令 &
vmstat [刷新延时 刷新次数] #监控系统资源
procs:进程信息字段
r:等待运行的进程数,数量越大,系统越繁忙
b:不可被唤醒的进程数量,数量越大, 系统越繁忙
memory:内存信息字段
swpd:虚拟内存的使用情况,单位KB
free:空闲的内存容量,单位KB
buff:缓冲的内存容量,单位KB
cache:缓存的内存容量,单位KB
swap:交换分区的信息字段
si:从磁盘中交换到内存中数据的数量,单位KB
so:从内存中交换到磁盘中数据的数量,单位KB。此两个数越大,证明数据需要 经常在磁盘和内存之间交换,系统性能越差
io:磁盘读写信息字段
bi:从块设备读入数据的总量,单位是块
bo:写到块设备的数据总量,单位是块。此两个数越大,代表系统的I/0越繁忙
system:系统信息字段
in:每秒被中断的进程次数
cs:每秒钟进行的事件切换次数,此两个数越大,代表系统与接口设备的通信非常 繁忙
CPU:CPU信息字段
us:非内核进程消耗CPU运算时间的百分比
sy:内核进程消耗CPU运算时间的百分比
id:空闲CPU的百分比
wa:等待I/0所消耗的CPU百分比
st:被虚拟机所盗用的CPU百分比
dmesg #显示开机时的内核检测信息
free [选项] #查看内存使用状态
-b:以字节单位显示
-k:以KB单位显示,默认就是
-m:以MB单位显示
-g:以GB单位显示
第一行:totle是总内存数,used是已经使用的内存数,free是空闲的内存数,shared是多个进程共享的内存总数,buffers是缓冲内存数,cached是缓存内存数。
第二行:-/buffers/cache的内存数,相当于第一行的used-buffers-cached。+/buffers/cache的内存数,相当于第一行的free+buffers+cached。
第三行:totle是swap的总数,used是已经使用的swap数,free是空闲的swap数。
CPU的主要信息保存在/proc/cpuinfo这个文件中,只要查看这个文件,就可以知道CPU的相关信息。
查询本机登录信息,用w或who命令
JCPU:指的是和该终端连接的所有进程占用的CPU运算时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。
uptime #显示系统的启动时间和平均负载,在top命令和w命令中都可以看到
uname [选项] #查看内核的相关信息
-a:查看系统所有相关信息
-r:查看内核版本
-s:查看内核名称
如果想判断当前系统的位数,可以通过file命令判断系统文件(主要是系统命令)的位数来推断系统的位数。
如果想查询当前Linux系统的发行版本,可以使用“lsb_release -a”命令查看
lsof [选项] #列出进程调用或打开的文件的信息
-c字符串:只列出以字符串开头的进程打开的文件
+d目录名:列出某个目录中,所有被进程调用的文件
-u用户名:只列出某个用户的进程打开的文件
-ppid:列出某个PID进程打开的文件
lsof 文件绝对路径 #查询某个文件被哪个进程调用
系统定时任务
at一次性执行定时任务,at命令要想正确执行,需要atd服务的支持,atd服务是独立的服务。at的访问控制是依靠/etc/at.allow(白名单)和/etc/at.deny文件(黑名单)这两个文件来实现的,规则:
如果系统中有/etc/at.allow文件,那么只有写入/etc/at.allow文件中的用户可以使用at命令,其他用户不能使用at命令(/etc/at.deny文件会被忽略,/etc/at.allow文件优先级更高);
如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件,那么写入/etc/at.deny文件中的用户不能使用at命令,其他用户可以使用at命令,不过这个文件对root不生效;
如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。
系统中默认是只有/etc/at.deny文件,而且这个文件是空的,这样的话系统中所有的用户都可以使用at命令。不过如果打算控制用户的at命令权限,把用户写入/etc/at.deny文件即可。
/etc/at.allow文件的权限更高,如果/etc/at.allow文件存在,则/etc/at.deny文件失效。/etc/at.allow管理行为更加严格,因为只有写入这个文件的用户才能使用at命令,如果需要禁用at命令的用户较多,则可以把少数用户写入这个文件。/etc/at.deny文件的管理较为松散,如果允许使用at命令的用户较多,则可以把禁用的用户写入这个文件。不过两个文件都不能对root用户生效。
at [选项] 时间
-m:当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
-c工作号:显示该at工作的实际内容
at支持的时间格式
HH:MM 在指定的“小时:分钟”执行命令
HH:MMYYYY-MM-DD 在指定的“小时:分钟 年-月-日”执行
HH:MM[am|pm][month] [date] 在指定的“小时:分钟[上午|下午][月][日]”执行
HH:MM[am|pm]+[minutes|hours|days|weeks] 在指定的时间“再加多久执行”
如at now +1 minutes
at> /root/hello.sh >>/root/hello.log
at> <EOT>
atq #查询当前服务器上的at工作
atrm [工作号] #删除指定的at任务
crontab循环执行定时任务,crontab命令是需要crond服务支持的,crond服务同样是独立的服务。crontab命令和at命令类似,也是通过/etc/cron.allow和/etc/cron.deny文件来限制某些用户是否可以使用crontab命令的。原则:
当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。由此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高。
当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用crontab命令,没有写入文件的用户可以使用crontab命令。
这个规则和at规则一样,同样/etc/cron.allow文件的优先级比/etc/cron.deny文件的优先级高,Linux中默认只有/etc/cron.deny文件。
每个用户都可以实现自己的crontab定时任务
crontab [选项]
-e:编辑crontab定时任务
-l:查询crontab任务
-r:删除当前用户所有crontab任务,如果有多个任务,只删除一个,用crontab -e
-u用户名:修改或删除其他用户的crontab任务,只有root可用
*****执行的任务
项目 | 含义 | 范围 |
第一个“*” | 一小时当中的第几分钟 | 0-59 |
第二个“*” | 一天当中的第几小时 | 0-23 |
第三个“*” | 一个月当中的第几天 | 1-31 |
第四个“*” | 一年当中的第几个月 | 1-12 |
第五个“*” | 一周当中的星期几 | 0-7(0和7都代表星期日) |
* 代表任何时间,比如第一个“*”代表一小时中每分钟都执行一次
, 代表不连续的时间
- 代表连续的时间范围
*/n 代表每隔多久执行一次
crontab –e是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务。有些定时任务需要系统执行,就需要编辑/etc/crontab这个配置文件
*****执行者身份 命令
在CentOS 5.x版本中,/etc/crontab文件会使用保存在/usr/bin/run-parts脚本执行/etc/cron.{daily,weekly,monthly}目录中的所有文件。想让脚本定时执行,可以不用手工写定时任务,只需要给这个脚本赋予执行权限,放入/etc/cron.{daily,weekly,monthly}目录中就可以了。
crontab定时任务注意:
六个选项都不能为空,必须填写,如果不确定使用“*”代表任意时间;
crontab定时任务,最小有效时间是分钟,最大时间范围是月;
在定义时间时,日期和星期最好不要在一条定时任务中出现,因为他们都是以天为单位,同时出现代表或;
在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径。
anacron会使用一天,七天,一个月作为检测周期,用来判断是否有定时任务在关机之后没有执行,如果有这样的任务,anacron会在特定的时间重新执行这些定时任务。在系统的/var/spool/anacron/目录中存在cron.{daily,weekly,monthly}文件,这些文件都保存着anacron上次执行时的时间。anacron会去读取这些文件中的时间,然后和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,就说明有定时任务漏掉了没有被执行,这时anacron会介入而执行这个漏掉的定时任务,从而保证在关机时没有被执行的定时任务不会被漏掉。
在CentOS 6.x中,使用cronie-anacron取代了vixie-cron软件包。/etc/cron.{ daily,weekly,monthly }目录中的定时任务程序只会被anacron调用,不会被cron调用,从而保证这些定时任务只会在每天、每周或每月被定时执行一次,而不会重复执行。
anacron不再是单独的服务,而变成了系统命令。需使用anacron命令来管理anacron工作
anacron [选项] [工作名]
-s:开始anacron工作,依据/etc/anacrontab文件中的设定的延迟时间执行
-n:立即执行/etc/anacrontab中的所有的工作,忽略所有的延迟时间
-u:更新/var/spool/anacron/cron.{ daily,weekly,monthly }文件中的时间戳,但不执行任何 工作
工作名:是依据/etc/anacrontab文件中定义的工作名
在Linux中,不需要执行任何anacron命令,只需要配置好/etc/anacrontab文件,系统就会依赖这个文件中的设定来通过anacron执行定时任务。
周期天数 强制延迟时间(分) 工作名称 实际执行的命令
以cron.daily工作来说明/etc/anacrontab的执行过程:
首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间;
和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作;
执行这个工作只能在03:00-22:00之间;
执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间;
使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件。
在CentOS 6.x中日志服务已经由rsyslogd取代了原先的syslogd服务,rsyslogd相比syslogd具有一些新的特点:
基于TCP网络协议传输日志信息;
更安全的网络传输方式;
有日志消息的及时分析框架;
后台数据库;
配置文件中可以写简单的逻辑判断;
日志文件
/var/log/cron 记录了系统定时任务相关的日志
/var/log/cups/ 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息。也可以使用dmesg命令直接查看
/var/log/btmp 记录错误登录的日志。二进制文件,用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志。二进制文件,用lastlog 命令查看
/var/log/mailog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数 重要信息,如果系统出现问题,首先要检查的就是这个日志文件
/var/log/secure 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如 系统的登录,ssh的登录,su切换用户,sudo授权,甚至添加用户和修改 用户密码都会记录在这个日志文件中
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机 事件。二进制文件,用last命令查看
/var/run/utmp记录当前已经登录的用户的信息。随着用户的登录和注销而不断变化,只 记录当前登录用户的信息。用w,who,users命令查看
除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。这些日志是各个服务使用自己的日志管理文档来记录自身日志。
/var/log/httpd/ RPM包安装的apache服务的默认日志目录
/var/log/mail/ RPM包安装的邮件服务的额外日志目录
/var/log/samba/ RPM包安装的samba服务的日志目录
/var/log/sssd/ 守护进程安全服务目录
只要是由日志服务rsyslogd记录的日志文件,他们的格式是一样的。基本日志格式包含以下四列:
事件产生的时间;
发生事件的服务器的主机名;
产生事件的服务名或程序名;
事件的具体位置。
/etc/rsyslog.conf配置文件格式
authpriv.* /var/log/secure
服务名称[连接符号]日志等级 日志记录位置
rsyslogd服务可以识别的日志服务
auth(LOG_AUTH) 安全和认证相关信息(不推荐使用authpriv替换)
authpriv(LOG_AUTHPRIV) 安全和认证相关信息(私有的)
cron(LOG_CRON) 系统定时任务cront和at产生的日志
daemon(LOG_DAEMON) 和各个守护进程相关的日志
ftp(LOG_FTP) ftp守护进程产生的日志
kern(LOG_KERN) 内核产生的日志(不是用户进程产生的)
local0-local7(LOG_LOCAL0-7)为本地使用预留的服务
lpr(LOG_LPR) 打印产生的日志
mail(LOG_MAIL) 邮件收发信息
news(LOG_NEWS) 与新闻服务器相关的日志
syslog(LOG_SYSLOG) 由syslogd服务产生的日志信息
user(LOG_USER) 用户等级类别的日志信息
uucp(LOG_UUCP) uucp子系统的日志信息,uucp是早期linux系统进行数据传递的 协议,后来也常用在新闻组服务中
“.”代表只要比后面的等级高的(包含该等级)日志都记录下来。
“.=”代表只记录所需等级的日志,其他等级的都不记录。
“.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。
日志等级
debug(LOG_DEBUG) 一般的调试信息说明
info(LOG_INFO) 基本的通知信息
notice(LOG_NOTICE) 普通信息,但是有一定的重要性
warning(LOG_WARNING) 警告信息,但是还不会影响到服务或系统的运行
err(LOG_ERR) 错误信息,一般达到err等级的信息已经可以影响到服务或系统的运行了
crit(LOG_CRIT) 临界状况信息,比err等级还要严重
alert(LOG_ALERT) 警告状态信息,比crit还要严重。必须立即采取行动
emerg(LOG_EMERG) 疼痛等级,系统已经无法使用了
* 代表所有日志等级
none 忽略这个日志服务,该服务的所有日志都不再记录
日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印,或者输出到远程日志服务器。日志的记录位置也是固定的:
日志文件的绝对路径,最常见的日志保存方法。
系统设备文件,如果日志文件保存位置是打印机设备,当有日志时就会在打印机打印。
转发给远程主机。可以使用TCP协议和UDP协议传输日志信息,有两种发送格式。如“@192.168.216.201:514”,使用UDP协议;“@@192.168.216.201:514”,使用TCP协议。514是日志服务默认端口。(服务器端配置文件要开启514端口)
用户名。如“root”,就会把日志发送给root用户,当然root要在线,否则就收不到日志信息了。发送日志给用户时,可以使用“*”代表发送给所有在线用户。如果需要把日志发送给多个在线用户,用户名之间用“,”分隔。
“~”,代表这个日志不会记录,而被直接丢弃。
日志服务是通过主机名来区别不同的服务器的,如果配置了日志服务器,需要给所有的服务器分配不同的主机名。
日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。日志文件命名主要依靠/etc/logrotate.conf配置文件中“dateext”参数:
如果配置文件中拥有“dateext”参数,那么日志文件会用日期作为日志文件的后缀。这样日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志文件个数,删除多余的日志文件即可。
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
轮替日志配置的独立参数优先级更高。
主要参数:
daily 日志的轮替周期是每天
weekly 日志的轮替周期是每周
monthly 日志的轮替周期是每月
rotate数字 保留的日志文件的个数,0指没有备份
compress 日志轮替时,旧的日志进行压缩
createmode owner group 建立新的日志,同时指定新日志的权限与所有者和所属组
mailaddress 当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok 如果日志不存在,则忽略该日志的警告信息
notifempty 如果日志为空文件,则不进行日志轮替
minsize 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就 算时间达到也不轮替
size 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext 使用日期作为日志轮替文件的后缀
sharedscripts 在此关键字之后的脚本只执行一次
prerotate/endscript 在日志轮替之前执行脚本命令
postrotate/endscript 在日志轮替之后执行脚本命令
prerotate和postrotate主要用于在日志轮替的同时,执行指定的脚本,一般用于日志轮替之后重启服务。如果日志是写入rsyslog服务的配置文件,那么把新日志加入logrotate后,一定要重启rsyslog服务,否则虽然新日志建立了,但是数据还是写入旧的日志当中。如果日志不是被rsyslog管理,被服务自己管理,也要重启服务。
把自己的日志加入日志轮替。第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略,从而把日志加入轮替;第二种方法是在/etc/logrotate.d/目录中新建该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务。/etc/cron.daily/目录中有logrotate文件,系统每天都会执行/etc/cron.daily/logrotate文件,logrotate命令会依据/etc/logrotate.conf配置文件的配置,来判断配置文件中的日志是否已经符合了日志轮替的条件,如果符合了日志轮替的条件,日志就会进行转储,所以日志轮替还是由crond服务发起的。
logrotate [选项] 配置文件名
-v:显示日志轮替过程
-f:强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有的日 志进行轮替
系统自带日志分析工具logwatch.
Linux中需要备份的数据:
/root/目录
/home/目录
/var/spool/mail/目录
/etc/目录
其他重要目录
apache需要备份内容:
配置文件。RPM包安装的apache,需要备份/etc/httpd/conf/httpd.conf;源码包安装的apache则备份/usr/local/apache2/conf/httpd.conf。
网页主目录。RPM包安装的apache,需要备份/var/www/html/目录中所有数据;源码包安装的apache需要备份/usr/local/apache2/htdocs/目录中所有数据。
日志文件。RPM包安装的apache,需要备份/var/log/httpd/目录中所有日志;源码包安装的apache需要备份/usr/local/apache2/logs/目录中所有日志。
MySQL服务需要备份内容:(主要备份数据库内容)
源码包安装的mysql,数据库安装到了/usr/local/mysql/data/目录中,只要备份此目录
RPM包安装的mysql,数据库默认安装到了/var/lib/mysql/目录中,如果需要备\\则需要备份这个目录。
完全备份就是把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录。完全备份的好处是数据恢复方便,因为所有的数据都在同一个备份中,所以只要恢复完全备份,所有的数据都会被恢复。如果完全备份备份的是整块硬盘,那么甚至都不需要数据恢复,只要把备份硬盘安装上,服务器就会恢复正常。可是完全备份的缺点也很明显,那就是需要备份的数据量较大,备份时间较长,占用的空间较多,所以完全备份不可能每天执行。
我们一般会对关键服务器进行整盘完全备份,如果出现问题,可以很快的使用备份硬盘进行替换,从而减少损失。甚至会对关键服务器搭设一台一模一样的服务器,这样只要远程几个命令(或使用shell脚本自动检测,自动进行服务器替换),备份服务器就会接替原本的服务器,使故障响应时间缩短为最短。
完全备份随着数据量的加大,备份耗费的时间和占用的空间会越来越多,所以完全备份不会也不能每天进行。这时增量备份的作用就体现了出来。增量备份是指先进行一次完全备份,服务器运行一段时间之后,比较当前系统和完全备份数据之间的差异,只备份有差异的数据而已。服务器继续运行,再经过一段时间之后,进行第二次增量备份,第二次增量备份时,当前系统是和第一次增量备份的数据进行比较,也是只备份有差异的数据。第三次增量备份是和第二次增量备份的数据进行比较,以此类推。
增量备份的好处是每次备份需要备份的数据较少,耗时较少,占用的空间较少。坏处是数据恢复比较麻烦。当数据恢复时,就要先恢复完全备份的数据,再依次恢复第一次增量备份的数据,第二次增量备份的数据和第三次增量备份的数据,最终才能恢复所有的数据。
差异备份也要先进行一次完全备份,但是和增量备份不同的地方是,每次差异备份都是备份和原始的完全备份不同的数据。也就是说差异备份每次备份的参照物都是原始的完全备份,而不是上一次的差异备份。
差异备份相比较而言,既不像完全备份一样把所有的数据都进行备份,也不像增量备份数据恢复时那么麻烦。只要先恢复完全备份的数据,再恢复差异备份的数据即可。不过随着时间的增加,和完全备份相比,变动的数据越来越多,那么差异备份也可能会变得数据庞大,备份缓慢,占用空间较大。
dump命令可以支持0-9十个备份级别。其中0级别指的就是完全备份,1-9级别都是增量备份级别。也就是说,当备份一个数据时,第一次备份应该使用0级别,会把所有数据完全备份一次。第二次备份时就可以使用1级别了,它会和0级别比较,把0级别备份之后变化的数据进行备份。第三次备份时,使用2级别,2级别是和1级别比较,把1级别备份之后变化的数据进行备份,依此类推。需要注意,只有备份整个分区或整块硬盘时,才能支持1-9的增量备份级别。如果只是备份某个文件或不是分区的目录,则只能使用0级别进行完全备份。
dump [选项] 备份之后的文件名 原文件或目录
-level:0-9十个备份级别(-后直接加数字)
-f文件名:指定备份之后的文件名
-u:备份成功之后,把备份时间记录在/etc/dumpdates文件中
-v:显示备份过程中更多的输出信息
-j:调用bzlib库压缩备份文件,就是把备份文件压缩为.bz2格式,默认压缩等级是2
-W:显示允许被dump的分区的备份等级
及备份时间
dump命令也可以用作备份文件或目录,不过只要不是备份分区,那么就只能使用0级别进行完全备份,而不再支持增量备份。同时,不能使用“-u”选项,更新分区的备份时间,也不能用“dump -W”命令查询到文件或目录的备份。
restore [模式选项] [选项]
模式选项:-C:比较备份数据和实际数据的变化。如果实际数据中的现有数据发生了变化, 这个选项能够检测这个变化。但是如果实际数据新增了数据,这个选项是不 能检测到变化的
-i:进入交互模式,手工选择需要恢复的文件
-t:查看模式,用于查看备份文件中拥有哪些数据
-r:还原模式,用于数据还原
选项:-f:指定备份文件的文件名
dd if=“输入文件” of=“输出文件” bs=“数据块” count=“数量”
if:定义输入数据的文件,也可以是输入设备
of:定义输出数据的文件,也可以是输出设备
bs:指定数据块的大小,也就是定义一次性读取或写入多少字节,模式数据块大小是 512字节
count:指定bs的数量
conv=标志:依照标志转换文件
dd命令还可以用来直接备份某个分区,可以把分区设备成为一个备份文件,也可以直接备份成另一个新的分区。如果想把分区直接备份成另外一个分区,就需要生成一个新的分区,这个分区的大小不能比源分区小,只能和源分区大小一致或比它大。也可以备份整块硬盘。如果需要备份的是光盘,可以使用dd命令制作光盘的iso镜像。