Linux系统管理技巧(上)

一.监控系统的状态

1.使用w命令查看当前系统的负载

 

第一行显示的信息从左到右依次是:时间,系统运行时间,登录用户数,平均负载

第二行显示的是登录的用户名及其登录的地址等

第一行load average后面的三个数值为:表示1分钟内系统的平均负载值。表示5分钟内系统的平均负载值。表示15分钟内系统的平均负载值。我们着重看第一个值,它表示单位时间段内使用CPU的活动进程数,值越大说明服务器压力越大。一般情况下,这个值只要不超过服务器的CPU数量就没有关系。

2.vmstat命令监控系统的状态

命令w查看的是系统整体上的负载,通过看那个数值就可以知道当前系统有没有压力。但它无法判断具体是哪里的(CPU、内存、磁盘等)压力,这就用到了vmstatvmstat命令打印结果共分为6部分:

procs显示进程的相关信息。

r (run):表示运行或等待CPU时间片的进程数。不要误认为等待CPU时间片意味着这个进程没有运行,实际上==某一时刻1CPU只能有一个进程占用,其他进程只能排着队等着, 此时这些排队等待CPU资源的进程依然是运行状态。==该数值如果长期大于服务器CPU的个数,则说明CPU资源不够用了。

b (block):表示等待资源的进程数.这个资源指的是I/O、内存等,举个例子.当磁盘读写非常頻繁时,写数据就会非常慢.此时CPU运算很快就结束了,但进程需要把计算的结果写入磁盘,这样进程的任务才算完成,那此时这个进程只能慢慢地等待磁盘了,这样这个进程就是这个b状态。该数值如果长时间大于1.则需要关注一下了。  

memory显示内存的相关信息。

swpd:表示切换到交换分区中的内存数量,单位为KB

free:表示当前空闲的内存数量,单位为KB

buff:表示(即将写入磁盘的)缓冲大小,单位为KB

cache:表示(从磁盘中读取的)缓存大小,単位为KB。  

swap显示内存的交换情况。 

si:表示由交换区写入内存的数据量.单位为KB

so:表示由内存写入交换区的数据量,单位为KB

io显示磁盘的使用情况。 

bi:表示从块设备读取数据的量(读磁盘),单位为KB

bo:表示从块设备写入数据的量(写磁盘),单位为KB。  

system显示采集间隔内发生的中断次数。

in:表示在某一时间间隔内观测到的毎秒设备的中断次数。

cs:表示每秒产生的上下文切换次数。  

cpu显示CPU的使用状态 

us:显示用户下所花费CPU的时间百分比。

sy:显示系统花费CPU的时间百分比。

id:表示CPU处于空闲状态的时间百分比。

wa:表示I/O等待所占用CPU的时间百分比。

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

如果磁盘io压力很大,io部分的bibo数值会比较高。另外,当siso两列数值比较高并且不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。 我们使用vmstat查看系统状态时,通常都是使用如下形式:

 

3.用top命令显示进程所占的系统资源

top命令用于动态监控进程所占的系统资源,每隔3秒变一次。它的特点是把占用系统资源(CPU、 内存、磁盘I/O等)最高的进程放到最前面.top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、CPU使用情况、内存使用情况以及交换分区使用情况。这些内容其实可以通过其他命令来查看,用top重点查看的还是下面的进程使用系统资源的详细状况,其中你需要关 注%CPU、%MEMCOMMAND这几项所代表的意义。RES这一项为进程所占的内存大小,而%MEM这一项为使用内存的百分比top状态下,按Shift+m键可以按照内存使用大小排序。按数字1可以列岀所有核 CPU的使用状态,按q键可以退出top

 

另外,还经常用到命令top -bnl.它表示非动态打印系统资源的使用情况,可以用在shell脚本中。和top命令唯一的区别就是,它一次性输出所有信息而非动态显示。

 

4.用sar命令监控系统状态

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

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

 

 

 

 

 

这个命令会把当天记录的网卡信息打印出来,每隔10分钟记录一次。 IFACE这一列表示设备名称,rxpck/s这一列表示每秒进入收取的包的数量,txpck/s这一列表示每秒发送出去的包的数量,rxkB/s这一列表示每秒收取的数据量(单位为KB, txkB/s这一列表示每 秒发送的数据量(后面几列不需要关注)。如果有一天服务器丢包非常严重,那么你就应该查一下网卡流量是否异常了。如果txpck/s那一列的数值大于4000,或者rxkB/s那一列的数值大于5000000,很有可能是被攻击了。正常的服务器网卡流 量不会这么高,除非是你自己在复制数据。上例中的命令是查看网卡流量历史的,如果你想实时查看网卡流量,方法如下:

 

 

 

另外==也可以使用-f选择项查看某一天的网卡流量历史,后面跟文件名。==Red Hat或者CentOS发行版中,sar的库文件一定在/var/log/sa/目录下,如下所示:

 

 

 

 

 

2)查看历史负载  sar -q

 

