Linux系统管理
Linux系统管理技巧
1. 监控系统的状态
① 使用w命令查看当前系统的负载

第一行从左至右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载。从第二行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。load average:
第1个数值表示1分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载 值,第3个数值表示15分钟内系统的平均负载值。我们着重看第1个值,它表示单位 时间段内使用CPU的活动进程数(在这里其实就是1分钟内),值越大就说明服务器压 力越大。一般情况下,这个值只要不超过服务 器的CPU数量就没有关系。如果服务器 的CPU数量为8,那么值小于8就说明当前服务器没有压力。查看服务器有几个CPU的方 法如下所示:

/proc/cpuinfo这个文件记录了CPU的详细信息。所以查看当前系统有几 个CPU,使用命令grep -c 'processor' /proc/cpuinfo。

査看有几颗物理CPU时使用命令grep -c ‘physical id’ /proc/cpuinfo。

② 用vmstat命令监控系统的状态

- procs显示进程的相关信息。
■ r (run):表示运行或等待CPU时间片的进程数。
■ b (block):表示等待资源的进程数,这个资源指的是I/O、内存等。
- memory显示内存的相关信息。
■ swpd:表示切换到交换分区中的内存数量,单位为KB。
■ free:表示当前空闲的内存数量,单位为KB。
■ buff:表示(即将写入磁盘的)缓冲大小,单位为KB。
■ cache:表示(从磁盘中读取的)缓存大小,单位为KB。
- swap显示内存的交换情况。
■ si:表示由交换区写入内存的数据量,单位为
■ so:表示由内存写入交换区的数据量,单位为KB。
- i显示磁盘的使用情况。
■ bi:表示从块设备读取数据的量(读磁盘),单位为KB。
■ bo:表示从块设备写入数据的量(写磁盘),单位为KB。
- system显示采集间隔内发生的中断次数。
in:表示在某一时间间隔内观测到的每秒设备的中断次数。
■ in:表示在某一时间间隔内观测到的每秒设备的中断次数。
■ cs:表示每秒产生的上下文切换次数。
□ cpu显示CPU的使用状态。
■ US:显示用户下所花费CPU的时间百分比。
■ sy:显示系统花费CPU的时间百分比。
■ id:表示CPU处于空闲状态的时间百分比。
■ wa:表示I/O等待所占用CPU的时间百分比。
■ st:表示被偷走的CPU所占百分比(一般都为0,不用关注)。
③ 用top命令显示进程所占的系统资源

top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(CPU、 内存、磁盘I/O等)最高的进程放到最前面。上例中,top命令打印出了很多 信息,包括系统负载(load average).进程数(Tasks)、CPU使用情况、内存使用情况以 及交换分区使用情况。这些内容其实可 以通过其他命令来查看,用top重点查看的还是下 面的进程使用系统资源的详细状况,其中你需要关注%CPU、%MEM和COMMAND这几项所代表 的意义。RES这一项为进程所占的内存大小,而%MEM这一项为使用内存的百分比。在top 状态下,按Shift+m键可以按照内存使用大小排序。按数字1可以列岀所有核 CPU的 使用状态,按q键可以退出top。
另外,阿铭经常用到命令top -bnl.它表示非动态打印系统资源的使用情况,可以用在 shell脚本 中。示例如下:
④ 用sar命令监控系统状态
sar命令很强大,它可以监控系统几乎所有资源的状态,比如平均负载、网卡流量、磁盘状态、内 存使用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时 刻的系统状态信息。
1.查看网卡流量sar -n DEV

实时査看 网卡流量 sar -n DEV 1 5

使用-f选项查看某一天的网卡流量历史

2.查看历史负载sar -q

⑤ 用nload命令查看网卡流量

最上面一行为网卡名字以及IP地址,按向右的箭头可以查看其他网卡的网络流量,Incoming为进入网卡的流量,Outgoing为网卡出去的流量。
⑥ 用free命令查看内存使用状况

□ total:内存总大小。
□ used:真正使用的实际内存大小。
□ free:剩余物理内存大小(没有被分配,纯剩余)。
□ shared:共享内存大小,不用关注它。
□ buff/cache:分配给buffer和cache的内存总共有多大。关于buffer和cache大家也许有一些疑 惑,因为字面意思上两者很相近。阿铭教你一个很容易区分这两者的方法,buffer和cache都 是一部分内存,内存的作用就是缓解CPU和10(如,磁盘)的速度差距的,你可以这样理解: 数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer; CPU要计算时,需要把数据
从磁盘中读出来,临时先放到内存中,这部分内存就是cache。
□ available:系统可使用内存有多大,它包含了freeo Linux系统为了让应用跑得更快,会预 先分配一部分内存(buffer/cache )给某些应用使用,虽然这部分内存并没有真正使用,但也 已经分配岀去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内 存拿来用的。所以还没有被占用的这部分buffer和cache再加上行ee就是available。
⑦ 用ps命令查看系统进程

