第11章 系统管理
📝 Linux学习笔记 - 第11章 🎯 共4节
本章目录
进程管理
进程查看
ps命令
ps aux
# 查看系统中所有进程,使用BSD操作系统格式| 选项 | 说明 |
|---|---|
| a | 显示一个终端的所有进程,除了会话引线 |
| u | 显示进程的归属用户及内存的使用情况 |
| x | 显示没有控制终端的进程 |
ps -le
# 查看系统中所有进程,使用Linux标准命令格式| 选项 | 说明 |
|---|---|
| -l | 长格式显示。显示更加详细的信息 |
| -e | 显示所有进程,和-A作用一致 |
ps输出信息说明:
| 字段 | 说明 |
|---|---|
| USER | 该进程是由哪个用户产生的 |
| PID | 进程的ID号 |
| %CPU | 该进程占用CPU资源的百分比,占用越高,进程越耗费资源 |
| %MEM | 该进程占用物理内存的百分比,占用越高,进程越耗费资源 |
| VSZ | 该进程占用虚拟内存的大小,单位KB |
| RSS | 该进程占用实际物理内存的大小,单位KB |
| TTY | 该进程是在哪个终端中运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端 |
| STAT | 进程状态。常见的状态有:R运行、S睡眠、T停止、s包含子进程、+位于后台 |
| START | 该进程的启动时间 |
| TIME | 该进程占用CPU的运算时间,注意不是系统时间 |
| COMMAND | 产生此进程的命令名 |
top命令
top [选项]| 选项 | 说明 |
|---|---|
| -d 秒数 | 指定top命令每隔几秒更新。默认是3秒 |
top命令的交互模式当中可以执行的命令:
| 命令 | 说明 |
|---|---|
| ?或h | 显示交互模式的帮助 |
| P | 以CPU使用率排序,默认就是此项 |
| M | 以内存的使用率排序 |
| N | 以PID排序 |
| q | 退出top |
top输出信息说明:
第一行信息为任务队列信息:
| 内容 | 说明 |
|---|---|
| 12:26:46 | 系统当前时间 |
| up 1 day, 13:32 | 系统的运行时间,本机已经运行1天13小时32分钟 |
| 2 users | 当前登录了两个用户 |
| load average: 0.00, 0.00, 0.00 | 系统在之前1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小。如果大于1,系统已经超出负荷 |
第二行为进程信息:
| 内容 | 说明 |
|---|---|
| Tasks: 95 total | 系统中的进程总数 |
| 1 running | 正在运行的进程数 |
| 94 sleeping | 睡眠的进程 |
| 0 stopped | 正在停止的进程 |
| 0 zombie | 僵尸进程。如果不是0,需要手工检查僵尸进程 |
第三行为CPU信息:
| 内容 | 说明 |
|---|---|
| Cpu(s): 0.1%us | 用户模式占用的CPU百分比 |
| 0.1%sy | 系统模式占用的CPU百分比 |
| 0.0%ni | 改变过优先级的用户进程占用的CPU百分比 |
| 99.7%id | 空闲CPU的CPU百分比 |
| 0.1%wa | 等待输入/输出的进程的占用CPU百分比 |
| 0.0%hi | 硬中断请求服务占用的CPU百分比 |
| 0.1%si | 软中断请求服务占用的CPU百分比 |
| 0.0%st | st(Steal time)虚拟时间百分比 |
第四行为物理内存信息:
| 内容 | 说明 |
|---|---|
| Mem: 625344k total | 物理内存的总量,单位KB |
| 571504k used | 已经使用的物理内存数量 |
| 53840k free | 空闲的物理内存数量 |
| 65800k buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息:
| 内容 | 说明 |
|---|---|
| Swap: 524280k total | 交换分区(虚拟内存)的总大小 |
| 0k used | 已经使用的交换分区的大小 |
| 524280k free | 空闲交换分区的大小 |
| 409280k cached | 作为缓存的交换分区的大小 |
pstree命令
pstree [选项]| 选项 | 说明 |
|---|---|
| -p | 显示进程的PID |
| -u | 显示进程的所属用户 |
进程管理
kill命令
kill -l
# 查看可用的进程信号常见信号:
| 信号代号 | 信号名称 | 说明 |
|---|---|---|
| 1 | SIGHUP | 该信号让进程立即关闭,然后重新读取配置文件之后重启 |
| 2 | SIGINT | 程序终止信号,用于终止前台进程。相当于输出ctrl+c快捷键 |
| 8 | SIGFPE | 在发生致命的算术运算错误时发出 |
| 9 | SIGKILL | 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。一般用于强制终止进程 |
| 14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该信号 |
| 15 | SIGTERM | 正常结束进程的信号,kill命令的默认信号 |
| 18 | SIGCONT | 该信号可以让暂停的进程恢复执行。本信号不能被阻断 |
| 19 | SIGSTOP | 该信号可以暂停前台进程,相当于输入ctrl+z快捷键。本信号不能被阻断 |
kill -1 22354
# 重启进程
kill -9 22368
# 强制杀死进程killall命令
killall [选项] [信号] 进程名| 选项 | 说明 |
|---|---|
| -i | 交互式,询问是否要杀死某个进程 |
| -I | 忽略进程名的大小写 |
示例:
killall -9 httpd
# 杀死所有httpd进程pkill命令
pkill [选项] [信号] 进程名| 选项 | 说明 |
|---|---|
| -t 终端号 | 按照终端号踢出用户 |
示例:
pkill -9 -t pts/1
# 强制踢出从pts/1登录的用户进程优先级
优先级范围
- PRI(Priority):优先级,值越小优先级越高
- NI(Nice): nice值,范围-20到19
nice命令
nice [选项] 命令| 选项 | 说明 |
|---|---|
| -n 优先级 | 给命令赋予NI值 |
示例:
nice -n -5 service httpd start
# 给httpd进程设置NI值为-5renice命令
renice [优先级] PID示例:
renice -10 2125
# 修改PID为2125的进程优先级为-10工作管理
什么是工作管理
- 前台:是指当前可以操控的这个终端窗口
- 后台:是指当前不操控的终端窗口,但程序还在运行
把进程放入后台
方式一:
tar -zcf etc.tar.gz /etc &
# 在命令后面加&,放入后台执行方式二:
top
# 命令执行过程中,按ctrl+z快捷键,暂停并放入后台查看后台的工作
jobs [-l]| 选项 | 说明 |
|---|---|
| -l | 显示工作的PID |
注意:”+“号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。”-“号代表倒数第二个放入后台的工作
将后台暂停的工作恢复到前台执行
fg %工作号| 选项 | 说明 |
|---|---|
| %工作号 | %号可以省略,但是注意工作号和PID的区别 |
将后台暂停的工作恢复到后台执行
bg %工作号注意:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
后台命令脱离登录终端运行
我们知道,把命令放入后台,只能在当前登录终端执行。一旦退出或关闭终端,后台程序就会停止。
方法一:
nohup 命令 &方法二:
# 把需要后台执行的命令写入/etc/rc.local文件方法三:
# 使用系统定时任务系统资源查看
vmstat命令监控系统资源
vmstat [刷新延时 刷新次数]示例:
vmstat 1 3
# 每秒刷新一次,共刷新3次输出信息说明:
procs:进程信息字段
| 字段 | 说明 |
|---|---|
| r | 等待运行的进程数,数量越大,系统越繁忙 |
| b | 不可被唤醒的进程数量,数量越大,系统越繁忙 |
memory:内存信息字段
| 字段 | 说明 |
|---|---|
| swpd | 虚拟内存的使用情况,单位KB |
| free | 空闲的内存容量,单位KB |
| buff | 缓冲的内存容量,单位KB |
| cache | 缓存的内存容量,单位KB |
swap:交换分区信息字段
| 字段 | 说明 |
|---|---|
| si | 从磁盘中交换到内存中数据的数量,单位KB |
| so | 从内存中交换到磁盘中数据的数量,单位KB |
io:磁盘读写信息字段
| 字段 | 说明 |
|---|---|
| bi | 从块设备读入数据的总量,单位是块 |
| bo | 写到块设备的数据的总量,单位是块 |
system:系统信息字段
| 字段 | 说明 |
|---|---|
| in | 每秒被中断的进程次数 |
| cs | 每秒钟进行的事件切换次数,数值越大,系统与接口设备的通信越繁忙 |
cpu:CPU信息字段
| 字段 | 说明 |
|---|---|
| us | 非内核进程消耗CPU运算时间的百分比 |
| sy | 内核进程消耗CPU运算时间的百分比 |
| id | 空闲CPU的百分比 |
| wa | 等待I/O所消耗的CPU百分比 |
| st | 被虚拟机盗用的CPU时间百分比 |
dmesg开机时内核检测信息
dmesg
# 查看开机时内核检测信息
dmesg | grep CPU
# 查看CPU信息free命令查看内存使用状态
free [-b|-k|-m|-g]| 选项 | 说明 |
|---|---|
| -b | 以字节为单位显示 |
| -k | 以KB为单位显示,默认就是以KB为单位显示 |
| -m | 以MB为单位显示 |
| -g | 以GB为单位显示 |
示例:
free -m
# 以MB为单位显示内存使用情况缓存和缓冲的区别:
- 缓存(cache):用来加速数据从硬盘中”读取”的
- 缓冲(buffer):用来加速数据”写入”硬盘的
查看CPU信息
cat /proc/cpuinfo
# 查看CPU信息uptime命令
uptime
# 显示系统的启动时间和平均负载
# 也就是top命令的第一行查看系统与内核相关信息
uname [选项]| 选项 | 说明 |
|---|---|
| -a | 查看系统所有相关信息 |
| -r | 查看内核版本 |
| -s | 查看内核名称 |
示例:
uname -a
# 查看所有信息
uname -r
# 查看内核版本判断当前系统的位数
file /bin/ls
# 查看外部命令的文件类型,从而判断系统位数查看系统发行版本
lsb_release -a
# 查看系统发行版本
cat /etc/redhat-release
# RedHat系列查看发行版列出进程打开或使用的文件信息
lsof [选项]
# 列出进程调用或打开的文件的信息| 选项 | 说明 |
|---|---|
| -c 字符串 | 只列出以字符串开头的进程打开的文件 |
| -u 用户名 | 只列出某个用户的进程打开的文件 |
| -p pid | 列出某个PID进程打开的文件 |
示例:
lsof | more
# 查看所有进程打开的文件
lsof -c httpd
# 查看httpd进程打开的文件
lsof -u root
# 查看root用户进程打开的文件
lsof -p 1
# 查看PID为1的进程打开的文件系统定时任务
crond服务管理与访问控制
service crond restart
# 重启crond服务
chkconfig crond on
# 设置crond服务开机自启动用户的crontab设置
crontab [选项]| 选项 | 说明 |
|---|---|
| -e | 编辑crontab定时任务 |
| -l | 查询crontab任务 |
| -r | 删除当前用户所有的crontab任务 |
crontab基本格式:
* * * * * 执行的任务
| 项目 | 含义 | 范围 |
|---|---|---|
| 第一个”*“ | 一小时当中的第几分钟 | 0-59 |
| 第二个”*“ | 一天当中的第几小时 | 0-23 |
| 第三个”*“ | 一个月当中的第几天 | 1-31 |
| 第四个”*“ | 一年当中的第几月 | 1-12 |
| 第五个”*“ | 一周当中的星期几 | 0-7(0和7都代表星期日) |
特殊符号说明:
| 特殊符号 | 含义 |
|---|---|
| * | 代表任何时间。比如第一个”*“就代表一小时中每分钟都执行一次的意思 |
| , | 代表不连续的时间。比如”0 8,12,16 * * * 命令”,就代表在每天的8点0分,12点0分,16点0分都执行一次命令 |
| - | 代表连续的时间范围。比如”0 5 * * 1-6 命令”,代表在周一到周六的凌晨5点0分执行命令 |
| */n | 代表每隔多久执行一次。比如”*/10 * * * * 命令”,代表每隔10分钟就执行一遍命令 |
示例:
| 时间 | 含义 |
|---|---|
| 45 22 * * * 命令 | 在22点45分执行命令 |
| 0 17 * * 1 命令 | 每周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号,每周1的0点0分都会执行命令 |
⚠️ 注意:星期几和几号最好不要同时出现,因为它们定义的都是天,非常容易让管理员混乱
示例:
*/5 * * * * /bin/echo "11" >> /tmp/test
# 每隔5分钟,向/tmp/test文件中写入11
0 2 1,10,15 * * /root/sh/autobak.sh
# 每月1号、10号、15号的凌晨2点执行autobak.sh脚本注意事项:
- 六个选项都不能为空,必须填写。如果不确定使用”*“代表任意时间
- crontab定时任务,最小有效时间是分钟,最大时间范围是月
- 写定时任务时,命令的路径最好写绝对路径
- 定时任务的执行结果,会通过邮件发送给用户,所以如果输出内容较多,建议重定向到文件或/dev/null