03 Linux 目錄結構及文件基本操作

目錄

一、Linux 目錄結構

1.FHS 標準

2. 目錄路徑

2.1 路徑

2.2 絕對路徑

2.3 相對路徑

二、Linux 文件的基本操作

1. 新建

1.1 新建空白文件

1.2 新建目錄

2. 複製

2.1 複製文件

2.2 複製目錄

3. 刪除

3.1 刪除文件

3.2 刪除目錄

4. 移動文件與文件重命名

4.1 移動文件

4.2 重命名文件

4.3 批量重命名

5. 查看文件

5.1 使用 cat,tac 和 nl 命令查看文件

5.2 使用 more 和 less 命令分頁查看文件

5.3 使用 head 和 tail 命令查看文件

6. 查看文件類型

7. 編輯文件


一、Linux 目錄結構

對於Linux 的目錄與 Windows 的目錄的區別,或許對於一般操作上的感受來說沒有多大不同,但從它們的實現機制來說是完全不同的。

 一種不同是體現在目錄與存儲介質(磁盤,內存,DVD 等)的關係上,以往的 Windows 一直是以存儲介質爲主的,主要以盤符(C 盤,D 盤...)及分區來實現文件管理,然後之下才是目錄,目錄就顯得不是那麼重要,除系統文件之外的用戶文件放在任何地方任何目錄也是沒有多大關係。所以通常 Windows 在使用一段時間後,磁盤上面的文件目錄會顯得雜亂無章(少數善於整理的用戶除外吧)。然而 UNIX/Linux 恰好相反,UNIX 是以目錄爲主的,Linux 也繼承了這一優良特性。 Linux 是以樹形目錄結構的形式來構建整個系統的,可以理解爲:樹形目錄是一個用戶可操作系統的骨架。雖然本質上無論是目錄結構還是操作系統內核都是存儲在磁盤上的,但從邏輯上來說 Linux 的磁盤是“掛在”(掛載在)目錄上的,每一個目錄不僅能使用本地磁盤分區的文件系統,也可以使用網絡上的文件系統。舉例來說,可以利用網絡文件系統(Network File System,NFS)服務器載入某特定目錄等。

1.FHS 標準

Linux 的目錄結構說複雜很複雜,說簡單也很簡單。複雜在於,因爲系統的正常運行是以目錄結構爲基礎的,對於初學者來說裏面大部分目錄都不知道其作用,重要與否,特別對於那些曾經的重度 Windows 用戶,他們會糾結很長時間,關於我安裝的軟件在哪裏這類問題。說它簡單是因爲,其中大部分目錄結構是規定好了的(FHS 標準),是死的,當你掌握後,你在裏面的一切操作都會變得井然有序。

       FHS(英文:Filesystem Hierarchy Standard 中文:文件系統層次結構標準),多數 Linux 版本採用這種文件組織形式,FHS 定義了系統中每個區域的用途、所需要的最小構成的文件和目錄同時還給出了例外處理與矛盾處理。

FHS 定義了兩層規範,第一層是, / 下面的各個目錄應該要放什麼文件數據,例如 /etc 應該放置設置文件,/bin 與 /sbin 則應該放置可執行文件等等。

第二層則是針對 /usr 及 /var 這兩個目錄的子目錄來定義。例如 /var/log 放置系統日誌文件,/usr/share 放置共享數據等等。

FHS 是根據以往無數 Linux 用戶和開發者的經驗總結出來的,並且會維持更新,FHS 依據文件系統使用的頻繁與否以及是否允許用戶隨意改動(注意,不是不能,學習過程中,不要怕這些),將目錄定義爲四種交互作用的形態,如下表所示:

2. 目錄路徑

2.1 路徑

顧名思義,路徑就是你要去哪兒的路線。如果你想進入某個具體的目錄或者想獲得某個目錄的文件(目錄本身也是文件)那就得用路徑來找到了。使用 cd 命令可以切換目錄,在 Linux 裏面使用 . 表示當前目錄,.. 表示上一級目錄(注意,以 . 開頭的文件都是隱藏文件,所以這兩個目錄必然也是隱藏的,你可以使用 ls -a 命令查看隱藏文件), - 表示上一次所在目錄, 通常表示當前用戶的 home 目錄。使用 pwd 命令可以獲取當前所在路徑(絕對路徑)。

2.2 絕對路徑

關於絕對路徑,簡單地說就是以根" / "目錄爲起點的完整路徑,以你所要到的目錄爲終點,表現形式如: /usr/local/bin,表示根目錄下的 usr 目錄中的 local 目錄中的 bin 目錄。

