一、进程管理
1.1 进程管理的作用
- 判断服务器健康状态
- 查看系统中所有的进程
- 杀死进程
1.2 进程的查看
1.2.1 PS命令
进程的查看是使用ps命令来静态的显示系统中的进程。
#查看系统中所有进程,shiyongbsd操作系统格式
[root@localhost ~]# ps aux
#a 显示一个终端除绘画线以外的所有进程
#u 显示进程的归属用户及内存的使用情况
#x 显示没有控制终端的进程
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19364 1540 ? Ss Jun23 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun23 0:00 [kthreadd]
...
说明
**USER:**该进程是由哪个用户产生的
**PID:**进程的ID号
**%CPU:**该进程占用CPU资源的百分比
**%MEM:**该进程占用物理内存的百分比
**VSZ:**该进程占用虚拟内存的大小,单位KB
**RSS:**该进程韩勇世纪物理内存的大小,单位KB
**TTY:**该进程是哪个中断运行的(tty1-tty7本地控制台,tty1-tty6本地字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端)
**STAT:**进程状态
D:不可被唤醒的睡眠状态
R:正在运行
S:睡眠状态,可被唤醒
T:停止状态
W:内存交互状态(从2.6内核开始无效)
X:死掉的进程
Z:僵尸进程
<:高优先级
N:低优先级
L:被锁乳内存
s:包含子进程
l:多线程
+:后台进程
**START:**该进程的启动时间
**TIME:**该进程占用CPU的运算时间(不是系统时间)
**COMMAND:**产生此进程的命令
#查看系统中所有进程,使用Linux标准命令格式
[root@localhost ~]# ps -le
#-l 长格式显示
#-e 显示所有进程
[root@localhost ~]# ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 4841 poll_s ? 00:00:01 init
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
说明
**F:**进程的权限,常见权限:1,进程可以复制但不能执行。2,进程使用超级用户权限
**S:**进程状态
**UID:**进程运行的用户UID
**PID:**进程的ID号
**PPID:**进程父进程的ID号
**C:**该进程的CPU使用率
**PRI:**该进程的优先级,值越小优先级越高
**C:**该进程的CPU使用率,单位是百分比
**NI:**进程的优先级
**ADDR:**该进程在内存中的地址
**SZ:**该进程占用多大内存
**WCHAN:**该进程是否运行,-代表正在运行
**TIME:**该进程占用CPU的运算时间
**CMD:**产生此进程的命令
1.2.2 TOP命令
使用top命令来动态的显示系统中的进程。
[root@localhost ~]# top [选项]
#常用选项
-d 指定top命令每隔几秒数显,默认是3秒
-b 使用批处理模式输出,一般与-n何用,把top命令重定向到文件中
-n 指定top命令的执行次数
-p 指定PID,只查看指定PID的进程
-s 使top在安全模式运行
-u 用户名 只监听某个用户的进程
#top交互模式命令
?|h 显示交互模式的帮助信息
P 以CPU使用率排序,默认项
M 以内存的使用率排序
N 以PID排序
T 按照CPU的累计运算时间排序,也就是TIME项排序
k 按照PID给与某个进程指定的信号,一般用来种植进程
r 按照PID给某个进程重设优先级
q 退出top
[root@localhost ~]# top
top - 14:49:18 up 21:44, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 145 total, 1 running, 144 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1906912k total, 442436k used, 1464476k free, 43636k buffers
Swap: 1048572k total, 0k used, 1048572k free, 230348k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6497 root 20 0 15028 1140 824 R 2.0 0.1 0:00.01 top
1 root 20 0 19364 1540 1228 S 0.0 0.1 0:01.82 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
1-5行显示整个系统的资源使用情况,从第6行开始显示系统中进程的信息。
第一行-任务队列信息
显示内容 | 说明 |
---|---|
top - 14:49:18 up 21:44 | 系统当前时间 |
2 users | 当前登录了两个用户 |
load average: 0.00, 0.00, 0.00 | 系统1,5,15分钟前的平均负载 |
第二行-进程信息
显示内容 | 说明 |
---|---|
Tasks: 145 total | 系统中的进程总数 |
1 running | 正在运行的进程数 |
144 sleeping | 休眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数,应为0 |
第三行-CPU信息
显示内容 | 说明 |
---|---|
Cpu(s): 0.0%us | 用户模式占用的CPU百分比 |
0.0%sy | 系统模式占用的CPU百分比 |
0.0%ni | 改变过优先级的用户进程占用的CPU百分比 |
100.0%id | 空闲的CPU百分比 |
0.0%wa | 等待输入\输出的进程占用的CPU百分比 |
0.0%hi | 硬中断请求服务占用的CPU百分比 |
0.0%si | 软中断请求服务占用的CPU百分比 |
0.0%st | st虚拟时间百分比,即当有虚拟机时虚拟CPU等待时机CPU的时间百分比。 |
第四行-物理内存信息
显示内容 | 说明 |
---|---|
Mem: 1906912k total | 物理内存的总量,单位KB |
442436k used | 已使用的物理内存数量 |
1464476k free | 空闲的物理内存数量 |
43636k buffers | 做为缓冲的内存数量 |
第五行-物理内存信息
显示内容 | 说明 |
---|---|
Swap: 1048572k total | swap交换分区(虚拟内存)的总大小 |
0k used | 已使用交换分区的大小 |
1048572k free | 空闲的交换分区数量 |
230348k cached | 做为缓存的交换分区大小 |
第六行-进程信息
列名 | 说明 |
---|---|
PID | 进程ID |
USER | 该进程所属的用户 |
PR | 优先级(值越小越优先) |
NI | 优先级(值越小越优先) |
VIRT | 该进程使用的虚拟内存大小,单位KB |
RES | 该进程使用的物理内存的大小,单位KB |
SHR | 共享内存大小单位KB |
S | 进程状态 |
%CPU | 该进程占用的CPU百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程总共占用的CPU时间 |
COMMAND | 产生此进程的命令 |
1.3 进程的管理
1.3.1 信号
在Linux系统中可以使用kill -l命令来查询信号。
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
常用信号说明:
信号量 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 让进程立即关闭,重新读取配置文件后重启 |
2 | SIGINT | 终止前台进程 |
8 | SIGFPE | 在发生致命的算数运算错误时发出该信号 |
9 | SIGKILL | 立即结束进程的运行。此型号不能被则塞、处理和忽略 |
14 | SIGALRM | 时钟定时信号 |
15 | SIGTERM | 正常结束进程的信号,也是kill命令的默认信号 |
18 | SIGCONT | 让暂停的进程恢复运行,该信号不能被阻断 |
19 | SIGSTOP | 暂停前台进程,等同于ctrl+z,该信号不能被阻断 |
1.3.2 kill命令
kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。
kill [-s <信息名称或编号>][PID] 或 kill [-l PID]
#长ping www.baidu.com
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.14) 56(84) bytes of data.
64 bytes from 39.156.66.14: icmp_seq=1 ttl=51 time=23.5 ms
#新终端中
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 7000 0.0 0.0 109572 1024 pts/0 S+ 17:32 0:00 ping www.baidu.com,
#当前进程PDI-7000,状态是S(休眠)+后台运行
[root@localhost ~]# kill -19 7000 #发送信号19暂停这个进程
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 7000 0.0 0.0 109572 1024 pts/0 T 17:32 0:00 ping www.baidu.com
#切回刚刚运行ping www.baidu.com的终端
64 bytes from 39.156.66.14: icmp_seq=35 ttl=51 time=23.8 ms
64 bytes from 39.156.66.14: icmp_seq=36 ttl=51 time=23.6 ms
[1]+ Stopped ping www.baidu.com
#ping已暂停
[root@localhost ~]# kill -18 7000 #发送信号18恢复这个暂停的进程
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 7000 0.0 0.0 109572 1024 pts/0 S 17:32 0:00 ping www.baidu.com
#切回刚刚运行ping www.baidu.com的终端
64 bytes from 39.156.66.14: icmp_seq=36 ttl=51 time=23.6 ms
[1]+ Stopped ping www.baidu.com
[root@localhost ~]# 64 bytes from 39.156.66.14: icmp_seq=37 ttl=51 time=23.0 ms
64 bytes from 39.156.66.14: icmp_seq=38 ttl=51 time=22.8 ms
64 bytes from 39.156.66.14: icmp_seq=39 ttl=51 time=23.8 ms
64 bytes from 39.156.66.14: icmp_seq=40 ttl=51 time=22.7 ms
#有一个问题恢复后的进程一直在后台运行无法使用ctrl+c停止,需要使用kill -9 停止
[root@localhost ~]# kill -9 7000
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
1.3.3 killall命令
killall 命令用于终止某个指定名称的服务所对应的全部进程 。
killall [选项] [信号] 进程名
#常用选项
-i 交互式,杀死进程前需确认
-I 忽略进程名的大小写
-Z 只杀死拥有scontext的进程
-e 要求匹配进程名称
-g 杀死进程组而不是进程
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
#依然以之前的ping进程为例
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=22.9 ms
...
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 3016 0.0 0.2 150088 2000 pts/1 S+ 21:39 0:00 ping www.baidu.com
[root@localhost ~]# killall -i ping
杀死 ping(3016) ? (y/N) y
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
[root@localhost ~]#
1.3.4 pkill命令
pkill命令与killall命令类似,也是按照进程名来杀死进程。
pkill [选项] [信号] 进程名
#常用选项
-t 按照终端好踢出用户
[root@localhost ~]# w
21:48:13 up 1:06, 3 users, load average: 0.00, 0.01, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.10.19.227 二21 23:30m 0.04s 0.04s -bash
root pts/1 10.10.19.227 21:39 9:01 0.00s 0.00s -bash
root pts/2 10.10.19.227 21:39 5.00s 0.00s 0.00s w
#踢出pts/0、pts/1终端的用户
[root@localhost ~]# pkill -9 -t pts/0
[root@localhost ~]# pkill -9 -t pts/1
#除当前会话pts/2的终端其他终端登录的用户均已被踢出
[root@localhost ~]# w
21:50:31 up 1:08, 1 user, load average: 0.00, 0.01, 0.04
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/2 10.10.19.227 21:39 7.00s 0.01s 0.00s w
二、工作管理
2.1 注意事项
- 前台是指当前可以操作和执行命令的操作环境,后台是指工作可以自行运行,但是不能直接用ctrl+c来终止只能使用fg/bg来调用的工作
- 当前登录的终端只能管理当前终端的工作,不能管理其他登录终端的工作
- 放入后台的命令必须可以持续运行一段时间
- 放入后台执行的工作不能和前台用户有交互或需要前台输入内容否则后台只能暂停而不能执行
2.2 如何把命令放入后台
-
使用“命令 &”把命令放入后台执行
[root@localhost ~]# ping www.baidu.com & [1] 3056 [root@localhost ~]# PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data. 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=26.4 ms ^C [root@localhost ~]# 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=7 ttl=55 time=25.6 ms 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=8 ttl=55 time=25.5 ms [root@localhost ~]# 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=11 ttl=55 time=26.7 ms ^C [root@localhost ~]# 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=12 ttl=55 time=26.4 ms #我们已经把ping这个进程放入后台执行,在前台已经无法使用ctrl+c来终止。 [root@localhost ~]# killall -9 ping 64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=111 ttl=55 time=25.6 ms ^C [1]+ 已杀死 ping www.baidu.com
-
使用快捷键ctrl+z把命令放入后台执行
注意:使用ctrl+z将命令放入后台,命令将处于暂停状态
[root@localhost ~]# ping www.baidu.com PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data. 64 bytes from 61.135.169.125 (61.135.169.125): icmp_seq=1 ttl=55 time=23.9 ms ^Z [1]+ 已停止 ping www.baidu.com [root@localhost ~]# ps aux |grep "ping" |grep -v "grep" root 3111 0.0 0.2 150088 2000 pts/2 S+ 22:04 0:00 ping www.baidu.com [root@localhost ~]# ps aux |grep "ping" |grep -v "grep" root 3111 0.0 0.2 150088 2000 pts/2 T 22:04 0:00 ping www.baidu.com
2.3后台命令的管理
2.3.1查看后台运行的工作
jobs -l
#常用选项
-l 显示进程号
-p 仅任务对应的显示进程号
-n 显示任务状态的变化
-r 仅输出运行状态(running)的任务
-s 仅输出停止状态(stoped)的任务
#注意jobs仅能查当前终端下后台运行的工作
[root@localhost ~]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=55 time=25.4 ms
^Z
[1]+ 已停止 ping www.baidu.com
[root@localhost ~]# jobs -l
[1]+ 3139 停止 ping www.baidu.com
2.3.2将后台暂停的工作恢复至前台
[root@localhost ~]#fg %工作号
[root@localhost ~]# fg %1
ping www.baidu.com
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=2 ttl=55 time=26.8 ms
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=3 ttl=55 time=25.6 ms
2.3.3将后台暂停的工作恢复执行
[root@localhost ~]# bg %工作号
root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 3139 0.0 0.2 150088 2000 pts/2 T 22:15 0:00 ping www.baidu.com #ping与处于T暂停运行
[root@localhost ~]# jobs -l
[1]+ 3139 停止 ping www.baidu.com
[root@localhost ~]# bg %1
[1]+ ping www.baidu.com &
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=15 ttl=55 time=27.4 ms
[root@localhost ~]# ps aux |grep "ping" |grep -v "grep"
root 3139 0.0 0.2 150088 2000 pts/2 S 22:15 0:00 ping www.baidu.com #ping已恢复运行
2.3.4将后台命令脱离终端运行
仅仅把命令放入后台,该命令仅能在当前登录的终端中运行,并不能脱离当前终端,如果终端关闭该命令也会结束。如果想要使命令脱离终端运行可以使用以下几种方式:
-
把需要后台执行的命令加入/etc/rc.local文件,使其在系统启动时执行
[root@localhost disk_lv]# vi /etc/rc.local [root@localhost disk_lv]# cat /etc/rc.local #!/bin/bash touch /var/lock/subsys/local sh /disk_lv/run_ping.sh #开机运行 [root@localhost disk_lv]# cat run_ping.sh #!/bin/bash ping www.baidu.com >> /disk_lv/ping_log.txt & #ping www.baidu.com并将输出结果重定向至/disk_lv/ping_log.log #第一次重启测试run_ping.sh并未启动,检查发现是/etc/rc.d/rc.local权限有问题 [root@localhost disk_lv]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 6月 11 06:39 /etc/rc.local -> rc.d/rc.local [root@localhost disk_lv]# ll /etc/rc.d/rc.local -rw-r--r-- 1 root root 536 6月 24 22:39 /etc/rc.d/rc.local [root@localhost disk_lv]# chmod 755 /etc/rc.d/rc.local [root@localhost disk_lv]# ll /etc/rc.d/rc.local -rwxr-xr-x 1 root root 536 6月 24 22:39 /etc/rc.d/rc.local #重启测试 [root@localhost ~]# ps aux |grep "ping" |grep -v "grep" root 1086 0.0 0.2 150088 2000 ? S 22:42 0:00 ping www.baidu.com
-
使用系统定时任务,让系统在指定的时间执行某个后台命令
[root@localhost disk_lv]# cat run_ping.sh #!/bin/bash ping -c 2 www.baidu.com >> /disk_lv/ping_log.txt & #修改下run_ping.sh指定ping次数为2次,为了避免启动N个进程一直在后台重复的ping [root@localhost disk_lv]# crontab -e * * * * * /disk_lv/run_ping.sh #添加定时任务,每1分钟执行1次 [root@localhost disk_lv]# systemctl restart crond.service #重启下服务使定时任务生效 [root@localhost disk_lv]# ps aux |grep "ping" |grep -v "grep" root 1676 0.0 0.0 0 0 ? Zs 22:52 0:00 [run_ping.sh] <defunct> root 1677 0.0 0.1 132752 1720 ? S 22:52 0:00 ping -c 2 www.baidu.com
-
使用nohup命令
nouhup命令的作用就是让后台工作在离开操作中断时也能够正常的在后台执行。
nohup [命令或脚本] &
[root@localhost disk_lv]# nohup ping www.baidu.com >> /disk_lv/ping_log.txt & [1] 1755 [root@localhost disk_lv]# nohup: 忽略输入重定向错误到标准输出端 #查看ping在 pts/0中运行 [root@localhost ~]# ps aux |grep "ping" |grep -v "grep" root 1776 0.0 0.2 150088 2000 pts/0 S 23:00 0:00 ping www.baidu.com #手动关闭pts/0的终端,再次查看 [root@localhost ~]# ps aux |grep "ping" |grep -v "grep" root 1776 0.0 0.2 150088 2000 ? S 23:00 0:00 ping www.baidu.com #注意,不要使用pkill -t pts/0 他会在踢出对应终端的同时结束ping进程
三、系统资源的查看
3.1 使用vmstat命令监控系统资源
vmstat [选项] [刷新时间] [刷新次数]
#选项
-a, --active 显示活跃和非活跃内存
-f, --forks 显示从系统启动至今的fork数量
-m, --slabs 查看系统的slab信息
-n, --one-header 不显示标题
-s, --stats 显示内存相关统计信息及多种系统活动数量
-d, --disk 查看磁盘的读写
-D, --disk-sum summarize disk statistics
-p, --partition <dev> 显示指定磁盘分区统计信息
-S, --unit <char> 使用指定单位显示。参数有 k 、K 、m 、M
-t, --timestamp 显示时间戳
#每1秒刷新一次,共刷新5此
[root@localhost ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 598620 2152 146940 0 0 39 3 56 116 0 0 100 0 0
0 0 0 598600 2152 146940 0 0 0 0 63 108 0 0 100 0 0
0 0 0 598600 2152 146940 0 0 0 0 49 84 0 0 100 0 0
0 0 0 598600 2152 146940 0 0 0 0 47 92 0 0 100 0 0
0 0 0 598600 2152 146940 0 0 0 0 53 96 0 0 100 0 0
说明:
- proces:进程信息
- 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百分比
3.2 使用dmesg显示开机时内核检测信息
dmesg [选项]
#选项:
-C, --clear 清除内核环形缓冲区(ring butter)
-c, --read-clear 读取并清除所有消息
-D, --console-off 禁止向终端打印消息
-d, --show-delta 显示打印消息之间的时间差
-e, --reltime 以易读格式显示本地时间和时间差
-E, --console-on 启用向终端打印消息
-F, --file <文件> 用 文件 代替内核日志缓冲区
-f, --facility <列表> 将输出限制为定义的设施
-H, --human 易读格式输出
-k, --kernel 显示内核消息
-L, --color 显示彩色消息
-l, --level <列表> 限制输出级别
-n, --console-level <级别> 设置打印到终端的消息级别
-P, --nopager 不将输出通过管道传递给分页程序
-r, --raw 打印原生消息缓冲区
-S, --syslog 强制使用 syslog(2) 而非 /dev/kmsg
-s, --buffer-size <大小> 查询内核环形缓冲区所用的缓冲区大小
-T, --ctime 显示易读的时间戳(如果您使用了
SUSPEND/RESUME 则可能不准)
-t, --notime 不打印消息时间戳
-u, --userspace 显示用户空间消息
-w, --follow 等待新消息
-x, --decode 将设施和级别解码为可读的字符串
#查看CPU信息
[root@localhost ~]# dmesg | grep CPU
[ 0.000000] smpboot: Allowing 128 CPUs, 126 hotplug CPUs
[ 0.000000] Detected CPU family 17h model 113
[ 0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:128 nr_cpu_ids:128 nr_node_ids:1
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=128, Nodes=1
[ 0.000000] RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=128.
[ 0.070609] smpboot: CPU0: AMD Ryzen 7 3800X 8-Core Processor (fam: 17, model: 71, stepping: 00)
[ 0.072451] NMI watchdog: enabled on all CPUs, permanently consumes one hw-PMU counter.
[ 0.081701] smpboot: CPU 1 Converting physical 2 to logical package 1
[ 0.081706] smpboot: CPU 1 Converting physical 0 to logical die 1
[ 0.081792] Brought up 2 CPUs
[ 0.498455] acpi LNXCPU:67: hash matches
[ 0.498458] acpi LNXCPU:3a: hash matches
#查看网卡信息
[root@localhost ~]# dmesg | grep eth
[ 1.069416] e1000 0000:02:00.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:4d:f5:1b
[ 1.069423] e1000 0000:02:00.0 eth0: Intel(R) PRO/1000 Network Connection
3.3使用free命令查看内存状态
free [选项]
#选项
-b 以Byte为单位显示内存使用情况
-k 以KB为单位显示内存使用情况
-m 以MB为单位显示内存使用情况
-h 以合适的单位显示内存使用情况
-s<间隔秒数> 持续观察内存使用状况
-t 显示内存总和列
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 972M 242M 584M 15M 145M 579M
Swap: 2.0G 0B 2.0G
#MEM内存使用信息
#Swap 交换空间使用信息
标题 | 说明 |
---|---|
total | 内存总数 |
used | 已使用内存书 |
free | 空闲内存数 |
shared | 多进程共享的内存总数 |
buff | 缓冲内存书 |
cached | 缓存内存数 |
available | 还可以被应用程序使用的物理内存大小 |
3.4 查看CPU信息
在Linux中CPU的信息一般都保存在/proc/cpuinfo这个文件中,我们只需要查看这个文件的内容就可以知道CPU的相关信息。
[root@localhost ~]# cat /proc/cpuinfo
processor : 0 #逻辑CPUI编号
vendor_id : AuthenticAMD #CPU厂商
cpu family : 23 #产品代号
model : 113 #CPU代号
model name : AMD Ryzen 7 3800X 8-Core Processor #CPU系列,编号,主频
stepping : 0 #更新版本
microcode : 0x8701013 #微码
cpu MHz : 3899.997 #CPU频率
cache size : 512 KB #二级缓存
physical id : 0 #单个CPU的标号
siblings : 1 #单个CPU逻辑物理核数
core id : 0 #当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores : 1 #该逻辑核所处CPU的物理核数
apicid : 0
initial apicid : 0 #用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu : yes #是否具有浮点运算单元
fpu_exception : yes #是否支持浮点计算异常
cpuid level : 16 #执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp : yes #表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc art rep_good nopl tsc_reliable nonstop_tsc extd_apicid eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw retpoline_amd ssbd ibpb vmmcall fsgsbase bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec clzero arat #当前CPU支持的功能
bogomips : 7799.99 #在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
TLB size : 3072 4K pages #TLB 缓存
clflush size : 64 #每次刷新缓存的大小单位
cache_alignment : 64 #缓存地址对齐单位
address sizes : 43 bits physical, 48 bits virtual #可访问地址空间位数
power management: #对能源管理的支持
3.5 查看本机登录用户的信息
3.5.1 whoami命令
whoami命令用于显示自身用户名称。
[root@localhost ~]# whoami
root
3.5.2 w命令
w命令用于显示目前登入系统的用户信息。
w [选项] [用户名]
#选项
-f 开启或关闭显示用户从何处登入系统。
-h 不显示各栏位的标题信息列。
-l 使用详细格式列表,此为预设值。
-s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗费的CPU时间。
-u 忽略执行程序的名称,以及该程序耗费CPU时间的信息。
-V 显示版本信息。
[root@localhost ~]# w
22:10:14 up 1:16, 1 user, load average: 0.00, 0.01, 0.02
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.10.19.227 21:20 6.00s 0.01s 0.00s w
标题 | 说明 |
---|---|
USER | 登录的用户名 |
TTY | 登录的终端 |
FROM | 从哪个Ip地址等 |
LOGIN@ | 登录的时间 |
IDLE | 用户闲置时间 |
JCPU | 和该终端连接的所有进程占用的CPU运算时间,不包含过去的后台作业时间但包含当前运行的后台作业时间 |
PCPU | 当前进程所占用的CPU运算时间 |
WHAT | 当前正在运行的命令 |
3.5.3 who命令
who命令用于显示系统中有哪些使用者正在上面,显示的资料包含了使用者 ID、使用的终端机、从哪边连上来的、上线时间、呆滞时间、CPU 使用量、动作等等。
who [选项] [用户名]
#选项
-H 显示各栏位的标题信息列;
-i 显示闲置时间,若该用户在前一分钟之内有进行任何动作,将标示成"."号,如果该用户已超过24小时没有任何动作,则标示出"old"字符串
-m 此参数的效果和指定"am i"字符串相同
-q 或--count:只显示登入系统的帐号名称和总人数
-s 此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题
-w 显示用户的信息状态栏
[root@localhost ~]# who
root pts/0 2020-06-25 21:20 (10.10.19.227)
[root@localhost ~]# who -l -H
名称 线路 时间 空闲 进程号 备注
登录 tty1 2020-06-24 22:42 1299 id=tty1
3.6 查看系统的启动时间和平均负载
[root@localhost ~]# uptime
22:17:28 up 1:23, 1 user, load average: 0.05, 0.03, 0.03
uptime显示的内容和top命令重叠,也就是top命令显示的第一行内容。
3.7 查看内核信息
uname [选项]
#选项
-a 查看系统所有相关信息
-r 查看系统内核版本
-s 查看内核名称
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
四、Linux系统的定时任务
4.1 使用at执行一次性定时任务
4.1.1 安装at
at用于执行一次行的定时任务,即这个任务在执行过一次后就会失效,不会再次执行。
#安装at
[root@localhost ~]# yum -y install at
[root@localhost ~]# systemctl status atd #查看服务状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
[root@localhost ~]# chkconfig atd on #设置开机启动
注意:正在将请求转发到“systemctl enable atd.service”。
4.1.2 at命令命令的执行权限
at的访问的控制时依靠/etc/at.allow白名单文件和/etc/at.deny黑名单文件这两个来实现控制的。控制规则如下:
- 如果系统中有/etc/at.allow文件那么只有写入这个文件中的用户才可以使用at命令,其他用户无法使用。另外如果同一个用户同时被写入了/etc/at.allow和/etc/at.deny,那么这个用户时可以使用at命令的,因为/etc/at.allow的优先级高于/etc/at.deny。
- 如果系统中没有/etc/at.allow文件,只有/etc/at.deny,那么写入/etc/at.deny中的用户不能使用at命令,未写入/etc/at.deny的用户可以使用at命令,但,root用户除外。
- 如果在系统中/etc/at.allow和/etc/at.deny这两个文件不存在,那么只有root用户可以使用at命令。
- 系统中默认只有/etc/at.deny文件。
4.1.3 at命令的使用
at [选项] 时间
#选项
-q queue使用指定的队列。队列名称由单个字母组成,有效队列名称范围从a到z和A到Z。at默认a队列,batch默认b队列。具有较高字母的队列运行良好。特殊队列“=”为正在运行的作业保留。如果作业提交给大写字母指定的队列,则该作业被视为在作业时提交给batch。一旦时间到达批处理规则将应用于负载平衡使用中。如果atq被赋予指定队列,它将只显示该队列的待处理作业。
-m 即使没有输出也会在作业完成后向用户发出邮件。
-M 不发送邮件给用户
-f file从文件读取而不是标准输出
-l atq的别名
-r atrm的别名
-d atrm的别名
-v 显示在读取作业前作业执行的时间。显示时间格式样例“The Feb 20 14:50:00 1997”
-c 将命令行中列出的作业标记为标准输出
-t time_arg 提交time_arg参数指定作业运行时间,格式[[CC]YY] MMDDhhmm
#时间
HH:MM #在指定的小时:分钟执行命令,如22:05
HH:MM YYYY-MM-DD #在指定的小时:分钟 年-月-日执行,例如:22:05 2020-06-27
HH:MM[am|pm] [Month] [Date] #在指定的小时:分钟[上午|下午][月][日]执行,例如:22:05 june 27
HH:MM[am|pm] + number [minutes|hours|days|weeks] #在指定的时间再加多久执行,例如:now +5 minutes
[root@localhost disk_lv]# cat run_ping.sh
#!/bin/bash
ping -c 2 www.baidu.com >> /disk_lv/ping_log.txt &
[root@localhost disk_lv]# at now +1 minutes #一分钟后执行
at> /disk_lv/run_ping.sh #执行的shell脚本
at> <EOT> #ctrl+d保存
job 1 at Sat Jun 27 22:06:00 2020
[root@localhost disk_lv]# atq #查询
2 Sat Jun 27 22:10:00 2020 a root
[root@localhost disk_lv]# atrm 2 #删除编号为2的定时任务
[root@localhost disk_lv]# atq
[root@localhost disk_lv]#
4.2 使用crontab循环执行定时任务
4.2.1 crond服务
crontab命令是需要crond服务支持的,这个服务默认已经安装并启动了,如果没有必要不建议主动去关闭他。
[root@localhost disk_lv]# service crond status
Redirecting to /bin/systemctl status crond.service
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since 三 2020-06-24 22:56:38 CST; 2 days ago
Main PID: 1735 (crond)
CGroup: /system.slice/crond.service
└─1735 /usr/sbin/crond -n
6月 24 22:56:38 localhost.localdomain systemd[1]: Started Command Scheduler.
6月 24 22:56:38 localhost.localdomain crond[1735]: (CRON) INFO (RANDOM_DELAY will be scal....)
6月 24 22:56:38 localhost.localdomain crond[1735]: (CRON) INFO (running with inotify support)
6月 24 22:56:38 localhost.localdomain crond[1735]: (CRON) INFO (@reboot jobs will be run ....)
Hint: Some lines were ellipsized, use -l to show in full.
4.2.2 crontab命令的执行权限
crontab命令和at命令类似,也是通过两个文件来限制某些用户是否可以使用crontab命令的。这两个文件就是/etc/cron.allow和/etc/cron.deny,而且限制规则与at命令的限制规则基本一致。
4.2.3 用户的crontab设置
每个用户都可以实现自己的crontab定时任务,只要使用当前用户执行“crontab -e“命令就可以编辑crontab定时任务,不过这个用户不能在/etc/cron.deny中。
crontab [选项]
#选项
-e 编辑crontab定时任务
-l 查询crontab定时任务
-r 删除当前用户所有的crontab任务
-u<用户名> 修改或产出指定用户的crontab任务
[root@localhost disk_lv]# crontab -l
* * * * * /disk_lv/run_ping.sh #每分钟执行一次run_ping.sh
* | 说明 | 取值范围 |
---|---|---|
第一个 | 一小时当中的第几分钟,*代表每一分钟 | 0-59 |
第二个 | 一天当中的第几个小时,*代表每一小时 | 0-23 |
第三个 | 一个月当中的第几天,*代表每一天 | 0-31 |
第四个 | 一年当中的第几个月份,*代表每一个月份 | 1-12 |
第五个 | 一种当中的星期几,*代表每天 | 0-7,0和7代表周日 |
特殊时间表示:
- ”*“ 代表任何时间
- ”,“ 代表不连续的时间,如8,12,16
- ”-“ 代表连续的时间范围,如8-12
- ”/n“ 代表每隔多久执行一次,如 */10 * * * /disk_lv/run_ping.sh 每隔10分钟执行一次
4.2.4 anacron
我们假设这样一个场景,我们的服务器需要在每天的凌晨2点来执行一个特定的定时任务,但是在某一天因为断电或服务故障导致这个服务器关机了,这个定时任务没有执行,那么这个定时任务在服务器开机后就不会执行了,anacron就是用来解决这个问题的。
anacron [选项] [工作名]
#选项
-f 强制执行相关工作,忽略时间戳。
-u 更新 /var/spool/anacron/cron.{daily,weekly,monthly} 文件中的时间戳为当前日期,但不执行任何工作。
-s 依据 /etc/anacrontab 文件中设定的延迟时间顺序执行工作,在前一个工作未完成前,不会开始下一个工作。
-n 立即执行 /etc/anacrontab 中所有的工作,忽略所有的延迟时间。
-q 禁止将信息输出到标准错误,常和 -d 选项合用。
#工作名
工作名 /etc/anacrontab中定义的工作名
正常情况下我们不需要手动执行anacron命令,只需要在/etc/anacrontab配置文件中进行对应配置即可,系统会帮我们自动去执行。
[root@localhost disk_lv]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
#放入/etc/cron.{daily,weekly,monthly}目录中的脚本都会在指定时间运行,即使服务器关机也会在开机后在指定时间范围内运行。