更多系统管理技巧可参考:Linux系统管理技巧解析及课后习题解答----工坊学习记录–7.1
知识技能篇
任务1.1 监控系统的状态
任务描述
主要实现的是查看查看系统负载信息和查看系统内存、网卡、进程等信息
任务实施
1.1.1 查看当前系统的负载,示例代码如下:
第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。我们最应该关注的应该是第一行中的
‘load average:’
后面的三个数值。
第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。这个值的意义是,单位时间段内CPU活动进程数。
1.1.2 查看服务器有几个cpu,示例代码如下:
查看物理cpu个数,示例代码如下:
查看每个物理CPU中核数,示例代码如下:
1.1.3 使用 vmstat 监控系统的状态,示例代码如下:
通过 vmstat 就可以知道具体是哪里有压力。vmstat命令打印的结果共分为6部分:
procs, memory, swap, io, system,cpu
1)procs 显示进程相关信息r :表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;b :表示等待资源的进程数,比如等待I/O, 内存等,这列的值如果长时间大于1,则需要关注一下了;
2)memory 内存相关信息swpd :表示切换到交换分区中的内存数量 ;free :当前空闲的内存数量;buff :缓冲大小,(即将写入磁盘的);cache :缓存大小,(从磁盘中读取的);
3)swap 内存交换情况si :由交换区写入到内存的数据量;so :由内存写入到交换区的数据量;
4)io 磁盘使用情况bi :从块设备读取数据的量(读磁盘);bo: 从块设备写入数据的量(写磁盘);
5)system 显示采集间隔内发生的中断次数in :表示在某一时间间隔中观测到的每秒设备中断数;cs :表示每秒产生的上下文切换次数;
6)CPU 显示cpu的使用状态us :显示了用户下所花费 cpu 时间的百分比;sy :显示系统花费cpu时间百分比;id :表示cpu处于空闲状态的时间百分比;wa :表示I/O等待所占用cpu时间百分比;
使用技巧:
下面的代码表示,每隔一秒钟打印一次状态,共打印5次。
1.1.4 top 显示进程所占系统资源,示例代码如下:
这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(loadaverage)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。
使用技巧:
非动态打印系统资源使用情况,示例代码如下:
1.1.5 查看内存使用状况,示例代码如下:
使用技巧:
可以加-m 或者-g选项分别以M或G为单位打印内存使用状况,示例代码如下:
1.1.6 ps 查看系统进程
参数:
- PID :进程的id,若想终止某一个进程,则用 ‘kill 进程的 pid 有时并不能杀掉,则需要加一个-9选项了 kill -9 进程pid
1.1.7 查看网络状况,示例代码如下:
使用技巧:
netstat -an (打印网络连接状况),示例代码如下:
任务1.2 Linux网络相关
任务描述
本任务主要使用Linux网络命令查看网卡信息
知识学习
1.2.1 如果Linux上有多个网卡,而只想重启某一个网卡的话,可以使用这个命令,示例代码如下:
#ifdown eth0;ifup eth0
1.2.2 给一个网卡设定多个IP:
#cd /etc/sysconfig/network-scripts/
#cp ifcfg-ens33 ifcfg-ens33\:1
#vi ifcfg-ens33:1
DEVICE 要改为 “ens33:1”.
改 ip ,重启网卡,之后再查看网卡ip
#systemctl restart network
1.2.3 更改主机名
若想重启后依然生效,示例代码如下:
#hostnamectl set-hostname linux
#bash
1.2.4 设置DNS
在Linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是/etc/resolv.conf。
resolv.conf有它固有的格式,一定要写成 “nameserver IP” 的格式
在Linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加 IP+域名,它的作用是临时解析某个域名,示例代码如下:
1.2.5 Linux的防火墙
SeLinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把seLinux关闭,以免引起不必要的麻烦。关闭seLinux的方法为,使 “SELinux=disabled”, 默认为 enforcing,示例代码如下:
保存该配置文件后,重启机器方可生效,临时关闭seLinux的命令,可以使用setenforce 0.我们可以使用 getenforce 命令获得当前seLinux的状态,示例代码如下:
任务1.3 Linux系统任务计划
任务描述
本任务主要使用crontab工具来定时处理脚本或任务
知识学习
如何定期执行某一个脚本呢?这就要借助Linux的cron功能了。其中常用的参数有:
- -u :指定某个用户,不加-u选项则为当前用户;
- -e :制定计划任务;
- -l :列出计划任务;
- -r :删除计划任务。
演示–创建任务计划
#crontab -e
01 10 05 06 3 echo “ok” > /root/cron.log
每个字段的数字分表表示: 从左到右,依次为:分,时,日,月,周,命令行
而上面的例子的含义是:在6月5日(这一天必须是星期3)的10点01分执行命令 echo "ok" > /root/cron.log
crontab -e 实际上是打开了 “/var/spool/cron/username” (如果是root则打开的是/var/spool/cron/root)这个文件。
使用的是vim编辑器,所以要保存的话则在命令模式下输入:wq即可。但是,你千万不要直接去编辑那个文件,
因为可能会出错,所以一定要使用 crontab -e 来编辑。
查看已经设定的任务计划使用 crontab -l 命令,示例代码如下:
删除计划任务要用 crontab -r,,示例代码如下:
任务1.4 Linux系统数据备份
任务描述
本任务主要使用rsync工具来备份数据
知识学习
Rsync不仅可以远程同步数据,当然还可以本地同步数据,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。
演示–例子
#yum install -y rsync
#touch /root/sync.txt
#rsync -av sync.txt /tmp
上面例子表示把当前目录下的sync.txt同步到/tmp/目录下,也可以更改目标文件的名字, rsync -av sync.txt /tmp/newsync.txt
如果是远程拷贝的话就是这样的形式了: IP:path (如:10.0.2.34:/root/),示例代码如下:
rsync的命令格式
rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST第一个例子即为第一种格式,第二个例子即为第二种格式,但不同的是,并没有加user@host 如果不加默认指的是root. 第三种格式是从远程目录同步数据到本地。第四种以及第五种格式使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同。
rsync常用选项
- -a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a–no-l 等同于-rptgoD
- -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
- -v 打印一些信息出来,比如速率,文件数量等
- -l 保留软链结
- -L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
- -p 保持文件权限
- -o 保持文件属主信息
- -g 保持文件属组信息
- -D 保持设备文件信息
- -t 保持文件时间信息
- --delete 删除那些DST中SRC没有的文件
- --exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
- --progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
- -u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖
任务1.5 Linux系统日记
任务描述
本任务主要使用Linux系统自带的日记系统来判定系统状况
知识学习
dmesg 命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的,示例代码如下:
last命令用来查看登录Linux历史信息,从左至右依次为账户名称、登录终端、登录客户端ip、登录日期及时长。last命令输出的信息实际上是读取了二进制日志文件/var/log/wtmp, 只是这个文件不能直接使用cat, vim, head, tail等工具查看。示例代码如下:
任务1.6 Linux命令xargs与exec用法
任务描述
本任务主要使用Linux中xargs与exec工具结合其他命令来实现业务需求
知识学习
xargs的作用就是把管道符前面的输出作为xargs后面的命令的输入,示例代码如下:
这里可能会有读者问:怎么不echo完直接cat 123.txt不是更直接吗?
首先上面的例子只是表示xargs的命令是可以结合管道符和其它命令进行使用的,例如,查找当前目录创建时间大于10天的文件,然后再删除, 示例代码如下:
#find . -mtime +10 |xargs rm //xargs后面的 rm 也可以加选项,当是目录时,就需要 -r 选项
再例如:查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步,示例代码如下:
xargs -n1 –i{} 类似for循环,-n1意思是一个一个对象的去处理,-i{}把前面的对象使用{}取代,mv {} {}_bak 相当于 mv 1.txt 1.txt_bak。
使用find命令时,经常使用一个选项就是这个-exec了,可以达到和xargs同样的效果。比如,查找当前目录创建时间大于10天的文件并删除,示例代码如下:
#find . -mtime +10 -exec rm -rf {}\;
这个命令中也是把{}作为前面find出来的文件的替代符,后面的 \ 为 ; 的脱意符,不然shell会把分号作为该行命令的结尾。
任务1.7 screen工具
知识学习
有时候,我们也许会有这样的需求,要执行一个命令或者脚本,但是需要几个小时甚至几天。这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险。下面就介绍两种方法来避免这样的问题发生。
- 使用nohup,示例代码如下:
- screen工具的使用
简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。介绍screen的一个简单应用:
1)打开一个会话,直接输入screen命令然后回车,进入screen会话窗口。示例代码如下:
#yum install -y screen
#screen
- screen -ls 查看已经打开的screen会话,示例代码如下:
3)Ctrl +a 再按d退出该screen会话,只是退出,并没有结束。结束的话输入Ctrl +d 或者输入exit
4)退出后还想再次登录某个screen会话,使用sreen -r [screen 编号],这个编号就是上例中那个 48705. 当只有一个screen会话时,后面的编号是可以省略的。当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务。按ctrl +a 再按d退出会话,不影响终端窗口上的任何操作。