1) PID:表示进程的ID,终止一个进程时,直接kill+进程的pid。
2) STAT:进程的状态,分为以下几种:
3) D:不能中断的进程。
4) R:正在运行中的进程。
5) S:已经中断的进程。
6) T:已经停止或暂停的进程。
7) W:没有足够的内存页分配。
8) X:已经死掉的进程。
9) Z:僵尸进程,即杀不掉、打不死的垃圾进程,占用系统一点资源。
10) <:高优先级进程。
11) N:低优先级进程。
12) L:在内存中被封锁了内存分页。
13) s:主线程。
14) l:多线程进程。
15) +:在前台运行的进程,比如现在的ps aux。
⑧ 用netstat命令查看网络状况
用来打印网络连接状况、系统所开放端口、路由表等信息。如果没有该命令,可用# yum install -y net-tools命令安装,安装之后查看网络状况,如下图所示:

2. 抓包工具
① tcpdump工具

第三列和第四列是我们应该重点关注的,它们显示的信息为哪一个IP+端口号在连接哪一个IP+端口号。
1) -i选项后面加设备名称,如果想抓取其他网卡的数据包,后面则要跟其他网卡的名字。
2) -nn选项是让第三列和第四列显示成“IP+端口号”的形式,如果不加-nn则显示为“主机名+服务名称”。
3) -c选项的作用是指定抓包数量,抓够了自动退出,不用人为取消。
例:# tcpdump -nn -i eno16777736 port 22 //只抓22端口的包。
② wireshark工具
3.Linux网络相关
① 用ifconfig命令查看网卡IP
该命令不加任何选项时,只打印当前网卡IP的相关信息(如子网掩码、网关等),如果没有该命令可以使用# yum install -y net-tools安装。重启网卡的命令:# ifdown 网卡名;ifup 网卡名尽量使用# systemctl restart network来重启网卡。
② 给一个网卡设定多个IP
③ 查看网卡连接状态

这里显示link ok,就说明显卡为连接状态,如果显示no link,说明网卡坏了或者没有连接网线。
ethtool eno16777736也可以查看网卡的状态

④ 更改主机名

改完主机名只有下次登录时localhost才会变成tcq,要是重启主机名还会变回来,所以更改主机名的同时还需要更改相关的配置文件/etc/hostname

⑤ 设置DNS、
4.Linux的防火墙
① SELinux
临时关闭SELinux的方法为:
#setenforce
要想永久关闭需要更改配置文件/etc/selinux/config,需要把SELINUX=enforcing改成SELINUX=disabled,具体操作如下所示:

更改完该配置文件后,重启系统方可生效,可以使用getenforce命令获取当前SELinux的状态
② netfilter
关闭firewalld,开启之前版本的iptables,具体操作如下所示:
1)#systemctl stop firewalld //关闭fierwalld服务;
2)#systemctl disable firewalld //禁止firewalld服务开机启动;
3)#yum install -y iptables-services //安装iptables-services;
4)#systemctl enable iptables //让它开机启动;
5)#systemctl start iptables //启动iptables服务;
6)# iptables -nvL //查看规则;
7)# iptables -F;service iptables save //清除当前规则,但只是临时的,重启系 统或重启iptables服务后还会加载已经保存的规则,所以需要service iptables save 保存一下规则。
netfilter的5个表:
filter表:主要用于过滤包,是系统预设的表,该表有3个链:INPUT、OUTPUT以及FORWARD,INPUT链主要作用于进入本机的包,OUTPUT链作用于本机送出去的包,FORWARD链作用于那些根机无关的包。(该表用的最多)
nat表:主要用于网络地址转换,它也有3个链:PREROUTING链的作用是在包刚刚到达防火墙时该变它的目的地址,OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离防火墙时改变其源地址。(偶尔用到)
mangle表:主要用于给数据包做标记,然后根据标记去操作相应的包。(不需要太关注)
raw表:可以实现不追踪某些数据包,默认系统的数据包都会被跟踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。(阿铭没用过)
security表:在CentOS6中是没有的,它用于强制访问控制(MAC)的网络规则。(阿铭没用过)
netfilter的5个链:
PREROUTING:数据包进入路由表之前;
INPUT:通过路由表后目的地为本机;
FORWARDING:通过路由表后,目的地不为本机;
OUTPUT:由本机产生,向外转发;
POSTROUTIONG:发送到网卡接口之前。
Iptables基本语法:
(1)查看规则以及清除规则:
# iptables -t nat -nvL

