目录
🎄一、概述
上篇文章 bash shell 基础命令 中,介绍了一些与目录、文件相关的 shell 命令,本文继续介绍其他与进程、磁盘、排序、归档相关的命令,读者可以在自己的Linux系统下,实操这些命令,进而收悉并掌握这些命令。本文是一篇学习笔记,很多内容是参考了《Linux命令行与shell脚本编程大全-第四版》。
🎄二、进程相关命令
在 Linux 系统中,最难缠的一项任务是跟踪运行在系统中的程序,尤其是图形化桌面集成了大量的程序来生成一个完整的桌面环境。系统中始终运行着大量的程序。
✨2.1 ps 命令 —— 查看进程
当程序在系统中运行时,它被称为进程( process)。要想监测这些进程,必须熟悉 ps 命令的用法。 ps 命令堪比工具中的瑞士军刀,能够输出系统中运行的所有程序的大量信息。
默认的情况下,ps并不会输出太多信息wkd@ubuntu:~$ ps PID TTY TIME CMD 111693 pts/10 00:00:00 bash 111707 pts/10 00:00:00 ps wkd@ubuntu:~$
也没什么特别之处。 ps 命令默认只显示运行在当前终端中属于当前用户的那些进程。
Linux 系统中使用的 GNU ps 命令支持以下 3 种类型的命令行选项:
- Unix 风格选项,选项前加单连字符;
- BSD 风格选项,选项前不加连字符;
- GNU 长选项,选项前加双连字符。
1.Unix 风格选项
如果需要查看系统中运行的所有进程,可以使用-ef 选项组合,使用ps -ef
,读者可以自己在Linux系统试一下。
- -e 选项指定显示系统中运行的所有进程;
- -f 选项则扩充输出内容以显示一些有用的信息列。
wkd@ubuntu:~$ ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Jun14 ? 00:00:01 /sbin/init root 2 0 0 Jun14 ? 00:00:00 [kthreadd] root 3 2 0 Jun14 ? 00:02:04 [ksoftirqd/0] root 5 2 0 Jun14 ? 00:00:00 [kworker/0:0H] root 7 2 0 Jun14 ? 00:27:41 [rcu_sched]
输出信息每列的解释:
- UID:启动该进程的用户。
- PID:进程 ID。
- PPID:父进程的 PID(如果该进程是由另一个进程启动的)。
- C:进程生命期中的 CPU 利用率。
- STIME:进程启动时的系统时间。
- TTY:进程是从哪个终端设备启动的。
- TIME:运行进程的累计 CPU 时间。
- CMD:启动的程序名称。
如果还想获得更多的信息,可以使用-l 选项,产生长格式输出。
wkd@ubuntu:~$ ps -l F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 1001 111693 111692 0 80 0 - 6807 wait pts/10 00:00:00 bash 0 R 1001 111769 111693 0 80 0 - 3557 - pts/10 00:00:00 ps wkd@ubuntu:~$
-l
选项多的几列输出解释:
- F:内核分配给进程的系统标志。
- S:进程的状态( O 代表正在运行; S 代表在休眠; R 代表可运行,正等待运行; Z 代表
僵化,已终止但找不到其父进程; T 代表停止)。- PRI:进程的优先级(数字越大,优先级越低)。
- NI:谦让度( nice),用于决定优先级。
- ADDR:进程的内存地址。
- SZ:进程被换出时所需交换空间的大致大小。
- WCHAN:进程休眠的内核函数地址。
2.BSD 风格选项
在使用 BSD 风格的选项时, ps 命令会自动改变输出以模仿 BSD 格式。下面是使用 l 选项的输出。wkd@ubuntu:~$ ps l F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND 4 1001 111693 111692 20 0 27228 5784 wait S pts/10 0:00 bash 0 1001 111796 111693 20 0 14228 2276 - R+ pts/10 0:00 ps l wkd@ubuntu:~$
输出列解释:
- VSZ:进程占用的虚拟内存大小(以 KB 为单位)。
- RSS:进程在未被交换出时占用的物理内存大小。
- STAT:代表当前进程状态的多字符状态码。
状态的第一个字符表明进程是在休眠、运行还是等待。
第二个字符进一步说明了进程的状态:
<:该进程以高优先级运行。
N:该进程以低优先级运行。
L:该进程有锁定在内存中的页面。
s:该进程是控制进程。
l:该进程拥有多线程。
+:该进程在前台运行。
3.GNU 长选项
选项 解释 –deselect 显示除命令行中列出的进程之外的其他进程 –Group grplist 显示组 ID 在 grplist 列表中的进程 –User userlist 显示用户 ID 在 userlist 列表中的进程 –group grplist 显示有效组 ID 在 grplist 列表中的进程 –user userlist 显示有效用户 ID 在 userlist 列表中的进程 –pid pidlist 显示 pid 在 pidlist 列表中的进程 –ppid pidlist 显示父 pid 在 pidlist 列表中的进程 –sid sidlist 显示会话 ID 在 sidlist 列表中的进程 –tty ttylist 显示终端设备 ID 在 ttylist 列表中的进程 –format format 仅显示由 format 指定的列 –context 显示额外的安全信息 –cols n 将屏幕宽度设置为 n 列 –columns n 将屏幕宽度设置为 n 列 –cumulative 包含已停止的子进程的信息 –forest 用层级结构显示出进程和父进程之间的关系 –headers 在每页输出中都显示列名 –no-headers 不显示列名 –lines n 将屏幕高度设置为 n 行 –rows n 将屏幕高度设置为 n 行 –sort order 指定用于排序输出的列 –width n 将屏幕宽度设置为 n 列 –help 显示帮助信息 –info 显示调试信息 –version 显示 ps 命令的版本号
✨2.2 top 命令 —— 实时监测进程
top 命令也可以显示进程信息,但采用的是实时方式。直接在命令行输入
top
,不带任何参数,显示结果如下图:
输出的第一部分显示的是系统概况:
- 第一行显示了当前时间、系统的运行时长、登录的用户数以及系统的平均负载。平均负载最近 1 分钟、 5 分钟和15 分钟的平均负载,由于进程短期的突发性活动,最近 1 分钟的高负载值也很常见,如果近 15 分钟内的平均负载都很高,就说明系统可能有问题了。
- 第二行显示了进程( top 称其为 task)概况:多少进程处于运行、休眠、停止以及僵化状态(僵化状态指进程已结束,但其父进程没有响应)
- 第三行显示了 CPU 概况。 top 会根据进程的属主(用户或是系统)和进程的状态(运行、
空闲或等待)将 CPU 利用率分成几类输出。- 后面两行详细说明了系统内存的状态。前一行显示了系统的物理内存状态:总共有多少内存、当前用了多少,以及还有多少空闲。后一行显示了系统交换空间(如果分配了的话)的状态
- 最后一部分显示了当前处于运行状态的进程的详细列表,有些列跟 ps 命令的输出类似。
PID:进程的 PID。
USER:进程属主的用户名。
PR:进程的优先级。
NI:进程的谦让度。
VIRT:进程占用的虚拟内存总量。
RES:进程占用的物理内存总量。
SHR:进程和其他进程共享的内存总量。
S:进程的状态(D:可中断的休眠, R:运行, S:休眠, T:被跟踪或停止,Z:僵化)。
%CPU:进程使用的 CPU 时间比例。
%MEM:进程使用的可用物理内存比例。
TIME+:自进程启动到目前为止所占用的 CPU 时间总量。
COMMAND:进程所对应的命令行名称,也就是启动的程序名。
✨2.3 kill、pkill 命令 —— 结束进程
kill
命令可以通过 PID 向进程发送信号。在默认情况下, kill 命令会向命令行中列出的所有 PID 发送 TERM 信号。
可以使用kill pid号
来结束指定的pid号对应的进程;
如果有些进程接收kill
命令发送的 TERM 信号后,仍不结束,可以使用-s
选项发送其他信号,如:kill -s HUP pid号
pkill
命令可以使用程序名代替 PID 来终止进程,
🎄三、磁盘相关命令
✨3.1 mount、umount 命令 —— 挂载、卸载命令
用于挂载存储设备的命令叫作 mount。在默认情况下, mount 命令会输出当前系统已挂载的设备列表。
加-t
选项可以指定某个类型,输入mount -t ext4
,只显示 ext4 类型
下面是手动挂载设备的基本命令:mount -t type 设备文件 挂载的目录
例如,手动将 U 盘/dev/sdb1 挂载到/media/disk,可以使用命令:
mount -t vfat /dev/sdb1 /media/disk
移除可移动设备时,不能直接将设备拔下,应该先卸载。卸载设备的命令是
umount
,umount 命令的格式如下:umount [挂载的目录 | 设备文件 ]
umount 命令支持通过设备文件或者挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,则系统将不允许卸载该设备。
✨3.2 df 命令 —— 查看磁盘空间
有时需要知道在某台设备上还有多少磁盘空间。 df 命令可以方便地查看所有已挂载磁盘的使用情况,可以使用
-t
选项来过滤类型
使用
-h
选项会以人类易读( humanreadable)的形式显示磁盘空间:
✨3.3 du 命令 —— 查看特定目录磁盘空间
du 命令可以显示某个特定目录(默认情况下是当前目录)的磁盘使用情况。
在默认情况下, du 命令会显示当前目录下所有的文件、目录和子目录的磁盘使用情况,并以磁盘块为单位来表明每个文件或目录占用了多大存储空间。wkd@ubuntu:~$ du 4 ./Templates 8 ./.cache/logrotate 8 ./.cache/sso 12 ./.cache/update-manager-core 4 ./.cache/software-center/rnrclient 20 ./.cache/software-center/software-center-agent.db.tmp 4 ./.cache/software-center/icons 4 ./.cache/software-center/piston-helper 40 ./.cache/software-center 344 ./.cache/wallpaper 20 ./.cache/webkit/icondatabase 24 ./.cache/webkit 20 ./.cache/ibus/bus 24 ./.cache/ibus 116 ./.cache/compizconfig-1 148 ./.cache/upstart 780 ./.cache 4 ./Downloads 4 ./Pictures 4 ./Music 4 ./Desktop 4 ./Videos 4 ./Documents 4 ./Public 1492 .
每行最左侧的数字是每个文件或目录所占用的磁盘块数。注意,这个列表是从目录层级的最底部开始,然后沿着其中包含的文件和子目录逐级向上的。
下面这些选项能让 du 命令的输出更加清晰易读。
- -c:显示所有已列出文件的总大小。
- -h:按人类易读格式输出大小,分别用 K 表示千字节、 M 表示兆字节、 G 表示吉字节。
- -s:输出每个参数的汇总信息
🎄四、处理数据文件相关命令
✨4.1 sort 命令 —— 数据排序
sort 命令会依据会话所指定的默认语言的排序规则来对文本文件中的数据行进行排序。
默认情况下,按字符排序;其他选项如表:
选项 长 选 项 描述 -b –ignore-leading-blanks 排序时忽略起始的空白字符 -C –check=quiet 不排序,如果数据无序也不要报告 -c –check 不排序,但检查输入数据是否有序,无序的话就报告 -d –dictionary-order 仅考虑空白字符和字母数字字符,不考虑特殊字符 -f –ignore-case 大写字母默认先出现,该选项会忽略大小写 -g –general-numeric-sort 使用一般数值进行排序 -i –ignore-nonprinting 在排序时忽略不可打印字符 -k –key=POS1[,POS2] 排序键从 POS1 位置开始,到 POS2 位置结束(如果指定了 POS2的话) -M –month-sort 用三字符的月份名按月份排序 -m –merge 合并两个已排序数据文件 -n –numeric-sort 将字符串按数值意义排序 -o –output=file 将排序结果写入指定文件 -R –random-sort 根据随机哈希排序 -R –random-source=FILE 指定-R 选项用到的随机字节文件 -r –reverse 逆序排序(升序变成降序) -S –buffer-size=SIZE 指定使用的内存大小 -s –stable 禁止 last-resort 比较,实现稳定排序 -T –temporary-directory=DIR 指定用于保存临时工作文件的目录 -t –field-separator=SEP 指定字段分隔符 -u –unique 和-c 选项合用时,检查严格排序;不和-c 选项合用时,相同行仅输出一次① -z –zero-terminated 在行尾使用 NULL 字符代替换行符
✨4.2 grep 命令 —— 数据搜索
grep 命令会在输入或指定文件中逐行搜索匹配指定模式的文本。
grep 命令的格式如下:grep [options] pattern [file]
一些常用选项options:
-n
:显示行号-c
:只显示含有匹配的模式的行数;-w
:全词匹配,例如,grep apple -n ./file
时,只有搜到apple
,而不会搜到apples
;-R
:在目录中递归搜索
🎄五、总结
本文主要介绍一些shell常用的命令:ps、top、kill、pkill、mount、umount、df 、du、sort、grep等等
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