我无法理解以下行为:我有一个名为
的文件, 如果我这样做,权限是someFile
/opt/com/internal/someFile
ls -all /opt/com/internal/someFile
700 user:userGroup
我是 root,我愿意cp /root/folder/someFile /opt/com/internal/someFile
我没有收到覆盖提示。为什么?
权限没有改变。但是如果我这样做
cp /root/folder/someFile /opt/com/internal/someFile
,而文件someFile
不存在,则它属于root
而不是user
。为什么?
答案1
我没有收到覆盖提示。为什么?
因为你应该知道自己在做什么。尤其是作为 root,你可以覆盖几乎任何东西,所以要注意这一点。
使用-i
选项cp
在覆盖现有文件之前获取提示。如果你总是想得到提醒,请考虑创建别名为。cp
cp -i
权限不变。但如果 […] 文件
someFile
不存在,root
则其所有者为 而非user
。为什么?
因为您要复制到的文件已经存在。它没有被删除并重写。它仍然归 拥有user
。
但是,请检查cp
的-p
选项。它将保留源文件的属性,即模式、所有权和时间戳。否则,目标文件的模式和所有权属性将保留(时间戳除外,它将指示修改)。
如果没有目标文件,显然源文件的属性需要被复制,因为它们不能从目标文件继承。您基本上只需创建一个新文件,在这种情况下,它归 拥有root
。
答案2
1)cp
除非使用参数,否则不会提示覆盖-i
,这是自第一个 unix 以来的默认行为
2)来自维基百科:将文件覆盖到现有文件是通过以更新模式打开现有文件来执行的,从而保留文件的 inode,这需要写访问权限并导致目标文件保留其原来的权限。