Linux基础:目录名称含义,监测程序

发布时间:2020-06-19 17:02:26 作者:骑士救兵
来源:网络 阅读:1205

Linux 文件系统

常见Linux目录名称:

目录 用途
/ 虚拟目录的根目录。通常不会在这里存储文件
/bin 二进制目录,存放许多用户级的GUN工具
/boot 启动目录,存放启动文件
/dev 设备目录,Linux在这里创建设备节点
/etc 系统配置文件目录
/home 主目录,Linux在这里创建用户目录
/lib 库目录,存放系统和应用程序的库文件
/media 媒体目录,可移动媒体设备的常用挂载点
/mnt 挂载目录,另一个可移动媒体设备的常用挂载点
/opt 可选目录,常用于存放第三方软件包和数据文件
/proc 进程目录,存放现有硬件及当前进程的相关信息
/root root用户的主目录
/sbin 系统二进制目录,存放许多GUN管理员级工具
/run 运行目录,存放系统运作时的运行时数据
/srv 服务目录,存放本地服务的相关文件
/sys 系统目录,存放系统硬件信息的相关文件
/tmp 临时目录,可以在该目录中创建和删除临时工作文件
/usr 用户二进制目录,大量用户级的GUN工具和数据文件都存储在这里
/var 可变目录,用以存放经常变化的文件,比如日志文件

常见的目录名均基于文件系统层级标准(filesystem hierarchy stanard, FHS)。FHS偶尔会进行更新,可能有些Linux发行版人在使用旧的FHS标准。最新的FHS标准可以访问其官方主页:
http://www.pathname.com/fhs

ps 命令查看进程

当程序运行在系统上时,称之为进程(process)。要监测这些进程,就需要熟悉ps命令的用法。

默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户的进程:

$ ps
  PID TTY          TIME CMD
 4763 pts/0    00:00:00 bash
 4782 pts/0    00:00:00 ps
$ 

在这里,当前用户只运行了bash shell(注意,shell也只是运行在系统上的另一个进程而已),以及ps命令本身。

Linux系统中使用的GNU ps命令支持3种不同类型的命令行参数:

Unix风格的参数

Unix风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的ps命令继承下来的。
Unix风格的ps命令参数:

参数 描述
-A 显示所有进程
-N 显示与指示参数不符的所有进程
-a 显示除控制进程(session leader)和无终端进程外的所有进程
-d 显示除控制进程外的所有进程
-e 显示所有进程。应该和-A是一样的
-C cmdlist 显示包含在cmdlist列表中的进程
-G grplist 显示组ID在grplist列表中的进程
-U userlist 显示属主的用户ID在userlist列表中的进程
-g grplist 显示会话或组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 显示安全标签(SELinux的security context)信息
-H 用层级格式来显示进程(树状,用来显示父进程)
-n namelist 定义了WCHAN列显示的值
-w 采用宽输出模式,不限宽度显示
-L 显示进程中的线程
-V 显示ps命令的版本号

命令参数列出了很多,但是不一定全。使用ps命令的关键不在于记住多少可用的参数。而是只要记住最有用的一些参数组合就好了。

ps -ef
查看系统上运行的所有进程:

$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 18:23 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2     0  0 18:23 ?        00:00:00 [kthreadd]
root         3     2  0 18:23 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 18:23 ?        00:00:00 [kworker/0:0H]
root         6     2  0 18:23 ?        00:00:00 [kworker/u2:0]
root         7     2  0 18:23 ?        00:00:00 [migration/0]
root         8     2  0 18:23 ?        00:00:00 [rcu_bh]
root         9     2  0 18:23 ?        00:00:00 [rcu_sched]
root        10     2  0 18:23 ?        00:00:00 [lru-add-drain]

......

