iT邦幫忙

2025 iThome 鐵人賽

DAY 21
2

嗨!歡迎回到上班族的命令列生存手冊。上一個章節詳細說明了一個檔案前面的權限要怎麼看,但是權限是一個不小的話題,這一個章節還是需要繼續談。前情提要筆者提供了一個「簡單的 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-,執行也確實跳出了錯誤訊息。

深度解析 chmod 帶的參數

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

數字模式 (Octal Mode)

突然講出術語的男生,酷酷的。空氣投籃後(冷冷的)說出「同分異構物,同素異形體。」很酷。就像常用 Linux 人會說「把他設成 775 就好。」乍聽之下暈暈的(低血糖),但酷男孩們說的 775 是什麼意思呢?

數字與權限的對應關係

原來每一個權限都有一個固定的值(這一套是基於 2 的次方設計的)

  • r 讀取權限: 4
  • w 寫入權限: 2
  • x 執行權限: 1
  • 沒權限: 0

r w x 這三個值,用他們的位置在 2 進位之下,1 代表有權限,0 代表沒有權限:

  • r-- 讀取權限: 100,用十進位來表示,就是 4
  • -w- 寫入權限: 010,用十進位來表示,就是 2
  • --x 執行權限: 001,用十進位來表示,就是 1
  • 沒權限: 0

把這些權限的數字相加(因為從二進位轉到十進位表示),就可以得到某個權限組合代表的數字,例如:

  • rwx = 4 + 2 + 1 = 7
  • rw- = 4 + 2 + 0 = 6
  • r-x = 4 + 0 + 1 = 5
  • r-- = 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 啦,下次見囉。


上一篇
Day20 進階觀念篇:一個簡單的 Shell Script 和權限
下一篇
Day22 進階觀念篇:一起寫個自動分類檔案的 Script
系列文
上班族的命令列 (CLI) 生存手冊25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
chiaominchang222
iT邦新手 5 級 ‧ 2025-10-05 10:16:25

最小權限啦

2
AndyAWD
iT邦新手 2 級 ‧ 2025-10-05 22:32:16

因為 Security 和 Privacy 建議設定成 700。

我背起來了 !

我要留言

立即登入留言