Linux部分命令的总结(五)

wangrui0 2020-03-28

1.Linux ps命令:查看正在运行的进程

ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。

ps 命令的基本格式如下:

[ ~]# ps aux #查看系统中所有的进程,使用 BS 操作系统格式 
[ ~]# ps -le #查看系统中所有的进程,使用 Linux 标准命令格式

选项:

a:显示一个终端的所有进程,除会话引线外;

u:显示进程的归属用户及内存的使用情况;

x:显示没有控制终端的进程;

-l:长格式显示更加详细的信息;

-e:显示所有进程;

可以看到,ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”。

下面是一些常用的选项,大家可以记一下:

"ps aux" 可以查看系统中所有的进程;
"ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
"ps -l" 只能看到当前 Shell 产生的进程;

 实例一:

Linux部分命令的总结(五)

表 1 中罗列出了以上输出信息中各列的具体含义。

Linux部分命令的总结(五)

Linux部分命令的总结(五)

 实例二:

"ps -le"命令也能看到系统中所有的进程。由于 "-l" 选项的作用,所以 "ps -le" 命令能够看到更加详细的信息。

[ ~]# ps -le
F S UID PID PPID C  PRI Nl ADDR  SZ WCHAN TTY      TIME  CMD
4 S   0   1    0 0  80   0 -    718 -     ?    00:00:02  init
1 S   0   2    0 0  80   0 -      0 -     ?    00:00:00  kthreadd
1 S   0   3    2 0 -40   - -      0 -     ?    00:00:00  migration/0
1 S   0   4    2 0  80   0 -      0 -     ?    00:00:00  ksoflirqd/0
1 S   0   5    2 0 -40   - -      0 -     ?    00:00:00  migration/0
…省略部分输出…

表 2 罗列出以上输出信息中各列的含义。

Linux部分命令的总结(五)

2.Linux top命令:持续监听进程运行状态

top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

top 命令的基本格式如下:

[ ~]#top [选项]  

1)选项:

-d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;

-b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;

-n 次数:指定 top 命令执行的次数。一般和"-"选项合用;

-p 进程PID:仅查看指定 ID 的进程;

-s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;

-u 用户名:只监听某个用户的进程;

2)在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

? 或 h:显示交互模式的帮助;

P:按照 CPU 的使用率排序,默认就是此选项;

M:按照内存的使用率排序;

N:按照 PID 排序;

T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;

k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;

r:按照 PID 给某个进程重设优先级(Nice)值;

q:退出 top 命令;

3)实例:

Linux部分命令的总结(五)

3.Linux pstree命令:查看进程树

pstree 命令是以树形结构显示程序和进程之间的关系,此命令的基本格式如下:

[ ~]# pstree [选项] [PID或用户名]

表 1 罗列出了 pstree 命令常用选项以及各自的含义。

Linux部分命令的总结(五)

需要注意的是,在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 init 进程为根进程,显示系统中所有程序和进程的信息;

反之,若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。

init 进程是系统启动的第一个进程,进程的 PID 是 1,也是系统中所有进程的父进程。

4.Linux lsof命令:列出进程调用或打开的文件信息

lsof 命令,“list opened files”的缩写,直译过来,就是列举系统中已经被打开的文件。通过 lsof 命令,我们就可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件。

lsof 命令的基本格式如下:

[ ~]# lsof [选项]

此命令常用的选项及功能,如表 1 所示。

Linux部分命令的总结(五)

5.Linux进程优先级

Linux 系统中,表示进程优先级的有两个参数:Priority 和 Nice。

其中,PRI 代表 Priority,NI 代表 Nice。这两个值都表示优先级,数值越小代表该进程越优先被 CPU 处理。不过,PRI值是由内核动态调整的,用户不能直接修改。所以我们只能通过修改 NI 值来影响 PRI 值,间接地调整进程优先级。

PRI 和 NI 的关系如下:

PRI (最终值) = PRI (原始值) + NI

其实,大家只需要记得,我们修改 NI 的值就可以改变进程的优先级即可。NI 值越小,进程的 PRI 就会降低,该进程就越优先被 CPU 处理;反之,NI 值越大,进程的 PRI 值就会増加,该进程就越靠后被 CPU 处理。

修改 NI 值时有几个注意事项:

NI 范围是 -20~19。

普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。

普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。

只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

6.Linux nice和renice命令:改变进程优先级

1)nice命令

nice 命令可以给要启动的进程赋予 NI 值,但是不能修改已运行进程的 NI 值。

nice 命令格式如下:

[ ~] # nice [-n NI值] 命令

-n NI值:给命令赋予 NI 值,该值的范围为 -20~19;

