Linux 目錄結構及檔案基本操作

2puT發表於2016-07-26
Linux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
Linux 目錄結構及檔案基本
操作
實驗介紹
1、Linux 的檔案組織目錄結構。 2、相對路徑和絕對路徑。 3、對文
件的移動、複製、重新命名、編輯等操作。
一、Linux 目錄結構
在講 Linux 目錄結構之前,你首先要清楚一點東西,那就是 Linux 的
目錄與 Windows 的目錄的區別,或許對於一般操作上的感受來說沒有
多大不同,但從它們的實現機制來說是完全不同的。
一種不同是體現在目錄與儲存介質(磁碟,記憶體,DVD 等)的關係
上,以往的 Windows 一直是以儲存介質為主的,主要以碟符(C
盤,D 盤...)及分割槽的來實現檔案管理,然後之下才是目錄,目錄就
顯得不是那麼重要,除系統檔案之外的使用者檔案放在任何地方任何目
錄也是沒有多大關係。所以通常 Windows 在使用一段時間後,磁碟上
面的檔案目錄會顯得雜亂無章(少數善於整理的使用者除外吧)。然而
UNIX/Linux 恰好相反,UNIX 是以目錄為主的,Linux 也繼承了這一
優良特性。 Linux 是以樹形目錄結構的形式來構建整個系統的,可以
理解為一個使用者可作業系統的骨架。雖然本質上無論是目錄結構還是
作業系統核心都是儲存在磁碟上的,但從邏輯上來說 Linux 的磁碟是
“掛在”(掛載在)目錄上的,每一個目錄不僅能使用本地磁碟分割槽的文
件系統,也可以使用網路上的檔案系統。舉例來說,可以利用網路文
件系統(Network File System,NFS)伺服器載入某特定目錄等。
1.FHS 標準
Linux 的目錄結構說複雜很複雜,說簡單也很簡單。複雜在於,因為系
統的正常執行是以目錄結構為基礎的,對於初學者來說裡面大部分目
錄都不知道其作用,重要與否,特別對於哪些曾近的重度 Windows 用
戶,他們會糾結很長時間,關於我安裝的軟體在哪裡這類問題。說它
簡單是因為,它其中大部分目錄結構是規定好了(FHS 標準),是死
的,當你掌握後,你在裡面的一切操作都會變得井然有序。
1 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
FHS(英文:Filesystem Hierarchy Standard 中文:檔案系統
層次結構標準),多數 Linux 版本採用這種檔案組織形
式,FHS 定義了系統中每個區域的用途、所需要的最小構成的
檔案和目錄同時還給出了例外處理與矛盾處理。
FHS 定義了兩層規範,第一層是, / 下面的各個目錄應該要放什麼文
件資料,例如 /etc 應該要放置設定檔案,/bin 與 /sbin 則應該要放置
可執行檔案等等。
第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如
/var/log 放置系統登入檔案、/usr/share 放置共享資料等等。
FHS_2.3 標準文件 (http://refspecs.linuxfoundation.org/FHS_2.3
/fhs-2.3.pdf)
如果你覺得看這個不明白,那麼你可以試試最真實最直觀的方式,執
行如下命令:
$ tree /
如果提示"command not found",就先安裝:
2 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
# 因為我們的環境的原因,每次新啟動實驗會清除系統恢復初始
狀態,所以需要手動更新軟體包索引,以便我們安裝時能找到相
應軟體包的源
sudo apt- get update
sudo apt- get install tree
關於上面提到的 FHS,這裡還有個很重要的內容你一定要明白,FHS
是根據以往無數 Linux 使用者和開發者的經驗總結出來的,並且會維持
更新,FHS 依據檔案系統使用的頻繁與否以及是否允許使用者隨意改動
(注意,不是不能,學習過程中,不要怕這些),將目錄定義為四種
互動作用的形態,如下表所示:
2.目錄路徑
路徑
有人可能不明白這路徑是指什麼,有什麼用。顧名思義,路徑就是你
要去哪兒的路線嘛。如果你想進入某個具體的目錄或者想獲得某個目
錄的檔案(目錄本身也是檔案)那就得用路徑來找到了。
使用 cd 命令可以切換目錄,在 Linux 裡面使用 . 表示當前目
錄, .. 表示上一級目錄(**注意,還記得我們上一節介紹過的,以
. 開頭的檔案都是隱藏檔案,所以這兩個目錄必然也是隱藏的,你可
以使用 ls -a 命令檢視隱藏檔案), - 表示上一次所在目錄, ~ 通
常表示當前使用者的"home"目錄。使用 pwd 命令可以獲取當前所在路
徑(絕對路徑)。
進入上一級目錄:
$ cd ..
進入你的“home”目錄:
$ cd ~
# 或者 cd /home/<你的使用者名稱>
使用 pwd 獲取當前路徑:
3 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
$ pwd
絕對路徑
關於絕對路徑,簡單地說就是以根"/"目錄為起點的完整路徑,以你所
要到的目錄為終點,表現形式如: /usr/local/bin ,表示根目錄下
的 usr 目錄中的 local 目錄中的 bin 目錄。
相對路徑
相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目
錄 . 為起點,以你所要到的目錄為終點,表現形式如:
usr/local/bin (這裡假設你當前目錄為根目錄)。你可能注意
到,我們表示相對路徑實際並沒有加上表示當前目錄的那個 . ,而是
直接以目錄名開頭,因為這個 usr 目錄為 / 目錄下的子目錄,是可
以省略這個 . 的(以後會講到一個類似不能省略的情況);如果是當
前目錄的上一級目錄,則需要使用 .. ,比如你當前目錄為“home”目
錄,根目錄就應該表示為 ../../ ,表示上一級目錄("home"目錄)
的上一級目錄("/"目錄)。
下面我們以你的"home"目錄為起點,分別以絕對路徑和相對路徑的方
式進入 /usr/local/bin 目錄:
# 絕對路徑
$ cd /usr/ local /bin
# 相對路徑
$ cd ../../usr/ local /bin
進入一個目錄,可以使用絕對路徑也可以使用相對路徑,那我們應該
在什麼時候選擇正確的方式進入某個目錄呢。就是憑直覺嘛,你覺得
怎樣方便就使用哪一個,而不用特意只使用某一種。比如假設我當前
在 /usr/local/bin 目錄,我想進入上一級的 local 目錄你說是使用
cd .. 方便還是 cd /usr/local 方便。而如果要進入的是 usr 目
錄,那麼 cd /usr ,就比 cd ../.. 方便一點了。
4 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
提示:在進行目錄切換的過程中請多使用 Tab 鍵自動補全,可避免輸
入錯誤,連續按兩次 Tab 可以顯示全部候選結果
二、Linux 檔案的基本操作
1.新建
新建空白檔案
使用 touch 命令建立空白檔案,關於 touch 命令,其主要是來更改
已有檔案的時間戳的(比如,最近訪問時間,最近修改時間),但其
在不加任何引數的情況下,只指定一個檔名,則可以建立一個為指
定檔名的空白檔案(不會覆蓋已有同名檔案),當然你也可以同時
指定該檔案的時間戳,更多關於 touch 命令的用法,會在下一講檔案
搜尋中涉及。
建立名為 test 的空白檔案,因為在其他目錄沒有許可權,所以需要先
cd ~ 切換回使用者的 /home/shiyanlou 目錄:
$ cd ~
$ touch test
新建目錄
使用 mkdir (make directories)命令可以建立一個空目錄,也可同時
指定建立目錄的許可權屬性
建立名為"mydir"的空目錄:
$ mkdir mydir
使用 -p 引數,同時建立父目錄(如果不存在該父目錄),如下我們
同時建立一個多級目錄(這在有時候安裝軟體,配置安裝路徑時非常
有用):
$ mkdir -p father/son/grandson
後面的目錄路徑,以絕對路徑的方式表示也是可以的。
2.複製
複製檔案
使用 cp (copy)命令複製一個檔案或目錄到指定目錄。將之前建立
5 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
的"test"檔案複製到"/home/shiyanlou/father/son/grandson"目錄中:
$ cp test father/son/grandson
是不是很方便啊,如果在圖形介面則需要先在源目錄複製檔案,再進
到目的目錄貼上檔案,命令列操作步驟就一步到位了嘛。
複製目錄
如果直接使用 cp 命令,複製一個目錄的話,會出現如下錯誤:
要成功複製目錄需要加上 -r 或者 -R 引數,表示遞迴複製,就是說有
點“株連九族”的意思:
$ cp -r father family
3.刪除
刪除檔案
使用 rm (remove files or directories)命令,刪除一個檔案或目錄:
$ rm test
有時候你會遇到想要刪除一些為只讀許可權的檔案,直接使用 rm 刪除會
顯示一個提示,如下:
你如果想忽略這提示,直接刪除檔案,可以使用 -f 引數強制刪除:
$ rm -f test
刪除目錄
跟複製目錄一樣,要刪除一個目錄,也需要加上 -r 或 -R 引數:
$ rm -r family
4.移動檔案與檔案重新命名
6 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
移動檔案
使用 mv (move or rename files)命令,移動檔案(剪下)。將文
件"file1"移動到"Documents"目錄 mv 源目錄檔案 目的目錄 :
$ mv file1 Documents
重新命名檔案
將檔案"file1"重新命名為"myfile" mv 舊的檔名 新的檔名 :
$ mv file1 myfile
批量重新命名
要實現批量重新命名,mv 命令就有點力不從心了,我們可以使用一個看
起來更專業的命令 rename 來實現。不過它是要用 perl 正規表示式來
作為引數,關於正規表示式我們要在後面才會介紹到,這裡只做演
示,你只要記得這個 rename 命令可以批量重新命名就好了,以後再重新
學習也不會有任何問題,畢竟你已經掌握了一個更常用的 mv 命令。
# 使用萬用字元批量建立 5 個檔案
$ touch file{ 1 .. 5 }.txt
# 批量將這 5 個字尾為 .txt 的文字檔案重新命名為以 .c 為
字尾的檔案
$ rename 's/\.txt/\.c/' *.txt
# 批量將這 5 個檔案,檔名改為大寫
$ rename 'y/a-z/A-Z/' *.c
簡單解釋下上面的命令, rename 是先使用第二個引數的萬用字元匹配所
有字尾為 .txt 的檔案,然後使用第一個引數提供的正規表示式將匹配
的這些檔案的 .txt 字尾替換為 .c ,這一點在我們後面學習了 sed 命
令後,相信你會更好的理解。
5.檢視檔案
使用 cat , tac 和 nl 命令檢視檔案
這兩個命令都是用來列印檔案內容到標準輸出(終端),其中 cat 為正
序顯示, tac 倒序顯示。
7 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
標準輸入輸出:當我們執行一個 shell 命令列時通常會自動開啟
三個標準檔案,即標準輸入檔案(stdin),預設對應終端的鍵
盤;標準輸出檔案(stdout)和標準錯誤輸出檔案(stderr),
這兩個檔案都對應被重定向到終端的螢幕,以便我們能直接看
到輸出內容。程式將從標準輸入檔案中得到輸入資料,將正常
輸出資料輸出到標準輸出檔案,而將錯誤資訊送到標準錯誤文
件中。
比如我們要檢視之前從"/etc"目錄下拷貝來的 passwd 檔案:
$ cat passwd
可以加上 -n 引數顯示行號:
$ cat -n passwd
nl 命令,新增行號並列印,這是個比 cat -n 更專業的行號列印命
令。
這裡簡單列舉它的常用的幾個引數:
8 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
-b : 指定新增行號的方式,主要有兩種:
-b a:表示無論是否為空行,同樣列出行號("cat -n"就是這種
方式)
-b t:只列出非空行的編號並列出(預設為這種方式)
-n : 設定行號的樣式,主要有三種:
-n ln:在行號欄位最左端顯示
-n rn:在行號欄位最右邊顯示,且不加 0
-n rz:在行號欄位最右邊顯示,且加 0
-w : 行號欄位佔用的位數(預設為 6 位)
你會發現使用這幾個命令,預設的終端視窗大小,一屏顯示不完文字
的內容,得用滑鼠拖動滾動條或者滑動滾輪才能繼續往下翻頁,要是
可以直接使用鍵盤操作翻頁就好了,那麼你就可以使用下面要介紹的
命令。
使用 more 和 less 命令分頁檢視檔案
如果說上面的 cat 是用來快速檢視一個檔案內容的,那麼這個 more 和
less 就是天生用來"閱讀"一個檔案的內容的,比如說"man"手冊內部
就是使用的 less 來顯示內容。其中 more 命令比較簡單,只能向一個
方向滾動,而"less"為基於"more"和"vi"(一個強大的編輯器,我們有單
獨的課程來讓你學習)開發,功能更強大。less 的使用基本和 more 一
致,具體使用請檢視 man 手冊,這裡只介紹 more 命令的使用。
使用 more 工具開啟 passwd 檔案:
$ more passwd
9 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
開啟後預設只顯示一屏內容,終端底部顯示當前閱讀的進度(百分比)。
可以使用 Enter 鍵向下滾動一行,使用 Space 鍵向下滾動一屏,按下
h 顯示幫助, q 退出。
使用 head 和 tail 命令檢視檔案
這兩個命令那些性子比較急的人應該會比較喜歡,因為它們一個是隻
檢視的頭幾行(預設為10行,不足10行則顯示全部)和尾幾行。還是
拿 passwd 檔案舉例,比如當我們想要檢視最近新增加的使用者,那麼
我們可以檢視這個 /etc/passwd 檔案,不過我們前面也看到了,這個
檔案裡面一大堆亂糟糟的東西,看起來實在費神啊。這裡想到系統新
增加一個使用者,應該會將使用者的資訊新增到passwd檔案的最後,那麼
這時候我們就可以使用 tail 命令了:
$ tail /etc/passwd
甚至更直接的只看一行, 加上 -n 引數,後面緊跟行數:
$ tail -n 1 /etc/passwd
關於 tail 命令,不得不提的還有它一個很牛的引數 -f ,這個引數可
10 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
以實現不停地讀取某個檔案的內容並顯示。這可讓我們動態檢視日誌
起到實時監視的作用,不過我不會在這門基礎課程中介紹它的更多細
節,感興趣的使用者可以自己去了解。
6.檢視檔案型別
前面我提到過,在 Linux 下面檔案的型別不是根據檔案字尾來判斷
的,我們通常使用 file 命令可以檢視檔案的型別:
$ file /bin/ls
這表示這是一個可執行檔案,執行在 64 位平臺,並使用了動態連結文
件(共享庫)。
7.編輯檔案
在 Linux 下面編輯檔案通常我們會直接使用專門的命令列編輯器比如
(emacs,vim,nano),由於涉及 Linux 上的編輯器的內容比較
多,且非常重要,故我們有一門單獨的基礎課專門介紹這其中一個編
輯器(vim)。在這裡強烈希望正在學習這門 Linux 基礎課的你先在
這裡暫停一下,先去學習vim 編輯器 (http://www.shiyanlou.com
/courses/2)的使用(至少掌握基本的操作)然後再繼續本課程後面的
內容,因為後面的內容會假設你已經學會了 vim 編輯器的使用。如果
你想更加快速的入門,你可以直接使用 Linux 內部的 vim 學習教程,
輸入如下命令即可開始:
$ vimtutor
作業
你是不是覺得在我們的環境中學習感覺輕鬆愉快毫無壓力呢,所以偶
爾偷偷懶也是沒有問題的。要真是這樣可不太好啊,要學會給自己點
壓力,稍微嚴格點要求自己才行。你又或許會想要是有人能監督就好
了,這樣你能學得更快。好吧今天就教你怎麼召喚一雙眼睛出來監督
你:
$ xeyes
你可以使用如下命令將它放到後臺執行
$ nohup xeyes &
11 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
動手做實驗,輕鬆學IT。
實驗樓-通過動手實踐的方式學會IT技術。
公司簡介 (/aboutus) 聯絡我們 (/contact) 常見問題 (/faq#howtostart) 加入我們 (/hire) 隱私協議 (/privacy)
會員條款 (/terms)
站長統計 (http://www.cnzz.com/stat/website.php?web_id=5902315)
蜀ICP備13019762號 (http://www.miibeian.gov.cn/)
(http://www.anquan.org/authenticate/cert/?site=www.shiyanlou.com&at=realname)
QQ群
微信
12 of 13
08/17/2015 07:11 PMLinux 目錄結構及檔案基本操作 - 實驗樓
https://www.shiyanlou.com/courses/document/59
微博
(http://weibo.com/shiyanlou2013)
13 of 13
08/17/2015 07:11 PM

相關文章