文件继承其复制目录的权限?

LUU*_*UUU 10 linux permissions cp file-copy files

我在我的主目录中创建了只有用户读取权限 ( r-- --- ---) 的文件。我想将此文件复制到另一个/etc/test/文件夹权限为 744 ( rwx r-- r--) 的目录。我需要允许我正在复制的文件继承它复制到的文件夹的权限,因为到目前为止,当我复制它时,文件权限仍然相同 ( r-- --- ---)。我尝试过 setfacl 命令,但它不起作用?请帮忙。

附注。我不能仅仅chmod -r /etc/test/因为有很多文件会随着时间的推移被复制到这个文件夹中,而且我不想在每次复制文件时都运行 chmod 命令。

slm*_*slm 14

权限通常不会通过文件复制到的目录传播,而是由用户的umask. 但是,当您将文件从一个位置复制到另一个位置时,这是一种特殊情况,其中用户的umask权限基本上被忽略,并且文件的现有权限被保留。理解这个概念是获得你想要的东西的关键。

因此,要复制文件但“删除”其当前权限,您可以cp使用--no-preserve=all开关告诉“不保留” 。

例子

说我和你一样有以下文件。

$ mkdir -m 744 somedir

$ touch afile
$ chmod 400 afile 

$ ll
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Run Code Online (Sandbox Code Playgroud)

正如您已经确认的那样,如果我们只是盲目地使用它来复制它,cp我们会得到:

$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile
Run Code Online (Sandbox Code Playgroud)

现在让我们重复这一点,但这次告诉cp“删除权限”:

$ rm -f somedir/afile 

$ cp --no-preserve=all afile somedir/

$ ls -l somedir/
total 0
-rw-rw-r--. 1 saml saml 0 Feb 14 15:21 afile
Run Code Online (Sandbox Code Playgroud)

因此,复制的文件现在将其权限设置为 664,它是从哪里获得的?

$ umask
0002
Run Code Online (Sandbox Code Playgroud)

如果我将 my 更改umask为其他内容,我们可以第三次重复此测试并查看umask对未保存的影响cp

$ umask 037
$ rm somedir/afile 

$ cp --no-preserve=all afile somedir/
$ ls -l somedir/
total 0
-rw-r-----. 1 saml saml 0 Feb 14 15:29 afile
Run Code Online (Sandbox Code Playgroud)

注意权限不再是 664,而是 640?那是由umask. 它告诉任何创建文件的命令禁用权限中的低 5 位......这些家伙:(----wxrwx)。