一.查看系统负载命令

     查看当前系统的负载:w 或者 uptime

wKiom1XUMb6wFbCkAAE3Nsqshjs654.jpg

     这里我们可以看出w给我们展示出来的信息。

     第一行(从左至右):时间系统运行时间登陆用户的数目,平均负载

     第二行开始以及下面所有的行:当前登录的都有哪些用户,以及他们是从哪里登录的等等;

 

     这些信息当中最重要的信息是load average后面的3个数字,那么这三个数字分别是什么意思?

 

     第一个数值:表示1分钟内系统的平均负载值;

     第二个数值:表示5分钟内系统的平均负载值;

     第三个数值:表示15分钟系统的平均负载值。


     看到这里,有人会问我这个平均负载值是什么鬼?

 

     其实呢,这个平均负载值表示:单位时间段内CPU活动进程数。

 

     我们需要注意的是这个值越大就说明您的服务器压力越大。

     一般情况下这个值只要不超过服务器的cpu数量就没有关系。举个例子来说如果服务器cpu数量为10,那么这个值若小于10,就说明当前服务器没有压力,否则我们就应该要注意一下了。


     看到这里您肯定又会问,如何查看服务器有几个cpu呢?(烦不烦,天天就知道问问问j_0013.gif

     这里我们就要用到一个命令:cat/proc/cpuinfo

wKiom1XUPCXynOpGAAKLsjv4ltQ422.jpg

     这样我们就知道cpu的详细信息就储存在/proc/cpuinfo当中。

     查看当前系统有几个cpu:grep -c 'processor' /proc/cpuinfo

wKiom1XUQYzRG7akAACtA6uiyAo303.jpg

     (不要问我为什么是2,因为我的虚拟机设定的cpu就是2j_0007.gif



二.vmstat监控系统的状态

     上面我们说的w是用来查看整个系统的负载,通过一些数值可以知道当前系统是否有压力,但是具体是哪里(CPU, 内存,磁盘等)有压力就无法判断了。

     所以我们通过 vmstat 就能知道具体是哪里有压力了。

wKiom1XUUaujqjnyAAFDSlKk9bM489.jpg

    上图中我们可以看出vmstat的结果分为6部分:proce  memory  swap  io  system  cpu

    

    那么这6个部分是什么意思呢?请重点关注一下r b si so bi bo几列。

     1.procs:显示进程相关的信息;

                    rrun):表示有多少个进程正在使用或者等待使用cpu;

                                :若长期大于cpu的个数,说明cpu不够用了)

                    b(block):被阻塞的任务的个数,比如等待I/O, 内存等;

                                (:这个数值如果长时间大于1,则需要关注一下了)

     2.memory:显示内存相关的信息;

                    swpd:表示切换到交换分区中的内存数量 ;

                    free:表示当前空闲的内存数量;

                    buff:缓冲大小(即将写入磁盘的);

                    cache:缓冲大小(从磁盘中读取的);

     3.swap:内存交换的情况;

                    si(swap in):由交换区写入到内存的数据量;

                    so(swap out):由内存写入到交换区的数据量;

     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两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。

 


