有人可以为我解释这个rsync命令吗?


11

有人可以告诉我这是什么吗?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

不会删除bkp01,并offbk2和发送日志offbkp01.log


他看不懂手册页。是什么让您认为他在这里阅读答案?XD
Twinkles

2
当您拥有explainshell.com / ... 时,谁需要手册页?
汤姆(Tom)

Answers:


33

为了将其分为几部分,分为两个主要部分,然后是摘要和注释:

  • rsync命令:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • 运行rsync命令的shell完成的输出重定向:
    rsync-command > ~/offbkp01.log

rsync 命令:

基本命令:

  • rsync -我认为这不需要任何解释(但如果需要的话会提供)。

命令选项:

  • -uva -一组单字符选项(显示的是长短形式):

    • -u --update-告诉rsync所有修改只应应用于目标上相同年龄(和不同大小)或比源文件旧的文件。也就是说,rsync应该仅传递来自源的更改,以更新目标,但不应进行任何使目标文件成为旧版本的更改。

      有一些例外。类型的差异(例如,一个是文件,另一个是目录)将导致更新,而不考虑日期。符号链接和其他特殊文件将忽略此选项。而且,重要的是,这不会影响要删除的文件。

    • -v --verbose-增加了rsync在执行时打印出的信息量。没有这个,rsync将什么也不打印。保持此选项不变,rsync会告诉您正在传输哪些文件,并在末尾添加摘要。更多的vs可增加打印的信息,尽管手册页指出v仅在调试时才使用两个以上的信息。
    • -a --archive-这等效于-rlptgD打包在一起的其他几个选项()。顾名思义,这是设置许多用于归档文件和目录的常用选项的快速方法。它会:
      • -r --recursive-告诉rsync递归复制目录。如果没有此-d --dirs选项或更特殊的选项,rsync只会跳过它遇到的任何目录(并在其输出中告诉您)。
      • -l --links-当源是符号链接时,请在目标上创建符号链接。根据其他选项,符号链接可能会被跳过或制作为完整的单独副本(即,包含内容的真实目录(或文件的另一个副本)而不是符号链接)。
      • -p --perms -将目标文件的权限设置为与源文件相同。
      • -t --times-将目标文件的修改时间设置为与源文件相同。由于保持这些时间同步可使rsync算法更有效,因此通常您总是希望显式或隐式使用它。
      • -g --group-将目标的组属性设置为与源相同。默认情况下按名称关联,但在某些情况下会回退到组ID号。如果接收方 rsync没有以超级用户身份运行(或使用伪造--fake-super),则只能设置在接收方调用rsync的用户所属的组。否则,该组将被设置为前面提到的同一用户的默认组。
      • -D-等同于选项--devices--specials在一起。他们的意思是:
        • --devices-字符和块设备文件已传输。如果接收的 rsync没有以超级用户身份运行(或使用伪造--fake-super),则无效。
        • --specials -传输特殊文件(如套接字)(否则将不会传输)。
  • --delete-告诉rsync删除目标上而不是源上的文件。这不受上面设置的更新选项的影响(实际上,这是怎么回事,因为大多数文件系统将不会保留所需的数据来查看哪个操作是新的?)。此选项对通配符/全局扩展的源起作用,因此dir / *与dir /不同。一些重要的注意事项:
    • 显然,这很危险。您可能应该首先使用该--dry-run选项进行尝试,这将进行伪装的传输,使您可以确保未进行意外更改。
    • 如果存在任何I / O(输入/输出)错误-即,在传输,读取或写入更改时发生任何错误-从那时起,删除将被忽略。--ignore-errors尽管您可能不想/不想这样做,但是可以使用该选项覆盖它。
    • 删除算法有多种变体,您可以在手册页中找到有关这些变体的更多信息。当接收的rsync为3.0.0或更高版本时(截至撰写本文时),--delete-during将使用该算法。如果接收器较旧,则--delete-before使用。如果在发生错误时文件保持某种类型的一致性很重要(例如在进行所有其他更改之前不删除任何内容),则应使用比默认选项更具体的选项。

命令位置:

  • /srv/bkp01-源文件或目录。关于目录末尾是否有斜杠以及其他目录是否存在的含义,有一些详细的规则。有关详细信息,请参见手册页的“ 使用”部分,但是这里没有尾部的斜杠表示该目录将被复制到目标位置,而不是该目录的内容被复制到目标位置。如果这是文件而不是目录,则相同。
  • /srv/offbk2/-目标目录。通常,除非使用选项在命令的其他位置指定它,否则它将始终是rsync命令部分中列出的最后一项。

Shell的输出重定向:

