《鳥哥 Linux 私房菜:基礎篇》Chapter 06 - Linux 的檔案與目錄管


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

6.1 目錄與路徑

6.1.1 相對路徑與絕對路徑

  • 絕對路徑:「一定由根目錄 / 寫起」
    • 絕對路徑正確度較好
    • 使用 shell scripts 務必使用絕對路徑
  • 相對路徑:「不是由 / 寫起」

6.1.2 目錄的相關操作

  • .:此層目錄
  • ..:上一層目錄
  • -:前一個工作目錄
  • ~:目前使用者身份所在的家目錄
  • ~account:account 這個使用者的家目錄

常見處理目錄指令:

  • cd(Change Directory):變換目錄
  • pwd(Print Working Directory):顯示目前的目錄
    • pwd [-P]
      • -P:顯示出確實的路徑,而非使用連結(link)路徑
  • mkdir(Make Directory):建立一個新的目錄
    • mkdir [-mp] 目錄名稱
      • mkdir -p test1/test2/test3/test4
      • mkdir -m 711 test2
  • rmdir(Remove Directory):刪除一個空的目錄
    • rmdir [-p] 目錄名稱
      • rmdir -p test1/test2/test3/test4
    • 被刪除的目錄裡面必定不能存在其他目錄或檔案

6.1.3 關於執行檔路徑的變數:$PATH

  • 不同身份使用者預設的 PATH 不同,預設能夠隨意執行的指令也不同
  • PATH 是可以修改的
  • 使用絕對路徑或相對路徑直接指定某個指令的檔名來執行,會比搜尋 PATH 來得正確
  • 指令應該要放置到正確的目錄下,執行才會比較方便
  • 本目錄(.)最後不要放到 PATH 當中

6.2 檔案與目錄管理

6.2.1 檔案與目錄的檢視:ls

  • ls [-aAdfFhilnrRSt]
    • 常用
      • -a:全部的檔案,連同隱藏黨(開頭為 . 的檔案)一起列出來
      • -d:僅列出目錄本身,而不是列出目錄內的檔案資料
      • -l:長資料串列出,包含檔案的屬性與權限等等資料
  • ls [--color={never,auto,always}]
    • --color=never:不要依據檔案特性給予顏色顯示
    • --color=auto:顯示顏色
    • --color=always:讓系統自行依據設定來判斷是否給予顏色
  • ls [--full-time]
    • --full-time:以完整時間模式(包含年、月、日、時、分)輸出
    • --time={atime,ctime}:輸出 access 時間或改變權限屬性時間(ctime)而非內容變更時間(modification time)

6.2.2 複製、刪除與移動:cp、rm、mv

  • cp:複製檔案或目錄
    • cp [-adfilprsu] 來源檔(source) 目標檔(destination)
      • 常用
        • -a:相當於 -dr --preserve=all 的意思
        • -i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行
        • -p:連同檔案的屬性(權限、用戶、時間)一起複製過去,而非使用預設屬性
        • -r:遞迴持續複製,用於目錄的複製行為
  • rm:移除檔案或目錄
    • rm [-fir] 檔案或目錄
      • -f:就是 force 的意思,忽略不存在的檔案,不會出現警告訊息
      • -i:互動模式,在刪除前會詢問使用者是否動作
      • -r:遞迴刪除《這是非常危險的選項!!!》
  • mv:移動檔案與目錄,或更名
    • mv [-fiu] source destination
      • -f:force 強制的意思,如果目標檔案已經存在,不會詢問而直接覆蓋
      • -i:若目標檔案(destination)已經存在時,就會詢問是否覆蓋
      • -u:若目標檔案已經存在,且 source 比較新,才會更新

6.2.3 取得路徑的檔案名稱與目錄名稱

  • basename:取得最後檔名
  • dirname:取得目錄名


