LINUX

LINUX CHMOD指令

介紹

chmod指令用來變更檔案(夾)的權限。

語法

chmod [options] permissions files
Code language: plaintext (plaintext)

常用的options

-R Recursively change the ownership within a directory hierarchy.
Code language: plaintext (plaintext)

permissions參數

permissions參數可以是下列其中一種格式:

  1. 三到四位的八進位(Octal)數字
  2. 給定絕對(Absolute)或相對(Relative)權限的字串
  3. --reference=file_name

第一種為一八進位數字,如下圖:

mt01

檔案系統介紹中,有提到rwx分別是讀、寫及執行的權限,而UserGroupOther分別是檔案的擁有者、所屬群組及其他使用者。

二進位轉八進位如果不熟悉,最簡單的記法就是r=4w=2x=1,所以如果是讀+寫就是4+2=6

八進位數字中,最左邊三個bits分別是set user IDset group IDsticky 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 // 大家都可以讀,只有你可以寫
Code language: plaintext (plaintext)

第二種字串由ScopeCommandPermissions三個部份組成:

Scope (選填): u 代表擁有者(user or owner)、g 代表群組(group)、o 代表其他(others)、a 代表所有(all)。預設為 a Command: + 用來加入權限、- 用來移除權限、= 用來指定絕對權限 Permissions: 使用 r, w, x 來代表讀、寫及執行權限。
Code language: plaintext (plaintext)

常用的字串權限:

⤍ 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,然後移除所有人的執行權限
Code language: plaintext (plaintext)

第三種會將權限變更為file_name的權限。

範例

你可以讓所有人都可以讀、寫及執行檔案:

⤍ chmod 777 myfile ⤍ chmod ugo=rwx myfile // 同上 ⤍ chmod a=rwx myfile // 同上 ⤍ chmod =rwx myfile // 同上
Code language: plaintext (plaintext)

你可以讓大家都只有讀取權限:

⤍ chmod 444 myfile ⤍ chmod ugo=r myfile // 同上 ⤍ chmod a=r myfile // 同上 ⤍ chmod =r myfile // 同上
Code language: plaintext (plaintext)

發佈留言