目錄與檔案


操作範例

[把目錄想成箱子]
  1. (假設你剛剛 login) 看看目前工作目錄 (current working directory) 是那裡: pwd 這裡是你的家 (home directory)
  2. 看目前工作目錄下有那些檔案/目錄: ls .
  3. 到上一層目錄下: cd .. 之後用 pwdls . 檢查一下.
  4. 遊走到系統根目錄去 (把 current working directory 切換到 root directory 去): cd / 之後用 pwdls . 檢查一下.
  5. 走到目前工作目錄下的 usr 子目錄下: cd ./usr 之後用 pwdls . 檢查一下.
  6. 走到目前工作目錄下的 man 子目錄下的 man1 目錄下: cd ./man/man1 之後用 pwdls . 檢查一下.
  7. 跳回自己的家: cd ~ 然後用 ls -a 再看一次自己的家. 在 unix 底下, 如果檔案 (或目錄) 名稱以 . 開頭, 則通常不會顯示出來. 如果下 ls 時, 給 -a 選項, 則所有隱藏檔都會顯示出來, 包含 "目前目錄" 與 "上一層目錄". 以 . 開頭的檔大部分是應用軟體的設定檔 (例如 .lynxrc 與 .bashrc). 平時隱藏起來的目的不是要防止誰偷看, 而是為了減少顯示時的資料量 (像 . 與 .. 一直存在, 但你通常不會對它們有興趣, 不如不要顯示.)
  8. 作業: 自己學會如何用 mkdir 與 rmdir 建立/刪除子目錄.
  9. 用簡單的文字檔案編輯器 nano 在目前工作目錄下建立一個叫做 abc 的檔案: nano ./abc
  10. 把目前工作目錄的 abc 這個檔案的內容印出來: cat ./abc
  11. 把 abc 這個檔案複製一份放到 xyz 去: cp ./abc ./xyz 之後用 ls . 檢查一下
  12. 把 abc 這個檔案刪除掉: rm ./abc 之後用 ls . 檢查一下
  13. 把 xyz 這個檔案改名叫做 pqr: mv ./xyz ./pqr 這個命令除了更改檔案名稱外, 還可以用來將檔案甚至整個目錄搬移至其他地方.
  14. 注意 cp (把 ... 拷貝到 ... 去) 與 mv (把 ... 搬到 ... 去) 各別都需要兩個 (或更多個) 參數. 命令名稱與參數之間一定要有空白, 參數與參數之間也一定要有空白!
  15. 檢查系統允許我使用多少空間, 我又真的用了多少空間: quota -v
  16. 把系統下的一個檔案拷貝回家: cp /usr/doc/fileutils-4.0/COPYING ~
  17. 用文件閱覽器 less 檢視文件內容 (不修改): less -ri ~/COPYING
  18. 檢查一下使用空間: quota -v 最後刪除該檔: rm ~/COPYING
  19. 建立捷徑 (symbolic link), 讓我們可以從家裡直接看到先前所說的檔: ln -s /usr/doc/fileutils-4.0/COPYING ~ 再從家裡進去看看它的內容: less -ri ~/COPYING 並檢查一下使用空間: quota -v 注意到現在比起先前用拷貝的方式使用更少的空間, 但一樣可以方便使用該檔. 想刪除捷徑的話可以用: rm ~/COPYING
  20. 下 ls 命令時, 加上 -l 選項可以顯示一個東東究竟是檔案, 是目錄, 還是捷徑. 每一列最左邊的字元如果是 - 表示檔案; d 表示目錄; l 表示捷徑. 這個選項也可以讓你看到檔案所佔的空間大小, 及修改時間. 你可以用 ls -la ~ 再看一次.
  21. 每次我下 less 命令, 究竟是那個程式被叫起來執行? 用 which less 來看. 再試試看 which exit
  22. 這是那一種檔案? 如果需要知道比 ls -l 更清楚的分類, 可以用 file ~/pqr 再看看 file ~/COPYING /usr/doc/fileutils-4.0/COPYING ~ /bin/cp 它的輸出是四列還是五列? file 命令偶爾會看不出檔案種類, 但大部分時候會成功.
  23. 遞迴地 列出一個目錄底下所有的檔案, 目錄, 捷徑, 及子目錄, 孫目錄... 底下的所有東西: find /etc/rc.d 也可以指定只要看目錄: find /etc/rc.d -type d 或只要看檔案 (用 -type f) 或只要看捷徑 (用 -type l).
  24. 看一下各個子目錄, 孫目錄, ... 底下的檔案分別佔用了多少空間: du /etc/rc.d 當你使用的 quota 超過系統分配量時, 可以用這個命令找出最肥的目錄.
  25. Q: 用 man 1 cp 查看手冊, 試看看要用那一個 option 才可以將整個目錄底下的所有目錄結構 (子目錄, 孫目錄...) 和檔案完全拷貝到另外一個地方. (man 的控制方式和 less 一樣) 那麼 symbolic link 被拷貝後, 是成為一個檔案呢, 還是仍舊只是一個 symbolic link? 向同學解釋你的實驗步驟. 有沒有 option 可以產生與你觀察到的結果相反的效果?
  26. Q: 試試看: mv 可否把整個目錄底下的所有目錄結構 (子目錄, 孫目錄...) 和檔案完全搬到另外一個地方. 向同學解釋你的實驗步驟. 用 man 1 mv 查看手冊, 看看如何把好幾個來自不同目錄的檔案, 一口氣同時搬到另外一個目錄底下.
  27. Q: 如果一個 symbolic link 所指到的 (真正佔磁碟空間的原來) 檔案被你刪除掉了, 你再試著用 less 或 nano 去看那個 symbolic link, 會怎麼樣?

