2018-8-30 直播课堂笔记

不知不觉我们的第一阶段课程就要告一段落了,学习很多,感触也还很多。都是一些基础知识,非常有用的,老师要特意而我们一周的时间来梳理。

一、rsync工具介绍

二、rsync常用选项

三、rsync通过ssh同步

四、 rsync通过服务同步

五、linux系统日志

六、screen工具

一、rsync工具介绍

Rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,同时可以对上传部分先进行压缩,因此rsync效率很高。rsync可以复制显示目录属性及文件,而且可以选择性地压缩及递归复制。但是rsync每次执行rsync命令都会遍历目标目录,如果文件数达到了一定规模,每次遍历就会消耗很多资源。

Rsync 的基本特点如下:

1.可以镜像保存整个目录树和文件系统;

2.可以很容易做到保持原来文件的权限、时间、软硬链接等;

3.无须特殊权限即可安装;

4.优化的流程,文件传输效率高;

5.可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;

6.支持匿名传输。

二、rsync常用选项

rsync常用选项

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性。包含-rtplgoD参数选项

-r 同步目录时要加上,类似cp时的-r选项

-v 详细输出模式,传输时的进度等信息

-l 保留软连接

若是拷贝的原目录里面有一个软链接文件,那这个软链接文件指向到了另外一个目录下

在加上-l,它会把软链接文件本身拷贝到目标目录里面去

-L 加上该选项后,同步软链接时会把源文件给同步

-p 保持文件的权限属性

-o 保持文件的属主

-g 保持文件的属组

-D 保持设备文件信息

/dev/sdb1 这样的设备文件有它的特殊性,如果不加-D 可能拷贝过去就是一个非常普通的文件,不能当设备来用

-t 保持文件的时间属性

--delete 删除DEST中SRC没有的文件

--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步

-P 显示同步过程,比如速率,比-v更加详细

-u 加上该选项后,如果DEST中的文件比SRC新,则不同步

update

-z 传输时压缩

扩展知识:rsync与scp区别

1.scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录.
scp命令的用处:
scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件。

scp命令基本格式:

     scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[user@]host1:]file1 [...] [[user@]host2:]file2

例子:scp -r /home/soft/ [email protected]:/home/others/

当使用TCP的时候,rsync在机器之间数据同步不用输入对端机器的密码;当你使用SSH协议作为底层协议,那么在同步数据的时候就必须输入密码才可以完成数据的同步。scp与rsync两个命令不仅仅是可以使用在机器之间同步数据,在一个机器内部也是可以进行数据的同步。但是对于scp来说,除了在机器之间和一个机器目录之间进行数据同步之外,还可以在两台不同机器之间进行数据同步。比如你在A机器,可以对B、C两台机器上的数据进行同步,但是rsync就不可以;也就是说当rsync进行跨机器同步数据的时候只可以在本机与另外一台机器之间进行数据的同步。

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]... SRC [USER@]HOST::DEST

6.rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式, rsync 有六种不同的工作模式:

1) 拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。

     如:rsync -a  ./test.c  /backup

2) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。

如:rsync -avz  test.c  [email protected]:/home/user/src

3) 使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。

如:rsync -avz [email protected]:/home/user/src  ./src

4) 从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。

如:rsync -av [email protected]::www  /databack

5) 从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。

如:rsync -av /databack [email protected]::www

6) 列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。

如:rsync -v rsync://172.16.78.192  /www 

三、rsync通过ssh同步

将本地文件传输到远程主机。两台主机均需安装rsync工具

1.例:[root@bluequark dir1]# rsync -avz /root/dir1/ [email protected]:/tmp/

2. //将192.168.1.211:/root/下的sh文件复制到本地的/root目录下

    [root@bluequark ~]# rsync -avPz [email protected]:/root/*.sh /root/

参数-e 指定端口传输文件

////指定对方侦听的22端口,就可以连接对面的22端口。 [root@bluequark ~]# rsync -avP -e "ssh -p 22" /root/1.txt

