Linux系统管理技巧
第13章linux系统管理技巧
13.1监控系统的状态
以下的命令都可以监控到系统的状态
13.1.1 命令 w
命令 w 可以查看当前系统的负载
Linux管理员最常用的命令就是w,该命令显示的信息很丰富。从左往右显示的信息以此为:时间、系统运行时间、登录用户数和平均负载。其中load average 后面3个数字应该最为注意!
第一个数值表示一分钟内系统的平均负载值,第2个数值表示5分钟内系统的平均负载值,第3个数值表示15分钟内系统的平均负载值。应该着重看第1个数值,它表示单位时间段内使用CPU的活动进程数,数值越大说明服务器压力就越大。(只要不超过服务器的CPU数量就没有关系)
查看服务器有几个CPU的方法:
cat /proc/cpuinfo
查看当前系统有几个CPU,使用命令grep -c ‘processor’ /proc/cpuinfo
查看有几颗物理CPU时,则需要查看关键字physical id
13.1.2用vmstat命令监控系统的状态
命令vmstat
命令w查看的是系统整体上的负载,通过看那个数值可以知道当前系统有没有压力。但他无法精准的判断压力在哪里(CPU、内存、磁盘等),所以就要用到vmstat。vmstat打印有着6部分:procs、memory、swap、io、system和cpu。要重点关注一下r、b、si、so、bi、bo着几列信息。
口proc显示进程的相关信息。
r(run):表示运行或等待CPU时间片的进程数。
b(block):表示等待资源的京成熟,这个资源指的是I/O、内存等。
口memory显示内次年的相关信息。
spwd:表示切换到交换分区中的内存数量,单位为kb。
buff:表示(即将写入磁盘的)缓冲大小,单位为kb。
cache:表示(从磁盘中读取的)缓冲大小,单位为kb。
口swap显示内存的交换情况。
si:表示由交换区写入内存的数据量,单位为kb。
so:表示由内存写入交换区的数据量,单位为kb。
口io显示磁盘的使用情况。
bi:表示从块设备读取数据的量(读磁盘),单位为KB。
bo:表示从块设备写入数据的量(写磁盘),单位为KB。
口system显示采集间隔内发生的中断次数。
in:表示在某一时间间隔呢观测到的每秒设备的中断次数
cs:表示每秒产生的切换次数。
口cpu显示CPU的使用状态。
us:显示用户下所花费CPU的时间百分比
sy:显示系统花费CPU的时间百分比
id:表示CPU处于空闲状态的百分比。
wa:表示I/O等待所占用CPU的时间百分比。
st:表示被偷走的CPU所占百分比(一般都为0)
以上各参数中,经常关注r,b和wa这3列。io部分的bi和bo也是要经常参考的对象,如果磁盘io压力很大,这两列的数值会比较高。另外,当si和so两列的数值比较高并且不断变化时,说明内存不够,内存中的数据频繁交换到交换分区中,往往对系统性能影响极大。
#vmstat 1 5 表示每隔1秒输出一次状态,总共输出5次。
#vmstat 1 表示每隔1秒输出一次状态且一直输出,Ctrl+C结束。
13.1.3 命令top
命令 top 显示进程所占的系统资源
命令 top 用于动态监控进程所占的系统资源,每隔3秒变一次。命令 top 特点是把占用系统资源(CPI、内存、I/O等)最高的进程放到最前面,同时top也打印出很多信息,如:系统负载(load averarge)、进程数(tasks)、CPU使用情况、内存使用情况以及交换分区使用情况。RES为进程所占的内存大小,%MEM为使用内存的百分比,在top状态下按Shift+m键可以按照内存使用大小排序,按数字1可以列出所有核CPU的使用状态,按q键可以退出top。
命令top -bn1 表示非动态打印系统资源的使用的情况,可以用在shell脚本中
和top命令唯一的区别是,它一次性输出所有信息而非动态显示。
13.1.4用sar命令监控系统状态
命令sar是十分强大的,它可以监控系统几乎所有的资源的状态,比如平均负载、网卡流量、磁盘状态、内存使用等。与其他系统状态监控工具不同,它可以打印历史信息,可以显示当天从零开始到当前时刻的系统状态信息。如果没安装这个命令,请使用命令 yum install -y sysstat 安装。
查看网卡流量:sar -n DEV
这个命令会把当天记录的网卡 信息打印出来,每隔十分钟记录一次。IFACE这一列表示设备名称;rxpck/s这一列表示收取的包的数量;txpck/s这一列表示每秒钟发出去的包的数量;rxkB/s这一列表示每秒收取的数据量(单位为kb),txkB/s这一列表示每秒钟发送的数据量。
如过丢包严重,就需要查看网卡流量 是否异常,如果rxpck/s那一列的值大于4000,或者rxkB/s那一列大于5000000,就很有可能被攻击了。正常的服务器网卡流量不会这么高,除非在复制数据。如果想看实时网卡流量:
如果使用 -f 可以查看某一天的网卡流量历史,后面跟文件名。
sar -n DEV -f /var/log/sa/sa12
可以查看12号当天的网卡浏量了
查看历史负载 sar -q
这个命令可以查看服务器在过去某个时间的负载状况
13.1.5用nload命令查看网卡流量
sar虽然也可以查看网卡流量,但是不够直观,所以用nload更好。如果没有这个命令,可以用命令
yum install -y epel-release; yum install -y nload
13.1.6用free命令查看内存使用状况
口total:内存总大小。
口used:真正使用的实际内存大小。
口free:剩余物理内存大小(没有被分配,纯剩余)。
口shared:共享内存大小
口buff/cache:分配给buffer和cache的内存总共多大。
口available:系统可使用有多大,包含了free。
free命令显示的结果中,有一个隐藏的公式:total=used+free+buff/cache
buffer和cache都是一部分内存,内存的作用就是环节CPU和IO的速度差距。数据经过CPU计算,即将要写入磁盘,这时用的内存为buffer;COU要计算时,需要把数据从磁盘中读出来,临时放到内存中,这部分内存是cache。
另外free还可以与-m和-g和-h搭配(分别是以MB或GB为单位)打印内存的使用情况。
13.1.7用ps命令查看系统进程
**命令ps可以查看系统进程。**
口PID:表示进程的ID。在linux中,内核管理进程就是靠pid来识别和管理某一个进程。
口STAT:表示进程的状态。进程状态分为以下几种:
D:不能中断的进程。R:正在运行的进程。S:已经中断的进程(大部分的状态)T:已经停止或者暂停的进程。X:已经死掉的进程。Z:僵尸进程。<:高级优先进程。N:低级优先进程。L:在内存中被锁了内存分页。S:主进程。l:多线程进程。+:在前台运行的进程
常用的命令:ps aux |grep -c sshd
用来查看某个进程或者它的数量。grep命令本身也算一个进程
13.1.8 用netstat命令查看网络状态
netsatat - lnp (打印当前系统启动哪些端口)
netstat -an (打印网络连接状况)
Netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息。
13.2 抓包工具
想查看网卡上有哪些数据包就可以运用抓包工具,就可以知道有哪些IP在攻击了。
13.2.1tcpdump工具
tccpdump -nn -i +网卡
后面如果不Ctrl+c 停止,则会一直显示内容。
-i选项后面跟设备名称,-nn选项的作用是让第3列和第4列显示成“IP+端口号”的形式,如果不加-nn选项则显示“主机名+服务名称”
如果不想一直让内容显示出来,可以指定内容数量,加上-c + 内容数量
tcpdump -nn -i eno16777736 -c 100
13.2.2 wireshark工具
wireshark是一个十分流行的网络分析工具,这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。
先用命令 yum install -y wireshark 下载wireshark工具。
13.3 Linux网络相关
设置IP、主机名和DNS等。
13.3.1 用ifconfig命令查看网卡IP
ifconfig可以打印当前网卡IP的相关信息(如子网掩码、网关等)。
如果修改网卡的IP,可以使用如下命令:
vi /etc/sysconfig/network-scripts/ifcfg-xxx(你的网卡名字)。
如果想重启网卡,可以先关掉网卡,再启动。
ifdown xxx ; ifup xxx xxx为你的网卡名。
ifdown既停用网卡,ifup既启动网卡。
13.3.2给一个网卡设定多个IP
#cd /etc/sysconfig/network-scripts/#cp ifcfg-xxx ifcfg-xxx\:1这个反斜杠 \ 一定要加,这是转义的意思,不然linux命令行下无法识别。然后要编辑 ifcfg-xxx:1,DEVICE一定要写成xxx\:1。
#ifdown eno*** && ifup eno***
13.3.3查看网卡连接状态
具体命令如下: mii-tool xxx(我这里是eno16777736)
link ok 说明网卡已经连上了,ok的了。
还有一个查看网卡的方式:# ethtool xxx
最后一行最后一个单词,yes就连上了,no就没连上。
13.3.4更改主机名
安装完系统后,主机名默认是localhos.localdomaint的,可以通过命令hostname来查看
可以通过命令:hostnamecatl set-hostname 主机名 来修改成你想要的名字,还要重启!这样才能变成你想要的主机名。
13.3.5 设置DNS
DNS的作用就是用来解析域名的。想要设置DNS可以把DNS地址写入配置文件/etc/resolv.conf里面就行。
在这里只是临时修改DNS IP地址,想永久修改就可以进入/etc/hosts这里,不过要手动添加IP和域名。用于临时解析某个域名,非常有用
每一行为一条记录,分成两部分,第一部分是IP,第二部分是域名。
口一个IP后面可以跟多个域名,可以是几十个甚至上百个;
口每一行只能有一个IP,一个域名不能对应多个IP;
口如果有多行中出现相同的域名(对应的IP不一样)会按最前面出现的记录来解析
13.4 Linux的防火墙
13.4.1 SELinux
SEXLinux是Linux系统特有的安全机制。因为这个家伙特别麻烦,所以一般都会临时关闭他,一般用如下命令:# setenforce 0
如果要永久关闭,要进入 /etc/selinux/config找到 SELINUX=enforcing这里,把enforcing改成disabled就可以了。
想要查看SELinux的状态可以用命令:getenforce来查看。
SELinux关闭,默认会输出enforcing
13.4.2 netfilter、iptables
netfilter是CentO7之前版本的防火墙叫法,也有人把iptables叫做防火墙,其实不太准确,ipttables只是个工具,CentOS7叫做firewalld。接下来是firewalld和iptables的一些相关命令。
systecmtl disable iptables //开机就关闭iptables服务
systecmtl enable iptables //开机就开启iptables服务
systemctl start iptables //启动iptables服务
systemctl stop iptables //关闭iptables服务
#systemctl stop firewalld //关闭firewalld服务
#systemctl disable firewalld //禁止firewalld服务开机启动
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
#yum install -y iptable-service //安装,这样就可以使用之前的版本
#systemctl enable iptables //让它开机启动
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
#systemctl start iptables //启动iptables服务
-nvL表示查看规则,-F表示清除当前规则(临时的)
service iptables save保存规则 现在防火墙规则保存在/etc/sysconfig/iptables中
netfilter的5个表
Filter表主要用于过滤包,是系统预设的表。该表内建3个链:INPUT、OUTPUT、FORWARD。INPUT链作用于进入本机的包,OUTPUT链作用于本机送出的包,FORWARD链作用于那些跟本机无关的包。
nat表主要用于网络地址转换,它也有3个链。PREROUTING链作用是在包刚刚到达防火墙时改变它的目的地址,OUTPUT链的作用是改变本地产生的包的目的地址,POSTROUTING链的作用是在包即将离开防火墙时改变其源地址。
mangle表主要用于给数据包做标记,然后根据标记去操作相应的包。
raw表可以实现不追踪某些数据包,默认系统的数据包都会被追踪,但追踪势必消耗一定的资源,所以可以用raw表来指定某些端口的包不被追踪。
security表用于强制访问(MAC)的网络规则
netfilter的5个链分别为PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
口PREROUTING:数据包进入路由表之前。
口INPUT:通过路由表后目的地为本机。
口FORWARD:通过路由表后,目的地不为本机。
口OUTPUT:由本机产生,向外转发。
口POSTROUTING:发送到网卡接口之前。
iptables基本语法
1、查看规则以及清除规则。
iptables -t nat -nvL
-t选项后面跟表名,-nvl表示查看该表的规则,其中-n表示不针对IP反解析主机名,-L表示列出,-v表示列出的信息更加详细。
清除规则命令:
iptables -F 清除预设表filter中的所有规则链的规则
iptables -X 清除预设表filter中使用者自定链中的规则
iptables -Z 把包以及流量计数器置零
一开始设定的防火墙规则只保存在内存内,没有保存在一个文件中,也就是说,当系统重启后规则就没了,所以设定好规则后要先保存。
service iptables save
系统会提示你防火墙规则保存在/etc/sysconfig/iptables文件内,这个就是iptables的配置文件。
- 增加/删除一条规则
# iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP
没有加-t选项,所以针对的是filter表。
口-A/-D:表示增加/删除一条规则。
口-I:表示插入一条规则,其实效果跟-A一样。
口-p:表示指定协议,可以是tcp、udp或者icmp。
口--dport:跟-p一起使用,表示指定目标端口。
口--sport:跟-p一起使用,表示指定源端口。
口-s:表示指定源IP(可以是一个IP段)
口-d:表示指定目的IP(可以是一个IP段)
口-j:后面跟动作,ACCEPT表示允许包,DROP表示丢掉包,REJECT表示拒绝包。
口-i:表示指定网卡。
例子:#iptables -I INPUT -s 1.1.1.1 -j DROP
上例表示插入一条规则时,把来自1.1.1.1的所有数据包丢掉。
#iptables -I INPUT -s 1.1.1.1 -j DROP
上例表示删除刚刚插入的规则。注意删除一条规则时,必须和插入的规则一致。两条iptables命令,除了-I和-D不一样外,其他地方都一样。
还有,--dport / --sport必须和-p选项一起使用,否则会出错。
关于icmp的包有一个比较常见的应用:
# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
这里--icmp-type选项要跟-p icmp一起使用,后面指定类型编号。这个8指的是能在本机ping通其他机器,而其他机器不能ping通本机。
- nat表的应用
iptables是通过nat表作用而实现的,假设一个机器上有两块网卡eth0和eth1,其中eth0的IP为10.0.2.68,eth1的IP为192.168.1.1,eth0连接了因特网,但eth1没有连接。现在有另一台机器(192.168.1.2)和eth1是互通的,那么如何设置才能让连接eth1的这台机器连接因特网,和10.0.2.68互通呢?
# echo “1” > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o etho -j MASQUERADE
第一个命令涉及内核参数相关的配置文件,它的目的是打开路由转发功能,否则无法实现应用。第二个命令则是iptables对nat表做了一个IP转发的操作。-o选项后面跟设备名,表示出口的网卡;MASOUERADE表示伪装
- 保存和备份iptables规则
设定的防火墙规则只保存在内存中,并没有保存到某一个文件中。当系统重启后以前设定的规则就没有了,所以设定好规则后要先保存一下。
这个文件就是iptables的配置文件,以后遇到备份防火墙规则的任务,只要复制一份这个文件的副本即可。
有时需要清除防火墙的所有规则,使用命令iptables -F固然可以,但最好的办法还是停止防火墙服务。
用来备份防火墙规则的命令:
# sh /usr/local/sbin/iptables.sh
# iptables-save > myipt.rule
#cat myipt.rule
先执行一下刚才的iptables的脚本,使用 iptables-save命令重定向到一个文件里。若想要恢复这些规则,使用# iptables-restore < myipt.rule
13.4.3 firewalld
systemctl stop firewalld //关闭firewalld服务
systemcl start firewalld //开启firewalld服务
systemctl disable firewalld //禁止firewalld服务开机启动
systemctl enable firewalld //禁止firewalld服务开机启动
打开firewalld之后可以执行 iptables -nvL查看firewalld的默认规则。
firewalld有两个基础概念,分别是zone和service,每一个zone里面有不同的iptables规则,默认一共有9个zone,而CentOS7默认的zone为public。获取系统所有的zone,
口drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。
口block(限制):任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
口public(公共):在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。
口external(外部):特别是为路由器启用了伪装功能的外部网。你不能信任来自网络的其他计算,不能相信他们不会对你的计算机造成危害,只能接收经过选取的连接。
口dmz(非军事区):用于你的非军事区内的计算机,此区域内可公开访问,可以有限地进入你的内部网络,仅仅接受经过选择的链接。
口work(工作):用于工作区。
口home(家庭):用于家庭网络。
口internal(内部):用于内部网络。
口trusted(信任):可接受所有的网络连接。
13.5 Linux 系统的任务计划
通过功能cron定期自动执行某个脚本
13.5.1命令crontab
crontab常跟以下选项一起用;
-u:表示指定某个用户,不加-u则选项为当前用户。
-e:表hi制定计划任务
-l:表示列出计划任务
-r:表示删除计划任务
可以使用命令 crontab -e来编辑任务计划,实际就是用vim打开了配置文件,写下内容:
这段数字的意思是6月5日(这一天必须是星期三)的10点01分执行命令 echo “ok” > /root/cron.log。
时间从左到右分别是分、时、日、月、周和命令行。
自己设定的任务可以通过命令crontab -l 来查看
我们想删除任务,可以通过命令 crontab -r ,这个要小心,因为他会将所有命令删除掉。
15.2cron练习题
(1)每天凌晨1点20分清除/var/log/slow.log这个文件
答:20 1* * * echo " " > /var/log/slow.log
(2)每周日3点执行/bin/sh /usr/local/sbin/backip.sh
答: 0 3 * * 0 /bin/sh /usr/local/sbin/backip.sh
(3)每月14日4点10分执行/bin/sh /usr/local/sbin/backup_month.sh
答:10 4 14 * * /bin/sh /usr/local/sbin/backup_month.sh
(4)每隔8小时执行ntpdate time.windows.com
答:0 */8 * * * ntpdate time.windows.com
(5)每天的1点、12点和18点执行/bin/sh /usr/local/sbin/test.sh
答:0 1,12,18 * * * /bin/sh /usr/local/sbin/test.sh
(6)每天的9点到18点执行/bin/sh /usr/local/sbin/test2.sh
答:0 9-18 * * * /bin/sh /usr/local/sbin/test2.sh
每隔8小时就是用全部小时(0~23)去除以8,结果算出来应该是0、8和16这3个数。当遇到多个数(分钟、小时、月、周)时,则需要用逗号隔开。
若查看crond服务是否开启、
看Active那行,如果是启动状态显示active(running),未启动则显示为inactive(dead)。
13.6Linux系统服务管理
13.6.1 chkonfig 服务管理工具
linux系统所有的预设的服务都可以通过查看/etc/init.d目录得到
系统的预设服务都可以通过这样的命令实现:service服务名 start|stop|restart ,这里服务名就是/etc/init.d/目录下的这些文件了。启动cron除了可以使用命令:service crond start外,还可以使用命令 /etc/init.d/crond start。
chkconfig --list列出所有服务以及每个几倍的开启状态。
这里的数字0~6为系统启动级别,其中0为shutdown动作,1为重启至单用户模式,6为重启,2表示无NFS支持的多用户模式,3表示完全多用户模式(最常用级别),4保留用户自定义,5表示图形登录方式。
可以通过chkconfig --level指定级别后面是服务名,然后是off或者on。
chkconfig还有可以把某个服务加入系统服务或者删除,如下:
chkconfig --del network //这个是删除服务
chkconfig --add network //这个是添加服务
chkconfig --list //查看结果
13.6.2 systemd服务管理
列出系统所有的服务:
systemctl list-units --all --type=service
这些服务对应得启动脚本文件在着:
ls /usr/lib/systemd/system/
可以看到这个目录下有目录有文件,有的是.service为后缀名,有的是.targer为后缀名,就各种各样的。
# systemctl enable crond.service //让某个服务开机启动
# systemctl disable crond.service //不让开机启动
# systemctl status crond.service //查看服务状态
# systemctl stat crond.service //启动某个服务
# systemctl stop crond.service //停止某个服务
# systemctl restate crond.service //重启某个服务
# systemctl is-enabled crond //查看某个服务是否开机启动
现在先看两个概念,一个是–unit,其实刚刚那个文件中大部分是unit的组成部分,以下是unit的各个种类类型:
口service:系统服务
口target:多个unit组成的组
口device:硬件设备:
口mount:文件系统挂载点
口automount:自动挂载点
口path:文件或路径
口scope:不是由systemd启动的外部进程
口slce:进程组
口scocket:进程间通信的套接字
口swap:swap文件
口timer:定时器
以上每种类型的文件都为一个unit,正是这些unit才组成看系统的各个资源(各个服务、各个设备等)。
以下是unit的相关命令:
systemctl list-units //列出正在运行的unit
systemctl list-units --all //列出所有的unit(包括失败的、不活跃的)
systemctl list-units --all --stat=inactive //列出所有不活跃的unit
systemctl list-units --all --type=service//列出所有状态的servie
systemctl list-units --type=service //列出状态为活跃的service
systemctl is-active crond.service //查看某个unit是否活跃
第二个概念是–target,它是一个多unit的组合,系统启动简单来说就是启动多个unit,为了管理方便,就用target来管理这些unit,使用以下命令能查看所有target
systemctl list-unit-files --type target //注意和前面命令的区分
使用以下命令可以查看一个target包含的所有unit:
systemctl list-dependencies multi-user.target
以下是target的相关命令
#systemctl get-default //查看系统的默认target
multi-user.target
#systemctl set-dafault multi-user.target //设置值默认的target
service、unit和targer之间的联系
(1)一个service属于一种unit
(2)多个unit一起组成一个target
(3)一个target里面包含了多个service
运行级别和target的对比
SysV运行级别 systemd target 备 注
0 poweroff.taegrt 关闭系统
1 resure.target 单用户模式
2 multiuser.target 用户自定义级别
3 multiuser.target 多用户,无图形
4 multiuser.target 用户自定义图形
5 graphical.target 多用户,有图形
6 reboot.target 重启
1.7 Linux下的数据备份工具rsync
rsync(remote sync 远程同步)不仅可以远程同步数据,而且可以本地同步数据,这两点都类似与scp,不同的是,它不会覆盖以前的数据,而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。
上例将会把/etc/passwd同步到/tmp/目录下,并改名1.txt。如果是远程复制,数据备份就是这样的形式——IP:path
13.7.1 rsync的命令格式
1:rsync [ OPTION ] … SRC DEST
2:rsync [ OPTION ] … SRC [USER@]HOST:DEST
3:rsync [ OPTION ] … [USER@]HOST:SRC DEST
4:rsync [ OPTION ] … [USER!]HOST:SRC DEST
5:rsync [ OPTION ] … HOST::DEST
13.7.2 rsync常用选项
-a:这时归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-rlptgoD。-a选项后面可以跟一个–no-OPTION,表示关闭-rlptgoD中的某一个。比如-a--no-l等同于-rptgoD。
-r:表示以递归模式处理子目录。它主要时针对目录来说的,如果单独传一个文件不需要加-r选项,但是传输目录时必须加。
-v:表示打印一些信息,比如文件列表、文件数量
-L:表示保留软连接
-p:表示保持文件权限
-o:表示保持文件属主信息
-g:表示保持文件属组信息。
-D:表示保持设备文件信息
-t:表示保持文件的时间信息
–delete:表示删除DST中SRC没有的文件
–exclude=PATTERN:表示指定爆出不需要传输的文件,等号后面跟文件名,可以时万用字符模式(如.txt)
–progress:表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等。
-u:表示把DST中比SRC还新的文件排除掉,不会覆盖。
-z:加上该选项,将会在传输过程中压缩*
- 建立目录和文件
- 使用-a选项
本来想把test1目录直接复制成test2目录,可结果rsync却建成了test2目录,然后把test1放到test2当中。为了避免可以这样做:
加一个斜杠就好了,所以在使用rsync备份目录时,要养成加斜杠的习惯。前面说-a选项等同于-rlptgoD,且-a还可以和--no-OPTIN一并使用。
上例中使用了-v选项,跳过了非普通文件123.txt。其实123.txt是一个软连接文件,如果不使用-l选项,系统则不理会软连接文件。虽然加了-l选项能复制软连接文件,但软连接的目标文件却没有复制。有时我们需要复制软连接文件所指向的目标文件如下:
- 使用-L选项
加上-L选项就可以把SRC中软连接的目标文件复制到DST
- 使用-u选项
查看一下test1/1和test2/1的创建时间,然后使用touch修改一下test2/1的创建时间。如果不加-u选项,会把test2/1的创建时间变成和test1/1一样
上例中二者的创建时间是一样的下面修改test2/1的创建时间,然后不加-u同步
这里的test2/1的创建时间还是和test1/1一样,下面加上-u选项
加上-u选项后,不会再把test1/1同步为test2/1了
- 使用--delete选项
首先删除test1/123.txt
然后把test1/目录同步到test2/目录下
test2/目录并没有删除123.txt。下面加上--delete选项
这里test2/目录下的123.txt也被删除了
13.8 Linux系统日志
日志记录了系统每天发生的各种各样的事情,比如监测系统状况、排查系统故障等。日志的主要功能时审计和监测,还可以实时地监测系统状态,监测和追踪侵入者。
13.8.1/var/log/message
这是核心系统的日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态信息。I/O错误、网络错误和求他系统错误都会记录到这个文件中。
通产情况下,/var/log/message时做故障诊断时首先查看的文件
/var/log/message是由rsyslogd这个守护进程产生的,如果停止这个服务则系统不会产生/var/log/message,所以不要停止这个服务。rsyslogd服务的配置文件为/etc/rsyslog.conf,这个文件定义了日志的级别。
13.8.2 dmesg
dmesg可以显示系统的启动信息。
13.8.3 安全日志
命令last用来查看登录Linux的历史信息。
从左到右依次是账号名称、登陆终端、登录客户端IP、登陆日期及时长。
last命令输出的信息实际上是读取了二进制文件/var/log/wtmp,只是这个文件不能直接使用cat、Vim、head、tail等工具查看。
13.9xargs和exec
xargs和exec可以实现相同的功能,exec主要时和find一起配合使用。而xargs比exec的用处更多
13.9.1xargs应用
上例表示把管道符前面的输出作为xargs后面的命令的输入。好处在于可以把原本两部或者多步才能完成的任务仅用一步来完成。比如当前目录下全是后缀名为.txt的文件,然后把这些文件变成txt_bak。正常来说要写脚本才行,但是xargs一步解决。xargs常常和find命令一起使用,比如查找当前目录创建时间大于10天的文件,然后再删除
-i类似与for循环,-n表示逐个对象进行处理,-i { }表示用{}取代前面的对象,mv{ } { }——bak相当于mv 1.txt 1.txt_bak 。
13.9.2exec应用
使用find命令时,经常会与-exec选项一起用。他可以达到xargs同样的效果。比如查找当前目录创建时间大于10天的文件并删除。
命令中也是用{}替代前面的find出来的文件。后面的\作为;的转义符。否则shell会把分号作为该命令的结尾。
-exec同样可以实现上面批量更改文件名的需求;
13.10screen工具介绍
执行某个命令或者脚本需要很长时间,在这个过程中,如果中途断网或出现某种意外情况怎么办,当然你可以把命令或者脚本放到后台运行,不过也不保险;
13.10.1使用nohup
首先写一个sleep.sh脚本,然后把它放到后台执行
上例中,直接在sleep.sh后面加&虽然可以在后台运行,但是当退出该终端时,这个脚本很有可能也会退出。所以在前面加上nohup就没有问题了,执行后会在当前目录下生成一个nohup的文件,它的作用就是防止进程意外中断,并且会把输出信息记录到nohup文件中。