Featured image of post Linux rsync的使用

Linux rsync的使用

基本特征

  • 能够高效的从远程复制和同步文件
  • 支持复制links,devices,owners,groups,permissions
  • 比scp(Secure Copy)快,因为rsync可用差异同步,第一次复制整个内容,接下来只复制哪些改变了的文件
  • rsync更高效的利用带宽,因为它在传送前压缩文件,在收到后解压文件

基础用法

$ rsync options source destination

常用命令

  • -v 可视化
  • -r 递归复制文件(但是在传送时不保留时间戳和权限信息)
  • -a 存档模式,可用递归的复制文件并且可用保持符号连接,文件权限信息,用户,组时间戳的信息
  • -z 压缩文件
  • -h 友好的输出模式
  • -progress 展示文件预计剩余的时间
  • -W 强制同步整个文件
  • –include 包含
  • –exclude 除去
  • –delete 删除目标目录无关的文件
  • –max-size 设置最大传送文件
  • –dry-run 试运行
  • –bwlimit 设置socks I/O带宽限制

在本地环境下复制同步文件

  • 复制同步文件在一台电脑上

    接下来的命令是同步一个单独的文件在一台机器上面,从一个目录到另一个目录,下面是一个例子,把backup.tar复制同步到/tmp/backups/目录下

    rsync -zvf backup.tar /tmp/backups/
    

    如果目标文件夹不存在,它将会自动创建一个

  • 复制同步文件夹在一台电脑上

    以下的例子是把/root/rpmpkgs下面的一些rpm包文件复制到/tmp/backups/目录下

    rsync -avzh /root/rpmpkgs /tmp/backups/
    

将文件或目录复制同步到服务器或从服务器上复制同步文件或目录到本地

  • 从本地复制目录到远程服务器

    下面是个例子:把本地的rpmpkgs下的文件复制同步到远程服务器的/home/下

    rsync -avhz rpmkgs/ root@***.*.*.*:home/
    
  • 从远程服务器复制同步目录到本地

    下面是个例子,远程的/home/test复制同步到本地的/tmp/mytmp下

    rsync -avzh root@hostname:/home/test /tmp/mytmp
    

通过ssh来进行同步

使用ssh协议传送数据可以更安全

  • 从远程服务器复制同步文件到本地

    rsync -avzhe ssh root@hostname:/root/install.log /tmp/
    

使用-include 和-exclude选项

只同步复制那些R开头的文件和目录

rsync -avze ssh --include 'R*' --exclude '*' root@hostname:/var/ /root/

强制每次同步整个文件 -W

sync默认只复制同步更改的文件块,如果想要同步更新整个文件可以使用-W

设置最大传送文件 –max-size

rsync -avzhe ssh --max-size='200k' /var/lib/ root@hostname:/root/

在传送完成后自动删除源文件 -remove-source-files

假设你有一台web服务器和一个数据备份服务器,每天你新建一个备份并且同步它到你的备份服务器上面,现在你不想保留web服务器上面的备份内容,所有你可以使用–remove-source-files选项

rsync --remove-source-files -zvh backup.tar /tmp/backups/192.168.0.100

试运行 –dry-run

如果你是一个新手,使用rsync不知道应该会发生什么,rsync确实会弄乱文件夹中的内容,然后撤销操作会很麻烦.使用-dry-run选项就可以试运行一下,如果符合预期,就可以去掉-dry-run选项.

设置带宽限制 -bwlimit

可用限制socket I/O带宽,单位默认为KBytes,也就是KB

# 5000kb/s
--bwlimit=5000

注意事项

可以不用root

Licensed under CC BY-NC-SA 4.0