最近,一位同事要求我使用chmod
字母而不是數字。除了明顯的可讀性優勢之外,還有什麼特別的理由使用字母而不是數字嗎?
答案1
與八進位表示法相比,符號chmod
表示法更加細粒度,允許修改特定模式位,同時保持其他模式位不變。
符號表示法由三個部分組成:
chmod [references][operator][modes] file
references
由字母 的組合組成,ugoa
指定file
將修改哪個使用者的存取權限:擁有該檔案的使用者 ( u
)、檔案群組中的其他使用者 ( g
)、不在檔案群組中的其他使用者 ( o
) 或所有使用者( a
)。如果references
省略該元件,則預設為所有用戶,但僅修改允許的權限umask
。
導致+
operator
指定的文件模式位元被加入到每個文件的現有文件模式位元中;-
導致它們被移除;並=
導致添加它們並刪除未指定的位,除非setuid
明確setgid
指定,否則為目錄設定的位除外。
mode
由字母 的組合組成,rwxXst
分別對應讀取(r
)、寫(w
)、執行(或搜尋目錄)(x
),僅當檔案是目錄或已具有某些使用者的執行權限時才執行/搜尋(X
),setuid
或setgid
(取決於指定的引用)( s
) 和限制刪除標誌或黏滯位元 ( t
)。或者, 可以mode
由字母 之一組成ugo
,在這種情況下, 對應mode
於目前授予所有者 ( u
)、文件組成員 ( g
) 的權限或上述任一類別中的使用者的權限 ( o
)。
例子
假設設定的權限file
是0764/-rwxrw-r--
刪除不在檔案群組中的其他使用者的權限:
八進位:
chmod 760 file
請注意,使用八進位表示法時,必須重複保持不變的現有權限。
象徵性:
chmod o-rwx file
使用符號表示法,現有的檔案權限並不重要。
放setuid
:
八進位:
chmod 4764 file
象徵性:
chmod u+s file
放setgid
:
- 八進位:
chmod 2764 file
- 象徵性的
chmod g+s file
答案2
使用這些字母可以打開和關閉各個位,而無需更改其他位。
假設我有以下目錄:
drwxrwsr-x 6 f261-01a g261-01a 4096 Sep 12 17:51 /home/teams/261/f261-01a
如果我想關閉其他人的讀取權限並且我想使用數字,我可能很快就會這樣做chmod 751
。只不過我剛剛關閉了目錄上的 setgid 位元。哎呀。
但是,如果我使用chmod o-r
,我只會關閉我想要的讀取位,並且目錄上的 setgid 位元保持設定狀態。
如果您想在檔案或目錄上開啟 setuid、setgid 或黏性位,它也很有用。特別是如果你很少這樣做,你就很難記住第四個八位元組中的哪一個。
所以,這取決於你在做什麼。當我只是設定權限並且不關心從什麼開始時,我仍然更喜歡使用數字。但如果您要切換各個位,則字母表示法會容易得多。