1.1 监控系统的状态
1.1.1 使用 w 命令查看当前系统的负载
具体用法如下:
该命令显示的信息很丰富。第1行从左至右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载。从第2行开始的所有行则是告诉我们:当前登录的用户名及其登录地址等。
第1行的load average:后面的3个数值。第1个数值表示1分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载值,第3个数值表示15分钟内系统的平均负载值。第1个值,它表示单位时间段内使用CPU的活动进程数(在这里其实就是1分钟内),值越大就说明服务器压力越大。一般情况下,这个值只要不超过服务器的CPU数量就是没有关系。如果服务器的CPU数量为8,那么值小于8就说明当前服务器没有压力;否则就要关注一下。查看服务器有几个CPU的方法如图:
/proc/cpuinfo这个文件记录了CPU的详细信息。目前市面的服务器有很多是2颗多核CPU,在Linux看来,它就是2*n个CPU(这里的n为单颗物理CPU上有几核)。所以查看当前系统有几个CPU,我们可以使用命令 grep -c ’ processor ’ /proc/cpuinfo 。
1.1.2 用 vmstat 命令监控系统的状态
具体用法如下:
命令 w 查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。但无法判断具体是哪里(CPU、内存、磁盘等)有压力,所以这就用到了vmstat。vmstat命令打印的结果共分为6部分:procs、memory、swap、io、system和cpu。
-
procs显示进程的相关信息。
-
r(run):表示运行或等待CPU时间片的进程数。某一时刻1个CPU只能有一个进程占用,其他进程只能排着队等着,此时这些排队等待CPU资源的进程依然是运行状态。该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了。
-
b(block):表示等待资源的进程数,这个资源指的是I/O、内存等。当磁盘读写非常频繁时,写数据就会非常慢,此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1,则需要关注一下了。
-
memory显示内存的相关信息。
-
swpd:表示切换到交换分区中的内存数量,单位为KB。
-
free:表示当前空闲的内存数量,单位为KB。
-
buff:表示当前空闲的内存数量,单位为KB。
-
cache:表示(从磁盘中读取的)缓存大小,单位为KB。
-
swap显示内存的交换情况。
-
si:表示由交换区写入内存的数据量,单位为KB。
-
so:表示由内存写入交换区的数据量,单位为KB。
-
io显示磁盘的使用情况。
-
bi:表示从块设备读取数据的量(读磁盘),单位为KB。
-
bo:表示从块设备写入数据的量(写磁盘),单位为KB。
-
system显示采集间隔内发生的中断次数。
-
in:表示在某一时间间隔内观测到的每秒设备的中断次数。
-
cs:表示每秒产生的上下文切换次数。
-
cpu显示CPU的使用状态。
-
us:显示用户下所花费CPU的时间百分比。
-
sy:显示系统花费CPU的时间百分比。
-
id:表示CPU处于空闲状态的时间百分比。
-
wa:表示I/O等待所占用CPU的时间百分比。
-
st:表示被偷走的CPU所占用百分比(一般都为0)
如果磁盘io压力很大,这两列的数值会比较高。当si和so两列的数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
# vmstat 1 5
或者:
# vmstat 1
前一条命令表示每隔1秒输出一次状态,共输出5次;后一条命令表示每隔1秒输出一次状态且一直输出,除非按Ctrl + C键结束。
1.1.3 用 top 命令显示进程所占的系统资源
具体用法如下:
# 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 -bn1,表示非动态打印系统资源的使用情况,可以用在shell脚本中,如图。
和top命令唯一的区别就是,它一次性输出所有信息而非动态显示。
1.1.4 用 sar 命令监控系统状态
sar命令很强大,可以监控系统几乎所有资源的状态,比如平均负载、网卡流量、磁盘状态、内存使用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果系统没有安装这个命令,使用命令yum install -y sysstat安装。初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(无需实时监控,因为不用去查询那个库文件)。它的数据库文件在/var/log/sa/目录下。1.查看网卡流量 sar -n DEV
具体用法如下:
# sar -n DEV
这个命令会把当天记录的网卡信息打印出来,每隔10分钟记录一次。IFACE这一列表示设备名称,rxpck/s这一列表示每秒进入收取的包的数量,txpck/s这一列表示每秒发送出去的包的数量,rxkB/s这一列表示每秒收取的数据量(单位KB),txkB/s这一列表示每秒发送的数据量。
如果服务器丢包非常严重,查一下网卡流量是否异常。如果rxpck/s那一列数值大于4000,或者rxkB/s那一列数值大于5000000,有可能是被攻击了。正常服务器网卡流量不会那么高,除非自己在复制数据。实时查看网卡流量,方法如下:
# sar -n DEV 1 5
也可以使用-f选项查看某一天的网卡流量历史,后面跟文件名。如下:(11号的网卡流量)
# sar -n DEV -f /var/log/sa/sa11
2.查看历史负载 sar -q
具体用法如下:
# sar -q
这个命令可以查看服务器在过去某个时间的负载状况。
1.1.5 用nload命令查看网卡流量
系统没有默认安装它,安装方法如下:
# yum intsall -y epel-release; yum install -y nload
想要安装nload,前提是先安装epel-release包,nload包是在epel这个拓展源里面的。安装完之后,直接运行nload命令,然后回车就可。
1.1.6 用free命令查看内存使用状况
具体用法如下:
free命令可以查看当前系统的总内存大小以及使用内存的情况。
- total:内存总大小。
- used:真正使用的实际内存大小。
- free:剩余物理内存大小(没有被分配,纯剩余)。
- shared:共享内存大小。
- buff/cache:数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer;CPU要计算时,需要把数据从磁盘读出来,临时先放到内存中,这部分内存就是cache。
- available:系统为了应用跑得更快,会预先分配一部分内存(buff/cache)给某些应用,虽然这部分内存并没有真正使用,但也分配出去了。当另一个服务要使用更多内存时,是可以把这部分先分配的内存拿出来用的,还没有被占用这部分buffer和cache再加上free就是available。
free命令还可以加-m和-g选项(分别以MB或GB为单位)打印内存的使用状况,也支持-h选项,如图。
1.1.7 用ps命令查看系统进程
专门显示系统进程的命令,如图(截了一部分)。
# ps aux
下面是几个系统进程的参数。
- PID:表示进程的ID。
- STAT:进程的状态。进程状态分为以下几种。
- D:不能中断的进程(通常为IO)
- R(run):正在运行中的进程,其中包括了等待CPU时间片的进程。
- S(sleep):已经中断的进程。
- T:已经停止或者暂停的进程。
- W:(内核2.6xx以后不可用),没有足够的内存页分配。
- Z:僵尸进程,占用系统一点资源。
- <:高优先级进程。
- N:低优先级进程。
- L:在内存中被锁了内存分页。
- s:主进程。
- l:多线程进程。
- +:在前台运行的进程。
查看某个进程或者它的数量,如图。
1.1.8 用netstat命令查看网络状况
具体用法如下:(截了一部分)
显示的结果中,上面那一部分是tcp/ip,下面一部分是监听的socket(unix开头的行)。netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。netstat -lnp(打印当前系统启动哪些端口)和netstat -an(打印网络连接状况),如图。
1.2 抓包工具
1.2.1 tcpdump工具
具体用法如下:
回车后会出现密密麻麻的一堆字符串,可以按Ctrl+C结束,刷屏越快说明网卡上的数据包越多。如果没有tcpdump命令,使用 yum install -y tcpdump 安装。
-i选项后面跟设备名称,-nn选项的作用是让第3列和第4列显示成 “IP+端口号” 的形式,如果不加-nn选项则显示 “主机名+服务名称”。
1.3 Linux网络相关
1.3.1 用ifconfig命令查看网卡IP
如果系统没有ifconfig命令,可以使用yum install -y net-tools安装。
如果Linux上有多个网卡,而你只想重启某一个网卡,可以使用如下命令:
# ifdown ens33; ifup ens33
ifdown即停用网卡,ifup即启动网卡。如果使用远程登录,使用ifdown ens33命令时,很有可能后面的命令ifup ens33不会运行。这样会导致我们断网而无法连接服务器,所以尽量使用命令systemctl restart network来重启网卡。
1.3.2 查看网卡连接状态
如果没有这个命令,输入命令 rpm -qa |grep ethtool net-tools 看下有没有这个包,没有的话就装一个。用的ISO是DVD的话,就:
# mount /dev/cdrom /mnt 挂载
# cd /mnt/Packages/
# rpm -ivh net-tool按下tab键补全
就可以了。装完之后,示例命令如下:
这里显示link ok,说明网卡为连接状态。如果显示no link,说明网卡坏了或者没有连接网线。还有一个命令也可以查看网卡状态,如下:
如果网卡没有连接,最后一行Link detected显示为no。
1.3.3 更改主机名
安装完系统后,主机名默认为localhost.localdomain,使用hostname命令就可以查看Linux的主机名,如下:
下次登录时,命令提示符里主机名会出现变动。但是这样修改只是保存在内存中。如果重启,主机名还是会变成改动之前的名称。所以更改主机名的同时还需要更改相关的配置文件/etc/hostname。以下方法也可以更改主机名:
# hostname set-hostname liao
# hostname
liao
# cat /etc/hostname
liao
1.4 Linux系统的任务计划
1.4.1 命令crontab
Linux任务计划功能的操作都是通过crontab命令来完成的,其常用的选项有以下几个。
- -u:表示指定某个用户,不加-u选项则为当前用户。
- -e:表示制定计划任务。
- -l:表示列出计划任务。
- -r:表示删除计划任务。
示例:
# crontab -e
no crontab for root - using an empty one
这里使用crontab -e来编写任务计划,实际是vim打开了crontab的配置文件,写下如下内容:
06 15 14 04 2 echo "ok" > /root/cron.log
从左到右依次为:分、时、日、月、周和命令行。上例表示在4月14日(这一天必须是星期二)的15点06分执行命令:echo “ok” > /root/cron.log。
命令crontab -e实际上是打开了/var/spool/cron/username文件(如果用户是root,则打开的是/var/spool/cron/root)。打开这个文件使用了vim编辑器,所以保存时在命令行模式下输入:wq。但是不要直接去编辑那个文件,否则会出错,所以一定要使用命令crontab -e来编辑。
查看已经设定的任务计划使用crontab -l命令,如下:
# crontab -l
06 15 14 04 2 echo "ok" > /root/cron.log
删除任务计划要使用crontab -r命令,这个删除选项还是少用,因为会一下子把全部计划都删除掉。如果只想删除一条计划,可以使用-e选项进入crontab进行编辑。-r选项用法如下:
# crontab -r
# crontab -l
no crontab for root
1.5 Linux系统服务管理
1.5.1 chkconfig服务管理工具
可以使用命令chkconfig --list列出所有的服务及每个级别的开启状态,如下:
1.6 Linux下的数据备份工具 rsync
rsync,从字面意思上可以理解为remote sync(远程同步)。rsync不仅可以远程同步数据(类似于scp),而且可以本地同步数据(类似于cp),但不同于cp或scp的一点是,它不会覆盖以前的数据(如果数据已经存在),而是先判断已经存在的数据和新数据的差异,只有数据不同才会把不相同的部分覆盖。如果没有rsync命令,使用命令yum install -y rsync安装。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200412172130845.jpg) 上例把/root/test1.txt同步到/tmp/目录下。
1.6.1 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
第一个例子为第一个格式。第三中格式是从远程目录同步数据到本地。第四种和第五种格式使用了两个冒号,这种格式和其他格式的验证方式不同。
1.6.2 rsync常用选项
rsync命令各选项的含义如下:
- -a:这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-rlptgoD。
- -r:表示以递归模式处理子目录。它主要针对目录来说,如果单独传一个文件不需要加-r选项,但是传输目录时必须加。
- -v:表示打印一些信息,比如文件列表等。
- -l:表示保留软连接。
- -L:表示像对待常规文件一样处理软连接。
- -p:表示保持文件权限。
- -o:表示保持文件属主信息。
- -g:表示保持文件属组信息。
- -D:表示保持设备文件信息。
- -t:表示保持文件时间信息。
- --delete:表示删除DST中SRC没有的文件。
- --exclude=PATTERN:表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(*.txt)。
- --progress:表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等。
- -u:表示把DST中比SRC还新的文件排除掉,不会覆盖。
- -z:加上该选项,将会在传输过程中压缩。
1.7 Linux系统日志
日志记录了系统每天发生的各种各样的事情,比如监测系统状况、排查系统故障等。可以通过日志来检查错误发生的原因,或者收到攻击时留下的痕迹。日志的主要功能是审计和监测,还可以实时监测系统状态,监测和追踪侵入者等。
1.7.1 /var/log/messages
它是核心系统日志文件,包含了系统启动时的引导信息,以及系统运行时的其他状态消息。
1.7.2 dmesg
它可以显示系统的启动信息。如果你的某个硬件有问题(比如网卡),用这个命令也可以看到:
1.7.3 安全日志
last命令用来查看登录Linux的历史信息,具体用法如下:
上例中,从左至右依次为账户名称、登录终端、登录客户端IP、登录日期及时长。last命令输出的信息实际上是读取了二进制日志文件/var/log/wtmp,只是这个文件不能直接使用cat、vim、head、tail等工具查看。
1.8 xargs与exec
1.8.1 xargs应用
# echo "aaabbb" > 123.txt
# ls 123.txt | xargs cat
aaabbb
上例表示把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把原本两步或者多步才能完成的任务仅用一步完成。xargs常常和find命令一起使用,比如查找当前目录创建时间大于10天的文件,然后再删除,如下:
# find . -mtime +10 |xargs rm
1.8.2 exec应用
使用find命令时,使用-exec选项也可以达到xargs同样的效果。比如查找当前目录创建时间大于10天的文件并删除,如下:
#find . -mtime +10 -exec rm -rf {} \;
这个命令中也是用{ }代替前面find出来的文件。后面的 \ 作为 ; 的转义符,否则shell会把分号作为该行命令的结尾。