AmazingCounters.com

linux系统管理

监控系统的状态

1. w 查看当前系统的负载

相信所有的linux管理员最常用的命令就是这个’w’ 了,该命令显示的信息还是蛮丰富的。第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,笔者认为我们最应该关注的应该是第一行中的’load average:’后面的三个数值。

第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。这个值的意义是,单位时间段内CPU活动进程数。当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过你服务器的cpu数量就没有关系,如果你的服务器cpu数量为4,那么这个值若小于4,就说明你的服务器没有压力,否则就要引起关注了

就是用这个命令了。另外/proc/cpuinfo’这个文件记录了cpu的详细信息。

2. vmstat 监控系统的状态

上面讲的w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。通过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时间百分比;

st :表示被偷走的cpu所占百分比(一般都为0,不用关注);

以上所介绍的各个参数中,笔者经常会关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是我要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

笔者用vmstat时,经常用这样的形式,’vmstat 1 10’ 表示每隔1秒钟打印一次系统状态,连续打印10次。当然你也可以 ‘vmstat 1 ‘ 表示每隔1秒钟打印一次系统状态,一直打印,除非你按ctrl + c强制结束。

3. top 显示进程所占系统资源

这个命令用于动态监控进程所占系统资源,默认每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。其实上面这些内容可以通过其他命令来查看,所以用top重点查看的还是下面的进程使用系统资源详细状况。这部分东西反映的东西还是比较多的,不过需要你关注的也就是几项:%CPU, %MEM, COMMAND 这些项目所代表的意义,不用笔者介绍相信你也能看懂吧。

另外top -d#,表示每#s刷新一次,默认为3。top显示里支持l(详细列出),M(按内存排序),P(按cpu排序),t,1,a等诸多选项,有兴趣可以试下!

htop则是一个更加强大美观的进程查看工具。

4. sar 监控系统状态

sar 命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果你系统没有安装这个命令,请使用”yum install -y sysstat”命令安装。初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)。它的数据库文件在” /var/log/sa/”目录下,默认保存9天。因为这个命令太过复杂,所以笔者只介绍几个。

1)查看网卡流量 ‘sar -n DEV ‘

IFACE这列表示设备名称,rxpck/s 表示每秒进入收取的包的数量,txpck/s 表示每秒发送出去的包的数量,rxbyt/s 表示每秒收取的数据量(单位Byte),txbyt/s表示每秒发送的数据量。后面几列不需要关注。如果有一天你所管理的服务器丢包非常严重,那么你就应该看一看这个网卡流量是否异常了,如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被攻击了,正常的服务器网卡流量不会高于这么多,除非是你自己在拷贝数据。上面的命令是查看网卡流量历史的,如何时时查看网卡流量呢?

外也可以查看某一天的网卡流量历史,使用-f选项,后面跟文件名,如果你的系统格式Redhat或者CentOS那么sar的库文件一定是在/var/log/sa/目录下的。

2)查看历史负载 ‘sar -q’

这个命令有助于我们查看服务器在过去的某个时间的负载状况。

关于sar的介绍笔者不愿写太多,毕竟介绍太多会给你带来更多的压力,其实笔者介绍这个命令的目的只是让你学会查看网卡流量(这是非常有用的)。如果你很感兴趣那就man一下吧,它的用法太多了。

5. free查看内存使用状况

只要你敲一个free然后回车就可以当前系统的总内存大小以及使用内存的情况。系统初始化时,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不用,那这部分内存就空闲。另外你还可以加-m 或者-g选项分别以M或G为单位打印内存使用状况,-h则以人性化单位更直观展示。

6. ps 查看系统进程

作为系统管理员,一定要知道你所管理的系统都有那些进程在运行,在windows下只要打开任务管理器即可查看。在linux下呢?其实在上面介绍的top命令就可以,但是不够专业,当然还有专门显示系统进程的命令。

对了,就是这个’ps aux’。笔者也经常看到有的人喜欢用’ps -elf’ 大同小异,是unix的一种显示风格而已,显示的信息基本上是一样的。 ps命令还有更多的用法,笔者不再做介绍,因为你只要会用这个命令就足够了,请man一下。下面介绍上图上出现的几个参数的意义。

PID :进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用 ‘kill 进程的pid’,有时并不能杀掉,则需要加一个-9选项了’kill -9 进程pid’

STAT :表示进程的状态,进程状态分为以下几种(不要求记住,但要了解)

D  不能中断的进程(通常为IO)

R  正在运行中的进程

S  已经中断的进程,通常情况下,系统中大部分进程都是这个状态

T  已经停止或者暂停的进程,如果我们正在运行一个命令,比如说sleep 10,如果我们按一下ctrl -z 让他暂停,那么我们用ps查看就会显示T这个状态

W 这个好像是说,从内核2.6xx 以后,表示为没有足够的内存页分配

X  已经死掉的进程(这个好像从来不会出现)

Z  僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。

<  高优先级进程

N  低优先级进程

L   在内存中被锁了内存分页

s   主进程

l   多线程进程

