【吐血推荐】Linux系统管理图文详解

前言

带你遨游于linux系统管理知识的海洋,沐浴春日里的阳光,循序渐进,看完之后收获满满。本次讲解基于linux(centos6.5)虚拟机做的测试。这篇文章被我修订了无数遍,始终觉得不满意。于是乎老夫掐指一算,是不是篇幅过长,图片过多,用的富文本编辑器,排版,视觉体验都不是很友好。思来想去,还是得分篇来写,重构分成4篇。便于阅读,体验效果会更加。

假如你还没有安装或者没准备一台linux服务器,此时不用慌,不妨参考下我的这篇文章:

linux养成达人之入门实践图文超详细(工欲善其事,必先利其器篇)

来自一位闷骚男善意的提醒:富文本编辑器用的时候木有自动保存功能,此时多希望我能ctrl+s保存一下。一旦在线上写了很长时间,结果一不小心手贱X掉了。那岂不是呜呼哀哉,想抽自己的心都有了。骚话不多说,还是说点有用的。chkconfig命令相信很多小伙伴肯定不会陌生吧。在你使用某个命令时,发现明明是正确的,为啥就是没结果,套你猴子。是不是被自己萌哭了,我经常自嘲大脑缺氧。这时chkconfig命令就起作用了,例如查询nginx服务是否安装:chkconfig --list | grep nginx。有时一个小小的细节,可能是你没能冷静下来思考导致的,当你烦躁时,不妨先静静。

 

正文

分篇目录直通车:

         进程管理

         工作管理

         系统资源查看

         系统定时任务

 

一、进程管理

进程的查看:ps命令和top命令以及pstree命令,这几个命令还是很常用的,需要重点掌握。

首先讲讲ps命令的使用方法,下面给出例子和截图方便理解,最好自己动手试一试,学习嘛,就得理论+实践相结合,达到最佳效果。

ps aux 显示所有进程[一般配合grep使用],下面列出aux内容代表的含义:

  • -a 所有进程
  • -u 进程所属用户
  • -x 没有终端控制的进程

例如:ps aux | grep httpd 查看Apache进程,在这里说明一下,这样使用ps -aux(centos6中会报出一个提示,影响不大)当然也是可行的,不强求记住,linux里面大多数命令后面都接了“-”符号,CentOS7中使用加“-”是不会出现警告的。

ps aux | grep nginx 查看nginx进程

讲完了ps aux命令后,再接着看下命令:ps -le 表示显示所有进程(显示进程优先级),如下所示列出le的含义:

  • -l 以长格式显示进程
  • -e 显示所有进程

PS命令的输出内容以及作用:

内容

作用

USER

该进程是由哪个用户产生的

PID

进程的ID号

%CPU

该进程占用CPU的百分比(占用越高越耗费资源)

%MEM

该进程占用物理内存的百分比(占用越高越耗费资源)

VSZ

该进程占用虚拟内存的大小(单位:KB)

RSS

该进程占用真实内存的大小(单位:KB)

TTY

该进程是在哪个终端运行的。其中tty1-tty7代表本地控制台终端,tty1-tty6本地字符界面终端,tty7图形终端。

pts/0-255

代表虚拟终端。

 

学完了ps aux和ps -le,是不是觉得已经跃跃欲试了,迫不及待的想看看top命令的含义,客观别急,我们还得一步一步来,稳扎稳打才是王道。

top [选项],下面给出-d|-b|-n的含义:

  • -d 秒数:指定top命令每隔几秒刷新,默认3秒。
  • -b:使用批处理模式输出,一般和“-n”选项合用。
  • -n次数:指定top命令执行的次数, 一般和“-b”选项合用。

例如:top -b -n 1 > top.log 定向输出到top.log文件中,可以看到更多的信息

【吐血推荐】Linux系统管理图文详解_第1张图片

 

接着往下看,top命令的交互模式也挺实用的。

top 命令:[在top命令的交互模式可以执行的命令] 

?或h

显示交互模式的帮助

P

以CPU使用率排序,默认为此项。

M

以内存使用率排序

N

以PID排序

q

退出top

 

top命令如下图所示5行,客官请看截图下面的表格,详细的列出了每行命令的含义

