复制文件或者目录时如何保留所有权和文件权限
另一天,我计划将一些数据从Ubuntu桌面系统备份到外部U盘。
将所有数据转移到外部驱动器后,我注意到源和目标文件和目录的所有者和权限都不同。
但是,我希望在两个位置保持现有的文件属性(例如所有者,组和时间戳等)。
在快速谷歌搜索并通过"CP"命令的人的页面之后,我发现我们可以在复制Linux上复制文件和目录时保持所有权和文件权限。
如果你曾经在这样的情况下,这里是一个快速解决方法来做到这一点。
在将文件或者Linux上的文件或者目录复制时,请保留所有权和文件权限
CP命令可以选项复制文件和目录,但保留从原始文件中保留修改时间,访问时间和模式。
$cp -rp ~/data /media/sk/sk_seagate/data/
其中我正在将名为"data"的文件夹的内容复制到我的外部驱动器。
来自CP命令的man 页面:
-p same as --preserve=mode,ownership,timestamps --preserve[=ATTR_LIST] preserve the specified attributes (default: mode,ownership,timestamps), if possible additional attributes: context, links, xattr, all
因此,如果使用-p标志,它将保留所有现有的文件属性,例如从原始文件中的模式,所有权和时间戳。
此处使用"-R"标志以递归复制目录。
意味着它将复制目录及其子目录和文件。
或者,我们可以使用-a标志。
它包括-R标志并保留所有内容,例如链接,XATTR,SELinux属性等。
$cp -a ~/data /media/sk/sk_seagate/data/
来自CP命令的man 页面:
-a, --archive same as -dR --preserve=all
要验证文件权限和所有权是否已完整,请在两个位置上使用getfacl命令:源和目标。
$getfacl ~/data
$getfacl /media/sk/sk_seagate/data/
如果要在同一网络中从本地系统之间复制文件到远程系统,则可以使用"SCP"命令将文件从一个系统传输到另一个系统中的另一个系统。
$scp -rp ~/data Hyman@theitroad:/home/senthil/
上面的命令将将名为"data"的内容文件夹从我本地系统复制到远程系统。
其中192168.225.22是我远程系统的IP地址,"senthil"是远程系统的用户名。
使用"getfacl"命令检查两个系统上的"数据"目录的文件权限和所有权。
首先让允许检查本地系统上的"数据"目录的文件属性:
$getfacl data/
示例输出:
# file: data/ # owner: sk # group: sk user::rwx group::rwx other::r-x
接下来,检查远程系统上的"Data"目录的文件属性。
我们可以直接登录远程系统,并通过下面的SSH命令检查远程目录的FIE属性。
$ssh Hyman@theitroad getfacl data
示例输出:
Hyman@theitroad's password: # file: data # owner: senthil # group: senthil user::rwx group::rwx other::r-x
由于我们可能在上面的输出中注意到,我的远程系统中的所有者和组信息(即senthil)不同。
因此,SCP命令的-P标志不保留所有权限。
来自SCP命令的人网页:
-p Preserves modification times, access times, and modes from the original file.
很明显,-p标志只能保留原始文件的修改时间,访问时间和模式,而不是所有权。
在这种情况下,我们可以在两个系统上创建常见的用户名,然后尝试上面的命令携带不同系统的相同所有权和文件权限。
或者只需使用目标系统上的"chown"命令来更改所有权。
有关更多详细信息,请参阅CP和SCP命令的Man页面。
$man cp
$man scp