chmod 中的大寫X到底有什麼用?

chmod(1) 手冊頁中對權限位的描述中說起到 rwxXst 六個權限標記, rwx 是幾乎全部 Linux 初學者都會學到的,更進者會了解到 st 兩個標記,但 X 卻少有提起。因此筆者大體瞭解了一下這個標記。
手冊中是這樣描述 X 的:
execute/search only if the file is a directory or already has execute permission for some user (X)
只有在文件是目錄或對一些用戶已經有執行權限的時候執行/搜索?不知你們第一次見到這句解釋時是如何理解的,筆者反正是懵逼的。因此這個時候須要一番簡單實驗探索一下這個 X 了。此處省略筆者的探索過程,只列出能幫助你們理解的一些操做。
用一個最簡單的 shell 腳本進行測試:

$ echo -e '#!/bin/sh\n\necho hello' > script.sh
$ ls -l script.sh
-rw-r--r-- 1 dawn users 22 Mar 3 23:52 script.sh

$ # 初始狀態是沒有執行權限的,這個時候 +X 試試

$ chmod a+X script.sh

$ ls -l script.sh
-rw-r--r-- 1 dawn users 22 Mar 3 23:52 script.sh

$ # 沒有任何變化,並無出現 X

$ ./script.sh
sh:./script.sh: Permission denied

$ # 此時也沒法執行

# u+x 後再試試

$ chmod u+x script.sh

$ ls -l script.sh
-rwxr--r-- 1 dawn users 22 Mar 3 23:52 script.sh

$ chmod a+X script.sh

-rwxr-xr-x 1 dawn users 22 Mar 3 23:52 script.sh

$ # 在 user 有執行權限的狀況下執行 a+X 的效果和 a+x 相同至此,咱們已經能夠對 X 有一些本身的瞭解了,
筆者的想法是: chmod 中的 X 與 rwxst 不一樣,並非真正意義的標識,而是 chmod 的一種行爲,
結合手冊頁中的解釋,就是當文件是目錄或對任意用戶有執行權限的狀況下,才設置執行權限位,即此時等價於 x,不然不改變執行權限。
因此,有了初步理解,咱們就能夠驗證針對目錄是否如此了。

$ mkdir -m 664 dir

$ ls -ld dir
drw-rw-r-- 2 dawn users 4096 Mar 4 00:09 dir

$ # 在該目錄文件沒有執行權限,此時嘗試 a+X
chmod a+X dir

$ ls -ld dir

drwxrwxr-x 2 dawn users 4096 Mar 4 00:11 dir

$ # user、group 和 other 的執行權限成功被設置linux

 

相關文章
相關標籤/搜索