常见Linux目录名称:python
目录 | 用途 |
---|---|
/ | 虚拟目录的根目录。一般不会在这里存储文件 |
/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/fhsios
当程序运行在系统上时,称之为进程(process)。要监测这些进程,就须要熟悉ps命令的用法。 shell
默认状况下,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风格的参数是从贝尔实验室开发的AT&T Unix系统上原有的ps命令继承下来的。
Unix风格的ps命令参数:bash
参数 | 描述 |
---|---|
-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命令的关键不在于记住多少可用的参数。而是只要记住最有用的一些参数组合就行了。 session
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 $
每列的信息说明:ssh
ps -elps -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 $ ^
每列的信息说明:
伯克利软件发行版(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开发人员在最近改进过的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命令和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命令也支持通配符。