目錄與檔案
操作範例
- (假設你剛剛 login) 看看目前工作目錄 (current working directory)
是那裡:
pwd
這裡是你的家 (home directory)
- 看目前工作目錄下有那些檔案/目錄:
ls .
- 到上一層目錄下:
cd ..
之後用 pwd
與
ls .
檢查一下.
- 遊走到系統根目錄去 (把 current working directory 切換到 root
directory 去):
cd /
之後用 pwd
與
ls .
檢查一下.
- 走到目前工作目錄下的 usr 子目錄下:
cd ./usr
之後用
pwd
與 ls .
檢查一下.
- 走到目前工作目錄下的 man 子目錄下的 man1 目錄下:
cd
./man/man1
之後用 pwd
與 ls .
檢查一下.
- 跳回自己的家:
cd ~
然後用 ls -a
再看一次自己的家. 在 unix 底下, 如果檔案 (或目錄) 名稱以 . 開頭,
則通常不會顯示出來. 如果下 ls 時, 給 -a 選項,
則所有隱藏檔都會顯示出來, 包含 "目前目錄" 與 "上一層目錄". 以 .
開頭的檔大部分是應用軟體的設定檔 (例如 .lynxrc 與 .bashrc).
平時隱藏起來的目的不是要防止誰偷看, 而是為了減少顯示時的資料量 (像
. 與 .. 一直存在, 但你通常不會對它們有興趣, 不如不要顯示.)
- 作業: 自己學會如何用 mkdir 與 rmdir 建立/刪除子目錄.
- 用簡單的文字檔案編輯器 nano
在目前工作目錄下建立一個叫做 abc 的檔案:
nano
./abc
- 把目前工作目錄的 abc 這個檔案的內容印出來:
cat
./abc
- 把 abc 這個檔案複製一份放到 xyz 去:
cp ./abc ./xyz
之後用 ls .
檢查一下
- 把 abc 這個檔案刪除掉:
rm ./abc
之後用 ls
.
檢查一下
- 把 xyz 這個檔案改名叫做 pqr:
mv ./xyz ./pqr
這個命令除了更改檔案名稱外,
還可以用來將檔案甚至整個目錄搬移至其他地方.
- 注意 cp (把 ... 拷貝到 ... 去) 與 mv (把 ... 搬到 ... 去)
各別都需要兩個 (或更多個) 參數. 命令名稱與參數之間一定要有空白,
參數與參數之間也一定要有空白!
- 檢查系統允許我使用多少空間, 我又真的用了多少空間:
quota
-v
- 把系統下的一個檔案拷貝回家:
cp
/usr/doc/fileutils-4.0/COPYING ~
- 用文件閱覽器 less
檢視文件內容 (不修改):
less -ri ~/COPYING
- 檢查一下使用空間:
quota -v
最後刪除該檔: rm
~/COPYING
- 建立捷徑 (symbolic link), 讓我們可以從家裡直接看到先前所說的檔:
ln -s /usr/doc/fileutils-4.0/COPYING ~
再從家裡進去看看它的內容: less -ri ~/COPYING
並檢查一下使用空間: quota -v
注意到現在比起先前用拷貝的方式使用更少的空間,
但一樣可以方便使用該檔. 想刪除捷徑的話可以用: rm
~/COPYING
- 下 ls 命令時, 加上 -l 選項可以顯示一個東東究竟是檔案, 是目錄,
還是捷徑. 每一列最左邊的字元如果是 - 表示檔案; d 表示目錄; l
表示捷徑. 這個選項也可以讓你看到檔案所佔的空間大小, 及修改時間.
你可以用
ls -la ~
再看一次.
- 每次我下 less 命令, 究竟是那個程式被叫起來執行? 用
which
less
來看. 再試試看 which exit
- 這是那一種檔案? 如果需要知道比 ls -l 更清楚的分類, 可以用
file ~/pqr
再看看 file ~/COPYING
/usr/doc/fileutils-4.0/COPYING ~ /bin/cp
它的輸出是四列還是五列? file 命令偶爾會看不出檔案種類,
但大部分時候會成功.
- 遞迴地 列出一個目錄底下所有的檔案, 目錄, 捷徑,
及子目錄, 孫目錄... 底下的所有東西:
find /etc/rc.d
也可以指定只要看目錄: find /etc/rc.d -type d
或只要看檔案 (用 -type f) 或只要看捷徑 (用 -type l).
- 看一下各個子目錄, 孫目錄, ... 底下的檔案分別佔用了多少空間:
du /etc/rc.d
當你使用的 quota 超過系統分配量時,
可以用這個命令找出最肥的目錄.
- Q: 用 man 1 cp 查看手冊, 試看看要用那一個 option
才可以將整個目錄底下的所有目錄結構 (子目錄, 孫目錄...)
和檔案完全拷貝到另外一個地方. (man 的控制方式和
less 一樣) 那麼 symbolic link
被拷貝後, 是成為一個檔案呢, 還是仍舊只是一個 symbolic link?
向同學解釋你的實驗步驟. 有沒有 option
可以產生與你觀察到的結果相反的效果?
- Q: 試試看: mv 可否把整個目錄底下的所有目錄結構 (子目錄,
孫目錄...) 和檔案完全搬到另外一個地方.
向同學解釋你的實驗步驟. 用 man 1 mv 查看手冊,
看看如何把好幾個來自不同目錄的檔案,
一口氣同時搬到另外一個目錄底下.
- Q: 如果一個 symbolic link 所指到的 (真正佔磁碟空間的原來)
檔案被你刪除掉了, 你再試著用 less 或 nano 去看那個 symbolic link,
會怎麼樣?
名詞解釋
-
directory 目錄: 把目錄想成箱子. 就像大箱子裡面可以放小箱子一樣
(目的是為了方便整理, 將相關的東西放在一起), 目錄底下可以有子目錄.
以下是一些表達特殊目錄的字元:
- . 目前所在的目錄 (current working directory)
因為系統內箱子太多了, 因此系統提供一個觀念, 叫做
"目前工作目錄", 讓你的目光隨時有一個焦點, 不至於眼花撩亂.
可以用 pwd 查詢, 用 cd 改變目前工作目錄; 用 ls
查看目前所在的這個箱子內有什麼東西.
- .. 上一層目錄 (parent directory)
- ~ 使用者自己的家 (home directory)
這個箱子屬於你個人私有, 一進入系統時你所看到的 (current working
directory) 就是這個箱子.
- ~ckhung 使用者 ckhung 的家
- / 系統根目錄 (root directory)
這是包含所有箱子的最大箱子.
- path 路徑: 諸如 /usr/man/man1 ~/.login ~ckhung/public_html
等叫做 absolute path 絕對路徑,
不論目前工作目錄在那裡都代表系統內固定的目錄或檔案. 而以
./
和 ../
開頭的路徑叫做 relative
path 相對路徑, 如 usr man/man1 ../ckhung 等, 代表的都是
"從目前工作目錄開始走起 ...". 以 ./
開頭的相對路徑,
前面的 ./ 通常都省略. 也就是說, 一般命令中提及目錄/檔案名稱時,
如果看不出是絕對路徑, 就以相對於目前目錄來解釋.
-
editor 編輯器: 用來修改文字檔案的工具程式. 常用的編輯器有:
- nano: 使用簡單, 為
e-mail 閱讀程式 pine 的內建編輯器.
- jed: 比 nano 強, 比 vim 跟 emacs 簡單的編輯器
-
vi
或 vim :
有三種模式, 初學者較不易習慣; 但功能強大, 許多交談式 UNIX
命令的按鍵控制都模倣 vi, 而且 vi 提供 regular expression 功能,
為許多程式設計師 (包含作者) 的最愛.
-
emacs:
功能超級強大,
讓使用者可以不離開編輯環境而完成許多作業系統的工作.
高手中的高手往往選擇 emacs. 有兩個簡化版的 emacs: jove 與
jed.
以上編輯器都是跨平臺的程式, 除了各版 UNIX 上可以找到外, 也有
DOS 版, OS/2 版等等.
- symbolic link: 類似 MS Windows 下的捷徑, 讓檔案只佔據一份空間,
但卻讓使用者可以從好幾個不同的地方 (目錄) 或用好幾個不同的名稱,
看到那個檔案.
作業
- 學會使用一種文字檔案編輯器, 例如
nano
- 學會使用 less
- Linux 把軟碟機當成硬碟機一樣對待, 優點是系統可以使用 cache
加快存取速率, 且使用者與應用程式不需要分辨不同的硬體
(管理者還是需要知道); 缺點是如果我們自己既是使用者又是管理者,
則要換磁片就比較麻煩. 請參考手冊學會使用 mdir 與 mcopy
解決以上問題.