日志分两个,一个是rsyslog 日志服务,一个是日志轮转(就是日志的分离和切割)logrotate
对了日志服务rsyslog 来说,它自带了一个服务叫做logrotate;这两个一般都是一起用;
一个日志文件如果扩大,一定会被分离的;否则文件会打不开;对于系统来讲,记录日志是通过主服务来讲的,就是这个服务:[[email protected] ~]# /etc/init.d/rsyslog默认这个服务是启动的;如果这个服务关了,系统是不会为我们记录日志的;很多服务和应用都是靠rsyslog这个服务来记录的
rsyslog对应的配置文件是[[email protected] ~]# vim /etc/rsyslog.conf#这是日志服务的主配置文件
34 #### RULES #### #这是日志规则(第34行是日志规则)
一、处理日志的进程
rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证,计划任务...
rsyslogd不负责处理日志,只记录日志
处理日志:1.少量日志可以使用vim cat tail less more grep awk这些文档处理程序查看和检索
2.大量日志可以用splunk,logserch #splunk给日志做分期
日志分类:系统日志,进程日志,应用程序(某些应用程序例如httpd,nginx,mysql,可以以自己的方式记录日志)
记录日志原因: 拍错,追溯事件,统计流量
日志可以存放在本地
日志可以存放在远程服务器
二、常见的日志文件
# ls /var/log/ #默认存放各种日志的地方
# tail /var/log/messages #系统主日志文件
# tail -f /var/log/messages #动态查看日志文件的尾部
# tail -f /var/log/secure #认证、安全
# tail /var/log/maillog #跟邮件(sendmail,postfix)相关
# tail /var/log/cron #crond、at进程产生的日志
# tail /var/log/dmesg #和系统启动相关-开机后不再记录,可以使用dmesg命令查看活动的日志
# grep -i eth /var/log/dmesg #只反映出开机过程的信息,开机成功后不会再改变
# dmesg #查看系统开机后的信息
# tail /var/log/audit/audit.log #系统审计日志
# tail /var/log/yum.log
# tail /var/log/mysqld.log #mysql进程自己记录的日志
# tail /var/log/httpd/access_log #httpd进程自己记录的日志
# tail /var/log/xferlog #和访问FTP服务器相关
# w #当前登录的用户 /var/log/wtmp
# last #最近登录的用户 /var/log/btmp
# lastlog #所有用户的登录情况 /var/log/lastlog
三、rsyslogd系统
rsyslogd是如何工作的:应用程序或者进程------->设备------->级别--------->动作(规则)
# rpm -qc rsyslog
/etc/logrotate.d/syslog #和日志的轮转(切割)有关
/etc/rsyslog.conf #rsyslogd的主配置文件
/etc/rsyslog.d/*.conf
/etc/sysconfig/rsyslog
# vim /etc/rsyslog.conf 这是主配置文件里面的默认规则
========================================================
==规则:Rules
告诉rsyslogd进程哪个设备(facility),关于哪个级别的信息,以及如何处理,不同的应用程序会选择不同的设备进行日志记录
authpriv.* /var/log/secure #和安全认证相关的
mail.* -/var/log/maillog 延迟一段时间再记录 前面横杠代表异物存储,先写在内存里,等不忙的时候在记录在文件里;不带横杠是产生日志马上写到磁盘文件
cron.* /var/log/cron
mail.info /var/log/maillog 级别是info
authpriv.* * (所有终端,包括debug) 代表日志文件不记录在任何一个文件;在所有终端打印;一般用的不多
authpriv.*@192.168.10.230 @意思是:udp协议传输远程日志服务器 #是把日志放到远程;做日志收集用的,有时候一般不会把日志存在本地里面,一般会把日志放在专门的日志服务器上面记录,这样主要是为了安全以及统一管理,统一分析日志用的;例如apache做网页,可以通过收集网页日志;udp可能会产生,日志服务器因为网络原因收不到日志,从而无法记录日志
authpriv.* @@192.168.10.230 @@意思是:TCP协议传输 #是把日志放到远程;做日志收集用的,有时候一般不会把日志存在本地里面,一般会把日志放在专门的日志服务器上面记录,这样主要是为了安全以及统一管理,统一分析日志用的;例如apache做网页,可以通过收集网页日志;如果网络不好,会导致收集日志的时间是不挨着呢;至于记录到哪?得看rsyslog
authpriv.* :omrelp:192.168.10.230 :omrelp:意思是:To forward via RELP, prepend the string ":omrelp:" in front of the hostname.
下面详细介绍了每一种日志设备
# man 3 syslog
LOG_AUTH 安全登录相关的
LOG_AUTHPRIV 安全认证
LOG_CRON clock daemon (cron and at) 计划任务
LOG_DAEMON 后台进程
LOG_FTP ftp daemon 关于ftp的
LOG_KERN kernel messages 关于内核的
LOG_LOCAL0 through LOG_LOCAL7用户自定义设备 支持从0到7;有8个自定义设备
LOG_LPR printer subsystem
LOG_MAIL 邮件系统mail subsystem
LOG_SYSLOG syslogd自身产生的日志 日志服务自己记录的一个设备
LOG_USER (default)
LOG_UUCP
接下来讲日志怎么收集?
一、集中式日志管理
RHEL6:
==日志服务器(开启接收功能)
[[email protected] ~]# vim /etc/rsyslog.conf #下面两行关键字代表开启接收
12# Provides UDP syslog reception
13$ModLoad imudp.so
14$UDPServerRun 514 #开放时候注意,开放udp或者tcp取决于产生日志的服务器到底是一个@还是两个@@
16 # Provides TCP syslog reception
17 #$ModLoad imtcp
18 #$InputTCPServerRun 514
例子:先在收集日志开启收集日志功能
[[email protected] ~]# vim /etc/rsyslog.conf #是收集日志端
16 # Provides TCP syslog reception 这里开启TCP
17 $ModLoad imtcp
18 $InputTCPServerRun 514 端口号是514
在开一个自定义设备:
62 local5.info /var/log/local5.log #自定义5的info级别 保存在 /var/log/local5.log级别里面
[[email protected] ~]# service rsyslog restart
接下来该把日志给推到远程服务器了;先要在推的里面写规则
[[email protected] ~]# vim /etc/rsyslog.conf
50 local5.info @@192.168.145.128 #这里写info,默认是*,指的是所有级别都可以记录;因为使用的服务不会明确指定出会产生多少级别的日志,什么情况属于什么级别;所以我们会把所有级别产生的日志记录在一个级别里面
[[email protected] ~]# service rsyslog restart
[[email protected] ~]# logger -p local5.info -t "试试" "内容" #手工推一个logger
[[email protected] ~]# cat /var/log/local5.log
Mar 3 11:53:29 agent 试试: 内容
[[email protected] ~]# logger -p local5.err -t "试试" "内容" #试试别的级别
[[email protected] ~]# cat /var/log/local5.log
Mar 3 11:53:29 agent 试试: 内容
Mar 3 11:54:11 agent 试试: 内容
[[email protected] ~]# netstat -tunlp |grep :514
远程服务有几个问题需要注意:
服务器端开启远程日志接收,并定义设备、级别以及处理方式
客户端开启远上传日志功能,定义设备、级别,处理方式为网络上传 @udp @@tcp
PS:1.客户端上定义的设备,必须保证服务器端有同样的设备进行接收(包括级别和动作都要一样)
2.防火墙 selinux 要关掉或者防火墙中允许相应端口传输数据
关掉防火墙
当日志存储到一定数量,就无法加载
一、logrotate (轮转,日志切割) #日志轮转就是为了避免大日志文件的产生;使用这个工具可以把预先设定的规则实施到某个日志上,如果那个日志符合那个规则,一般我们就会做分离;切割又叫转存
1. 如果没有日志轮转,日文件会越来越大 #当一个日志文件越来越大的时候会重新分离一个日志文件;日志文件会按照我们事先设定的大小来存放;
2. 将丢弃系统中最旧的日志文件,以节省空间
3. logrotate本身不是系统进程,它是通过计划任务crond每天执行
logrotate:这是日志的一种分离工具,它不是一个服务;因为它不是一个服务,它是以工具的方式存在;所以它需要设置好规则以后,手工去执行的;就像脚本一样;每次手工执行一次它,它都会扫描所有设置它日志的文件,如果符合规则就把它分离出去;所谓的分离日志其实就是改名,在重新创建一个日志文件,新的日志就往空的日志文件里面记录;所以我们需要设置好东西以后来学习后面的计划任务;我们有很多的工具都是手工执行的,通过计划任务来完成;默认情况下这是系统工具自带的一个包;
[[email protected] ~]# rpm -qa |grep logrotate
logrotate-3.7.8-17.el6.x86_64 #默认是安装了的;跟随主日志服务,由于装了这个包,默认情况下很多日志是可以自动分离的
[[email protected] ~]# cd /etc/cron.daily/ #这是计划任务目录,所有想每天执行的程序都可以把程序的运行文件放到这个目录里面,脚本也可以,凡是放到这个目录里的可执行文件每天都会执行;当我们装好logrotate-3.7.8-17.el6.x86_64以后,会默认创建一个/etc/cron.daily/logrotate文件
[[email protected] cron.daily]# rpm -ql logrotate |more#查看包里面包含哪个文件
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.8
/usr/share/doc/logrotate-3.7.8/CHANGES
/usr/share/doc/logrotate-3.7.8/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
[[email protected] cron.daily]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1 #规则是写在/etc/logrotate.conf,它是日志的主配置文件
EXITVALUE=$? #指的是退出值
if [ $EXITVALUE != 0 ]; then #如果上一条命令没有执行成功
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" #就插一条日志到系统
fi
exit 0 #logrotate不用设置计划任务,默认是已经设置好了
我们到单位里面,先看linux版本有没有装logrotate以及装完了之后,它是不是自动的每天执行;需要我们去检查的;如果没有就需要我们自己写这么一个脚本
接下来讲logrotate的主配置文件;里面写的规则是什么样的,都包含哪些规则内容
[[email protected] ~]# vim /etc/logrotate.conf #这是logrotate的主配置文件
配置文件里面主要分为两个部分:
第一部分:默认规则(1到20行)
第二部分:是具体的日志规则(21行到底)
主配置文件
[[email protected] ~]# vim /etc/logrotate.conf (详细信息在man手册里)
=========全局设置==========
weekly #每隔一个星期检测一次,检测时候分不分离取决于条件;;这里规定是每隔一个星期检查一次,而上面脚本是每隔一天检查一次,具体如何判断?每天执行不意味着每天都要分离,它会有一个最短的周期,周期不到不分离
rotate 4 #保留4份
create #轮转后创建新文件 ,一旦分离为不为它创建一个新的日志文件
dateext #使用日期作为后缀 分离出来的文件用不用文件日期
#compress #分离的时候是否压缩;默认没有压缩,因为压缩之后还得解压
# RPM packages drop log rotation information into this directory #rpm安装的程序,按照下面目录规则进行轮转;
include /etc/logrotate.d #包含该目录下的文件;意思是下面21行以后的可以写成文件保存在这个目录里面;里面有很多日志条目的文件
# no packages own wtmp and btmp -- we‘ll rotate them here #对于wtmp和btmp这样无主的日志,按照下面配置进行轮转
/var/log/wtmp { #对该日志文件设置轮转的方法
monthly #一月轮转一次
minsize 1M #最小达到1M才轮转
# PS:就算到了一个月,如果日志不到1M,也不能轮转
create 0664 root utmp #轮转后创建新文件,并设置权限
rotate 1 #保留一份
}
/var/log/btmp {
missingok #丢失不提示
monthly #每月轮转一次
create 0600 root utmp #轮转后创建新文件,并设置权限
rotate 1 #保留一份
}
日志的规则:
周期满足,分离
周期满足,大小不满足,不分离
周期满足,大小满足,分离
[[email protected] ~]# /usr/sbin/logrotate /etc/logrotate.conf #手动执行日志分离一次
[[email protected] ~]# /usr/sbin/logrotate -f /etc/logrotate.conf #手动执行强制日志分离一次;即使不满足分离条件;但是指定了notifempty,日志文件为空不分离
例1:轮转文件/var/log/yum.log
# vim /etc/logrotate.d/yum 原有的设置
/var/log/yum.log { #yum日志文件
missingok #丢失不提示
notifempty #如果为空,不轮转
size 30k #30k
yearly #一年轮转一次
PS:到了一年或者大小达到30k都要轮转
create 0600 root root #创建新文件
}
# vim /etc/logrotate.d/yum 修改后的设置
/var/log/yum.log {
missingok
# notifempty
# size 30k
# yearly
daily
rotate 3
create 0777 root root
}
测试:
# /usr/sbin/logrotate /etc/logrotate.conf #手动轮转
# grep ‘yum‘ /var/lib/logrotate.status #记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2012-11-10
# date 111114002012
# /usr/sbin/logrotate /etc/logrotate.conf
例2:
/var/log/messages { 脚本,在轮转之前先去掉日志的A属性,轮转之后再加上;轮转就是分离
Prerotate #去掉属性
chattr -a /var/log/abc.log
endscript
#notifempty
daily
create 0600 root root
missingok
rotate 5
Postrotate #增加属性
chattr +a /var/log/abc.log #这就是它的只能追加不能修改的属性;只能增加不能修改是无法分离的
endscript
}
脚本支持两个关键字:一个是prerotate,另外一个是 postrotate
prerotate:分离之前执行命令
postrotate:分离成功之后执行命令
对于日志来讲,处于安全来讲会给它加上一些属性
split:这个命令是用来切日志的;用它可以将大文件切成多个小文件;可以按照要求切,切得速度相当快,如果有50个G的日志,两分钟剧可以切完;比拷贝都快;所谓的切就是创建一个文件,完了把它拷进去
rpm装的包默认有logrotate服务,分离规则是放到里面的;而源码包没有
[[email protected] ~]# man split
-b:指定大小
例题:把一个大文件切成小文件;文件是一个G的
[[email protected] tmp]# dd < /dev/zero > dafile.txt bs=100M count=10 #文件变成一个G
10+0 records in
10+0 records out
1048576000 bytes (1.0 GB) copied, 15.3686 s, 68.2 MB/s
[[email protected] tmp]# sync
[[email protected] tmp]# ls
dafile.txt #就有这个文件了
[[email protected] tmp]# du -m dafile.txt #查看文件大小
1001 dafile.txt
[[email protected] tmp]# split -b 1M dafile.txt #切成1M的大小
split: output file suffixes exhausted
[[email protected] tmp]# ls #这样就切出来了(里面有很多,这里省略了)
xcp xfn xil xlj xoh xrf xud xxb xzz
xcq xfo xim xlk xoi xrg xue xxc yum.log
[[email protected] tmp]# du -m xcl
1 xcl
切大文件的时候最好把它放到一个单独的目录里面
下面是计划任务cron
cron:作用: 计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据
[[email protected] ~]# ps aux |grep cron |grep -v ‘grep‘
root 1762 0.0 0.1 117336 1240 ? Ss 22:15 0:00 crond
crond进程每分钟检查一次,以运行相应的任务
crond日志文件/var/log/cron
[[email protected] ~]# cd /etc/cron #每天的脚本和程序都放到这个目录里面,它就会每天执行
cron.d/ cron.deny cron.monthly/ cron.weekly/
cron.daily/ cron.hourly/ crontab
每星期执行的放到cron.weekly/
如果想不让某个用户执行计划任务,我们可以把用户名直接写到文件cron.deny里面;这个用户就不能设置计划任务了
或者用[[email protected] ~]# crontab -e #创建计划任务
用crontab不能直接写命令行,不能使用执行引用’’,执行引用可以放脚本中,写脚本名,有执行权限
里面有个关键点,除了星期不取交集,其它时间都取交集;
[[email protected] ~]# crontab -e
00 02 16 03 07 #这里的07指的是星期天;这里的感觉就是每年的3月16日晚上两点整的时候,而且那天是星期天的时候;其实不是这个意思;意思是每年3月6日两点整和每周日两点整都可以;也就是说整个时间格式当中如果日期一旦写了,日期和前面四个数字取得是或得关系,它是避免出现错误;指的是如果3月16日不是星期天;
00 02 * * * ls #是每周日晚上两点或3月16日晚上两点
00 02 16 03 * #所以一般星期几不写
00 02 * * 07 #或者不写日期
00 02 * * 7 ls #每周日2:00整
00 02 14 2 * ls #每年2月14号2:00整
如果要写每分钟执行:01 * * * * #这样写是不对的,这样写是每小时第一分钟;要想表示每分钟执行:*/01 * * * *
01 02 * * * #每天两点
计划任务两种定义方法:一种是放到/etc/cron对应的文件里面;另外一种是指定时间格式;用crontab -e执行
[[email protected] ~]# crontab -e #创建计划任务
* * * * * /bin/ls
[[email protected] ~]# crontab -l #查看计划任务的具体内容
* * * * * /bin/ls
crontab -r删除计划任务
[[email protected] ~]# tail /var/log/cron #查看日志
我们设计好计划任务之后,它都会产生一个临时文件
例如:
[[email protected] ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[[email protected] ~]# crontab -l
00 02 * * * bash /tmp/abc.sh
如果要修改计划任务有两种方法:第一种:
[[email protected] ~]# crontab -e #进去直接修改
第二种方法:找到计划任务的保存位置:
[[email protected] ~]# cd /var/spool/cron/ #关于每个计划任务的目录
[[email protected] cron]# ls
root #一个用户一个文件;这个文件里记录的就是用户的计划任务
[[email protected] cron]# cat root
00 02 * * * bash /tmp/abc.sh
换句话讲。Tab会每隔一段时间来扫描所有用户的文件
00 02 * * * ls //每天2:00整
00 02 1 * * ls //每月1号2:00整
00 02 14 2 * ls //每年2月14号2:00整
00 02 * * 7 ls //每周日2:00整
00 02 14 2 7 ls //每年2月14号2:00整 或者 每周日2:00整,这两个时间都执行
00 02 * * * ls //每天2:00整
* 02 * * * ls //每天2:00中的每一分钟
* * * * * ls //每分钟执行ls
* * 14 2 * ls //2月14号的每分钟
以下是特殊写法:
*/5 * * * * ls //每隔5分钟
00 02 1,5,8 * * ls //每月1,5,8号的2:00整
00 02 1-8 * * ls //每月1到8号的2:00整
切记:计划任务是个服务;如果想执行计划任务,首先先确保这个服务是开着的
[[email protected] cron]# service crond status #默认是运行的,哪怕最小化安装也是运行的
crond (pid 1759) is running...
如果关闭会导致很多和它关联的服务出问题
案例1:备份etc目录,要求:
1. 每天4:00备份/etc目录到/var/back
2. 将备份命令写在脚本中,如/root/back.sh,加执行权限
3. 每天备份的文件名包含当天的日期,如2014-11-09_etc.tar.gz
4. 计划任务执行时,屏幕不产生任何输出 &>/dev/null
5. 只保留最近5天的备份 find /var/back -mtime +5 |xargs rm -rf
1. 编写脚本
[[email protected] ~]# vim /root/back.sh
第一种版本
tar -czf /var/back/`date +%F`_etc.tar.gz /etc
find /var/back -mtime +5 |xargs rm -rf #把5天前的备份找出来并且删掉
第二种版本
#!/bin/bash
filename=`date +%F`_etc.tar.gz #定义文件名
back_dir=/var/back #定义存放的目录
# 判断备份文件存放目录是否存在
if [ ! -d $back_dir ];then
mkdir -p $back_dir #不存在就创建这个目录
fi
#备份
tar -czf ${back_dir}/$filename /etc &>/dev/null
#删除修改时间超过5天的文件
cd ${back_dir}
find . -mtime +5 |xargs rm -rf
接下来是把计划任务放到脚本里面去执行
手动测试脚本
[[email protected] ~]# chmod a+x /root/back.sh
[[email protected] ~]# chattr +i /root/back.sh
[[email protected] ~]# /root/back.sh
[[email protected] ~]# ll /var/back/
总计 11720
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
[[email protected] ~]# date 01171200
[[email protected] ~]# /root/back.sh
[[email protected] ~]# ll /var/back/
-rw-r--r-- 1 root root 11984709 09-14 17:59 2014-01-16_etc.tar.gz
-rw-r--r-- 1 root root 11984709 09-15 12:00 2014-01-17_etc.tar.gz
配置cron执行脚本
[[email protected] ~]# crontab -e
0 4 * * * /root/back.sh
[[email protected] ~]# crontab -l
0 4 * * * /root/back.sh
[[email protected] ~]# tail /var/log/cron #计划任务有没有执行通过日志查看;默认计划任务的日志是在这个位置;这个是由配置文件/etc/rsyslog.conf(第52行)决定的
Sep 20 12:03:01 localhost crond[5873]: (alice) CMD (ls)
Sep 20 12:03:42 localhost crontab[5870]: (root) REPLACE (root)
Sep 20 12:03:42 localhost crontab[5870]: (root) END EDIT (root)
Sep 20 12:03:46 localhost crontab[5880]: (root) LIST (root)
Sep 20 12:04:01 localhost crond[5882]: (alice) CMD (ls)
Sep 20 12:05:01 localhost crond[5895]: (alice) CMD (ls)
Sep 22 04:00:20 localhost crond[5909]: (alice) CMD (ls)
Sep 22 04:00:20 localhost crond[5912]: (root) CMD (/root/back.sh)
计划任务里面最好使用绝对路径
例题,写个计划任务,每分钟创建一个文件
[[email protected] cron]# crontab -e
*/01 * * * * /bin/touch /tmp/uplooking.fil #第一次是创建,之后每分钟在创建就是修改它的时间
计划任务默认只支持分钟,不支持秒;但是通过设置也可以支持秒
让任务实现秒级执行
一、通过计划任务实现
每隔10秒执行命令date
* * * * * date >/dev/pts/1 #每时每刻都执行
* * * * * sleep 10; date >/dev/pts/1 #等10秒在执行
* * * * * sleep 20; date >/dev/pts/1
* * * * * sleep 30; date >/dev/pts/1
* * * * * sleep 40; date >/dev/pts/1
* * * * * sleep 50; date >/dev/pts/1
二、通过程序实现
# vim while01.sh
#!/bin/bash
while :
do
echo "ok"
sleep 5
Done
网络配置
一、常见的网络接口
lo #本地环回接口 ;这个网卡永远代表自己;lo虽说没用,但你还不能把它停了;很多local host解析的就是自己;127开头的IP代表的是自己
eth0 #以太网接口
wlan0 #无线接口
bond0 #bonding接口---------->又叫绑定网卡;多块物理网卡绑定后产生的虚拟接口(有什么意义:不都还是从其中一块网卡走数据么?)
virbr0 #桥接接口虚拟交换机;虚拟机网卡
br0 #桥接接口 虚拟交换机
vnet0 #KVM虚拟交换机接口
网络基础知识:
IP ipv4(32 bit) ipv6(128 bit)
MAC 48 bit实际数据传输时候依靠MAC48 bit
子网掩码 ipv4(32 bit) 帮助确定我们自己在对方哪个网段
网段
路由查询路由表走路的过程,比如:往一个网段传点东西,先要确定这个网段是否通着,这个网段就叫路由
网关说白了,就是快递
OIS七层模型
TCP/IP四层模型
IP分类
公有地址:
IP分类 缺省掩码
A 1-127 /8
B 128-191 /16
C 192-223 /24
D 224-239 组播地址
E 240-247 保留地址
私有地址:
A:10.0.0.0 - 10.255.255.255
B: 172.16.0.0 - 172.31.255.255
C: 192.168.0.0 - 192.168.255.255
临时:立即生效,重启失效(测试、集群节点间的浮动IP...)
1. 修改主机名
# hostname tianyun.uplooking.com
2. 修改IP
# ifconfig eth0 192.168.2.252/24 up //修改eth0的IP
# ifconfig eth0:0 192.168.2.252/24 up //给eth0增加IP
# ifconfig eth0:1 192.168.2.251/24 up //给eth0增加IP
# ip addr add dev eth0 192.168.2.252/24 //增加新的临时IP
# ip addr add 192.168.3.252/24 dev eth0
# ip addr show eth0
3. 设置网关(默认路由)
# route add default gw 192.168.2.254 添加网关
# route -n
# route del default gw 192.168.2.254
# ip route add default via 192.168.2.254 dev eth0
# ip route
# ip route del default via 192.168.2.254 dev eth0