2.3 相對路徑

相對路徑,也就是相對於你當前的目錄的路徑,相對路徑是以當前目錄 . 爲起點,以你所要到的目錄爲終點,表現形式如: usr/local/bin (這裏假設你當前目錄爲根目錄)。你可能注意到,我們表示相對路徑實際並沒有加上表示當前目錄的那個 . ,而是直接以目錄名開頭,因爲這個 usr 目錄爲 / 目錄下的子目錄,是可以省略這個 . 的(以後會講到一個類似不能省略的情況);如果是當前目錄的上一級目錄,則需要使用 .. ,比如你當前目錄爲 home 目錄,根目錄就應該表示爲 ../../ ,表示上一級目錄( home 目錄)的上一級目錄( / 目錄)。

4-2.2-2

進入一個目錄,可以使用絕對路徑也可以使用相對路徑,那我們應該在什麼時候選擇正確的方式進入某個目錄呢。就是憑直覺嘛,你覺得怎樣方便就使用哪一個,而不用特意只使用某一種。比如假設我當前在 /usr/local/bin 目錄,我想進入上一級的 local 目錄你說是使用 cd .. 方便還是 cd /usr/local 方便?而如果要進入的是 usr 目錄,那麼 cd /usr ,就比 cd ../.. 方便一點了。

提示:在進行目錄切換的過程中請多使用 Tab 鍵自動補全,可避免輸入錯誤,連續按兩次 Tab 可以顯示全部候選結果

二、Linux 文件的基本操作

文件常用的基本操作,包括:新建、複製、刪除、移動文件與文件重命名、查看文件、查看文件類型、以及編輯文件。

1. 新建

1.1 新建空白文件

使用 touch 命令創建空白文件,關於 touch 命令,其主要作用是來更改已有文件的時間戳的(比如,最近訪問時間,最近修改時間),但其在不加任何參數的情況下,只指定一個文件名,則可以創建一個指定文件名的空白文件(不會覆蓋已有同名文件),當然你也可以同時指定該文件的時間戳,更多關於 touch 命令的用法,會在下一講文件搜索中涉及。

創建名爲 test 的空白文件,因爲在其它目錄沒有權限,所以需要先 cd ~ 切換回用戶的 /home/shiyanlou 目錄:

$ cd ~
$ touch test

1.2 新建目錄

使用 mkdir(make directories)命令可以創建一個空目錄,也可同時指定創建目錄的權限屬性。

創建名爲“ mydir ”的空目錄:

$ mkdir mydir

使用 -p 參數,同時創建父目錄(如果不存在該父目錄),如下我們同時創建一個多級目錄(這在安裝軟件、配置安裝路徑時非常有用):

$ mkdir -p father/son/grandson

後面的目錄路徑,以絕對路徑的方式表示也是可以的。

$ mkdir -p /home/shiyanlou/mother/gir

2. 複製

2.1 複製文件

使用 cp(copy)命令複製一個文件到指定目錄。

將之前創建的“ test ”文件複製到“ /home/shiyanlou/father/son/grandson ”目錄中:

$ cp test father/son/grandson

2.2 複製目錄

如果直接使用 cp 命令複製一個目錄的話,會出現如下錯誤:

4-3.1-2

要成功複製目錄需要加上 -r 或者 -R 參數,表示遞歸複製,就是說有點“株連九族”的意思:

$ cp -r father family

3. 刪除

3.1 刪除文件

使用 rm(remove files or directories)命令刪除一個文件:

$ rm test

有時候你會遇到想要刪除一些爲只讀權限的文件,直接使用 rm 刪除會顯示一個提示,如下:

4-3.3-1

你如果想忽略這提示,直接刪除文件,可以使用 -f 參數強制刪除:

$ rm -f test

3.2 刪除目錄

跟複製目錄一樣,要刪除一個目錄,也需要加上 -r 或 -R 參數:

$ rm -r family

4. 移動文件與文件重命名

4.1 移動文件

使用 mv(move or rename files)命令移動文件(剪切)。將文件“ file1 ”移動到 Documents 目錄:

mv 源目錄文件 目的目錄

$ mkdir Documents
$ mv file1 Documents

4-3.4-1

4.2 重命名文件

將文件“ file1 ”重命名爲“ myfile ”:

mv 舊的文件名 新的文件名

$ mv file1 myfile

4.3 批量重命名

要實現批量重命名,mv 命令就有點力不從心了,我們可以使用一個看起來更專業的命令 rename 來實現。不過它要用 perl 正則表達式來作爲參數,關於正則表達式我們要在後面纔會介紹到,這裏只做演示,你只要記得這個 rename 命令可以批量重命名就好了,以後再重新學習也不會有任何問題,畢竟你已經掌握了一個更常用的 mv 命令。

