Linux_《Linux命令行与shell脚本编程大全》第四章学习总结

时间:2017年04月07日程序员

说明:本文部份内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原做者全部。《Linux命令行与shell脚本编程大全》(第三版)第四章学习总结正则表达式

第四章:更多的bash shell命令

本章内容:算法

管理进程
获取磁盘统计信息
挂载新磁盘
排序数据
归档数据

4.1 监测程序

Linux系统管理员面临的最复杂的任务之一就是跟踪运行在系统中的程序,尤为是如今,图形化桌面集成了大量的应用来生成一个完整的桌面环境。系统中老是运行着大量的程序。shell

4.1.1 探查进程

当程序运行在系统上时,咱们称之为进程。想监测这些进程,须要熟悉ps命令的用法。编程

命令:ps数组

命令格式:ps
命令说明:ps命令只会显示运行在当前控制台下的属于当前用户的进程。
    基本输出显示了程序的进程ID(ProcessID,PID)、它们运行在哪一个终端(TTY)以及进程已用CPU时间。

Linux系统中使用的GNU ps命令支持3中不一样类型的命令行参数:安全

Unix风格的参数,前面加单破折线(-)
BSD风格的参数,前面不加破折线()
GNU风格的参数,前面加双破折线(--)

1.Unix风格的参数bash

Unix风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的ps命令继承下来的。这些命令以下:服务器

-A:显示全部进程
-N:显示与指定参数不符的全部进程
-a:显示除控制进程和无终端进程外的全部进程
-d:显示除控制进程外的全部进程
-e:显示全部进程
-C cmdlist:显示包含在cmdlist列表中的进程
-G grplist:显示包含在grplist列表中的进程
-U userlist:显示属主的用户ID在userlist列表中的进程
-g grplist:显示会话或组ID在grplist列表中的进程
-p pidlist:显示PID在pidlist列表中的进程
-s sesslist:显示会话ID在sesslist列表中的进程
-t ttylist:显示终端ID在ttylist列表中的进程
-u userlist:显示有效用户ID在userlist列表中的进程
-F:如今更多额外输出(相对于-f参数而言)
-O format:显示默认的输出列以及format列表指定的特定列
-M:显示进程的安全信息
-c:显示进程的额外调度器信息
-f:显示完整格式的输出
-j:显示任务信息
-l:显示长列表
-o format:仅显示由format指定的列
-y:不要显示进程标记(process flag,代表进程状态的标记)
-Z:显示安全标签信息
-H:用层级格式来显示进程(树状,用来显示父进程)
-n namelist:定义了WCHAN列显示的值
-w:采用宽输出模式,不限款度显示
-L:显示进程中的线程
-V:显示ps命令的版本号

使用ps命令的关键不在于记住全部可用的参数,而在于记住最有用的哪些参数。多线程

例如你想查看系统上运行的全部进程,可用ps -ef命令。ps命令容许你像这样把参数组合在一块儿。-e参数指定显示全部运行在系统上的进程;-f参数则扩展了输出,这些扩展的列包含了有用的信息。

以下:

UID:启动这些进程的用户
PID:进程的进程ID
PPID:父进程的进程号(若是该进程是由另外一个进程启动的)
C:进程生命周期中的CPU利用率
STIME:进程启动时的系统时间
TTY:进程启动时的终端设备
TIME:运行进程须要的累计CPU时间
CMD:启动的程序名称

若是想要得到更多的信息,可采用-l参数,它会生产一个长格式输出。注意使用了-l参数以后多出的那些列:

F:内核分配给进程的系统标记
S:进程的状态
--O:表明正在运行
--S:表明正在休眠
--R:表明可运行,正等待运行
--Z:表明僵化,进程已结束但父进程已不存在
--T:表明中止
PRI:进程的优先级(越大的数字表明越低的优先级)
NI:谦让度值用来参与决定优先级
ADDR:进程的内存地址
SZ:假如进程被换出,所需交换空间的大体大小
WCHAN:进程休眠的内核函数的地址

2.BSD风格的参数

伯克利软件发行版(Berkeley software distribution,BSD)是加州大学伯克利分校开发的一个Unix版本。它和AT&T Unix系统有许多细小的不一样。BSD版的ps命令参数以下:

T:显示跟当前终端关联的全部进程
a:显示跟任意终端关联的全部进程
g:显示全部的进程,包括控制进程
r:仅显示运行中的进程
x:显示全部的进程,甚至包括未分配任何终端的进程
U userlist:显示归userlist列表中某用户ID全部的进程
p pidlist:显示PID在pidlist列表中的进程
t ttylist:显示所关联的终端在ttylist列表中的进程
O format:除了默认输出的列以外,还输出由format指定的列
X:按过去的Linux i386寄存器格式显示
Z:将安全信息添加到输出中
j:显示任务信息
l:采用长模式
o format:仅显示由format指定的列
s:采用信息格式显示
u:采用基于用户的格式显示
v:采用虚拟内存格式显示
N namelist:定义在WCHAN列中使用的值
O order:定义显示信息列的顺序
S:将数值信息从子进程加到父进程上,好比CPU和内存的使用状况
c:显示真实的命令名称(用以启动进程的程序名称)
e:显示命令使用的环境变量
f:用分层格式来显示进程,表名哪些进程启动了哪些进程
h:不显示头信息
k sort:指定用以将输出排序的列
n:和ECHAN信息一块儿显示出来,用数值来表示用户ID和组ID
w:为较宽屏幕显示宽输出
H:将线程按进程来显示
m:在进程后显示线程
L:列出全部格式指定符
V:显示ps命令的版本号

在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式。使用ps l命令,其中大部分的输出结果列跟使用Unix风格参数时的输出是同样的,只有一小部分不一样。以下:

VSZ:进程在内存中的大小,以千字节(KB)为单位
RSS:进程在未换出时占用的物理内存
STAT:表明当前进程状态的双字符状态码

许多系统管理员都喜欢BSD风格的l参数。它能输出更详细的进程状态码(STAT列)。第一个字符采用了和Unix风格s列相同的值,代表进程是在休眠、运行仍是等待。第二个参数进一步说明进程的状态。第二个参数说明:

<:该进程运行在高优先级上
N:该进程运行在低优先级上
L:该进程有页面锁定在内存中
s:该进程是控制进行
l:该进程是多线程的
+:该进程运行在前台

3.GNU长参数

GNU开发人员在这个新改进过的ps命令中加入了另一些参数。其中一些GNU长参数复制了现有的Unix或BSD类型的参数,而另外一些则提供了新功能。现有的GNU长参数以下:

--deselect:显示全部进程,命令行中列出的进程
--Gruop grplist:显示组ID在grplist列表中的进程
--User userlist:显示用户ID在userlist列表中的进程
--group grplist:显示有效组ID在grplist列表中的进程
--pid pidlist:显示PID在pidlist列表中的进程
--ppid pidlist:显示父PID在pidlist列表中的进程
--sid sidlist:显示会话ID在sidlist列表中的进程
--tty ttylist:显示终端设备号在ttylist列表中的进程
--user userlist:显示有效用户ID在userlist列表中的进程
--format format:仅显示有format指定的列
--context:显示额外的安全信息
--cols n:将屏幕宽度设置为n列
--columns n:将屏幕宽度设置为n列
--cunulative:包含已中止的子进程的信息
--forest:用层级结构显示出进程和父进程之间的关系
--headers:在每页输出中都显示列的头
--no-headers:不显示列的头
--lines n:将屏幕高度设为n行
--rows n:将屏幕高度设为n排
--sort order:指定将输出按哪列排序
--width n:将屏幕宽度设为n列
--help:显示帮助信息
--info:显示调试信息
--version:显示ps命令的版本号

能够将GNU长参数和Unix或BSD风格的参数混合用来定制输出。GNU长参数中一个着实让人喜好的功能就是--forest参数。它会显示进程的层级信息,并用ASCII字符绘出可爱的图表。这种格式让跟踪子进程和父进程变得十分容易。

4.1.2 实时监测进程

ps命令虽然在收集运行在系统上的进程信息时很是有用,但也有不足之处:它只能显示某个特定时间点的信息。若是想观察那些频繁换进换出的内存的进程趋势,用ps命令就不方便了。而top命令恰好适用这种状况。

命令:top

命令格式:top
命令说明:top命令跟ps命令类似,可以显示进程信息,但它是实时显示的。
注意:按q键退出。

top显示分为两部分:第一部分为系统整体概况;第二部分为进程详细列表。

第一部分:系统整体概况

