天天看點

Linux新手上路(四):Linux目錄及Linux檔案的基本操作

1、Linux目錄結構

Linux的目錄與Windows的目錄的差別,或許對于一般操作上的感受來說沒有多大的不同,但從它們的實作機制來說是完全不同的。一種不同的展現在目錄與存儲媒體(磁盤,記憶體。DVD等)的關系上,以往的Windows一直是以存儲媒體為主,主要以盤符(C槽,D盤)及分區來實作檔案管理,然後之下才是目錄,目錄就顯得不是那麼重要,除了系統檔案之外的使用者檔案放在任何地方任何目錄也是沒有多大關系。是以通常Windows在使用一段時間後,磁盤上面的檔案目錄會顯得雜亂無章(少數善于整理的使用者除外)。然而Linux恰好相反,Linux是以目錄為主的。Linux是以樹形目錄結構的形式來建構整個系統的,可以了解為樹形目錄是一個使用者可作業系統的骨架。雖然本質上無論是目錄結構還是作業系統核心都是存儲在磁盤上的,但從邏輯上來說Linux的磁盤是“挂在”(挂載在)目錄上的,每一個目錄不僅能使用本地磁盤分區的檔案系統,也可以使用網絡上的檔案系統。例如,可以利用網絡檔案系統(Network File System,NFS)伺服器載入某特定目錄。

1.1FHS标準

“Linux的目錄結構複雜在于,因為系統的正常運作是以目錄結構為基礎的,對于初學者來說裡面大部分目錄都不知道其作用,重要與否,特别是對于那些曾經的重度Windows使用者,他們會糾結關于我安裝的軟體在哪裡這類問題。jLinux的目錄結構簡單在于,其中大部分目錄結構是規定好了的(FHS标準),是死的,當你掌握後,你在裡面的一切操作都會變得井然有序。”

FHS(Filesystem Hierarchy Standard)中文意思為,檔案系統層次結構标準,多數Linux版本采用這種檔案組織形式,FHS定義了系統中每個區域的用途,所需要的最小構成的檔案和目錄同時還給出了例外處理與沖突處理。

FHS定義了兩層規範:

第一層是,/下面的各個目錄應該要放什麼檔案資料,例如/etc應該放置設定檔案,/bin與/sbin則應該放置可執行檔案等。

第二層則是針對/usr及/var這兩個目錄的子目錄來定義。例如/var/log放置系統日志檔案,/usr/share放置共享資料等。

FHS_2.3 标準文檔

Linux新手上路(四):Linux目錄及Linux檔案的基本操作

最真實最直覺的方式,可以執行如下指令:

$ tree /
           

如果提示“command not found”,需要安裝:

$ sudo apt-get update
$ sudo apt-get install tree
           

FHS是根據以往無數Linux使用者和開發者的經驗總結出來的,并且會持續更新,FHS依據檔案系統使用的頻繁與否以及是否允許使用者随意改動,将目錄定義為四種互動作用的形态,如下表所示:

Linux新手上路(四):Linux目錄及Linux檔案的基本操作

1.2目錄路徑

路徑就是你要去哪兒的路線。如果想進入某個具體的目錄或者想獲得某個目錄的檔案(目錄本身也是檔案)那就需要用路徑來找到檔案。

使用cd指令可以切換目錄,在Linux裡面使用 . 表示目前目錄,. . 表示上一級目錄。(PS:以 . 開頭的檔案都是隐藏檔案,是以這兩個目錄必然也是隐藏的,可以使用ls -a指令檢視隐藏檔案),- 表示上一次所在目錄,~ 通常表示目前使用者的home目錄。使用pwd指令可以擷取目前所在路徑(絕對路徑)。

進入上一級目錄:

$ cd . .
           

進入你的home目錄:

$ cd ~
#或者 cd /home/<你的使用者名>
           

使用pwd擷取目前路徑:

$ pwd
           

絕對路徑:

絕對路徑,就是以根“/”目錄為起點的完整路徑,以你所要到的目錄為終點,表現形式如:/usr/local/bin,表示根目錄下的usr目錄中的local目錄中的bin目錄。

