Linux

文件繼承了它被複製到的目錄的權限?

  • July 22, 2018

我在我的主目錄中創建了只有使用者讀取權限(r-- --- ---)的文件。我想將此文件複製到另一個/etc/test/具有 744 ( rwx r-- r--) 文件夾權限的目錄。我需要允許我正在複製的文件繼承它複製到的文件夾的權限,因為到目前為止,當我複制它時,文件權限仍然相同(r-- --- ---)。我試過 setfacl 命令,但是沒用?請幫忙。

PS。我不能僅僅chmod -r /etc/test/因為隨著時間的推移有很多文件會被複製到這個文件夾中,而且我不想每次復製文件時都執行 chmod 命令。

權限通常不會由文件複製到的目錄傳播,而是由使用者的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

正如您已經確認的那樣,如果我們只是盲目地複制它,cp我們會得到:

$ cp afile somedir/
$ ls -l somedir/
total 0
-r--------. 1 saml saml 0 Feb 14 15:20 afile

現在讓我們重複這個,但這次告訴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

所以現在複製的文件的權限設置為 664,它是從哪裡得到的呢?

$ umask
0002

如果我將我的更改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

注意權限不再是 664,而是 640?這是由umask. 它告訴任何創建文件的命令禁用權限中的低 5 位……這些傢伙:(----wxrwx)。

引用自:https://unix.stackexchange.com/questions/115246