Linux rsync scp

A.文件的分发-scp命令的使用

I.scp(secure copy)安全拷贝

定义:scp可以实现服务器与服务器之间的数据拷贝

II.基本语法

  1. root@Fcant:/# scp -r $pdir/$fname $user@$host:$pdir/$fname

image.png

1.从本机将文件分发

  1. [root@iZzvx8pr0tamavZ /]# scp -r /opt/module/ root@39.107.49.210:/opt/module

image.png

2.从其他主机拉取文件

  1. [root@iZzvx8pr0tamavZ opt]# scp -r root@120.79.178.68:/opt/module ./

image.png

3.从一台主机到另一台主机

  1. [root@iZ2ze15ls0lgyufgfo49m5Z module]# scp -r root@101.132.167.127:/etc/profile root@120.79.178.68:/etc/profile

image.png

III.scp 的可选参数

-p 拷贝文件的时候保留源文件建立的时间。
-q 执行文件拷贝时,不显示任何提示消息。
-r 拷贝整个目录
-v 拷贝文件时,显示提示信息。

B.rsync远程同步工具

1.rsync的介绍

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

2.rsync和scp的区别

rsync和scp的区别:用rsync做文件的复制要比scp的速度快,rsync只对文件差异做更新,scp是把所有文件都复制过去。

3.rsync下载

  1. [root@iZ2ze15ls0lgyufgfo49m5Z home]# yum install rsync -y

image.png

4.基本语法

  1. root@Fcant:/# rsync -rvl $pdir/$fname $user@$host:$pdir/$fname

image.png

选项 功能
-r 递归
-v 显示复制过程
-l 拷贝符号链接

5.rsync的参数

-v, —verbose 详细模式输出
-q, —quiet 精简输出模式
-c, —checksum 打开校验开关,强制对文件传输进行校验
-a, —archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, —recursive 对子目录以递归模式处理
-R, —relative 使用相对路径信息
-b, —backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用—suffix选项来指定不同的备份文件前缀。
—backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, —update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, —links 保留软链结
-L, —copy-links 想对待常规文件一样处理软链结
—copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
—safe-links 忽略指向SRC路径目录树以外的链结
-H, —hard-links 保留硬链结
-p, —perms 保持文件权限
-o, —owner 保持文件属主信息
-g, —group 保持文件属组信息
-D, —devices 保持设备文件信息
-t, —times 保持文件时间信息
-S, —sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, —dry-run现实哪些文件将被传输
-W, —whole-file 拷贝文件,不进行增量检测
-x, —one-file-system 不要跨越文件系统边界
-B, —block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, —rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
—rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, —cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
—existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
—delete 删除那些DST中SRC没有的文件
—delete-excluded 同样删除接收端那些被该选项指定排除的文件
—delete-after 传输结束以后再删除
—ignore-errors 及时出现IO错误也进行删除
—max-delete=NUM 最多删除NUM个文件
—partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
—force 强制删除目录,即使不为空
—numeric-ids 不将数字的用户和组ID匹配为用户名和组名
—timeout=TIME IP超时时间,单位为秒
-I, —ignore-times 不跳过那些有同样的时间和长度的文件
—size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
—modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T —temp-dir=DIR 在DIR中创建临时文件
—compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 —partial
—progress 显示备份过程
-z, —compress 对备份的文件在传输时进行压缩处理
—exclude=PATTERN 指定排除不需要传输的文件模式
—include=PATTERN 指定不排除而需要传输的文件模式
—exclude-from=FILE 排除FILE中指定模式的文件
—include-from=FILE 不排除FILE指定模式匹配的文件
—version 打印版本信息
—address 绑定到特定的地址
—config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
—port=PORT 指定其他的rsync服务端口
—blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
—progress 在传输时现实传输过程
—log-format=formAT 指定日志文件格式
—password-file=FILE 从FILE中得到密码
—bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, —help 显示帮助信息

6.rsync的--exclude使用示例

排除特定文件

要排除特定文件,将文件的相对路径传递给该--exclude选项。在以下示例中,文件 src_directory/file.txt 将不会被传输:

  1. rsync -a --exclude 'file.txt' src_directory/ dst_directory/

排除特定目录

排除特定目录与排除文件相同,只需将目录的相对路径传递给该--exclude选项,如下所示:

  1. rsync -a --exclude 'dir1' src_directory/ dst_directory/

如果要排除目录内容但不排除目录本身,使用dir1/*代替dir1

  1. rsync -a --exclude 'dir1/*' src_directory/ dst_directory/

排除多个文件或目录

要排除多个文件或目录,只需指定多个--exclude选项:

  1. rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/

如果希望使用单个--exclude选项,则可以用{}将要排除的文件和目录列出,并用逗号分隔,如下所示:

  1. rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/

如果要排除的文件和/或目录的数量很多,则—exclude可以使用要在文件中排除的文件和目录,而不是使用多个选项。只需将文件传递给该—exclude-from选项。下面的命令与上面的命令完全相同:

  1. rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/

在 exclude-file.txt 内存储这些内容:

  1. file1.txtdir1/*dir2

根据正则模式排除多个文件或目录

使用rsync,还可以根据与文件或目录名称匹配的模式排除文件和目录。
例如,要排除所有.jpg文件,运行下面的命令:

  1. rsync -a --exclude '*.jpg*' src_directory/ dst_directory/

排除与特定模式匹配的文件和目录之外的其他所有文件和目录并不困难。假设要排除所有其他文件和目录,但以 .jpg 结尾的文件除外。
一种选择是使用以下命令:

  1. rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/

使用多个 include/exclude 选项时,将应用第一个匹配规则。参数含义:

  • --include='*.jpg'-首先,包括所有.jpg文件。
  • --include='*/'然后,将所有目录都包含在in src_directory目录中。
    没有这个rsync只会复制*.jpg顶级目录中的文件。
  • -m -删除空目录

另一个选择是将 find 命令的输出传递给 rsync:

  1. find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/

参数含义:

  • -printf %P\\0\\n 将从src_directory/文件路径中删除。
  • --files-from=- 表示仅包含来自标准输入的文件(从find命令传递的文件)。