【吐血推荐】Linux系统管理图文详解_第2张图片

 

 1.任务队列信息:这里列出重点load average ,表示系统平均负载,方便你判断系统的健康状态。

内容 含义

top - 21:03:58

系统时间

 3:48

系统运行时长

2 users

当前登录用户个数

load average 0.00, 0.00, 0.00

系统在之前1分钟,5分钟,15分钟的平均负载。一般小于1小时,负载小。如果大于1,系统已经超出负荷[重点]

2.进程信息状态:关注重点0 zombie,僵尸进程。

内容 含义

Tasks:  92 total

系统中的进程总数

1 running

正在运行的进程数

91 sleeping

休眠的进程

0 stopped

正在停止的进程

0 zombie

僵尸进程,如果不是0,需要手工检查僵尸进程[重点]

 

3.CPU信息:CPU这里也有一个需要关注的重点99.8%id,空闲CPU百分比,用于判断系统健康状态。

内容 含义

Cpu(s):  0.1%us

用户模式占用CPU百分比

0.1%sy

系统模式占用CPU百分比

0.0%ni

改变过优先级的用户进程占用CPU百分比

99.8%id

空闲CPU百分比[重点]

0.0%wa

等待输入/输出占用CPU百分比

0.0%hi

硬中断请求服务占用CPU百分比

0.0%si

软中断请求占用CPU百分比

0.0%st

虚拟时间百分比

 

4.内存信息:关注重点,空闲物理内存,内存占用越高,你的系统越卡,这时服务器负载压力会增加,就要考虑加内存了,或者其它业务需求,配置多台服务器集群。

内容 含义

Mem:   1918460k total

物理内存总量,单位KB

733684k used

已使用物理内存

1184776k free

空闲物理内存[重点]

62880k buffers

作为缓冲的内存数量

 

5.交换分区(Swap)信息:Swap分区不要觉得它占用了很多空间,就去调小,这样做是不对的,重点关注空闲交换分区大小

内容 含义

Swap:  2064376k total

交换分区(虚拟内存)的总大小

0k used

已使用交互分区大小

2064376k free

空闲交换分区大小[重点]

153956k cached

作为缓存的交互分区大小

 

上面了解了ps aux、ps -le以及top命令的用法,下面就讲讲,进程变为僵尸了,看如何处理,在win中通过任务管理器,linux下通过kill命令去找到进程对应的进程号,去干掉它。

杀死进程[注意:不到万不得已的情况下,不要轻易杀死进程],别整天天杀杀杀,我们不是一个杀手,而是一个系统管理员啊。

  • kill [进程ID]
  • kill -l 查看可用的进程信号

【吐血推荐】Linux系统管理图文详解_第3张图片

 

 想要深入掌握kill命令,客官接着往下看,得了解一些常用的信号代表的意义,列出了部分信号的含义,方便使用:

信号代号

信号名称

说明

1

SIGHUP

让进程立即关闭,重新读取配置文件后重启.

2

SIGINT

程序终止信号,终止前台进程,相当于快捷键ctrl+c.

8

SIGFPE

发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误.

9

SIGKILL

立即结束程序的运行,本信号不能被阻塞、处理或忽略,一般用于强制终止进程.

14

SIGALRM

时钟定时信号,alarm函数使用该信号.

15

SIGTERM

正常结束进程的信号,kill命令默认信号.(假如进程已经发生问题,这个信号无法正常终止进程的,此时会尝试SIGKILL信号).

18

SIGCONT

让暂停的进程恢复执行,不能被阻断.

19

SIGSTOP

可以暂停前台进程,相当于快捷键ctrl+z,不能被阻断.

例如:

  • kill -1 3033 重启进程
  • kill -9 3034 强制杀死进程

killall [选项][信号]后面必须接进程名  

  • 按进程名杀死进程
  • -i:交互式,询问是否要杀死某个进程
  • -I:忽略进程名的大小写

例如:

  • killall -i -9 httpd 确认是否杀死apache进程

【吐血推荐】Linux系统管理图文详解_第4张图片

 

pkill [选项][信号]后面必须接进程名 

  • 按进程名杀死进程
  • -t终端号:按终端号踢出用户