三.top动态查看负载 wKiom1XVlISBlUCCAAShSWJLu58704.jpg

    top这个命令用于动态监控进程所占系统资源,每隔3秒变化一次。

    这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。

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

    需要您关注的也就是几项:%CPU, %MEM, COMMAND 这些项目所代表的意义。


    那么我们来详细介绍下这些内容:

    PID:进程的ID号;

    (注:这些ID号都能在proc下面找到:ls /proc/    这些东西不用太刻意关注j_0012.gif

    USER:运行后面进程的用户。

    PRNI:进程的优先级。

    (注:PR和NI的和为20,PR取值范围0-39,NI的取值范围-20-19,PR,NI值越小,优先级越高,优先级越高的排在队列的最前面)

    VIRT:虚拟内存

    RES:物理内存,真正的内存大小

    SHR:共享内存

    S:进程的状态

    %CPU:使用cpu百分比

    %MEM:内存占用的百分比

    TIME+:使用cpu有多久

    COMMAND:进程


    top -bn1 :表示非动态打印系统资源使用情况,可以用在shell脚本中;

    top -d 1:一般每隔3秒变化一次,这样就变成了1秒钟使用一次;

    top -c :更加详细的展示COMMAND


四.sar监控系统状态

    sar 命令用来监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。

    它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。

    如果您系统没有安装这个命令,请使用yum install -y sysstat命令安装。

    安装完成后初次使用sar命令会报错。会出现这种情况:

wKioL1XW4xLhCG4JAANBnLbFljA702.jpg  

    解决方案:

    1.等待10分钟系统自动生成数据文件;

    2.用“sar -o 14”命令创建该文件或该目录即可。


    它的数据库文件在 “/var/log/sa/” 目录下,默认保存一个月。

    

    查看网卡流量:sar -n DEV

wKioL1XW5OKCX5FKAAHS8uibRA4068.jpg

    

    第一次看见这图的时候我是拒绝的,因为我根本看不懂,经过一番搜索后,我终于明白什么意思了。    

    IFACE这列表示设备名称;

    rxpck/s 表示每秒进入收取的包的数量;

    txpck/s 表示每秒发送出去的包的数量;

    rxbyt/s 表示每秒收取的数据量(单位Byte);

    txbyt/s表示每秒发送的数据量;

    rxcmp/s表示每秒接收的压缩数据包;

    txcmp/s表示每秒发送的压缩数据包;    (救命啊绿色的背景怎么解决)

    rxmcst/s表示每秒钟接收的多播数据包;

    lo、etho表示网卡;(etho表示外网网卡)

    

    不加粗的部分不重要了,不需要关注。


    我们着重关注rxbyt/s和txbyt/s这两项!!j_0013.gif

    1bit=8bit

    10m带宽,理论下载速度只有1.25m(涨姿势)

    

    如果有天你发现你所管理的服务器丢包非常严重,那么你就应该看一看这个网卡流量是否异常了。

    如果rxpck/s 那一列的数值大于4000,或者rxbyt/s那列大于5,000,000则很有可能是被***了,正常的服务器网卡流量不会高于这么多,除非是您自己在拷贝数据。

    

    上面的命令是查看网卡流量历史的,如何时时查看网卡流量呢?

    语法:sar -n DEV n m(每隔n秒显示一次,一共显示m次)

wKiom1XW6MHBNv0JAASHnPrBd7o713.jpg    

    如果你想查看某一天的网卡流量历史,使用-f选项,后面跟文件名。

    语法:sar -n DEV -f 、var/log/sa/sann为天数)

    如果你的系统格式Redhat或者CentOS那么sar的库文件一定是在/var/log/sa/目录下的。wKiom1XW6qixrLOaAAJ3xjpu3e4058.jpg    

    查看历史负载

    语法:sar -q

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

 查看当前的磁盘io状态

    语法:sar -b n m(每隔n秒显示一次,一共显示m次)


    查看cpu的使用情况

    语法:sar -p n m(每隔n秒显示一次,一共显示m次)


五.查看内存使用情况

    命令:free

wKioL1Xax7-gjAWKAAFLP_BTEHg093.jpg

    free可以当前系统的总内存大小以及使用内存的情况。

    从上图中可看到当前系统内存总大小为1004352(单位是k)已经使用225020, 剩余779332。

    但是真正剩余并不是这个779332, 而是第二行的875820, 真正使用的也是第二行的128532。


    这是什么鬼?为什么呢。。。

    这是因为系统初始化时,就已经分配出很大一部分内存给缓存。

    这部分缓存用来随时提供给程序使用,如果程序不用,那这部分内存就空闲。

    所以,查看内存使用多少,剩余多少请看第二行的数据。

    buffers:是即将写入到磁盘里去的数据暂存的内存区域。

    cached:是从磁盘里读出来的数据暂存的内存区域。


    我们还可以加-m 或者-g选项分别以M或G为单位打印内存使用状况:

    命令:free -m

wKiom1Xax57i3qPtAAGpfiaMpj4884.jpg



六.ps 查看系统进程

    作为系统管理员,一定要知道您所管理的系统都有那些进程在运行。

    在windows下只要打开任务管理器即可查看。

    在linux下呢?

    其实在上面介绍的top命令就可以,但是不容易看,当然还有专门显示系统进程的命令:

    命令:ps aux

wKioL1XayxKj8en-AANlWgfIAc8551.jpg

    还可以使用另外一个命令:ps -elf,但是,显示的信息基本上是一样的。

    那么上图上显示的是什么意思呢?    

    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 多线程进程

    + 代表在前台运行的进程

    VES 虚拟内存

    RSS 物理内存

    TTY 从哪里启动的(有以下几种情况)【以下只做了解】

    ? 从后台启动的

    ttyn 

    pts/0 运行的终端下

    

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

    关于ps命令的使用,经常会连同管道符一起使用,用来查看某个进程或者它的数量。

wKioL1XazyDxPHUkAAINl997ePM200.jpg

    

七.netstat 查看网络状况

   netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。

    最常用的关于netstat的命令就是这两个:

    命令1:netstat -lnp (打印当前系统启动哪些端口)

wKiom1Xaz5uQmCYeAAbOa7dkHg4257.jpg

    命令2:netstat  -an (打印网络连接状况)

wKioL1Xa0cbBd9A1AAg5-mHVeOM900.jpg

    这两个命令非常有用,请一定要记住。

    如果您所管理的服务器是一台提供web服务(80端口)的服务器。

    那么您就可以使用 netstat -an | grep 80 查看当前连接web服务的有哪些IP了。


八.抓包工具tcpdump

    有时候,也许您会有这样的需求。

    想看一下某个网卡上都有哪些数据包,尤其是当您初步判定您的服务器上有流量***。

    这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在***您了。

    命令:tcpdump -nn -i eth0

