附赠2:CentOS 8高频分类命令库2

附赠2:CentOS 8高频分类命令库2

◆gzip命令

gzip命令能够压缩和解压以.gz为结尾的文件。gzip命令是Linux最为常见的压缩命令之一,它能够产生以.gz为后缀名的压缩文件,如要对/home/henry/henry文件进行压缩,可以执行如下命令:

cd
cp -rf /var/log/messages ~/messages
gzip messages

压缩完成后会发现原来的messages文件已经变成了messages.gz文件,原文件已经消失。还可以在压缩过程中指定压缩的百分比,gzip命令提供了1~9级的压缩比,1的压缩比最差,但是压缩速度比较快,而9的压缩比最好,但是速度比较慢,默认的级别是6,如使用最高的压缩率进行压缩,具体操作如下:

gzip -9 messages

看看压缩后的大小:

ll
...
-rw-------.   1 henry henry  31116 Aug  4 10:11 messages.gz                 #默认压缩后的大小为218682
...

gzip命令不但能够压缩文件,还可以将压缩的文件(.gz)解开,只需添加d参数并指定要解压的文件即可:

gzip -d messages.gz

至于文件夹或目录,gzip可以说是束手无策,因为其只能压缩或解压单个文件,通常可以借助于tar命令来实现目录或文件夹的压缩或解压。

◆zcat命令

zcat命令能够不用将.gz的压缩文件解压就能查看压缩包中ASCII文件的内容。如暂时不想使用gzip命令将messages.gz文件解压,只是想浏览一下messages的内容,可以执行如下命令:

zcat messages.gz

这样就不用解压,也可以直接浏览ASCII文件的内容了,如果内容太多,还可以使用如下命令:

zcat messages.gz|more

◆zip和unzip命令

zip和unzip命令可以压缩或解压常用的ZIP文件,如要将messages压缩为messages.zip文件,可执行如下命令:

zip messages.zip messages

需要注意的是,zip命令不会像gzip命令那样自动将源文件删除,如有压缩一个目录或文件夹,可以使用r参数,r参数表示递归压缩,可以将目录下的所有文件及子文件夹一同打包压缩,关键操作如下:

cd
mkdir ~/etc
cp -rf /etc/* ~/etc                             #复制/etc目录到家目录
zip etc.zip ~/etc/*                             #打包压缩为etc.zip

解压也很方便,可用如下命令:
unzip messages.zip

如果只想查看压缩文件里的文件目录,并不想解压,只需添加v参数,即可查看压缩文件的目录列表,但不解压则可执行:
unzip -v etc.zip

要添加文件到压缩包,只需使用m参数即可,如要将messages文件添加到etc.zip压缩包,可以运行如下命令:
zip -m etc.zip messages

向etc.zip压缩包添加messages文件,删除所添加文件可以使用d参数,具体操作如下:
zip -d etc.zip messages

即可删除压缩包中的messages文件。

将etc.zip压缩包解压,但如有相同的文件并不覆盖原文件,可执行如下命令:

unzip -n etc.zip -d ~ 

其中n参数表示不覆盖已经存在的文件,与之相反,o参数则是覆盖已存在的文件且不需要用户确认,最后-d参数则可将文件解压到指定目录中。

◆bzip2命令

bzip2命令能够压缩和解压以.bz2结尾的文件。bzip2命令生成的压缩的文件的扩展名为.bz2。如要将/home/henry/messages进行压缩,执行如下命令:

bzip2 messages

这样就生成了一个messages.bz2文件,原文件已经消失,与gzip命令一样,bzip2命令也可以在压缩前选择压缩比的操作,其常见选项与gzip相同,在此不在赘述。

◆bzcat命令

bzcat命令也比较简单,不对.bz2文件进行解压就能查看里面ASCII文件的内容。

bzcat messages.bz2

◆tar命令

tar命令能够对一个文件或目录内容进行打包压缩后备份。

x参数:可将.tar文件解包
z参数:打包后直接用gzip命令进行压缩或解压文件
j参数:打包后直接用bzip2命令进行压缩或解压文件
J参数:打包后直接用xz命令进行压缩或解压文件
t参数:查看一个打包文件里的文件目录
k参数:如果在还原时有相同的文件存在则不进行覆盖
N参数:在此选项后加日期,如果文件日期比-N选项后面加的日期还要新才会被加进压缩包中

tar命令通常用来对文件或目录做备份。无论是刚才的gzip命令,还是bzip2命令,都会发现它们只能对单一文件进行压缩,而即使是同时输入两个文件名,也只能是生成两个单独的压缩文件,而经常需要对很多文件或目录同时进行压缩并且希望生成同一个文件,这样就得先通过tar命令将需要同时进行备份的内容放到同一文件里,称之为“.tar”文件,但是此时仅仅是相当于把不同文件放到了一个大文件中,并没有压缩,当然可以将打包和压缩的动作一次性完成。并且利用tar命令还可以在压缩文件中增加新文件或改变文件。tar命令选项众多,最常用的参数为c
,表示创建新的打包文件,z参数则可打包后直接用gzip命令进行压缩或解压文件,v参数可以显示在打包压缩或解包解压后过程的详细清单是否显示出来,最后的参数是-f
这个选项基本上是必选的,用于指定所使用文件,如要将/etc/目录下所有文件打包后压缩成etc.tar.gz文件,可以执行如下操作:

tar czvf ~/etc_bak.tar.gz  /etc/*               #tar命令的参数前可以有-,也可不要,比较特殊

如不要显示输出信息,则可:
tar czf ~/etc_bak.tar.gz  /etc/*

备份后,/etc/目录下的文件一个也不少,并没有像gzip命令一样压缩后原文件就删除了,同时由于使用了v选项,在打包压缩后将压缩的文件清单也显示在了屏幕上,还可以使用-t选项仅查看打包压缩后包里文件,具体操作如下:
tar -tvf etc_bak.tar.gz

如果想对其进行解压解包的话,就可以使用如下命令:
tar zxvf ~/etc_bak.tar.gz

参数z表示使用gzip进行解压操作,x参数可将.tar文件解包,这样就可以解包解压文件了。通过前面的例子可以看出,如果要是创建打包文件的话,通常使用cvf这三个参数。如果压缩的话,还需加上z(使用gzip压缩解压),j(使用bzip2压缩解压)和J(使用xz压缩解压)参数即可,但是后面的文件的扩展名也要相应地变成.tar.gz,.tar.bz2或.tar.xz。

而解包的话通常使用xvf这三个参数,同时还解压就需要加上z,j和J参数了。

这么多参数可以这样记忆,打包压缩为.tar.gz格式使用zcvf参数,打包压缩为.tar.bz2使用jcvf参数,打包压缩为.tar.xz使用Jcvf参数,而要解压解包.tar.gz格式文件采用zxvf参数,要解压解包.tar.bz2格式文件采用jxvf参数,要解压解包.tar.xz格式文件采用Jxvf参数,无论查看那种格式,都可以使用tvf参数。

7.用户身份管理命令

◆su命令

su命令是用来切换用户身份的,如要从henry用户身份切换为root用户,即提升用户权限,只需运行如下命令:

su - root           #-表示切换到root用户及环境

或:
su -                #可以省略root用户

用户身份切换后,提示符也由普用用户的$,变为超级用户的#,命令中-表示套用所切换用户的Shell环境。还可以将身份由root用户切换为普通用户,如切换为普通用户henry,即降低权限,操作方法类似:

su - henry

不仅如此,可以通过su命令将自己变身为系统中任意用户,需要牢记的是,在退出su时,需要使用exit命令,而非再次使用su命令进行二次切换。

◆sudo命令

如果只是想临时获得超级用户权限完成某一操作,即临时(默认为5分钟)提权,只需运行sudo命令即可:

sudo dnf install wget -y        #临时获得超级用户权限通过snap来安装云存储套件
[sudo] password for henry:      #输入henry用户的密码

如果需要列出当前用户可以执行的命令,可以使用l参数,具体操作如下:
sudo -l
Matching Defaults entries for henry on localhost:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY
    LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User henry may run the following commands on localhost:
    (ALL) ALL

从结果可知,henry用户可在任何主机以任何人的身份来执行所有的命令。默认情况,输入sudo密码的有效时间为5分钟,超过了这个时间就会要求重新输入密码,如果要sudo下次需要输入密码,可以使用如下命令:

sudo -k                         #k参数可以重设sudo时间戳,而K参数则可彻底销毁时间戳

或:
sudo -K

这样一来,下次使用sudo时,就需要密码了,即使没有超过5分钟。

◆visudo命令

visudo命令是专门用来编辑sudo的配置文件/etc/sudoers的,也许会有朋友感到奇怪,编辑配置文件用vi就可以了,为什么要用这个命令,这是因为/etc/sudoer文件必须由专用命令visudo来编辑,visudo的重要功能之一便是语法检查,因为sudo的配置文件一旦出错将会造成严重的后果。此外,使用visudo前需要了解/etc/sudoer文件的授权格式:
用户名 主机名 以谁的身份执行 命令

简而言之就是,哪个用户在哪个主机上以谁的身份执行指定命令,sudoer文件默认给出了root用户定义了一条规则:

visudo

visudo默认的编辑器为nano,直接在nano中打开sudoer文件,定位到如下行:
root    ALL=(ALL:ALL)       ALL

此行各部分说明如下:
root    :表示root用户
ALL     :表示从任何的主机上都可以执行
(ALL:ALL)  :以谁的身份来执行,ALL:ALL 就代表root可以任何人的身份来执行命令
ALL     :表示任何命令

结合上述授权格式,默认规则的意思root用户可在任何主机以任何人的身份来执行所有的命令。多数情况,只需复制此行,然后根据需求修改即可应用,如要为普通用户henry授权,只需在默认配置下添加如下内容, 即可具有使用sudo的权限,关键操作如下:
henry    ALL=(ALL:ALL)       ALL

如有其他要求,如只能在指定的网段的主机执行指定的命令,则可以在此基础上进行修改:

henry   192.168.1.0/24=(root) /usr/sbin/groupadd

上述命令中,只允许henry用户在192.168.1.0/24网段上连接主机并以root身份权执行groupadd命令。此外,sudo命令有自己的日志,被记录在/var/log/auth.log文件中,这样每次执行命令时,相关日志都是会被记录下来的。

8.服务器系统当前信息

获得服务器系统基本信息是系统管理的前提,如果没有正确获取服务器的相关信息,管理也无从谈起,下面就是最为基本的获取系统信息的命令。

◆dmesg命令

众所周知,Linux开机会有大量信息显示,通常无法即时并仔细检阅,不过通过dmesg命令来慢慢地仔细研究,获得Linux开机信息的操作如下:

dmesg | more

或:
dmesg | less

more只能向下翻页,less既可以向上翻页,也可以向下翻页,无论是more还是less,按下回车可以逐行查看,按下空格可以逐页查看,q命令退出显示返回命令行。

还有一种方式是一份显示,一份保存到文件,具体操作如下:
dmesg | tee dmesg.log

◆arch命令

arch命令可以获得服务器硬件处理器架构的信息,使用方法如下:

arch
x86_64

◆uname命令

uname命令也可以获得服务器处理器架构:

uname -m
x86_64

如需获得操作系统及内核版本的详细信息,具体操作如下:

uname -v -r
4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019

不想记忆那么多的参数,则可以使用a参数,具体操作如下:

uname -a
Linux localhost.localdomain 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

◆uptime命令

uptime命令显示系统运行时间及平均负载,具体操作如下:

uptime
11:48:48 up  2:26,  2 users,  load average: 0.00, 0.00, 0.00

上述结果是编译内核时的数据,负载较高,依次显示服务器系统开机2小时26分,当前只有两个用户,系统最近1分,5分和15分系统的平均负载为0.0, 0.0和0.0。

◆date命令

date命令可以显示和设置系统当前时间,具体使用方法如下:

显示当前的日期时间的详细信息:

date
Sun Aug 4 11:50:26 EDT 2019

显示现在的时间,格式为时,分,秒:
date +%H%M%S
115044

显示现在的日期,格式为年,月,日:
date +%Y%m%d
20190804

或将时间和日期组合起来,并格式化为%Y-%m-%d %H:%M:%S格式显示当前时间:
date "+%Y-%m-%d %H:%M:%S"
2019-08-04 11:51:28

仅修改日期,具体操作如下:
date -s 2019-08-05

仅修改时间,具体操作如下:
date -s 21:00:00

同时修改日期和时间,具体操作如下:
date -s "2019-08-08 18:00:00"

```需要注意的是,日期与时间之间有一空格,且用双引号引起。

更多的时间格式参数请参考date的manpage,里面有详细的介绍。

◆cal命令

cal命令是专门用来显示日期的,最简单用法如下:

cal
August 2019
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

显示6月的日期信息,操作如下:
cal 08 2019
August 2019
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

以1到365计数的形式显示每一天,具体操作如下:
cal -j
August 2019
Sun Mon Tue Wed Thu Fri Sat
213 214 215
216 217 218 219 220 221 222
223 224 225 226 227 228 229
230 231 232 233 234 235 236
237 238 239 240 241 242 243

如要显示全年的情况,请加上y参数:
cal -jy 2019 #以序号形式显示2019年的日历
cal -jy 2019
2019

      January                       February                       March

Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 32 33 60 61
6 7 8 9 10 11 12 34 35 36 37 38 39 40 62 63 64 65 66 67 68
13 14 15 16 17 18 19 41 42 43 44 45 46 47 69 70 71 72 73 74 75
20 21 22 23 24 25 26 48 49 50 51 52 53 54 76 77 78 79 80 81 82
27 28 29 30 31 55 56 57 58 59 83 84 85 86 87 88 89
90
April May June
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
91 92 93 94 95 96 121 122 123 124 152
97 98 99 100 101 102 103 125 126 127 128 129 130 131 153 154 155 156 157 158 159
104 105 106 107 108 109 110 132 133 134 135 136 137 138 160 161 162 163 164 165 166
111 112 113 114 115 116 117 139 140 141 142 143 144 145 167 168 169 170 171 172 173
118 119 120 146 147 148 149 150 151 174 175 176 177 178 179 180
181
July August September
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
182 183 184 185 186 187 213 214 215 244 245 246 247 248 249 250
188 189 190 191 192 193 194 216 217 218 219 220 221 222 251 252 253 254 255 256 257
195 196 197 198 199 200 201 223 224 225 226 227 228 229 258 259 260 261 262 263 264
202 203 204 205 206 207 208 230 231 232 233 234 235 236 265 266 267 268 269 270 271
209 210 211 212 237 238 239 240 241 242 243 272 273
...

◆hwclock命令

hwclock命令可以修改硬件时间,因为Linux将时钟分为系统时钟(System Clock)和硬件时钟(Real Time Clock )两种,系统时间指当前 Kernel中的时钟,而硬件时钟则是计算机主板上BIOS/CMOS时钟,且系统时间和硬件时间可以不同。

如date命令修改完日期时间后,仅修改了操作系统的时钟,如要令该时间真正生效,还需要将操作系统时间同步到服务器主板的BIOS/CMOS,这样硬件时钟才真正修改了,否则重启服务器后,系统默认时间又采用服务器的硬件时间,从而令设置失效,修改硬件时钟就以使用hwclock命令,具体操作如下:

hwclock -w #将系统时钟同步到硬件时钟

或:
hwclock --systohc

还可以做反向操作,即将硬件时钟同步到系统时钟,具体操作如下:
hwclock -s #将硬件时钟同步到系统时钟

或:
hwclock --hctosys

◆free命令

free命令可获得系统当前内存的使用情况的详细信息,如可用内存,已用内存及交换内存等,所有输出值都是从/proc/meminfo文件中读出的,具体操作如下:

free
total used free shared buff/cache available
Mem: 16235124 1197612 14331840 23888 705672 14718008
Swap: 4194300 0 4194300


结果中各列说明如下:
total:内存大小
used:已经使用的内存大小
free:空闲内存的大小
shared:多个进程共享的内存的大小
buff/cache:缓存内存大小
available:列显示还可以被应用程序使用的物理内存大小,其大小约等于free加buff/cache

各行说明如下:
Mem:物理内存
Swap:交换分区

其实total(总量)就等于used(已使用的大小),free(空闲的大小)和buff/cache(缓存容量大小)的总和,即8144460=376644+7222256+545560。

默认情况以字节为单位输出内存的使用状况的信息,如要以其他单位输出内存的使用量,添加相应参数即可,可用参数有g为GB,m为MB,k为KB,b为字节,以MB为单位显示内存使用状况:

free -m
total used free shared buff/cache available
Mem: 15854 1169 13995 23 689 14373
Swap: 4095 0 4095

或以GB为单位显示,具体操作如下:
free -g
total used free shared buff/cache available
Mem: 15 1 13 0 0 14
Swap: 3 0 3

可以看到四舍五入后的内存信息,-h也是一个很常用的参数,以人类更易懂的格式输出结果,具体操作结果如下:
free -h
total used free shared buff/cache available
Mem: 15Gi 1.1Gi 13Gi 23Mi 689Mi 14Gi
Swap: 4.0Gi 0B 4.0Gi

此外,还可以通过-s参数,指定输出结果的间隔时间,自动定期输出结果,具体操作如下:
free
total used free shared buff/cache available
Mem: 16235124 1197612 14331840 23888 705672 14718008
Swap: 4194300 0 4194300
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 15854 1169 13995 23 689 14373
Swap: 4095 0 4095

通常和单位参数连用,具体使用方法如下:
free -ms 2 #每2秒自动更新一次并输出结果,并以MB为单位显示
total used free shared buff/cache available
Mem: 15854 1169 13995 23 689 14372
Swap: 4095 0 4095

          total        used        free      shared  buff/cache   available

Mem: 15854 1169 13995 23 689 14372
Swap: 4095 0 4095

相当于如下命令:
watch free -m #watch命令可以定期执行一个程序,并以全屏显示

9. 服务器系统监控命令

服务器系统监控命令主要包括对处理器,内存,磁盘容量/IO和网络的监控,再加上先前的对进程的监控,就比较全面了。需要注意的是,下面介绍的监控命令有很多CentOS默认没有安装,需要手动进行安装。

◆mpstat命令

mpstat是Multiprocessor Statistics的缩写,即实时系统监控工具,可查看所有CPU的详细统计数据,实现对处理器的性能监控,要使用mpstat,首先需要安装,具体方法如下:

dnf -y install sysstat

成功安装后,直接运行mpstat即可,可查看CPU的当前运行状况信息,
mpstat
mpstat
Linux 4.18.0-80.el8.x86_64 (localhost.localdomain) 08/04/2019 _x8664 (4 CPU)

08:33:04 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:33:04 PM all 0.06 0.01 0.13 0.05 0.03 0.02 0.00 0.00 0.00 99.70

更多时候,还可以跟间隔时间和重复次数,实例如下:
mpstat 2 3 #表示间隔2秒,重复3次
Linux 4.18.0-80.el8.x86_64 (localhost.localdomain) 08/04/2019 _x8664 (4 CPU)

08:34:02 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
08:34:04 PM all 0.00 0.00 0.25 0.00 0.00 0.12 0.00 0.00 0.00 99.63
08:34:06 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
08:34:08 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.08 0.00 0.00 0.04 0.00 0.00 0.00 99.88


Tips:统计字段的含义如下:
%user:间隔时间段内,用户态的CPU时间(%),不包含nice值为负的进程,计算公式为(usr/total)*100
%nice:间隔时间段内,nice值为负进程的CPU时间(%),计算公式为(nice/total)*100
%sys:间隔时间段内,内核时间(%),计算公式为(system/total)*100
%iowait:间隔时间段内,硬盘IO等待时间(%),计算公式为(iowait/total)*100
%irq:间隔时间段内,硬中断时间(%),计算公式为(irq/total)*100
%soft:间隔时间段内,软中断时间(%),计算公式为(softirq/total)*100
%idle:间隔时间段内,CPU除去等待磁盘I/O操作外的因为任何原因而空闲的时间闲置时间(%),计算公式为(idle/total)*100

◆ifstat命令

ifstat工具是个网络接口监测工具,比较简单看网络流量,可用如下命令安装:

dnf -y install ifstat

ifstat使用起来也很简单,直接运行即可开始监控网卡,
ifstat
#kernel
Interface RX Pkts/Rate TX Pkts/Rate RX Data/Rate TX Data/Rate
RX Errs/Drop TX Errs/Drop RX Over/Rate TX Coll/Rate
lo 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
ens33 118780 0 140666 0 8624K 0 18228K 0
0 0 0 0 0 0 0 0
ens34 23511 0 0 0 1807K 0 0 0
0 0 0 0 0 0 0 0
ens35 5529 0 0 0 626279 0 0 0
0 0 0 0 0 0 0 0
ens36 5529 0 0 0 626279 0 0 0
0 0 0 0 0 0 0 0
virbr0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

ifstat可以监控网络流量概况,如要停止监控,只需按下Ctrl+C命令即可。

◆iftop命令


和ifstat类似,iftop也是一款实时流量监控工具,不过监控的数据更加丰富,可运行如下命令进行安装:

dnf install -y iftop

如以普通用户身份运行,将得到如下结果:
iftop
interface: ens33
IP address is: 192.168.1.166
MAC address is: 00:0c:29:51:35:1e
pcap_open_live(ens33): ens33: You don't have permission to capture on that device (socket: Operation not permitted)

所以需要以root身份运行iftop。
iftop
12.5Kb 25.0Kb 37.5Kb 50.0Kb 62.5Kb
192.168.1.166 => 118.118.118.47 0b 266b 83b
<= 0b 283b 94b
192.168.1.166 => pugot.canonical.com 0b 0b 15b
<= 0b 0b 15b
...

qq
TX: cum: 492B peak: 664b rates: 0b 266b 98b
RX: 548B 944b 0b 283b 110b
TOTAL: 1.02KB 1.57Kb 0b 550b 208b

Ctrl+C退出,如想采用直观的文本界面显示搜集到的网卡数据,如果喜欢ifstat的输出样式,可运行如下命令:

iftop -t
Time ens33 ens34 ens35 ens36
HH:MM:SS KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out KB/s in KB/s out
02:01:50 0.00 0.00 0.06 0.29 0.00 0.00 0.00 0.00
02:01:51 0.00 0.00 0.06 0.19 0.00 0.00 0.00 0.00
02:01:52 0.00 0.00 0.06 0.19 0.00 0.00 0.00 0.00
...

◆iostat命令

iostat是I/O statistics(输入/输出统计)的缩写,iostat可对系统的磁盘操作活动进行监视,监控磁盘活动统计数据,此外也会监控CPU使用情况。iostat的缺点就是不能对某个进程进行深入分析,仅对系统的整体情况进行分析。

直接运行iostat命令即可显示服务器处理器和I/O设备的负载情况及详细监控数据,具体操作如下:

iostat

结果如下:
Linux 4.18.0-80.el8.x86_64 (localhost.localdomain) 08/04/2019 _x8664 (4 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.01 0.18 0.05 0.00 99.70

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.78 17.55 6.17 711151 250041
scd0 0.01 0.27 0.00 11056 0
dm-0 0.83 16.56 6.12 671096 247969
dm-1 0.00 0.05 0.00 2220 0

还可以定时显示监控信息,具体方法如下:
iostat 2 3 #表示间隔2秒,重复3次
Linux 4.15.0-29-generic (us1804) 03/15/2019 _x8664 (1 CPU)

avg-cpu: %user %nice %system %iowait %steal %idle
0.27 0.06 0.67 0.03 0.00 98.98

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.90 1.01 0.00 8889 0
loop1 0.01 0.12 0.00 1048 0
loop2 0.00 0.00 0.00 8 0
sda 2.04 37.58 27.66 329890 242816
scd0 0.03 0.70 0.00 6168 0

avg-cpu: %user %nice %system %iowait %steal %idle
1.00 0.00 2.50 0.00 0.00 96.50

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0

avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.51 0.00 0.00 99.49

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
loop0 0.00 0.00 0.00 0 0
loop1 0.00 0.00 0.00 0 0
loop2 0.00 0.00 0.00 0 0
sda 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0

监控信息太多,如只需要监控某一磁盘的监控数据,可执行如下命令:
iostat -d sda
Linux 4.18.0-80.el8.x86_64 (localhost.localdomain) 08/04/2019 _x8664 (4 CPU)

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.77 17.45 6.17 711151 251290

Device监控字段的含义如下:
tps:该设备每秒的传输次数(Transfers Per Second),需要注意的是,“一次传输”意思是“一次I/O请求”且“一次传输”请求的大小未知
kB_read/s:每秒从设备(drive expressed)读取的数据量,单位都为KB
kB_wrtn/s:每秒向设备(drive expressed)写入的数据量
kB_read:读取的总数据量
kB_wrtn:写入的总数量数据量

iostat更多参数请参考其manpage,此处不在赘述。

◆vmstat命令


vmstat可以监控给定时间间隔的系统状态值,如处理器使用状况,内存的使用状况,虚拟内存交换情况和I/O读写情况等,运行如下命令即可获得当前系统的关键参数:

vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 14323984 2156 703780 0 0 13 3 26 32 0 0 100 0 0

此外,和前面介绍的mpstat和iostat类似,vmstat也可以使用是通过两个数字参数来执行,即第一个参数是监控的时间间隔,单位为秒,第二个参数是采样的次数,具体实现如下:

vmstat 2 3
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 1366904 35792 433720 0 0 34 25 51 84 0 1 99 0 0
0 0 0 1366904 35792 433720 0 0 0 0 44 67 0 1 99 0 0
0 0 0 1366904 35792 433720 0 0 0 0 43 67 0 1 99 0 0

vmstat监控数据字段的含义如下:
r:表示运行队列,即多少个进程分配到处理器,上述监控数据可以看出,笔者的系统没什么程序在运行,不过当这个值超过了处理器数目,就会出现处理器瓶颈了
b:表示阻塞的进程
swpd:虚拟内存已使用的大小,如果大于0,表示计算机的物理内存不够用了,排除程序内存泄露的可能,就只有升级内存了
free:空闲的物理内存的大小
buff和cache:笼统而言,都是缓存,但又存在一些差异
si:每秒从磁盘读入虚拟内存的大小,如这个值大于0,表示物理内存不够用或内存泄露了
so:每秒虚拟内存写入磁盘的大小,如这个值大于0,表示物理内存不够用或内存泄露了
bi:块设备每秒接收的块数量
bo:块设备每秒发送的块数量,通常bi和bo一般都要接近0,否则I/O过于频繁,需要调优
in:每秒处理器的中断次数,包括时间中断
cs:每秒上下文切换次数,这个值要越小越好,上下文切换次数过多表示处理器大部分浪费在上下文切换,导致处理器干活的时间少了,处理器资源没有被充分利用
us:用户处理器时间,
sy:系统处理器时间,如I/O操作频繁,则可能导致sy值偏高
id:空闲处理器时间,通常id + us + sy = 100
wt:等待I/O的处理器时间,这个值要越小越好

vmstat既可用来分析系统内存使用情况,又可用来分析处理器上下文切换和中断的次数。

◆dstat命令

多功能系统资源及系统信息统计生成工具,可用于系统的人监控和统计,一个命令即可获得vmstat,iostat及ifstat等多个命令才可以获得数据,被誉为监控神器,不过需要注意的是,CentOS默认并没有安装,需手动安装,具体方法如下:
dnf install dstat -y

成功安装后便可运行如下命令监控系统:

dstat
You did not select any stats, using -cdngy by default.
----total-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read writ| recv send| in out | int csw
0 0 100 0 0| 0 16k| 60 118 | 0 0 | 89 112
0 0 100 0 0| 0 0 | 180 178 | 0 0 | 75 99
0 0 100 0 0| 0 0 | 60 134 | 0 0 | 75 106
0 0 100 0 0| 0 0 | 60 118 | 0 0 | 78 105
0 0 100 0 0| 0 0 | 60 118 | 0 0 | 56 77
0 0 100 0 0| 0 0 | 60 118 | 0 0 | 105 134
0 0 100 0 0| 0 0 | 753 118 | 0 0 | 94 112
...

其中2表示间隔时间为2秒,而3则表示获取3次数据。还可以单独监控处理器,内存,磁盘状态等信息,监控处理器具体操作如下:
dstat -c
--total-cpu-usage--
usr sys idl wai stl
4 1 95 0 0
4 2 94 0 0
5 2 94 0 0
1 2 98 0 0
4 0 96 0 0
4 2 94 0 0
5 2 94 0 0
...

可持续显示处理器的全面信息,如为处理器的用户占用,系统占用,空闲,等待,中断等信息,如需结束监控,可使用Ctrl+C结束,监控内存具体操作如下:
dstat -m
------memory-usage-----
used free buf cach
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
1222M 13G 3804k 837M
...

可持续显示当前内存状态信息,如已使用,空闲内存容量,buffer和cache的容量等信息,监控磁盘的读写数据大小,具体操作如下:
dstat -d
-dsk/total-
read writ
48k 66k
0 0
0 0
0 0
0 32k
0 0
0 280k
...

持续输出磁盘的读写数据的大小信息,监控网络状态,可执行如下命令:
dstat -n
-net/total-
recv send
0 0
60B 134B
60B 118B
60B 118B
60B 102B
60B 118B
60B 102B
...

连续获得收发的数据包的大小信息,获得系统的I/O请求信息,可执行如下命令:
dstat -r
--io/total-
read writ
4.73 7.45
0 0
0 0
0 0
0 56.0
0 2.00
...

还可以将各个参数组合在一起,执行效果如下:
dstat -c -m -d -t --tcpdstat -c -m -d -t --tcp
----total-usage---- ------memory-usage----- -dsk/total- ----system---- ------tcp-sockets-------
usr sys idl wai stl| used free buf cach| read writ| time |lis act syn tim clo
|1223M 13G 3804k 837M| |04-08 20:52:40| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:41| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:42| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:43| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:44| 5 2 0 0 0
0 1 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:45| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:46| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:47| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:48| 5 2 0 0 0
0 0 99 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:49| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:50| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:51| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:52| 5 2 0 0 0
0 0 100 0 0|1223M 13G 3804k 837M| 0 0 |04-08 20:52:53| 5 2 0 0 0
...

上述命令监控处理器,内存和磁盘读写,并显示时间和tcp信息,每2秒扫描一次,扫描3次,提醒大家的是,输出结果会用各种颜色表示,十分养眼。

◆sar命令

sar也是系统监控的重要工具,该工具可以帮助大家监控系统资源的使用情况,如处理器和内存等。和其他监控工具用法类似,sar也可以跟监控的间隔时间和次数来使用,具体操作如下:

sar 2 3
Linux 4.15.0-29-generic (us1804) 03/15/2019 _x8664 (1 CPU)

03:26:18 AM CPU %user %nice %system %iowait %steal %idle
03:26:20 AM all 0.00 0.00 0.50 0.00 0.00 99.50
03:26:22 AM all 0.00 0.00 0.51 0.00 0.00 99.49
03:26:24 AM all 0.50 0.00 1.00 0.00 0.00 98.50
Average: all 0.17 0.00 0.67 0.00 0.00 99.16

上述命令稍加改进,即可将监控到的处理器数据写入二进制文件sar.log中,关键操作如下:
sar -u -o sar.log 2 3 #-u参数表示监控处理器

Linux 4.15.0-29-generic (us1804) 03/15/2019 _x8664 (1 CPU)

03:29:10 AM CPU %user %nice %system %iowait %steal %idle
03:29:12 AM all 0.00 0.00 0.50 0.00 0.00 99.50
03:29:14 AM all 0.00 0.00 1.01 0.00 0.00 98.99
03:29:16 AM all 0.50 0.00 0.50 0.00 0.00 98.99
Average: all 0.17 0.00 0.67 0.00 0.00 99.16

sar关键监控字段说明如下:
%usr:处理器处在用户模式下的时间百分比
%system:处理器处在系统模式下的时间百分比
%ioswait:处理器等待输入输出完成时间的百分比
%idle:处理器空闲时间百分比。

实际应用中要特别关注%wio和%idle,%wio的值过高,表示硬盘存在I/O瓶颈,%idle值高,表示处理器较空闲,如果%idle值高 但系统响应慢,很有可能是处理器等待分配内存,此时应增大内存,如果%idle值持续低于10,说明系统的处理器处理能力低,表明系统瓶颈在处理器

查看二进制文件sar.log中的内容,可运行如下命令:
sar -u -f sar.log

欲监控硬盘,如每2秒采样一次,连续采样3次,可运行如下命令:
sar -d 2 3

屏幕显示:
Linux 4.15.0-20-generic (us1804) 07/16/2018 _x8664 (1 CPU)

03:12:21 AM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
03:12:23 AM dev7-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:12:23 AM dev7-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
03:12:23 AM dev7-2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
...

sar命令的用法很多,也很灵活,用得好,可以了解系统的瓶颈,进而有针对性的进行调优,更多的参数及用法可参考manpage,此处就不赘述了。

◆pidstat命

pidstat命令主要用于监控全部或指定进程占用系统资源的情况,如CPU,内存,设备IO,任务切换和线程等,和其他监控工具类似,pidstat也可指定统计的次数和时间来获得所需的信息,最简单的用法如下:

pidstat
Linux 4.15.0-29-generic (us1804) 02/16/2019 _x8664 (2 CPU)

12:09:07 PM UID PID %usr %system %guest %wait %CPU CPU Command
12:09:07 PM 0 1 0.00 0.03 0.00 0.00 0.04 0 systemd
12:09:07 PM 0 2 0.00 0.00 0.00 0.00 0.00 1 kthreadd
12:09:07 PM 0 7 0.00 0.00 0.00 0.00 0.00 0 ksoftirqd/0
12:09:07 PM 0 8 0.00 0.02 0.00 0.01 0.02 1 rcu_sched
12:09:07 PM 0 11 0.00 0.00 0.00 0.00 0.00 0 watchdog/0
12:09:07 PM 0 14 0.00 0.00 0.00 0.00 0.00 1 watchdog/1
12:09:07 PM 0 16 0.00 0.00 0.00 0.00 0.00 1 ksoftirqd/1
12:09:07 PM 0 86 0.00 0.00 0.00 0.00 0.00 1 scsi_eh_0
12:09:07 PM 0 88 0.00 0.00 0.00 0.00 0.00 1 scsi_eh_1
...



上述结果中各列信息说明如下:
UID:用户ID
PID:进程ID
%usr:进程在用户空间占用处理器的百分比
%system:进程在内核空间占用处理器的百分比
%guest:进程在虚拟机占用处理器的百分比
%CPU:进程占用处理器的百分比
CPU:处理进程的处理器编号
Command:当前进程对应的命令

版权声明:
作者:WaterBear
链接:https://l-t.top/2607.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录