Linux中rsync命令示例
rsync(远程同步)是用于在系统或者系统之间复制文件和目录的同步工具。
rsync的单一最大优点是它只复制了更改的文件,从而减少了CPU消耗,并在复制文件时保存带宽和时间。
rsync在scp上的优势
SCP为安全副本,也用于复制两个远程系统之间的文件。
但rsync与scp具有一定的优势,使其成为更好的选择。
- rsync仅在scp复制每个文件时复制更改的文件并在需要时覆盖它们。因此,在rsync中保证了更好的速度。
- rsync也可以在没有加密的情况下工作。这可以减少开销。但是当没有加密的情况下没有安全风险时,应该考虑这一点。
- 一个人可以在SCP不允许它时恢复在rsync中的不完整传输。
如果未安装rsync,则可以使用包管理器安装它。
在Ubuntu和Debian中,我们可以使用以下命令安装rsync。
sudo apt install rsync
Linux中rsync命令的实际示例
rsync命令具有以下结构
rsync [OPTIONS] Source Destination
源和目的地可以是Mation Hyman @ OniTor中的本地路径或者远程路径:路径/到/文件
让我们看看如何使用一些有用的示例使用rsync命令。
Note that if you have a directory A, use “A” to mention it not “A/”. Using A/will refer to all the files in directory A and not directory A itself. So copying A will create a new directory in the destination and then copies the files in A. But copying A/will copy only the files in A into the destination.
1.同步本地文件[单向同步]
要将本地文件从目录a复制到备份-a-dir中,
rsync A/Backup-A-dir/
此命令将目录a的文件(如果更改)复制到备份-a-dir中。
这不会将备份-A-dir中的任何另外文件复制到最初不在even中。
这就是为什么它被称为单向同步。
2.同步远程文件[单向同步]
要在远程系统和本地系统之间同步文件,命令是相似的。
请注意,源位置和目标位置可以是本地文件系统路径或者远程系统(SSH)路径。
rsync dev/build Hyman@theitroad:~/Backup
3.双向同步
上面的命令将文件从源复制到目标。
但如果系统有一些不在源上的另外文件,则单向同步将不会删除这些文件。
如果我们想要它,我们必须使用双向同步。
要在具有相同文件的同一状态下维护两个端点(目录或者文件),并且在任何一侧都没有添加,只需将-delete选项添加到原始命令。
rsync A/Backup-A-dir/--delete
4.复制后删除源文件
如果我们需要在传输完成后删除源中的文件,则会派遣源头源文件选项。
rsync A/Backup-A-dir/--remove-source-files
你应该小心上面的命令。
只有在进行足够的副本并在源中不需要数据时,才能删除源。
5.包含和排除文件
如果我们需要(或者不需要)传输名称匹配的文件,可以使用-Include和-Exclude选项。
在'='符号之后,应给出每个选项。
rsync A/Backup-A-dir/--include=*.py --exclude=*.tmp.py
上面的命令将具有扩展名为的所有文件复制。
除了具有扩展名.tmp.py的文件外。
我们可以使用正则表达式作为模式。
点击此处了解详情。
Tip: If the list of patterns for either of the options is huge, you can store it in a file and you can pass their names to the –include-from and –exclude-from option.
6. rsync over ssh
如果要通过SSH传输文件,则需要指定ssh与-e选项。
rsync -e ssh A/Hyman@theitroad:~/Backup-A-dir/
这是自加密以来将文件传输到远程系统的最优选方式。
人们应该注意,由于加密,将有一个开销。
所以可能需要更多的时间而不是正常转移。
为了使其工作,我们应该启用在服务器端配置的SSH登录。
公钥和私钥也必须处于各自的路径。
7.详细模式
Linux中的大多数命令都有一个详细选项来记录命令在终端中的操作。
rsync也不例外。
传递-v选项或者 - verbose选项以详细说明该命令。
它将列出正在完成的操作及其进度。
调试时,这将是非常有帮助的。
rsync A/Backup-A-dir/-v -r
输出将类似于下面的输出
$rsync A/Backup-A-dir/-v -r sending incremental file list created directory Backup-A-dir ./ file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt sent 388 bytes received 168 bytes 1,112.00 bytes/sec total size is 0 speedup is 0.00
8.干运行 - 运行但不要复制
如果我们想知道要在没有实际执行传输的情况下复制的文件,则可以使用-dry-run(或者-n)选项。
除了复制部分之外,它确实是普通rsync命令的所有操作。
它将列出将复制或者删除的文件(如果需要),然后它将在复制之前停止。
rsync -v A/Backup-A-dir/--dry-run
这将导致
$rsync -v A/Backup-A-dir/–dry-run sending incremental file list created directory Backup-A-dir ./ file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt sent 172 bytes received 72 bytes 488.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN)
请注意,我们需要使用-v选项来查看DATD RUN命令的上述输出。
如果没有,则会发生干运行,但它不会显示结果。
9.显示转移进度
如果要显示传输的进度,请使用-progress选项。
rsync A/Backup-A-dir/--progress
上面的命令将显示一个类似于下面的进度:
$rsync -r A/Backup-A-dir/–progress sending incremental file list created directory Backup-A-dir ./ file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7) file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7) file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7) file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7) file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7) file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)
10.压缩和转移数据
如果要保存网络带宽和时间,则可以使用-z选项压缩要传输的数据。
它将自动解压缩目的地。
当要传输的数据巨大时,此技巧可以节省大量网络时间和成本。
由于开销处理超过总时间,因此应该避免使用小文件。
rsync -z A/Backup-A-dir/
Note that one should avoid using -z option while doing local transfers and small files. It will slow things down unnecessarily.
11.递归复制文件和目录
所有上面的命令只复制文件,而不是子目录(每个Linux命令都有相同的情况)。
因此,不会复制这些子目录中的文件。
这可以通过递归复制来消除。
要递归复制文件和目录,可以使用-r选项。
rsync -r A/Backup-A-dir/
12.归档和保留元数据
如果要保留符号链接,时间戳,文件权限,用户和组所有权,则可以使用-a选项。
rsync -a A/Backup-A-dir/
此选项还包括-r选项的功能。
因此,它递归地复制文件并保留复制文件的元数据。
13.设置文件大小限制
为避免传输大文件,可以在-max-size选项的帮助下设置文件大小限制。
这有助于我们保留将复制的文件大小检查。
rsync --max-size='100K' A/Backup-A-dir/
14.设置带宽限制
如果我们对网络速度有任何约束,则可以在-bwlimit选项的帮助下指定这些。
Bwlimit应该用Kbps表示。
rsync --bwlimit=100 A/Backup-A-dir/
15.用rsync恢复下载
如果下载/传输不完整,则可以使用rsync命令保持不完整的下载,以便在发出相同命令时,传输可以在下次恢复。
要恢复传输,可以使用-Append选项。
rsync --append A /Backup-A-dir/
这个stackexchange线程是一个非常好的资源,可以在这个主题上了解更多信息。
所有上述命令都是基本的,并在单个流程或者过程中复制文件。
如果有5个TB的数据和1 TB转移需要2小时,则整个转移将持续10小时。
但还有另一种方法可以加快转移
加快rsync /并行转移
并行是用于并行执行作业的GNU实用程序。
rsync可以很容易地与rsync耦合。
在Ubuntu/Debian系统中安装GNU并行使用
sudo apt install parallel
并行拆分要发送的文件,并将指定数量的rsync进程一起发出,每个文件都包含不同的文件列表。
并行只是管理所有的过程。
rsync对并行的其他进程没有了解,也没有并行传输的功能。
并行提供通过捆绑任务并行传输。
因此,Parallel命令包括两种管道。
一个是参数(鸡蛋/文件),另一个是并行命令(Manager)。
ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/
在上面的命令中,由于"|"符号之前的第一个命令的结果,输出中的每个文件/目录都充当参数。
{}表示并行命令中左侧的参数。
-j n - 它用于设置n个作业或者工人。
在我们的情况下,n是20.下一个部分是每个参数的常用rsync命令。
生成命令后,它们将被捆绑到20个进程中,它们将并行执行。
请注意,我们可以在不平行的情况下将任何选项添加到上面的rsync命令。
只需在上面的命令中添加rsync之后添加rsync选项(如-z,-a,-e ssh)。
rsync的常见错误
使用rsync时可能会遇到错误。
以下是一些常见的秘诀与他们的故障排除。
1. rsync 权限被拒绝
这是在使用我们没有适当的权限的路径时可能会发生的错误。
例如:
rsync B//home/
上面的命令将导致权限拒绝错误,如果我们没有写入权限/(普通用户通常不做)
2. rsync无法在<path>上设置时间
当文件系统无法处理文件和目录的修改时间时,会发生这种情况。