Linux 命令行与 shell 脚本编程大全 4 更多的 ba
2019-11-17 本文已影响0人
asing1elife
了解一些 shell 的管理命令
更多精彩
- 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线
4.1 监测程序
- Linux 系统管理员面临的最复杂任务之一就是 跟踪运行在系统中的程序
4.1.1 ps 命令探查进程
- 当程序运行在 Linux 中时,被称为 进程( Process )
-
ps
命令可以输出运行在系统上的所有程序的进程信息 - 默认情况下,
ps
命令只会显示当前控制台下,当前用户运行的所有进程,如下图- zsh shell 就是运行在当前系统的一个程序
- PID 是进程 ID( Process ID )
- TTY 是终端代号
- TIME 是进程已经使用的 CPU 时间
-
CMD 是进程名称
image
4.1.1.1 ps 命令支持的三种参数风格
- Unix 风格,在参数前加 单破折号
- 一般使用这个风格就可以了
- BSD 风格,参数前 没有破折号
- GNU 风格,在参数前加 双破折号
4.1.1.2 ps 命令的参数使用
-
ps
命令光类型就有三种,每种类型拥有的参数都很多,所以要记住ps
命令的所有参数是完全没必要的 - 只需要记住常用场景下的几个固定组合即可
4.1.1.3 ps -ef 查看指定名称的进程完整信息
- 使用
ps -ef | grep processName
就可以看到指定名称的进程完整信息,如下图- 通过该命令查看到了 activemq 的进程信息
-
-e
指令显示所有运行在系统上的继承 -
-f
指令对输出内容进行扩展,显示更完整的信息 -
| grep
则是通过管道对所有进程进行过滤,只显示和 activemq 有关的信息
4.1.2 top 命令实时监测进程
-
top
命令可以实时的显示进程信息,如下图- 在终端输入
top
后,会进入到如下界面,整个界面的各种参数会一直变化,表示在实时监测系统进程 - 按 q 或者 Ctrl+C 即可退出
- 在终端输入
-
上图是 macOS 中显示的界面,下图是 CentOS 中显示的界面
4.1.3 kill 命令结束进程
4.1.3.1 Linux 中进程通信方式
- 在 Linux 中进程之间通过信号实现通信
- 进程的信号是预定义好的消息,进程能识别这个信号并进行相应的操作判断:忽略或反馈
- 进程如何处理信号由开发人员通过编程决定
- 大多数编写完善的程序都能接收和处理标准的 Unix 进程信号,Linux 沿用了 Unix 进行进程间通信的方式
-
Linux 进程信号如下图
4.1.3.2 kill 命令的使用
-
kill
命令可以通过进程 ID 给进程发信号 - 默认情况下,会向指定的进程发送一个 TERM 信号,但如果进程处于无响应状态,则不会终止
- 而且只能对当前用户拥有权限的进程发起信号,否则会抛出
Operation not premitted
的信息 - 日常使用中,最常用的场景是先通过
ps
命令获取对应进程的 PID ,然后再使用kill
命令杀掉进程,如下图- 由于杀掉进程后不会有任何输出,所以还需要使用
ps
命令再查一遍,才能知道结果 -
-9
就表示无条件终止进程
- 由于杀掉进程后不会有任何输出,所以还需要使用
4.1.3.3 killall 命令的使用
-
kill
命令的缺陷在于只能通过 PID 来对进程发信号 -
killall
命令则可以直接通过进程名称给进程发信号,还支持通配符 - 但非常容易误伤,不推荐使用
4.2 监测磁盘空间
4.2.1 挂载存储媒体
- 挂载( Mounting ) 是指在使用新的存储媒体之前,需要将其放到虚拟目录中
4.2.1.1 mount 命令实现挂载媒体
-
mount
命令用于挂载媒体 - 默认情况下,
mount
命令会输出当前系统上挂载的设备列表,如下图
- 只有通过 root 用户登录,或使用
sudo
命令作为前缀,才能手动在虚拟目录中挂载设备 - 挂载设备的完整命令是
mount -t type device directory
-
type
指磁盘的文件系统类型 -
device
指存储设备的位置 -
directory
指挂载点在虚拟目录中的位置
-
4.2.1.2 umount 命令实现卸载媒体
- 在 Linux 中移除一个可移动设备的方式叫 卸载
-
umount [ directory | device ]
命令可用于移除一个目录或设备 - 但是如果有任何程序正在使用设备上的文件,就无法完成卸载
4.2.2 df 命令查看磁盘空间
- 使用
df
命令可以查看系统中所有已挂载磁盘的使用情况,如下图-
只显示有数据的已挂载磁盘
-
4.2.2.1 -h 参数优化磁盘空间显示效果
-
df
命令默认使用字节来显示磁盘的空间大小 - 使用
df -h
可以将空间大小的单位上升到 M ,如果数值足够大,也会自动上升到 G ,如下图
4.2.3 du 命令显示指定目录使用情况
-
du
命令可以显示指定目录的磁盘使用情况 - 默认情况下会 显示当前目录下,所有的文件、目录和子目录的磁盘使用情况 ,如下图
- 尽量不要在层级太高的目录使用,否则就会输出一堆数据
-
最前面的数值默认显示的是目录或文件占用的磁盘块数
4.2.3.1 -h 指令优化数值显示效果
-
du -h
可以将文件或目录占用的空间大小用 K 、M 或 G 代替,如下图
4.2.3.2 -s 指令统计当前目录的总大小
-
du -sh
可以统计当前目录的总大小,同时使用更易读的格式进行显示,如下图
4.3 处理数据文件
4.3.1 sort 命令排序数据
-
sort
命令可以对数据进行排序 - 默认情况下,
sort
命令会按照 默认语言的排序规则 对文件中的数据行进行排序,如下图-
默认语言的排序规则,一般指的是按照字符顺序进行排序
-
4.3.1.1 -n 指令实现按值排序
-
sort -n
命令可以让sort
命令识别文件中的数字,实现按数值排序,如下图
4.3.2 grep 命令搜索数据
-
grep
命令会在指定的文件中查找包含指定字符的数据行,如下图
4.3.2.1 -v 指令实现反向搜索
-
grep -v
命令可以实现反向搜索,就是显示除了被匹配字符的其他数据行,如下图
4.3.2.2 -n 指令显示数据行的行号
-
grep -n
命令可以实现在显示匹配数据行的同时,将对应的行号显示出来,如下图
4.3.2.3 -c 指令显示匹配数据行的总数
-
grep -c
命令可以实现统计匹配数据行的总数,而不是显示每个数据行的数据,如下图
4.3.2.4 -e 指令指定多个匹配字符
-
grep -e
命令可以实现同时匹配多个字符,如下图
- 如果在匹配多个字符的同时,还希望能显示行号,则需要按照如下方式编写
-
-n
指令不能直接跟在-e
后面,如-en
,这样就会抛出语法错误
-
4.3.2.5 grep 的一些扩展解释
-
grep
命令支持最基本的 Unix 风格的正则表达式,用于扩充匹配模式 -
egrep
命令是grep
命令的衍生版本,支持 POSIX 扩展正则表达式- POSIX 扩展正则表达式拥有更多的可以用于指定匹配模式的字符
-
fgrep
命令也是grep
命令的衍生版本,支持将匹配到的数据放入到文件中
4.3.3 压缩数据
- 压缩文件指的就是 zip 文件 ,可以通过压缩将大型文件变成相对较小的文件
-
下图中列出 Linux 中的文件压缩工具
4.3.3.1 使用 gzip 对文件进行操作
-
gzip fileName
可以对文件进行压缩,gunzip fileName
可以对压缩包进行解压,如下图
-
gzcat fileName
可以查看压缩包的内容,如下图
4.3.4 tar 命令归档数据
-
tar
命令是 Unix 和 Linux 上使用最广泛的归档工具 -
tar
命令最开始用于将文件归档到磁带设备上,同时也能将输出内容写入到文件中,目前已经被用来做数据归档 -
tar function [ options ] object1 object2 ...
是tar
命令的完整语法-
function
表示命令将要做什么 -
options
表示在做什么的同时能够指定一些参数实现特定行为
-
-
function
的可选参数如下
-
options
的可选参数如下
4.3.4.1 举几个实用例子
-
tar -cvf
命令实现在创建新的归档文件的同时显示归档过程,以及输出结果,如下图
-
tar -tf
命令实现查看归档文件内容,但不解压文件,如下图
-
tar -xvf
命令实现解压归档文件,并输出结果,如下图
4.4 小结
-
ps
命令可以看到哪些应用在运行 -
top
命令可以看到哪些应用在运行的同时占用了多少资源 -
mount
命令可以实现挂载设备,但需要 root 权限 -
umount
命令可以实现卸载设备,也需要 root 权限 -
sort
命令可以对文件的内容进行排序 -
grep
命令可以对文件的内容进行搜索 -
tar
命令可以对文件进行解压缩