wKioL1Xa1YbgjkNTAAldentFaW8789.jpg    

    如果没有tcpdump 这个命令,需要用 yum install -y tcpdump 命令去安装一下。

    上例中第五列和第六列显示的信息为哪一个IP+port在连接哪一个IP+port。

    后面的信息是该数据包的相关信息。

    如果不懂也没有关系,毕竟我们不是专门搞网络的,而这里需要关注的只是第五列以及第六列。

    -i 选项后面跟设备名称,如果您想抓eth1网卡的包,后面则要跟eth1.至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。

    

    命令:tcpdump -nn -c n(抓n个数据包)

wKiom1Xa5mGgzXQeAAS96lIIpk8012.jpg    

    命令:tcpdump -nn port n(只抓n端口的数据包)

wKiom1Xa5zOhbOgxAAViAGKfw3c541.jpg    

    命令:tcpdump -nn  tcp(抓指定协议的数据包)

wKiom1Xa6ELj5vKXAAjomdMBDU0432.jpg    

    命令:tcpdump -nn tcp and port n host ****(ip)-w [指定的文件]把抓的包记录到文件里去

wKioL1Xa7uji1WAAAAHBXjwFrao818.jpg

    这里的1.cap无法用cat等文本工具查看,只能通过wireshark工具查看

    (注:想要抓到一个完整的数据包要加上-s0选项!!)


    这里说一下另外一个抓包工具。

    命令:tshark -nn(既能在linux上使用,又可以在windows上使用)

    运行这个命令前,安装一下:yum install -y wireshark

    (注:

    如果你不记得这个安装包的名字,可以用这个命令来查看想要安装的软件的名称

    rpm qf `which [想要安装的压缩包]`)

    

    接下来这个命令可以更加形象具体清楚的看清楚抓包过程:(务必牢记)

    命令:tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

wKiom1Xa8xDxGl1sAAX1cbOB-ok707.jpg    

    这个看上去是不是舒服了很多?

    能够清楚的看清时间,来源ip,访问目标的host,GET(POST),路径(是查看图片还是其他的)


九.Linux的防火墙

    命令1:selinux

    Selinux是Redhat/CentOS系统特有的安全机制。

    所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。

    关闭selinux的方法为,使 “SELINUX=disabled”, 默认为 enforcing

wKiom1Xb5_KTP1Q-AAIqnCddbtk761.jpg

    保存该配置文件后,重启机器方可生效,临时关闭selinux的命令为:setenforce 0

    我们可以使用 getenforce 命令获得当前selinux的状态


    命令2:iptables

    Iptables是linux上特有的防火墙机制,其功能非常强大。

    作为一个网络管理员,iptables是必要要熟练掌握的。

    但是作为系统管理员,我们也应该会最基本的iptables操作,认识iptables的基本规则。


    CentOS上默认是设有iptables规则的,这个规则虽然很安全,但是对于我们来说没有用。

    反而会造成某些影响,所以建议您先清除规则,然后把清除后的规则保存一下:

    语法:

    iptables -nvL

    iptables -F; /etc/init.d/iptables save

wKioL1Xb7uGgCJfnAAItApd94Xg093.jpg

    

    iptalbes的三个表

    1.filter 这个表主要用于过滤包的,是系统预设的表,这个表也是用的最多的。

    内建三个链INPUT、OUTPUT以及FORWARD。

    INPUT作用于进入本机的包;

    OUTPUT作用于本机送出的包;

    FORWARD作用于那些跟本机无关的包。

    2.nat 主要用处是网络地址转换,也有三个链。

    PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址。

    OUTPUT链改变本地产生的包的目的地址。

    POSTROUTING链在包就要离开防火墙之前改变其源地址。

    3.mangle 这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。

    

    iptables的基本语法

    1.查看规则。

    命令:iptables -t [表名] -nvL

wKiom1XcEEHCV26RAAHCPbNxRRo799.jpg

    如果没有加上-t选项,则默认查看filter表的规则

wKioL1XcEsbzNEetAAHOeslxFhM792.jpg

    2.清除规则

    命令1:iptables -F

    命令2:iptables -Z

    不加-t默认是针对表filter来操作的。

    -F 表示把所有规则全部删除;

    -Z 表示把包以及流量计数器置零。


    3.增加一条规则

    命令:iptables -A INPUT -s [ip] -p tcp --sport 1234 -d [ip] --dport 80 -j DROP

    -A:增加一条规则;

    -I:插入一条规则;

    -D:删除一条规则;

    -s:后面跟源地址;

    -p:后面跟协议(tcp,udp,icmp);

    --sport/--dport:后面跟源端口和目标端口;

    -d:后面跟目的ip(主要针对内网或者外网);

    -j:后跟动作(DROP即把包丢掉,REJECT即包拒绝;ACCEPT即允许包);

    -i:指定网卡


    注:这里我们要说下-A和-I的区别

    -A和-I的作用是一样的,都是增加一条规则。

    它们的不同之处在于:

    -I 为插入,新增加的规则会在规则列表的最上面出现;

    -A为增加,新增加规则会在规则列表的最下面出现;

    而且, -I插入的规则比-A增加的规则优先生效。

