我創建了一個目錄/share
並給了chmod 2770
權限和chown root:stock /share
。linux文件和文件夾沒有繼承父目錄的權限
1)當我創建觸摸到內部/share
一個文件,我看到該文件有rw-rw-r--
,我沒有看到rwxrws---
2)當我在/share/data
創建一個目錄,我看到准許,drwxrwsr-x
在哪裏父目錄是drwxrws---
如何獲取父級子文件和子級目錄的固有父級權限完全相同。
我創建了一個目錄/share
並給了chmod 2770
權限和chown root:stock /share
。linux文件和文件夾沒有繼承父目錄的權限
1)當我創建觸摸到內部/share
一個文件,我看到該文件有rw-rw-r--
,我沒有看到rwxrws---
2)當我在/share/data
創建一個目錄,我看到准許,drwxrwsr-x
在哪裏父目錄是drwxrws---
如何獲取父級子文件和子級目錄的固有父級權限完全相同。
當你創建一個文件或目錄
新的文件或目錄的所有者將是你的有效用戶ID(euid
)。您可以使用su other_user
命令(它會提示您輸入的密碼爲other_user
)或sudo su other_user
(根據/etc/sudoers*
中的設置可能允許或不可以,可能要求輸入密碼)更改用戶標識。創建文件或目錄後,您可以使用sudo chown other_user file_name
更改其所有者。
新文件或目錄的組將是您的有效組ID。您可以預先使用newgrp other_group
命令更改您的組ID。如果您的當前目錄有other_group
作爲組,並且它的setgid
位已設置,則您的有效組ID將爲other_group
。創建文件或目錄後,可以使用chgrp other_group file_name
更改其組。 newgrp
,chgrp
和setgid
將工作,如果你是other_group
的成員。如果你不是,他們不會:一個組密碼機制在理論上仍然存在,但幾十年前它已被棄用,我從來沒有見過任何人使用它。當然,如果你想改變兩者,你總是可以用sudo chgrp other_group file_name
,甚至可以用sudo chown other_user:other_group file_name
。
新文件或目錄的讀取和寫入權限將取決於您的umask
,這通常由您的配置文件在登錄時設置。最常用的umask值是022
,其中,對於文件,將給你-rw-r--r--
和002
哪些會給你-rw-rw-r--
。命令umask
將爲您提供當前值。您可以使用umask new_value
來設置另一個值,它會一直有效,直到您更改它或退出您的shell。除非您在umask
中有奇數值,否則目錄也將具有默認設置的所有執行權限,這會阻止相應的執行位。例如。一個umask值027
將創建-rw-r-----
和drwxrwx---
目錄的文件。請參閱文檔以獲得完整的說明。另外,如果父目錄具有setgid
位,則新目錄也會有。默認情況下,無法設置setuid
和sticky
位,也無法設置文件的setgid
位。e
事實上,您始終可以使用命令chmod
設置所需的權限。
這就是說,沒有標準的命令會做你想要的。但是,您可以輕鬆地編寫像以下這樣的bash函數並使用它們(在需要時將它們寫入文件mycreat_functions
和source mycreat_functions
)。這將用於手動創建的文件和目錄。對於由程序創建的文件,shell重定向等,您仍然需要手動更正權限。
function mymkdir() {
local parentperms
for a in "[email protected]"; do
mkdir "$a"
# This copies all permissions of the parent,
# exactly as they are
parentperms="$(stat -c%a $(dirname "$a"))"
chmod "$parentperms" "$a"
# if I’m root...
if [ $(id -u) = 0 ]; then
chown "$(stat -c%u:%g "$a")" "$a"
fi
done
}
function mytouch() {
local parentperms newperms
for a in "[email protected]"; do
touch "$a"
# This inherits all permissions of the parent,
# but removes the excution and setgid bits, as is
# appropriate for files.
parentperms="$(stat -c%a $(dirname "$a"))"
newperms="$(printf %o $((8#$parentperms & 8#5666)))"
chmod "$newperms" "$a"
# if I’m root...
if [ $(id -u) = 0 ]; then
chown "$(stat -c%u:%g "$a")" "$a"
fi
done
}
注:所有者,組和權限存儲在的inode,那裏還對如何獲取該文件的內容等信息; 目錄條目將inode與文件名相關聯,並且ls -i
顯示所列文件的索引節點號。當你拷貝一個文件時,你創建一個新的目錄項並分配一個新的inode,所以這裏提到的一切都適用。當您將移動到文件時,您會在新位置創建一個新的目錄條目,但指向舊的索引節點,以便實際上不會觸及擁有者,組和權限。如果您希望它們根據新目錄條目的父項進行更改,則必須沿上述mytouch
和mymkdir
的行創建mymv
函數。
請參閱[setgid目錄的用途是什麼?](http://serverfault.com/questions/93894/whats-the-purpose-of-setgid-directory) –
請解釋一下你正在嘗試的問題解決。你需要做什麼? –