6.3 檔案內容查閱

  • cat 由第一行開始顯示檔案內容
  • tac 從最後一行開始顯示(tac 是 cat 的倒著寫!)
  • nl 顯示的時候,順道輸出行號
  • more 一頁一頁的顯示檔案內容
  • less 與 more 類似,但比 more 更好的是他可以翻前頁
  • head 只看頭幾行
  • tail 只看尾巴幾行
  • od 以二進位的方式讀取檔案內容

6.3.1 直接檢視檔案內容

  • cat(concatenate):由第一行到最後一行連續顯示在螢幕
    • cat [-AbEnTv]
      • -A:相當於 -vET 的整合選項,可列出一些特殊自符而不是空白而已
      • -b:列出行號,僅針對非空白行做行號顯示,空白行不標行號
      • -E:將結尾的斷行字元 $ 顯示出來
      • -n:列印出行號,連同空白行也會有行號,與 -b 的選項不同
      • -T:將 [tab] 案件已 ^I 顯示出來
      • -v:列出一些看不出來的特殊字符
  • tac(與 cat 反向):由最後一行到第一行反向顯示於螢幕
  • nl(添加行號列印)
    • nl [-bnw] 檔案
      • -b:指定行號指定的方式
        • -b a:表示不論是否為空行,也同樣列出行號
        • -b t:如果有空行,空的那一行不要列出行號(預設值)
      • -n:列出行號表示的方法
        • -n ln:行號在螢幕的最左方顯示
        • -n rn:行號在自己欄位的最右方顯示,且不加 0
        • -n rz:行號在自己欄位的最右方顯示,且加 0
      • -w:行號欄位佔用的字元數

6.3.2 可翻頁檢視

  • more(一頁一頁翻動)
  • less(一頁一頁翻動):比 more 更有彈性,可以使用 [PageUp] [PageDown] 來前後翻看文件。

6.3.3 資料擷取

  • head(取出前面幾行)
    • head [-n number] 檔案
      • -n:後面接數字,代表顯示幾行
  • tail(取出後面幾行)
    • tail [-n number] 檔案
      • -n:後面接數字,代表顯示幾行

6.3.4 非純文字黨:od

  • od [-t TYPE] 檔案
    • -t:後面可以接各種「類型(TYPE)」的輸出
      • a:利用預設的字元來輸出
      • c:使用 ASCII 字元來輸出
      • d[size]:利用十進位(decimal)來輸出資料,每個整數佔用 size bytes
      • f[size]:利用浮點數(floating)來輸出資料,每個整數佔用 size bytes
      • o[size]:利用八進位(octal)來輸出資料,每個整數佔用 size bytes
      • x[size]:利用十六進位(hexadecimal)來輸出資料,每個整數佔用 size bytes

6.3.5 修改檔案時間或建置新檔:touch

  • modification time(mtime):當改檔案的「內容資料」變更時
  • status time(ctime):當該檔案的「狀態」改變時(權限或屬性)
  • access time(atime):當「該檔案的內容被取用」時

  • touch [-acdmt] 檔案

    • -a:僅修訂 access time
    • -c:僅修改檔案的時間,若該檔案不存在則不建立新檔案
    • -d:後面可以接欲修改日期,而不用使用目前日期,如 --date="日期或時間"
    • -m:僅修改 mtime
    • -t:後面可以接欲修訂的時間,而不用目前時間,格式為 [YYYYMMDDhhmm]

6.4 檔案與目錄的預設權限與隱藏權限

6.4.1 檔案預設權限:umask

umask 就是指定「目前使用者在建立檔案或目錄時候的權限預設值」,如下圖:

  • 0022:與一般權限有關的是後面三個數字
  • -S(Symbolic):符號類型方式顯示權限

在預設權限上,目錄與檔案不同:

  • 預設權限:
    • 檔案:-rw-rw-rw,亦即 666
    • 目錄:drwxrwxrw,亦即 777
  • umask 指的是「該預設值需要減掉的權限」
    • 檔案:-rw-r--r-- <-- (-rw-rw-rw) - (----w--w-)
    • 目錄:drwxr-xr-x <-- (drwxrwxrw) - (d---w--w-)

