Last Updated on 2023-10-12 by Clay
在 Linux 作業系統中,每一份文件都有屬於自己的使用者、群組以及讀寫權限,而這些文件的特性又會影響到其他使用者是否能編輯或使用這份檔案。
今天我要紀錄的,就是關於要如何使用 chmod
來改變文件權限、以及究竟文件權限有分成哪幾種等級。
查看文件權限
我在每份放置腳本的資料夾中,使用以下指令來看到更多的資訊:
ls -l
Output:
drwxr-xr-x 2 clay clay 64 Jan 9 15:29 test
-rw-r--r-- 1 clay clay 554 May 21 2021 python_resize.py
-rw-r--r-- 1 clay clay 346 Dec 31 23:47 random_tasks.py
-rw-r--r-- 1 clay clay 516 Apr 7 2021 c2h.sh
我們可以看到最開頭存在著一串 -rw-r--r--
像密碼一般的文字,實際上這代表了這份文件的權限。
權限表示
而那份像密碼一樣的文字該如何看懂呢?實際上非常地單純。
一共有 10 個字元,最開頭代表著這份檔案究竟是否為目錄,如果是目錄就顯示 d
,如果否則顯示 -
。接著依序是擁有者、群組、其他使用者三個部分,每一個部分都存在著 rwx
三種不同的權限:
r
代表著可以讀取w
代表著可以寫入x
代表著可以執行(這代表著對目錄的遍歷權限,如果沒有則無法瀏覽此目錄)
同樣,如果顯示 -
則代表並無這種權限的操作。
回到一開始的 -rw-r--r--
權限,正代表著這份文件並不是目錄、使用者可以讀寫這份文件、群組以及其他使用者都僅可以讀取不得編輯。
權限的數字表示
Permission Mask | R | W | X | Decimal Representation |
---|---|---|---|---|
— | 0 | 0 | 0 | 0 |
–x | 0 | 0 | 1 | 1 |
-w- | 0 | 1 | 0 | 2 |
-wx | 0 | 1 | 1 | 3 |
r– | 1 | 0 | 0 | 4 |
r-x | 1 | 0 | 1 | 5 |
rw- | 1 | 1 | 0 | 6 |
rwx | 1 | 1 | 1 | 7 |
在我們開始使用 chmod
指令之前,我們可以先來看一下權限的數字表示法。基本上就是將 rwx
視為一組二進制的數值,允許的操作表示為 1,不允許的操作表示為 0。
從二進制轉成十進制後,最高的數字為 7(二進制中表示為 111 權限全開),我們會需要使用三組數字分別表示擁有者、群組、其他使用者。
比方說權限全開、許多 Linux 前輩諄諄告誡千萬別使用的 777 權限,就代表著不論是誰都可以讀寫執行的最高權限,十分危險。
而我們可以搭配 stat
指令來查看當前文件的權限數字表示。比方說像一開始那擁有 -rw-r--r--
權限的 c2h.sh 腳本文件:
stat -c "%a" c2h.sh
Output:
644
對照上方的圖表,確實代表著擁有者可讀寫、群組使用者以及其他使用者唯讀的權限。
(註:直接使用 stat 檔案
也可以在詳細資訊中確認檔案權限)
如何使用 chmod 指令
上面介紹了如何查看文件的權限,下面我們開始介紹該如何使用 chmod 指令來改變一份文件的權限吧!
在開始之前,我要再額外紀錄 4 個參數與 3 個運算子:
u
:檔案擁有者g
:檔案所屬群組的使用者o
:其他使用者a
:所有使用者
+
:將所選權限賦予特定使用者-
:將所選權限移除自特定使用者=
:將所選權限設定給特定使用者
賦予權限
在開始之前,如果你無法使用下述指令改變此文件的權限,可能你並沒有改變此文件的權力,嘗試加上 sudo
指令在最開頭以 root 身份改變權限吧!
首先,若是要將執行權限(遍歷權限)賦予所有使用者,可以使用:
chmod +x c2h.sh
or
chmod a+x c2h.sh
這兩種都會把所有使用者賦予執行權限(遍歷權限)。
現在的文件權限為:
-rwxr-xr-x
移除權限
但假設我們後悔了,想要將其他使用者可以遍歷的權限收回,那麼就輪到 -
操作符登場的時候了:
順帶一提要小心不要把擁有者的權限也一併移除掉,我們要單獨設定 o
來代表其他使用者:
chmod o-x c2h.sh
Output:
-rwxr-xr--
設定權限
設定權限是直接指定特定使用者所擁有的權限,比方說我們將文件權限很神奇地設置成擁有者與所屬群組的使用者沒有任何權限、但是其他使用者擁有全部權限:
chmod u= c2h.sh
chmod g= c2h.sh
chmod o=rwx c2h.sh
Output:
-------rwx
很神奇的權限呢!
使用數字來直接設定權限
這個也是我很推薦的權限設定方法,我們可以直接使用數字指定權限。至於數字是什麼數字呢?自然就是上方所提及的二進制轉換過來的那三個數字了。
三個數字按照順序,分別代表擁有者、所屬群組使用者、其他使用者等三個族群。
比方說我們想要將權限調整回一開始擁有者可以讀寫、其他兩種使用者僅唯獨:
chmod 644 c2h.sh
Output:
-rw-r--r--
雖然現在補述可能有些晚了,但是別忘了 chmod
指令並不會回傳顯示的文件權限哦!我所印出的 Output 權限都是另外使用 ls -l
去查看的。
以上就是關於 Linux 系統的權限介紹、以及 chmod
指令的紀錄。
References
- https://www.computerhope.com/unix/uchmod.htm
- https://www.pluralsight.com/blog/it-ops/linux-file-permissions