5.用nload命令查看网卡流量

yum install -y epel-release; yum install -y nload

 

6.用free命令查看内存使用情况

 

free命令可以查看当前系统的总内存大小以及使用内存情况

total:内存总大小

Used:真正使用的实际内存大小

Free剩余物理内存大小(没有被分配,纯剩余)

Shared共享内存大小,不用关注他

Buff/cache分配给buffercache的内存总共有多大  buffercache都是一部分内存,内存的作用就是缓解CPUIO的速度差距。数据经过CPU计算,即将要写入磁盘,这时的内存为bufferCPU要计算时,需要把数据从磁盘中读出来,临时先放到内存中,这部分内存就是cache

available:系统可使用内存有多大,它包含了freeLinux系统为了让应用跑得更快,会预先分配一部分内存(buffer/cache )给某些应用使用,虽然这部分内存并没有真正使用,但也已经分配岀去了。然而,当另外一个服务要使用更多内存时,是可以把这部分预先分配的内存拿来用的。所以还没有被占用的这部分buffercache再加上free就是available

这个free命令显示的结果中,其实有一个隐藏的公式total=used+free+buff/cacheo另外, available是由free这部分内存和buff/cache还未被占用的那部分内存组成。used那部分内存和 buff/cache被占用的内存是没有关系的。

 -m(MB为单位)打印内存的使用状况;  

-g(GB为单位)打印内存的使用状况。

 

7.用ps命令查看系统进程

 

 

PID :表示进程的ID。在Linux中,内核管理进程就得靠pid来识别和管理某一个进程。

STAT:进程的状态。进程状态分为以下几种:

D:正在运行中的进程,其中包括了等待CPU时间片的进程

R run):正在运行中的进程,其中包括了等待CPU时间片的进程。 S sleep):已经中断的进程。通常情况下,系统的大部分进程都是这个状态。

T:已经停止或者暂停的进程。如果我们正在运行一个命令,比如说sleep 10,我们按一下 Ctrl+Z暂停进程时,用ps命令查看就会显示T这个状态。

W:(内核2.6xx以后不可用),没有足够的内存页分配,

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

Z:僵尸进程,即杀不掉、打不死的垃圾进程,占用系统一点资源,不过没有关系。如果占用太多(一般不会出现),就需要重视了。

<:高优先级进程。

N:低优先级进程。

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

s:主进程,后面讲到nginx<php-fpm服务的时候,你就能更好地理解它了。

l:多线程进程。

 +:在前台运行的进程,比如在当前终端执行ps aux就是前台进程。

 ps命令是在工作中用得非常多的一个命令,经常会将ps连同管道符一起使用,用来查看某个进程或者它的数量。示例命令如下:

 

8.用netstat命令查看网络状况

 

 

显示的结果中,上面那一部分是tcp/ip,下面一部分是监听的socket ( unix开头的行)。netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。最常用的两种用法是netstat -lnp (打印当前系统启动哪些端口)和netstat -an(打印网络连接状况)

最右侧为网络连接的状态如果你管理是一台提供Web服务(80端口)的服务器,那么就可以使用命令netstat -an |grep 80 来查看当前连接Web服务的有哪些IP 了。

二.抓包工具

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

  1. tcpdump工具

 

 

 

回车后会出现密密麻麻的一堆字符串,在按Ctrl+C之前,这些字符串一直在刷屏,刷屏越快说明网卡上的数据包越多。没有tcpdump命令,使用yum install -y tcpdump安装。上例中,我们只需要关注第3列和第4列,它们显示的信息为哪一个IP+端口号在连接哪一个IP+端口号。后面的信息是该数据包的相关信息-i:选项后面跟设备名称,如果想抓取其他网卡的数据包,后面则要跟其他网卡的名字。  

-nn:其作用是让第3列和第4列显示成“IP+端口号的形式,如果不加-nn选项则显示主机名+服务名称。  

-c:指定抓包数量,抓够了自动退出,不用人为取消

 

 

 

 

 

 

2.wireshark工具

要执行的命令是tshark,虚拟机默认是没有这个命令的:yum install -y wireshark

 

 

 

三.Linux网络相关

  1. ifconfig命令查看网卡ip

修改配置文件vi /etc/sysconfig/network-scripts/ifcfg-xxxxxx是网卡的名字,可以用ip addr查看所有网卡,如果没有ifconfig命令,则安装: # yum install -y net-tools。如果Linux上有多个网卡,而你只想重启某一个网卡的话,可以使用: # ifdown ens33;ifup ens33