wKioL1XcGg-S6VqdAAPIGRJriTo835.jpg

    那么,我们来举几个例子更加形象的说明一下吧。

    命令1:iptables -I INPUT -s 1.1.1.1 -j DROP

    插入一条规则,把来自1.1.1.1的所有数据包丢掉。

    

    命令2:iptables -D INPUT -s 1.1.1.1 -j DROP

    删除刚刚插入的规则。

    注意要删除一条规则时,必须和插入的规则一致。

    也就是说,两条iptables命令,除了-I 和-D不一样外,其他地方都一样。

    

    命令3:iptables -I INPUT -s 2.2.2.2 -p tcp --dport 80 -j DROP

    把来自2.2.2.2 并且是tcp协议到本机的80端口的数据包丢掉。

    这里要说的是,--dport/--sport 必须要和-p选项一起使用,否则会出错。

    

    命令4:iptables -I OUTPUT -p tcp -d 10.0.2.34 -dport 22 -j DROP

    把发送到10.0.2.34的22端口的数据包丢掉


    命令5:iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

    上面这行命令把来自192.168.1.0/24这个网段的并且作用在eth0上的包放行。

    


    有时候您的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。

    其实有一种比较简单的方法:

    命令6:iptables -nvL --line-numbers

wKioL1XcM_bx_x7qAAIA8H6mPPM923.jpg

    想要删除某一条规则使用如下命令:

    命令:iptables -D INPUT 1

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

    再次查看刚才的规则,已经没有了:

wKioL1XcNNrx2KvTAAMakRf331Q510.jpg

    

    iptables还有一个选项经常用到,-P(大写)选项,表示预设策略。 

    命令: iptables -P INPUT DROP

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

  注意:

  如果您在连接远程服务器。

  千万不要随便敲这个命令。

  因为一旦您敲完回车您就会断掉。

    本人深受其害,弄得putty无法使用,如果你和我一样运行了这条命令,不要着急,用下面这个命令:

    命令:iptables -P INPUT ACCEPT 

    这样就能恢复成原始状态(不能使用-F参数),这样你就可以继续使用远程了


    下面针对一个小需求讲述一下这个iptables规则如何设定。

    需求:

    只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT。

    然后针对192.168.137.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。

    这个需求不算复杂,但是因为有多条规则,所以最好写成脚本的形式。

    脚本内容如下:wKiom1XcPAnxqGCyAAK4Jj4VJ20038.jpg

    关于icmp的包有一个比较常见的应用:

    命令:iptables -I INPUT -p icmp --icmp-type 8 -j DROP

    --icmp-type 这个选项是要跟-p icmp 一起使用的,后面指定类型编号。

    这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机。这个有必要记一下。


    以上的一些操作全部都是针对于filer表,接下来我们来说一说nat表

    那么nat表下有哪几个链呢?

    命令:iptables -t nat -nvL

wKioL1XdILiD0VicAAHKBHMyx4k465.jpg

    可以看出nat表有3个链,分别为:PRERPUTING、POSTOUTING、OUTPUT

    那么我们来解释下这三个链的含义:

    PRERPUTING作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。

    POSTOUTING在包就要离开防火墙之前改变其源地址。

    OUTPUT改变本地产生的包的目的地址。


    可能这么说,不能明白什么意思,举个例子吧。

    在日常生活中相信您接触过路由器吧,它的功能就是分享上网。

    本来一根网线过来(其实只有一个公网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互通)?


    命令1:echo "1" > /proc/sys/net/ipv4/ip_forward

    命令2:iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

    

    命令1的目的是为了打开路由转发功能,否则无法实现我们的应用。

    命令2则是iptables对nat表做了一个IP转发的操作。

    -o 选项后跟设备名,表示出口的网卡,MASQUERADE表示伪装的意思。 


    总上,iptables下的3个表的意思已经很明白了

    filter表:主要用来限制进入本机的包和出去的包

    nat表:主要用于网络地址转换,比如家用的小路由器就是用nat表实现的

    mangle表:主要用来给包打标记


    3.保存以及备份iptalbes规则

    咱们设定的防火墙规则只是保存在内存中,并没有保存到某一个文件中,也就说当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下。

    命令:service iptables save

wKiom1XdJ4-R1eOqAAIhg7q5PKA103.jpg

    提示防火墙规则保存在了/etc/sysconfig/iptables文件内,这个文件就是iptables的配置文件了。

    所以日后,如果您遇到备份防火墙规则的任务,其实就是要拷贝一份这个文件的副本。


    有时,我们会需要把防火墙所有规则都清除,使用 iptables -F 命令虽然可以。

    但是最好的办法是把防火墙服务停止:

    命令:service iptables stop

    这命令我就不执行出来了。执行这命令后防火墙就失效了,但是一旦重新设定规则后(哪怕只有一条),防火墙服务会自动开启。

    用来备份防火墙的命令:参考阿铭电子档。


