转:

     

一、  ps命令:

ps:将某个时间点的程序运作情况撷取下来


[root           @linux           ~]           # ps aux           
           [root           @linux           ~]           # ps -lA           
           [root           @linux           ~]           # ps axjf           
           参数:           
           -           A           :所有的 process 均显示出来,与 -e 具有同样的效用;           
           -a :不与 terminal 有关的所有 process ;           
           -u :有效使用者 (effective user) 相关的 process ;           
           x :通常与 a 这个参数一起使用,可列出较完整信息。           
           输出格式规划:           
           l :较长、较详细的将该            PID           的的信息列出;           
           j :工作的格式 (jobs format)           
           -f :做一个更为完整的输出。           
           特别说明:           
           由于 ps 能够支持的            OS           类型相当的多,所以他的参数多的离谱!           
           而且有没有加上 - 差很多!详细的用法应该要参考 man ps 喔!



 

范例1:将目前属于您自己这次登入的 PID 与相关信息列示出来

 


[root           @linux           ~]           # ps -l           
           F           S           UID           PID           PPID           C           PRI           NI           ADDR           SZ           WCHAN           TTY           TIME           CMD          
           0           S           0           5881           5654           0           76           0           -            1303           wait pts/           0           00           :           00           :           00           su           
           4           S           0           5882           5881           0           75           0           -            1349           wait pts/           0           00           :           00           :           00           bash           
           4           R           0           6037           5882           0           76           0           -            1111           - pts/           0           00           :           00           :           00           ps


# 上面这个信息其实很多喔!各相关信息的意义为:           
           # F 代表这个程序的旗标 (flag), 4 代表使用者为 super user;           
           # S 代表这个程序的状态 (STAT),关于各 STAT 的意义将在内文介绍;           
           # PID 没问题吧!?就是这个程序的 ID 啊!底下的 PPID 则上父程序的 ID;           
           # C CPU 使用的资源百分比           
           # PRI 这个是 Priority (优先执行序) 的缩写,详细后面介绍;           
           # NI 这个是 Nice 值,在下一小节我们会持续介绍。           
           # ADDR 这个是 kernel function,指出该程序在内存的那个部分。如果是个 running           
           # 的程序,一般就是『 - 』的啦!           
           # SZ 使用掉的内存大小;           
           # WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作;           
           # TTY 登入者的终端机位置啰;           
           # TIME 使用掉的 CPU 时间。           
           # CMD 所下达的指令为何!?           
           # 仔细看到每一个程序的 PID 与 PPID 的相关性为何喔!上头列出的三个程序中,           
           # 彼此间可是有相关性的吶!



 

 

范例2:列出目前所有的正在内存当中的程序

 

[root           @linux           ~]           # ps aux           
           USER           PID           %           CPU           %           MEM           VSZ           RSS           TTY           STAT           START           TIME           COMMAND          
           root            1           0           .           0           0           .           1           1740           540           ?            S           Jul25            0           :           01           init [           3           ]           
           root            2           0           .           0           0           .           0           0           0           ?            SN           Jul25            0           :           00           [ksoftirqd/           0           ]           
           root            3           0           .           0           0           .           0           0           0           ?            S           < Jul25            0           :           00           [events/           0           ]           
           .....中间省略.....           
           root            5881           0           .           0           0           .           3           5212           1204           pts/           0           S           10           :           22           0           :           00           su           
           root            5882           0           .           0           0           .           3           5396           1524           pts/           0           S           10           :           22           0           :           00           bash           
           root            6142           0           .           0           0           .           2           4488           916           pts/           0           R           +            11           :           45           0           :           00           ps aux


•            USER           :该 process 属于那个使用者账号的?           
           •            PID           :该 process 的号码。           
           • %           CPU           :该 process 使用掉的            CPU           资源百分比;           
           • %           MEM           :该 process 所占用的物理内存百分比;           
           •            VSZ           :该 process 使用掉的虚拟内存量 (Kbytes)           
           •            RSS           :该 process 占用的固定的内存量 (Kbytes)           
           •            TTY           :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/           0           等等的,则表示为由网络连接进主机的程序。           
           •            STAT           :该程序目前的状态,主要的状态有:           
           o            R           :该程序目前正在运作,或者是可被运作;           
           o            S           :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号 (signal) 唤醒。           
           o            T           :该程序目前正在侦测或者是停止了;           
           o            Z           :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态           
           •            START           :该 process 被触发启动的时间;           
           •            TIME           :该 process 实际使用            CPU           运作的时间。           
           •            COMMAND           :该程序的实际指令为何?



 

 

 

 

