【监控系统的状态】
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