例如:

  • pkill -9 -t pts/1

【吐血推荐】Linux系统管理图文详解_第5张图片

  • 修改进程的优先级
  • 进程优先级简介:linux操作系统是一个多用户、多任务的操作系统,linux同时运行着非常多的进程。
  • CPU在同一个时钟周期内只运行一个指令。进程的优先级决定了每个进程处理的先后顺序。

注意:用户只能修改NI的值,不能直接修改PRI的值

修改NI时的注意事项:[一般不需要修改,了解就行],如下表格所示

PRI[priority]和NI[nice]这两个值都是优先级,数字越小,代表该进程优先级越高。
NI值范围:-20~19
普通用户可调整NI范围:0~19,而且只能调整自己的进程,只能调高,不能调低
例如:NI为0,只能调大于0
root用户才能设置NI的值为负值
nice [优先级] PID
nice不能修改已经存在的进程的NI的优先级


renice [优先级] PID

  • 修改已经存在的进程的NI的优先级
  • renice -5 3167

 

 

二、工作管理

1.简介:在单个登录终端中(登录的shell中)同时管理多个工作的行为。


2.注意事项如下表格:

当前登录终端只能管理当前终端的工作,不能管理其它登录终端的工作。
放入后台命令必须可持续运行一段时间,便于捕捉操作这个命令。
放入后台命令不能和前台用户有交互或许要前台输入,否则放入后台只能暂停,不能执行。

3.把进程放入后台:

  • tar -zcf [文件名] /usr/local/tools/ &
  • 命令放入后台,并且在后台执行

top命令执行

  • 使用ctrl+z命令快捷键,放入后台暂停,使用fg命令恢复到前台

4.jobs命令使用

例如:

  • jobs [-l] 
  • -l:显示工作的PID
  • 注意:“+”最后一个放入后台的工作,“-”倒数第二个放入后台的工作。

5.将暂停的工作恢复到前台执行

  • %工作号:%号可以省略,注意工作号和PID的区别
  • 工作号是指下图箭头所示的1,2数字:

 

fg %工作号
参数:

  • fg 1 将top命令恢复到前台

6.将暂停的工作恢复到后台执行[注意:top和vi命令是不可以的]

  • bg %工作号

注意:后台恢复执行的命令不能和前台有交互,否则不能恢复到后台执行。

 

7.后台命令脱离终端
后台命令脱离登录终端执行的方法:
 

1.把需要后台执行的命令加入/etc/rc.local文件中[推荐使用]
2.使用系统定时任务,让系统在指定时间执行某个后台命令
3.使用nohup命令[推荐使用]

 

  • 例如[此时是想到自己之前看RocketMQ官方文档时还不理解nohup这个命令]:
  • RocketMQ启动Broker服务时,先启动mqnamesrv服务放入后台:nohup sh mqnamesrv &
  • 当然也可以自己写个脚本做个测试

开启两个远程终端时可以看到for.sh脚本在运行如下图:

【吐血推荐】Linux系统管理图文详解_第6张图片

 

关闭一个远程终端时也可以看到for.sh脚本在运行如下图:

【吐血推荐】Linux系统管理图文详解_第7张图片

 

 


三、系统资源查看

首先看下buff[缓冲]和cache[缓存]区别:

buff[缓冲] 加速数据写入硬盘
cache[缓存] 加速数据从硬盘读取

vmstat [刷新延时,刷新次数][重点] 查看系统的健康状态
例如下图:

【吐血推荐】Linux系统管理图文详解_第8张图片
 

 

每个字段的含义如下表格:

process:进程信息字段 menory:内存信息字段 system:系统信息字段 cpu:cpu信息字段
-r:等待运行的进程数,数量越大,系统越繁忙 -swpd:虚拟内存使用情况(单位:KB) -in:每秒中断的进程次数 -us:非内核进程消耗cpu运算时间百分比
-b:不可被唤醒的进程数量,数量越大,系统越繁忙 -free:空余内存容量(单位:KB) -cs:每秒进行的时间切换次数。 sy:内核进程消耗cpu运算时间百分比
  -buff:缓冲内存容量(单位:KB) -in和-cs这两数越大,系统与连接设备通信非常繁忙。 -id:空闲cpu百分比[重点]
  -cache:缓存内存容量(单位:KB)   -st:被虚拟机所盗用的cpu百分比

 

