什么是 rsync 选项“-logDtprze.iLsf”?

Dru*_*ver 2 rsync

我在网上找到了一篇文章,其中介绍了如何使用 rsync 备份您的专用服务器。

在本文的步骤之一中,我应该创建一个名为“rsync”的用户并为其添加 sudo 权限。一切都很顺利,但“rsync”用户的 visudo 选项很难理解。“/usr/bin/rsync”命令的一些选项在 Internet 上几乎没有文档。

以下是我所指的 visudo 行:

rsync ALL=(ALL) NOPASSWD: /usr/bin/rsync --server --sender -logDtprze.iLsf --numeric-ids . /
Run Code Online (Sandbox Code Playgroud)

首先,我有点了解“--server --sender”属性。真正困扰我的是选项“-logDtprze.iLsf”。

我有一个 CentOS 服务器,当我运行命令“man rsync”时,rsync 文档中没有此选项。实际上,每次我尝试在 visudo 中使用此选项时,都没有任何效果。

我最终发现对“-logDtprze.iLsf”的模糊引用是 Debian 中 rsync 的一个新功能。我不确定。

我只是想知道这个选项有什么作用,以及是否可以在我的备份设置中忽略它。

我还想了解“./”行末尾的句号和斜杠的用途

编辑:谢谢博吉特!我觉得自己像个白痴!:)

bod*_*git 5

它是短选项-l-o-g-D等,它们可以折叠而不是单独拼写出来,这是大多数 Unix 工具的标准行为,即rm -rfrm -r -f.


小智 5

正如其他评论中指出的那样,-logDtprze.iLsf它是简短选项的组合,但微妙之处在于该-e.部分。因为-e需要一个参数,所以它后面的所有内容都是选项的值-e。这是 Unix 命令短选项的常见行为,我们可以通过查看popt (3) POPT_ARG_STRING(rsync 用于解析选项的库)来确认此行为。所以它相当于:

-l -o -g -D -t -p -r -z -e '.iLsf'
Run Code Online (Sandbox Code Playgroud)

虽然在 rsync客户端-e上记录为“指定要使用的远程 shell”的简短版本,但作为远程 shell 没有多大意义。该选项实际上被内部 rsync 客户端/服务器协议劫持以传递兼容性标志: https: //github.com/WayneD/rsync/blob/13c4019e94015b234697c75d9d3624862e962d3c/compat.c#L160--rsh.iLsf-e

maybe_add_e_option您可以在此处的函数中查看其构造方式的源代码options.c: https: //github.com/WayneD/rsync/blob/f44e76b65c5819edb1a5b2fbbe732d5d214b35de/options.c#L2951

它在以下位置解析compat.chttps://github.com/WayneD/rsync/blob/13c4019e94015b234697c75d9d3624862e962d3c/compat.c#L134

.iLsf意思是:

  • .:rsync 使用的是该协议的最终版本。如果它使用预发布(其中SUBPROTOCOL_VERSION != 0),它将发送<PROTOCOL_VERSION>.<SUBPROTOCOL_VERSION>而不是仅仅发送.

然后是一些行为标志,如下client_info所示compat.c

  • i:allow_inc_recurse
  • L:符号链接时间设置支持
  • s: 符号链接 iconv 翻译支持
  • f:flist I/O 错误安全支持