Linux常用命令(博客地图):https://blog.youkuaiyun.com/sysukehan/article/details/105804511
1、将某个时间点的进程运行情况选取下来:ps
参数:
-A:所有的进程均显示出来,与-e具有同样的作用。
-a:不与terminal有关的所有进程。
-u:有效用户(effective user)相关的进程。
x:通常与a这个参数一起使用,可列出较完整的信息。
输出格式规划:
l:较长、较详细地将该PID的信息列出。
j:工作的格式(jobs format)。
-f:做一个更为完整的输出。
man ps中给出了一些常用的示例,记住这些就够了。
仅查看自己的bash相关进程:ps -l
各列含义:
1、F:代表这个进程标志(process flags),说明这个进程的权限,常见的号码有:
1)4表示此进程的权限为root。
2)1表示此子进程仅可进行复制(fork)而无法实际执行(exec)。
2、S:代表这个进程的状态(STAT),主要的状态有:
R(Running):该进程正在运行中。
S(Sleep):该进程目前正在睡眠状态(idle),但可以被唤醒(signal)。
D:不可被唤醒的睡眠状态,通常这个进程可能在等待I/O的情况(比如打印)。
T:停止状态(stop),可能是在工作控制(后台暂停)或除错(traced)状态。
Z(Zombie):“僵尸”状态,进程已经终止但却无法被删除至内存外。
3、UID/PID/PPID:代表此进程被该UID所拥有/进程的PID号码/此进程的父进程PID号码。
4、C:代表CPU使用率,单位为百分比。
5、PRI/NI:Priority/Nice的缩写,代表此进程被CPU所执行的优先级,数值越小代表该进程越快被CPU执行。
6、ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel function,指出该进程在内存的哪个部分,如果是个running的进程,一般就会显示“-”。SZ代表此进程用掉多少内存。WCHAN表示目前进程是否运行中,同样,若为“-”表示正在运行中。
7、TTY:登录者的终端机位置,若为远程登录则使用动态终端接口(pts/n)。
8、TIME:使用掉的CPU时间,注意,是此进程实际花费CPU运行的时间,而不是系统时间。
9、CMD:就是command的缩写,造成此程序的触发进程的命令为何。
查看系统所有进程:ps aux
各列含义:
1、USER:该进程是属于哪个用户账号的。
2、PID:该进程的进程标识符。
3、%CPU:该进程使用掉的CPU资源百分比。
4、%MEM:该进程所占用的物理内存百分比。
5、VSZ:该进程使用掉的虚拟内存量(KB)。
6、RSS:该进程使用掉的固定内存量(KB)。
7、TTY:该进程是在哪个终端机上面运行的,若与终端机无关则显示?。另外,tty1~tty6是本机上面的登录者程序,若为pts/0等的,则表示为由网络连接进主机的进程。
8、STAT:该进程目前的状态,状态显示与ps -l的S标识相同(R/S/T/Z)。
9、START:该进程被触发启动的时间。
10、TIME:该进程实际使用CPU运行的时间。
11、COMMAND:该进程的实际命令。
如果某个进程的CMD后面还接上<defunct>时,就代表该进程是僵尸进程。
2、动态查看进程的变化:top
top [-d 数字] | top [-bnp]
参数:
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒。
-b:以批次的方式执行top,还有更多的参数可以使用。通常会搭配数据流重定向来将批次处理的结果输出成文件。
-n:与-b搭配,意义是需要进行几次top的输出结果。
-p:指定某些个PID来进行查看监测。
在top执行过程当中可以使用的按键命令:
?:显示在top当中可以输入的按键命令。
P:以CPU的使用资源排序显示。
M:以内存的使用资源排序显示。
N:以PID来排序。
T:由该进程使用的CPU时间累积(TIME+)排序。
k:给予某一个PID一个信号(singal)。
r:给予某一个PID重新指定一个nice值。
q:离开top。
显示内容解释:
第一行:top - 18:09:15 up 2:04, 1 user, load average: 0.17, 0.52, 1.09
目前的时间: 18:09:15
开机到目前为止所经过的时间: 2:04
已经登录系统的用户人数: 1 user
系统在1,5,15分钟的平均工作负载: 0.17, 0.52, 1.09,越小代表越闲置,大于1需要注意。
第二行:Tasks: 212 total, 1 running, 160 sleeping, 0 stopped, 0 zombie
显示的是目前进程的总量和个别进程的状态,需要关注zombie的数量。
第三行:%Cpu(s): 4.6 us, 1.0 sy, 0.0 ni, 94.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
显示的是CPU的整体负载,需要特别注意的是%wa,代表的是I/Owait,通常系统会变慢都是I/O产生的问题,因此这里要注意这个选项耗用CPU的资源。如果是多内核的设备,可以按下数字键“1”来切换成 不同CPU的负载率。
第四行:KiB Mem : 3855448 total, 388592 free, 1290652 used, 2176204 buff/cache
第五行:KiB Swap: 3999740 total, 3999740 free, 0 used. 2029928 avail Mem
表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况,swap的使用量要尽量少,如果swap被大量使用,表示系统的物理内存不足。
top的下半部分界面列介绍
PID:每个进程的ID。
USER:进程所属用户。
PR:priority的简写,进程的优先执行顺序,越小越早被执行。
NI:nice的简写,与priority有关,也是越小越早被执行。
%CPU:CPU的使用率。
%MEM:内存的使用率。
TIME+:CPU使用时间的累加。
top默认使用CPU使用率(%CPU)作为排序的重点,如果你想要使用内存使用率排序,可以按下“M”,若要恢复则按下“P”即可,离开top按“q”。
3、查看进程相关性(进程树):pstree
pstree [A|U] [-up]
参数:
-A:各进程树之间的连接以ASCII字符来连接。
-U:各进程树之间的连接以utf8码来连接,在某些终端接口下可能会有错误。
-P:同时列出每个进程的PID。
-u:同时列出每个进程的所属账号名称。
可以用于查找指定进程号的进程相关性:
4、传递signal给指定PID:kill -signal PID
代号 | 名称 | 内容 |
1 | SIGHUP | 启动被终止的进程,可让该PID重新读取自己的配置文件,类似重新启动。 |
2 | SIGINT | 相当于用键盘输入ctrl+c中断进程的进行 |
9 | SIGKILL | 代表强制中断一个进程的进行,如果该进程执行到一半,那么尚未完成的部分可能会有“半成品”产生,类似vi会有.filename.swp保留下来。 |
15 | SIGTERM | 以正常的结束进程来终止该进程。由于是正常的终止,所以后续的操作会将它完成。不过,如果该进程已经发生问题,就是无法使用正常的方法终止时,输入这个signal也是没有用的。 |
17 | SIGSTOP | 相当于用键盘输入ctrl+z来暂停一个进程的进行。 |
常用的就是kill -9 pid,用于终止异常进程。
5、查看内存的使用情况:free
free [-b|-k|-m|-g] [-t]
参数:
-b:直接输入free时,显示的单位是KB,可以使用b(byte)、m(MB)、k(KB)和g(GB)来显示单位。
-t:在输出的最终结果中显示物理内存与swap的总量。
free -m
Mem是物理内存的量,Swap是虚拟内存的量,total是总量,used是已被使用的量,free是剩余可使用的量。shared/buffers/cached是已被使用的量当中用来作为缓冲及快取的量。
Linux系统为了要加快系统性能,所以会将最长使用到的或者是最近使用到的文件数据缓存下来,这样将来系统要使用该文件时,就直接由内存中取出,而不需要重新读取硬盘,速度上就加快了。因此,物理内存被用光是正常的。需要注意的是swap的量,一般来说,swap最好不要被使用,尤其swap最好不要被使用超过20%以上,如果超过20%,说明物理内存不足。
6、查看系统与内核相关信息:uname
参数:
-a:所有系统相关信息,包括下面的数据都会被列出来。
-s:系统内核名称。
-r:内核的版本。
-m:本系统的硬件名称,例如i686或x86_64等。
-p:CPU的类型,与-m类似,只是显示的是CPU的类型。
-i:硬件的平台(ix86)。
uname -a
7、查看系统启动时间与工作负载:uptime
uptime显示的内容其实就是top的第一行:
8、查看端口监听:netstat
参数:
-a:将目前系统上所有的连接、监听、Socket数据都列出来。
-t:列出tcp网络数据包的数据。
-u:列出udp网络数据包的数据。
-n:不列出进程的服务名称,以端口号(port number)来显示。
-l:列出目前正在网络监听(listen)的服务。
-p:列出该网络服务的进程PID。
列介绍:
1、Proto:网络的数据包协议,主要分为TCP和UDP数据包。
2、Recv-Q:非由用户进程连接到此socket的复制的总字节数。
3、Send-Q:非由远程主机传送过来的acknowledged总字节数。
4、LocalAddress:本地的IP端口情况。
5、ForeignAddress:远程主机的IP端口情况。
6、State:连接状态,主要由建立(ESTABLISED)及监听(LISTEN)。
7、PID/Program name:进程号/进程名
从LocalAddress结合State可以判断出当前服务器上哪个端口有没有被监听。
9、分析内核产生的信息:dmesg
系统在开机的时候,内核会去检测系统的硬件,硬件到底有没有被识别出来,就与这个时候的检测相关。但是这些检测的过程要不是没有显示在屏幕上,就是很飞快地在屏幕上一闪而逝,用dmesg就可以把内核检测的信息打印出来。所有内核检测的信息,不管是开机的时候还是系统运行过程中,只要是内核产生的信息都会被记录到内存中的某个保护区段。dmesg这个命令就能够将该区段的信息读出来。
使用方法:
1、使用|more的方式使界面暂停,dmesg | more
按回车键可以往下继续查看,按q退出。
2、用grep筛选出指定硬件相关信息,如查看硬盘相关信息:dmesg | grep -i hd
10、检测系统资源的变化:vmstat
参数:
-a:使用inactive/active(活跃与否)替代buffer/cache的内存输出信息。
-f:开机到目前为止系统复制(fork)的进程数。
-s:将一些事件(开机至目前为止)导致的内存变化情况列表说明。
-S:后面可以接单位,让显示的数据有单位。
-d:列出磁盘的读写总量统计表。
-p:后面列出分区,可现实该分区的读写总量统计表。
统计目前主机CPU状态,每秒1次,共计3次:vmstat 1 3
各字段的含义:
进程字段(procs)的选项分别为:
r:等待运行中的进程数量,b:不可被唤醒的进程数量。这两个选项越多,代表系统越忙碌(因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)。
内存字段(memory)的选项分别为:
swpd:虚拟内存被使用的容量,free:未被使用的内存容量,buff:用于缓冲存储器,cache:用于高速缓存。这部分与free命令的输出是相同的。
内存交换空间(swap)的选项分别为:
si:由磁盘中将程序取出的量,so:由于内存不足而将没用到的程序写入到磁盘的swap的容量。如果si/so的数值太大,表示内存内的数据经常得在磁盘与内存之间传来传去,系统性能会很差。
磁盘读写(io)的选项分别为:
bi:由磁盘写入的块数量,bo:写入到磁盘去的块数量。如果这部分的值很高,代表系统的I/O非常忙碌。
系统(system)的选项分别为:
in:每秒被中断的进程次数,cs:每秒钟进行的时间切换次数。这两个数值越大,代表系统与接口设备的通信非常频繁。这些接口设备包括磁盘、网卡、时钟等。
CPU的选项分别为:
us:非内核层的CPU使用的百分比,sy:内核层所使用的CPU的百分比,id:闲置的CPU百分比,wa:等待I/O所耗费的CPU百分比,st:被虚拟机所盗用的CPU的使用百分比。
如果要一直检测系统状态,可以不指定总次数,如:vmstat 1,表示1秒检测一次,按ctrl+c停止。
11、查看硬盘存取数据信息:iostat
如果Linux没有安装这个工具的话可以使用apt install sysstat进行安装。
Iostat [-c|-d] [-k|-m] [-t] [间隔秒数] [检测次数]
参数:
-c:仅显示CPU的状态;
-d:仅显示存储设备的状态,不可与-c一起用;
-k:默认显示的是block,这里可以改成KB的大小来显示;
-m:与-k类似,只是以MB的单位来显示结果;
-t:显示日期;
关注sda那一行:
tps:平均每秒钟的传送次数,与数据传输的“次数”有关,非容量;
kB_read/s:开机到现在平均的读取单位;
kB_wrtn/s:开机到现在平均的写入单位;
kB_read:开机到现在总共读出来的文件单位;
kB_wrtn:开机到现在总共写入的文件单位;
每两秒钟检测一次存储设备,共检测三次:
12、显示日期:date
参考资料
《鸟哥的Linux私房菜基础学习篇(第三版)》