开机时内核检测信息:

  • dmesg命令

例如:

查看CPU信息:dmesg | grep CPU

【吐血推荐】Linux系统管理图文详解_第9张图片

 

free命令查看内存使用状态

  • free[-b|-k|-m|-g]

【吐血推荐】Linux系统管理图文详解_第10张图片

 

选项如下表格所示:

选项 含义
-b: 以字节为单位显示
-k: 以KB为单位显示,默认为此项
-m: 以MB为单位显示
-g: 以GB为单位显示

查看cpu信息如下图所示:

  • cat /proc/cpuinfo

【吐血推荐】Linux系统管理图文详解_第11张图片

 

uptime命令
查看系统当前时间,运行时间,登录用户以及负载入下图所示:

 


uanme [选项]

例如:uname -a

 

选项如下表格:

选项 含义
a: 查看系统所有相关信息
-r: 查看系统内核版本
-s: 查看内核名称

 

lsb_release命令如下图所示:

  • lsb_release -a 查看系统版本发行版

 

列出进程打开或使用的文件信息

  • losf[选项] 
  • 有些命令就不一一截图了会显得篇幅太长

选项:

命令 内容
-c字符串 只列出以字符串开头的进程打开的文件
-u用户名 只列出某个用户的进程打开的文件
-p pid 列出某个pid进程打开的文件

如下表格所示:

命令 作用
lsof | more  查询系统中所有进程调用的文件
lsof /sbin/init  查询某个文件被哪个进程调用
lsof -c httpd 查看httpd进程调用了哪些文件
lsof -u root  按用户名查询某用户进程调用的文件



四、系统定时任务

1.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命令

 

查询是否安装: chkconfig --list | grep atd

 

查看atd状态:service atd status

at [选项] 时间
选项:

  • -m:at工作完成后,无论是否命令有输出,都用email通知执行at命令的用户
  • -c工作号:显示at工作的实际内容

例如:at + now 1 minutes

【吐血推荐】Linux系统管理图文详解_第12张图片

 

1分钟后执行hello.sh脚本命令:

【吐血推荐】Linux系统管理图文详解_第13张图片

 

后面时间的几种写法举例:

写法 举例
HH:MM 例如:04:30
HH:MM  YYYY-MM-DD 例如:4:30 2018-08-08
HH:MM[AM|PM|] [mouth] [date] 例如:4:30 June 01
HH:MM[AM|PM|] [minutes|hours|days|week] 例如:now + 5minutes 5分钟执行

 

  • atq:查询当前服务器上的at工作,如下图

【吐血推荐】Linux系统管理图文详解_第14张图片

 

  • atm[工作号]:删除指定的at任务

 

2.cron命令 循环定时任务
crond服务管理与访问控制

  • 查询是否安装 :chkconfig --list | grep cron服务
  • 查看crond状态:service crond status

访问控制:[root用户除外,毕竟是超级用户]

  • 当系统中有/etc/cron.allow文件,只有写入此文件的用户可以使用crontab命令,没有写入的用户则不能使用crontab命令。
  • 同样如果有此文件,/etc/cron.deny文件被忽略,/etc/cron.allow文件优先级更高。
  • 当系统中只有/etc/cron.deny文件时,写入此文件的用户不能使用crontab命令,没有写入的用户可以使用crontab命令。

 

crontab[选项] 循环定时任务 

[手工执行定时任务]
选项:

  • crontab -r 删除当前用户所有的crontab任务
  • crontab -l 查询crontab任务
  • crontab -e 编辑crontab定时任务

 符号含义如下表所示:

符号含义 例子
“ * ”:代表任意时间 例如:第一个“ * ” ,每分钟执行一次命令
“,”:代表不连续的时间 例如:“0 9,12,15 * * *命令”,每天的9:00,12:00,15:00都执行一次命令
“ - ":代表连续的时间范围 例如:“0 8 * * 1-6命令”,每周一到周六的上午8点执行命令
“ */n ”:代表每隔多久执行一次 例如:“*/7 * * * *命令” ,每隔7分钟执行一遍命令 

 