root      4250     1  0 18:23 ?        00:00:00 /usr/sbin/hypervkvpd -n
root      4251     1  0 18:23 ?        00:00:00 /usr/sbin/sshd -D
root      4253     1  0 18:23 ?        00:00:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      4254     1  0 18:23 ?        00:00:00 /usr/sbin/rsyslogd -n
root      4515     1  0 18:23 ?        00:00:00 /usr/libexec/postfix/master -w
postfix   4532  4515  0 18:24 ?        00:00:00 qmgr -l -t unix -u
root      4569  4251  0 18:24 ?        00:00:00 sshd: root@pts/0
root      4763  4569  0 18:24 pts/0    00:00:00 -bash
postfix   4931  4515  0 20:04 ?        00:00:00 pickup -l -t unix -u
root      4938     2  0 20:31 ?        00:00:00 [kworker/0:3]
root      4944     2  0 20:46 ?        00:00:00 [kworker/0:2]
root      4947     2  0 20:51 ?        00:00:00 [kworker/0:0]
root      4949  4763  0 20:53 pts/0    00:00:00 ps -ef
$ 

每列的信息说明:

ps -el
ps -ef 最常用,而-l参数可以显示其他额外的信息,也可以ps -efl把两部分的信息都显示出来。
使用-l参数,会产生一个长格式输出:

$ ps -el
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 - 32005 ep_pol ?        00:00:01 systemd
1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:00 kthreadd
1 S     0     3     2  0  80   0 -     0 smpboo ?        00:00:00 ksoftirqd/0
1 S     0     5     2  0  60 -20 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0     6     2  0  80   0 -     0 worker ?        00:00:00 kworker/u2:0
1 S     0     7     2  0 -40   - -     0 smpboo ?        00:00:00 migration/0
1 S     0     8     2  0  80   0 -     0 rcu_gp ?        00:00:00 rcu_bh
1 R     0     9     2  0  80   0 -     0 -      ?        00:00:00 rcu_sched
1 S     0    10     2  0  60 -20 -     0 rescue ?        00:00:00 lru-add-drain

......

4 S     0  4250     1  0  80   0 - 10025 poll_s ?        00:00:00 hypervkvpd
4 S     0  4251     1  0  80   0 - 28215 poll_s ?        00:00:00 sshd
4 S     0  4253     1  0  80   0 - 143481 poll_s ?       00:00:02 tuned
4 S     0  4254     1  0  80   0 - 55687 poll_s ?        00:00:00 rsyslogd
5 S     0  4515     1  0  80   0 - 22412 ep_pol ?        00:00:00 master
4 S    89  4532  4515  0  80   0 - 22455 ep_pol ?        00:00:00 qmgr
4 S     0  4569  4251  0  80   0 - 39183 poll_s ?        00:00:00 sshd
4 S     0  4763  4569  0  80   0 - 28859 do_wai pts/0    00:00:00 bash
4 S    89  4931  4515  0  80   0 - 22438 ep_pol ?        00:00:00 pickup
1 S     0  4972     2  0  80   0 -     0 worker ?        00:00:00 kworker/0:0
1 S     0  4973     2  0  80   0 -     0 worker ?        00:00:00 kworker/0:3
1 S     0  4974     2  0  80   0 -     0 worker ?        00:00:00 kworker/0:1
1 R     0  4977     2  0  80   0 -     0 -      ?        00:00:00 kworker/0:2
0 R     0  4979  4763  0  80   0 - 38309 -      pts/0    00:00:00 ps
$ ^

每列的信息说明:

BSD风格的参数

伯克利软件发行版(Berkeley software distribution, BSD)是加州大学伯克利分校开发的一个Unix版本。
BSD风格的ps命令参数:

参数 描述
T 显示跟当前终端关联的所有进程
a 显示跟任意终端关联的所有进程
g 显示所有的进程,包括控制进程
r 仅显示运行中的进程
x 显示所有的进程,甚至包括未分配任何终端的进程
U userlist 显示归userlist列表中某用户ID所拥有的进程
p pidlist 显示PID在pidlist列表中的进程
t ttylist 显示所关联的终端在ttylist列表中的进程
O format 除了默认输出的列之外,还输出由format指定的列
X 按过去的Linux i386寄存器格式显示
Z 将安全信息添加到输出中。效果和-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命令的版本号