第一行显示了当前时间、系统运行时间、登陆的用户数以及系统的平均负载。
--平均负载有三个值:最近1分钟的、最近5分钟的和最近15分钟的平均负载。
--值越大说明系统的负载越高。
--若是近15分钟内的平均负载都很高,就说明系统可能有问题。
--一般,若是系统的负载值超过了2,就说明系统比较繁忙了。
第二行显示了进程概要信息,top命令的输出中将进程叫做任务(task):有多少进程处在运行、休眠、中止或是僵化状态(僵化状态是指进程完成了,但父进程没有响应)。
第三行显示了CPU的概要信息。top根据进程的属主(用户仍是系统)和进程的状态(运行、空闲仍是等待)将CPU利用率分红几类输出。
第四行说的是系统的物理内存:总共有多少内存,当前用了多少,还有多少空闲。
第五行显示的也是系统的物理内存,不过是针对系统交换空间(若是分配了的话)的状态而言的。

第二部分:进程详细列表

第二部分显示了当前运行中的进程的详细列表,有些列跟ps命令的输出相似。具体以下:

PID:进程的PID
USER:进程属主的名字
PR:进程的优先级
NI:进程的谦让度值
VIRT:进程占用的虚拟内存总量
RES:进程占用的物理内存总量
SHR:进程和其余进程共享的内存总量
S:进程的状态
--D:表明可中断的休眠状态
--R:表明在运行状态
--S:表明休眠状态
--Z:表明僵化状态
--T:表明中止或跟踪状态
%CPU:进程使用的CPU时间比例
%MEM:进程使用的内存占可用内存的比例
TIME+:自进程启动到目前为止的CPU时间总量
COMMAND:进程所对应的命令行名称,也就是启动的程序名

4.1.3 结束进程

在Linux中,进程以前经过信号来通讯。进程的信号就是预约义好的一个消息,进程能识别它并决定忽略仍是作出反应。进程如何处理信号是由开发人员经过编程来决定的。这些信号以下:

信号:名称:描述
1:HUB:挂起
2:INT:中断
3:QUIT:结束运行
9:KILL:无条件终止
11:SEGV:段错误
15:TERM:尽量终止
17:STOP:无条件中止运行,但不终止
18:TSTP:中止或暂停,但继续在后台运行
19:CONT:在STOP或TSTP以后恢复执行

在Linux上有两个命令能够向运行中的进程发出进程信号。

1.kill命令

要发送进程信号,你必须是进程的属主或登陆为root用户。
命令:kill

命令格式:kill PID
命令说明:默认状况下,kill命令会向命令行中列出的PID出送一个TERM信号。TERM信号告诉进程尽量的话就中止运行。不过有时候进程一般会忽略这个请求。
命令演示:kill 3940
演示说明:尽量的终止PID为3940的进程。

命令格式:kill -s 信号名或信号值 PID
命令说明:若是要强制终止,-s参数支持指定其余信号(用信号名或信息值)。
命令演示:kill -9 3490
演示说明:强制无条件终止PID为3490的进程。提示:要检查kill命令是否有效,可再运行ps或top命令,看看问题进程是否已中止。

2.killall命令

killall命令很是强大,它支持经过进程名而不是PID来结束进程。killall命令也支持通配符,这在系统因负载过大而变得很慢时颇有用。
命令:killall

命令演示:killall http*
演示说明:上例中的命令结束了全部以http开头的进程,好比Apcahe Web服务器的httpd服务。

警告:以root用户身份登陆系统时,使用killall命令要特别当心,由于很容易就会误用通配符而结束了重要的系统进程。这可能会破坏文件系统。

4.2 监测磁盘空间

4.2.1 挂载存储媒体

在今天的图形化桌面环境里,大多数Linux发行版都能自动挂载特定类型的可移动存储媒体。

1.mount命令

Linux上用来挂载媒体的命令叫做mount。默认状况下,mount命令会输出当前系统上挂载的设备列表。mount命令提供以下四部分信息:

媒体的设备文件名
媒体挂载到虚拟目录的挂载点
文件系统类型
已挂载媒体的访问状态

Linux能够识别很是多的文件系统类型。若是是和Windows PC共用这些存储设备,经过得使用如下文件系统类型:

vfat:Windows长文件系统
ntfs:Windows NT、XP、Vista以及Windows7中普遍使用的高级文件系统
iso9660:标准CD-ROM文件系统