* * * * * *执行的任务 ,"*"的含义如下表所示:

内容 含义 范围
第一个“*”号 一小时当中的第几分钟 0-59
第二个“*”号 一天当中的第几小时 0-23
第三个“*”号   一个月当中的第几天 1-31
第四个“*”号 一年当中的第几个月 1-12
第五个“*”号 一周当中的星期几 0-7(0和7都代表星期日)


 
crontab注意事项:

1.六个选项都不能为空,必须填写。不确定则用“*”代替。
2.最小时效为分钟,最大时效是月。
3.定义时,最好不要把日期和星期放在一条定时任务中执行,容易混淆。
4.定时任务中,不管事直接写命令,还是在脚本中写命令,最好都是绝对路径。 
 

 

系统的crontab设置:

执行系统定时任务的方法

  •  -手工执行定时任务
  •  -通过执行命令:crontab -e 配置

系统定时任务

  • 查看cron文件 ls /etc/cron.*

【吐血推荐】Linux系统管理图文详解_第15张图片

 

 

进入到cron.daily目录: 存放脚本 

通过 cd/var/log 可以看到一些旧的日志文件:

【吐血推荐】Linux系统管理图文详解_第16张图片

 

  •  -第一种把需要定时执行的脚本复制到(/etc/cron.[daily|weekly|monthly]目录中的任意一个)[推荐此方法]
  •  -第二种修改/etc/crontab配置文件


3.anacron设置
anacron作用:用来保证在系统关机的时候错过的定时任务,可以在系统开机之后执行。
anacron检测周期:

1.anacron使用一天,七天,一个月作为检测周期
2.在系统的/var/spool/anacron/目录中存在cron.[daily|weekly|monthly]文件,用于记录上次执行cron的时间
3.和当前时间作比较,如果两个时间差超过了anacron的指定时间差,证明cron任务被执行。

 

Centos 6.x的区别:

1.在老的centos版本中, /etc/cron.[daily|weekly|monthly]这些目录会被cron调用,也会被anacron调用,容易重复执行
2.只会被anacron调用,避免重复执行
3.anacron不再是服务,而是系统命令

-anacron配置文件含义
vi /etc/anacrontab 如下图:

【吐血推荐】Linux系统管理图文详解_第17张图片

  • RANDOM_DELAY=45                       最大随机延迟
  • START_HOURS_RANGE=3-22        执行时间范围:3-22点                                                                                               
天数 强制延迟(分)  工作名称  实际执行命令
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

 

以cron.daily工作来说明执行过程:

1.首先读取/var/spool/anacron/cron.daily中的上一次anacron执行的时间
2.和当前时间作比较,如果两个时间的差值超过一天,就执行cron.daily工作
3.执行这个工作只能在03:00-22:00之间
4.执行工作强制延迟时间为5分钟,再随机延迟0-45分钟
5.使用nice命令指定默认优先级,使用run-parts脚本执行/etc/daily目录中所有可执行文件

 

好了,到此为止就是此篇文章的全部内容了,能看到这的都是帅哥靓妹啊!!!祝在座的各位客官们鼠年大吉,“鼠”不尽的快乐!“鼠”不尽的收获!“鼠”不尽的钞票!“鼠”不尽的笑容!“鼠”不尽的幸福!“鼠”不尽的甜蜜!“鼠”不尽的激情!“鼠”不尽的活力!“鼠”不尽的健康!“鼠”不尽的帅哥!“鼠”不尽的美女!

 

尾声

忽然想起2年前就开始总结这篇笔记了,前几天阅读当时的笔记,写的太粗糙了,看完之后,下决心整理一篇详细一点的文章,如今在原来的基础上加以雕琢,完成自我超越。总结完后自己也受益匪浅,读者阅读到了,也有些许收获吧,有错误的地方也希望各位客官帮忙指正,最后的最后,我们一起学习,一起进步,每天都有好心情。最后还得感谢某编程学习网站的 Tony 老师,带我入门了 linux。Tony 老师幽默的教学风格,估计在座的部分客官也很熟悉,老司机带带我,请问这是通往幼儿园的车吗,我要下车,啊呀一不小心扯远了...

你可能感兴趣的:(Linux)