6.4.2 檔案隱藏權限

  • chattr(設定檔案隱藏屬性)
    • chattr [+-=][ASacdistu] 檔案或目錄
      • +:增加某一個特殊參數,其他原本存在參數則不動
      • -:移除某一個特殊參數,其他原本存在參數則不動
      • =:設定一定,且僅有後面接的參數
      • 常用參數:
        • a:當設定 a 之後,這個檔案將只能增加資料,而不能刪除也不能修改資料,只有 root 才能設定這屬性
        • i:讓檔案「不能被刪除、改名、設定連結、寫入或新增資料」,對安全性有相當大的助益,只有 root 才能設定這屬性
  • lsattr(顯示檔案隱藏屬性)
    • lsattr [-adR] 檔案或目錄
      • -a:將隱藏檔的屬性也秀出來
      • -d:如果接的是目錄,僅列出目錄本身的屬性而非目錄內的檔名
      • -R:連同子目錄的資料也一併列出來

6.4.3 檔案特殊權限:SUID, SGID, SBIT

  • Set UID
    • 限制與功能:
      • SUID 權限僅對二進位程式(binary program)有效,不能用在 shell script 上!
      • 執行者對於該程式需要具有 x 的可執行權限
      • 本權限僅在執行該程式的過程中有效(run-time)
      • 執行者將具有該程式擁有者(owner)的權限
    • 範例:
      • sunny 對於 /usr/bin/passwd 這個程式來說具有 x 的權限,表示 sunny 可以執行 passwd
      • passwd 的擁有者是 root 這個帳號
      • sunny 執行 passwd 的過程中,會「暫時」獲得 root 的權限
      • /etc/shadow 就可以被 sunny 所執行的 passwd 所修改
  • Set GID
    • 與 SUID 不同的是,SGID 可以針對檔案或目錄來設定,又依照檔案跟目錄有所不同
    • 檔案:
      • SGID 對二進位程式有用
      • 程式執行者對於該程式來說,須具備 x 的權限
      • 執行者在執行的過程中將會獲得該程式群組的支援
    • 目錄:
      • 使用者若對於此目錄具有 r 與 x 的權限時,該使用者能夠進入此目錄
      • 使用者在此目錄下的有效群組將會變成該目錄的群組
      • 用途:若使用者在此目錄下具有 w 的權限(可以新建檔案),則使用者所建立的新檔案,該新檔案的群組與此目錄的群組相同
  • Stick Bit
    • SBIT 只針對目錄有效,對於檔案沒有效果,對於目錄的作用:
      • 當使用者對於此目錄具有 w, x 權限,亦即具有寫入的權限時
      • 當使用者在該目錄下建立檔案或目錄時,僅有自己與 root 才有權力刪除該檔案
    • 範例:
      • 以 root 登入系統,進入 /tmp 中
      • touch test,並且更改權限為 777
      • 以一般使用者登入,進入 /tmp
      • 嘗試刪除 test 檔案
      • 結論:無法被刪除
  • SUID/SGID/SBIT 權限設定
    • SUID 4
    • SGID 2
    • SBIT 1

  • chmod 4755 test; ls -l test 加入具有 SUID 的權限
  • chmod 1755 test; ls -l test 加入 SBIT 的功能
  • chmod 7666 test; ls -l test 具有空的 SUID/SGID 權限
    • -S, T(大寫):因為是下達 7666,代表 user, group, others 都沒有 x 可執行,所以 -S, T 代表「空的」

6.4.4 觀察檔案類型:file


6.5 指令與檔案的搜尋

  • which
  • whereis
  • locate / updatedb
  • find

資料來源

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

#鳥哥的 Linux 私房菜 #linux







你可能感興趣的文章

使用 ROS 與 Gazebo 模擬一個自動避障機器人

使用 ROS 與 Gazebo 模擬一個自動避障機器人

回頭來看一些比較基本的東西:JavaScript 核心與物件導向

回頭來看一些比較基本的東西:JavaScript 核心與物件導向

Angular 專案使用 Font Awesome Free Icon

Angular 專案使用 Font Awesome Free Icon






留言討論