Unix和BSD类型的参数有很多是重复的,大多数情况下,选择自己重用的格式的参数即可。
ps aux
这个是BSD风格的显示所有进程的命令,效果类似于ps -ef,主要是展示风格不同,输出的列也有一些区别。
在使用BSD参数时,ps命令会自动改变输出以模仿BSD格式:

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3 128000  6540 ?        Ss   09:19   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root         2  0.0  0.0      0     0 ?        S    09:19   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    09:19   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   09:19   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        S    09:19   0:00 [kworker/u2:0]
root         7  0.0  0.0      0     0 ?        S    09:19   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    09:19   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        R    09:19   0:00 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<   09:19   0:00 [lru-add-drain]

......

root      4256  0.0  0.0  40100  1540 ?        Ss   09:19   0:00 /usr/sbin/hypervkvpd -n
root      4258  0.0  0.2 112860  4296 ?        Ss   09:19   0:00 /usr/sbin/sshd -D
root      4259  0.0  0.4 222748  7800 ?        Ssl  09:19   0:00 /usr/sbin/rsyslogd -n
root      4261  0.0  0.9 573924 17144 ?        Ssl  09:19   0:00 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      4503  0.0  0.1  89648  2100 ?        Ss   09:19   0:00 /usr/libexec/postfix/master -w
postfix   4516  0.0  0.2  89752  4068 ?        S    09:19   0:00 pickup -l -t unix -u
postfix   4517  0.0  0.2  89820  4096 ?        S    09:19   0:00 qmgr -l -t unix -u
root      4770  0.0  0.3 156732  5524 ?        Ss   09:28   0:00 sshd: root@pts/0
root      4774  0.0  0.1 115436  2068 pts/0    Ss   09:28   0:00 -bash
root      4829  0.0  0.0      0     0 ?        S    09:35   0:00 [kworker/0:3]
root      4887  0.0  0.0      0     0 ?        S    09:40   0:00 [kworker/0:1]
root      4901  0.0  0.0      0     0 ?        R    09:45   0:00 [kworker/0:0]
root      4903  0.0  0.1 155360  1884 pts/0    R+   09:48   0:00 ps aux
$ 

每列的信息说明:

BSD风格表示的进程状态码更详细。双字符码能比Unix风格输出的单字符状态码更清楚地表示进程的当前状态。
第一个字符采用了Unix分格S列相同的值,表明休眠(S)、运行(O)还是等待(R)。
第二个值进一步说明进程的状态:

GNU长参数

最后,GNU开发人员在最近改进过的ps命令中加入了另外一些参数。其中一些复制了现有的Unix或BSD类型的参数,而另一些则提供了新功能。
GNU风格的ps命令参数:

参数 描述
--deselect 显示所有进程,除了命令行中列出的进程
--Group grplist 显示组ID在grplist列表中的进程
--User userlist 显示用户ID在userlist列表中的进程
--group grplist 显示有效组ID在grplist列表中的进程
--pid pidlist 显示PID在pidlist列表中的进程
--ppid pidlist 显示父PID在pidlist列表中的进程
--sid sidlist 显示会话ID在sidlist列表中的进程
--tty ttylist 显示终端设备号在ttylist列表中的进程
--user userlist 显示有效用户ID在userlist列表中的进程
--format 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命令的版本号

部分GNU长参数可以和Unix或BSD风格的参数混用来定制输出。

--forest参数 显示进程的层级信息
这么多参数中,--forest是一个很好的功能。它会显示进程的层级信息,并用ASCII字符绘出好看的效果:

$ ps -ef --forest
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 09:19 ?        00:00:00 [kthreadd]
root         3     2  0 09:19 ?        00:00:00  \_ [ksoftirqd/0]

......

root      4256     1  0 09:19 ?        00:00:00 /usr/sbin/hypervkvpd -n
root      4258     1  0 09:19 ?        00:00:00 /usr/sbin/sshd -D
root      4770  4258  0 09:28 ?        00:00:00  \_ sshd: root@pts/0
root      4774  4770  0 09:28 pts/0    00:00:00      \_ -bash
root      5001  4774  0 11:12 pts/0    00:00:00          \_ ps -ef --forest
root      4259     1  0 09:19 ?        00:00:00 /usr/sbin/rsyslogd -n
root      4261     1  0 09:19 ?        00:00:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      4503     1  0 09:19 ?        00:00:00 /usr/libexec/postfix/master -w
postfix   4517  4503  0 09:19 ?        00:00:00  \_ qmgr -l -t unix -u
postfix   4958  4503  0 11:00 ?        00:00:00  \_ pickup -l -t unix -u
$ 