//ssh命令可以通过-p参数指定对方打开的ssh端口(默认是22,但是往往出于安装原因会改为其他不知道端口)

[root@bluequark ~]# ssh -p 22 192.168.1.211

3. ssh免密同步(密钥验证)

a.//如192.168.1.215需要免密码实现到192.168.1.211的rsync复制,可以通过密钥认证的方式 //生成密钥对

[root@bluequark ~]# ssh-keygen -t rsa

b. //将公钥复制到192.168.1.211,并将公钥内容添加到/root/.ssh/authorized_keys文件 [root@bluequark ~]# ssh-copy-id 192.168.1.211

c. [root@lanquark ~]# rsync -av 192.168.1.211:/etc/passwd /tmp/mypasswd

四、 rsync通过服务同步

服务端配置

1.新建rsync的配置文件

//以192.168.1.211作为服务端,192.168.1.215作为客户端 //在192.168.1.211上新建rsync服务端的配置文件

uid = nobody

gid = nobody

user chroot = no

max connections = 200

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

[backup]

path=/backup/

ignore errors

read only = no

list = no

hosts allow = 192.168.0.0/255.255.255.0

auth users = test

secrets file = /etc/rsyncd.password

注释:

uid = nobody

进行备份的用户,nobody 为任何用户

gid = nobody 

进行备份的组,nobody为任意组

use chroot = no

如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以root权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true.但是这个一般不需要,我选择no或false

list = no

不允许列清单

max connections = 200 

最大连接数

timeout = 600 

覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。

pidfile = /var/run/rsyncd.pid  

pid文件的存放位置

lock file = /var/run/rsync.lock  

锁文件的存放位置

log file = /var/log/rsyncd.log   

日志文件的存放位置

[backup]  

这里是认证模块名,即跟samba语法一样,是对外公布的名字

path = /backup/

这里是参与同步的目录

ignore errors  

可以忽略一些无关的IO错误

read only = no

允许可读可写

list = no

不允许列清单

hosts allow = 192.168.1.0/255.255.255.0

这里跟samba的语法是一样的,只允许192.168.21.0/24的网段进行同步,拒绝其它一切

auth users = test 

认证的用户名

secrets file = /etc/rsyncd.password  

密码文件存放地址

注意: 

1、[backup]  认证模块名和 path = /backup/ 参与同步的目录

这里的path 大家要记好了,这里不要随便的一设置就直接完事,要知道这里是认证模块的,以后从客户机备份的数据会存储在这里。

2、auth users = redhat 认证的用户名 

这个名字是服务器端实实在在存在用户,大家不要直接跟步骤走却忽略了这点。如果服务器端少了这个的话我估计你的数据同步就实现不了,大家要谨记。

3、path = /backup/ 参与同步的目录

这个需要稍后自己要在根目录下自己建

cd /

mkdir backup

chmod –R 777 /backup

echo “test:test” > /etc/rsync.password

(这里我设置的是用户名和密码一致)

为了安全起见,我设置他的权限为600

chmod 600 /etc/rsync.password

2.创建rsync用户及共享目录/backup

[root@lanquark ~]# useradd rsync -M -s /sbin/nologin [root@lanquark ~]# id rsync uid=5004(rsync) gid=5004(rsync) groups=5004(rsync) [root@lanquark ~]# mkdir /backup [root@lanquark ~]# chown -R rsync /backup

3.创建密码文件

[root@lanquark ~]# echo "rsync_backup:123456" > /etc/rsync.password [root@lanquark ~]# chmod 600 /etc/rsync.password [root@lanquark ~]# cat /etc/rsync.password rsync_backup:123456

4.以守护进程方式启动:rsync --daemon

[root@lanquark ~]# rsync --daemon //验证是否启动,rsync守护进程默认监听873端口 [root@lanquark ~]# netstat -nltup | grep :873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 13571/rsync tcp6 0 0 :::873 :::* LISTEN 13571/rsync 或 [root@lanquark ~]# ps -ef | grep rsync | grep -v grep root 13571 1 0 21:50 ? 00:00:00 rsync --daemon

