Linux 常用的一些系统命令
文章的内容,基本来自每日一个 linux 命令,选取了几个在工作常用的命令,有:top、iostat、netstat 、free 和 ps,本文的主要目的是在学习这几条命令的过程中,简单做一些记录,便于日后工作中更加熟练地使用这些命令。
top
top 命令是 Linux 下面实时展示系统运行情况的一个命令,它也可以显示当前每个任务的系统信息。在对系统的性能进行分析,它是一个最常用的命令。
命令常用参数
- 命令格式:
- top [参数]
- 命令功能:
- 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
- 命令参数:
-b
: 批处理-c
: 显示完整的治命令-I
: 忽略失效过程-s
: 保密模式-S
: 累积模式-i<时间>
: 设置间隔时间-u<用户名>
: 指定用户名-p<进程号>
: 指定进程-n<次数>
: 循环显示的次数
显示说明
在命令行输入 top
命令,终端会展示当前系统的信息,如下所示
1 | [matt@XXX ~]$ top |
上面只是截取了部分的信息,这里介绍以下上面的一些信息的说明。上面的前五行是当前系统情况整体的统计信息区。
- 任务的队列信息,同 uptime 命令的执行结果
21:04:19
: 当前系统时间;up 129 days, 20:31
: 系统已经运行了129天20小时31分钟(这期间系统没有重启);1 users
: 当前有1个用户登录系统;load average: 58.32, 57.85, 57.50
: load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况(这个数除以逻辑 CPU 的数量,结果高于5的时候就表明系统在超负荷运转)
- Tasks — 任务(进程)的统计信息
- 系统现在共有589个进程,其中处于运行中的有1个,584个在休眠(sleep),stoped 状态的有0个,zombie 状态(僵尸)的有4个;
- cpu 的状态信息
22.3%us
: 用户空间占用 CPU 的百分比11.8% sy
: 内核空间占用 CPU 的百分比0.0% ni
: 改变过优先级的进程占用 CPU 的百分比63.2% id
: 空闲 CPU 百分比0.2% wa
: IO 等待占用 CPU 的百分比0.0% hi
: 硬中断(Hardware IRQ)占用 CPU 的百分比2.5% si
: 软中断(Software Interrupts)占用 CPU 的百分比0.0% st
: 虚拟机占用的百分比
- 内存的状态信息
132103752k total
: 物理内存总量(128GB)122070628k used
: 使用中的内存总量(118GB)10033124k free
: 空闲内存总量(10GB)42940k buffers
: 缓存的内存量 (42M)
- swap交换分区信息
0k total
: 交换区总量(0K)0k used
: 使用的交换区总量(0K)0k free
: 空闲交换区总量(0K)58734284k cached
: 缓冲的交换区总量(56GB)
- 空行,作为系统信息与进程信息的分界线
- 各进程(任务)的状态监控
PID
: 进程idUSER
: 进程所有者PR
: 进程优先级NI
: nice 值,负值表示高优先级,正值表示低优先级VIRT
: 进程使用的虚拟内存总量,单位 kb。VIRT=SWAP+RESRES
: 进程使用的、未被换出的物理内存大小,单位 kb。RES=CODE+DATASHR
: 共享内存大小,单位 kbS
: 进程状态。D= 不可中断的睡眠状态 R= 运行 S= 睡眠 T= 跟踪/停止 Z= 僵尸进程%CPU
: 上次更新到现在的CPU时间占用百分比%MEM
: 进程使用的物理内存百分比TIME+
: 进程使用的CPU时间总计,单位1/100秒COMMAND
: 进程名称
其中,第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到 free 中去,因此在 linux 上 free 内存会越来越少,但不用为此担心。
常用命令
在工作中,常用的几个命令在 每天一个linux命令(44):top命令 都已经介绍得比较全面了,这里,再简单重复一下。
多 CPU 监控
在 top 的基本视图中,按键盘数字1,可监控每个逻辑CPU的状况:
高亮显示当前进程
敲击键盘b(打开/关闭加亮效果),top 的视图变化如下(图来自每天一个linux命令(44):top命令)。
进程字段排序
默认进入 top 时,各进程是按照 CPU 的占用量来排序的,敲击键盘x(打开/关闭排序列的加亮效果),top 的视图变化如下所示,会将 CPU 占用量这行高亮(图来自每天一个linux命令(44):top命令)。
通过 shift + >
或shift + <
可以向右或左改变排序列,下图是按一次shift + >
的效果图,视图现在已经按照 %MEM
来排序(图来自每天一个linux命令(44):top命令)。
显示进程完成命令
敲击键盘c(打开/关闭进程完成命令),top 的视图变化如下(图来自每天一个linux命令(44):top命令)。
其他命令
top -p 574
: 显示指定的进程信息top -d 3
: 设置信息更新时间top -n 2
: 设置信息更新次数top -S
: 以累积模式显示程序信息top -Hp 2050
:显示该进程所有线程的详细信息
iostat
iostat 也即 I/O statistics(输入/输出统计),iostat 会对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU 使用情况。但它不能对某个进程进行深入分析,仅对系统的整体情况进行分析。
命令常用参数
1.命令格式:
- iostat [参数][时间][次数]
2.命令功能: - 通过 iostat 方便查看 CPU、网卡、tty设备、磁盘、CD-ROM 等等设备的活动情况,负载信息。
3.命令参数: -C
: 显示CPU使用情况-d
: 显示磁盘使用情况-k
: 以 KB 为单位显示-m
: 以 M 为单位显示-N
: 显示磁盘阵列(LVM) 信息-n
: 显示NFS 使用情况-p[磁盘]
: 显示磁盘和分区的情况-t
: 显示终端和CPU的信息-x
: 显示详细信息-V
: 显示版本信息
显示说明
使用 iostat 命令时,终端会显示很多很多的信息,这里介绍一下这些信息的含义。
1 | [matt@XXX ~]$ iostat |
- CPU 属性值说明:
%user
:CPU 处在用户模式下的时间百分比%nice
:CPU 处在带 NICE 值的用户模式下的时间百分比%system
:CPU 处在系统模式下的时间百分比%iowait
:CPU 等待输入输出完成时间的百分比%steal
:管理程序维护另一个虚拟处理器时,虚拟 CPU 的无意识等待时间百分比%idle
:CPU 空闲时间百分比
- disk 属性
tps
:该设备每秒的传输次数(Indicate the number of transfers per second that were issued to the device.)。kB_read/s
:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s
:每秒向设备(drive expressed)写入的数据量;kB_read
:读取的总数据量;kB_wrtn
:写入的总数量数据量,这些单位都为Kilobytes。
1 | [matt@XXX ~]$ iostat -xm 3 |
这里 disk 属性与上面的不太相同
rrqm/s
: 每秒进行 merge 的读操作数目。即 rmerge/swrqm/s
: 每秒进行 merge 的写操作数目。即 wmerge/sr/s
: 每秒完成的读 I/O 设备次数。即 rio/sw/s
: 每秒完成的写 I/O 设备次数。即 wio/srsec/s
: 每秒读扇区数。即 rsect/swsec/s
: 每秒写扇区数。即 wsect/srkB/s
: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。wkB/s
: 每秒写K字节数。是 wsect/s 的一半。avgrq-sz
: 平均每次设备 I/O 操作的数据大小 (扇区)。avgqu-sz
: 平均 I/O 队列长度。await
: 平均每次设备 I/O 操作的等待时间 (毫秒)。svctm
: 平均每次设备 I/O 操作的服务时间 (毫秒)。%util
: 一秒中有百分之多少的时间用于 I/O 操作,即被 IO 消耗的 CPU 百分比。
其中,下面是在实践中积累的一些经验
- 如果
%iowait
的值过高,表示硬盘存在 I/O 瓶颈; %idle
值高,表示 CPU 较空闲,如果%idle
值高但系统响应慢时,有可能是 CPU 等待分配内存,此时应加大内存容量。%idle
值如果持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU;- 如果
%util
接近 100%,说明产生的I/O请求太多,I/O 系统已经满负荷,该磁盘可能存在瓶颈,其值大于 70% 时,磁盘的压力就很大了; - 如果
svctm
比较接近await
,说明 I/O 几乎没有等待时间;如果await
远大于svctm
,说明 I/O 队列太长,IO 响应太慢,则需要进行必要优化; - 如果
avgqu-sz
比较大,也表示有当量 IO 在等待,它是 IO 调优时需要注意的地方,它是直接每次操作的数据的大小,如果次数多,但数据拿的小的话,其实 IO 也会很小; - await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明 I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。
常用示例
iostat 2 3
: 每隔 2 秒刷新显示,且显示 3 次;iostat -d sda
: 显示指定磁盘信息;iostat -t
: 显示 tty 和 CPU 信息;iostat -m
: 以M为单位显示所有信息;iostat -d -k 1 1
: 查看TPS和吞吐量信息;iostat -c 1 3
: 查看cpu状态;
ps
ps —— 是 process status 的简称,它列出的是当前时刻那些进程的快照,如果想要动态的显示进程信息内容,可以使用 top 命令。
使用 ps 可以做以下事情:
- 确定有哪些进程正在运行、查看运行的状态;
- 进程是否结束;
- 进程有没有僵死;
- 哪些进程占用了过多的资源等等。
Linux 进程的五种状态
在 Linux 上进程有5种状态,每种状态对应着不同的标识,如下表所示:
Linux 上状态 | ps 的状态码 |
---|---|
运行(正在运行或在运行队列中等待) | R(running or on run queue) |
中断(休眠中、受阻、在等待某个条件的形成和接收到信号) | S(sleeping) |
不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) | D(uninterruptible sleep) |
僵死(进程已终止,但进程描述符存在,直到父进程调用wait4()后才会释放) | Z(a defunct zombie process) |
停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) | T(traced or stopped) |
命令常用参数
- 命令格式
- ps [参数]
- 命令参数
a
:显示所有进程-a
:显示同一终端下的所有程序-A
:显示所有进程c
:显示进程的真实名称-N
:反向选择e
:显示环境变量f
:显示程序间的关系-H
:显示树状结构r
:显示当前终端的进程T
:显示当前终端的所有程序u
:指定用户的所有进程-au
:显示较详细的资讯-aux
:显示所有包含其他使用者的行程-C<命令>
:列出指定命令的状况--lines<行数>
:每页显示的行数--width<字符数>
:每页显示的字符数--help
:显示帮助信息--version
:显示版本显示
显示说明
将当前这次登入的 PID 与相关信息列示出来
1 | [matt@XXX ~]$ ps -l |
上面各个参数的含义:
F
: 代表这个程序的旗标 (flag), 4 代表使用者为 super userS
: 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍UID
: 程序被该 UID 所拥有PID
: 就是这个程序的 IDPPID
: 则是其上级父程序的IDC
: CPU 使用的资源百分比PRI
: 这个是 Priority (优先执行序) 的缩写NI
: 这个是 Nice 值ADDR
: 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running的程序,一般就是 “-“SZ
: 使用掉的内存大小WCHAN
: 目前这个程序是否正在运作当中,若为 - 表示正在运作TTY
: 登入者的终端机位置TIME
: 使用掉的 CPU 时间。CMD
: 所下达的指令为何
ps aux
1 | [matt@XXX ~]$ ps aux |
上面各个参数的含义:
USER
:该 process 属于那个使用者账号的PID
:该 process 的号码%CPU
:该 process 使用掉的 CPU 资源百分比%MEM
:该 process 所占用的物理内存百分比VSZ
:该 process 使用掉的虚拟内存量 (Kbytes)RSS
:该 process 占用的固定的内存量 (Kbytes)TTY
:该 process 是在那个终端机上面运作,若与终端机无关,则显示?
,若为pts/0
等等的,则表示为由网络连接进主机的程序。STAT
:该程序目前的状态START
:该 process 被触发启动的时间TIME
:该 process 实际使用 CPU 运作的时间COMMAND
:该程序的实际指令
使用示例
ps 的常用命令主要有以下几种用法:
ps -A
: 显示所有进程信息ps -u root
: 显示指定用户信息ps -ef
: 显示所有进程信息,连同命令行- 与
grep
一起,来查看指定的进程。
netstat
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字。
命令常用参数
- 命令格式:
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][–ip] - 命令参数:
- -a 或 –all 显示所有连线中的Socket。
- -A <网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
- -c 或 –continuous 持续列出网络状态。
- -C 或 –cache 显示路由器配置的快取信息。
- -e 或 –extend 显示网络其他相关信息。
- -F 或 –fib 显示FIB。
- -g 或 –groups 显示多重广播功能群组组员名单。
- -h 或 –help 在线帮助。
- -i 或 –interfaces 显示网络界面信息表单。
- -l 或 –listening 显示监控中的服务器的Socket。
- -M 或 –masquerade 显示伪装的网络连线。
- -n 或 –numeric 直接使用IP地址,而不通过域名服务器。
- -N 或 –netlink 或 –symbolic 显示网络硬件外围设备的符号连接名称。
- -o 或 –timers 显示计时器。
- -p 或 –programs 显示正在使用Socket的程序识别码和程序名称。
- -r 或 –route 显示Routing Table。
- -s 或 –statistice 显示网络工作信息统计表。
- -t 或 –tcp 显示TCP传输协议的连线状况。
- -u 或 –udp 显示UDP传输协议的连线状况。
- -v 或 –verbose 显示指令执行过程。
- -V 或 –version 显示版本信息。
- -w 或 –raw 显示RAW传输协议的连线状况。
- -x 或 –unix 此参数的效果和指定”-A unix”参数相同。
- –ip 或 –inet 此参数的效果和指定”-A inet”参数相同。
显示说明
这里看下在命令行下输入 netstat
显示内容的含义:
1 | [matt@XXXX ~]$ netstat |
netstat 的输出结果可分为两部分:
- 是 Active Internet connections,称为有源 TCP 连接,其中
Recv-Q
和Send-Q
指的是接收队列和发送队列,这些数字一般都应该是0,如果不是则表示软件包正在队列中堆积,这种情况只能在非常少的情况见到; - 另一个是 Active UNIX domain sockets,称为有源 Unix 域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍。
其中:
- Proto 显示连接使用的协议;
- RefCnt 表示连接到本套接口上的进程号;
- Types 显示套接口的类型;
- State 显示套接口当前的状态;
- Path 表示连接到套接口的其它进程使用的路径名。
套接口类型:
- -t :TCP
- -u :UDP
- -raw :RAW类型
- –unix :UNIX域类型
- –ax25 :AX25类型
- –ipx :ipx类型
- –netrom :netrom类型
状态说明:
- LISTEN:侦听来自远方的TCP端口的连接请求
- SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
- SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
- ESTABLISHED:代表一个打开的连接
- FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
- FIN-WAIT-2:从远程TCP等待连接中断请求
- CLOSE-WAIT:等待从本地用户发来的连接中断请求
- CLOSING:等待远程TCP对连接中断的确认
- LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
- TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
- CLOSED:没有任何连接状态
常用命令
列出所有的符合某些条件的连接
1 | # 累出所有连接 |
统计数据
1 | netstat -s |
显示路由信息
1 | netstat -rn |
显示UDP端口号的使用情况
1 | netstat -apu |
统计机器中网络连接各个状态个数
1 | netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' |
找出运行在指定端口的进程
1 | netstat -anpt | grep ':16064' |
kill
kill 主要使用结束 linux 后台进程的命令,kill命令是通过向进程发送指定的信号来结束相应进程的。
命令常用参数
- 命令格式
- kill[参数][进程号]
- 命令功能
- 发送指定的信号到相应进程。不指定信号时将发送
SIGTERM
(15)终止指定进程。如果任无法终止该程序,可使用发送的信号为SIGKILL
(9) ,将强制结束进程,使用 ps 命令或者 jbs 命令可以查看进程号。
- 发送指定的信号到相应进程。不指定信号时将发送
- 命令参数:
- -l 信号,若果不加信号的编号参数,则使用
-l
参数会列出全部的信号名称; - -a 当处理当前进程时,不限制命令名和进程号的对应关系
- -p 指定 kill 命令只打印相关进程的进程号,而不发送任何信号
- -s 指定发送信号
- -u 指定用户
- -l 信号,若果不加信号的编号参数,则使用
注意:
- kill 命令可以带信号号码选项,也可以不带。如果没有信号,kill 命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用 kill 向进程发送特定的信号。
- kill 可以带有进程 PID 号作为参数。当用 kill 向这些进程发送信号时,必须是这些进程的主人。
- 可以向多个进程发信号或终止它们。
- 应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用 kill 信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。
常用方法
所有的信号名称
1 | [XXX@XXX ~]$ kill -l |
其中,只有第 9 种信号( SIGKILL
)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
- HUP 1 终端断线
- INT 2 中断(同 Ctrl + C)
- QUIT 3 退出(同 Ctrl + \)
- TERM 15 终止
- KILL 9 强制终止
- CONT 18 继续(与STOP相反, fg/bg命令)
- STOP 19 暂停(同 Ctrl + Z)
彻底杀死进程
1 | kill –9 3268 |
参考:
公众号
个人公众号(柳年思水)已经上线,最新文章会同步在公众号发布,欢迎大家关注~