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)

以上各参数中,经常关注rbwa3列。io部分的bibo也是要经常参考的对象,如果磁盘io压力很大,这两列的数值会比较高。另外,当siso两列的数值比较高并且不断变化时,说明内存不够,内存中的数据频繁交换到交换分区中,往往对系统性能影响极大。

#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.4sar命令监控系统状态
命令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.5nload命令查看网卡流量


sar虽然也可以查看网卡流量,但是不够直观,所以用nload更好。如果没有这个命令,可以用命令

yum install -y epel-release; yum install -y nload

13.1.6free命令查看内存使用状况

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.7ps命令查看系统进程

**命令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的配置文件。

  1. 增加/删除一条规则

# 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:表示指定协议,可以是tcpudp或者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通本机。

  1. nat表的应用

iptables是通过nat表作用而实现的,假设一个机器上有两块网卡eth0eth1,其中eth0IP10.0.2.68eth1IP192.168.1.1eth0连接了因特网,但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

第一个命令涉及内核参数相关的配置文件,它的目的是打开路由转发功能,否则无法实现应用。第二个命令则是iptablesnat表做了一个IP转发的操作。-o选项后面跟设备名,表示出口的网卡;MASOUERADE表示伪装

  1. 保存和备份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有两个基础概念,分别是zoneservice,每一个zone里面有不同的iptables规则,默认一共有9zone,而CentOS7默认的zonepublic。获取系统所有的zone

drop(丢弃):任何接收的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网络连接。

block(限制):任何接收的网络连接都被IPv4icmp-host-prohibited信息和IPv6icmp6-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日(这一天必须是星期三)的1001分执行命令 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,结果算出来应该是08163个数。当遇到多个数(分钟、小时、月、周)时,则需要用逗号隔开。

若查看crond服务是否开启、

 

Active那行,如果是启动状态显示activerunning),未启动则显示为inactivedead)。

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

rsyncremote sync 远程同步)不仅可以远程同步数据,而且可以本地同步数据,这两点都类似与scp,不同的是,它不会覆盖以前的数据,而是先判断已经存在的数据和新数据的差异,只有数据不同时才会把不相同的部分覆盖。

 

上例将会把/etc/passwd同步到/tmp/目录下,并改名1.txt。如果是远程复制,数据备份就是这样的形式——IPpath

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:加上该选项,将会在传输过程中压缩*

  1. 建立目录和文件

 

  1. 使用-a选项

 

本来想把test1目录直接复制成test2目录,可结果rsync却建成了test2目录,然后把test1放到test2当中。为了避免可以这样做:

 

加一个斜杠就好了,所以在使用rsync备份目录时,要养成加斜杠的习惯。前面说-a选项等同于-rlptgoD,且-a还可以和--no-OPTIN一并使用。

 

上例中使用了-v选项,跳过了非普通文件123.txt。其实123.txt是一个软连接文件,如果不使用-l选项,系统则不理会软连接文件。虽然加了-l选项能复制软连接文件,但软连接的目标文件却没有复制。有时我们需要复制软连接文件所指向的目标文件如下:

  1. 使用-L选项

 

加上-L选项就可以把SRC中软连接的目标文件复制到DST

  1. 使用-u选项

查看一下test1/1test2/1的创建时间,然后使用touch修改一下test2/1的创建时间。如果不加-u选项,会把test2/1的创建时间变成和test1/1

 

上例中二者的创建时间是一样的下面修改test2/1的创建时间,然后不加-u同步

 

这里的test2/1的创建时间还是和test1/1一样,下面加上-u选项

 

加上-u选项后,不会再把test1/1同步为test2/1

  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,只是这个文件不能直接使用catVimheadtail等工具查看。

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文件中。

posted @ 2020-11-30 08:36  哆啦丢了梦  阅读(247)  评论(0编辑  收藏  举报