相對路徑:

相對路徑,就是相對于目前目錄的路徑,相對路徑是以目前目錄 . 為起點,以你所要到的目錄為終點,表現形式如:usr/local/bin(這裡假設你目前目錄為根目錄)。我們表示相對路徑實際上并沒有加上表示目前目錄的那個 . ,而是直接以目錄名開頭,因為這個usr目錄為/目錄下的子目錄,是可以省略這個 . 的;如果是目前目錄的上一級目錄,則需要使用 . . ,比如你目前目錄為/home/aaa目錄下,根目錄就應該表示為. ./. ./,表示上一級目錄(home目錄)的上一級目錄(/目錄)。

以自己的home目錄為起點,分别以絕對路徑和相對路徑的方式進入/usr/local/bin目錄:

#絕對目錄
$ cd/usr/local/bin
#相對路徑
$ cd ../../usr/local/bin
           

進入一個目錄,可以使用絕對路徑也可以使用相對路徑,這個根據自己的實際需要而定。

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

2、Linux檔案的基本操作

Linux檔案常用的基本操作,包括:建立、複制、删除、移動檔案與檔案重命名、檢視檔案、檢視檔案類型、以及編輯檔案。

2.1建立

建立空白檔案:

使用touch指令建立空白檔案,關于touch指令,其主要作用是來更改已有檔案的時間戳的(比如,最近通路時間,最近修改時間),但其在不加任何參數的情況下,隻指定一個檔案名,則可以建立一個指定檔案名的空白檔案(不會覆寫已有的同名檔案),當然也可以同時指定該檔案的時間戳。

建立名為test的空白檔案,因為在其他目錄沒有權限,是以需要先cd ~ 切換會使用者的/home/aaa目錄:

$ cd /home/aaa
$ touch test
           

建立目錄:

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

建立名為“mydir”的空目錄:

$ mkdir mydir
           

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

$ mkdir -p father/son/grandson
           

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

2.2複制

複制檔案:

使用cp(copy)指令複制一個檔案到指定目錄。

将之前建立的“test”檔案複制到“/home/aaa/father/son/grandson”目錄中:

$ cp test father/son/grandson
           

如果在圖形界面則需要先在源目錄複制檔案,再進行目的目錄粘貼檔案,而指令行操作步驟就一部到位了。

複制目錄:

如果直接使用cp指令複制一個目錄,會出現錯誤。

要成功複制目錄需要加上-r或者-R參數,表示遞歸複制。

$ cd /home/aaa
$ mkdir family
$ cp -r father family
           

2.3删除

删除檔案:

使用rm(remove files or directories)指令删除一個檔案:

$ rm test
           

有時候你會遇到想要删除一些隻讀權限的檔案,直接使用rm删除會顯示一個提示。如果想忽略這提示,直接删除檔案,可以使用-f參數強制删除:

$ rm -f test
           

删除目錄:

和複制目錄一樣,要删除一個目錄,也需要加上-r或者-R參數:

$ rm -r family
           

2.4移動檔案與檔案重命名

移動檔案:

使用mv(move or rename files)指令移動檔案(剪切)。将檔案“file1”移動到Documents目錄:

$ mkdir Documents
$ touch file1
$ mv files Documents

           

重命名檔案:

将檔案“file1”重命名為“myfile”:

$ mv file1 myfile
           

批量重命名:

實作批量重命名,mv指令就有點力不從心了,我們可以使用一個看起來更專業的指令rename來是實作。不過它要用perl正規表達式作為參數。

$ cd /home/aaa/
$ touch file{1..5}.txt
$ rename 's/\.txt/\.c/' *.txt
$ rename 'y/a-z/A-Z/' *.c
           

簡單解釋一下上面的指令,rename是先使用第二個參數的通配符比對所有字尾為.txt的檔案,然後使用第一個參數提供的正規表達式将比對的這些檔案的.txt字尾替換為.c。

2.5檢視檔案