ifdown即停用网卡,ifup即启动网卡。如果我们远程登录服务器,当使用命令ifdown ens33时,很有可能后面的命令ifup ens33不会运行。这样会导致我们断网而无法连接服务器,所以请尽量使用命令# systemctl restart network来重启网卡。

2.给一个网卡设定多个ip

 

 

3.查看网卡连接状态

 

这里显示link ok,就说明网卡为连接状态。如果显示no link,说明网卡坏了或者没有连接网线 还有一个命令也可以查看网卡的状态

 

如果网卡没有连接,最后面一行Link detected显示为no

4.更改主机名

 

5.设置DNS

DNS是用来解析域名的平时我们访问网站都是直接输入一个网址,而DNS把这个网址解析到一个IP。在Linux下设置DNS非常简单,只要把DNS地址写到配置文件/etc/resolv.conf中即可。

 

第一行以#开头的行没有实际意义,仅仅是一个注释,它的意思是,这个配置文件中的DNS IP地址是由NetworkManager服务生成的。 NetworkManager是一个集成的Linux网络管理器我们在定义网卡配置文件的时候,就有一行DNS1=8.8.8.8,其实就是因为这行配置,该配置文件里才有了 nameserverIP地址。resolv.con有它固有的格式,一定要写成nameserver IP的格式。建议你写两个或多个namserver,系统默认会用第一个namserver去解析域名,当第一个解析不成功时会使用第 二个。

Linux下还有一个特殊文件/etc/hosts也能解析域名,不过需要我们在里面手动添加IP和域名这些 内容。它的作用是临时解析某个域名,非常有用。该文件的内容如下:

 

 

/etc/hosts的格式很简单,每一行为一条记录,分成两部分,第一部分是IP,第二部分是域名。关 于hosts文件,有以下几点需要你注意   

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

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

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

四.Linux的防火墙

  1. SELinux

SELinuxLinux系统特有的安全机制。因为这种机制的限制太多,配置也特别烦琐,所以几乎没 有人真正应用它。安装完系统,我们一般都要把SELinux关闭,以免引起不必要的麻烦。临时关闭 SELinux的方法为: #setenforce 0 但这仅仅是临时的,要想永久关闭需要更改配置文件/etc/selinux/config,需要把SELINUX= enforcing 改成SELINUX=disabled,更改后的内容如下所示

 

更改完该配置文件后,重启系统方可生效。可以使用getenforce命令获得当前SELinux的状态

SELinux早就关闭了,默认会输出enforcing□当使用setenforce 0这个命令后,再执行 getenforce 命令会输出 permissive

2.Netfilter

在之前的CentOS版本(比如56 )的防火墙为netfilter, CentOS7的防火墙为firewalld。很多朋友把Linux的防火墙叫作iptables,其实这样叫并不太恰当,iptables仅仅是一个工具。 当然,即使是firewalld,同样也支持之前版本的命令用法,也就是说它是向下兼容的。

 

 

上例中,-nvL选项表示查看规则,-F选项表示清除当前规则,但清除只是临时的,重启系统或者重启iptalbes服务后还会加载已经保存的规则,所以需要使用service iptables save保存一下规则。 通过上面的命令输出,我们也可以看到,防火墙规则保存在/etc/sysconfig/iptables

1)netfilter5个表

filter表主要用于过滤包,是系统预设的表,这个表也是用得最多的表。该表内建3个链: INPUTOUTPUT以及FORWARDINPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD链作用于那些跟本机无关的包。  

nat表主要用于网络地址转换,它也有3个链。PREROUTINC链的作用是在包刚刚到达防火墙时改变它的目的地址(如果需要的话),OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。

mangle表主要用于给数据包做标记,然后根据标记去操作相应的包。  

raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。

security表在CentOS6中是没有的,它用于强制访问控制(MAC)的网络规则。

2)netfilter5个链

5个链分别为PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

PREROUTINC:数据包进入路由表之前。  

INPUT:通过路由表后目的地为本机。  

FORWARDING:通过路由表后,目的地不为本机。  

OUTPUT:由本机产生,向外转发。  

POSTROUTIONG:发送到网卡接口之前。

 

 

3)iptables基本语法

(1)查看规则以及清除规则

 

-t选项后面跟表名,-nvL表示査看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出, -V表示列出的信息更加详细。如果不加-t选项,则打印filter表的相关信息

 

上例和-t filter打印的信息是一样的。关于清除规则的命令中,用得最多就是下面两个

iptables -F

iptables -Z

这里-F表示把所有规则全部删除,如果不加-t指定表,默认只清除filter表的规则。-Z表示把包以及流量计数器置零(这个很有用)。