-t选项后面跟表名,-nvL表示查看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。
#iptables -F
#iptables -Z
这里-F表是把所有规则全部删除,如果不加-t指定表,默认只清除filter表的规则,-Z表示把包以及流量计数器置零。
(2)增加/删除一条规则,用法如下:
#iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
这里没有加-t选项,所以针对的是filteer表,其中各个选项的作用如下:
-A/-D:表示增加/删除一条规则。
-I:表示插入一条规则,其实效果跟-A一样。
-p:表示指定协议,可以是tcp、udp和icmp。
--dport:跟-p一起使用,表示指定目标端口。
--sport:跟-p一起使用,表示指定源端口。
-s:表示指定源IP(可以是一个IP段)。
-d:表示指定目的IP(可以是一个IP段)。
-j:后面跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包。
-i:表示指定网卡(不常用)。
例1:#iptables -I INPUT -s 1.1.1.1 -j DROP
表示插入一条规则,把来自1.1.1.1的所有数据包丢掉,下例表示删除刚刚插入的规则:
#iptables -D INPUT -s 1.1.1.1 -j DROP
注意:删除一条规则时,必须和插入的规则一致,也就是说除了参数不一样,其他地方都一样。
例2:#iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP
这条命令表示把来自2.2.2.2并且时TCP协议到本机80端口的数据包丢掉。
注意:--dport和--sport必须和-p一起使用,否则会出错。
例3:当服务器上的iptables过多了,你想删除某一条规则,有一种简便的方法:如下图所示:

我们先查看规则,然后用# iptables -D INPUT 1这里-D后面依次跟链名、规则num,num就是查看规则时第一列的值,随后规则就被删除了。
-P:它表示预设策略,后面跟链名,策略内容或为DROP,或为ACCET,默认时ACCEPT。
例:#iptables -P INPUT DROP
这个策略一旦设定后,只有命令# iptables -P INPUT ACCEPT才能恢复成原始状态。
注意:如果你在连接远程服务器,不要去随便执行这个命令,因为一旦执行,远程连接就会断开。
nat表的应用:
假设机器上有两块网卡eth0和eth1,其中eth0的IP为10.0.2.68,eth1的IP为192.168.1.1,eth0连接了因特网,但eth1没有连接。现在有另一台机器(192.168.1.2)和eth1是互通的,那么怎样设置才能让连接eth1的这台机器连接因特网和10.0.2.68互通呢?
# echo “1”> /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
第一个命令涉及内核参数相关的配置文件,它的目的是打开路由转发功能,否则无法实现我们的应用。第二个命令则是iptables对nat表做了一个IP转发的操作。-o后面跟设备名,表示出口的网卡;MASQUERADE表示伪装。
保存和备份iptables规则:
#service iptables save

它会提示你防火墙规则保存在/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件,所以日后遇到备份防火墙的任务,只需要复制一份这个文件即可。
清除防火墙的所有规则,使用命令iptables -F固然可以,但是这样我们一旦重新设定规则,防火墙服务还是会自动开启,所以最好的办法还是停止防火墙服务,用# service iptables stop命令即可。
③ Firewalld
1)firewalld有两个基础概念:分别是zone和service,每一个zone里面有不同的iptables规则,默认一共9个zone,如下图所示:

这9个zone分别为:
drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。
block(限制):任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。
external(外部):特别是为路由器启用了伪装功能的外部网。
dmz(非军事区):用于你的非军事区内的计算机,此区域内可公开访问,可以有限地进入你的内部网络,仅仅接收经过选择的连接。
work(工作):用于工作区。
home(家庭):用于家庭网络。
Internal(内部):用于内部网络。
trusted(信任):可接受所有的网络连接。
2)关于zone的命令:
# firewalld-cmd--set-default-zone=work
//设定默认的zone为work
# firewalld-cmd --get-zone-of-interface=eno16777736 //查看指定网卡所在的zone
# firewalld-cmd --zone=public --add-interface=lo //给指定网卡设置zone
# firewalld-cmd --zone=dmz --change-interface=lo //针对网卡更改zone
# firewalld-cmd --zone=dmz --remove-interface=lo //针对网卡删除zone
# firewalld-cmd --get-active-zones
//查看系统所有网卡所在的zone
3)services:
services是针对一个服务做的iptables规则
这些service都是一个个配置文件定义的,配置文件的模板在/usr/lib/firewalld/services目录下
#firewall-cmd --list-services //查看当前zone下有哪些service。
#firewall-cmd --zone=public --list-services //查看指定zone下有哪些service。
5.Linux系统的任务计划
命令Crontab
1、crontab:控制任务计划
-u:表示指定某个用户,不加-u选项为当前用户。
-e:表示制定计划任务。
-l:表示列出计划任务。
-r:表示删除计划任务。
(1)创建一个任务计划
使用#crontab -e命令来编写任务计划,写入我们要实现的任务计划,从左到右的依次为:分、时、日、月、周和命令。
删除任务计划使用#crontab -r命令,这个命令会删除系统所有的计划,所以还是少用,可以使用-e选项进入crontab进行编辑。
注:任务计划里的时间是根据Linux系统中的时间来的,而不是Windows系统中的时间。
(2)查看crond服务是否启动:# systemctl status crond
看Active这一行,如果显示为active(running)则为启动,如果显示inactive(dead)则未启动,如下图所示:
6.Linux系统服务管理
① chkconfig服务管理工具
1、chkconfig:服务管理工具
#chkconfig --list 列出所有的服务及其各个级别的开启状态。
这里的数字,其中0作为shutdown,1作为重启至单用户模式,2表示无NFS支持的多用户模式,3表示完全多用户模式,4保留给用户自定义,5表示图形登录方式,6为重启。
更改某级别下的开启状态:
--level指级别,后面是服务名,然后是off或者on,--level后还可指定多个参数,该可以省略级别,默认就是针对2、3、4、5操作。
chkconfig还可以把某个服务加入系统服务或者删除,即“# chkconfig --add 服务名”或者“# chkconfig --del 服务名”,可以在# chkconfig --list中查找到。
② systemd服务管理
(1)关于服务一些常用命令:
#systemctl enable crond.service //让某个服务开机启动
#systemctl disable crond.service //不让开机启动
#systemctl status crond.service //查看服务状态
#systemctl start crond.service //启动某个服务
#systemctl stop crond.servie //停止某个服务
#systemctl restart crond.service //重启某个服务
#systemctl is-enabled crond //查看某个服务是否开机启动
(2)*unit:
上面这些文件可以分为以下几类:
service:系统服务
target:多个unit组成的组
device:硬件设备
mount:文件系统挂载点
automount:自动挂载点
path:文件或路径
scope:不是由systemd启动的外部进程
slice:进程组
snapshot:systemd快照
socket:进程间通信的套接字
swap:swap文件
timer:定时器。
以上每个文件都是一个unit,由这些unit才组成了系统的各个资源,以下是和unit有关的命令:
#systemctl list-units //列出正在运行的unit
#systemctl list-units --all //列出所有的unit。
#systemctl list-units --all --state=inactive //列出所有
inactive的unit
#systemctl list-units --all --type=service //列出所有状态的service
#systemctl list-units --type=service //列出状态为active的service
#systemctl is-active crond.service //查看某个unit是否active
(3)target:说白了就是启动多个unit
查看当前系统所有的target:# systemctl list-unit-files --type=target
查看一个target包含的所有unit:# systemctl list-dependencies multi-user.target
查看系统默认的target:# systemctl get-default
设置默认的target:# systemctl set-default multi-user.target
target对应0~6运行级别:
SysV运行级别 systemd target 备注
0 poweroff.target 关闭系统
1 rescure.target 单用户模式
2 multiuser.target 用户自定义级别,通常
3 multiuser.target 多用户,无图形
4 multiuser.target 用户自定义级别,通常识别级别为3
5 graphical.target 多用户,有图形,比级别3就多了一个图形
6 reboot.target 重启
(4)service、unit和target之间的关系:
一个service属于一种unit;
多个unit一起组成了一个target;
一个target里面包含了多个service。
7.Linux下的数据备份工具rsync
① rsync的命令格式
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
第三种格式是从远程目录同步数据到本地,第四步和第五种格式使用了两个冒号,这种格式和其他格式的验证方式不同。
② rsync常用选项
-a:这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-rlptgoD。
-r:表示以递归模式处理子目录。
-v:表示打印一些信息,比如文件列表、文件数量等。
-l:表示保留软链接。
-L:表示像对待常规文件一样处理软链接。
-p:表示保持文件权限。
-o:表示保持文件属主信息。
-g:表示保持文件属组信息。
-D:表示保持设备文件信息。
-t:表示保持文件时间信息。
--delete:表示删除DST中SRC没有的文件。
--exclude=PATTERN:表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)。
--progress:表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等。
-u:表示把DST中比SRC还新的文件排除掉,不会覆盖。
-z:加上该选项,将会在传输过程中压缩。
其中常用的有-a、-v、-z、--delete和--exclude。
(1)-a选项:
这里我们看到本来想把test1目录直接复制成test2,可结果却新建了test2目录,然后把test1放到test2中,为了避免这样的情况发生,要加/,加/的作用就是把目录下的东西复制到另一个目录下。
(2)-l选项的作用-v选项,是跳过了非普通文件123.txt,因为123.txt是一个软链接文件,如果不使用-l选项,系统则不理会软链接文件,虽然加-l选项能复制软链接文件,但软链接的目标文件却没有复制。
(3)L选项:用法如下图所示:

