如何在 Linux 中复制文件时保留文件权限
想要在 Linux 上复制文件时保留文件权限?以下是如何使用 cp 和 rsync 来完成此操作。
文件权限是 Unix 规范的一个组成部分。然而,有些事情新手用户通常不知道,例如在 Linux 中复制文件时如何保留文件权限。
由于复制的文件本质上是新文件,因此它们的权限取决于当前用户的umask。这可能会导致复制的文件或文件夹具有与源完全不同的权限。
幸运的是,使用 cp 和 rsync 等标准命令行工具可以轻松在 Linux 中保留文件权限。查看以下示例,了解如何在 Linux 中复制和保留权限。
使用 cp 保留文件权限
标准 cp 命令具有在复制时保留文件权限所需的一切。您可以使用 cp 的 -p 选项来保留文件的模式、所有权和时间戳。
cp -p source-file dest-file
但是,在处理目录时,您需要为此命令添加 -r 选项。它将复制所有子目录和单个文件,并保持其原始权限不变。
cp -rp source-dir/ dest-dir/
您还可以使用 cp 的 -a 选项来保留文件权限。这将启用存档模式,保留从文件权限到 SELinux 上下文的所有内容。
cp -a source-dir/ dest-dir/
使用 rsync 保留 Linux 中的权限
您还可以使用 rsync 实用程序在 Linux 中保留复制权限。许多管理员更喜欢 rsync 而不是 cp,因为它的复制速度更快。由于 rsync 仅复制文件的更新部分,因此它们更适合克隆 Linux 硬盘驱动器等任务。
rsync -a source-dir/ dest-dir
rsync 的 -a 选项启用存档模式,该模式保留文件属性,例如权限和所有权。您可以使用 -v 选项进行详细输出,使用 -h 选项以人类可读的格式查看数字。
rsync -avh source-dir/ dest-dir
另请注意目标目录中结尾的斜杠 (/) 的豁免。将结尾斜杠添加到目标将导致 rsync 将文件复制到另一个子目录级别下。
验证 Linux 中的文件权限
您可以使用 getfacl(获取文件访问控制列表)命令轻松验证 Linux 中的文件权限。它将验证权限是否按预期保留。
getfacl source-file
getfacl dest-file
在 Linux 中复制文件同时保留权限
cp 和 rsync 都提供了在 Linux 中保留文件权限的标准选项。您可以使用 cp 执行日常任务,而 rsync 更适合大规模数据。完成复制后,请务必使用 getfacl 验证权限。
尽管 rsync 可以在远程计算机之间复制文件,但 scp(安全复制)命令是此任务的另一个可行选项。您可以使用 scp 安全地将文件备份到网络系统或从网络系统备份文件。