Unix风格的-H参数也有同样的功能,但是效果没有这个好:

$ ps -efH
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 09:19 ?        00:00:00 [kthreadd]
root         3     2  0 09:19 ?        00:00:00   [ksoftirqd/0]

......

root      4256     1  0 09:19 ?        00:00:00   /usr/sbin/hypervkvpd -n
root      4258     1  0 09:19 ?        00:00:00   /usr/sbin/sshd -D
root      4770  4258  0 09:28 ?        00:00:00     sshd: root@pts/0
root      4774  4770  0 09:28 pts/0    00:00:00       -bash
root      5002  4774  0 11:13 pts/0    00:00:00         ps -efH
root      4259     1  0 09:19 ?        00:00:00   /usr/sbin/rsyslogd -n
root      4261     1  0 09:19 ?        00:00:01   /usr/bin/python2 -Es /usr/sbin/tuned -l -P
root      4503     1  0 09:19 ?        00:00:00   /usr/libexec/postfix/master -w
postfix   4517  4503  0 09:19 ?        00:00:00     qmgr -l -t unix -u
postfix   4958  4503  0 11:00 ?        00:00:00     pickup -l -t unix -u
$ 

BSD风格的f参数也是这个功能,效果和--forest一样。

top 命令实时监测进程

top命令和ps命令相似,都能够显示进程信息,并且是实时的:

$ top
top - 12:01:28 up  2:41,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  97 total,   2 running,  95 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1816668 total,   335380 free,  1325796 used,   155492 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   321636 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                
 5028 root      20   0  161880   2216   1572 R  0.3  0.1   0:00.06 top                                                                                    
    1 root      20   0  128000   6544   4136 S  0.0  0.4   0:01.12 systemd                                                                                
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                               
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.03 ksoftirqd/0                                                                            
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                                                                           
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.03 kworker/u2:0                                                                           
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                                                                            
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                                                                                 
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.35 rcu_sched                                                                              
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-drain                                                                          
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.11 watchdog/0                                                                             
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                                                                              
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                                                                                  
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd                                                                             
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                                                                              
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                                                                            
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                                 
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                                 
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                                                                                 
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                                                                                
   22 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                                                                                     
   23 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 edac-poller                                                                            
   24 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 watchdogd                                                                              
   30 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kswapd0                                                                                
   31 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                                                                                   
   32 root      39  19       0      0      0 S  0.0  0.0   0:00.06 khugepaged                                                                             
   33 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                                                                                 
   41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld       

输出的第一部分显示的是系统的概况:

默认情况下,top启动后按%CPU排序,可按f指定其他列。轮询时间默认是3.0秒,可按d修改。按q是退出。其他就不列举了。

结束进程

在Linux中,进程之间通过信号来通信。大多数编写完善的程序都能接收和处理标准Unix进程信号。
Linux进程信号:

信号 名称 描述
1 HUP 挂起
2 INT 中断
3 QUIT 结束运行
9 KILL 无条件终止
11 SEGV 段错误
15 TERM 尽可能终止
17 STOP 无条件停止运行,但不终止
18 TSTP 停止或暂停,但继续在后台运行
19 CONT 在STOP或TSTP之后恢复执行

kill命令
kill命令可通过进程ID(PID)给进程发信号。默认发送TERM信号。因为只能使用PID来指定,而不能用命令名,所以有时候不是很好用。
要发送信号,你还必须是该进程的属主或者是root。
kill命令不会有任何输出,要检查kill命令是由有效,可以再运行ps或top命令。

killall命令
killall命令支持通过进程名而不是PID来结束进程。killall命令也支持通配符。

推荐阅读:
  1. linux 程序安装目录/opt目录和/usr/local目录的区别
  2. iOS如何监测程序的崩溃次数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux ps top

上一篇:PLSQL一些实用语法介绍

下一篇:安装好Pycharm后如何配置Python解释器简易教程

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》