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文件系统4--打开文件

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程(代码片段

gitlab 可以进行版本和权限控制,bug管理吗?供部门内部使用,而且是Linux和Windows平台都能使用

使用 Git 来管理 Xcode 中的代码片段

数据库系统原理 片段翻译

massCode 一款优秀的开源代码片段管理器