使用cat,tac和nl指令檢視檔案

前兩個指令都是用來列印檔案内容到标準輸出(終端),其中cat為正序顯示,tac為倒序顯示。

标準輸入輸出:當我們執行一個shell指令行時通常會自動打開三個标準檔案,即标準輸入檔案(stdin),預設對應終端的鍵盤,标準輸出檔案(stdout)和标準錯誤輸出檔案(stderr),後兩個檔案都對應被重定向到終端的pingmu,以便我們能直接看到輸出内容。程序将從标準輸出檔案中得到輸入資料,将正常輸出資料輸出到标準輸出檔案,而将錯誤資訊送到标準錯誤檔案中。

比如我們要檢視之前從/etc目錄下拷貝下來的passwd檔案:

$ cd /home/aaa
$ cp /etc/passwd passwd
$ cat passwd
           

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

$ cat -n passwd
           

nl指令,添加行号并列印,這個時比cat -n更專業的行号列印指令。

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

-b : 指定添加行号的方式,主要有兩種:

-b a:表示無論是否為空行,同樣列出行号("cat -n"就是這種方式)

-b t:隻列出非空行的編号并列出(預設為這種方式)

-n : 設定行号的樣式,主要有三種:

-n ln:在行号字段最左端顯示

-n rn:在行号字段最右邊顯示,且不加 0

-n rz:在行号字段最右邊顯示,且加 0

-w : 行号字段占用的位數(預設為 6 位)

$ nl -b a <file name>
           

使用這幾個指令,預設的終端視窗大小,一屏顯示不完文本的内容,得用滑鼠拖動滾動條或者滑動滾輪才能繼續往下翻頁,要是可以直接使用鍵盤操作翻頁就好了。

使用more和less指令分頁檢視檔案

如果說上面的cat是用來快速檢視一個檔案的内容的,那麼這個more和less就是天生用來“”閱讀一個檔案的内容的,比如說man手冊内部就是使用less來顯示内容的。其中more指令比較簡單,隻能向一個方向滾動,而less為基于more和vi(一個強大的編輯器)開發,功能更強大。less的使用基本和more一緻。這裡隻介紹more指令的使用。

使用more指令打開passwd檔案:

$ more passwd
           

打開後預設隻顯示一屏内容,終端底部顯示目前閱讀的進度。可以使用Enter鍵向下滾動一行,使用Space鍵向下滾動一屏,按下h顯示幫助,q退出。

使用head和tail指令分頁檢視檔案

這兩個指令都是隻檢視檔案的頭幾行(預設為10行,不足10行的則顯示全部)和尾幾行。還是拿passwd檔案舉例子,比如當我們想要檢視最近新增加的使用者,那麼我們可以檢視這個/etc/passwd檔案,不過我們前面也看到了,這個檔案裡面一大堆亂糟糟的東西,看起來實在費神啊。因為系統新增加一個使用者,會将使用者的資訊添加到passwd檔案的最後,那麼這時候我們就可以使用tail指令了:

$ tail /etc/passwd
           

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

$ tail -n 1 /etc/passwd
           

關于tail指令,不得不提的還有一個參數**-f** ,這個參數可以實作不停地讀取某個檔案的内容并顯示。這可以讓我們動态檢視日志,達到實時監視的目的。

2.6檢視檔案類型

在Linux中檔案的類型不是根據檔案字尾判斷的,我們通常使用file

指令檢視檔案的類型:

$ file /bin/ls
           

2.7編輯檔案

在Linux下面編輯檔案通常我們會直接使用專門的指令行編輯器(比如,emacs,vim,nano),涉及Linux上的編輯器的内容比較多,而且非常重要,可先去學習編輯器vim的使用。

如果想更加快速地入門,可以直接使用Linux内部的vim學習教程,輸入如下指令即可開始:

$ vimtutor
           

(下一篇文章就開始進入vim編輯器使用)

3、拓展

召喚眼睛監督:

$ xeyes
           

可以使用以下指令将它放到背景運作:

$ nohup xeyes &
           

繼續閱讀