笔者在前面介绍的内容都为linux系统基础类的,如果你现在把前面的内容全部很好的掌握了,那最好了。不过笔者要说的是,即使你完全掌握了,你现在还是不能作为一名合格的linux系统管理员的,毕竟系统管理员要会做的事情太多了。本章以及后面章节笔者会陆续教给你作为linux系统管理员所必备的知识。只要你熟练掌握那绝对可以胜任一个最初级的管理员职位,不过只是初级的,因为你还需要在日常的管理工作中获得成长。
相信所有的linux管理员最常用的命令就是这个w了,该命令显示的信息还是蛮丰富的。第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。第二行开始以及下面所有的行,告诉我们的信息是,当前登录的都有哪些用户,以及他们是从哪里登录的等等。其实,在这些信息当中,笔者认为我们最应该关注的应该是第一行中的load average:后面的三个数值。
第一个数值表示1分钟内系统的平均负载值;第二个数值表示5分钟内系统的平均负载值;第三个数值表示15分钟系统的平均负载值。这个值的意义是,单位时间段内CPU活动进程数。当然这个值越大就说明你的服务器压力越大。一般情况下这个值只要不超过你服务器的cpu数量就没有关系,如果你的服务器cpu数量为8,那么这个值若小于8,就说明你的服务器没有压力,否则就要关注一下了。到这里你肯定会问,如何查看服务器有几个cpu?
上面讲的w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力,但是具体是哪里(CPU,内存,磁盘等)有压力就无法判断了。通过vmstat就可以知道具体是哪里有压力。vmstat命令打印的结果共分为6部分:procs, memory, swap, io, system, cpu.请重点关注一下红色标出的项。
r:表示运行和等待cpu时间片的进程数,如果长期大于服务器cpu的个数,则说明cpu不够用了;
b:表示等待资源的进程数,比如等待I/O,内存等,这列的值如果长时间大于1,则需要你关注一下了;
以上所介绍的各个参数中,笔者经常会关注r列,b列,和wa列,三列代表的含义在上边说得已经很清楚。IO部分的bi以及bo也是我要经常参考的对象。如果磁盘io压力很大时,这两列的数值会比较高。另外当si, so两列的数值比较高,并且在不断变化时,说明内存不够了,内存中的数据频繁交换到交换分区中,这往往对系统性能影响极大。
笔者用vmstat时,经常用这样的形式,vmstat 1 5表示每隔1秒钟打印一次系统状态,连续打印5次。当然你也可以vmstat 1 表示每隔1秒钟打印一次系统状态,一直打印,除非你按ctrl + c强制结束。
这个命令用于动态监控进程所占系统资源,每隔3秒变一次。这个命令的特点是把占用系统资源(CPU,内存,磁盘IO等)最高的进程放到最前面。top命令打印出了很多信息,包括系统负载(load average)、进程数(Tasks)、cpu使用情况、内存使用情况以及交换分区使用情况。其实上面这些内容可以通过其他命令来查看,所以用top重点查看的还是下面的进程使用系统资源详细状况。这部分东西反映的东西还是比较多的,不过需要你关注的也就是几项:%CPU, %MEM, COMMAND这些项目所代表的意义,不用笔者介绍相信你也能看懂吧。
另外笔者使用top命令时还常常使用-bn1这个组合选项,它表示非动态打印系统资源使用情况,可以用在脚本中,你不妨记一下,以后也许你会用得到。
sar命令很强大,它可以监控系统所有资源状态,比如平均负载、网卡流量、磁盘状态、内存使用等等。它不同于其他系统状态监控工具的地方在于,它可以打印历史信息,可以显示当天从零点开始到当前时刻的系统状态信息。如果你系统没有安装这个命令,请使用”yum install -y sysstat”命令安装。初次使用sar命令会报错,那是因为sar工具还没有生成相应的数据库文件(时时监控就不会了,因为不用去查询那个库文件)。它的数据库文件在” /var/log/sa/”目录下,默认保存9天。因为这个命令太过复杂,所以笔者只介绍几个。
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/目录下的。
关于sar的介绍笔者不愿写太多,毕竟介绍太多会给你带来更多的压力,其实笔者介绍这个命令的目的只是让你学会查看网卡流量(这是非常有用的)。如果你很感兴趣那就man一下吧,它的用法太多了。
只要你敲一个free然后回车就可以当前系统的总内存大小以及使用内存的情况。从上图中可看到当前系统内存总大小为235128(单位是k)已经使用120368,剩余94760。其实线,线。这是因为系统初始化时,就已经分配出很大一部分内存给缓存,这部分缓存用来随时提供给程序使用,如果程序不用,那这部分内存就空闲。所以,查看内存使用多少,剩余多少请看第二行的数据。另外你还可以加-m或者-g选项分别以M或G为单位打印内存使用状况。
作为系统管理员,一定要知道你所管理的系统都有那些进程在运行,在windows下只要打开任务管理器即可查看。在linux下呢?其实在上面介绍的top命令就可以,但是不够专业,当然还有专门显示系统进程的命令。
对了,就是这个ps aux。笔者也经常看到有的人喜欢用ps -elf大同小异,显示的信息基本上是一样的。 ps命令还有更多的用法,笔者不再做介绍,因为你只要会用这个命令就足够了,请man一下。下面介绍上图上出现的几个参数的意义。
PID:进程的id,这个id很有用,在linux中内核管理进程就得靠pid来识别和管理某一个程,比如我想终止某一个进程,则用kill进程的pid,有时并不能杀掉,则需要加一个-9选项了kill -9进程pid
T已经停止或者暂停的进程,如果我们正在运行一个命令,比如说sleep 10,如果我们按一下ctrl -z让他暂停,那么我们用ps查看就会显示T这个状态
Z僵尸进程,杀不掉,打不死的垃圾进程,占系统一小点资源,不过没有关系。如果太多,就有问题了。一般不会出现。
这个ps命令是笔者在工作中用的非常多的命令之一,所以请记住它吧。关于ps命令的使用,笔者经常会连同管道符一起使用,用来查看某个进程或者它的数量。
netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。笔者最常用的关于netstat的命令就是这个netstat -lnp(打印当前系统启动哪些端口)以及netstat -an(打印网络连接状况)这两个命令非常有用,请一定要记住。
如果你所管理的服务器是一台提供web服务(80端口)的服务器,那么你就可以使用netstat -an grep 80开查看当前连接web服务的有哪些IP了。
有时候,也许你会有这样的需求,想看一下某个网卡上都有哪些数据包,尤其是当你初步判定你的服务器上有流量攻击。这时,使用抓包工具来抓一下数据包,就可以知道有哪些IP在攻击你了。
如果你没有tcpdump这个命令,需要用yum install -y tcpdump 命令去安装一下。上图中第三列和第四列显示的信息为哪一个IP+port在连接哪一个IP+port,后面的信息是该数据包的相关信息,如果不懂也没有关系,毕竟你不是专门搞网络的,而这里需要你关注的只是第三列以及第四列。-i选项后面跟设备名称,如果你想抓eth1网卡的包,后面则要跟eth1.至于-nn选项的作用是让第三列和第四列显示成IP+端口号的形式,如果不加-nn则显示的是主机名+服务名称。
ifconfig类似与windows的ipconfig,不加任何选项和参数只打印当前网卡的IP相关信息(子网掩码、网关等)
如果想修改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这个命令来重启网卡。
在linux系统中,网卡是可以设定多重IP的,笔者曾经管理的一台服务器的eth1就设定了5个IP,实在是够变态的。
再次查看eth0上就有两个IP了。这里你要注意一下,文件名(ifcft-eth0:1)写成什么都无所谓,但是文件内的DEVICE=eth0:1一定要按照这样的格式写,否则你启动不起来网卡。
mii-tool这个命令用来查看网卡是否连接,如图显示link ok等字样说明连接正常,否则会显示no link字样,下图是笔者所管理的一台服务器,eth1网卡没有连接。
这是因为使用的是虚拟网卡,不支持这个工具查看。不用多关注此,你记住这个mii-tool命令即可,它可是会经常用到的。
当装完系统后,默认主机名为localhost,使用hostname就可以知道你的linux的主机名是什么。
DNS是用来解析域名用的,平时我们访问网站都是直接输入一个网址,而dns把这个网址解析到一个IP。关于dns的概念,如果你很陌生的话,那就去网上查一下吧。在linux下面设置dns非常简单,只要把dns地址写到一个配置文件中即可。这个配置文件就是f
它的格式如上图,每一行作为一条记录,分成两部分,第一部分是IP,第二部分是域名。关于hosts文件,有几点需要你注意:
Selinux是Redhat/CentOS系统特有的安全机制。不过因为这个东西限制太多,配置也特别繁琐所以几乎没有人去真正应用它。所以装完系统,我们一般都要把selinux关闭,以免引起不必要的麻烦。关闭selinux的方法为:
Iptables是linux上特有的防火墙机制,其功能非常强大,然而笔者在日常的管理工作中仅仅用到了一两个应用,这并不代表iptables不重要。作为一个网络管理员,iptables是必要要熟练掌握的。但是作为系统管理员,我们也应该会最基本的iptables操作,认识iptables的基本规则。
filter:这个表主要用于过滤包的,是系统预设的表,这个表也是笔者用的最多的。内建三个链INPUT、OUTPUT以及FORWARD。INPUT作用于进入本机的包;OUTPUT作用于本机送出的包;FORWARD作用于那些跟本机无关的包。
nat:主要用处是网络地址转换,也有三个链。PREROUTING链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火墙之前改变其源地址。该表笔者用的不多,但有时候会用到。
mangle:这个表主要是用于给数据包打标记,然后根据标记去操作哪些包。这个表几乎不怎么用。除非你想成为一个高级网络工程师,否则你就没有必要花费很多心思在它上面。
如上图,-t后面跟表名,-nvL即查看该表的规则,其中-n表示不针对IP反解析主机名;-L表示列出的意思;而-v表示列出的信息更加详细。如果不加-t,则打印filter表的相关信息。
不加-t默认是针对表filter来操作的,-F表示把所有规则全部删除;-Z表示把包以及流量计数器置零(这个笔者认为很有用)。
这就是增加了一条规则,省略-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并且是tcp协议到本机的80端口的数据包丢掉。这里要说的是,--dport/--sport必须要和-p选项一起使用,否则会出错。
现在你明白iptables -Z的意义了吧。至于FORWORD链的应用笔者几乎没有用到过,所以不再举例。再总结一下各个选项的作用:
上例中表示,把来自10.0.2.0/24这个网段的并且作用在eth0上的包放行。有时候你的服务器上iptables过多了,想删除某一条规则时,又不容易掌握当时创建时的规则。其实有一种比较简单的方法:
-P后面跟链名,策略内容或者为DROP或者为ACCEPT,默认是ACCEPT。注意:如果你在连接远程服务器,千万不要随便敲这个命令,因为一旦你敲完回车你就会断掉。
看到上图中红框标出的部分了吧,现在所有进来的数据包全部DROP了。这个策略一旦设定后,只能使用iptables -P ACCEPT才能恢复成原始状态,而不能使用-F参数。下面笔者针对一个小需求讲述一下这个iptables规则如何设定。
需求:只针对filter表,预设策略INPUT链DROP,其他两个链ACCEPT,然后针对10.0.2.0/24开通22端口,对所有网段开放80端口,对所有网段开放21端口。
--icmp-type这个选项是要跟-p icmp一起使用的,后面指定类型编号。这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机。这个有必要记一下。
其实,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系统工程师的。
也许你不知道,咱们设定的防火墙规则只是保存在内存中,并没有保存到某一个文件中,也就说当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下。
它会提示你把规则保存在了/etc/sysconfig/iptables文件内。其实,这个文件就是iptables的配置文件了,你不妨查看一下它。
红线部分就是咱们刚才设定那条规则!有时可能因为我们设置防火墙规则有误导致服务器出问题,这时候不妨先备份一下这个配置文件,然后停止防火墙服务。
我还可以使用iptables-save filename这条命令来保存一个防火墙规则,这样就可以起到备份的作用了。要想恢复这个规则使用下面这个命令即可。
这部分内容太重要了,其实大部分系统管理工作都是通过定期自动执行某一个脚本来完成的,那么如何定期执行某一个脚本呢?这就要借助linux的cron功能了。
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
Cron的这部分内容并不难,你只要会了这6道练习题,你就算掌握它了。这里要简单说一下,每隔8小时,就是用全部小时(0-23)去除以8,你仔细想一下结果,其实算出来应该是0,8,16三个数。当遇到多个数(分钟、小时、月、周)例如第5题,则需要用逗号隔开。而时间段是可以用-的方式表示的。等设置好了所有的计划任务后需要查看一下crond服务是否启动,如果没有启动,需要启动它。
如果你对windows非常熟悉的话,相信你肯定配置过开机启动的服务,有些服务我们日常用不到则要把它停掉,一来可以节省资源,二来可以减少安全隐患。在linux上同样也有相关的工具来管理系统的服务。
用来配置哪些服务开启或者关闭,有点想图形界面,不过是使用键盘来控制的。如果没有这个命令请使用yum install -y ntsysv安装它。
敲完这个命令后则显示出如上图中的画面。在屏幕的最上面有Red Hat等字样,这是在告诉我们这个工具是由Red Hat公司开发的。按键盘的上下方向键可以调节红色光标,按空格可以选择开启或者不开启,如果前面的中括号内显示有*则表示开启否则不开启。通过这个工具也可以看到目前系统中所有的服务。建议除crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl外其他服务全部停掉。选择好后,按tab键选择ok然后回车。需要重启机器才能生效。
再看看这个chkconfig命令,它不仅可以列出来所有的服务,还可以详细到每个级别。这里的级别(0,1,2,3,4,5,6)就是inittab里面介绍的那几个启动级别了。
用--level指定级别,后面是服务名,然后是off或者on,--level后还可以跟多个级别。
另外这个chkconfig还有一个功能就是可以把某个服务加入到系统服务,即可以使用service服务名start这样的形式,并且可以在chkconfig --list中查找到。当然也能删除掉。
这个功能常用在把自定义的启动脚本加入到系统服务当中。关于系统服务就讲这些内容,其实还有很多内容笔者没有介绍,道理很简单,一来讲多了你不能消化二来讲多了你也用不上。
数据备份,不用说太多吧,毫无疑问很重要。笔者就曾经有过一次非常痛苦的经历,备份策略没有做好,结果磁盘坏掉数据丢失,简直是撕心裂肺的痛呀。还好数据重要性不是特别高,即使是不高也是丢失了数据,这是作为系统管理员最不应该出现的事故。所以,在你以后的系统维护工作中,一定要把数据备份当回事,认真对待。在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/)
当建立连接后,是需要输入密码的。如果手动去执行这些操作还好,但是如果是写在脚本中怎么办?这就涉及到添加信任关系了,该部分内容稍后会详细介绍。
笔者在一开始举的两个例子,第一个例子即为第一种格式,第二个例子即为第二种格式,但不同的是,笔者并没有加user@host如果不加默认指的是root 。第三种格式是从远程目录同步数据到本地。第四种以及第五种格式使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同,稍后详细介绍。
-a:归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD,-a选项后面可以跟一个--no-OPTION这个表示关闭-rlptgoD中的某一个例如-a --no-l等同于-rptgoD
-r:对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-L:向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
--exclude=PATTERN:指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
这里有一个问题,就是本来想把test1目录直接拷贝成test2目录,可结果rsync却新建了test2目录然后把test1放到test2当中。为了避免这样的情况发生,可以这样做:
加一个斜杠就好了,所以笔者建议你在使用rsync备份目录时要养成加斜杠的习惯。在上面讲了-a选项等同于-rlptgoD,而且-a还可以和--no-OPTION一并使用。
笔者加上-v选项来获得更多的信息,上例中因为没有使用-r选项导致只能拷贝目录但不能拷贝目录下面的内容(英文翻译过来就是“忽略了目录test1/.”,其中test1/.指的就是test1目录内部的所有文件),所以虽然创建了test2目录,但是test2目录为空。下面再看看那个-l选项的作用。
使用-v选项看来就是方便呀,上例告诉我们跳过了非普通文件1.sh,其实1.sh是一个软连接文件,如果不使用-l选项则不会理会软连接文件的。
果线.sh的影子。当然加上-l选项则会把软连接文件给拷贝过去,但是软连接的目标文件却没有拷贝过去,有时候咱们指向拷贝软连接文件所指向的目标文件,那这时候该怎么办呢?
首先查看一下test1/1和test2/1的访问时间(肯定是一样的),然后使用touch修改一下test2/1的访问时间(此时test2/1要比test1/1的访问时间晚了一些),如果不加-u选项的线的访问时间变成和test1/1的访问时间一样。这样讲也许你会迷糊,不妨看一看。
看到了吧,本来test2/1的访问时间已经不同于test1/1的访问时间了,但是同步后访问时间又一致了。
如果不使用--delete选项当SRC有文件删除时,DST是不会删除的,只有加上--delete选项后才能删除掉。还有一种情况就是如果在DST增加文件了,而SRC当中没有这些文件,同步时加上--delete选项后同样会删除新增的文件。
最后简单总结一下,平时你使用rsync同步数据的时候,使用-a选项基本上就可以达到我们想要的效果了,只是有时候会有个别的需求,会用到-a --no-OPTION, -u, -L, --delete, --exclude这些选项,但是笔者要求你把上面这些全部掌握,毕竟这才几个而已,大部分选项笔者都没有介绍。如果在以后的工作中遇到特殊需求了,就去查一下rsync的man文档吧。
最上面介绍的5种方式当中,第二、第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务。
这种方式就是前面介绍的第二种方式了,是通过ssh拷贝的数据,是要输入10.0.2.69那台机器root的密码的。
这个则为第三种方式。这两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。但是不代表没有解决办法。那就是通过密钥验证,密钥不设立密码就ok了。还记得在前面笔者曾经介绍过通过密钥登录远程主机吗,下面要讲的内容就是那些东西了。
在这个过程中会有一些交互的过程,因为笔者的/root/.ssh/id_rsa已经存在,所以会问是否覆盖,笔者选择覆盖,然后会提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
在这一步也许你会遇到/root/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。保存/root/.ssh/authorized_keys文件后,再到主机Aming-1上执行
你会发现,现在不用输入密码也可以登录主机Aming了。下面再从主机Aming-1上执行一下rsync命令试试吧。
这种方式可以理解成这样,在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。下面笔者就介绍一下,如何去配置一台rsync服务器。
其中配置文件分为两部分全部配置部分和模块配置部分,全局部分就是几个参数而已,就像笔者的f中port, log file, pid file, address这些都属于全局配置,而[test]以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名自定义,格式就像笔者的rsyncd.conf中的这样。其实模块中的一些参数例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow都可以配置成全局的参数。当然笔者给出的参数并不是所有的,你可以通过man rsyncd.conf获得更多信息。
address:指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动
use chroot:truefalse默认是true,意思是在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件的话建议设置成false。
list:指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏
hosts allow:指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开
从上例中的详细信息中也可以看到,不能拷贝软连接的。所以请记住,如果涉及到软连接,请设置use chroot=false 。另外这种方式也是可以不用手动输入密码的,两种实现方式。
注意,这里不用再加test@这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。
日志重要吗?必须的,没有日志你怎么知道你的系统状况?没有日志你如何排查一个trouble?日志记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。
笔者常查看的日志文件为/var/log/message.它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO错误、网络错误和其他系统错误都会记录到这个文件中。另外其他信息,比如某个人的身份切换为root以及用户自定义安装的软件(apache)的日志也会在这里列出。通常,/var/log/messages是在做故障诊断时首先要查看的文件。那你肯定会说了,这么多日志都记录到这个文件中,那如果服务器上有很多服务岂不是这个文件很快就会写的很大,没有错,但是系统有一个日志轮询的机制,每星期切换一个日志,变成message.1, message.2,messages.4连同message一共有5个这样的日志文件。这是通过logrotate工具的控制来实现的,它的配置文件是f.如果没有特殊需求请不要修改这个配置文件。
/var/log/message是由syslogd这个守护进程产生的,如果停掉这个服务则系统不会产生/var/log/message,所以这个服务不要停。Syslogd服务的配置文件为f这个文件定义了日志的级别,具体详细的东西笔者不再阐述,因为若没有特殊需求是不需要修改这个配置文件的,请使用”man syslog.conf”获得更多关于它的信息。
除了关注/var/log/message外,你还应该多关注一下dmesg这个命令,它可以显示系统的启动信息,如果你的某个硬件有问题(比如说网卡)用这个命令也是可以看到的。
这一小节就介绍这么多,在结束之前,笔者给你一个小小的建议。以后在你日常的管理工总中要养成多看日志的习惯,尤其是一些应用软件的日志,比如apache, mysql, php等常用的软件,看它们的日志(错误日志)可以帮助你排查问题以及监控它们的运行状况是否良好。
在前面的例子中笔者曾经使用过这个命令,你是否有印象呢?现在就详细介绍一下它,平时笔者使用xargs还是比较多的,很方便。
它的作用就是把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把本来两步或者多步才能完成的任务简单一步就能完成。xargs常常和find命令一起使用,比如,查找当前目录创建时间大于10天的文件,然后再删除。
这种应用是最为常见的,xargs后面的rm也可以更选项,当是目录时,就需要-r选项了。在笔者看来xargs的这个功能不叫什么,它的另一个功能才叫神奇。现在我有一个这样的需求,查找当前目录下所有.txt的文件,然后把这些.txt的文件变成.txt_bak 。正常情况下,我们不得不写脚本去实现,但是使用xargs就一步。
xargs -n1 i{}类似for循环,-n1意思是一个一个对象的去处理,-i{}把前面的对象使用{}取代,mv {} {}_bak相当于mv 1.txt 1.txt_bak。你刚开始接触这个命令时也许有点难以理解,多练习一下你就会熟悉了,笔者建议你记住这个应用,很实用。
使用find命令时,经常使用一个选项就是这个-exec了,可以达到和xargs同样的效果。比如,查找当前目录创建时间大于10天的文件并删除。
这个命令中也是把{}作为前面find出来的文件的替代符,后面的”\”为”;”的脱意符,不然shell会把分号作为该行命令的结尾。这个-exec有时候也挺实用的。
有时候,也许你会有这样的需求,需要执行一个命令或者脚本,但是需要几个小时甚至几天。这就要考虑一个问题,就是中途断网或出现其他意外情况,执行的任务中断了怎么办?你可以把命令或者脚本丢到后台运行,不过也不保险。笔者下面就介绍两种方法来避免这样的问题发生。
直接加一个&虽然丢到后台了,但是当退出该终端时很有可能这个脚本也会退出的,而在前面加上nohup就没有问题了。nohup的作用就是不挂断地运行命令。
简单来说,screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的SSH连接窗口那样。下面笔者介绍screen的一个简单应用。
时间的准确性在服务器上非常重 要,所以要与标准时间保持同步,毕竟服务器的时钟并不一定精准,所以需要我们每隔一段时间去同步一下时间。笔者所管理的服务器每隔6小时就会同步一下时 间。如何同步呢?这就要用到ntpdate 这个指令。如果你的服务器上没有这个指令,请使用yum install -y ntpdate安装,或者下载源码包安装。
同步时间的命令为:ntpdate timeserver 这里的timeserver为时间服务器的IP或者hostname,常用的timeserver有windows的时间服务器)。如果你想每隔6小时同步一次那么请指定一个计划任务。
00 */6 * * * /usr/sbin/ntpdate 210.72.145.44 /dev/null
之所以在后面加一个重定向,是因为这个同步的过程是有内容输出的,因为我们的计划任务是在后台执行的,输出的内容会以邮件的形式发送给用户,所以为了避免邮件太多请输出到/dev/null (在linux下这个设备是虚拟的存在,你可以理解为空洞)

