《Linux命令行与shell脚本编程大全》读书笔记
检测程序
探查进程命令ps
Linux使用的GNUps命令支持3种不同类型的命令行参数:
- Unix风格的参数,前面加单破折线;
- BSD风格的参数,前面不加破折线;
- GNU风格的长参数,前面加双破折线。
-e 选项
:指定显示所有运行在系统上的进程;
-f 选项
:扩展了输出。这些扩展的列包含如下信息。
--forest 选项
:显示进程层级信息,并用ASCII字符绘出图表。
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 May13 ? 00:00:01 /sbin/init
root 2 0 0 May13 ? 00:00:00 [kthreadd]
UID:启动这些进程的用户。
PID:进程的进程ID。
PPID:父进程的进程号。
C:进程生命周期中的CPU利用率。
STIME:进程启动时的系统时间。
TTY:进程启动时的终端设备。
TIME:运行进程需要的累计CPU时间。
CMD:启动的程序名称。
-l 选项
:产出长格式输出。
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 500 12955 12954 0 80 0 - 27084 wait pts/0 00:00:00 bash
0 R 500 14484 12955 0 80 0 - 27033 - pts/0 00:00:00 ps
F:内核分配给进程的系统标记。
S:进程的状态(O正在运行;S休眠;R可运行,正等待运行;Z僵化,进程已结束但父进程已不存在;T停止)。
PRI:进程优先级(越大的数字代表越低的优先级)。
NI:谦让度值用来参与决定优先级。
ADDR:进程的内存地址。
SZ:假如进程被换出,所需交换空间的大致大小。
WCHAN:进程休眠的内核函数的地址。
实时监测进程命令top
ps命令缺陷:只能显示某个特定时间点的信息。
top命令功能:实时显示进程信息。
[lsh@localhost ~]$ top
top - 18:26:32 up 1 day, 3:34, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 100 total, 1 running, 99 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.1%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1004412k total, 494168k used, 510244k free, 61572k buffers
Swap: 2031608k total, 0k used, 2031608k free, 242440k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19364 1548 1232 S 0.0 0.2 0:01.34 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
- 第一行:当前时间、系统运行时间、登录用户数、系统平均负载。
平均负载3个值:最近1分钟、最近5分钟、最近15分钟。
值越大负载越高。
重点
是最近15分钟
的平均负载很高,说明系统可能有问题。
通常,负载值超过CPU核数*0.7,就说明系统比较繁忙,需要优化。
使用命令:
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
[root@S6 core]# cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU核数
[root@S6 core]# cat /proc/cpuinfo| grep "cpu cores"| uniq
[root@S6 core]# grep 'model name' /proc/cpuinfo | wc -l
# 查看逻辑CPU的个数,即多少线程
[root@S6 core]# cat /proc/cpuinfo| grep "processor"| wc -l
第二行:进程(top命令输出中将进程叫任务)概要
运行进程数、休眠进程数、停止进程数、僵化进程数。第三行:CPU概要
根据进程属主(用户/系统)和进程状态将CPU利用率分成几类输出。紧随2行:内存状态
第一行:物理内存(总数、已用、剩余空闲),默认单位KB,可以按大写的E切换显示单位
第二行:交换空间(总数、已用、剩余)最后一部分:当前运行进程详细列表。
PID:进程ID。
USER:进程属主名字。
PR:进程优先级。
NI:进程谦让度。
VIRT:进程占用虚拟内存。
RES:进程占用物理内存。
SHR:进程和其他进程共享内存。
S:进程状态。
%CPU:进程使用的CPU时间比例。
%MEM:进程使用的内存占可用内存的比例。
TIME+:自进程启动到目前为止CPU时间总量。
COMMAND:进程所对应的命令行名称,也就是启动的程序名。
默认top命令按%CPU值对进程排序。可以在top运行时键入命令重新排序。
f 命令
:选择重新排序的字段。
d 命令
:修改轮询间隔。
q 命令
:退出top。
结束进程命令kill
- kill命令
只能通过进程的PID,而不能用命令名。
默认向命令行中列出的全部PID发送一个TERM信号。
要发进程信号,需要是进程的属主 / 登录为root用户。
-s 参数
:指定其他信号(信号名/信号值)。 - killall 命令
支持通过进程名而不是PID来结束进程。
也支持通配符,在系统因负载过大而变得很慢时很有用。
监测磁盘空间
挂载(mounting)存储媒体
今天的图形化桌面环境下,大多数Linux发行版能自动挂载特定类型的可移动存储媒体(CD、U盘等)。
- mount命令
默认输出当前系统挂载的设备列表。
[lsh@localhost ~]$ mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
输出4部分信息:
①媒体的设备文件名
②媒体挂载到虚拟目录的挂载点
③文件系统类型(vfat:Windows长文件系统(大多数U盘的格式),ntfs:Windows高级文件系统,iso9660:标准CD文件系统)
④已挂载媒体的访问状态
手动挂载设备,需要root权限。
基本命令:mount -t 文件系统类型 设备 目录
挂载之后,只有root用户有权访问,普通用户需要指定权限。
- umount命令
卸载设备命令格式:umount 目录/设备
如果卸载设备时,提示设备繁忙,无法卸载。可用lsof 命令
获得使用它的进程信息。
命令格式:lsof 目录
使用 df 命令
功能:查看所有已挂载磁盘使用情况。
-h 选项
:按照用户易读的形式显示输出。
[lsh@localhost ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 3.7G 13G 23% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 485M 35M 426M 8% /boot
命令输出:
①设备的设备文件位置;
②总容量;
③已用;
④剩余;
⑤已用空间所占比例;
⑥设备挂载到了哪个挂载点。
使用du命令
功能:显示某个特定目录(默认当前目录)的磁盘使用情况。可用来快速判断系统上某个目录下是否有超大文件。
[lsh@localhost ~]$ du -h
4.0K ./.gnome2
4.0K ./.mozilla/extensions
4.0K ./.mozilla/plugins
12K ./.mozilla
40K .
输出:当前目录下所有文件、目录和子目录的磁盘使用情况。
这个输出列表是从目录层级的最底部开始,然后按文件、子目录、目录逐级向上。
-c 选项
:显示所有已列出文件总大小。
-h 选项
:按用户易读格式输出大小。
-s 选项
:显示每个输出参数的总计。
处理数据文件
排序数据sort
默认按会话指定的默认语言的排序规则对文本文件
中的数据行排序。
默认把数字当作字符来执行标准的字符排序。
-n 选项
:告诉sort命令把数字识别成数字而不是字符,并按值排序。
-M 选项
:按月排序,在处理日志文件时比较有用。
搜索数据grep
命令格式:grep 选项 模式 文件
-v 选项
:反向搜索。
-n 选项
:显示匹配模式的行所在行号。
-c 选项
:只输出有多少行含有匹配的模式。
-e 选项
:指定多个匹配模式。例:grep -e 模式 -e 模式 文件
。
默认用Unix风格正则表达式来匹配模式。
初次之外,还有egrep和fgrep。
压缩数据gzip
gzip:压缩文件。
gzcat:查看压缩过的文本文件内容。
gunzip:解压文件。
归档数据tar
命令格式:tar 功能 选项 对象1 对象2
-c 功能
:创建一个新的tar归档文件。
-x 功能
:从已有tar归档文件中提取文件。
-f file选项
:输出结果到文件或设备file
-v 选项
:在处理文件时显示文件
-z 选项
:将输出重定向给gzip命令来压缩内容