zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    三大主流负载均衡软件对比(LVS+Nginx+HAproxy)
    nginx 提示the "ssl" directive is deprecated, use the "listen ... ssl" directive instead
    centos安装nginx并配置SSL证书
    hadoop创建目录文件失败
    The server time zone value 'EDT' is unrecognized or represents more than one time zone.
    脚本启动SpringBoot(jar)
    centos做免密登录
    数据库远程连接配置
    Bash 快捷键
    TCP三次握手四次断开
  • 原文地址:https://www.cnblogs.com/sxt0103/p/13992463.html
Copyright © 2011-2022 走看看