十.Linux的任务计划

   这部分内容非常非常非常非常非常非常重要!!!!!!!!

    其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的。

    那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。

    命令:crontab [-uelr]

    -u:指定某个用户,不加-u表示当前用户;

    -e:制定计划任务;

    -l:列出计划任务;

    -r:删除计划任务。

    

    命令:crontab -e

wKioL1XdV6nhX0oxAADxX3tYIkA892.jpg

    使用 crontab -e 来进行编写任务计划,这实际上是使用vim工具打开了crontab的配置文件。

    我们写下如下内容:

wKiom1XdV5_RPXH5AADhS5w_bcI842.jpg

    每个字段的数字分表表示什么呢?

    从左到右,依次为:分,时,日,月,周,命令行。而上面的例子的含义是:

    在8月26日(这一天必须是星期3)的14点10分执行命令 echo "welcome to BJ" > /root/cron.log


    命令crontab -e 实际上是打开了 “spacer.gifar/spool/cron/username”

     (如果是root则打开的是spacer.gifar/spool/cron/root)这个文件。

    使用的是vim编辑器,所以要保存的话则在命令模式下输入:wq即可。

    但是,您千万不要直接去编辑那个文件,因为可能会出错。

    所以一定要使用 crontab -e 来编辑。

    查看已经设定的任务计划使用 crontab  -l 命令 。

wKioL1XdWXKgUQLcAAFNt6qUkHQ308.jpg

    删除计划任务就是:

    命令:crontab -r

wKioL1XdW2HRaVTGAAD-JpKBWlo253.jpg

    我们在以后执行任务的时候可能出现这些问题:

    1.每天执行一次;

    2.每隔几个小时执行一次;

    3.每天几点,几点,几点执行一次;

    4.每天几点到几点一直执行;


    1.用* **表示;

    2.每隔n小时,就是用全部小时(0-23)去除以n;

    3.当遇到多个数(分钟、小时、月、周)例如第5题,则需要用逗号隔开。

    4.而时间段是可以用 n-m 的方式表示。

wKioL1XdYtjwuMJdAAGYo60GlXw506.jpg

    等设置好了所有的计划任务后需要查看一下crond服务是否启动:

    命令:service crond status

wKioL1XdY0Khhp9_AADxwRyYeqE216.jpg

    如果是停止状态,则需要启动它:

    命令:service crond start


十一.Linux的系统服务管理

    1.ntsysv服务配置工具

    用来配置哪些服务开启或者关闭,有点类似图形界面,不过是使用键盘来控制的。

    如果没有这个命令请使用 yum  install  -y  ntsysv 安装它。

wKiom1XddTyicCzUAALNdiHgohM788.jpg

    安装好后,直接运行命令 ntsysv 回车后弹出一个配置界面:

wKiom1XddaeAAjDQAAHX-_lF2Ho853.jpg

    按键盘的上下方向键可以调节红色光标,按空格可以选择开启或者不开启。

    如果前面的中括号内显示有 * 则表示开启否则不开启。

    通过这个工具也可以看到目前系统中所有的服务。

    建议除 “crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl” 外其他服务全部停掉。

    选择好后,按 “tab” 键选择 “确定”, 然后回车,需要重启机器才能生效。


    2.chkconfig服务管理工具

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

wKioL1XdfsWzqEzNAAHfkBNnIdQ705.jpg

    这就是系统所有的预设服务了。

    系统预设服务都是可以通过这样的命令实现 service [服务名] [start|stop|restart] 

    服务名就是/etc/init.d/目录下的这些文件了。

    除了可以使用 service  crond start 启动crond外,还可以使用 /etc/init.d/crond start 来启动。


    我们可以使用 chkconfig --list 列出所有的服务以及每个级别是否开启:

wKioL1Xdf5mQzoz-AATQCQG86DM351.jpg

    这里的级别(0,1,2,3,4,5,6)就是 /etc/inittab 里面的那几个启动级别了。

    0、1、6运行级别被系统保留:

    其中0作为shutdown动作,1作为重启至单用户模式,6为重启;

    在一般的Linux系统实现中,都使用了2、3、4、5几个级别;

    在CentOS系统中。

    2 表示无NFS支持的多用户模式;

    3 表示完全多用户模式(也是最常用的级别);

    4 保留给用户自定义;

    5 表示图形登录方式。

    

    我们可以使用grep命令把我们想要看的服务过滤出来:

    命令:chkconfig --list | grep 服务名

wKioL1XdgsCim0S0AAEVqFoWBio734.jpg

    这样我们只是看到了各服务在每个级别下是否开启,那么如何去更改哪个级别下是否开启呢?

    命令:chkconfig --level n [服务名] [on/off]

wKioL1XdhAWgitpZAAHidj_1r4M983.jpg

    --level后还可以跟多个级别

    命令:chkconfig --level n1n2n3 [服务名] [on/off]

