一、监视程序
1. 探查进程-ps命令
进程(process),我们可以使用ps
命令来检测这些进程。默认情况下,ps
不会提供太多的信息:
➜ ~ ps
PID TTY TIME CMD
7643 ttys000 0:01.32 -zsh
ps
命令,默认显示运行在当前控制台的进程,也就是-zsh shell
;- 上例显示了进程的
ID(process ID, PID)
,运作的终端TTY
,已经进程已用的CPU时间;
ps
命令支持三种不同类型的命令行参数,分别为Unix
风格,BSD
风格,GNU
风格;
详细可以书籍《Linux命令行与shell脚本编程大全》的P65-P70。
2. 实时监测-top命令
ps
命令的缺陷就是只能某个特定时间点的信息,如果想观察频繁进换的内存进程趋势,ps
是不方便的。
我们可以使用top
命令来进行实时显示,包括进程ID、内存占用率、CPU占用率等。
top - 22:45:42 up 8 min, 0 users, load average: 0.52, 0.58, 0.59
Tasks: 4 total, 1 running, 3 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 1.2 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
KiB Mem : 16595584 total, 10300344 free, 6065888 used, 229352 buff/cache
KiB Swap: 42742524 total, 42742524 free, 0 used. 10395964 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8940 316 272 S 0.0 0.0 0:00.06 init
9 root 20 0 8940 224 180 S 0.0 0.0 0:00.01 init
10 lyons 20 0 16780 3436 3340 S 0.0 0.0 0:00.06 bash
59 lyons 20 0 17624 2040 1508 R 0.0 0.0 0:00.01 top
进程详细信息:
PID
:进程ID。USER
:进程所有者的用户名。PR
:从系统内核角度看的进程调度优先级。NI
:进程的谦让度值,值越低优先级越高。
+VIRT
:进程申请使用的虚拟内存量。RES
:进程使用的驻留内存(即未被swap out的内存)量。SHR
:进程使用的共享内存量。S
:进程状态。R=running,S=interruptible sleeping,D=uninterruptible sleeping,T=stopped,Z=zombie。%CPU
:进程在一个更新周期内占用的CPU时间比例。%MEM
:进程占用的物理内存比例。TIME+
:进程创建后至今占用的CPU时间长度。COMMAND
:运行进程使用的命令。
二、监测磁盘
1. 挂载
Linux文件将所有的磁盘都并入一个虚拟目录,这项工作称为挂载
。
(1)mount命令:
默认情况下,mount
命令会输出当前系统上挂载的设备列表:
➜ ~ mount
/dev/disk1s5s1 on / (apfs, sealed, local, read-only, journaled)
devfs on /dev (devfs, local, nobrowse)
/dev/disk1s4 on /System/Volumes/VM (apfs, local, noexec, journaled, noatime, nobrowse)
/dev/disk1s2 on /System/Volumes/Preboot (apfs, local, journaled, nobrowse)
/dev/disk1s6 on /System/Volumes/Update (apfs, local, journaled, nobrowse)
/dev/disk1s1 on /System/Volumes/Data (apfs, local, journaled, nobrowse)
map auto_home on /System/Volumes/Data/home (autofs, automounted, nobrowse)
手动在虚拟目录上挂载设备,需要以root
用户身份登录,或者以root
用户身份运行sudo
命令。手动挂载的基本命令为:
mount -t type device directory
-t
:指定档案系统的型态,通常不必指定。mount 会自动选择正确的型态。type
对应磁盘被格式化的文件系统类型。通用的类型包括:vfat
,ntfs
,iso9660
。大多数U盘和软盘都会被格式化为vfat
文件系统。手动将/dev/sdb1
挂载到/media/disk
:
mount -t vfat /dev/sdb1 /media/disk
(2)umount命令:
从Linux系统移出一个可移动的设备时,不能直接从系统上移出,而应该先卸载。卸载设备的命令使用umount
,格式如下:
umount [-ahnrvV][-t <文件系统类型>][文件系统]
相关选项:
-a
:卸除/etc/mtab中记录的所有文件系统。-h
:显示帮助。-n
:卸除时不要将信息存入/etc/mtab文件中。-r
:若无法成功卸除,则尝试以只读的方式重新挂入文件系统。-t
:<文件系统类型> 仅卸除选项中所指定的文件系统。-v
:执行时显示详细的信息。-V
:显示版本信息。- [文件系统] 除了直接指定文件系统外,也可以用设备名称或挂入点来表示文件系统。
umount
命令支持通过设备文件或者挂载点来指定要卸载的设备。如果有任何程序正在使用,系统不允许卸载。
2. df命令
df
命令,用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。
前面讲过,与整个文件系统有关的数据,都保存在 Super block(超级块)中,而 df
命令主要读取的数据几乎都针对的是整个文件系统,所以df
命令主要是从各文件系统的 Super block 中读取数据。
df
命令的基本格式为:
df [选项] [目录或文件名]
相关选项:
选项 | 作用 |
---|---|
-a | 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统; |
-m | 以 MB 为单位显示容量; |
-k | 以 KB 为单位显示容量,默认以 KB 为单位; |
-h | 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量; |
-T | 显示该分区的文件系统名称; |
-i | 不用硬盘容量显示,而是以含有 inode 的数量来显示。 |
【例1】
[root@localhost ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823112 5585444 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
不使用任何选项的df
命令,默认会将系统内所有的文件系统信息,以 KB 为单位显示出来。
Filesystem
:表示该文件系统位于哪个分区,因此该列显示的是设备名称;1K-blocks
:此列表示文件系统的总大小,默认以 KB 为单位;Used
:表示用掉的硬盘空间大小;Available
:表示剩余的硬盘空间大小;Use%
:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;Mounted on
:文件系统的挂载点,也就是硬盘挂载的目录位置。
【例 2】
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm
使用了-h
选项,因此文件系统的各种容量数据,会以人们习惯的单位(通常使用 GB 或 MB)显示出来。
3. du命令
通过df
命令可以发现哪块磁盘的存储空间快没了,但无法具体到特定的目录。使用du
命令可以显示某个特定目录的磁盘使用情况。
du
命令的格式如下:
du [选项] [目录或文件名]
相关选项:
-
-a
:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量; -
-h
:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等; -
-s
:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量; -
-c
:显示所有列出文件的总的大小;
三、处理数据文件
1. 排序数据
默认情况下,sort
命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。
➜ Desktop sort file.txt
1
10
2
3
4
4
8
➜ Desktop cat file.txt
1
10
3
4
2
8
4
但sort
命令默认会将数字当做字符来执行标准字符排序。要解决这个问题,要加上-n
选项,告诉sort
命令把数字识别成数字,而不是字符:
➜ Desktop sort -n file.txt
1
2
3
4
4
8
10
Linux系统的日志文件经常会在每行的起始位置有一个时间戳,用来表明事件什么时候发生。sort
命令加上一个-M
的参数,可以按照月排序。
sort
还有其他的命令参数,详见书籍《Linux命令行与shell脚本编程大全》的P80。
2. 搜索数据
grep
命令用于查找文件里符合条件的字符串。格式如下:
grep [options] pattern [file]
例如:
grep three file1
从文件file
中查找匹配内容为three
的文本,输出该文本对应的行。
相关选项:
-v
:反向搜索,输出不匹配该模式的行;-n
:显示匹配模式行所在的行号;-c
:输出有多少行含有匹配的模式;-e
:匹配多个模式;
grep -e t -e f file1
# 同时匹配字符t和f
grep
还可以用基本的Unix风格正则表达式来匹配模式。比如:
grep [tf] file1
方括号表明grep
应该搜索含有t
和f
字符的匹配。
3. 压缩数据
Linux下最流行的压缩工具是gzip
,该软件包包含下面工具:
-
gzip
:用来压缩文件; -
gzcat
:用来查看压缩过的文本文件的内容; -
gunzip
:用来解压文件;
➜ ~ gzip file.txt
➜ ~ ls -l file*
-rw-r--r-- 1 tangtang staff 42 6 26 17:10 file.txt.gz
➜ ~ gzcat file.txt.gz
1
10
3
4
2
8
4
➜ ~ gunzip file*
➜ ~ ls -l file*
-rw-r--r-- 1 tangtang staff 15 6 26 17:10 file.txt
可以使用通配符来进行压缩和解压。
4. 归档数据
zip
命令不是Unix和Linux中标准归档工具,目前使用最广泛的工具是tar
命令。在使用tar命令的时候,tar命令本身用到的是归档功能,即文件没有真正进行压缩打包。格式如下:
tar function [options] object1 object2
相关选项:
-
独立参数,五选一:
-c
:建立压缩档案-x
:解压-t
:查看内容-r
:向压缩归档文件末尾追加文件-u
:更新原压缩包中的文件
-
可选参数:
-z
:有gzip
属性的-j
:有bz2
属性的-Z
:有compress
属性的-v
:显示所有过程-O
:将文件解开到标准输出
-
必要参数:
-f
: 最后一个参数,后面只能接档案名。
打包操作:
# 这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。
tar -cf all.tar *.jpg
# 这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
tar -rf all.tar *.gif
# 这条命令是更新原来tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
tar -uf all.tar logo.gif
# 这条命令是列出all.tar包中所有文件,-t是列出文件的意思
tar -tf all.tar
# 这条命令是解出all.tar包中所有文件,-t是解开的意思
tar -xf all.tar
压缩操作:
# 将目录里所有jpg文件打包成tar.jpg
tar -cvf jpg.tar *.jpg
# 将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
tar -czf jpg.tar.gz *.jpg
# 将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
tar -cjf jpg.tar.bz2 *.jpg
# 将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
tar -cZf jpg.tar.Z *.jpg
# rar格式的压缩,需要先下载rar for linux
rar a jpg.rar *.jpg
# zip格式的压缩,需要先下载zip for linux
zip jpg.zip *.jpg
解压操作:
# 解压 tar包
tar -xvf file.tar
# 解压tar.gz
tar -xzvf file.tar.gz
# 解压 tar.bz2
tar -xjvf file.tar.bz2
# 解压tar.Z
tar -xZvf file.tar.Z
# 解压rar
unrar e file.rar
# 解压zip
unzip file.zip