嗨!歡迎回到上班族的命令列生存手冊。上一個章節詳細說明了一個檔案前面的權限要怎麼看,但是權限是一個不小的話題,這一個章節還是需要繼續談。前情提要筆者提供了一個「簡單的 Shell Script」,雖然已經建立好相關的檔案,卻沒辦法「執行」。為此抽絲剝繭,發現了原來檔案和資料夾有精確的權限控制,不過寫完已經太晚了被冨樫了一回。
好!到底要怎麼調整權限呢?就需要請出這個指令 — chmod
。
從上一章知道,權限裡面有三個角色:建立檔案的使用者(User)、檔案所在的群組(Group)、其他人(Other)。這邊我們只在乎擁有者本人,可以這樣子讓你自己的檔案變得可以執行:
$ chmod u+x file
再次回到這個例子:
-rwxr-xr-x. 1 louis383 staff 31 8月 20 21:18 sayHi.sh*
-rw-r--r--. 1 louis383 staff 31 8月 20 21:26 sayYo.sh
看到 sayYo 檔案,就將它變得可以執行吧!套用上面的例子就會是這樣下:
$ chmod u+x sayYo.sh
再來看 $ ls -la
印出的 Long Format,看看權限是否有變化:
-rwxr--r--. 1 louis383 staff 31 8月 20 21:26 sayYo.sh*
看到第一個擁有者(User)的 rw-
變成了 rwx
,檔案獲得了執行權限。筆者在介紹 cd
指令時有提到怎麼在命令列之下「執行」檔案,在這邊就來執行這個 sayYo.sh
。
$ ./sayYo.sh
就可以執行啦!
檔案的權力由使用者賦予,也能由使用者收回。如果有一天,我們都發現,該把 sayYo.sh
的執行權限收回來了,可以這樣做:
$ chmod u-x sayYo.sh
再下 $ ls -la
來看看執行權限是不是已經被解除:
-rw-r--r--. 1 louis383 louis383 31 8月 20 21:26 sayYo.sh
看來已經從上面的 rwx
變成了 rw-
,執行也確實跳出了錯誤訊息。
從 sayYo.sh
的調整就能注意到,用 +
(賦予)和 -
(收回)來調整權限。那前面的 u 是什麼意思呢?範例是調整檔案擁有者(User) 的權限設定,剛好 u 和擁有者的英文 User 都有 u,這是巧合嗎?我不這麼認為。
u
:調整檔案擁有者(User)的權限g
:調整檔案所在群組(Group)的權限o
:調整其他人(Other)的權限a
:調整所有人(All)的權限,如果指令沒有寫針對誰,預設就是所有人再來複習 rwx
的意思:
r
:(Read)讀取檔案的權限w
:(Write)修改、寫入檔案的權限x
:(Execute) 執行檔案的權限就繼續拿 sayYo.sh
來開刀。
取消檔案擁有者修改的權限
$ chmod u-w sayYo.sh
讓檔案群組的人可以讀取
$ chmod g+r sayYo.sh
讓其他人不能編輯,也不能看檔案
可以一次處理多個權限:
$ chmod o-rw sayYo.sh
管他!所有人可以執行
$ chmod +x sayYo.sh
// 就等於
$ chmod a+x sayYo.sh
擁有者和檔案所在群組的其他人,都不能讀取
可以一次處理多個角色:
$ chmod ug-r sayYo.sh
除了用 +
和 -
以外,也可以直接用 =
等號直接指定。打個比方:
指定 sayYo.sh
擁有者可以讀取、寫入、執行,檔案同組的成員可以讀取、寫入,其他人就只能看。(沒有寫出就是沒有賦予權限囉,或是直接打出 -
也可以,只是接在 -
後面的也會被視為取消權限。)
$ chmod u=rwx,g=rw,o=r sayYo.sh
突然講出術語的男生,酷酷的。空氣投籃後(冷冷的)說出「同分異構物,同素異形體。」很酷。就像常用 Linux 人會說「把他設成 775 就好。」乍聽之下暈暈的(低血糖),但酷男孩們說的 775 是什麼意思呢?
原來每一個權限都有一個固定的值(這一套是基於 2 的次方設計的)
r
讀取權限: 4w
寫入權限: 2x
執行權限: 1把 r
w
x
這三個值,用他們的位置在 2 進位之下,1 代表有權限,0 代表沒有權限:
r--
讀取權限: 100,用十進位來表示,就是 4-w-
寫入權限: 010,用十進位來表示,就是 2--x
執行權限: 001,用十進位來表示,就是 1把這些權限的數字相加(因為從二進位轉到十進位表示),就可以得到某個權限組合代表的數字,例如:
rwx
= 4 + 2 + 1 = 7rw-
= 4 + 2 + 0 = 6r-x
= 4 + 0 + 1 = 5r--
= 4 + 0 + 0 = 4--x
= 0 + 0 + 1 = 1接著,將三個角色的權限組合帶進去:
擁有者 User | 檔案所屬群組的人 Group | 其他人 Other | |
---|---|---|---|
rwx |
rwx |
r-x |
|
根據公式 | 7 | 7 | 5 |
反推回來就是:rwxrwxr-x
!
下次生活中遇到這個裝況,你就能酷酷的回答「因為 Security 和 Privacy 建議設定成 700。」記得晶晶體。終於知道這些數字代表的意思了!
擁有者 User | 檔案所屬群組的人 Group | 其他人 Other | |
---|---|---|---|
rwx |
--- |
--- |
|
根據公式 | 7 | 0 | 0 |
好!反正現在終於會設定權限了,下一個章節終於要來正式寫一個 Shell Script 啦,下次見囉。