wKiom1XdgqTibW2LAAE5QWws9TI841.jpg

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

    命令:chkconfig [服务名] [on/off]


    chkconfig 还有一个功能就是可以把某个服务加入到系统服务。

    即可以使用 service [服务名] [start] 这样的形式。

    并且可以在 chkconfig --list 中查找到。当然也能删除掉。

wKiom1Xdg9TRLbz4AAF63Zec_hY849.jpg


十二.linux系统日志

    我常查看的日志文件为spacer.gifar/log/message

    它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。

    IO错误、网络错误和其他系统错误都会记录到这个文件中。

    其他信息,比如某个人的身份切换为root以及用户自定义安装的软件(apache)的日志也会在这里列出。

    通常,spacer.gifar/log/messages是在做故障诊断时首先要查看的文件。

    那您肯定会说了,这么多日志都记录到这个文件中,那如果服务器上有很多服务岂不是这个文件很快就会写的很大,没错,但是系统有一个日志轮询的机制。

    每星期切换一个日志,变成message.xxxxxxxx, message.xxxxxxxx, ... messages.xxxxxxxx 连同messages一共有5个这样的日志文件。这里的xxxxxxxx就是按照日期的格式生成的文件。

    在CentOS5里,这个后缀并不是日期而是数字1,2,3,4. 这是通过logrotate工具的控制来实现的,它的配置文件是/etc/logrotate.conf如果没有特殊需求请不要修改这个配置文件。

wKiom1Xeql6R6KUBAAIsNWbr_j4366.jpg

    spacer.gifar/log/messages是由syslogd这个守护进程产生的。

    如果停掉这个服务则系统不会产生spacer.gifar/log/messages,所以这个服务不要停。

    Syslogd服务的配置文件为/etc/syslog.conf这个文件定义了日志的级别。


    除了关注spacer.gifar/log/messages外,你还应该多关注一下 dmesg 这个命令。

    它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的。

    命令:dmesg | less

wKioL1Xerv6gc5E_AAih99fMHoY536.jpg    命令:last

wKiom1Xer5jylElxAAJwGMwl7Zs377.jpg

    last命令用来查看登录Linux历史信息,从左至右依次为账户名称、登录终端、登录客户端ip、登录日期及时长。

    last命令输出的信息实际上是读取了二进制日志文件spacer.gifar/log/wtmp, 只是这个文件不能直接使用cat, vim, head, tail等工具查看。


    另外一个和登陆信息有关的日志文件为spacer.gifar/logspacer.gifcure, 该日志文件记录验证和授权等方面的信息。

    比如ssh登陆系统成功或者失败,都会把相关信息记录在这个日志里。


    介绍下平时需要查看的日志。

    /var/log/messages:系统里面大部分日志都是在spacer.gifar/log/messages里面,查问题时,这个日志是不能忽略的,比如内核相关的问题,当你的机器访问量特别大时,这个日志里面就会记录一些内核异常的错误。

    /var/log/wtmp:查看用户的登陆历史(用last)

    /var/log/btmp:查看登陆历史中没有正确登陆的IP(用lastb)

    /var/log/maillog:当然是记录邮件相关的日志,当你发邮件不成功不正常的时候就查看这个日志。

    /var/log/secure:是安全相关的日志,该日志文件记录验证和授权等方面的信息,比如:可以判断linux机器有没有被暴力破解root密码,或者ftp不能正常登陆时,就看这个日志。

    /var/log/dmesg:这个是系统开机时,记录的一些硬件信息,很少看这个日志。


十三.xargs与exec

   1. xargs应用

    举个例子来说吧。

    xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除。

    命令:find . -type f -mtine +10 | xargs rm -f 


    我们举另外一个例子。

    查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak。

    正常情况下,我们不得不写脚本去实现,但是使用xargs就一步。

    命令:find ./ -type f -name "*.txt" | xargs -i mv {} {}_bak


    2.exec应用

    使用find命令时,经常使用一个选项就是这个-exec了。

    可以达到和xargs同样的效果。

    举个例子,查找当前目录创建时间大于10天的文件并删除:

    命令:find . -type f -mtime +10 -exec rm -rf {} \;


    这个命令中也是把{}作为前面find出来的文件的替代符,后面的 \; 的脱意符。

    不然shell会把分号作为该行命令的结尾


十四.screen工具介绍

    有时候,我们也许会有这样的需求,要执行一个命令或者脚本,但是需要几个小时甚至几天。

    这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?

    您可以把命令或者脚本丢到后台运行,不过也不保险。

   

    那么使用screen可以帮我们做什么呢?

    1.把一个要执行很久的任务放到screen里可以随时查看该任务的进度

    2.screen不限时间和地域,何时何地都可以查看

    3.可以把一些无法丢到后台执行的任务放到screen中执行


    下面就介绍两种方法来避免这样的问题发生。


    1.使用nohup

