检测程序
-
探查进程
当程序运行在系统上时,我们称之为进程。ps命令能输出运行在系统上的所有程序的许多信息。默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程。在此例中,我们只运行了bash shell以及ps命令本身。程序的进程ID(PID)、运行在哪个终端(TTY)以及进程已用的CPU时间。
$ ps
PID TTY TIME CMD
5272 pts/0 00:00:00 bash
5347 pts/0 00:00:00 ps
- -l:产生一个长格式输出,
- -e:参数指定显示所有运行在系统上的进程
- -f:扩展了输出,这些扩展的列包含了有用的信息
- --forest:显示进程的层级信息,跟踪子进程和父进程
$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 5272 5262 0 80 0 - 29086 do_wai pts/0 00:00:00 bash
0 R 1000 5449 5272 0 80 0 - 38300 - pts/0 00:00:00 ps
$ ps --forest
PID TTY TIME CMD
5272 pts/0 00:00:00 bash
5541 pts/0 00:00:00 \_ ps
-
实时监测进程
ps命令只能显示某个特定时间点的信息。top命令能够显示进程信息,但它是实时显示的。
默认情况下,top命令在启动时会按照%CPU值对进程排序。可以在top运行时使用多种交互命令重新排序。键入f允许你选择对输出进行排序的字段,键入d允许你修改轮询间隔。键入q可以退出top。
-
结束进程
kill命令可通过进程ID(PID)给进程发信号(只能用进程的PID而不能用命令名)。
$ kill 3940
-bash: kill: (3940) - Operation not permitted
$
killall命令支持通过进程名而不是PID来结束进程。killall命令也支持通配符。下例中的命令结束了所有以http开头的进程
$ killall http*
$
检测磁盘空间
Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的存储媒体之前,需要把它放到虚拟目录下。这项工作称为挂载,mount命令会输出当前系统上挂载的设备列表,umount命令来卸载设备。
-
查看磁盘使用情况
df命令可以让你很方便地查看所有已挂载磁盘的使用情况。显示每个有数据的已挂载文件系统
设备的设备文件位置 | 能容纳多少个1024字节大小的块 | 已用了多少个1024字节大小的块 | 还有多少个1024字节大小的块可用 | 已用空间所占的比例 | 设备挂载到了哪个挂载点上 |
$ df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17811456 4020192 13791264 23% /
devtmpfs 481836 0 481836 0% /dev
tmpfs 498960 0 498960 0% /dev/shm
tmpfs 498960 8728 490232 2% /run
tmpfs 498960 0 498960 0% /sys/fs/cgroup
/dev/sda1 1038336 173340 864996 17% /boot
tmpfs 99796 4 99792 1% /run/user/42
tmpfs 99796 32 99764 1% /run/user/1000
/dev/sr0 4364408 4364408 0 100% /run/media/linlinle/CentOS 7 x86_64
-
查看目录大小
du命令可以显示某个特定目录的磁盘使用情况。可用来快速判断系统上某个目录下是不是有超大文件。这么用du命令(不加参数,用默认参数)作用并不大。我们更想知道每个文件和目录占用了多大的磁盘空间,但如果还得逐页查找的话就没什么意义了。
- -c:显示所有已列出文件总的大小。
- -h:按用户易读的格式输出大小,即用K替代千字节,用M替代兆字节,用G替代吉字节。
- -s:显示每个输出参数的总计。
$ du -sh *
680k rsync-2.6.6.tar.gz
448k MesaGLUT-6.5.1.tar.gz
1008k mrtg-2.9.29.tar.gz
496k php-common-4.0.4pl1-6mdk.i586.rpm
400k plp
处理数据文件
当你有大量数据时,通常很难处理这些信息及提取有用信息。正如在上节中学习的du命令,
系统命令很容易输出过量的信息。
-
排序数据
处理大量数据时的一个常用命令是sort命令。默认情况下,sort命令按照会话指定的默认语言的排序规则对文本文件中的数据行排序。
$ cat file1
one
two
three
four
five
$ sort file1
five
four
one
three
two
$
sort命令会把数 字当做字符来执行标准的字符排序
- -n : 把数字识别成数字而不是字符,并且按值排序
$ cat file2
1
2
100
45
3
10
145
75
$ sort file2
1
10
100
145
2
3
45
75
$ sort -n file2
1
2
3
10
45
75
100
145
$
- -M: sort命令就能识别三字符的月份名,并相应地排序
$ sort file3
Apr
Aug
Dec
Feb
Jan
Jul
Jun
Mar
May
Nov
Oct
Sep
$ sort -M file3
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
$
-b | 排序时忽略起始的空白 |
-c | 不排序,但检查数据是否有序;未排序的话报告 |
-d | 仅考虑空白和字符,不考虑特殊字符 |
-f | 默认情况下,会将大写字符排在前面,这个参数会忽略大小写 |
-k | 后面接一个数字,指定排序的字段。 |
-m | 将两个已排序数据文件合并 |
-o | 将排序结果写出到指定文件中 |
-R | 按随机生成的散列表的键值排序 |
-r | 反序排序 |
-t | 指定一个用来区分键位置的字符 |
-k和-t参数在对按字段分隔的数据进行排序时非常有用,例如/etc/passwd文件。可以用-t参数来指定字段分隔符,然后用-k参数来指定排序的字段。举个例子,要对前面提到的密码文件/etc/passwd根据用户ID进行数值排序,可以这么做:
$ sort -t ':' -k 3 -n /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
-n参数在排序数值时非常有用,比如du命令的输出。
$ du -sh * | sort -nr
1008k mrtg-2.9.29.tar.gz
972k bldg1
888k fbs2.pdf
760k Printtest
680k rsync-2.6.6.tar.gz
660k code
516k fig1001.tiff
496k test
496k php-common-4.0.4pl1-6mdk.i586.rpm
448k MesaGLUT-6.5.1.tar.gz
400k plp
-
搜索数据
grep命令会在输入或指定的文件中查找包含匹配指定模式的字符的行。grep的输出就是包含了匹配模式的行。
grep [options] pattern [file]
$ grep three file1
three
$ grep t file1
two
three
$
-v | 进行反向搜索(输出不匹配该模式的行) | $ grep -v t file1 one four five $ |
-n | 显示匹配模式的行所在的行号 | $ grep -n t file1 2:two 3:three $ |
-c | 只需要知道有多少行含有匹配的模式 | $ grep -c t file1 2 $ |
-e | 指定多个匹配模式 | $ grep -e t -e f file1(或$ grep [tf] file1) |
-
压缩数据
gzip是Linux上最流行的压缩工具。gzip软件包是GNU项目的产物。
- gzip:用来压缩文件。
- gzcat:用来查看压缩过的文本文件的内容。
- gunzip:用来解压文件。
gzip命令会压缩你在命令行指定的文件。也可以在命令行指定多个文件名甚至用通配符来一次性批量压缩文件。gzip命令会压缩该目录中匹配通配符的每个文件。
$ gzip myprog
$ ls -l my*
-rwxrwxr-x 1 rich rich 2197 2007-09-13 11:29 myprog.gz
$ gzip my*
$ ls -l my*
-rwxr--r-- 1 rich rich 103 Sep 6 13:43 myprog.c.gz
-rwxr-xr-x 1 rich rich 5178 Sep 6 13:43 myprog.gz
-rwxr--r-- 1 rich rich 59 Sep 6 13:46 myscript.gz
-rwxr--r-- 1 rich rich 60 Sep 6 13:44 myscript2.gz
$
-
归档数据
虽然zip命令能够很好地将数据压缩和归档进单个文件,但它不是Unix和Linux中的标准归档工具。目前,Unix和Linux上最广泛使用的归档工具是tar命令。tar命令是给整个目录结构创建归档文件的简便方法。function参数定义了tar命令应该做什么
tar function [options] object1 object2 ...
-A | 将一个已有tar归档文件追加到另一已有tar归档文件 |
-c | 创建一个新的tar归档文件 |
-d | 检查归档文件和文件系统的不同之处;从已有tar归档文件中删除 |
-r | 追加文件到已有tar归档文件末尾 |
-t | 列出已有tar归档文件的内容 |
-u | 将比tar归档文件中已有的同名文件新的文件追加到该tar归档文件中 |
-x | 从已有tar归档文件中提取文件 |
每个功能可用选项来针对tar归档文件定义一个特定行为。表4-9列出了这些选项中能和tar命令一起使用的常见选项。
-C dir | 切换到指定目录 |
-f file | 输出结果到文件或者设备file |
-j | 将输出重定向给bzip2命令来压缩内容 |
-p | 保留所有文件权限 |
-v | 在处理文件时显示文件 |
-z | 将输出重定向给gzip命令来压缩内容 |
下面的命令创建了名为test.tar的归档文件,含有test和test2目录内容
$ tar -cvf test.tar test/ test2/
列出tar文件test.tar的内容(但并不提取文件)
tar -tf test.tar
从tar文件test.tar中提取内容。如果tar文件是从一个目录结构创建的,那整个目录结构都会在当前目录下重新创建。
tar -xvf test.tar
下载了开源软件之后,你会经常看到文件名以.tgz结尾。这些是gzip压缩过的tar文件可以用命令tar -zxvf filename.tgz来解压。