命令:mount

命令格式:mount -t type device directory
命令说明:type参数指定了磁盘被格式化的文件系统类型。后面两个参数定义了该存储设备的设备文件的位置以及挂载在虚拟目录中的位置。
命令演示:mount -t vfat /dev/sdb1 /media/disk
演示说明:手动将U盘/dev/sdb1挂载到/media/disk。

要手动在虚拟目录中挂载设备,须要以root用户身份登陆,或是以root用户身份运行sudo命令。媒体挂载到了虚拟目录后,root用户就有了该设备的全部访问权限,而其余用户的访问则会被限制。你能够经过目录权限(将在第七章介绍)指定用户对设备的访问权限。

若是要用到mount命令的一些高级功能,可用参数以下:

-a:挂载/etc/fstab文件中指定的全部文件系统
-f:使mount命令模拟挂载设备,但并不真的挂载
-F:和-a参数一块儿使用时,会同时挂载全部文件系统
-v:详细模式,将会说明挂载设备的每一步
-I:i:不启用任何/sbin/mount.filesystem下的文件系统帮助文件
-l:L:给ext二、ext3和XFS文件系统自动添加文件系统标签
-n:挂载设备,但不注册到/etc/mtab已挂帐设备文件中
-p num:进行加密挂载时,从文件描述符num中得到密码短语
-s:忽略该文件系统不支持的挂载选项
-r:将设备挂载为只读的
-w:将设备挂载为可读写的(默认参数)
-L label:将设备按指定的label挂载
-U uuid:将设备按指定的uuid挂载
-O:和-a参数一块儿使用,限制命令只做用到特定的一组文件系统上
-o:给文件系统添加特定的选项

-o参数容许在挂载文件系统时添加一些逗号分隔的额外选项。如下为经常使用的选项:

ro:以只读形式挂载
rw:以读写形式挂载
user:容许普通用户挂载文件系统
check=none:挂载文件系统时不进行完整性校验
loop:挂载一个文件

2.umount命令

从Linux系统上移除一个可移动设备时,不能直接从系统上移除,而应该先卸载。

窍门:Linux上不能直接弹出已挂载的CD。若是你在从光驱中移除CD时遇到麻烦,一般是由于该CD还挂载在虚拟目录里。先卸载它,而后再去尝试弹出。

命令:umount

命令格式:umount [ directory | device ]
命令说明:卸载设备。若是有任何程序正在使用设备上的文件,系统就不会容许你卸载它。

4.2.2 使用df命令

命令:df

命令格式:df
命令说明:df命令会显示有数据的已挂载文件系统。

命令输出以下:

设备的设备文件位置
能容纳多少个1024字节大小的块
已用了多少个1024字节大小的块
还有多少个1024字节大小的块可用
已用空间所占的比例
设备挂载到了哪一个挂载点上

使用-h参数,使输出结果可读。

命令格式:df -h
命令说明:按照用户已读的形式显示,一般用M来替代兆字节,用G替代吉字节。

4.2.3 使用du命令

命令:du

命令格式:du
命令说明:du命令能够显示某个特定目录的磁盘使用状况。默认状况下,会显示当前目录下全部的文件、目录的磁盘使用状况。

du命令经常使用的参数:

-c:显示全部已列出文件总大小。
-h:按用户易读的格式输出大小。
-s:显示每一个输出参数的总计。

4.3 处理数据文件

4.3.1 排序处理

命令:sort

命令格式:sort file
命令说明:sort命令会按照会话指定的默认语言的排序规则对文本文件中的数据进行排序。

一些经常使用的sort参数:

-b:排序时忽略起始的空白
-C:不排序,若是数据无序也不要报告
-c:不排序,但检查输入数据是否是已排序;未排序的话,报告
-d:仅考虑空白和字母,不考虑特殊字符
-f:默认状况下,会将大写字母排在前面;这个参数会忽略大小写
-g:按通用数字来排序
-i:在排序时忽略不可打印字符
-M:用三字符月份名按月份排序
-m:将两个已排序数据文件合并
-n:按字符串数值来排序
-o:将排序结果写出到指定的文件中
-R:按随机生成的散列表的键值排序
-r:反序排序
-S:指定使用的内存大小
-s:禁用最后重排序比较
-T:指定一个位置来存储临时工做文件
-t:指定一个用来区分键位置的字符
-u:和-c参数一块儿使用时,检查严格排序;不和-c参数一块儿使用时,仅输出第一例类似的两会
-z:用NULL字符做为行尾,而不是用换行符