$ cd /home/shiyanlou/

# 使用通配符批量創建 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. 查看文件

5.1 使用 cattac 和 nl 命令查看文件

前兩個命令都是用來打印文件內容到標準輸出(終端),其中 cat爲正序顯示,tac 爲倒序顯示。

標準輸入輸出:當我們執行一個 shell 命令行時通常會自動打開三個標準文件,即標準輸入文件(stdin),默認對應終端的鍵盤、標準輸出文件(stdout)和標準錯誤輸出文件(stderr),後兩個文件都對應被重定向到終端的屏幕,以便我們能直接看到輸出內容。進程將從標準輸入文件中得到輸入數據,將正常輸出數據輸出到標準輸出文件,而將錯誤信息送到標準錯誤文件中。

比如查看桌面上的 test 文件:

$ cat test #正序顯示

#輸出結果
#include<stdio.h>

int main()
{
    printf("Hello ShiYanLou!");
}

$ tac test #倒序顯示

#輸出結果
}
    printf("Hello ShiYanLou!");
{
int main()

#include<stdio.h>

可以加上 -n 參數顯示行號:

$ cat -n test

#輸出結果
1 #include<stdio.h>
2 
3 int main()
4 {
5     printf("Hello ShiYanLou!");
6 }

nl 命令,添加行號並打印,這是個比 cat -n 更專業的行號打印命令。

這裏簡單列舉它的常用的幾個參數:

-b : 指定添加行號的方式,主要有兩種:
    -b a:表示無論是否爲空行,同樣列出行號("cat -n"就是這種方式)
    -b t:只列出非空行的編號並列出(默認爲這種方式)
-n : 設置行號的樣式,主要有三種:
    -n ln:在行號字段最左端顯示
    -n rn:在行號字段最右邊顯示,且不加 0
    -n rz:在行號字段最右邊顯示,且加 0
-w : 行號字段佔用的位數(默認爲 6 位)
$ nl -b t test

#輸出結果
1 #include<stdio.h>
 
2 int main()
3 {
4     printf("Hello ShiYanLou!");
5 }

你會發現使用這幾個命令,默認的終端窗口太小的話,可能一屏顯示不完文本的內容,得用鼠標拖動滾動條或者滑動滾輪才能繼續往下翻頁,要是可以直接使用鍵盤操作翻頁就好了,那麼你就可以使用下面要介紹的命令。

5.2 使用 more 和 less 命令分頁查看文件

如果說上面的 cat 是用來快速查看一個文件的內容的,那麼這個 more 和 less 就是天生用來"閱讀"一個文件的內容的。其中 more 命令比較簡單,只能向一個方向滾動,而 less 爲基於 more 和 vi 開發,功能更強大。less 的使用基本和 more 一致,具體使用請查看 man 手冊,這裏只介紹 more 命令的使用。

使用 more 命令打開 /etc 目錄下的 passwd 文件:

$ more passwd

4-3.5-3

打開後默認只顯示一屏內容,終端底部顯示當前閱讀的進度。可以使用 Enter 鍵向下滾動一行,使用 Space 鍵向下滾動一屏,按下 h 顯示幫助q 退出

5.3 使用 head 和 tail 命令查看文件

這兩個命令是隻查看文件的頭幾行(默認爲 10 行,不足 10 行則顯示全部)和尾幾行。還是拿 passwd 文件舉例,比如當我們想要查看最近新增加的用戶,那麼我們可以查看這個 /etc/passwd文件,不過我們前面也看到了,這個文件裏面一大堆亂糟糟的東西,看起來實在費神啊。因爲系統新增加一個用戶,會將用戶的信息添加到 passwd 文件的最後,那麼這時候我們就可以使用 tail 命令了:

$ tail /etc/passwd

甚至更直接的只看一行, 加上 -n 參數,後面緊跟行數:

$ tail -n 1 /etc/passwd

4-3.5-4

關於 tail 命令,不得不提的還有它一個很牛的參數 -f,這個參數可以實現不停地讀取某個文件的內容並顯示。這可以讓我們動態查看日誌,達到實時監視的目的。

6. 查看文件類型

在 Linux 中文件的類型不是根據文件後綴來判斷的,我們通常使用 file 命令查看文件的類型:

$ file Desktop/test
#輸出結果
Desktop/test:C source, ASCII test 

7. 編輯文件

在 Linux 下編輯文件通常我們會直接使用專門的命令行編輯器比如 vim。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章