如何在 Linux 中复制文件时保留文件权限

文件权限是 Unix 规范的一个组成部分。 但是,有些事情开始用户通常不知道,例如如何在复制文件时在 Linux 中保留文件权限。

由于复制的文件本质上是新文件,因此它们的权限取决于当前用户的 umask。 这可能导致复制的文件或文件夹具有与源完全不同的权限的情况。

幸运的是,使用标准命令行工具在 Linux 中保留文件权限很容易,例如 cprsync. 查看以下示例,了解如何在 Linux 中复制和保留权限。

使用 cp 保留文件权限

标准 cp 命令具有在复制时保留文件权限所需的一切。 您可以使用 -p cp 选项保留文件的模式、所有权和时间戳。

cp -p source-file dest-file

但是,您需要添加 -r 处理目录时此命令的选项。 它将复制所有子目录和单个文件,保持其原始权限不变。

cp -rp source-dir/ dest-dir/

您还可以使用 -一种 cp 选项保留文件权限。 这使 档案 模式,保留从文件权限到 SELinux 上下文的所有内容。

cp -a source-dir/ dest-dir/

使用 rsync 在 Linux 中保留权限

您还可以使用 rsync 实用程序在 Linux 中保留复制权限。 许多管理员更喜欢 rsync 而不是 cp,因为它的复制速度更快。 由于 rsync 仅复制文件的更新部分,因此它们更适合于克隆 Linux 硬盘驱动器等任务。

rsync -a source-dir/ dest-dir

-一种 rsync 选项启用 档案 模式,它保留文件属性,如权限和所有权。 您可以使用 -v 详细输出选项和 -H 用于以人类可读的格式查看数字。

rsync -avh source-dir/ dest-dir

另外,请注意结尾的豁免 削减 (/) 从目标目录。 将结束斜杠添加到目标将导致 rsync 将文件复制到另一个子目录级别下。

在 Linux 中验证文件权限

您可以使用以下命令轻松验证 Linux 中的文件权限 getfacl (获取文件访问控制列表)命令。 它将验证权限是否按预期保留。

getfacl source-file
getfacl dest-file

在 Linux 中保留权限的同时复制文件

cp 和 rsync 都提供了在 Linux 中保留文件权限的标准选项。 您可以将 cp 用于日常任务,而 rsync 将更适合大规模数据。 完成复制后,请确保使用 getfacl 验证权限。

虽然 rsync 可以在远程机器之间复制文件,但是 scp (安全复制)命令是此任务的另一个可行选项。 您可以使用 scp 安全地将文件备份到网络系统或从网络系统备份文件。