4.3.2 搜索数据

命令:grep

命令格式:grep [options] pattern [file]
命令说明:grep命令行会在输入或指定的文件中查找包含匹配指定模式的字符的行。
命令演示:grep three file
命令说明:在file文件中查找包含three的行。

grep命令比较经常使用的参数:

-v:进行反向搜索
-n:显示匹配模式的行所在的行号
-c:显示有多少行含有匹配的模式
-e:指定多个匹配模式,默认显示含有多个匹配模式的全部行

grep的匹配模式支持使用正则表达式。将在第二十章介绍正则表达式。

4.3.3 压缩数据

Linux包含了多种文件压缩工具。虽然听上去不错,但这实际上常常会在用户下载文件时形成混淆。
如下是Linux上的文件压缩工具:

工具:文件扩展名:描述
bzip2:.bz2:采用Burrows-Wheeler块排序文件压缩算法和霍夫曼编码
compress:.Z:最初的Unix文件压缩工具,已经快没人用了
gzip:.gz:GNU压缩工具,用Lempel-Ziv编码
zip:.zip:Windows上PKZIP工具的Unix实现

gzip是Linux上最流行的压缩工具。gzip是GNU项目的产物,包含如下工具:

gzip:用来压缩文件
gzcat:用来查看压缩过的文本文件的内容
gunzip:用来解压文件

命令:gzip

命令格式:gzip 文件
命令说明:对指定文件进行压缩
命令演示:gzip demo.sh
演示说明:压缩demo.sh文件

命令:gunzip

命令格式:gunzip文件
命令说明:对指定文件进行解压
命令演示:gzip gunzip.sh.gz
演示说明:解压demo.sh压缩文件

4.3.4 归档数据

tar命令的功能:

-A:将一个已有tar归档文件追加到另外一个已有tar归档文件
-c:建立一个新的tar归档文件
-d:检查归档文件和文件系统的不一样之处
-r:追加文件到已有tar归档
-t:列出已有tar归档文件的内容
-u:将此tar归档文件中已有的同名文件新的文件追加到该tar归档文件中
-x:从已有tar归档文件中提取文件

tar命令选项:

-C dir:切换到指定目录
-f file:输出结果到文件或设备file
-j:将输出结果重定向给bzip2命令来压缩内容
-p:保留全部文件权限
-v:在处理文件时显示文件
-z:将输出重定向给gzip命令来压缩内容

命令:tar

命令格式:tar function [options] object1 object2 ...
命令说明:将文件object1和object2等待归档到一个tar文件中。
命令演示:tar -cvf test.tar test/ test2/
演示说明:建立了名为test.tar的归档文件,含有test和test2目录内容。

命令格式:tar -xvf 文件
命令说明:从tar文件中提取文件。

命令格式: tar zcvf demo.tar.gz demo【推荐使用】
命令说明:将文件夹压缩为.tar.gz文件。

命令格式:tar zxvf  demo.tar.gz
命令说明:将压缩文件解压。

窍门:下载了开源软件以后,你会常常看到文件名以。tgz结尾。这些是gzip压缩过的tar文件能够用命令tar -zxvf filename.tgz来解压。

4.4 小结

本章讨论了Linux系统管理员和程序员用到的一些高级bash命令。主要介绍了ps、top、kill、killall、mount、umount、df、du、sort、grep、gzip、gzcat、gunzip、tar命令。

本章学习命令我的总结以下:

ps:查看系统进程相关信息
top:实时监测系统进程相关信息
kill:经过PID结束单个进程
killall:经过进程名或通配符来结束多个进程
mount:挂载存储媒体,如:U盘,CD等
umount:卸载存储媒体
df:查看磁盘的使用状况
du:查看目录或文件的大小
sort:对文本文件的内容进行排序
grep:搜索数据,在输入或指定的文件中查找包含匹配指定模式的字符的行
gzip:压缩文件
gzcat:查看压缩过的文本文件的内容
gunzip:解压文件
tar:归档数据,可以对文件和目录进行压缩和解压缩
相关文章
相关标签/搜索