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

use*_*049 11 rsync

谁能告诉我这是做什么的?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log
Run Code Online (Sandbox Code Playgroud)

它会删除bkp01offbk2发送日志offbkp01.log吗?

Mat*_*rth 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 将告诉您正在传输哪些文件,并在末尾添加摘要。More vs 会增加打印的信息,尽管手册页说v只有在调试时才应该使用两个以上的s。
    • -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 删除目标上的文件,而不是源上的文件。这不受上面设置的更新选项的影响(实际上,这怎么可能因为大多数文件系统不会保留所需的数据来查看哪个操作更新?)。此选项作用于通配符/glob 扩展的源,因此 dir/* 与 dir/ 不同。一些重要的注意事项:
    • 这显然是危险的。您可能应该先尝试使用该--dry-run选项,这将进行假想传输,以确保不会发生意外更改。
    • 如果有任何 I/O(输入/输出)错误——也就是说,如果传输、读取或写入更改出现任何问题——从那时起删除将被忽略。这可以被--ignore-errors选项覆盖,尽管您可能不想/不想这样做。
    • 删除算法有多种变体,您可以在手册页中阅读更多信息。当接收 rsync 版本为 3.0.0 或更新版本时(截至撰写本文时),--delete-during将使用该算法。如果接收器较旧,则--delete-before使用。如果发生错误时文件保持某种一致性很重要(例如在进行所有其他更改之前不删除任何内容),您应该使用比默认选项更具体的选项。

命令位置:

  • /srv/bkp01- 源文件或目录。如果目录末尾有/没有斜杠,以及另一个目录是否存在,则有一些详细的规则。您可以查看手册页的USAGE部分了解详细信息,但此处缺少尾部斜杠意味着此目录将被复制到目标中,而不是将此目录的内容复制到目标中。如果这是文件而不是目录,则相同。
  • /srv/offbk2/- 目标目录。通常,这将始终是 rsync 命令部分中列出的最后一项,除非在命令的其他地方使用选项指定它。

Shell的输出重定向:

外壳命令:

  • >- 这会将标准输出(标准输出)从左侧的任何内容重定向到右侧的文件,成为其内容,并在文件不存在时创建该文件(如果可能)。一些注意事项:
    • 您还可以通过添加到上述命令的末尾来将 stderr(标准错误输出)重定向到同一文件2>&1。顺序很重要,所以要小心概括把它放在哪里。幻数1指的是 stdout,2指的是 stderr,&是(本质上)“地址”,完整的命令片段意味着“将 stderr 的输出重定向到 stdout 流中”。
    • 如果您想附加到日志文件而不是替换它,则可以使用>>。将 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认同)

Rin*_*ind 9

从手册:

- 删除

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

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

源码目录:

1.txt
2.txt
3.txt
Run Code Online (Sandbox Code Playgroud)

目标目录:

4.txt
Run Code Online (Sandbox Code Playgroud)

4.txt 将在 rsync 之后消失,1.txt、2.txt 和 3.txt 将在目的地。


关于其他事情:

uva
Run Code Online (Sandbox Code Playgroud)
  • 更新文件
  • 详细:将结果回显到终端(即,将其重定向到您的日志文件,所以最后一个问题是肯定的)
  • 归档:归档模式;等于 -rlptgoD(无 -H、-A、-X)


Rad*_*anu 3

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

还:

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

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

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

  • 它不会从“bkp01”中删除任何内容。它只是从目标中删除无关文件,即源中不存在的文件。 (3认同)

nux*_*nux 1

rsync 
Run Code Online (Sandbox Code Playgroud)

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

-u update 

-v verbose

-a archive


--delete --> delete
Run Code Online (Sandbox Code Playgroud)

这里它将删除 offbk2内的文件。

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