范例3:以范例一的显示内容,显示出所有的程序

 

[root           @linux           ~]           # ps -lA           
           F           S           UID           PID           PPID           C           PRI           NI           ADDR           SZ           WCHAN           TTY           TIME           CMD          
           4           S           0           1           0           0           76           0           -            435           - ?            00           :           00           :           01           init           
           1           S           0           2           1           0           94           19           -            0           ksofti ?            00           :           00           :           00           ksoftirqd/           0          
           1           S           0           3           1           0           70           -           5           -            0           worker ?            00           :           00           :           00           events/           0          
           .....以下省略.....



 

 

范例4:列出类似程序树的程序显示

 

[root           @linux           ~]           # ps -axjf           
           PPID           PID           PGID           SID           TTY           TPGID           STAT           UID           TIME           COMMAND          
           0           1           0           0           ? -           1           S           0           0           :           01           init [           3           ]           
           1           2           0           0           ? -           1           SN           0           0           :           00           [ksoftirqd/           0           ]           
           .....中间省略.....           
           1           5281           5281           5281           ? -           1           Ss            0           0           :           00           /usr/sbin/sshd           
           5281           5651           5651           5651           ? -           1           Ss            0           0           :           00           \           _           sshd: dmtsai [priv]           
           5651           5653           5651           5651           ? -           1           S           500           0           :           00           \           _           sshd: dmtsai           @pts           /           0          
           5653           5654           5654           5654           pts/           0           6151           Ss            500           0           :           00           \           _           -bash           
           5654           5881           5881           5654           pts/           0           6151           S           0           0           :           00           \           _           su           
           5881           5882           5882           5654           pts/           0           6151           S           0           0           :           00           \           _           bash           
           5882           6151           6151           5654           pts/           0           6151           R           +            0           0           :           00           \           _           ps -axjf



 

 

范例5:找出与 cron 与 syslog 这两个服务有关的 PID 号码


[root           @linux           ~]           # ps aux | egrep '(cron|syslog)'           
           root            1539           0           .           0           0           .           1           1616           616           ? Ss Jul25            0           :           03           syslogd -m            0          
           root            1676           0           .           0           0           .           2           4544           1128           ? Ss Jul25            0           :           00           crond           
           root            6157           0           .           0           0           .           1           3764           664           pts/           0           R           +            12           :           10           0           :           00           egrep (cron|syslog)



 

在预设的情况下, ps 仅会列出与目前所在的 bash shell 有关的 PID 而已,所以, 当我使用 ps -l 的时候,只有三个 PID (范例一)。

---------------------------------------------------------------------------------------------------------------------------------------------



二、  Grep命令:

1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式
grep [options]

3.主要参数
[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

4.grep命令使用简单实例
$ grep ‘test’ d*
显示所有以d开头的文件中包含 test的行。
$ grep ‘test’ aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep ‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
$ grep ‘w\(es\)t.*\1′ aa
如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。

5.grep命令使用复杂实例
假设您正在’/usr/src/Linux/Doc’目录下搜索带字符 串’magic’的文件:
$ grep magic /usr/src/Linux/Doc/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中文件’sysrp.txt’包含该字符串,讨论的是 SysRQ 的功能。
默认情况下,’grep’只搜索当前目录。如果 此目录下有许多子目录,’grep’会以如下形式列出:
grep: sound: Is a directory
这可能会使’grep’ 的输出难于阅读。这里有两种解决的办法:
明确要求搜索子目录:grep -r
或忽略子目录:grep -d skip
如果有很多 输出时,您可以通过管道将其转到’less’上阅读:
$ grep magic /usr/src/Linux/Documentation/* | less
这样,您就可以更方便地阅读。

有一点要注意,您必需提供一个文件过滤方式(搜索全部文件的话用 *)。如果您忘了,’grep’会一直等着,直到该程序被中断。如果您遇到了这样的情况,按 <CTRL c> ,然后再试。

下面还有一些有意思的命令行参数:
grep -i pattern files :不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files :只列出匹配的文件名,
grep -L pattern files :列出不匹配的文件名,
grep -w pattern files :只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -C number pattern files :匹配的上下文分别显示[number]行,
grep pattern1 | pattern2 files :显示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :显示既匹配 pattern1 又匹配 pattern2 的行。

grep -n pattern files  即可显示行号信息

grep -c pattern files  即可查找总行数

这里还有些用于搜索的特殊符号:
\< 和 \> 分别标注单词的开始与结尾。
例如:
grep man * 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ * 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>’ 只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
‘^’:指匹配的字符串在行首,
‘$’:指匹配的字符串在行 尾,