Rsync,Linux日志及Screen工具介绍
第十六次课 Rsync,Linux日志及Screen工具介绍
目录
一、rsync工具介绍
二、rsync常用选项
三、rsync通过ssh同步
四、 rsync通过服务同步
五、linux系统日志
六、screen工具
七、扩展
一、rsync工具介绍
Rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,同时可以对上传部分先进行压缩,因此rsync效率很高。rsync可以复制显示目录属性及文件,而且可以选择性地压缩及递归复制。但是rsync每次执行rsync命令都会遍历目标目录,如果文件数达到了一定规模,每次遍历就会消耗很多资源。
Rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server 会打开一个 873 的服务通道 (port) ,等待对方 Rsync 连接。连接时, Rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync 支持大多数的类 Unix 系统,无论是 Linux 、 Solaris 还是 BSD 上都经过了良好的测试。此外,它在 windows 平台下也有相应的版本,比较知名的有 cwRsync 和 Sync2NAS 。
Rsync 的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用 rcp 、 ssh 等方式来传输文件,当然也可以通过直接的 socket 连接;
6.支持匿名传输。
核心算法介绍:
假定在名为α和β的两台计算机之间同步相似的文件 A 与 B ,其中α对文件 A 拥有访问权,β对文件 B 拥有访问权。并且假定主机α与β之间的网络带宽很小。那么 rsync 算法将通过下面的五个步骤来完成:
1.β将文件 B 分割成一组不重叠的固定大小为 S 字节的数据块。最后一块可能会比 S 小。
2.β对每一个分割好的数据块执行两种校验:一种是 32 位的滚动弱校验,另一种是 128 位的 MD4 强校验。
3.β将这些校验结果发给α。
4.α通过搜索文件 A 的所有大小为 S 的数据块 ( 偏移量可以任选,不一定非要是 S 的倍数 ) ,来寻找与文件 B 的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5.α发给β一串指令来生成文件 A 在β上的备份。这里的每一条指令要么是对文件 B 经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件 B 的任何一个数据块匹配上的。
如系统中不存在rsync命令,需要安装rsync包。
[root@lanquark chap04]# yum -y install 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 有六种不同的工作模式:
拷贝本地文件。当 SRC 和 DES 路径信息都不包含有单个冒号 ":" 分隔符时就启动这种工作模式。
使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号 ":" 分隔符时启动该模式。
使用一个远程 shell 程序 ( 如 rsh 、 ssh) 来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号 ":" 分隔符时启动该模式。
从远程 rsync 服务器中拷贝文件到本地机。当 SRC 路径信息包含 "::" 分隔符时启动该模式。
从本地机器拷贝文件到远程 rsync 服务器中。当 DST 路径信息包含 "::" 分隔符时启动该模式。
列远程机的文件列表。这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。
二、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 传输时压缩
同步本地文件
//把/etc/passwd文件拷贝到/tmp下并改名为1.txt
[root@lanquark ~]# rsync -av /etc/passwd /tmp/1.txt
sending incremental file list
passwd
sent 1291 bytes received 31 bytes 2644.00 bytes/sec
total size is 1217 speedup is 0.92
同步目录
[root@bluequark ~]# ls dir1/
a c d
[root@bluequark ~]# ls /tmp/
1.txt
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
[root@bluequark ~]# rsync -av /root/dir1/ /tmp/dir_test/
sending incremental file list
created directory /tmp/dir_test
./
a
c
d
sent 204 bytes received 112 bytes 632.00 bytes/sec
total size is 0 speedup is 0.00
[root@bluequark ~]# ls /tmp/dir_test/
a c d
rsync远程命令同步/拷贝
//将192.168.1.211 /tmp/1.txt同步到192.168.1.215的 /tmp/1.txt
[root@lanquark ~]# rsync -avz /tmp/1.txt 192.168.1.215:/tmp/1.txt
root@192.168.1.215's password:
sending incremental file list
1.txt
sent 577 bytes received 31 bytes 93.54 bytes/sec
total size is 1217 speedup is 2.00
//在192.168.1.215验证
[root@bluequark ~]# ls -l /tmp/1.txt
-rw-r--r--. 1 root root 1217 Jun 10 10:56 /tmp/1.txt
-l参数保留软链接
//-a选项默认包含-l
[root@bluequark dir1]# ln -s /etc/passwd /root/dir1/passwd.soft
[root@bluequark dir1]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 18 08:02 a
-rw-r--r--. 1 root root 0 Jun 18 08:02 c
-rw-r--r--. 1 root root 0 Jun 18 08:02 d
lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
[root@bluequark dir1]# rsync -av /root/dir1/ /tmp/dir_test/
sending incremental file list
./
passwd.soft -> /etc/passwd
sent 132 bytes received 22 bytes 308.00 bytes/sec
total size is 11 speedup is 0.07
[root@bluequark dir1]# ls -l /tmp/dir_test/
total 0
-rw-r--r--. 1 root root 0 Jun 18 08:02 a
-rw-r--r--. 1 root root 0 Jun 18 08:02 c
-rw-r--r--. 1 root root 0 Jun 18 08:02 d
lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
-L参数拷贝软链接所指定的源文件
[root@bluequark dir1]# ls /tmp/
1.txt
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
[root@bluequark dir1]# ls -l
total 0
-rw-r--r--. 1 root root 0 Jun 18 08:02 a
-rw-r--r--. 1 root root 0 Jun 18 08:02 c
-rw-r--r--. 1 root root 0 Jun 18 08:02 d
lrwxrwxrwx. 1 root root 11 Jun 18 08:07 passwd.soft -> /etc/passwd
[root@bluequark dir1]# rsync -avL /root/dir1/ /tmp/dir_test/
sending incremental file list
created directory /tmp/dir_test
./
a
c
d
passwd.soft
sent 1,178 bytes received 131 bytes 2,618.00 bytes/sec
total size is 901 speedup is 0.69
[root@bluequark dir1]# ls -l /tmp/dir_test/
total 4
-rw-r--r--. 1 root root 0 Jun 18 08:02 a
-rw-r--r--. 1 root root 0 Jun 18 08:02 c
-rw-r--r--. 1 root root 0 Jun 18 08:02 d
-rw-r--r--. 1 root root 901 May 8 09:46 passwd.soft
删除目标中源文件中没有的内容
[root@bluequark ~]# ls /tmp/dir_test/
a c d e g passwd.soft
[root@bluequark ~]# ls dir1
a c d passwd.soft
[root@bluequark ~]# rsync -av --delete /root/dir1/ /tmp/dir_test/
sending incremental file list
deleting g
deleting e
./
passwd.soft -> /etc/passwd
sent 132 bytes received 28 bytes 320.00 bytes/sec
total size is 11 speedup is 0.07
//验证
[root@bluequark ~]# ls /tmp/dir_test/
a c d passwd.soft
[root@bluequark ~]# ls dir1/
a c d passwd.soft
过滤指定文件,如txt文件
[root@bluequark dir1]# ls
a a.txt b.txt c c.txt d d.txt e.txt passwd.soft
[root@bluequark dir1]# ls /tmp/dir_test/
a c d passwd.soft
[root@bluequark dir1]# rsync -av --exclude "*.txt" /root/dir1/ /tmp/dir_test/
sending incremental file list
./
sent 133 bytes received 19 bytes 304.00 bytes/sec
total size is 11 speedup is 0.07
[root@bluequark dir1]# ls /tmp/dir_test/
a c d passwd.soft
多次过滤文件(指定多个exclude)
[root@bluequark dir1]# ls
a a.txt b.txt c c.txt d d.txt e.txt f passwd.soft
[root@bluequark dir1]# ls /tmp/dir_test/
a c d passwd.soft
[root@bluequark dir1]# rsync -av --exclude "*.txt" --exclude f /root/dir1/ /tmp/dir_test/
sending incremental file list
./
sent 129 bytes received 19 bytes 296.00 bytes/sec
total size is 11 speedup is 0.07
[root@bluequark dir1]# ls /tmp/dir_test/
a c d passwd.soft
增量更新
[root@bluequark dir1]# touch new_file
[root@bluequark dir1]# ls
a a.txt b.txt c c.txt d d.txt e.txt f new_file passwd.soft
[root@bluequark dir1]# ls /tmp/dir_test/
a c d passwd.soft
[root@bluequark dir1]# rsync -av --exclude "*.txt" --exclude f /root/dir1/ /tmp/dir_test/
sending incremental file list
./
new_file
sent 197 bytes received 38 bytes 470.00 bytes/sec
total size is 11 speedup is 0.05
[root@bluequark dir1]# ls /tmp/dir_test/
a c d new_file passwd.soft
-P参数显示传输过程信息(也可使用--progress)
[root@bluequark dir1]# ls /tmp/
1.txt
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
[root@bluequark dir1]# rsync -avP /root/dir1/ /tmp/dir_test/
sending incremental file list
created directory /tmp/dir_test
./
a
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=10/12)
a.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=9/12)
b.txt
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=8/12)
c
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=7/12)
c.txt
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=6/12)
d
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=5/12)
d.txt
0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=4/12)
e.txt
0 100% 0.00kB/s 0:00:00 (xfr#8, to-chk=3/12)
f
0 100% 0.00kB/s 0:00:00 (xfr#9, to-chk=2/12)
new_file
0 100% 0.00kB/s 0:00:00 (xfr#10, to-chk=1/12)
passwd.soft -> /etc/passwd
sent 655 bytes received 248 bytes 1,806.00 bytes/sec
total size is 11 speedup is 0.01
[root@bluequark dir1]# ls /tmp/
1.txt
dir_test
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-chronyd.service-jv2Bpr
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vgauthd.service-oCGr69
systemd-private-3ad1beb047b04c329eb72b75064ba7b3-vmtoolsd.service-1dlYNS
yum_save_tx.2018-06-17.14-37.9ILO4c.yumtx
yum_save_tx.2018-06-17.14-38.XuyzIC.yumtx
-u参数,如果DEST中的文件比SRC新,则不同步
[root@bluequark dir1]# ls
a a.txt b.txt c c.txt d d.txt e.txt f new_file passwd.soft
[root@bluequark dir1]# ls /tmp/dir_test/
a a.txt b.txt c c.txt d d.txt e.txt f new_file passwd.soft
[root@bluequark dir1]# echo -e '11111\n222222' >/tmp/dir_test/new_file
[root@bluequark dir1]# cat /tmp/dir_test/new_file
11111
222222
[root@bluequark dir1]# rsync -avu /root/dir1/ /tmp/dir_test/
sending incremental file list
sent 255 bytes received 12 bytes 534.00 bytes/sec
total size is 11 speedup is 0.04
[root@bluequark dir1]# cat /tmp/dir_test/new_file
11111
222222
-z参数压缩传输内容
[root@bluequark dir1]# rm -rf /tmp/dir_test/
[root@bluequark dir1]# rsync -avzP /root/dir1/ /tmp/dir_test/
sending incremental file list
created directory /tmp/dir_test
./
a
0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=10/12)
a.txt
0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=9/12)
b.txt
0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=8/12)
c
0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=7/12)
c.txt
0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=6/12)
d
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=5/12)
d.txt
0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=4/12)
e.txt
0 100% 0.00kB/s 0:00:00 (xfr#8, to-chk=3/12)
f
0 100% 0.00kB/s 0:00:00 (xfr#9, to-chk=2/12)
new_file
0 100% 0.00kB/s 0:00:00 (xfr#10, to-chk=1/12)
passwd.soft -> /etc/passwd
sent 625 bytes received 248 bytes 1,746.00 bytes/sec
total size is 11 speedup is 0.01
三、rsync通过ssh同步
将本地文件传输到远程主机。两台主机均需安装rsync工具(推/push)
[root@bluequark dir1]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.215 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::4b8:26ea:7a81:1309 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:23:78:9a txqueuelen 1000 (Ethernet)
RX packets 84128 bytes 66006284 (62.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 14985 bytes 1268977 (1.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@bluequark dir1]# rsync -avz /root/dir1/ root@192.168.1.211:/tmp/
The authenticity of host '192.168.1.211 (192.168.1.211)' can't be established.
ECDSA key fingerprint is SHA256:4YmqUS7zJyKrQPtb2UWWzGDE1GLENRUqVRRhsEF77MM.
ECDSA key fingerprint is MD5:10:39:f7:f6:d3:0e:5e:8a:37:e6:42:05:55:ec:5a:a4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.211' (ECDSA) to the list of known hosts.
root@192.168.1.211's password:
sending incremental file list
./
a
a.txt
b.txt
c
c.txt
d
d.txt
e.txt
f
new_file
passwd.soft -> /etc/passwd
sent 555 bytes received 215 bytes 102.67 bytes/sec
total size is 11 speedup is 0.01
//在192.168.1.211上验证
[root@lanquark ~]# ls /tmp/
1.cap c.txt new_file
1.txt d passwd.soft
a d.txt systemd-private-5dc4d8c670554b30ad5a839536759825-chronyd.service-yivMCy
a.txt e.txt systemd-private-5dc4d8c670554b30ad5a839536759825-vgauthd.service-uYg2rs
b.txt f systemd-private-5dc4d8c670554b30ad5a839536759825-vmtoolsd.service-JaTMim
c mysql.sock
将远程主机主机上的文件复制到本地(拉/pull)
//远程主机192.168.1.211
[root@lanquark ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.211 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::5114:2b77:d59a:bc78 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:2f:92:ee txqueuelen 1000 (Ethernet)
RX packets 294449 bytes 70104448 (66.8 MiB)
RX errors 0 dropped 26 overruns 0 frame 0
TX packets 36584 bytes 3889091 (3.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@lanquark ~]# ls
1.sh 2.sh anaconda-ks.cfg datafile demo download download1 employees iptables-script iptables_cmd.sh unixshellfromsamplle
//本地主机192.168.1.215
[root@bluequark dir1]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.215 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::4b8:26ea:7a81:1309 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:23:78:9a txqueuelen 1000 (Ethernet)
RX packets 84872 bytes 66189563 (63.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15262 bytes 1304652 (1.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@bluequark ~]# ls
1.txt anaconda-ks.cfg dir1
//将192.168.1.211:/root/下的sh文件复制到本地的/root目录下
[root@bluequark ~]# rsync -avPz root@192.168.1.211:/root/*.sh /root/
root@192.168.1.211's password:
receiving incremental file list
1.sh
293 100% 286.13kB/s 0:00:00 (xfr#1, to-chk=2/3)
2.sh
105 100% 102.54kB/s 0:00:00 (xfr#2, to-chk=1/3)
iptables_cmd.sh
481 100% 469.73kB/s 0:00:00 (xfr#3, to-chk=0/3)
sent 68 bytes received 633 bytes 155.78 bytes/sec
total size is 879 speedup is 1.25
[root@bluequark ~]# ls
1.sh 1.txt 2.sh anaconda-ks.cfg dir1 iptables_cmd.sh
参数-e 指定端口传输文件
////指定对方侦听的22端口,就可以连接对面的22端口。
[root@bluequark ~]# rsync -avP -e "ssh -p 22" /root/1.txt root@192.168.1.211:/root/1.txt
root@192.168.1.211's password:
sending incremental file list
1.txt
1,217 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1)
sent 1,302 bytes received 34 bytes 296.89 bytes/sec
total size is 1,217 speedup is 0.91
//ssh命令可以通过-p参数指定对方打开的ssh端口(默认是22,但是往往出于安装原因会改为其他不知道端口)
[root@bluequark ~]# ssh -p 22 192.168.1.211
root@192.168.1.211's password:
Last login: Sun Jun 17 10:59:56 2018 from 192.168.1.9
[root@lanquark ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.211 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::5114:2b77:d59a:bc78 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:2f:92:ee txqueuelen 1000 (Ethernet)
RX packets 295044 bytes 70302481 (67.0 MiB)
RX errors 0 dropped 26 overruns 0 frame 0
TX packets 36739 bytes 3912332 (3.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@lanquark ~]# exit
logout
Connection to 192.168.1.211 closed.
[root@bluequark ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.215 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::4b8:26ea:7a81:1309 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:23:78:9a txqueuelen 1000 (Ethernet)
RX packets 86013 bytes 66421505 (63.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15782 bytes 1371799 (1.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ssh免密同步(密钥验证)
//如192.168.1.215需要免密码实现到192.168.1.211的rsync复制,可以通过密钥认证的方式
//生成密钥对
[root@bluequark ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:2mOnhHP91zMzyG9YkK//7tgJkklfXtqxNCJu+Z06Qzw root@bluequark.com
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| o |
| S o..o=.|
| + .o *E===|
| + * oBooB+.|
| = +..oB+O+|
| . .+OO@|
+----[SHA256]-----+
//将公钥复制到192.168.1.211,并将公钥内容添加到/root/.ssh/authorized_keys文件
[root@bluequark ~]# ssh-copy-id 192.168.1.211
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.211's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.1.211'"
[root@bluequark ~]# ssh 192.168.1.211
Last login: Mon Jun 18 20:55:57 2018 from 192.168.1.215
[root@lanquark ~]# rsync -av 192.168.1.211:/etc/passwd /tmp/mypasswd
receiving incremental file list
passwd
sent 30 bytes received 1296 bytes 884.00 bytes/sec
total size is 1217 speedup is 0.92
[root@lanquark ~]# ls /tmp/
1.cap b.txt d.txt mypaswd systemd-private-5dc4d8c670554b30ad5a839536759825-chronyd.service-yivMCy
1.txt c e.txt mysql.sock systemd-private-5dc4d8c670554b30ad5a839536759825-vgauthd.service-uYg2rs
a c.txt f new_file systemd-private-5dc4d8c670554b30ad5a839536759825-vmtoolsd.service-JaTMim
a.txt d mypasswd passwd.soft
四、 rsync通过服务同步
服务端配置
1.新建rsync的配置文件
//以192.168.1.211作为服务端,192.168.1.215作为客户端
//在192.168.1.211上新建rsync服务端的配置文件
[root@lanquark ~]# touch /etc/rsyncd.conf
[root@lanquark ~]# ls -l /etc/rsyncd.conf
-rw-r--r--. 1 root root 458 Jun 18 21:28 /etc/rsyncd.conf
[root@lanquark ~]# vim /etc/rsyncd.conf
添加如下内容
uid = rsync
gid = rsync
use chroot = no
timeout = 600
max connections = 2000
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
host allow = 192.168.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
comment = for data backup by kennminn
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
5.加入开机自启动
[root@lanquark ~]# echo "rsync --daemon" >> /etc/rc.local
[root@lanquark ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
rsync --daemon
至此,服务器端设置完毕
客户端设定
1.创建密码文件
[root@lanquark ~]# echo "123456" >>/etc/rcync.password
[root@lanquark ~]# cat /etc/rcync.password
123456
[root@lanquark ~]# chmod 600 /etc/rsync.password
客户端设置完成。
验证
//在客户端192.168.1.215上往服务器推送目录dir2
[root@bluequark ~]# rsync -avz dir2/ rsync_backup@192.168.1.211::backup --password-file=/etc/rsync.password
sending incremental file list
./
1.sh
2.sh
iptables_cmd.sh
sent 657 bytes received 75 bytes 488.00 bytes/sec
total size is 879 speedup is 1.20
//在服务端查看
[root@lanquark ~]# ls /backup/
1.sh 2.sh iptables_cmd.sh
//从服务端往下拉文件
[root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::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
QA
//错误:no route to host
[root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::backup /tmp/backup/ --password-file=/etc/rsync.password
rsync: failed to connect to 192.168.1.211 (192.168.1.211): No route to host (113)
//解决,在firewalld防火墙添加规则即可
[root@lanquark ~]# firewall-cmd --zone=public --add-service=rsyncd
success
[root@bluequark ~]# telnet 192.168.1.211 873
Trying 192.168.1.211...
Connected to 192.168.1.211.
Escape character is '^]'.
@RSYNCD: 30.0
^]
telnet> quit
Connection closed.
[root@bluequark ~]# rsync -avz rsync_backup@192.168.1.211::backup /tmp/backup/ --password-file=/etc/rsync.password
receiving incremental file list
sent 64 bytes received 185 bytes 498.00 bytes/sec
total size is 879 speedup is 3.53
五、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/*:各个服务的日志文件,记录各自的服务产生的日志信息
syslogd服务可以帮助我们主动收集到设备的各种信息,并将其保存在服务器上,当出现问题时可以省去手动收集信息的麻烦,方便快捷的从syslogd服务中读取各种信息进行分析排错。
在centos7中已经用rsyslogd取代了syslogd。rsyslod是加强版的syslogd,且完美兼容syslogd。
rsyslogd的主要配置文件:/etc/rsyslog.conf
[root@bluequark ~]# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
...中间略...
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### end of the forwarding rule ###
配置日志记录的规则语法格式如下
服务名[.=!]信息等级 记录方式
服务名
ID | 服务名 | 说明 |
---|---|---|
0 | kern | 内核日志信息 |
1 | user | 用户日志信息 |
2 | 邮件系统日志信息 | |
3 | daemon | 系统守护进程日志信息 |
4 | auth | 安全管理日志信息 |
5 | syslog | syslogd守护进程日志信息 |
6 | lpr | 打印服务日志信息 |
7 | news | 新闻组服务日志信息 |
8 | uucp | uucp系统日志信息 |
9 | cron | cron守护进程日志信息 |
10 | authpriv | 私有的安全管理日志信息 |
11 | ftp | ftp守护进程 |
12-15 | local0-local7 | 系统保留 |
16-23 | 保留给系统本地使用 |
信息等级
ID | 信息等级 | 说明 |
---|---|---|
0 | emerg或panic | 系统不可用,死机 |
1 | alert | 警告事件,可能会影响到系统的运行,必须立即采取行动纠正事件 |
2 | cri | 严重错误,比error更严重的错误,如硬件故障 |
3 | error或err | 错误信息,如某些服务无法启动。需仔细检查错误原因 |
4 | warning | 警告信息,但不会影响系统的进程 |
5 | notice | 比info更应注意的信息,需特别处理 |
6 | info | 基本信息,主要是一些提示信息 |
7 | debug | 程序调试信息 |
连接符
服务名与信息等级之间有一个连接符。与后面的信息等级结合使用可以表示服务要记录哪些级别的日志信息。
1.:记录高于等于该等级的信息
2.=:只记录等于该等级的信息
3.!:记录除了该等级外的所有信息
配置文件/etc/sysconfig/rsyslog主要用来配置是否接收其他主机的日志信息。
[root@bluequark ~]# cat /etc/sysconfig/syslog
cat: /etc/sysconfig/syslog: No such file or directory
[root@bluequark ~]# cat /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS=""
//若想要让本机接收其他主机发送的日志文件,可以将SYSLOGD_OPTION的内容设为"-c 0 -r"
//SYSLOGD_OPTION="-c 0 -r"
日志文件如果不定期清理,可能会导致出现内容过多,容量过大,甚至填满整个磁盘空间的问题。Linux系统提供了一个logrotate工具,与cron配合使用可以很方便地管理日志信息。
logrotate是按计划运行的。配置文件:/etc/logrotate.conf(主配置文件)和/etc/logrotate.d目录下的文件
[root@bluequark ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
# 所有的文件每星期进行一次rotate的工作
weekly
# keep 4 weeks worth of backlogs
# 转储的文件保留4个
rotate 4
# create new (empty) log files after rotating old ones
# 自动建立新的日志文件,新建立的日志与原文件拥有相同的权限
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
# 不压缩转储后的文件,如果需要压缩可以去掉注释
#compress
# RPM packages drop log rotation information into this directory
# 读取/etc/lorotate.d目录下的文件来执行rotate工作
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
logrotate配置文件的相关参数说明
参数 | 说明 |
---|---|
compress | 通过gzip压缩转储后的文件 |
nocompress | 不需要压缩时,使用这个参数 |
copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
nocopytruncate | 备份日志文件但是不截断 |
create mode owner group | 转储文件,使用指定的文件模式创建新的日志文件 |
nocreate | 不建立新的日志文件 |
delaycompress 和 compress | 一起使用时,转储的日志文件到下一次转储时才压缩 |
nodelaycompress | 覆盖delaycompress选项,转储同时压缩 |
errors address | 转储时错误信息发送到指定的email |
ifempty | 即使是空文件也转储,这个是logrotate的默认选项 |
noifempty | 如果是空文件,则不转储 |
mail address | 把转储的日志文件发送到指定的email地址 |
nomail | 转储时不发送日志文件 |
olddir directory | 转存后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统中 |
noolddir | 转储后的日志文件和当前日志放在一个目录下 |
prerotate/endscript | 在转储以前需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行 |
postrotate/endscript | 在转储以后需要执行的命令可以放入这两个关键字之间,这两个关键字必须单独成行 |
daily | 指定转储周期为每天 |
weekly | 指定转储周期为每周 |
monthly | 指定转储周期为每月 |
rotate count | 日志文件删除之前转储的次数,0指没有备份,5指保留5个备份 |
tabootex[+]list | 让logrotate不转储指定扩展名的文件,默认扩展名是.rpm-orig,.rpmsave,v和~ |
size | 当日志文件达到指定大小才转储,size可指定byte(默认)及KB或MB |
dmesg命令
dmesg命令,会把系统硬件相关的日志列出来。这个日志是保存在内存中的,并不是一个文件
假如你的网卡有问题了,硬盘损坏了,都会记录在这个日志中
dmesg -c //清空当前日志,但是一重启这个系统,又会生成这些日志
/var/log/dmesg日志文件
这个日志文件和 dmesg命令 没有任何关联
它是系统启动的一个日志,记录的信息
last命令
默认情况下last读取/var/log/wtmp文件中的信息。
[root@bluequark ~]# last
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:21 (5+01:34)
root tty1 Tue Jun 12 14:20 - 15:35 (01:15)
reboot system boot 3.10.0-693.el7.x Tue Jun 12 14:20 - 13:21 (5+23:01)
root tty1 Tue May 8 09:54 - 09:59 (00:04)
reboot system boot 3.10.0-693.el7.x Tue May 8 09:51 - 13:21 (41+03:29)
wtmp begins Tue May 8 09:51:58 2018
-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)
wtmp begins Tue May 8 09:51:58 2018
lastb命令,查看登录失败的用户,对应的文件时/var/log/btmp 日志
/var/log/btmp是二进制文件,不能直接cat
[root@bluequark ~]# lastb
btmp begins Wed Jun 13 11:47:29 2018
lastlog显示当前系统上的所有用户最后一次登录系统的时间。(读取/var/log/lastlog)
[root@bluequark ~]# lastlog
Username Port From Latest
root pts/0 192.168.1.9 Mon Jun 18 07:59:04 -0400 2018
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
systemd-network **Never logged in**
dbus **Never logged in**
polkitd **Never logged in**
postfix **Never logged in**
sshd **Never logged in**
chrony **Never logged in**
kennminn **Never logged in**
六、screen工具
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
系统默认没有安装screen工具,可用yum工具安装
[root@bluequark ~]# yum -y install screen
常见用法
screen直接回车就进入了虚拟终端
ctrl a组合键再按d退出虚拟终端,但不是结束
screen -ls 查看虚拟终端列表
screen -r id 进入指定的终端
screen -S w1
screen -r w1
//进入虚拟终端
[root@bluequark ~]# screen
//screen -ls 查看虚拟终端列表
[root@bluequark ~]# screen -ls
There is a screen on:
6273.pts-0.bluequark (Attached)
1 Socket in /var/run/screen/S-root.
//退出虚拟终端ctrl+a;d
//[root@bluequark ~]# screen
[detached from 6273.pts-0.bluequark]
//进入指定终端
[root@bluequark ~]# screen -r 6273
[root@bluequark ~]# screen -ls
There is a screen on:
6273.pts-0.bluequark (Attached)
1 Socket in /var/run/screen/S-root.
[root@bluequark ~]#
//取名firest
[root@bluequark ~]# screen -S first
[root@bluequark ~]# screen -ls
There are screens on:
6289.first (Attached)
6273.pts-0.bluequark (Attached)
2 Sockets in /var/run/screen/S-root.
需求,执行一个脚本,需要一天一夜,而且脚本会输出一些东西出来,这就意味着这个脚本不能中途断开,保证脚本不中断,有两种方法:
方法一:把这个任务丢到后台去,然后加一个日志的输出
命令nohup command &——>nohup 加执行命令 加日志 再加一个&符号
这时即使你的终端断开,依旧会在后台执行——>但虽然解决了任务中断的问题,但是没有办法实时查看输出的内容
方法二:screen工具,可以把要执行的命令,放到这个终端里,然后在退出pts/0之前,可以把screen丢到后台去,随时用, 随时查看
screen可以执行多个虚拟终端,同时运行,若想进入到其中一个,指定id即可
但是时间久了,有可能会忘记某一个screen是运行的是什么(因为名字是相同的)
我们可以给screen作业的名称
screen -S "test_screen"
screen -r 后可以加id号,可以是screen作业的名称
七、扩展
扩展
- Linux日志文件总管logrotate http://linux.cn/article-4126-1.html
- xargs用法详解 http://blog.csdn.net/zhangfn2011/article/details/6776925
Rsync,Linux日志及Screen工具介绍的更多相关文章
- Linux 文件内容查看工具介绍-cat,less,more,tail,head
Linux 文件内容查看工具介绍 作者:北南南北来自:LinuxSir.Org摘要: 本文讲述几种常用文件内容的查看工具,比如cat.more.less.head.tail等,把这些工具最常用的参数. ...
- Linux操作系统的打包/归档工具介绍
Linux操作系统的打包/归档工具介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- rsync通过服务同步、Linux系统日志、screen工具 使用介绍
第8周5月15日任务 课程内容: 10.32/10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具 扩展1. Linux日志文件总管logrotate http ...
- rsync命令 续集 、linux系统日志、screen工具
1.rsync 通过服务进行监听同步: 开启服务:rsync --daemon (默认开启873端口) 需要编辑配制文件:/etc/rsyncd.conf port=873log file=/var ...
- Linux CentOS7 rsync通过服务同步、linux系统日志、screen工具
一.rsync通过服务同步 rsyncd.conf配置文件详解 port:指定在哪个端口启动rsyncd服务,默认是873端口. log file:指定日志文件. pid file:指定pid文件,这 ...
- 有关linux日志分析的详细介绍
linux的日志文件可以帮助我们了解系统所处的状态,比如查出哪些用户有登入,及其它安全相关的一些问题. linux下的日志分析. 以下内容,部分参考了:探讨 linux 日志分析 这篇文章. 1.了解 ...
- 【Linux】文本处理工具介绍
文本处理工具介绍 grep.sed和awk都是文本处理工具,各自都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的.相比较而言,sed和awk功能更强大,且已独立成一种语言来介绍. grep: ...
- linux tail 命令详解!Linux 文件内容查看工具介绍
转:http://blog.csdn.net/carzyer/article/details/4759593 1.cat 显示文件连接文件内容的工具: cat 是一个文本文件查看和连接工具.查看一个文 ...
- Linux下的下载工具介绍----aria2
ariac 项目地址:http://aria2.sourceforge.net/ 下载地址:http://sourceforge.net/projects/aria2/files/stable/ari ...
随机推荐
- 软件工程实践小项目之模拟wc.exe的小程序
github源码和工程文件地址:https://github.com/Jackchenyu/Word_counts/tree/smart 基本要求:要实现wc的基本功能即文件中字符数.单词数.行数的统 ...
- 【awk】提取文件第一列
生信数据文件一般是按列分开的,如果我们只想简单的提取一列而不是费尽周折写个程序提取哪一列的话,awk作为一个非常好用的文档处理工具,我们现在来简单看一下他的一些功能: awk '{print $1}' ...
- 绑定到外部验证服务LDAP、配置 autofs
题1:您的系统需要按照以下要求绑定到这个服务上:验证服务器的基本 DN 是: dc=xxxx,dc=xxxx,dc=xxxx. 帐户信息和验证信息都是由 LDAP 提供的.连 接 需 要 使 用 证 ...
- mysql 主键外键
外键MUL:一个特殊的索引,用于关键2个表,只能是指定内容 主键PRI:唯一的一个不重复的字段. # 创建一个表用来引用外键 create table class( -> id int no ...
- 提交SR的一些小技巧
在平时的时候,遇到一些问题总会在metalink上提交SR(Service Request,SR,过去也叫Technical Assistance Request,TAR ),我们提交sr的时候,总是 ...
- ubuntu16.04安装wordpress
ubuntu16.04安装wordpress和centos7安装wordpress存在一定的差异. 当然共性大于差异. 共性是lamp环境. wordpress的必备环境. 先共性再差异. 一.搭建l ...
- flask --- 02. 路由, 初始化配置,蓝图
一.Flask 路由 1.添加路由的方式 ① ② 实例: ① @app.route("/my_de") def detail() ② def detail() app.add_ur ...
- JavaScript(数据类型、字符串操作)
JS基础 建议:一般情况下不在 head 标签中写 js 语句,因为该 js 语句会在 body 加载之前就执行,可能导致某些效果无效 // 单行注释 /*多行 * 注释*/ // 控制台输出语句 c ...
- 【HNOI 2018】寻宝游戏
Problem Description 某大学每年都会有一次 \(Mystery\ Hunt\) 的活动,玩家需要根据设置的线索解谜,找到宝藏的位置,前一年获胜的队伍可以获得这一年出题的机会. 作为新 ...
- tensorflow中batch normalization的用法
网上找了下tensorflow中使用batch normalization的博客,发现写的都不是很好,在此总结下: 1.原理 公式如下: y=γ(x-μ)/σ+β 其中x是输入,y是输出,μ是均值,σ ...