目录
进程监控和管理
进程启动:
· 前台启动
当用户输入一个命令并运行,就已经启动了一个进程,而且是一个前台的进程,此时系统其实已经
处于一个多进程的状态
假如启动一个比较耗时的进程,然后再把该进程挂起,即将前台运行的进程放到后台,并且暂停其
运行 CTRL + Z
[an@localhost 20220521]$ find / -name demo.jpg // 查找 demo.jpg 文件
find: ‘/boot/efi’: 权限不够
find: ‘/boot/grub2’: 权限不够
find: ‘/proc/tty/driver’: 权限不够
find: ‘/proc/1/task/1/fd’: 权限不够
.......
^Z // 按“CTRL+Z”组合键,即可将该进程挂起
[1]+ 已停止 find / -name demo.jpg
[an@localhost 20220521]$ jobs -l // 查看后台进程
[1]+ 13084 停止 find / -name demo.jpg
· 后台启动
功能:将命令放入Bash后台运行而不影响终端窗口
在命令结尾输入“&”符号即可,通过“&”放入后台的进程仍然处于运行状态
[an@localhost 20220521]$ find . -name n.sh &
[1] 13804 // 这一行显示任务号和进程号
./n.sh // 这一行是find命令的输出
[1]+ 完成 find . -name n.sh // 这一行表示find命令在后台运行结束
jobs 命令
功能:查看后台进程
选项 | 含义 |
-l(L 的小写) | 列出进程的 PID 号。 |
-n | 只列出上次发出通知后改变了状态的进程。 |
-p | 只列出进程的 PID 号。 |
-r | 只列出运行中的进程。 |
-s | 只列出已停止的进程。 |
[an@localhost 20220521]$ jobs -l
[1]+ 13084 停止 find / -name demo.jpg
[an@localhost 20220521]$ jobs -p
14000
[an@localhost 20220521]$ jobs -s
[1]+ 已停止 find / -name demo.jpg
fg 命令
功能:把后台的进程恢复到前台继续运行
[an@localhost 20220521]$ fg 1 // // fg命令后跟任务号
find / -name demo.jpg
find: ‘/usr/share/polkit-1/rules.d’: 权限不够
find: ‘/usr/libexec/initscripts/legacy-actions/auditd’: 权限不够
find: ‘/home/niu’: 权限不够
find: ‘/opt/google/chrome/extensions’: 权限不够
[an@localhost 20220521]$
功能:使后台暂停的进程重新开始运行
ps 命令
功能:查看系统中当前有哪些进程,选项非常多
"ps aux" 可以查看系统中所有的进程;
"ps -le" 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
"ps -l" 只能看到当前 Shell 产生的进程;
a | 显示现行终端机下的所有程序,包括其他用户的程序 |
e | 列出程序时,显示每个程序所使用的环境变量 |
-f | 显示UID,PPIP,C与STIME栏位 |
f | 用ASCII字符显示树状结构,表达程序间的相互关系 |
-j | 采用工作控制的格式显示程序状况 |
ps命令输出信息含义(一)
USER:用户名
PID :该进程的进程ID号。
%CPU:该进程使用掉的 CPU 资源百分比;
%MEM:该进程所占用的物理内存百分比;
VSZ :该进程使用掉的虚拟内存量
RSS :该进程占用的固定的内存量
TTY :该进程是在哪个终端机上面运作,若与终端机无关,则显示 ?,tty1~tty6 是本地的字符界面终端,tty7是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,依次増长。
STAT:该程序目前的状态,主要的状态有:
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。 -R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。 -T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。 -X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。 -L:被锁入内存。
-s:包含子进程。 -l:多线程(小写 L)。
-+:位于后台。
START:进程启动时间和日期;
TIME :进程使用的总cpu时间。
COMMAND:正在执行的命令行命令
ps命令输出信息含义(二)
F:进程标志,说明进程的权限,常见的标志有两个:
1:进程可以被复制,但是不能被执行;
4:进程使用超级用户权限;
S:进程状态。具体的状态和"ps aux"命令中的 STAT 状态一致;
UID:运行此进程的用户的 ID;
PID:进程的 ID;
PPID:父进程的 ID;
C:该进程的 CPU 使用率,单位是百分比;
PRI:进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;(内核调整,用户不可修改)
NI:进程的优先级,数值越小,该进程越早被执行;(用户可以修改)
ADDR:该进程在内存的哪个位置;
SZ:该进程占用多大内存;
WCHAN:该进程是否运行。"-"代表正在运行;
TTY:该进程由哪个终端产生;
TIME:该进程占用 CPU 的运算时间,注意不是系统时间;
CMD:产生此进程的命令名;
[an@localhost 20220521]$ ps -l // 当前 Shell 产生的进程
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 12967 12958 0 80 0 - 29236 do_wai pts/0 00:00:00 bash
0 R 1000 15990 12967 0 80 0 - 38309 - pts/0
pstree 命令
功能:查看进程间的相关性和依赖关系
选项 | 含义 |
-a | 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。 |
-c | 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。 |
-n | 根据进程 PID 号来排序输出,默认是以程序名排序输出的。 |
-p | 显示进程的 PID。 |
[an@localhost 20220521]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─anacron
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─boltd───2*[{boltd}]
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dconf-service───2*[{dconf-service}]
├─dnsmasq───dnsmasq
├─evolution-addre─┬─evolution-addre───5*[{evolution-addre}]
│ └─4*[{evolution-addre}]
├─evolution-calen─┬─evolution-calen───8*[{evolution-calen}]
│ └─4*[{evolution-calen}]
├─evolution-sourc───3*[{evolution-sourc}]
├─firewalld───{firewalld}
├─fwupd───4*[{fwupd}]
├─gdm─┬─X───{X}
│ ├─gdm-session-wor─┬─gnome-session-b─┬─abrt-applet───2*[{abrt-applet}+
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ib+
│ │ │ │ │ ├─ib+
...............
top 命令
功能:查看进程信息的动态变化,默认每隔3秒刷新一次
[an@localhost 20220521]$ top -d 10
top - 16:51:58 up 1:31, 2 users, load average: 0.11, 0.06, 0.06
Tasks: 268 total, 2 running, 265 sleeping, 1 stopped, 0 zombie
%Cpu(s): 3.7 us, 1.3 sy, 0.0 ni, 94.8 id, 0.0 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 3861492 total, 2263868 free, 865664 used, 731960 buff/cache
KiB Swap: 1572860 total, 1572860 free, 0 used. 2630180 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
10931 root 20 0 353016 35092 15984 S 3.2 0.9 0:12.15 X
12958 an 20 0 850644 30892 19224 S 1.3 0.8 0:06.86 gnome-terminal-
12139 an 20 0 3028152 162552 52296 S 1.1 4.2 0:20.47 gnome-shell
1 root 20 0 193816 6924 4192 S 0.1 0.2 0:02.31 systemd
4653 root 20 0 0 0 0 S 0.1 0.0 0:01.06 xfsaild/dm-0
12113 an 20 0 233096 3948 3192 S 0.1 0.1 0:00.14 at-spi2-registr
12472 an 20 0 568064 27384 19856 R 0.1 0.7 0:03.08 vmtoolsd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.19 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.01 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.91 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.04 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
..............
lsof命令
功能:列举系统中已经被打开的文件
可以根据文件找到对应的进程信息,也可以根据进程信息找到进程打开的文件
选项 | 功能 |
-c 字符串 | 只列出以字符串开头的进程打开的文件。 |
+d 目录名 | 列出某个目录中所有被进程调用的文件。 |
-u 用户名 | 只列出某个用户的进程打开的文件。 |
-p pid | 列出某个 PID 进程打开的文件。 |
nice 命令
功能:设置进程的优先级(不能修改已运行进程的 NI 值)
每个进程都有优先级,优先级越高,表示进程越有可能获得CPU的使用权
进程的优先级用nice值表示,取值范围是-20~19,默认值为0,数字越大表示优先级越低
renice 命令
功能:调整运行中进程的优先级
普通用户只能调整自己创建的进程的优先级,而且只能把nice调整为更大的值
root用户可以调整所有人的进程优先级,而且可以调整为更小的值
kill 命令
功能:通过内核向进程发送信号以执行某些特殊的操作,如挂起进程、正常退出进程或强制终止进程等
信号代号 | 信号名称 | 说 明 |
1 | SIGHUP | 该信号让进程立即关闭.然后重新读取配置文件之后重启 |
2 | SIGINT | 程序中止信号,用于中止前台进程。相当于输出 Ctrl+C 快捷键 |
8 | SIGFPE | 在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为 0 等其他所有的算术运算错误 |
9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制中止进程 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。如果进程已经发生了问题,那么这 个信号是无法正常中止进程的,这时我们才会尝试 SIGKILL 信号,也就是信号 9 |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入 Ctrl+Z 快捷键。本信号不能被阻断 |
任务调度管理
at 命令
功能:设置在指定的时间执行某个一次性任务
选项 | 含义 |
-m | 当 at 工作完成后,无论命令是否输出,都用 E-mail 通知执行 at 命令的用户。 |
-c 工作标识号 | 显示该 at 工作的实际内容。 |
-t 时间 | 在指定时间提交工作并执行,时间格式为 [[CC]YY]MMDDhhmm。 |
-d | 删除某个工作,需要提供相应的工作标识号(ID),同 atrm 命令的作用相同。 |
-l | 列出当前所有等待运行的工作,和 atq 命令具有相同的额作用。 |
时间参数是计划任务的执行时间,可以采用下列时间格式的任何一种
HH:MM [ am|pm] [Month] [Date] [Year],如11:10 am Jan 18 2022
HH:MM YYYY-MM-DD,如11:10 2022-01-18
MMDDYY、MM/DD/YY,表示指定日期的当前时刻,如011822、01/18/22
特定时间:如now表示当前时刻,noon代表12:00 pm,midnight代表12:00 am,Teatime代表4:00 pm
time + n [minutes | hours | days | weeks],表示在某个时间点之后某一时刻执行,如now + 3 hours表示当前时刻的3小时后
注意事项
使用 at 命令,读者需提前安装好 at 软件包,并开启 atd 服务
查看 at 软件包是否已安装,可以使用 rpm -q 命令
查看是否安装命令:rpm –q at
若未安装,则使用命令安装:yum install at
at 命令要想正确执行,还需要 启动atd 服务。
启动命令:service atd start
开机自启动:chkconfig atd on
启动状态查看:service atd status
at 命令的访问控制是依靠 /etc/at.allow(白名单,优先级更高)和 /etc/at.deny(黑名单)这两个文件来实现的
系统中默认只有 /etc/at.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 at 命令。
crontab 命令
功能:设置需要周期执行的任务
选项 | 功能 |
-u user | 用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo |
-e | 打开的是一个空文件,操作方法和 Vim 一致 |
-l | 显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。 |
-r | 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 |
-i | 在删除用户的 crontab 文件时,给确认提示。 |
特殊符号 | 含义 |
*(星号) | 代表任何时间 第一个"*" 一小时当中的第几分钟(minute) 0~59 第二个"*" 一天当中的第几小时(hour) 0~23 第三个"*" 一个月当中的第几天(day) 1~31 第四个"*" 一年当中的第几个月(month) 1~12 第五个"*" 一周当中的星期几(week) 0~7(0和7都代表星期日) |
,(逗号) | 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。 |
-(中杠) | 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。 |
/(正斜线) | 代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。 |
时间 | 含义 |
45 22 ***命令 | 在 22 点 45 分执行命令 |
0 17 ** 1命令 | 在每周一的 17 点 0 分执行命令 |
0 5 1,15**命令 | 在每月 1 日和 15 日的凌晨 5 点 0 分执行命令 |
40 4 ** 1-5命令 | 在每周一到周五的凌晨 4 点 40 分执行命令 |
*/10 4 ***命令 | 在每天的凌晨 4 点,每隔 10 分钟执行一次命令 |
0 0 1,15 * 1命令 | 在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆 |
注意事项
使用 crontab命令,读者需提前安装好 crond软件包,并开启 crond 服务
查看 crond 软件包是否已安装,可以使用 rpm -q 命令
查看是否安装命令:rpm –q crond
若未安装,则使用命令安装:yum install crond
at 命令要想正确执行,还需要 启动crond 服务。
启动命令:service crond start
开机自启动:chkconfig crond on
启动状态查看:service crond status
crond命令的访问控制是依靠 /etc/ crond.allow(白名单,优先级更高)和 /etc/ crond.deny(黑名单)这两个文件来实现的
系统中默认只有 /etc/crond.deny 文件,而且这个文件是空的,因此,系统中所有的用户都可以使用 crond命令。
[an@localhost 20220521]$ crontab -e // 进入 crontab 编辑界面
no crontab for an - using an empty one
crontab: installing new crontab
"/tmp/crontab.A0NLfF":1: bad day-of-week
errors in crontab file, can't install.
Do you want to retry the same edit? y // 有语法错误是否修改,y/n
crontab: installing new crontab
[an@localhost 20220521]$ crontab -l // 查看当前crontab周期任务
30 23 * * 5 echo "process test" >> process_test.txt
进程与文件权限
特殊权限有三位:用户置位s(SUID)、组置位s(GUID)和粘着置位t(Sticky)
设置方法:
数字形式修改权限时setuid、setgid、sticky的八进制位分别是4000、2000、1000。
字母形式则分别为u+s,g+s,o+t,(删除标记位是u-s,g-s,o-t)
表示上有大小写之分
如果同时开启执行权限和特殊权限,则权限表示字符是小写。
如果关闭执行权限,开启特殊权限,则权限表示字符是大写。
拥有特权的含义:
suid/sgid程序:当SUID位被设置时,进程继承了命令拥有者的权限。
程序的t属性:内存中保存一份运行程序的备份
目录的s属性:在该目录下创建的任何文件及目录属于该目录所拥有的组。
目录的T属性:设置了目录的T属性后1000,由只有该目录的所有者及root才能删除该目录,如/tmp目录就是drwxrwxrwt。
SUID
在所有者的执行权限位置上出现了s标志
只能对二进制程序文件设置SUID权限,对Shell脚本文件和目录不起作用
执行设置了SUID权限的程序文件时,进程的所有者变为原程序文件的所有者,而不是执行程序的
用户,也可以理解为执行者继承了文件所有者的权限
前提是用户对该程序文件具有执行权限
[an@localhost 20220521]$ ls -l /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
[an@localhost 20220521]$ cat -n /etc/shadow // 为cat命令设置SUID权限, 4 说明 SUID 位被设置
cat: /etc/shadow: 权限不够
[an@localhost 20220521]$ su root
密码:
[root@localhost 20220521]# chmod 4755 /usr/bin/cat
[root@localhost 20220521]# su an
[an@localhost 20220521]$ ls -l /usr/bin/cat
-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
[an@localhost 20220521]$ cat -n /etc/shadow // cat命令现在可以访问文件/etc/shadow
1 root:$6$EDd2k.vnI90ZhTjm$l5mSwENX5.OlerjIf1ps2TJHs4fnTra7EiBlFlamADpA4UsuCwKrTB1lmSPub3WmK4NCX2Lko3cC2e8gPNLTB1::0:99999:7:::
2 bin:*:17834:0:99999:7:::
3 daemon:*:17834:0:99999:7:::
4 adm:*:17834:0:99999:7:::
5 lp:*:17834:0:99999:7:::
6 sync:*:17834:0:99999:7:::
7 shutdown:*:17834:0:99999:7:::
8 halt:*:17834:0:99999:7:::
9 mail:*:17834:0:99999:7:::
.......
[an@localhost 20220521]$ su root
密码:
[root@localhost 20220521]# chmod 0755 /usr/bin/cat // 删除cat命令的SUID权限
[root@localhost 20220521]# ls -l /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
GUID
SBIT
出现在目录的其他人的执行权限位置上的t标志
只能对目录设置SBIT权限
用户在目录中新建的文件和目录,只有该用户本身和root用户能够删除
SBIT权限生效的前提是用户对目录具有执行和写权限
课件:
[zys@centos7 ~]$ ls -ld /tmp
drwxrwxrwt. 27 root root 4096 1月 14 17:52 /tmp
[zys@centos7 ~]$ cd /tmp
[zys@centos7 tmp]$ touch zys_file
[zys@centos7 tmp]$ mkdir zys_dir2
[zys@centos7 tmp]$ ls -ld zys*
drwxr-xr-x. 2 zys devteam 6 1月 14 20:03 zys_dir2 // 没有继承SBIT权限
-rw-r--r--. 1 zys devteam 0 1月 14 20:03 zys_file
[zys@centos7 tmp]$ su - andy
[andy@centos7 ~]$ rm /tmp/zys_file
rm:是否删除有写保护的普通空文件 "/tmp/zys_file"?y
rm: 无法删除"/tmp/zys_file": 不允许的操作