使用 cp 保留 Linux 权限和所有者

使用 cp 保留 Linux 权限和所有者

我无法理解以下行为:我有一个名为
的文件, 如果我这样做,权限是someFile/opt/com/internal/someFile
ls -all /opt/com/internal/someFile700 user:userGroup

我是 root,我愿意cp /root/folder/someFile /opt/com/internal/someFile

  1. 我没有收到覆盖提示。为什么?

  2. 权限没有改变。但是如果我这样做cp /root/folder/someFile /opt/com/internal/someFile,而文件someFile不存在,则它属于root而不是user。为什么?

答案1

我没有收到覆盖提示。为什么?

因为你应该知道自己在做什么。尤其是作为 root,你可以覆盖几乎任何东西,所以要注意这一点。

使用-i选项cp在覆盖现有文件之前获取提示。如果你总是想得到提醒,请考虑创建别名为。cpcp -i

权限不变。但如果 […] 文件someFile不存在,root则其所有者为 而非user。为什么?

因为您要复制到的文件已经存在。它没有被删除并重写。它仍然归 拥有user

但是,请检查cp-p选项。它将保留源文件的属性,即模式、所有权和时间戳。否则,目标文件的模式和所有权属性将保留(时间戳除外,它将指示修改)。

如果没有目标文件,显然源文件的属性需要被复制,因为它们不能从目标文件继承。您基本上只需创建一个新文件,在这种情况下,它归 拥有root

答案2

1)cp除非使用参数,否则不会提示覆盖-i,这是自第一个 unix 以来的默认行为

2)来自维基百科:将文件覆盖到现有文件是通过以更新模式打开现有文件来执行的,从而保留文件的 inode,这需要写访问权限并导致目标文件保留其原来的权限。

相关内容