LINUX

LINUX CHMOD指令

介紹

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

語法

chmod [options] permissions files

常用的options

-R  Recursively change the ownership within a directory hierarchy.

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     // 大家都可以讀,只有你可以寫

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

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     // 同上

發佈留言