wKioL1Xe3OqCu5fzAAEwk03TtYo153.jpg

    直接加一个 ‘&’ 虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的。

    而在前面加上 nohup 就没有问题了,nohup的作用就是不挂断地运行命令。


    2.screen工具的使用

    screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。

    screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口。

    在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。

   

    第一次使用这个命令的时候肯定是没有安装的,那么就要安装它:

    命令:yum install -y screen

wKioL1Xe3fzRZd3rAAKMBUmxz4I823.jpg

    (1)打开一个会话,直接输入screen命令然后回车,进入screen会话窗口。

    命令:screen

wKioL1Xe3mbSIH2bAADQmVFDITk145.jpg

    然后将要执行的命令放入其中执行,就不用担心中途断电的一些意外了

    (2)按ctrl+a和d,退出screen,但仅仅是退出,并不结束screen。若要退出screen,按ctrl+d或者输入exit即可

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

    命令:screen -ls

wKiom1Xe3Y2BNeD9AAGP8-oRd6I862.jpg

    (4)退出后还想再次登录某个screen会话,使用sreen -r [screen 编号]。

    这个编号就是上例中那个1802/1826/1789。当只有一个screen会话时,后面的编号是可以省略的。

    命令:screen -r [screen编号]

    (5)可以在创建screen的时候,自定义screen的名字

    命令:screen -S [自定义的名字]

wKiom1Xe3_uTZAygAAKj1SjHuHM793.jpg

 

十五.curl命令

    curl可以实现wget的功能

    命令:curl [网址]

wKiom1XfvE3wIiJjAB0VbtKExwI545.jpg

    我们看到这么多的信息(源代码),把这些信息复制到一个文本文档里,然后用浏览器去访问它。

    其实它就是一个html的文档。


    因为这些源代码很多,看上去很繁琐,我们不想看到它,那么:

    命令:curl -I [网址]

wKioL1XfwEazdpV9AAP16VQ0slc266.jpg

    上面这些信息,我们只需要查看它的状态:HTTP,这里我们要注意后面这个200.

    我们叫这个200,叫做状态码。

    常用的状态码有:200 301 302 403 404 502 503等。

    但是,这些状态码当中只有200是正常的OK的

    

    如果出现了301或者302,那么可能因为在服务端设置了跳转。

    这么说可能不明白,举个例子说明下吧!

wKioL1XfwmKgaXDhAAF_QLJovjg472.jpg

    当访问www.lishiming.com的时候就跳转到了liuliang.121.com下


    除了-I,还有其他的命令。比如-x,那么-x什么意思呢?

    -x的意思是代理的意思,IE浏览器里面有个IE选项,有个连接可以设置代理服务器。

    这个代理就是-x的意思了

    有时候因为一些网络原因我们不能访问某个站点,比如google,但是我们可以借助代理实现。

    -x就是指定代理服务器ip的。但我经常把它用作临时改域名指向。

wKioL1XfxeDAK44RAAEe-qcFMuA936.jpg

    我们可以通过代理去上网

    命令:curl -x***.***.***.***:** [网址]


    命令:curl -Iv [网址]

    看看curl的访问过程

wKioL1XfyI-xCuvIAAOe1Tn4bzs622.jpg    

    有时候我们要去访问一个有用户名和密码的站点

    命令:curl -u [用户名]:[密码] [站点/网址]


    如果我们要去下载一个东西的话,类似于wget

    命令:curl -O [要下载的地址]

wKioL1XfzCbAQwAVAAGc-IHJGM0332.jpg

    如果想要把下载下的东西重命名的话

    命令:curl -o [重命名后的名字] [要下载的地址]

wKioL1XfzvixFKRVAAKAODVAD2c684.jpg

    命令:curl -A [标识] www.[标识].com

    -A就是自定义浏览器标识。

    不要把-x的代理,和-A的代理搞混淆。

    -x后面才是我们所谓的代理。

    而-A是user_agent,即浏览器标识,比如IE的,chrome的都有自己的标识。


十六.linux下的数据备份工具rsync

    数据备份,毫无疑问很重要,丢失数据这是作为系统管理员最不应该出现的事故。

    所以,在您以后的系统维护工作中,一定要把数据备份当回事,认真对待。

    在linux系统下数据备份的工具很多,个人认为rsync比较不错。

     从字面上的意思您可以理解为remote sync (远程同步)这样可以让您理解的更深刻一些。

    Rsync不仅可以远程同步数据(类似于scp ),当然还可以本地同步数据(类似于cp)。

    但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在)。

    它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。

    如果您的linux没有rsync命令请使用 yum install -y rsync 安装。

    命令:yum install -y rsync


    命令1:rsync -av 123.txt 192.168.0.101:/data/

                将本地的123.txt备份到192.168.0.101服务端的/data/目录下

    命令2:rsync -av 192.168.0.101:/data/ 123.txt /tmp/

                将192.168.0.101服务端的/data/目录下的123.txt文件备份本本地的/tmp/目录下

    命令3:rsync -av 192.168.0.101::test/data/123.txt /data/    

                将192.168.0.101服务端的test的块设备的/data/目录下的123.txt备份到本地的/data/目录下

    命令4:rsync -av /data/123.txt 192.168.0.101::test/data/

                将本地的/data/目录下的123.txt备份到服务端192.168.0.101的test块设备的/data/目录下


    1. 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还新的文件排除掉,不会覆盖

    选项确实有点多,不过不用担心。

    '-P' 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等

    '-z' 传输的时候要把文件压缩一下,这样可以节省带宽。

    常用的选项页仅仅那么几个: (-a -v --delete --exclude )。


    下面我们举几个例子来看下

    命令:rsync -a test1 test2