Shell命令:

  • >-这会将stdout(标准输出)从左侧的内容重定向到右侧的文件,成为其内容,并创建文件(如果可能)(如果尚不存在)。一些注意事项:
    • 您还可以通过将stderr(标准错误输出)重定向到同一文件,方法是添加2>&1到上述命令的末尾。顺序很重要,因此请谨慎概括该放置的位置。魔术数字1指的是stdout,2指的是stderr,&(基本上)是“的地址”,完整的命令片段表示“将stderr的输出重定向到stdout流中”。
    • 如果要附加到日志文件而不是替换日志文件,则可以>>改用。将stderr重定向到同一位置的方法保持不变。
    • 您可以使用将stdout和stderr发送到不同的位置1> stdout_file 2> stderr_file。您也可以通过添加而不是替换来>>代替>在该命令中使用。

Shell变量/特殊符号:

  • ~ -这是当前用户主目录的简写,是下一部分的一部分。

外壳层位置:

  • ~/offbkp01.log-当前用户主目录中的文件offbkp01.log。由于使用重定向,因此将在此放置rsync命令的输出>

摘要:

总之,此命令将:

  • 复制所有常规文件,目录,符号链接,特殊文件和设备文件
  • 以及大多数(如果不是全部)重要文件属性
  • 来自 /srv/bkp01
  • /srv/offbk2/bkp01
  • 并且它将在以下情况下删除/srv/offbk2/不在中/srv/bkp01的所有内容:

    • 如果一个普通文件,目录或符号链接(?)有一个修改时间/srv/offbk2/ 是较新的比它的修改时间/srv/bkp01它不会被更新如果这两个项目仍在同一类型(普通文件,目录或符号链接(? ))。
  • 此外,rsync将打印出一些有关其正在执行的操作的信息(特别是正在传输的文件以及最终摘要),shell会将这些信息写入 文件 ~/offbkp01.log。如果该日志文件尚不存在,则将重新创建它;如果该日志文件不存在,将被覆盖。


注意:--fake-super是用于使rsync模拟超级用户活动的选项。它通过使用文件的扩展属性来存储没有更大特权就无法设置的属性来实现此目的。给定选项和特权,每个属性的实际版本设置为有意义的任何值。尽管即使您没有超级用户权限也可以方便地进行一些备份,但还应注意,与未使用rsync相比,它可能带来更大的安全风险,因为可能没有设置真实的安全属性即使备份了有关它们的信息,也可以。


资料来源:很多时间使用rsync并阅读其手册页


8
那是一篇令人印象深刻的第一篇文章。希望你坚持!
terdon

我第二个@terdon ..该死!他着火了。保持良好的工作伙伴。这确实是一个令人印象深刻的答案。
AzkerM 2014年

答案似乎是像“福尔摩斯”,我爱你的解释风格..
拉胡尔·帕蒂尔

9

从手册中:

- 删除

这告诉rsync从接收方删除无关的文件(不在发送方的文件),但仅针对正在同步的目录。您必须已经要求rsync发送整个目录(例如“ dir”或“ dir /”),而无需使用通配符来表示目录的内容(例如“ dir / *”),因为shell扩展了通配符,因此rsync会收到请求传输单个文件,而不是文件的父目录。除非使用--delete-excluded选项或将规则标记为仅与发送方匹配,否则将从传输中排除的文件也将被删除(请参阅“过滤规则”部分的“包含/排除”修饰符)。

因此,如果您不使用通配符,它​​将从目标中删除不属于原始目录的文件。

源目录:

1.txt
2.txt
3.txt

目标目录:

4.txt

4.txt将在rsync之后消失,而1.txt,2.txt和3.txt将位于目标位置。


关于其他事情:

uva
  • 更新文件
  • 详细:将结果回显到终端(即,将结果重定向到您的日志文件,因此对最后一个问题是)
  • 存档:存档模式;等于-rlptgoD(没有-H,-A,-X)


3

不,它只会从bkp01目录中删除无关的文件。

也:

  • -u--update-跳过接收器上较新的文件
  • -v--verbose-增加详细程度
  • -a--archive-存档模式;等于-rlptgoD(没有-H,-A,-X)

rsync -uva --delete /srv/bkp01 /srv/offbk2/命令的输出~/offbkp01.log使用重定向运算符(>发送到文件,而不是打印在终端中。如果文件不存在,将创建该文件。如果文件存在,则旧内容将被删除。

请参阅man rsync以获取更多信息。


3
它不会从中删除任何内容bkp01。它只是从目标中删除无关的文件(即源文件中不存在的文件)。
Matt Nordhoff 2014年

没有文件将从bkp01中删除。
Xavier J

1
rsync 

远程文件复制-跨本地磁盘,目录或网络同步文件树。

-u update 

-v verbose

-a archive


--delete --> delete

在这里它将删除offbk2中的文件 。

然后,结果的输出(成功与否)将被重定向到该日志文件。


没有文件将从bkp01中删除。
Xavier J
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.