Linux系统管理
Posted Suraer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统管理相关的知识,希望对你有一定的参考价值。
进程管理
查看进程
查看进程:
ps aux
ps -le
查看进程树:
pstree
pstree -p // 查看每个进程的id号,会展开折叠进程
pstree -u // 查看进程的用户
top命令:
- 选项
- -d 秒数:指定top命令每隔几秒更新。默认是3秒
- -b: 使用批处理模式输出。一般和"-n"选项合用
-n 次数:指定top命令执行的次数。一般和"-b"选项合用
top -b -n 1 > top.log // 刷新一次i进程信息重定向到top.log日志文件中
- 在top命令的交互模式当中可以执行的命令:
- ?或h: x显示交互模式的帮助
- P: 以CPU使用率排序,默认就是此项
- M: 以内存的使用率排序
- N: 以PID排序
- q: 退出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分钟的平均负载。一般认为小于cpu核数时负载较小,否则系统超出负荷。 |
第二行为进程信息:
内容 | 说明 |
---|---|
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 |
572683k used | 已经使用的物理内存数量 |
32343k free | 空闲的物理内存数量 |
64443k buffers | 作为缓冲的内存数量 |
第五行为交换分区(swap)信息:
内容 | 说明 |
---|---|
Swap: 432432k total | 交换分区(虚拟内存)的总大小 |
0k used | 已经使用的交互分区的大小 |
544562k free | 空闲交换分区的大小 |
402354k cached | 作为缓存的交互分区的大小 |
杀死进程
查看信号:
kill -l
信号代号 | 信号名称 | 说明 |
---|---|---|
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快捷键。本信号不能被阻断。 |
例如,平滑重启:
kill -HUP 1523
kill -1 1523
kill加进程号,可以杀死单个进程,killall可以杀死一组进程:
killall [信号] 进程名
参数:
- -i 交互式,会提醒是否杀死每个进程
- -I 忽略大小写
可以用pkill命令踢出登录用户:
// 查看当前登录用户
w
// 根据tty号踢出用户
pkill -9 -t [tty]
pkill -9 -t pts/1
修改进程优先级
先使用ps查看进程,可以看到PRI和NI两个属性。
进程的优先级由PRI和NI共同作用,但是PRI值不可修改,可以修改NI的值,实际生效的是PRI值。值越小,优先级越高。
nice命令可以在创建新进程时修改NI值,但不能修改已存在进程的NI值。
nice -n -5 service httpd start
使用renice可以修改已存在进程的优先级,但是每次只能修改一个进程:
renice -10 [PID]
修改NI值注意事项:
- NI的值的范围是-20到19;
- 普通用户调整NI值的范围是0到19,而且只能调整自己的进程;
- 普通用户只能调高NI值,而不能降低,如原本NI值为0,则只能调整为大于0;
- root用户才能设定进程NI值为负值,而且可以调整任何用户的进程。
- PRI(最终值) = PRI(原始值) + NI
- 用户只能修改NI的值,不能直接修改PRI
工作管理
简介
注意事项:
- 当前的登录终端,只能管理当前终端的工作,不能管理其它登录终端的工作
- 放入后台的命令必须可以持续运行一段时间,这样我们才能扑捉和操作这个工作(如ls无意义)
- 放入后台执行的命令不恩那个和前台用户有交互或需要前台输入(top, vi), 否则放入后台只能暂停,而不能执行
方法
有两种方法把进程放入后台:
+&
: 放入后台执行ctrl + z
: 放在后台暂停
使用jobs
命令可以查看后台工作,加-l
参数显示工作的PID。
恢复进程:
fg %工作号
: 恢复到前台,工作号如[1],不是PID,如fg %1
bf %工作号
: 恢复到后台
两个命令如果不加%工作号
表示恢复+号的进程。
后台命令脱离登录终端
- 第一种方法是把需要后台执行的命令加入
/etc/rc.local
文件。该文件中的命令会在系统启动时执行,并且不依赖终端。 - 第二种方法是使用系统定时任务,让系统在指定的时间执行某个后台命令。(不推荐)
- 第三种方法是使用nohup命令。如
nohup /root/run.sh &
查看系统资源
vmstat(重要)
监听系统资源:
vmstat [刷新延时 刷新次数]
vmstat 1 3 //每1秒刷新一次,总共刷新3秒
得到输入如下:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 7846652 136672 27584 655328 5 8 21 36 3 7 3 1 95 0 0
0 0 7846652 128356 27600 663732 4 0 4 264 1127 3026 3 1 96 0 0
0 0 7846652 128356 27600 663740 8 0 8 0 1162 3053 2 1 97 0 0
- procs: 进程信息字段
- r: 等待运行的进程数,数量越大,系统越繁忙
- b: 不可被唤醒的进程数量,数量越大,系统越繁忙
- memory: 内存信息字段
- swap: 虚拟内存的使用情况,单位KB
- free: 空闲的内存容量,单位KB
- buff: 缓冲的内存容量,单位KB
- cache: 缓存的内存容量,单位KB
- swap: 交换分区的信息字段
- si: 从磁盘交换到内存中数据的数量,单位KB
- so: 从内存中交换到磁盘中数据的数量,单位KB。此两个数越大,证明数据需要经常在磁盘和内存之间交换,系统性能越差。
- io: 磁盘读写信息字段
- bi: 从块设备读入数据的总量,单位是块
- bo: 写到块设备的数据的总量,单位是块。此两个数越大,代表系统的I/O越繁忙
- system: 系统信息字段
- in: 每秒被中断的进程次数
- cs: 每秒钟进行的事件切换次数。此两个数越大,代表系统与接口设备的通信非常繁忙。
- CPU: CPU信息字段
- us: 非内核进程消耗CPU运算时间百分比
- sy: 内核进程消耗CPU运算时间的百分比
- id: 空闲CPU的百分比
- wa: 等待I/O消耗的CPU百分比
- st: 被虚拟机所盗用的CPU占比
dmesg(重要)
查看内核信息:
dmesg
dmesg | grep CPU
free(重要)
查看内存使用状态:
free [-b|-k|-m|-g]
- -b: 以字节为单位显示
- -k: 以KB为单位显示,默认就是以KB为单位显示
- -m: 以MB为单位显示
- -g: 以GB为单位显示
CPUinfo
查看CPU信息:
cat /proc/cpuinfo
proc
目录下存放内存信息。
uptime
查看登录信息,相当于top命令第一行。
uname
查看系统与内核相关的信息。
参数:
- -a: 查看系统所有相关信息
- -r: 查看内核版本
- -s: 查看内核名称
file
查看操作系统位数:
file /bin/ls
lsb_release
查看系统发行版:
lsb_release -a
lsof
列出进程调用或打开的文件的信息。
参数:
- -c 字符串: 只列出以字符串开头的进程打开的文件
- -u 用户名: 只列出某个用户的进程打开的文件
- -p pid: 列出某个PID进程打开的文件
使用示例:
lsof | more # 查询系统中所有进程调用的文件
lsof /sbin/init # 查询某个文件被哪个进程调用
lsof -c httpd # 查看httpd进程调用了哪些文件
lsof -u root # 按照用户名,查询某用户的进程调用的文件名
系统定时任务
at一次性定时任务
查看at服务:
chkconfig --list | grep atd // at服务是否安装
service atd state // at服务是否启动
service atd start // 启动at服务
at的访问访问控制:
- 如果系统中有
/etc/at.allow
文件,那么只有写入/etc/at.allow
文件(白名单)中的用户可以使用at命令(/etc/at.deny
文件会忽略) - 如果系统中没有
/etc/at.allow
文件,只有/etc/at.deny
文件,那么写入/etc/at.deny
文件(黑名单)中的用户不能使用at命令。对root不起作用。 - 如果系统中这两个文件都不存在,那么只有root用户可以使用at命令。所以务必要有个at.deny文件,即使是空的。
at命令:
- at [选项] 时间
- 选项:
- -m: 当at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
- -c 工作号:显示该at工作的实际内容
- 时间:
- HH:MM 例如: 02:30
- HH:MM YYYY-MM-DD 例如02:30 2013-07-25
- HH:MM[am|pm] [month][date] 例如02:30 July 25
- HH:MM[am|pm]+[minutes|hours|days|weeks] 例如now + 5 minutes
示例:
at now + 2 minutes // 只告诉时间会在后面提示输入命令
at> /root/hello.sh
at 02:00 2013-07-26
查看定时任务:
atq // 查看定时任务
at -c 1 // 查看任务详情
删除任务:
at rm [工作号]
crontab循环定时任务
访问控制:
- 当系统中有
/etc/cron.allow
文件时,只有写入此文件的用户可以使用crontab
命令,没有写入的用户不能使用crontab
命令。同样如果有此文件,/etc/cron.deny
文件会被忽略,/etc/cron.allow
文件的优先级更高。 - 当系统中只有
/et/cron.deny
文件时,则写入此文件的用户不能使用crontab
命令,没有写入文件的用户可以使用crontab命令。
crontab [选项]
选项:
- -e: 编辑crontab定时任务,格式: * * * * * [命令]
- -l: 查询crontab任务
- -r: 删除当前用户所有的crontab任务
注意事项:
crontab
是绑定用户身份的,不能执行与身份不符的命令- 六个选项都不能为空,必须填写。如果不确定使用"*"代表任意时间。
crontab
定时任务,最小有效时间是分钟,最大时间范围是月。像2018年某时执行,3点30分30秒这样的时间都不能识别。- 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为他们都是以天作为单位,两者所在的天都生效,非常容易让管理员混乱。
- 在定时任务中不管是直接写命令还是在脚本中写命令,最好都是用绝对路径。
系统定时任务
执行系统定时任务有两种方法:
- 第一种是把需要定时执行的脚本复制到
/etc/cron.{daily,weekly,monthly}
目录中的任意一个 - 第二种是修改
/etc/crontab
配置文件,命令格式* * * * * user command
anacron配置
anacron的作用是在系统恢复后,执行故障中未执行的定时任务。
anacron检测周期:
- anacron会在一天、七天、一个月作为检测周期
- 在系统
/var/spool/anacron/
目录中存在cron.{daily,weekly,monthly}
文件,用于记录上次执行cron的时间 - 和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差值,证明有crontab任务被执行
CentOS 6.x的区别:
- 在老的CentOS版本中,
/etc/cron.{daily,weekly,monthly}
这些目录即会被cron调用,也会被anacron调用,容易重复执行 - 在CentOS 6.x中则只会被anacron调用,避免了重复执行
- 在CentOS 6.x中,anacron不再是服务,而是系统命令
anacron配置文件:
vi /etc/anacrontab
- RANDOM_DELAY=45: 最大随机延迟
- START_HOURS_RANGE=3-22: anacron的执行时间范围是3:00-22:00
- 1 5 cron.daily run-parts --report /etc/cron.daily
- 7 10 cron.weekly run-parts --report /etc/cron.weekly
- @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
- 天数 强制延迟(分) 工作名称 实际执行的命令
cron.daily工作来说明执行过程:
- 首先读取
/var/spool/anacron/cron.daily
中的上一次anacron执行的时间 - 和当前时间比较,如果两个时间的差值超过1天,就执行cron.daily工作
- 执行这个工作只能在03:00-22:00之间
- 执行工作时强制延迟时间为5分钟,再随机延迟0-45分钟时间
- 使用nice命令指定默认优先级,使用
run-parts
脚本执行/etc/cron.daily
目录中的所有可执行文件。
以上是关于Linux系统管理的主要内容,如果未能解决你的问题,请参考以下文章
LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段