介紹
chmod
指令用來變更檔案(夾)的權限。
語法
chmod [options] permissions files
常用的options
-R Recursively change the ownership within a directory hierarchy.
permissions
參數
permissions
參數可以是下列其中一種格式:
- 三到四位的八進位(Octal)數字
- 給定絕對(Absolute)或相對(Relative)權限的字串
--reference=file_name
第一種為一八進位數字,如下圖:
在檔案系統介紹中,有提到r
、w
、x
分別是讀、寫及執行的權限,而User
、Group
、Other
分別是檔案的擁有者、所屬群組及其他使用者。
二進位轉八進位如果不熟悉,最簡單的記法就是r=4
、w=2
及x=1
,所以如果是讀+
寫就是4+2=6
。
八進位數字中,最左邊三個bits
分別是set user ID
、set group ID
及sticky bit
。
set user ID
:讓執行這個執行檔的使用者暫時擁有擁有者權限,直到執行結束。set group ID
:讓執行這個執行檔的使用者暫時擁有所屬群組權限,直到執行結束。sticky bit
:通常只要擁有檔案夾的寫入權限,你就可以刪除或移動裡面的所有檔案,即使你沒有那些檔案的權限。但如果使用sticky bit
,則在刪除或移動前,必須擁有該檔案的權限,否則無法操作。
由此可知,這三個bits
使用不當會直接讓系統處在一個非常危險的狀態,所以在設定這類參數時務必小心謹慎。
不過在大多數的情況下是不會使用到這些bits
的,而沒有需要設定時可以忽略它們,也就是說,你可以使用三位的八進位數字。
常用的八進位權限:
⤍ chmod 600 myfile // 只有你可以讀寫檔案
⤍ chmod 644 myfile // 大家都可以讀,只有你可以寫
⤍ chmod 700 mydir // 只有你可以存取檔案夾
⤍ chmod 755 mydir // 大家都可以讀,只有你可以寫
第二種字串由Scope
、Command
及Permissions
三個部份組成:
Scope (選填): u 代表擁有者(user or owner)、g 代表群組(group)、o 代表其他(others)、a 代表所有(all)。預設為 a
Command: + 用來加入權限、- 用來移除權限、= 用來指定絕對權限
Permissions: 使用 r, w, x 來代表讀、寫及執行權限。
常用的字串權限:
⤍ chmod ug+rw myfile // 新增讀與寫權限給user及group
⤍ chmod a-x myfile // 移除所有人的執行權限
⤍ chmod -x myfile // 同上,沒指定Scope則會對所有人執行
⤍ chmod o=r myfile // 將others的權限設定為只能讀
⤍ chmod ug+rw,a-x myfile // 新增讀與寫權限給user及group,然後移除所有人的執行權限
第三種會將權限變更為file_name
的權限。
範例
你可以讓所有人都可以讀、寫及執行檔案:
⤍ chmod 777 myfile
⤍ chmod ugo=rwx myfile // 同上
⤍ chmod a=rwx myfile // 同上
⤍ chmod =rwx myfile // 同上
你可以讓大家都只有讀取權限:
⤍ chmod 444 myfile
⤍ chmod ugo=r myfile // 同上
⤍ chmod a=r myfile // 同上
⤍ chmod =r myfile // 同上
發佈留言