课前预习
10.28 rsync工具介绍
10.29/10.30 rsync常用选项
10.31 rsync通过ssh同步
10.32/10.33 rsync通过服务同步
10.34 linux系统日志
10.35 screen工具
10.28 rsync工具介绍
备份工具rsync,从字面的意思理解为remote sync(远程同步),rsync不仅可以远程同步数据,而且还可以本地同步数据。
安装rsync:yum install -y rsync
- rsync常用选项:
-a:这是归档模式,表示以递进的方式传输文件,并保持文件所有属性,等同于rlptgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
- rsync的命令格式
rsync [OPTION] … SRC DEST
rsync [OPTION] … SRC [user@]host:DEST
rsync [OPTION] … [user@]host:SRC DEST
rsync [OPTION] … SRC [user@]host::DEST
rsync [OPTION] … [user@]host::SRC DEST
- 举例说明常用用法:
[root@hongwei ~]# rsync -av /etc/passwd /tmp/11.txt sending incremental file list passwd sent 1,106 bytes received 35 bytes 2,282.00 bytes/sec total size is 1,014 speedup is 0.89
上面的例子会把etc/passwd同步到tmp/目录下并改名为11.txt。
如果是远程复制,数据备份就是这样的形式IP:path 如下:
[root@hongwei ~]# rsync -av /etc/passwd 192.168.73.128:/root/
在备份的时候养成加斜杠的习惯。
10.31 rsync通过ssh同步
在之前介绍的5种命令格式中,第二种和第三种就是属于通过ssh方式备份数据的。这种方式就是让用户登录远程机器,然后执行rsync任务。
[root@hongwei ~]# rsync -av test1/ 192.168.73.128:/tmp/test2/ The authenticity of host '192.168.73.128 (192.168.73.128)' can't be established. ECDSA key fingerprint is a8:44:0c:5f:9e:63:58:c3:4e:7d:df:b9:3d:85:c5:cd. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.73.128' (ECDSA) to the list of known hosts. root@192.168.73.128's password: sending incremental file list rsync: change_dir "/root//test1" failed: No such file or directory (2) created directory /tmp/test2 sent 20 bytes received 45 bytes 5.20 bytes/sec total size is 0 speedup is 0.00 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
上面例子的方式就是通过ssh复制数据的,需要输入192.168.73.128的那台机器的root密码。
[root@hongwei ~]# rsync -avL 192.168.73.128:/tmp/test2/ ./test3/ root@192.168.73.128's password: receiving incremental file list created directory ./test3 ./ sent 27 bytes received 43 bytes 10.77 bytes/sec total size is 0 speedup is 0.00
这就是第三种方式同步,但是以上二种方法都是需要输入密码。
10.32/10.33 rsync通过服务同步
这种方式可以理解为:在远程主机上建立一个rsync服务器,在服务器上配置好rsync的各种应用,然后将本机作为rsync的一个客户端连接远程的rsync服务器。
在主机上建立并配置rsync的配置文件/etc/rsyncd.conf,如下:
#vim /etc/rsyncd.conf port=873 log file=/var/log/rsync.log pid file=/var/run/rsyncd.pid address=192.168.133.130 [test] path=/root/rsync use chroot=true max connections=4 read only=no list=true uid=root gid=root auth users=test secrets file=/etc/rsyncd.passwd hosts allow=192.168.73.128
其中配置配置文件分为二部分:全局配置部分和模块配置部分。全局部分就是几个参数。而{test}以下部分就是模块配置部分了。一个配置文件可以有多个模块,模块名可自定义。
介绍参数的作用:
port:指定在哪个端口启动rsyncd服务,默认是873端口。
log file:指定日志文件。
pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。
address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服务,如果不指定该参数,默认是在全部IP上启动。
[]:指定模块名,里面内容自定义。
path:指定数据存放的路径。
use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件,阿铭建议你设置成false。
max connections:指定最大的连接数,默认是0,即没有限制。
read only ture|false:如果为true,则不能上传到该模块指定的路径下。
list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏。
uid/gid:指定传输文件时以哪个用户/组的身份传输。
auth users:指定传输时要使用的用户名。
secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码文件的权限一定要是600。格式:用户名:密码
hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。
当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带上密码,可以设定一个密码文件
rsync -avL test@192.168.133.130::test/test1/ /tmp/test8/ --password-file=/etc/pass
其中/etc/pass内容就是一个密码,权限要改为600
10.34 linux系统日志
日志记录了系统每天发生的各种各样的事情,比如检测系统状态,排查系统故障。可以通过日志来检查错误信息发生的原因,或者受到攻击时攻击者留下的痕迹。日志的主要功能是审计和监测,还可以实实地监测系统状态、
- /var/log/messages
它是核心系统日志文件,包含了系统启动时的引导消息,以及系统运行时的其他状态信息。I/O错误。网络错误和其他系统错误都会记录到这个文件中。其他消息,比如某个人的身份切换到root,以及用户自定义安装额度软件的日志也会在这里列出。
通常情况下,/var/log/ messages是做故障诊断时首先要查看的文件。那你肯定会说,这么多日志都记录到这个文件中,如果服务器上有很多服务,岂不是这个文件很快就会写得很大?没错,但是系统个日志轮询的机制,每星期切换一个日志,切换后的日志名字类似于messages20170301,会存放/var/log目录下面,连同 messages共有5个这样的日志文件。这里的20170301就是日期,它表示日制的年月日。在 CentoS5里,这个后缀并不是目期,而是数字1、2、3或4。这是通过 orotate控制来实现的,它的配置文件是etc/ logrotate. conf如果没有特殊需求,请不要修改这个配置文件)
cat /etc/logrotate. conf # see "man logrotate"for details # rotate log files weekly weekl #keep 4 weeks worth of backlogs rotate 4 #create new(empty) log files after rotating old ones create #use date as a suffix of the rotateed file datex #uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp-. we 'll rotate them here /var/log/wtmp { monthIy create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missing monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.
这个配置文件里面的内容还是很容易明白的,都带有解释。/ var/log/ messages是由 rsyslogd这个守护进程产生的,如果停止这个服务则系统不会产生/var/log/ messages,所以这个服务不要停止。rsyslogd服务的配置文件为 /etc/rsyslog. conf,这个文件定义了日志的级别。若没有特殊需求,这个配置文件是不需要修改的。
- dmesg
除了关注/ var/log/messages外,你还应该多关注一下 dmesg这个命令,它可以显示系统的启动信息。
如果你的某个硬件有问题(比如网卡)用这个命令也是可以看到的# dmesg I head [ 0.000000] Initializing cgroup subsys cpuset [ 0.000000 Initializing cgroup subsys cpu [ 0.000000) Initializing cgroup subsys cpuacct [ 0.000000] Linux version 3. 10.0-514el7x86-64(builderekbuilder dev centos. org)(gcc version 4.8.520150623( Red Hat4.8.5-11)(GC))#1 SMP Tue Nov2216:42:41UTC2016 [ 0.000000] Command line: BOOT_ IMAGE=/vmlinuz-3.10.0-514e17.x8664 root=UUID=21deb183-29b5-47b4-804C-e8eob792c3ee ro crashkernel=auto rhgb quiet LANG=Zh CN UTF-8 [ 0.000000] Disabled fast string operations [ 0.000000] e820: BIOS-provided physical RAM map [ 0.000000 BI0S-e820: [mem 0X0000000000000000-0x00000000000gefffl usable [ 0.000000] BI0S-e820: [mem 0x00o000000009f000-0x000000000009ffff] reserved
- 13.8.3安全日志
关于安全方面的日志,阿铭简单介绍几个命令或者日志。
13.9 xargs与exec
1ast命令用来查看登录 Linux的历史信息,具体用法如下[root@hongwei ~]# last root pts/0 192.168.73.1 Thu Jun 21 09:07 still logged in reboot system boot 3.10.0-123.el7.x Thu Jun 21 09:06 - 09:07 (00:00) root pts/0 192.168.73.1 Tue Jun 19 14:54 - down (00:43) reboot system boot 3.10.0-123.el7.x Tue Jun 19 11:11 - 15:38 (04:27) root pts/0 192.168.73.1 Thu Jun 14 21:56 - down (00:24) reboot system boot 3.10.0-123.el7.x Thu Jun 14 21:56 - 22:21 (00:25) root tty1 Thu Jun 14 11:46 - down (00:00) root pts/0 192.168.73.1 Thu Jun 14 08:54 - down (02:52) reboot system boot 3.10.0-123.el7.x Thu Jun 14 08:54 - 11:46 (02:52) root pts/0 192.168.73.1 Wed Jun 13 20:23 - down (01:47) reboot system boot 3.10.0-123.el7.x Wed Jun 13 20:22 - 22:10 (01:48) root pts/0 192.168.73.1 Mon Jun 11 21:19 - down (00:45) reboot system boot 3.10.0-123.el7.x Mon Jun 11 21:17 - 22:04 (00:47) root pts/1 192.168.73.1 Mon Jun 11 18:10 - down (00:49) root pts/0 192.168.73.1 Mon Jun 11 12:23 - down (06:36) reboot system boot 3.10.0-123.el7.x Mon Jun 11 12:22 - 18:59 (06:36) root pts/1 192.168.73.1 Sun Jun 10 16:46 - down (00:00) root pts/0 192.168.73.1 Sun Jun 10 14:33 - down (02:13) reboot system boot 3.10.0-123.el7.x Sun Jun 10 14:32 - 16:46 (02:14) root pts/0 192.168.73.1 Sat Jun 9 21:06 - down (00:17) root pts/1 192.168.73.1 Sat Jun 9 21:00 - 21:06 (00:05) root pts/0 192.168.73.1 Sat Jun 9 20:58 - 21:00 (00:02) root tty1 Sat Jun 9 20:58 - down (00:26) reboot system boot 3.10.0-123.el7.x Sat Jun 9 20:57 - 21:24 (00:26) root pts/1 192.168.73.1 Sat Jun 9 20:46 - down (00:11) root pts/1 192.168.73.1 Sat Jun 9 20:38 - 20:46 (00:08) root pts/0 192.168.73.1 Sat Jun 9 19:52 - 20:47 (00:55) root tty1 Sat Jun 9 19:52 - down (01:05) reboot system boot 3.10.0-123.el7.x Sat Jun 9 19:49 - 20:57 (01:07) root pts/0 192.168.73.1 Fri Jun 8 22:06 - down (00:11) root tty1 Fri Jun 8 22:06 - down (00:11) reboot system boot 3.10.0-123.el7.x Fri Jun 8 22:05 - 22:17 (00:12) root pts/2 192.168.73.1 Fri Jun 8 18:14 - down (00:15) root pts/1 192.168.73.1 Fri Jun 8 16:09 - down (02:20) root pts/0 192.168.73.1 Fri Jun 8 13:06 - down (05:23) root tty1 Fri Jun 8 13:06 - down (05:23) reboot system boot 3.10.0-123.el7.x Fri Jun 8 13:05 - 18:29 (05:23) root pts/0 192.168.73.1 Wed Jun 6 11:01 - down (03:17) reboot system boot 3.10.0-123.el7.x Wed Jun 6 10:56 - 14:18 (03:22) root pts/0 192.168.73.1 Tue Jun 5 20:41 - down (01:46) root tty1 Tue Jun 5 20:41 - down (01:46) reboot system boot 3.10.0-123.el7.x Tue Jun 5 20:40 - 22:27 (01:47) root pts/0 192.168.73.1 Mon Jun 4 21:55 - 21:59 (00:04) root tty1 Mon Jun 4 21:55 - down (00:04) reboot system boot 3.10.0-123.el7.x Mon Jun 4 21:55 - 21:59 (00:04) root pts/0 192.168.73.1 Sat Jun 2 10:58 - down (00:26) root pts/0 192.168.73.1 Sat Jun 2 09:32 - 10:58 (01:26) root tty1 Sat Jun 2 09:31 - down (01:53) reboot system boot 3.10.0-123.el7.x Sat Jun 2 09:31 - 11:25 (01:53) root pts/1 192.168.73.1 Fri Jun 1 14:33 - down (00:21) root pts/1 192.168.73.1 Fri Jun 1 14:32 - 14:33 (00:00) root pts/0 192.168.73.1 Fri Jun 1 09:55 - 14:41 (04:46) root tty1 Fri Jun 1 09:52 - down (05:02) reboot system boot 3.10.0-123.el7.x Fri Jun 1 09:51 - 14:54 (05:02) root pts/1 192.168.73.1 Thu May 31 15:03 - down (01:37) root pts/0 192.168.73.1 Thu May 31 11:27 - down (05:13) root tty1 Thu May 31 11:27 - down (05:13) reboot system boot 3.10.0-123.el7.x Thu May 31 11:26 - 16:41 (05:14) root pts/0 192.168.73.1 Thu May 31 19:26 - 11:26 (-8:00) root tty1 Thu May 31 19:26 - down (-8:00) reboot system boot 3.10.0-123.el7.x Thu May 31 19:26 - 11:26 (-7:-59) root pts/0 192.168.73.1 Thu May 31 18:52 - down (-7:-28) root tty1 Thu May 31 18:23 - down (-6:-58) reboot system boot 3.10.0-123.el7.x Thu May 31 18:22 - 11:24 (-6:-58) root pts/0 192.168.73.1 Wed May 30 17:17 - down (00:10) root tty1 Wed May 30 17:16 - down (00:10) reboot system boot 3.10.0-123.el7.x Wed May 30 17:16 - 17:27 (00:11) root pts/0 192.168.73.1 Wed May 30 16:13 - down (01:02) root tty1 Wed May 30 16:13 - down (01:02) reboot system boot 3.10.0-123.el7.x Wed May 30 16:13 - 17:16 (01:03) root pts/0 192.168.73.1 Wed May 30 04:46 - 22:49 (-5:-57) root tty1 Wed May 30 04:41 - down (-5:-51) reboot system boot 3.10.0-123.el7.x Wed May 30 04:41 - 22:49 (-5:-51)
上例中,从左至右依次为账户名称、登录终端、登录客户端IP、登录日期及时长。1ast命令输出的信息实际上是读取了二进制日志文件/ar/og/wtmp,只是这个文件不能直接使用cat、Vim、head、tai1等工具查看。
另外 var/log/secure是和登录信息有关的日志文件。该日志文件记录验证和授权等方面的信息,比如ssh登录系统成功或者失败时,相关的信息都会记录在这个日志里。
以后在日常的管理工作中,要养成多看日志的习惯,尤其是一些应用软件的日
志。比如 Apache、MSQL、PHP(后续内容会讲到)等常用的软件,看它们的错误日志,可以帮助你排查问题以及监控它们的运行状况是否良好。
- 3.9.1 xargs应用
介绍一下上例表示把管道符前面的输出作为xargs后面的命令的输入。它的好处在于可以把原本两步或者多步才能完成的任务仅用一步完成。 xargs常常和ind命令一起使用,比如查找当前目录创建时间大于10天的文件,然后再删除,如下所示:# echo"121212121212”>123.txt # ls 123. txt | xargs cat 121212121212
这种应用是最为常见的。 xargs后面的rm也可以加选项,当为目录时,就需要加-r选项了。 xargs还有一个神奇的功能。比如我现在要查找当前目录下所有后缀为txt的文件,然后把这些文件变成 txt.bak。正常情况下必须写脚本才能实现,但是使用 xargs就能一步完成,如下所示# find. -mtime +10 |xargs rm
# mkdir test # cd test # touch 1. txt 2. txt 3. txt 4.txt 5.txt # ls 1.txt 2. txt 3.txt 4.txt 5.txt #ls *.txt |xargs -n1 -i{} mv {} {}_bak # ls 1.txt bak 2. txt bak 3. txt bak 4.txt bak 5. txt bak
上例中, xargs-n1-i{}类似于for循环,-n1表示逐个对象进行处理,-i{}表示用{}取代前对象,m{}bak相当于mv 1.txt 1.txt_bak。
- exec应用
使用find命令时,经常使用-exec选项,它可以达到和 xargs同样的效果。比如查找当前目录创建时间大于10天的文件并删除,如下所示
# find.-mtime -exec rm -rf {} \;
这个命令中也是用{}替代前面find出来的文件。后面的作为;的转义符,否则 shells会把分号作为该行命令的结尾
exec同样可以实现上面批量更改文件名的需求,如下所示:
## 1s 1.txt bak 2. txt bak 3. txt bak 4. txt bak 5. txt bak # find./* bak -exec mv{}{}_bak \; #ls 1.txt_bak_bak 2.txt_bak_bak 3.txt_bak_bak 4.txt_bak_bak 5.txt_bak_bak
13.10 screen工具介绍
有时我们要执行一个命令或者脚本,需要几小时甚至几天,在这个过程中,如果中途断网或出现
其他意外情况怎么办?当然,你可以把命令或者脚本放到后台运行,不过也不保险。下面就介绍两种方法来避免这类状况发生。
- 使用nohup
首先写一个sleep.sh脚本,然后把它放到后台执行,如下所示
# cat /usr/local/sbin/sleep.sh #!/bin/bash sleep 1000 [roothongwei~]# nohup sh /usr/local/sbin/sleep.sh & [1] 19997
上例中,直接在sleep.sh后面加&虽然可以在后台运行,但是当退出该终端时,这个脚本很方可能也会退出。所以在前面加上nohup就没有问题了,执行后会在当前目录下生成一个nohup的文件,它的作用就是防止进程意外中断,并且会把输出信息记录到nohup文件中。
- screen工具的使用
简单来说, screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。 screen中有会话的概念,用户可以在一个 screen会话中创建多个 screen窗口,在每一个 screen窗口中就像操作一个真实的SSH连接窗口一样。介绍 screen的一个简单应用。
首先打开一个会话,直接输入 screen命令,然后回车进入 screen会话窗口。如果你的系统中没有screen命令,请用命令 yum insta11- y screen安装。它的使用也很简单,直接输入如下命令,就可以进入一个虚拟终端# screen
接着查看已经打开的scre会话,如下所示
# screen -ls There is a screen on: 20001.pts-o localhost (Attached) 1 Socket in /var/run/screen/S-root
然后按CtrH+A键,再按d退出该 screen会话(只是退出,并没有结束,结束 screen会话要按Ctr+D键或者输入exit)。退出后如果还想再次登录某个 screen会话,可以使用命令 sreen-r[ screen编号],这个编号就是上例中那个2001。如果当前只打开了一个screen会话,后面的编号是可以省略的。当你有某个需要长时间运行的命令,或者脚本时,就打开一个 screen会话,然后运行该任务,按Ctrl+A键,再按d退出会话。这样不影响终端窗口上的任何操作。