至此,服务器端设置完毕

客户端设定

1.创建密码文件

[root@lanquark ~]# echo "123456" >>/etc/rcync.password

[root@lanquark ~]# cat /etc/rcync.password 123456

[root@lanquark ~]# chmod 600 /etc/rsync.password

客户端设置完成。

[root@bluequark ~]# rsync -avz dir2/ [email protected]::backup --password-file=/etc/rsync.password

//在服务端查看

[root@lanquark ~]# ls /backup/

1.sh 2.sh iptables_cmd.sh

//从服务端往下拉文件

[root@bluequark ~]# rsync -avz [email protected]::backup /tmp/backup/ --password-file=/etc/rsync.password receiving incremental file list

created directory /tmp/backup

./ 1.sh 1.txt 2.sh iptables_cmd.sh

sent 143 bytes received 786 bytes 1,858.00 bytes/sec total size is 879 speedup is 0.95

[root@bluequark ~]# ls /tmp/backup/ 1.sh 1.txt 2.sh iptables_cmd.sh

五、linux系统日志

Linux系统中会有很多的日志文件,这些文件可以帮助我们了解很多系统的重要事件。这些文件一般都存放在/var/log目录中。常见的日志文件有:

1./var/log/messages:这个文件相当重要,几乎系统发生的所有错误信息或重要信息都会记录在这个文件中,包含系统启动时的引导消息及系统运行时的其他状态消息。

2./var/log/secure:记录系统的安全信息,如ssh、ftp、pop3

3./var/log/dmesg:记录系统在启动时核心检测过程所生产的各项信息

4./var/log/lastlog:记录系统上所有用户最后一次登录系统的信息,lastlog命令就是利用该文件的内容来显示数据的。

5./var/log/wtmp:记录用户登录系统及退出系统的信息,该文件是经过处理的,无法直接查看,可以使用相关命令来查看,如last和ac命令

6./var/log/boot.log:记录守护进程启动和停止相关的日志信息

7./var/log/faillog:记录登录失败时的用户信息

8./var/log/cron:记录与定时任务crontab相关的日志信息

