《鳥哥 Linux 私房菜:基礎篇》Chapter 05 - Linux 的檔案權限與目錄配置


  • 第一篇:Linux 的規劃與安裝
  • 第二篇:Linux 檔案、目錄與磁碟格式
    • Chapter 05 Linux 的檔案權限與目錄配置
    • Chapter 06 Linux 的檔案與目錄管理
    • Chapter 07 Linux 磁碟與檔案系統管理
    • Chapter 08 Linux 檔案與檔案系統的壓縮、打包與備份
  • 第三篇:學習 Shell 與 Shell Scripts
  • 第四篇:Linux 使用者管理
  • 第五篇:Linux 系統管理員

5.1 使用者與群組

  1. 檔案擁有者
  2. 群組概念
    • 使用者:我們家有四個人,媽、爸、我、妹,我跟妹妹各有自己的房間,妹妹可以進我的房間,但不能翻我的抽屜,因為抽屜可能有情書(?)之類的私人物品。
    • 群組:大家共同擁有客廳,所以客廳的玩意兒大家都可以用,我們在同一個群組。
  3. 其他人概念:今天有個人叫小花,他是花家的人,但我們認識小花,請他進來家裡,他是藉由認識我們家的人進來家裡,他屬於其他人。
  4. 萬能的神:root

Linux 使用者身份與群組紀錄的檔案:預設情況,帳號與使用者,還有 root 相關資訊,都是記錄在 /etc/passwd 檔案內。個人密碼則是記在 etc/shadow 檔案下。此外群組名稱記錄在 /etc/group 內。


5.2 Linux 檔案權限概念

當你看到 Permission deny 時,別擔心,肯定是權限設定錯誤。

5.2.1 Linux 檔案屬性

輸入指令 $ls -al,你會看到如下

分別代表的意思:

  1. 檔案類型與權限(permission):總共有十個字元,分別代表的意思如下
    • 第一個字元代表「目錄、檔案或連結檔」:
      • [ d ] 目錄
      • [ - ] 檔案
      • [ l ] 連結檔
      • [ b ] 裝置檔案中可供儲存的週邊設備
      • [ c ] 裝置檔中的序列埠設備
    • 接下來字元,以三個為一組,總共三組,均為「rwx」的組合。
      • 三組分別為:
        • 檔案擁有者可具備的權限
        • 加入此群組之帳號的權限
        • 非本人且沒有加入本群組之其他帳號的權限
      • rwx 含義:
        • [ r ] 可讀 read
        • [ w ] 可寫 write
        • [ x ] 可執行 execute
      • 如果沒有權限,會出現減號 [ - ]
  2. 連結數:多少檔名連結到此節點(i-node)
  3. 檔案擁有者:這個檔案或目錄的擁有者帳號
  4. 檔案所屬群組
  5. 檔案容量:預設為 bytes
  6. 檔案最後被修改時間
  7. 檔名:如果檔名之前多一個「 . 」,代表這個檔案為隱藏檔

Linux 檔案權限的重要性:

  • 系統保護的功能
  • 團隊開發軟體或資料共用的功能
  • 未將權限設定妥當的危害

5.2.2 如何改變檔案屬性與權限

  • chgrp:改變檔案所屬群組 change group
  • chown:改變檔案擁有者 change owner
  • chmod:改變檔案的權限,SUID, SGID, SBIT 等等屬性
    • 數字類型:基本權限有九個,分別是 owner/group/others,三種身份各有自己的 read/write/execute 權限。
      • 範例:「-rwxrwxrwx」
      • 分別代表分數 r: 4, w: 2, x: 1
      • 每種身份的分數 owner: 4+2+1 = 7 ; group: 4+2+1 = 7 ; others: 0+0+0 = 0
      • 所以我們設定的權限就是 770
      • chmod 770 [your file or folder]
    • 符號類型:藉由 u, g, o 來代表三種身份(user, group, others)的權限,此外 a 代表 all,即全部的身份。
      • 範例:若我們要設定權限為「-rwxr-xr-x」
      • chmod u=rwx,go=rx [you file or folder]
      • 常用 chmod a+w [file name or folder]chmod a-w [file name or folder] 一次改全部

5.2.3 目錄與檔案之權限意義

  • 權限對檔案的重要性:檔案是實際含有資料的地方,權限對於檔案的意義如下
    • r (read):可讀取此檔案的實際內容
    • w (write):可編輯、新增、修改該檔案的內容(但不包含刪除該檔案)
    • x (execute):該檔案具有可被系統執行的權限
  • 權限對目錄的重要性:目錄紀錄檔名清單
    • r (read contents in directory):讀取目錄結構清單的權限
    • w (modify contents of directory):異動該目錄結構清單的權限
      • 建立新的檔案目錄
      • 刪除已存在的檔案與目錄
      • 將已存在的檔案或目錄進行更名
      • 搬移該目錄內的檔案、目錄位置
    • x (access directory):使用者能否進入該目錄成為工作目錄,簡單來說能否 cd 進目錄

5.2.4 Linux 檔案種類與副檔名

  • 檔案種類
    • 正規檔案(regular file)
      • 純文字檔(ASCII)
      • 二進位檔(Binary)
      • 資料格式檔(Data)
    • 目錄(directory)
    • 連結檔(link)
    • 設備與裝置檔(device)
      • 區塊(block)設備檔
      • 字元(character)設備檔
    • 資料接口檔(sockets)
    • 資料傳送檔(FIFO, pipe)
  • Linux 檔案副檔名
    • .sh:腳本或批次檔(scripts)
    • Z, .tar, .tar.gz, .zip, .tgz:經過打包的壓縮檔
    • .html, .php:網頁相關檔案
  • Linux 檔案長度限制:單一檔案或目錄的最大容許檔名為 255 bytes,以一個 ASCII 英文佔用一個 bytes 來說,則大約可達 255 個字元長度。若是以每個中文字佔用 2 bytes 來說,最大檔名大約 128 個中文字
  • Linux 檔案名稱的限制:避免特殊字元

