Files in linux – 1

2019/10/18 優化部份內容

Files in Linux

Ubuntu 的每個檔案都是用一套 “file mode bits” 在進行權限控管,在 terminal 中執行 [註1]

$ls -l

便可以在列出表單中左方發現這類記號

紅色圈圈中的小寫英文字

若該檔案為 directory(資料夾) 則首字元為 d,若為 Regular file(普通檔案) 則為 – [註2]

接著是3組 “rwx” 對應 Read/Write/Execute 的組合,我們稱為 file mode bits,三組分別對應 user (u) / group (g) / others (o) 的使用者

每次使用者試圖存取(或使用)檔案時,系統都會檢查該使用者是否有權限對那個檔案執行他想要做的動作,照 user/group/others 依序檢查,若檢查完了還是沒有權限則會跳出Permission Denied,並停止該動作

例如圖中的 “bin” directory,它的 file mode bits 為

drwxr-xr-x

也就表示:

  • “bin” 是個 directory
  • User 有 Read/Write/Execute 所有權限
  • Other users in the file group 只有 R/E 的權限
  • Others 也只有 R/E 的權限

當沒有權限的使用者想要 Read/Write/Execute 時,terminal 會顯示 error :

$bash: 拒絕不符權限的操作: [操作]

chmod

我們能使用 chmod 來改變檔案預設的權限使該操作得以被執行,例如能將剛完成的 shell script 變得能夠被執行 (一般檔案被預設為無法執行),或是改變從 windows 移入檔案的權限

當然,我們能夠像其他 commands 一樣用

$man chmod

來查看指令的詳細說明,這邊會介紹它大概的使用方式:

$chmod [OPTIONS] [MODE] [FILE]

    其中 OPTIONS 為功能選項,可以空白、MODE 是修改 file mode bits 的方式、FILE 即為要做更動的擋案

我認為常用的 options 只有 -v / -c 和 -R [註3] :

  • -v : 把選取範圍內所有檔案的 file mode bits 都各自列出一行提醒,無論有無更動
  • -c : 只列出有更動檔案的提醒
  • -R : 以遞迴的方式更改 file mode bits,也就是選取 directory 的所有子檔案都會被更改,若沒有 -R 則在更動 directory 時,只會更動被選取 directory 本身的 file mode bits,而其內容則無影響

    在 chmod 中有2種修改方式,symbolic & octal mode,但是我個人主觀的偏見認為 octal mode 方便許多,因此想知道 symbolic 到底有多難用得同學們可以自己 man chmod 看看吧

  • Octal Mode : 使用3個數字代表 User/Group/Others 的權限,數字的使用是將每組 rwx 看作一個二進位數,有英文字代表 1、負號代表 0 (數字3 代表 -wx / 011,數字5 代表 w-x / 101,以此類推),若要開啟 “bin” 的所有權限 (rwxrwxrwx),則指令為
$chmod 777 bin

點擊進入下一篇 Files in Linux – 2


[註1] 如果有裝 oh-my-zsh,ls -ll 有 zsh 預設的 alias :

$ll

[註2] 更詳細的 ls 檔案型別在這裡

[註3] 在製作 shell script 可能會用到 –reference=RFILE,就是以 RFILE 的 mode bits 來套用到 FILE 上,而非手動更改,有點像是第三種 mode (?)