sca*_*cai 11 permissions rsync
我一直想知道为什么rsync
尝试将文件传输到远程位置,在那里它对目标目录具有读取/执行权限,但没有创建实际目标文件的写入权限。这甚至可以在尝试以普通用户身份将文件复制到/时在本地模拟,rsync
将传输整个文件(对于大文件也需要相当长的时间)并最终失败
rsync: mkstemp "/.myTargetFile" failed: Permission denied (13)
Run Code Online (Sandbox Code Playgroud)
因此,在传输期间尝试创建临时文件(点文件)时,它似乎已经在启动时失败了。为什么它没有注意到这一点并提前中止而不是尝试在没有任何写权限的情况下复制整个文件?
如果无法创建临时文件,它会将文件复制到哪里?我看不到 rsync 进程的任何内存增加,并且/tmp 中也没有相应的文件。似乎它直接丢弃了目的地的数据,但仍然继续传输。
如果您需要在没有写权限的情况下复制到目录中,请添加--inplace
到命令选项。这有时更便宜,因为它不创建临时副本,但在更新期间文件处于不一致状态。
关于为什么不事先检查自己的权限的问题:它可能会错过一些额外的细节作为扩展访问 ACL,所以 rsync 不相信标准的 3*3+3 方案。OTOH 这个有意的策略不会对结果产生任何真正的影响 - 无论如何文件没有更新。