+  代表在前台运行的进程

这个ps命令是笔者在工作中用的非常多的命令之一,所以请记住它吧。

7. netstat 查看网络状况

netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。笔者最常用的关于netstat的命令就是这个netstat -lnp (打印当前系统启动哪些端口)以及netstat -an (打印网络连接状况)这两个命令非常有用,请一定要记住。

如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用netstat -an |grep 80开查看当前连接web服务的有哪些IP了。

8. 抓包工具tcpdump

有时候,也许你会有这样的需求,想看一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。

如果你没有tcpdump 这个命令,需要用’yum install -y tcpdump ’命令去安装一下。上图中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,如果不懂也没有关系,毕竟你不是专门搞网络的,而这里需要你关注的只是第三列以及第四列。-i 选项后面跟设备名称,如果你想抓ens33网卡的包,后面则要跟ens33.-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

【linux网络相关

1. ifconfig 查看网卡IP

ifconfig类似与windows的ipconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)

当然ifconfig后面可以跟设备名,只打印指定设备的IP信息。

在windows下设置IP非常简单,然而在命令窗口下如何设置?这就需要去修改配置文件/etc/sysconfig/network-scripts/ifcfg-ens33了,如果是ens37那么配置文件是/etc/sysconfig/network-scripts/ifcfg-ens37.

如果想修改IP的话,则只需要修改IPADDR , NETMASK(或PREFIX)以及GATEWAY即可。如果你的linux是通过dhcp服务器自动获得的IP,那么配置文件肯定和上图中的不一样,BOOTPROTO那里会是’dhcp’,如果你要配置成静态IP的话,这里就需要写成’none(或static)’。关于如何设置IP以及子网掩码的这些知识属于网络相关的基础知识了,如果你对这方面比较陌生的话,建议你去看看网络相关的资料。当修改完IP后需要重启网络服务新IP才能生效,重启命令为’ service network restart’

2.单个网卡设定多个IP

把ifcfg-ens33复制成ifcfg-ens33:0 然后编辑ifcfg-ens33:0修改DEVICE以及IPADDR保存后重启网卡。

再次查看ens3上就有两个IP了。这里你要注意一下,文件名(ifcft-ens33:0)写成什么都无所谓,但是文件内的DEVICE=ens33:0一定要按照这样的格式写,否则你启动不起来网卡。

3. 查看网卡连接状态

4. 更改主机名

当装完系统后,默认主机名为localhost,使用hostname就可以知道你的linux的主机名是什么。

同样使用hostname可以更改你的主机名。

下次登录时就会把命令提示符中的’localhost’更改成’Aming’。不过这样修改只是保存在内存中,下次重启还会变成未改之前的主机名,所以需要你还要去更改相关的配置文件’/etc/sysconfig/network’。

把HOSTNAME=localhost.localdomain 修改成你想要的主机名,这样再重启就会读取这个配置文件中的HOSTNAME.

最后最好把/etc/hosts文件中的host也改一下,这样避免服务器段网络链接错误

5. 设置DNS

DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。关于dns的概念,如果你很陌生的话,那就去网上查一下吧。在linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是/etc/resolv.conf

resolv.conf有它固有的格式,一定要写成’nameserver IP’的格式,上面那行以’;’为开头的行是一行注释,没有实际意义,建议写两个或多个namserver ,默认会用第一个namserver去解析域名,当第一个解析不到时会使用第二个。在linux下面有一个特殊的文件/etc/hosts也能解析域名,不过是需要我们手动在里面添加IP+域名这些内容,它的作用是临时解析某个域名,非常有用。

它的格式如上图,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:

1)一个IP后面可以跟多个域名,可以是几十个甚至上百个;

2)每行只能有一个IP,也就是说一个域名不能对应多个IP;

3)如果有多行中出现相同的域名(前面IP不一样),会按最前面出现的记录来解析。

linux的防火墙

1. selinux

Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。关闭selinux的方法为:

把’SELINUX=enforcing’改成’SELINUX=permissive’,然后重启机器。临时关闭selinux的命令为

getenforce命令可以得到selinux的状态,其中有两种(Enforcing|Permissive),前者表示开放,后者表示关闭,但是会发出警告。setenforce用来设置selinux的状态,后面跟0则设置成Permissive后面跟1设置成Enforcing。关闭selinux的命令为setenforce 0,但是这只是临时关闭,重启后恢复,想要永久生效,请更改配置文件/etc/selinux/config。

2. iptables

Iptables是linux上特有的防火墙机制,其功能非常强大,然而笔者在日常的管理工作中仅仅用到了一两个应用,这并不代表iptables不重要。作为一个网络管理员,iptables是必要要熟练掌握的。但是作为系统管理员,我们也应该会最基本的iptables操作,认识iptables的基本规则。

1iptalbes的三个表

filter :这个表主要用于过滤包的,是系统预设的表,这个表也是笔者用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。

nat :主要用处是网络地址转换,也有三个链。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。该表笔者用的不多,但有时候会用到。

mangle :这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。