名詞解釋

  1. directory 目錄: 把目錄想成箱子. 就像大箱子裡面可以放小箱子一樣 (目的是為了方便整理, 將相關的東西放在一起), 目錄底下可以有子目錄. 以下是一些表達特殊目錄的字元:
    • . 目前所在的目錄 (current working directory) 因為系統內箱子太多了, 因此系統提供一個觀念, 叫做 "目前工作目錄", 讓你的目光隨時有一個焦點, 不至於眼花撩亂. 可以用 pwd 查詢, 用 cd 改變目前工作目錄; 用 ls 查看目前所在的這個箱子內有什麼東西.
    • .. 上一層目錄 (parent directory)
    • ~ 使用者自己的家 (home directory) 這個箱子屬於你個人私有, 一進入系統時你所看到的 (current working directory) 就是這個箱子.
    • ~ckhung 使用者 ckhung 的家
    • / 系統根目錄 (root directory) 這是包含所有箱子的最大箱子.
  2. path 路徑: 諸如 /usr/man/man1 ~/.login ~ckhung/public_html 等叫做 absolute path 絕對路徑, 不論目前工作目錄在那裡都代表系統內固定的目錄或檔案. 而以 ./../ 開頭的路徑叫做 relative path 相對路徑, 如 usr man/man1 ../ckhung 等, 代表的都是 "從目前工作目錄開始走起 ...". 以 ./ 開頭的相對路徑, 前面的 ./ 通常都省略. 也就是說, 一般命令中提及目錄/檔案名稱時, 如果看不出是絕對路徑, 就以相對於目前目錄來解釋.
  3. editor 編輯器: 用來修改文字檔案的工具程式. 常用的編輯器有:
    1. nano: 使用簡單, 為 e-mail 閱讀程式 pine 的內建編輯器.
    2. jed: 比 nano 強, 比 vim 跟 emacs 簡單的編輯器
    3. vivim : 有三種模式, 初學者較不易習慣; 但功能強大, 許多交談式 UNIX 命令的按鍵控制都模倣 vi, 而且 vi 提供 regular expression 功能, 為許多程式設計師 (包含作者) 的最愛.
    4. emacs: 功能超級強大, 讓使用者可以不離開編輯環境而完成許多作業系統的工作. 高手中的高手往往選擇 emacs. 有兩個簡化版的 emacs: jove 與 jed.
    以上編輯器都是跨平臺的程式, 除了各版 UNIX 上可以找到外, 也有 DOS 版, OS/2 版等等.
  4. symbolic link: 類似 MS Windows 下的捷徑, 讓檔案只佔據一份空間, 但卻讓使用者可以從好幾個不同的地方 (目錄) 或用好幾個不同的名稱, 看到那個檔案.

作業

  1. 學會使用一種文字檔案編輯器, 例如 nano
  2. 學會使用 less
  3. Linux 把軟碟機當成硬碟機一樣對待, 優點是系統可以使用 cache 加快存取速率, 且使用者與應用程式不需要分辨不同的硬體 (管理者還是需要知道); 缺點是如果我們自己既是使用者又是管理者, 則要換磁片就比較麻煩. 請參考手冊學會使用 mdir 與 mcopy 解決以上問題.