• linux 系统⽇常管理--运维必备


    【监控系统的状态】

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

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

    第⼀个数值表⽰1分钟内系统的平均负载值;

    第⼆个数值表⽰5分钟内系统的平均负载 值;

    第三个数值表⽰15分钟系统的平均负载值。这个值的意义是,单位时间段内CPU 活动进程数。当然这个值越⼤就说明你的服务器压⼒越⼤。⼀般情况下这个值只要不 超过你服务器的cpu数量就没有关系,如果你的服务器cpu数量为8,那么这个值若小于8,就说明你的服务器没有压⼒,否则就要关注⼀下了。到这⾥你肯定会问,如何 查看服务器有几个cpu?

     就是⽤这个命令了。/proc/cpuinfo这个⽂件记录了cpu的详细信息。⽬前市⾯上的服 务器通常都是2颗4核cpu,在linux看来,它就是8个cpu。查看这个⽂件时则会显⽰8段 类似的信息,⽽最后⼀段信息中processor : 后⾯跟的是’7’。所以查看当前系统有⼏个 cpu,你可以使⽤这个命令:grep -c "processor" /proc/cpuinfo 。

     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 5’ 表⽰每隔1秒钟打印⼀次系统状态, 连续打印5次。当然你也可以 "vmstat 1"表⽰每隔1秒钟打印⼀次系统状态,⼀直打 印,除⾮你按ctrl + c强制结束。 

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

     这个命令⽤于动态监控进程所占系统资源,每隔3秒变⼀次。这个命令的特点是把占 ⽤系统资源(CPU,内存,磁盘IO等)最⾼的进程放到最前⾯。

    top命令打印出了很多 信息,包括系统负载(load average)、进程数(Tasks)、cpu使⽤情况、内存使⽤情 况以及交换分区使⽤情况。

    其实上⾯这些内容可以通过其他命令来查看,所以⽤top重 点查看的还是下⾯的进程使⽤系统资源详细状况。

    这部分东西反映的东西还是⽐较多 的,不过需要你关注的也就是⼏项:%CPU, %MEM, COMMAND 这些项⽬所代表的 意义,不⽤笔者介绍相信你也能看懂吧。

     另外笔者使⽤top命令时还常常使⽤-bn1 这个组合选项,它表⽰⾮动态打印系统资源 使⽤情况,可以⽤在脚本中,你不妨记⼀下,以后也许你会⽤得到。 

    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

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

    5. free查看内存使⽤状况

     

    只要你敲⼀个free然后回车就可以当前系统的总内存⼤⼩以及使⽤内存的情况。从上 图中可看到当前系统内存总⼤⼩为235128(单位是k)已经使⽤120368,剩余94760。 其实真正剩余并不是这个94760,⽽是第⼆⾏的213388,真正使⽤的也是第⼆⾏的 21740。这是因为系统初始化时,就已经分配出很⼤⼀部分内存给缓存,这部分缓存 ⽤来随时提供给程序使⽤,如果程序不⽤,那这部分内存就空闲。所以,查看内存使
    用多少,剩余多少请看第⼆⾏的数据。另外你还可以加-m 或者-g选项分别以M或G为 单位打印内存使⽤状况。

     6. ps 查看系统进程 

    作为系统管理员,⼀定要知道你所管理的系统都有那些进程在运⾏,在windows下只 要打开任务管理器即可查看。

    在linux下呢?其实在上⾯介绍的top命令就可以,但是不 够专业,当然还有专门显⽰系统进程的命令。

     对了,就是这个’ps aux’。笔者也经常看到有的⼈喜欢⽤’ps -elf’ ⼤同⼩异,显⽰的信 息基本上是⼀样的。

    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命令是笔者在⼯作中⽤的⾮常多的命令之⼀,所以请记住它吧。关于ps命令的 使⽤,笔者经常会连同管道符⼀起使⽤,⽤来查看某个进程或者它的数量。

    上⾯的6不对,需要减掉1,因为使⽤grep命令时,grep命令本⾝也算作了⼀个。

    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 选项后⾯跟设备名称,如果你想抓eth1⽹卡的包, 后⾯则要跟eth1.⾄于-nn选项的作⽤是让第三列和第四列显⽰成IP+端⼜号的形式,如 果不加-nn则显⽰的是主机名+服务名称。 

    【linux⽹络相关】

    1. ifconfig 查看⽹卡IP 

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

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

     在windows下设置IP⾮常简单,然⽽在命令窗⼜下如何设置?

    这就需要去修改配置⽂ 件/etc/sysconfig/network-scripts/ifcfg-eth0了,如果是eth1那么配置⽂件 是/etc/sysconfig/network-scripts/ifcfg-eth1.

    如果想修改IP的话,则只需要修改IPADDR , NETMASK以及GATEWAY即可。如果你 的linux是通过dhcp服务器⾃动获得的IP,那么配置⽂件肯定和上图中的不⼀样, BOOTPROTO那⾥会是’dhcp’,如果你要配置成静态IP的话,这⾥就需要写成’none’。
    关于如何设置IP以及⼦⽹掩码的这些知识属于⽹络相关的基础知识了,如果你对这⽅ ⾯⽐较陌⽣的话,建议你去看看⽹络相关的资料。

    当修改完IP后需要重启⽹络服务新 IP才能⽣效,重启命令为’ service network restart’

     另外如果你有多个⽹卡的情况时,只想重启某⼀个⽹卡的话,还可以使⽤这个命令。

     ifdown 即停掉⽹卡,ifup即启动⽹卡。有⼀点要提醒你的是,如果你远程登录你的服 务器,当你使⽤ifdown eth0这个命令的时候,很有可能后⾯的命令ifup eth0不会被运 ⾏,这样导致你断⽹⽽⽆法连接服务器,所以请尽量使用service network restart 这个命 令来重启网卡。 

    2. 给⼀个网卡设定多个IP

    在linux系统中,⽹卡是可以设定多重IP的,笔者曾经管理的⼀台服务器的eth1就设定 了5个IP,实在是够变态的。

     把ifcfg-eth0复制成ifcfg-eth0:1 然后编辑ifcfg-eth0:1修改DEVICE以及IPADDR保存后重 启⽹卡。

     再次查看eth0上就有两个IP了。这⾥你要注意⼀下,⽂件名(ifcft-eth0:1)写成什么都 ⽆所谓,但是⽂件内的DEVICE=eth0:1⼀定要按照这样的格式写,否则你启动不起来 ⽹卡。 

    3. 查看⽹卡连接状态

     mii-tool这个命令⽤来查看⽹卡是否连接,如图显⽰link ok等字样说明连接正常,否则 会显⽰’no link’字样,下图是笔者所管理的⼀台服务器,eth1⽹卡没有连接。

     

     如果你的机器是虚拟机,那么你使⽤该命令时应该显⽰成如下:

     这是因为使⽤的是虚拟⽹卡,不⽀持这个⼯具查看。不⽤多关注此,你记住这个miitool命令即可,它可是会经常⽤到的。 

    4. 更改主机名 

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

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

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

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

    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=disabled’,然后重启机器。临时关闭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的基本规则。 

    1)iptalbes的三个表 

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

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

    mangle :这个表主要是⽤于给数据包打标记,然后根据标记去操作哪些包。这个表⼏ 乎不怎么⽤。除⾮你想成为⼀个⾼级⽹络⼯程师,否则你就没有必要花费很多⼼思在 它上⾯。

    2)iptables 基本语法 

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

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

     这个和-t filter 打印的信息是⼀样的。 关于清除规则的命令中,笔者⽤的最多就是

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

    B. 增加/删除⼀条规则

     这就是增加了⼀条规则,省略-t所以针对的是filter表。-A 表⽰增加⼀条规则,另外还 有-I 表⽰插⼊⼀条规则,-D删除⼀条规则;后⾯的INPUT即链名称,还可以是 OUTPUT或者FORWORD;-s 后跟源地址;-p 协议(tcp, udp, icmp); --sport/-dport 后跟源端⼜/⽬标端⼜;-d 后跟⽬的IP(主要针对内⽹或者外⽹);-j 后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包)。这样讲可能很乱,那笔者多举⼏个例⼦来帮你理解:

     上例表⽰:插⼊⼀条规则,把来⾃10.0.2.36的所有数据包丢掉。

     删除刚刚插⼊的规则。注意要删除⼀条规则时,必须和插⼊的规则⼀致,也就是说, 两条iptables命令,除了-I 和-D不⼀样外,其他地⽅都⼀样。

    上例表⽰把来⾃10.0.2.36 并且是tcp协议到本机的80端⼜的数据包丢掉。这⾥要说的 是,--dport/--sport 必须要和-p选项⼀起使⽤,否则会出错。

     把发送到10.0.2.34的22端⼜的数据包丢掉。下⾯做⼀个⼩试验:

     ⼀开始⽤本机ping 10.0.2.34是通的,然后使⽤iptables增加⼀条规则,使到10.0.2.34的 icmp包丢掉,再ping 10.0.2.34则不通了。此时⽤’iptables –nvL’查看iptalbes规则。

     会有⼀条这样的记录,看pkts那列显⽰4个数据包,因为我们ping 的时候给10.0.2.34发 送了4个数据包,第⼆列表⽰这4个数据包⼀共有多⼤(336bytes)。此时使⽤’iptables -Z' 清零。

     现在你明⽩’iptables -Z’的意义了吧。⾄于FORWORD链的应⽤笔者⼏乎没有⽤到过, 所以不再举例。再总结⼀下各个选项的作⽤: 

    -A/-D :增加删除⼀条规则;

    -I :插⼊⼀条规则,其实跟-A的效果⼀样;

    -p :指定协议,可以是tcp,udp或者icmp;

    --dport :跟-p⼀起使⽤,指定⽬标端⼜;

    --sport :跟-p⼀起使⽤,指定源端⼜;

    -s :指定源IP(可以是⼀个ip段);

    -d :指定⽬的IP(可以是⼀个ip段);

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

    -i :指定⽹卡(不常⽤,但有时候能⽤到);

    上例中表⽰,把来⾃10.0.2.0/24这个⽹段的并且作⽤在eth0上的包放⾏。有时候你的服 务器上iptables过多了,想删除某⼀条规则时,又不容易掌握当时创建时的规则。其实 有⼀种⽐较简单的⽅法:

    查看结果如下:

     删除某⼀个规则的⽅法是:

     -D 后跟链名,然后是规则num,这个num就是查看iptables规则时第⼀列的值。

    iptables还有⼀个选项经常⽤到,-P(⼤写)选项,表⽰预设策略。⽤法如下:

     -P后⾯跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。

    注意:如果 你在连接远程服务器,千万不要随便敲这个命令,因为⼀旦你敲完回车你就会断掉。

     看到上图中红框标出的部分了吧,现在所有进来的数据包全部DROP了。这个策略⼀ 旦设定后,只能使⽤iptables -P ACCEPT才能恢复成原始状态,⽽不能使⽤-F参数。

    下 ⾯笔者针对⼀个⼩需求讲述⼀下这个iptables规则如何设定。 需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对 10.0.2.0/24开通22端⼜,对所有⽹段开放80端⼜,对所有⽹段开放21端⼜。 这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。

     完成脚本的编写后,直接运⾏ ‘sh /usr/local/sbin/iptables.sh ’ 即可。如果想开机启动时 初始化防⽕墙规则,则需要在/etc/rc.d/rc.local中添加⼀⾏ ‘sh /usr/local/sbin/iptables.sh’ 。

    关于icmp的包有⼀个⽐较常见的应⽤。

     --icmp-type 这个选项是要跟-p icmp ⼀起使⽤的,后⾯指定类型编号。这个8指的是能 在本机ping通其他机器,⽽其他机器不能ping通本机。这个有必要记⼀下。 

    C. nat表的应⽤

    其实,linux的iptables功能是⼗分强⼤的,笔者曾经的⼀个⽼师这样形容linux的⽹络功 能:只有想不到没有做不到!也就是说只要你能够想到的关于⽹络的应⽤,linux都能 帮你实现。在⽇常⽣活中相信你接触过路由器吧,它的功能就是分享上⽹。本来⼀根 ⽹线过来(其实只有⼀个公⽹IP),通过路由器后,路由器分配了⼀个⽹段(私⽹ IP),这样连接路由器的多台pc都能连接intnet⽽远端的设备认为你的IP就是那个连接 路由器的公⽹IP。这个路由器的功能其实就是由linux的iptables实现的,⽽iptables又是 通过nat表作⽤⽽实现的这个功能。

    ⾄于具体的原理以及过程,笔者不想阐述,请查看相关资料。笔者在这⾥只举⼀个例 ⼦来说明iptables如何实现的这个功能。假设你的机器上有两块⽹卡eth0和eth1,其中 eth0的IP为10.0.2.68 ,eth1的IP为192.168.1.1 。eth0连接了intnet 但eth1没有连接,现在 有另⼀台机器(192.168.1.2)和eth1是互通的,那么如何设置也能够让连接eth1的这台 机器能够连接intnet(即能和10.0.2.68互通)?

     其实就是这样简单的两个命令就能实现上⾯的需求。第⼀个命令涉及到了内核参数相关的配置⽂件,它的⽬的是为了打开路由转发功能,否则⽆法实现我们的应⽤。第⼆ 个命令则是iptables对nat表做了⼀个IP转发的操作,-o 选项后跟设备名,表⽰出⼜的⽹ 卡,MASQUERADE表⽰伪装的意思。

    关于nat表,笔者不想讲太多内容,你只要学会这个路由转发即可。其他的东西交给⽹ 络⼯程师去学习吧,毕竟你将来可是要做linux系统⼯程师的。

    D. 保存以及备份iptalbes规则 

    也许你不知道,咱们设定的防⽕墙规则只是保存在内存中,并没有保存到某⼀个⽂件 中,也就说当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存⼀ 下。

     它会提⽰你把规则保存在了/etc/sysconfig/iptables⽂件内。其实,这个⽂件就是iptables 的配置⽂件了,你不妨查看⼀下它。

     红线部分就是咱们刚才设定那条规则!有时可能因为我们设置防⽕墙规则有误导致服 务器出问题,这时候不妨先备份⼀下这个配置⽂件,然后停⽌防⽕墙服务。

     这样防⽕墙就失效了,但是⼀旦你重新设定规则后(哪怕只有⼀条),防⽕墙又开始 ⼯作了。

     我还可以使⽤iptables-save >filename 这条命令来保存⼀个防⽕墙规则,这样就可以起 到备份的作⽤了。要想恢复这个规则使⽤下⾯这个命令即可。

     【linux系统的任务计划】 

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

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

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

    -e :制定计划任务;

    -l :列出计划任务;

    -r :删除计划任务。

     使⽤crontab -e 来制定计划任务,上⾯的例⼦表⽰在05⽉26⽇(这天必须是周四)的10 点01分执⾏’ echo "ok" >/root/cron.log’这样的任务。 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服务是否启动,如果没有启动,需要启动它。

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

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

    【linux的系统服务管理】

    如果你对windows⾮常熟悉的话,相信你肯定配置过开机启动的服务,有些服务我们 ⽇常⽤不到则要把它停掉,⼀来可以节省资源,⼆来可以减少安全隐患。在linux上同 样也有相关的⼯具来管理系统的服务。 1. ntsysv

    ⽤来配置哪些服务开启或者关闭,有点想图形界⾯,不过是使⽤键盘来控制的。如果 没有这个命令请使⽤ yum install -y ntsysv 安装它。

     敲完这个命令后则显⽰出如上图中的画⾯。在屏幕的最上⾯有’Red Hat’等字样,这是 在告诉我们这个⼯具是由Red Hat公司开发的。按键盘的上下⽅向键可以调节红⾊光 标,按空格可以选择开启或者不开启,如果前⾯的中括号内显⽰有’*’ 则表⽰开启否 则不开启。通过这个⼯具也可以看到⽬前系统中所有的服务。建议除’crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl’ 外其他服务全部停掉。选择好 后,按’tab’键选择ok然后回车。需要重启机器才能⽣效。 

    2. chkconfig 

    Linux系统所有的预设服务可以查看/etc/init.d/⽬录得到

     其实这就是系统所有的预设服务了。为什么这样讲,因为系统预设服务都是可以通过 这样的命令实现 ‘service 服务名 start|stop|restart’ ,这⾥的服务名就是/etc/init.d/⽬录下 的这些⽂件了。除了可以使⽤’service crond start ‘启动crond外,还可以使 ⽤/etc/init.d/crond start 来启动。

     如上图,这两个命令出来的结果是⼀样的。

     再看看这个chkconfig命令,它不仅可以列出来所有的服务,还可以详细到每个级别。 这⾥的级别(0,1,2,3,4,5,6)就是inittab⾥⾯介绍的那⼏个启动级别了。

    这样还可以查看某⼀个服务的启动情况。

    ⽤--level 指定级别,后⾯是服务名,然后是off或者on,--level后还可以跟多个级别。

    另外还可以省略级别,默认是针对2,3,4,5级别操作。

    另外这个chkconfig 还有⼀个功能就是可以把某个服务加⼊到系统服务,即可以使⽤ service 服务名 start 这样的形式,并且可以在chkconfig --list 中查找到。当然也能删除掉。

     这个功能常⽤在把⾃定义的启动脚本加⼊到系统服务当中。关于系统服务就讲这些内 容,其实还有很多内容笔者没有介绍,道理很简单,⼀来讲多了你不能消化⼆来讲多 了你也⽤不上。 

    【linux中的数据备份】 

    数据备份,不⽤说太多吧,毫⽆疑问很重要。笔者就曾经有过⼀次⾮常痛苦的经历, 备份策略没有做好,结果磁盘坏掉数据丢失,简直是撕⼼裂肺的痛呀。还好数据重要 性不是特别⾼,即使是不⾼也是丢失了数据,这是作为系统管理员最不应该出现的事 故。所以,在你以后的系统维护⼯作中,⼀定要把数据备份当回事,认真对待。在 linux上作为数据备份的⼯具很多,但笔者就只⽤⼀种那就是rsync 从字⾯上的意思你 可以理解为remote sync (远程同步)这样可以让你理解的更深刻⼀些。Rsync不仅可 以远程同步数据(类似于scp),当然还可以本地同步数据(类似于cp),但不同于cp 或scp的⼀点是,rsync不像cp/scp⼀样会覆盖以前的数据(如果数据已经存在),它会 先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。 如果你的linux上下⾯看例⼦吧。(如果没有rsync命令请使⽤yum install -y rsync安装)

    上⾯例⼦表⽰把当前⽬录下的123同步到/tmp/⽬录下,并且同样也命名为123。如果是 远程拷贝的话就是这样的形式了 IP:path(如:10.0.2.34:/root/)

     当建⽴连接后,是需要输⼊密码的。如果⼿动去执⾏这些操作还好,但是如果是写在 脚本中怎么办?这就涉及到添加信任关系了,该部分内容稍后会详细介绍。 

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

  • 相关阅读:
    atom介绍
    举例介绍重构(译)
    java单双派机制理解
    AngularJS开发指南03:HTML编译器
    AngularJS开发指南02:引导程序
    AngularJS开发指南01:AngularJS简介
    1.angular之Hello World
    31天重构学习笔记(java版本)
    一个农夫的故事 分类: 其他 2015-01-24 16:44 104人阅读 评论(0) 收藏
    一个农夫的故事 分类: 其他 2015-01-24 16:44 103人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/datacenter/p/13393058.html
Copyright © 2020-2023  润新知