2iptables 基本语法

A. 查看规则以及清除规则

如上图,-t 后面跟表名,-nvL 即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t ,则打印filter表的相关信息。

关于清除规则的命令中,笔者用的最多就是

不加-t默认是针对表filter来操作的,-F 表示把所有规则全部删除;-Z表示把包以及流量计数器置零(这个笔者认为很有用)。

 

linux系统的任务计划

这部分内容太重要了,其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。

关于cron任务计划功能的操作都是通过crontab这个命令来完成的。其中常用的选项有:

-u :指定某个用户,不加-u选项则为当前用户;

-e :制定计划任务;

-l :列出计划任务;

-r :删除计划任务。

Cron的格式是这样的,每一行代表一个任务计划,总共分成两部分,前面部分为时间,后面部分要执行的命令。后面的命令不用多讲,至于前面的时间是有讲究的,这个时间共分为5段,用空格隔开(可以是多个空格),第一段表示分钟(0-59),第二段表示小时(0-23),第三段表示日(1-31),第四段表示月(1-12),第五段表示周(0-7,0或者7都可以表示为周日)。从左至右依次是:分,时,日,月,周(一定要牢记)!

crontab -e 实际上是打开了/var/spool/cron/username (如果是root则打开的是/var/spool/cron/root)这个文件。使用的是vim编辑器,所以要保存的话则在命令模式下输入:wq即可。但是,你千万不要直接去编辑那个文件,因为可能会出错,所以一定要使用crontab -e来编辑。查看已经设定的任务计划使用crontab -l

删除计划任务要用crontab -r

下面笔者给你出一些练习题,帮助你熟悉这个cron的应用。

1. 每天凌晨1点20分清除/var/log/slow.log这个文件;

2. 每周日3点执行’/bin/sh /usr/local/sbin/backup.sh’;

3. 每月14号4点10分执行’/bin/sh /usr/local/sbin/backup_month.sh’;

4. 每隔8小时执行’ntpdate time.windows.com’;

5. 每天的1点,12点,18点执行’/bin/sh /usr/local/sbin/test.sh’;

6. 每天的9点到18点执行’/bin/sh /usr/local/sbin/test2.sh’;

答案:

1. 20 1 * * * echo “”>/var/log/slow.log

2. 0 30 * * 0 /bin/sh /usr/local/sbin/backup.sh

3. 10 04 14 * * /bin/sh /usr/local/sbin/backup_month.sh

4. 0 */8 * * * ntpdate time.windows.com

5. 0 1,12,18 * * /bin/sh /usr/local/sbin/test.sh

6. 0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh

Cron的这部分内容并不难,你只要会了这6道练习题,你就算掌握它了。这里要简单说一下,每隔8小时,就是用全部小时(0-23)去除以8,你仔细想一下结果,其实算出来应该是0,8,16三个数。当遇到多个数(分钟、小时、月、周)例如第5题,则需要用逗号隔开。而时间段是可以用’-‘的方式表示的。等设置好了所有的计划任务后需要查看一下crond服务是否启动,如果没有启动,需要启动它。

如何启动稍后会做介绍。除了用户自定义的计划任务外,其实系统本身也有计划任务的。

系统会安装这个配置文件中的计划去执行内定的任务。

 

screen工具介绍

有时候,也许你会有这样的需求,需要执行一个命令或者脚本,但是需要几个小时甚至几天。这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险。笔者下面就介绍两种方法来避免这样的问题发生。

1. 使用nohup

直接加一个’&’虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上’nohup’就没有问题了。nohup的作用就是不挂断地运行命令。

2. screen工具的使用

简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。下面笔者介绍screen的一个简单应用。

1) 打开一个会话,直接输入screen命令然后回车,进入screen会话窗口。如果你没有screen命令,请用’yum install -y screen’安装。

 2)screen -ls 查看已经打开的screen会话

3)Ctrl +a 再按d退出该screen会话,只是退出,并没有结束。结束的话输入Ctrl +d 或者输入exit

4)退出后还想再次登录某个screen会话,使用screen -r [screen 编号],这个编号就是上图中那个2082. 当只有一个screen会话时,后面的编号是可以省略的。

当你有某个需要长时间运行的命令或者脚本时就打开一个screen会话,然后运行该任务。按ctrl +a 再按d退出会话,不影响终端窗口上的任何操作。

 

linux下同步时间服务器

时间的准确性在服务器上非常重 要,所以要与标准时间保持同步,毕竟服务器的时钟并不一定精准,所以需要我们每隔一段时间去同步一下时间。笔者所管理的服务器每隔6小时就会同步一下时 间。如何同步呢?这就要用到ntpdate 这个指令。如果你的服务器上没有这个指令,请使用'yum install -y ntpdate'安装,或者下载源码包安装。

同步时间的命令为:'ntpdate  timeserver'  这里的timeserver为时间服务器的IP或者hostname.

 

posted @ 2017-08-24 20:55  黑夜繁星  阅读(259)  评论(0编辑  收藏  举报
AmazingCounters.com