《Linux命令行与shell脚本编程大全》 第四章 学习笔记
第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器
第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本
第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell
第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶
第四章:更多的bash shell命令
监测程序
ps (其他ps内容见#1 )
Unix风格的ps命令参数
参数 | 描述 |
-A | 显示所有进程 |
-N | 显示与指定参数不符的所有进程 |
-a | 显示除控制进程(session leader)和无终端的进程外的所有进程 |
-d | 显示除控制进程外的所有进程 |
-e | 显示所有进程 |
-C cmdlist | 显示包含在cmdlist列表中的进程 |
-G grplist | 显示组ID在grplist列表中的进程 |
-U userlist | 显示属主的用户ID在userlist列表中的进程 |
-g grplist | 显示会话或组(由Linux版本决定)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 | 显示安全标签(security context)信息 |
-H | 用层级格式显示进程(树状) |
-n namelist | 定义了WCHAN列显示的值 |
-w | 采用宽输出模式,不限宽度显示 |
-L | 显示进程中的线程 |
-V | 显示ps命令的版本号 |
UNIX列标题含义
UNIX标题 | 含义 |
ADDR | 进程表中的虚拟地址 |
C | 处理器利用率(废弃率) |
CMD | 正被执行的命令的名称 |
F | 内核分配给进程的系统标记 |
NI | nice值,用于设置优先级 |
PID | 进程ID |
PPID | 父进程的进程ID |
PRI | 优先级(数字越大优先级越低) |
RSS | 内存驻留空间大小(内存管理) |
S | 状态代码(D、R、S、T、Z) |
STIME | 累积系统时间(进程启动是的系统时间) |
SZ | 物理页的大小(内存管理) |
TIME | 运行进程需要的累积CPU时间 |
TTY | 控制终端的完整名称 |
UID | 用户标识 |
WCHAN | 等待通道(进程休眠的内核函数地址) |
BSD风格的参数
参数 | 描述 |
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 | 和WCHAN信息一起显示出来,用数值来表示用户ID和组ID |
w | 为较宽屏幕显示宽输出 |
H | 将线程按进程来显示 |
m | 在进程后显示线程 |
L | 列出所有格式指定符 |
V | 显示ps命令的版本号 |
BSD列标题和含义
BSD标题 | 含义 |
%CPU | CPU使用百分比 |
%MEM | 真实内存使用百分比 |
CMD | 正被执行的命令的名称 |
COMMAND | 正被执行的命令的完整名称 |
CPU | 短期CPU使用(调度) |
JOBC | 作业控制统计 |
LIM | 内存使用限额 |
NI | nice值,用于设置优先级 |
PAGEIN | 总的缺页错误(内存管理) |
PGID | 进程组号 |
PID | 进程ID |
PPID | 父进程的进程ID |
PRI | 调度优先级 |
RE | 内存驻留时间(单位为秒) |
RSS | 内存驻留空间大小(内存管理) |
SESS | 会话指针 |
SL | 睡眠时间(单位为秒) |
STARTED | 定时启动 |
STAT | 状态代码(O、R、S、T、Z) |
TIME | 累积CPU时间 |
TSIZ | 文本大小(单位为KB) |
TT | 控制终端的缩写名称 |
TTY | 控制终端的完整名称 |
UID | 用户标识 |
USER | 用户名 |
VSZ | 虚拟内存(单位KB) |
WCHAN | 等待通道 |
STAT状态代码第二个字符意义:
<:该进程运行在高优先级上
N:该进程运行在低优先级上
L: 该进程有页面锁定在内存中
s: 该进程是个控制进程
l: 该进程是多线程的
+: 该进程运行在前端
GNU风格的ps命令参数
参数 | 描述 |
--deselect | 显示所有进程,命令行中列出的进程 |
--Group grplist | 显示组ID在grplist列表中的进程 |
--User userlist | 显示用户ID在userlist列表中的进程 |
--group grplist | 显示有效组ID在grplist列表中的进程 |
--user userlist | 显示有效组用户ID在usrlist列表中的进程 |
--pid pidlist | 显示pid在pid列表中的进程 |
--ppid pidlist | 显示父pid在pidlist列表中的进程 |
--sid sidlist | 显示会话ID在sidlist列表中的进程 |
--tty ttylist | 显示终端设备号在ttylist列表中的进程 |
--fromat 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命令的版本号 |
top ( 实时监测进程 ) (其他top内容见#1 )
top
top - 09:40:29 up 5 min, 7 users, load average: 0.68, 0.79, 0.38
Tasks: 186 total, 1 running, 184 sleeping, 0 stopped, 1 zombie
Cpu(s): 9.2%us, 5.1%sy, 0.2%ni, 70.8%id, 13.8%wa, 0.0%hi, 1.0%si, 0.0%st
Mem: 3954168k total, 2169936k used, 1784232k free, 136224k buffers
Swap: 2899696k total, 0k used, 2899696k free, 790940k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2332 su1216 20 0 1337m 434m 27m S 16 11.3 0:40.47 java
1035 root 20 0 212m 43m 21m S 4 1.1 0:19.01 Xorg
2158 su1216 20 0 409m 56m 25m S 3 1.5 0:13.21 chromium-browse
1499 su1216 20 0 291m 35m 9180 S 1 0.9 0:04.76 compiz
1675 su1216 20 0 332m 18m 12m S 1 0.5 0:00.37 gnome-terminal
1616 su1216 20 0 215m 9.8m 7884 S 0 0.3 0:00.34 multiload-apple
1891 su1216 20 0 526m 54m 19m S 0 1.4 0:01.24 pidgin
第一部分:系统概况
第一行:当前时间,系统运行时间,登入的用户数以及系统的平均负载
平均负载的三个值分别为:最近一分钟、最近五分钟、最近十五分钟。值越大,说明系统负载越高。通常,如果系统的负载值超过了2,就说明系统比较繁忙了
第二行:top命令的输出中进程叫做任务(task):多少进程处在运行、休眠、停止或是僵化状态
第三行:CPU信息。top根据进程的属主(用户还是系统)和进程的状态(运行、空闲还是等待)将CPU利用率分成几类输出
第四行:系统物理内存。总共有多少,当前用了多少,还剩多少
第五行:同上,针对系统交换空间
第二部分:当前运行中的进程的详细列表
命令 | 描述 |
1 | 切换单CPU状态模式和对称处理器模式 |
B | 打开/关闭表中重要数字的加粗显示 |
I | 切换Irix/Solaris模式 |
Z | 设置表的颜色 |
l | 显示/关闭平均负载信息行 |
t | 显示关闭CPU信息行 |
m | 显示/关闭MEM和SWAP行 |
f | 添加/移除输出中的不同信息列 |
o | 更改信息行的显示顺序 |
F或O | 选择一列将进程排序(默认为%CPU) |
<或> | 将排序的行左移或右移一列 |
R | 切换正常排序还是倒序排序 |
H | 显示/关闭显示线程情况 |
c | 切换显示进程的命令名还是完整的命令行输入(包括参数) |
i | 切换是否显示空闲进程 |
S | 切换显示累计CPU时间还是相对CPU时间 |
x | 打开/关闭高亮显示排序列 |
y | 打开/关闭高亮显示运行中的任务 |
z | 切换彩色模式还是单色模式 |
b | 打开/关闭x和y模式的高亮模式 |
u | 显示某个用户的进程 |
n或# | 设置要显示的进程数 |
k | 结束指定的进程(必须是进程属主或root用户) |
r | 改变指定进程是优先级(必须是进程属主或root用户) |
d或s | 改变更新的间隔(默认是3s) |
W | 把当前设置写到一个配置文件中 |
q | 退出top命令 |
输出列的含义,部分和ps类似
PID:进程ID
USER:进程属主的名字
PR:进程的优先级
NI:进程的谦让度值
VIRT:进程占用的虚拟内存总量
RES:进程占用的物理内存总量
SHR:进程和其他进程共享的内存总量
S:进程的状态
%CPU:进程使用的CPU时间比例
%MEM:进程使用的内存占用内存的比例
TIME+:进程自启动到目前为止的CPU时间总量
COMMAND:进程的命令行名称,也就是启动的程序名
Linux沿用UNIX进行进程间通信的方法(信号)
大多数写的好的程序都能接收和处理标准UNIX进程信号
部分Linux进程信号
信号 | 名称 | 描述 |
1 | HUP | 挂起 |
2 | INT | 中断 |
3 | QUIT | 结束运行 |
9 | KILL | 无条件终止 |
11 | SEGV | 段错误 |
15 | TERM | 尽可能终止 |
17 | STOP | 无条件停止运行,但不终止 |
18 | TSTP | 停止或暂停,但继续在后台运行 |
19 | CONT | 在STOP或TSTP之后恢复执行 |
杀死进程
默认kill发送TERM信号
kill只能指定PID,不支持通配符
killall可以指定进程名,并支持通配符
killall http*
监测磁盘空间
挂在存储媒体
mount
mount提供下面4部分信息
媒体的设备文件名
媒体挂载到虚拟目录的挂载点
文件系统类型
已挂载媒体的访问状态
参数 | 描述 |
-t | 指定了磁盘被格式化的文件系统类型 |
-a | 挂载/etc/fstab文件中指定的所有文件系统 |
-f | 使mount命令模拟挂载设备,但并不真的挂载 |
-F | 和-a参数一起使用,将会并行的挂载所有文件系统 |
-v | 详细模式,将会说明挂载设备的每一步 |
-I | 不启用任何/sbin/mount.filesystem下的文件系统帮助文件 |
-l | 给ext2、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:挂载一个文件
mount -t vfat /dev/sdb1 /media/disk
将u盘(vfat格式)/dev/sdb1挂载到/media/disk
mount -t iso9660 -o loop test.iso ~/test_iso
将CD镜像文件(iso9660格式)test.iso挂载到~/test_iso
umount (卸载文件系统)
语法:
umount [directory | device ]
当有卸载的设备上有文件被使用时,系统不允许卸载,会给出提示
可以使用lsof获取使用此文件的进程
lsof file
df、du(见#2 )
数据处理
sort(排序)(其他sort内容见#3 )
单字母 | 全字 | 描述 |
-b | --ignore-leading-blanks | 排序时忽略起始空白 |
-C | --check=quiet | 不排序,如果数据无序也不报告 |
-c | --check | 不排序,但检查输入数据是不是已有序,未排序则报告 |
-d | --dictionary-order | 仅考虑空白和字母,不考虑特殊字符 |
-f | --ignore-case | 忽略大小写(默认情况下,会将大写字母排在前面) |
-g | --general-number-sort | 按通用数值来排序(与-n不同,把值当浮点数来排序,支持科学计数法表示) |
-i | --ignore-nonprinting | 排序时忽略不可打印字符 |
-k | --key=POS1[.POS2] | 排序从POS1位置开始,如果指定了POS2,则到POS2位置结束 |
-M | --month-sort | 用3字符月份按月份排序 |
-m | --merge | 将两个已排序数据文件合并 |
-n | --numeric-sort | 按字符串数值来排序(并不转换为浮点数) |
-o | --output=file | 将排序结果写入到指定文件中 |
-R | --random-sort | 按随机生成的哈希表的键值排序 |
--random-source=FILE | 指定-R参数用到的随机字节的源文件 | |
-r | --reverse | 反序 |
-S | --buffer-size=SIZE | 指定使用的内存大小 |
-s | --stable | 禁用最后的重排序比较 |
-T | --temporary-direction=DIR | 指定一个位置存储临时工作文件 |
-t | --field-separator=SEP | 指定一个用来区分键位置的字符 |
-u | --unique | 和-c参数一起使用时,严格检查排序;不与-c参数一起使用时,仅输出第一例相似的两行 |
-z | --zero-terminated | 用NULL字符来为每一行结尾而不是用换行符 |
grep(搜索数据)
-e:指定多于一个模式
grep -e t -e f file
grep [tf] file
上面两条命令等同(其他grep内容见#3 )
数据压缩
工具 | 文件扩展名 | 描述 |
bzip2 | .bz2 | 采用Burrows-Wheeler块排序文本压缩算法和霍夫曼编码 |
compress | .Z | 原始的Unix文件压缩工具,逐渐消失中 |
gzip | .gz | GNU压缩工具,用Lempel-Ziv编码 |
zip | .zip | Windows上PKZIP工具的Unix实现 |
1.bzip2工具
包括
bzip2:压缩文件
bzcat:显示压缩文件的文本文件内容
bunzip2:解压压缩后的.bz2文件
bzip2recover:尝试恢复损毁的压缩文件
(只管压缩,不管打包)
默认会用压缩后的文件替换原文件
2.gzip工具
包括
gzip:压缩文件
gzcat:显示压缩文件的文本文件内容
gunzip:解压文件
(只管压缩,不管打包)
3.zip工具
包括
zip:创建压缩文件,包含指定的文件和目录
zipcloak:创建一个加密的压缩文件,包含指定的文件和目录
zipnote:从zip文件中提取批注
zipsplit:将一个现有zip文件分割成多个更小的固定大小的文件
unzip:从压缩过的zip文件中提取文件和目录
(压缩并归档)
tar(归档数据)
语法:
tar function [options ] object1 object2 ...
function 参数列表
功能 | 全字名称 | 描述 |
-A | --concatenate | 将一个已有的tar归档文件追加到另一个已有tar归档文件 |
-c | --create | 创建一个新的tar归档文件 |
-d | --diff | 检查归档文件和文件系统的不同之处 |
--delete | 从已有tar归档文件中删除 | |
-r | --append | 追加文件到已有tar归档文件末尾 |
-t | --list | 列出已有tar归档文件的内容 |
-u | --update | 将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中 |
-x | --extract | 从已有tar归档文件中提取文件 |
常用选项
选项 | 描述 |
-C dir | 切换到指定目录 |
-f file | 输出结果到文件或设备file |
-j | 将输出重定向给bzip2命令来压缩内容 |
-p | 保留所有文件权限 |
-v | 在处理文件时显示文件 |
-z | 将输出重定向给gzip命令来压缩内容 |
1.《Unix & Linux 大学教程》 - 第二十六章 进程和作业控制
2.《Unix & Linux 大学教程》 - 第二十四章 目录操作
3.《Unix & Linux 大学教程》 - 第十九章 过滤器:选取、排序、组合及变换
转贴请保留以下链接
本人blog地址