5.3 Linux 目錄配置

5.3.1 Linux 目錄配置的依據:FHS

Filesystem Heirarchy Standard(FHS):讓使用者可以了解到已安裝軟體通常放置於哪個目錄下。

  • 可分享的:可以分享給其他系統掛載使用的目錄
  • 不可分享的:自己機器上面運作的裝置檔案或者是與程序有關的 socket 檔案
  • 不變的:有些資料不常變動,隨著 distribution 而不變動
  • 可變動的:經常改變的資料

FHS 針對目錄樹架構,僅定義出三層目錄底下應該放置什麼資料:

  1. /(root,根目錄):與開機系統有關
  2. /usr(unix software resource):與軟體安裝/執行有關
  3. /var(variable):與系統運作過程有關

1. 根目錄(/)意義與內容

根目錄是整個系統最重要的目錄,不但所有目錄都是由根目錄衍伸出來的,同時根目錄也與開機/還原/系統修復等動作有關。

FHS 標準建議:根目錄所在分割槽應該越小越好,且應用程式所安裝的軟體最好不要與根目錄放在同一個分割槽內,保持根目錄越小越好。如此不但效能較佳,根目錄所在的檔案系統也較不容易發生問題。

  1. FHS 要求必須要存在的目錄
    • /bin:單人維護模式下還能夠被操作的指令
    • /boot:開機會使用到的檔案(Linux kernel 常用檔名為:vmlinuz)
    • /dev:裝置與週邊設備
    • /etc:主要設定檔案。FHS 建議不要放置 binary。
    • /lib:開機時會用到的函示庫,以及 /bin 或 /sbin 底下會呼叫的函示庫
    • /media:可移除裝置
    • /mnt:暫時掛載某些額外裝置,遠古時期用途 /media 相同
    • /opt:第三方協力軟體放置的目錄
    • /run:系統開機後所產生的各項數據放置
    • /sbin:開機、修復、還原系統所需要的指令
    • /srv:service 縮寫,網路服務啟動之後,服務所需要取用的資料目錄
    • /tmp:暫存區
    • /usr:第二層 FHS 設定,後續介紹
    • /var:第二層 FHS 設定,主要為放置變動性資料,後續介紹
  2. FHS 建議可以存在的目錄
    • /home:系統預設的使用者 home directory
    • /lib < qual >:存放與 /lib 不同格式的二進位函式庫
    • /root:root 的家目錄
  3. 其他
    • /lost+found:檔案系統發生錯誤時,遺失片段放置處
    • /proc:虛擬檔案系統
    • /sys:與 /proc 相似

2. /usr 的意義與內容

依據 FHS 定義,/usr 裡面放置的資料屬於可訪想與不可變動的(shareable, static)。

  1. FHS 要求必須要存在的目錄
    • /usr/bin/:一般用戶能夠使用的指令
    • /usr/lib/:與 /lib 功能相同
    • /usr/local/:系統管理員安裝自己下載的軟體,建議安裝到此目錄
    • /usr/sbin/:非系統正常運作所需要的指令
    • /usr/share/:主要放置唯讀架構的資料檔案,也包括共享文件
  2. FHS 建議可以存在的目錄
    • /usr/games/:遊戲相關資料
    • /usr/include/:c/c++ 程式語言的 header 與 include 放置處
    • /usr/libexec/:不被一般使用者慣用的執行黨或腳本
    • /usr/lib < qual >/:與 /lib < qual > 相同,/lib < qual > 連結到此目錄中
    • /usr/src/:一般原始碼建議放置處

3. /var 的意義與內容

如果 /usr 是安裝時會佔用較大硬碟容量的目錄,/var 就是系統運作後才會漸漸佔用硬碟容量的目錄。

  1. FHS 要求必須要存在的目錄
    • /var/cache/:應用程式的暫存檔
    • /var/lib/:程式執行過程中,需要使用到的資料檔案放置處
    • /var/lock/:某些裝置或檔案一次只能被一個應用程式所使用,因此會需要將該裝置上鎖的功能
    • /var/log/:重要到不行!!!登錄檔放置的目錄
    • /var/mail/:個人電子郵件信箱
    • /var/run/:某些程式啟動後 PID 放置處
    • /var/spool/:佇列資料放置處

5.3.2 目錄樹

  • 目錄樹的起點為根目錄(/, root)
  • 每一個目錄不只能使用本地端 partition 的檔案系統,也可以使用網路上的 filesystem
  • 每一個檔案在此目錄樹中的檔名都是獨一無二的

5.3.3 絕對路徑與相對路徑

  • 絕對路徑:由根目錄開始寫起的檔名或目錄名稱
  • 相對路徑:相對於目前路徑的檔名寫法

資料來源

鳥哥的 Linux 私房菜: http://linux.vbird.org/linux_basic/

#鳥哥的 Linux 私房菜 #linux







Related Posts

程式導師計畫 4th / 前四週學習心得

程式導師計畫 4th / 前四週學習心得

[ JSP ]   EL 和 JSTL

[ JSP ] EL 和 JSTL

[筆記] 串接 HTTP API 實戰

[筆記] 串接 HTTP API 實戰




Sponsored



Comments