文件权限是 Unix 规范的一个组成部分。 但是,有些事情开始用户通常不知道,例如如何在复制文件时在 Linux 中保留文件权限。
由于复制的文件本质上是新文件,因此它们的权限取决于当前用户的 umask。 这可能导致复制的文件或文件夹具有与源完全不同的权限的情况。
幸运的是,使用标准命令行工具在 Linux 中保留文件权限很容易,例如 cp 和 rsync. 查看以下示例,了解如何在 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 安全地将文件备份到网络系统或从网络系统备份文件。