2)renice 命令

同 nice 命令恰恰相反,renice 命令可以在进程运行时修改其 NI 值,从而调整优先级。

renice 命令格式如下:

[ ~] # renice [优先级] PID

注意,此命令中使用的是进程的 PID 号,因此常与 ps 等命令配合使用。

7.Linux kill命令:终止进程

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。

也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。

kill 命令的基本格式如下:

[ ~]# kill [信号] PID

这里仅列出几个常用的信号,如表 1 所示。

Linux部分命令的总结(五)

需要注意的是,表中省略了各个信号名称的前缀 SIG,也就是说,SIGTERM 和 TERM 这两种写法都对,kill 命令都可以理解。

8.Linux kill命令:终止进程

Linux 命令放入后台的方法有两种,分别介绍如下。

1)"命令 &",把命令放入后台执行

第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态。

注意,放入后台执行的命令不能与前台有交互,否则这个命令是不能在后台执行的。 

2)命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态

9.Linux jobs命令:查看当前终端放入后台的工作

jobs 命令可以用来查看当前终端放入后台的工作,工作管理的名字也来源于 jobs 命令。

jobs 命令的基本格式如下:

[ ~]#jobs [选项]

表 1 罗列了 jobs 命令常用的选项及含义。

Linux部分命令的总结(五)

 实例:

[ ~]#jobs -l
[1]- 2023 Stopped top
[2]+ 2034 Stopped tar -zcf etc.tar.gz /etc

可以看到,当前终端有两个后台工作:一个是 top 命令,工作号为 1,状态是暂停,标志是"-";另一个是 tar 命令,工作号为 2,状态是暂停,标志是"+"。

"+"号代表最近一个放入后台的工作,也是工作恢复时默认恢复的工作。"-"号代表倒数第二个放入后台的工作,而第三个以后的工作就没有"+-"标志了。

一旦当前的默认工作处理完成,则带减号的工作就会自动成为新的默认工作,换句话说,不管此时有多少正在运行的工作,任何时间都会有且仅有一个带加号的工作和一个带减号的工作。

10.Linux fg命令:把后台命令恢复在前台执行

fg 命令用于把后台工作恢复到前台执行,该命令的基本格式如下:

[ ~]#fg %工作号

注意,在使用此命令时,% 可以省略,但若将% 工作号全部省略,则此命令会将带有 + 号的工作恢复到前台。另外,使用此命令的过程中, % 可有可无。

11.Linux bg命令:把后台暂停的工作恢复到后台执行

前面讲过,使用 Ctrl+Z 快捷键的方式,可以将前台工作放入后台,但是会处于暂停状态,那么,有没有办法可以让后台工作继续在后台执行呢?答案是肯定的,这就需要用到 bg 命令。

bg 命令的基本格式如下:

[ ~]# bg %工作号

和 fg 命令类似,这里的 % 可以省略。

12.Linux at命令:定时执行任务

要想使用 at 命令,需提前安装好 at 软件包,并开启 atd 服务。

除此之外,at 命令要想正确执行,还需要 atd 服务的支持。atd 服务是独立的服务,启动的命令如下:

[ ~]# service atd start 
# 正在启动 atd: [确定]

at 命令的访问控制是依靠 /etc/at.allow(白名单)和 /etc/at.deny(黑名单)这两个文件来实现的,具体规则如下:

1.如果系统中有 /etc/at.allow 文件,那么只有写入 /etc/at.allow 文件(白名单)中的用户可以使用 at 命令,其他用户不能使用 at 命令(注意,/etc/at.allow 文件的优先级更高,也就是说,如果同一个用户既写入 /etc/at.allow 文件,又写入 /etc/at.deny 文件,那么这个用户是可以使用 at 命令的)。

2.如果系统中没有 /etc/at.allow 文件,只有 /etc/at.deny 文件,那么写入 /etc/at.deny 文件(黑名单)中的用户不能使用 at 命令,其他用户可以使用 at 命令。不过这个文件对 root 用户不生效。

3.如果系统中这两个文件都不存在,那么只有 root 用户可以使用 at 命令。

系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。不过,如果我们打算控制用户的 at 命令权限,那么只需把用户写入 /etc/at.deny 文件即可。

at 命令的格式非常简单,基本格式如下:

[ ~] # at [选项] [时间]

有关此命令常用的几个选项及各自含义如表 1 所示。

Linux部分命令的总结(五)

另外,表 2 罗列了此命令中关于时间参数可用的以下格式。

 Linux部分命令的总结(五)

 实例:

[ ~J# at 02:00 2013-07-26
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
job 9 at 2013-07-26 02:00
#在指定的时间关机。在一个at任务中是可以执行多个系统命令的

在使用系统定时任务时,不论执行的是系统命令还是 Shell 脚本,最好使用绝对路径来写命令,这样不容易报错。at 任务一旦使用 Ctrl+D 快捷键保存,实际上写入了 /var/spool/at/ 这个目录,这个目录内的文件可以直接被 atd 服务调用和执行。

1)atq 命令用于查看当前等待运行的工作

[ ~]# atq
9 2013-07-26 02:00 a root
#说明root用户有一个at任务在2013年7月26日02:00执行,工作号是9
[ ~]# atrm [工作号]
#删除指定的at任务

2)atrm 命令用于删除指定的工作

[ ~]# atrm 9
[ ~]# atq
#删除9号at任务,再查询就没有at任务存在了

13.Linux crontab命令:循环执行定时任务

crontab 命令需要 crond 服务支持。crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程,和 Windows 中的计划任务有些类似。

执行crontab命令之前先开启crond服务。crond 进程每分钟会定期检查是否有要执行的任务,如果有,则会自动执行该任务。

该命令和 at 命令类似,也是通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。而且原则也非常相似:

1.当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。

2.当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。

3.这个规则基本和 at 命令的规则一致,同样是 /etc/cron.allow 文件比 /etc/cron.deny 文件的优先级高,Linux 系统中默认只有 /etc/cron.deny 文件。

每个用户都可以实现自己的 crontab 定时任务,只需使用这个用户身份执行“crontab -e”命令即可。当然,这个用户不能写入 /etc/cron.deny 文件。

crontab 命令的基本格式如下:

[ ~]# crontab [选项] [file]

这里的 file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab。

与此同时,表 1 罗列出了此命令常用的选项及功能。

Linux部分命令的总结(五)

其实 crontab 定时任务非常简单,只需执行“crontab -e”命令,然后输入想要定时执行的任务即可。不过,当我们执行“crontab -e”命令时,打开的是一个空文件,而且操作方法和 Vim 是一致的。那么,这个文件的格式才是我们真正需要学习的内容。文件格式如下:

[r !]# crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务

这个文件中是通过 5 个“*”来确定命令或任务的执行时间的,这 5 个“*”的具体含义如表 2 所示。

Linux部分命令的总结(五)

在时间表示中,还有一些特殊符号需要学习,如表 3 所示。

Linux部分命令的总结(五)

当“crontab -e”编辑完成之后,一旦保存退出,那么这个定时任务实际就会写入 /var/spool/cron/ 目录中,每个用户的定时任务用自己的用户名进行区分。

而且 crontab 命令只要保存就会生效,只要 crond 服务是启动的。知道了这 5 个时间字段的含义,我们多举几个时间的例子来熟悉一下时间字段,如表 4 所示。

Linux部分命令的总结(五)

在书写 crontab 定时任务时,需要注意以下几个事项:

1.6 个选项都不能为空,必须填写。如果不确定,则使用“*”代表任意时间。

2.crontab 定时任务的最小有效时间是分钟,最大有效时间是月。像 2018 年某时执行、3 点 30 分 30 秒这样的时间都不能被识别。

3.在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都以天为单位,非常容易让管理员混淆。

4.在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都使用绝对路径。有时使用相对路径的命令会报错。

实例:

在每月 1 日、10 日、15 日的凌晨 3 点 30 分都定时执行日志备份脚本 

[ ~]# crontab -e
30.3 1,10,15 * * /root/sh/autobak.sh

14.独立服务的启动管理

1) 使用/etc/init.d/目录中的启动脚本来启动独立的服务

既然所有独立服务的启动脚本都存放在 /etc/init.d/ 目录中,那么,调用这些脚本就可以启动独立的服务了。这种启动方式是推荐启动方式,命令格式如下:

[ ~]#/etc/init.d独立服务名 start| stop|status|restart|...

参数:

start:启动服务;

stop:停止服务;

status:查看服务状态;

restart:重启动服务;

2) 使用service命令来启动独立的服务

在 CentOS 系统中,我们还可以依赖 service 命令来启动独立的服务。service 命令实际上只是一个脚本,这个脚本仍然需要调用 /etc/init.d/ 中的启动脚本来启动独立的服务。而且 service 命令是红帽系列 Linux 的专有命令,其他的 Linux 发行版本不一定拥有这条命令,所以我们并不推荐使用 service 命令来启动独立的服务。

service 命令格式如下:

[ ~]# service 独立服务名 start|stop|restart|...

--status -all:列出所有独立服务的启动状态

相关推荐