9./var/log/httod/,/var/log/news/,/var/log/samba/*:各个服务的日志文件,记录各自的服务产生的日志信息

Linux系统提供了一个logrotate工具,与cron配合使用可以很方便地管理日志信息。

logrotate是按计划运行的。配置文件:/etc/logrotate.conf(主配置文件)和/etc/logrotate.d目录下的文件

dmesg命令

dmesg命令,会把系统硬件相关的日志列出来。这个日志是保存在内存中的,并不是一个文件

假如你的网卡有问题了,硬盘损坏了,都会记录在这个日志中

dmesg -c //清空当前日志,但是一重启这个系统,又会生成这些日志

/var/log/dmesg日志文件

这个日志文件和 dmesg命令 没有任何关联

它是系统启动的一个日志,记录的信息

last命令

默认情况下last读取/var/log/wtmp文件中的信息。

-n参数指定记录数
[root@bluequark ~]# last -n 5
root     pts/0        192.168.1.9      Mon Jun 18 07:59   still logged in   
root     pts/0        192.168.1.9      Mon Jun 18 07:46 - 07:58  (00:12)    
root     tty1                          Sun Jun 17 14:30   still logged in   
root     tty1                          Sat Jun 16 10:02 - 14:30 (1+04:27)   
reboot   system boot  3.10.0-693.el7.x Wed Jun 13 11:47 - 13:23 (5+01:35) 

-n参数指定记录数

[root@bluequark ~]# last -n 5

root pts/0 192.168.1.9 Mon Jun 18 07:59 still logged in

root pts/0 192.168.1.9 Mon Jun 18 07:46 - 07:58 (00:12)

root tty1 Sun Jun 17 14:30 still logged in root tty1 Sat Jun 16 10:02 - 14:30 (1+04:27) reboot system boot 3.10.0-693.el7.x Wed Jun 13 11:47 - 13:23 (5+01:35)

lastb命令,查看登录失败的用户,对应的文件时/var/log/btmp 日志

/var/log/btmp是二进制文件,不能直接cat

[root@bluequark ~]# lastb btmp begins Wed Jun 13 11:47:29 2018

lastlog显示当前系统上的所有用户最后一次登录系统的时间。(读取/var/log/lastlog)

六、screen工具

Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

会话恢复

只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。

多窗口

在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。

常见用法

screen直接回车就进入了虚拟终端

ctrl a组合键再按d退出虚拟终端,但不是结束

screen -ls 查看虚拟终端列表

screen -r id 进入指定的终端

screen -S w1

screen -r w1

例:需求,执行一个脚本,需要一天一夜,而且脚本会输出一些东西出来,这就意味着这个脚本不能中途断开,保证脚本不中断,有两种方法:

方法一:把这个任务丢到后台去,然后加一个日志的输出

命令nohup command &——>nohup 加执行命令 加日志 再加一个&符号

这时即使你的终端断开,依旧会在后台执行——>但虽然解决了任务中断的问题,但是没有办法实时查看输出的内容

方法二:screen工具,可以把要执行的命令,放到这个终端里,然后在退出pts/0之前,可以把screen丢到后台去,随时用, 随时查看

screen可以执行多个虚拟终端,同时运行,若想进入到其中一个,指定id即可

但是时间久了,有可能会忘记某一个screen是运行的是什么(因为名字是相同的)

我们可以给screen作业的名称

screen -S "test_screen"

screen -r 后可以加id号,可以是screen作业的名称

扩展知识:Xargs用法详解

1. 简介

  之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了xargs命令。

2. 选项解释

-0 当sdtin含有特殊字元时候,将其当成一般字符,想/'空格等

例如:root@localhost:~/test#echo "//"|xargs  echo 

      root@localhost:~/test#echo "//"|xargs -0 echo /

-a file 从文件中读入作为sdtin,(看例一)

-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。(例二)

-p 当每次执行一个argument的时候询问一次用户。(例三)

-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的。(例四)

-t 表示先打印命令,然后再执行。(例五)

-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替。(例六)

-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。(例七)

-s num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数。(例八)

-L  num Use at most max-lines nonblank input lines per command line.-s是含有空格的。

-l  同-L

-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符(例九)

-x exit的意思,主要是配合-s使用。

-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

3.实例:

cat test.txt | xargs -n 3                   #将单行划分为多行,每行3个字
echo "splitxsplitxsplitxsplitx" | xargs -d x      #使用-d将x作为输入定界符(默认是使用IFS作为输入定界符的)
echo "splitxsplitxsplitxsplitx" | xargs -d x -n 2   #将以上结果划分成多行,每行2个字
cat args.txt | xargs -n 2 ./test.sh          #将参数写在args.txt中,每次可以修改-n的数字选择传多少个参数给脚本test.sh
cat args.txt | xargs -I {} ./test.sh -p {} -l    #从args.txt读取参数,脚本test.sh每次需要传入3个参数,中间的参数为不固定的
cat files.txt | xargs -I {} cat {}          #将接收到的参数打印出来
cat files.txt | ( while read arg; do $arg; done )  #同上

redis-cli KEYS "pattern" | xargs redis-cli DEL   #通过模糊匹配pattern正则,删除对应的redis键值对

redis-cli -a password KEYS "godel*" | xargs redis-cli -a password DEL  #同上, -a参数指定密码


注意:将命令输出作为xargs命令的输入的时候,最好为输出的各行添加一个0值字节终止符。xargs默认是使用空格最为定界符分割参数的。这样的话如果传入的单行输出中包含空格,那么会被以空格分割成多个参数。例如"This is test"传入xargs时,会被默认分割成3个参数。如果用0值字节终止符,那么\0就被作为定界符,此时,包括空格的单行就能正确地解析为单个参数了。所以在用的时候先加-0参数再加其他参数:xargs -0 ...

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/82258204
今日推荐