wKioL1XjuTHgqHeJAAMZQlW7PNo613.jpg

    建议在使用rsync备份目录时要养成加斜杠的习惯,如果不加上/,容易出现这种情况:

    test1被备份到test2目录下,而不是备份一个完全相同的test2。


    3.rsync的实例应用

    登陆远程机器,使用rsync操作,备份数据

    命令1:rsync -avL [用户名]@[IP]:[备份文件的绝对路径] [需要备份到的目的的绝对路径]

    命令2:rsync -avL [备份文件的绝对路径] [用户名]@[IP]:[需要备份到的目的的绝对路径]

    但是以上两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。

    但是不代表没有解决办法。那就是通过密钥验证,密钥不设立密码就ok了。


    3.1.通过ssh的方式

    假设两个主机,主机1和主机2,我们要把主机1上的数据备份到主机2上。

    首先在主机1上。

    1.命令:ssh-keygen

wKiom1Xj9ebhvWMxAAJ_EU5Zunw141.jpg

    2.在这个过程中会有一些交互的过程,它首先提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)。

    3.把公钥文件的内容拷贝到目标机器主机2上上。

    4.命令:cat .ssh/id_rsa.pub

wKioL1Xj-UHyNI-sAAKM2oty_aw598.jpg

    5.复制主机上/root/.ssh/id_rsa.pub文件内容。

    6.并粘贴到主机的/home/www/.ssh/authorized_keys中:

    7.命令:vim /home/www/.ssh/authorized_keys。

    8.在执行第7步的时候也许您会遇到/home/www/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。

    保存/home/www/.ssh/authorized_keys文件后。

    9.再到主机1上执行命令:ssh www@主机2的IP

    10.现在不用输入密码也能登陆主机2了。

    11.从主机2中退出来,在主机1上执行:

    命令:rsync -av [主机1要备份数据的绝对路径] [用户名]@主机2IP:[主机2要备份的地方]


    有时候会遇到对方机器的port并不是22端口,因为ssh走的是22端口。

    那么我们就要指定其他端口:

    命令1:rsync -avLz -e "ssh -p 端口"  [备份文件的绝对路径] [用户名]@[IP]:[需要备份到的目的的绝对路径]

    命令2:rsync "--rsh=ssh -p xxx” [备份文件的绝对路径] [用户名]@[IP]:[需要备份到的目的的绝对路径]

    如果本机上没有对方机器需要的端口,那么sshd服务配置文件中可以更改 /etc/ssh/sshd_config ,把#Port 22 改为 Port 端口。


    3.2通过后台服务的方式

    这种方式可以理解成这样,在远程主机上建立一个rsync的服务器。

    在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。

    下面就介绍一下,如何去配置一台rsync服务器。


    1.建立并配置rsync的配置文件 /etc/rsync.conf ;

wKiom1XkHnWAqC3aAAF3DHYEbyg238.jpg

    那么详细的说下这些内容:

    'port' 指定在哪个端口启动rsyncd服务,默认是873;

    'log file' 指定日志文件;

    'pid file' 指定pid文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作;

    'address' 指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动;

    '[模块名]' 自定义;

    'path' 指定数据存放的路径

    'use chroot' true/false 默认true,意思是在传输文件以前首先chroot到path参数所指定的目录下。

    这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限。

    并且不能备份指向外部的符号连接所指向的目录文件。

    默认情况下chroot值为true,如果你的数据当中有软连接文件的话建议设置成false。

    'max connections' 指定最大的连接数,默认是0即没有限制

    'read only' ture|false 如果为true则不能上传到该模块指定的路径下

    'list' 指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏

    'uid/gid' 指定传输文件时,以哪个用户/组的身份传输

    'auth users' 指定传输时要使用的用户名

    'secrets file' 指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证,注意该密码文件的权限一定要是600

    'hosts allow' 指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开

   

    2.编辑secrets file,保存后要赋予600权限,最好是400权限,如果权限不对,不能完成同步;

    命令:vim /etc/rs.passwd

    密码格式:用户名:密码


    3.启动rsyncd服务;

    配置完文件后就要启动。

    命令:rsync --daeman

    

    4.启动后,查看一下日志,并查看端口是否启动;

    命令:cat /var/log/rsync.log

    命令:netstat -lnp |grep 873

    如果想开机启动,请把 rsync --daemon --confg=/etc/rsyncd.conf 写入到/etc/rc.d/rc.local文件

    

    5.到另一台机器上测试;