(2)增加/删除一条规则

-A/-D:表示增加/删除一条规则。  

-I:表示插入一条规则,其实效果跟-A一样。  

-p:表示指定协议,可以是tcpudp或者icmp。  

-P:预设策略。(例如 # iptables -P INPUT DROP-P后面跟链名,策略内容为DROPACCEPT,默认为ACCEPT。在远程时不要随便执行,一旦回车就会断开连接。策略一旦设定后,只有使用# iptables -P INPUT ACCEPT才能恢复成原始状态。)  

--dport:跟-p—起使用,表示指定目标端口。  

--sport:-p—起使用,表不指定源端口。  

-s:表示指定源IP (可以是一个IP段)。  

-d:表示指定目的IP (可以是一个IP段)。  

-j:后面跟动作,其中ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包。  

-i:表示指定网卡(不常用,但偶尔能用到)

 

 

4)nat表的应用

路由器的功能其实就是由Linux的iptables实现 的,而iptables又是通过nat表作用而实现的

echo "1" > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ethO -j MASQUERADE这里,第一个命令涉及内核参数相关的配置文件,它的目的是打开路由转发功能,否则无法实现我们的应用。第二个命令则是iptables对nat表做了一个IP转发的操作。-O选项后面跟设备名,表示出口的网卡;MASQUERADE表示伪装。

5)保存和备份iptables规则

自己设定的防火墙规则只保存在内存中,并没有保存到某个文件中。重启之后一件设定的规则就没有了。保存:service iptables save 清除:service iptables stop备份防火墙规则:sh /usr/local/sbin/iptables.sh

                Iptables-save >myipt.rule

使用iptables -save保存规则后,若想恢复这些规则,则: # iptables -restore < myipt.rule

3.firewalld

 

firewalld有两个基础概念,分别是zone和service,每一个zone里面有不同的iptables规则,默认一共 有9个zone,而CentOS 7默认的zone为public。获取系统所有的zone

9zone

drop (丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。  

block (限制):任何接M攵的网络连接都被IPv4icmp-host-prohibited信息和IPv6icmp6-adm-prohibited 信息所拒绝  

public (公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。  

external (外部):特别是为路由器启用了伪装功能的外部网。你不能信任来自网络的其他计算,不能相信它们不会对你的计算机造成危害,只能接收经过选择的连接。  

dmz (非军事区):用于你的非军事区内的计算机,此区域内可公开访问,可以有限地进入你 的内部网络,仅仅接收经过选择的连接。  

work(工作):用于工作区。你可以基本相信网络内的其他计算机不会危害你的计算机。仅仅 接收经过选择的连接。  

home(家庭):用于家庭网络。你可以基本信任网络内的其他计算机不会危害你的计算机。仅 仅接收经过选择的连接。  

internal(内部):用于内部网络。你可以基本上信任网络内的其他计算机不会威胁你的计算 机。仅仅接受经过选择的连接。  

trusted (信任):可接受所有的网络连接

 

之所以有9zone,是因为每一个zone里面都使用了不同的service,service就是针对一个服务(端口)做的iptables规则。

 

 

 

每个zone里都有不同的service

 

给一个zone添加一个service

 

查看zone配置文件:

 

zone中添加,修改配置文件

 

一旦更改了某个zone的配置文件,则会在/etc/firewalld/zones/目录下面生成对应zone的配置文件 (.xml后缀的文件),其实这个目录下面的配置文件才是真正的配置文件。在上面介绍的目录,可以说是所有zone的模板配置文件。

五.Linux系统的任务计划

1.命令crontab

Linux任务计划功能的操作都是通过crontab命令来完成的,其常用的选项有以下几个。   

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

-e:表示制定计划任务。  

-1:表示列出计划任务。  

-r:表示删除计划任务。

这里使用crontab -e来编写任务计划,这实际上是使用vim工具打开了crontab的配置文件,我们 写下如下内容: 01 10 05 06 3 echo "ok" > /root/cron.log 这里每个字段的数字从左到右依次为:分、时、日、月、周和命令行。上例表示在65日(这一天必须是星期三)的1001分执行命令:echo "ok” > /root/cron.log  则打开的是 /var/spool/cron/root )打开这个文件使用了vim编辑器,所以保存时在命令行模式下输入:wq即可。一定要使用命令crontab -e来编辑。 查看已经设定的任务计划使用crontab -l命令。删除任务计划要使用crontab -r命令,它会一下子把全部计划都删除掉。如果你想只删除一条计划,可以使用-e选项进入crontab进行编辑。

 

设置好所有任务后,查看crond是否已经启动  systemctl status cromd

原文地址:https://www.cnblogs.com/sxt0103/p/13992463.html