上图中加-L选项就可以把SRC中软链接的目标文件复制到DST。
(4)-u选项:
二者的创建时间是一样的,修改test2/1的创建时间,不加-u同步,然后test2/1的创建时间还是和test1/1一样,加上-u选项以后:
如上图所示,加上-u后就不会把test/1同步为test2/1了。
(5)--delete选项:
没有加--delete选项时当把test1/目录同步到test2/目录下后,test2/目录并没有删除123.txt,加上--delete后,test2/目录下的123.txt也被删除了。
还有一种用法就是:
如果在DST中增加文件了,而SRC当中没有这些文件,同步时加上--delete选项后同样会删除新增的文件。
(6)--exclude选项:
这里表示test1中的4不用传输。
(7)--progress:
它主要是用来观察rsync同步过程状态的。
③ rsync应用实例
8.Linux系统日志
日志记录了每天系统发生的各种各样的事情,比如检测系统状况、排查系统故障等。日志的主要功能时审计和检测,还可以实时地检测系统的状态,检测和追踪侵入者等。
① /var/log/messages
系统中有一个日志轮询的机制,每星期换一个日志,这是通过logrotate工具的控制来实现的,它的配置文件是/etc/logrotate.conf
注:如果没有特殊需求,不要轻易改动这个配置文件。
/var/log/messages是由rsyslogd这个守护进程产生的,如果停止这个服务则系统不会产生/var/log/messages,所以这个服务不要停止,rsyslogd服务的配置文件 为/etc/rsyslog.conf,这个文件定义了日志的级别,若没有特殊需求,这个配置文件也是不需要修改的。
② Dmesg:显示系统的启动信息
③ 安全日志
last:用来查看登录Linux的历史登录信息

上图中,从左至右依次为账户名称、登录终端、登录客户端IP、登录日期及时长。last命令输出的信息实际上是读取了二进制文件/var/log/wtmp,只是这个文件不能使用cat、Vim、head等工具查看。
9.xargs与exec
① xargs应用
1)它的好处在于可以把原本两步或者多步才能完成的任务仅用一步完成。

xargs常常和find一起用,比如查找当前目录创建时间大于10天的文件,然后再删除,如:# find . -mtime +10 | xargs rm
2)有些只能写脚本才能实现的,使用xargs就能一步完成。
xargs -n1 -i{} 类似于for循环,-n1表示逐个对象进行处理,-i{}表示用{}取代前面的对象,mv{} {}_bak相当于mv 1.txt 1.txt_bak。
② exec应用
它可以达到和xargs同样的效果,比如查找当前目录创建时间大于10天的文件并删除, 如下:# find . -mtime +10 -exec rm -rf {} \;
{ }代表前面find出来的文件,后面\作为;的转义符,否则shell会把分号作为该行命令的结尾。
10.screen I具介绍
① 使用nohup
防止进程意外中断,并且把输出的信息记录到nohup文件中。
② screen I 具的使用
screen是一个可以在多进程之间多路复用一个物理端口的窗口管理器。
#screen命令直接进入screen会话窗口
#screen -ls 查看已打开的screen会话
Ctrl+A,再按d退出该screen会话(只是退出,并没有结束,结束sreen会话要 按Ctrl+D键或者输入exit),退出后再次登录某个screen会话,可以使用命令 screen -r 【screen编号】。
浙公网安备 33010602011771号