Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

程式設計師聯盟發表於2019-03-01

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

— 簡書作者 謝恩銘 轉載請註明出處

內容簡介


  1. 第二部分第三課:檔案和目錄,組織不會虧待你
  2. 第二部分第四課預告:檔案操縱,股掌之中

檔案和目錄,組織不會虧待你


上一課 Linux探索之旅 | 第二部分第二課:命令列,世界盡在掌握 中,我們認識了命令列這個極其強大的“武器”,這將成為伴隨我們接下來整個Linux課程的一個重要部分。

“大寶啊明天見,命令列啊天天見~”
這一課內容很多,請做好準備,最好先吃一隻烤雞壓壓驚。

今天的標題裡的那句“組織不會虧待你”,不是說Linux社群是個非法組織,不良幫*派。不是的,我們還是很廉潔的啊~

取這個標題是因為這一課我們要來談一談Linux系統的檔案和目錄是如何組織的。

使用過Windows系統的使用者,應該對Windows系統裡的C盤,D盤,E盤等等不陌生。那麼Linux是否也是類似的呢?是不是也是硬碟分為C盤什麼的;光碟驅動器可能會叫做G盤,H盤,等等呢?

其實不然,Linux下和Windows下的組織形式是不一樣的。瞭解這點非常重要。

所以我們才要用一課的篇幅來好好探究一下。

檔案的組織


Linux中管理檔案的系統初看是有些令人費解的,特別是對於已經習慣Windows的檔案組織方式的朋友。

在Linux中,我們可找不到什麼C盤,D盤,E盤,等等。完全不是這樣的。

不像Windows分成C盤,D盤,光碟驅動器,記憶體讀卡器,等。Linux是把所有東西都放在一個地方。

那麼我們怎麼才能區分我們的硬碟的第一張磁碟,第二張磁碟,光碟驅動器等等呢?

兩種型別的檔案


簡單起見,我們把Linux下的檔案分為兩大類:

  • 普通的檔案:這是我們已經熟知的檔案型別,這樣的檔案包括:文字型別的檔案(.txt,.doc,.odt,等等),聲音檔案(.wav,.mp3,.ogg),還有程式,等。簡單來說,這些檔案在Windows下也有。

  • 特殊的檔案:其他一些檔案是特殊的,因為它們表示一些東西。例如,你的光碟驅動器就是這類特殊的檔案。Windows把電腦裡的東西區分為檔案和非檔案,但Linux不是這樣。對於Linux來說,一切都是檔案
    甚至目錄也是檔案。這是很不相同的設計,一開始是有點令人狼狽的。但是不要怕,你慢慢會發現這樣設計的精妙。

根目錄


在一個檔案系統中,我們總有一個被稱為根目錄的東西,這個根目錄裡包含了所有其他目錄和檔案。

在Windows中,可以有好幾個根目錄,比如說C盤(C:)是你的硬碟的根目錄(假如你沒有把C盤進行磁碟分割槽的話。比如不少人喜歡把C盤分成C盤,D盤,E盤,F盤等等,C盤作為系統盤,D盤安裝軟體,E盤F盤等另作它用),H盤可能是你的光碟驅動器的根目錄。

Linux中有且只有一個根目錄,就是 / 。是的,就是用一個斜槓表示。沒有比根目錄再高一階的目錄了,因為沒有目錄包含根目錄,根目錄就是Linux最頂層的目錄,“萬有之源,斜槓青年”。

目錄的結構


在Windows下,一個目錄也許是這樣的形式:

C:Program FilesBaidu

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

我們說Baidu這個目錄是Program Files這個目錄的一個子目錄,而Program Files這個目錄是C盤這個根目錄的一個子目錄。

我們可以看到Windows中是用反斜槓 來標明目錄的層級與包含關係的。

而在Linux中,是用斜槓 / 來表示目錄的層級與包含關係。

我們之前說過,Linux中沒有類似C盤這種目錄,Linux有且只有一個根目錄,那就是 / 。

Linux的目錄形式是類似這樣的:

/usr/bin

不難理解,bin這個目錄是usr這個目錄的一個子目錄,usr這個目錄是 / 這個根目錄的一個子目錄。

我們可以看到Windows中的目錄名稱可以包含空格等符號,Linux下的目錄名也可以。不過我們一般在Linux下命名目錄時儘量不使用空格或者其他特殊的符號,而是儘量用小寫英文字母。這會省去很多不必要的麻煩。

根目錄的直屬子目錄


在Windows系統中,我們在C盤這個根目錄下一般都會找到一些相同的子目錄,例如:Program Files,Windows,Documents and Settings,等等。

我們列出一些在Linux下的根目錄的常用直屬子目錄。對這些直屬子目錄的描述會比較簡潔,主要為了讓我們有個初步的印象。

雖然我們只列出主要的Linux的根目錄的直屬子目錄,但是還是有不少的。如果你覺得記不住,那也不用擔心。這個列表不需要完全記住,有大致印象就好,隨著你深入使用Linux,會慢慢熟悉的。

而且,你會發現,其實這些目錄的名字都是有其英語含義的,所以可以顧名思義。想提高英語的朋友請去看我的這篇文章:對於程式設計師, 為什麼英語比數學更重要? 如何學習

下面我們按這些目錄的首字母的順序來依次列出:

  • bin:是英語binary的縮寫,表示“二進位制檔案”(我們知道可執行檔案是二進位制的)。包含了會被所有使用者使用的可執行程式。

  • boot:英語boot表示“啟動”。包含與Linux啟動密切相關的檔案。

  • dev:是英語device的縮寫,表示“裝置”。包含外設。我們之後會仔細研究這個目錄,因為它裡面的子目錄,每一個對應一個外設。比如代表我們的光碟驅動器的檔案就會出現在這個目錄下面。

  • etc:etc有點不能顧名思義了。因為etc是法語et cetera的縮寫,翻成英語就是and so on,表示“等等”。包含系統的配置檔案。至於為什麼在/etc下面存放配置檔案, 按照原始的UNIX的說法(Linux檔案結構參考UNIX的教學實現MINIX) ,這下面放的都是一堆零零碎碎的東西, 就叫etc好了。哈哈 ,這其實是個歷史遺留。

  • home:英語home表示“家”。使用者的私人目錄。之前我們提過一些,在這個目錄中,我們放置私人的檔案,有點類似Windows中的Documents這個資料夾,也叫“我的文件”。Linux中的每個使用者(除了大管家使用者,也就是超級使用者root外,root因為太厲害,擁有所有許可權,所以比較“任性”,跟普通使用者不住在一起)都在home目錄下有自己的一個私人目錄。比如我的使用者名稱是oscar,那麼我的私人目錄就是/home/oscar;如果另一個使用者叫jean,那麼他的私人目錄就是/home/jean。

  • lib:是英語library的縮寫,表示“庫”。包含被程式所呼叫的庫檔案,例如.so結尾的檔案,在Windows下這樣的庫檔案是以.dll結尾的。

  • media:英語media表示“媒體”。當一個可移動的外設(比如USB盤,SD卡,DVD,光碟等等)插入電腦時,Linux就可以讓我們通過media的子目錄來訪問這些外設中的內容。

  • mnt:是英語mount的縮寫,表示“掛載”。有點類似media,但一般用於臨時掛載一些裝置。

  • opt:是英語optional application software package的縮寫,表示“可選的應用軟體包”。用於安裝多數第三方軟體和外掛。

  • root:是英語“根”的意思。超級使用者root的家目錄/主目錄。一般的使用者的家目錄是位於/home下,不過root使用者是個例外。之前的課程我們也提到過,root是整個系統的超級使用者,擁有一切許可權,初學者請慎用此使用者模式。

  • sbin:是英語system binary的縮寫,表示“系統二進位制檔案”。比起bin目錄多了一個字首system,所以包含的是系統級的重要可執行程式。

  • srv:是英語service的縮寫,表示“服務”。包含一些網路服務啟動之後所需要取用的資料。

  • tmp:是英語temporary的縮寫,表示“臨時的”。普通使用者和程式存放臨時檔案的地方。

  • usr:是英語Unix Software Resource的縮寫,表示“Unix作業系統軟體資源”(也是個歷史遺留的命名)。這個目錄是最龐大的目錄之一。有點類似Windows中的C:Windows和C:Program Files這兩個資料夾的集合。在這裡面安裝了大部分使用者要呼叫的程式。

  • var:是英語variable的縮寫,表示“動態的,可變的”。通常包含程式的資料,比如一些log(日誌)檔案,記錄電腦中發生了什麼事。

其實以上的這個目錄的列表形式,在Unix型別的作業系統裡也是類似,並不僅限於Linux系統。

再說一次,初學者絕對不必把這個表中的目錄名和其含義背下來,以後會慢慢理解的。
上表只是為了給大家一個大致印象,瞭解Linux的根目錄下都包含哪些目錄。

英語不錯的朋友可以參閱以下Linux檔案系統結構圖,摘錄自:

linuxtoy.org/archives/li…

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

也可以參考《鳥哥的Linux私房菜》的這張圖:

cn.linux.vbird.org/linux_basic…

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

我們就大體來表示一下我們的Linux的檔案系統目錄樹結構好了(從頂部的根目錄/開始,自頂向下。沒有列出全部目錄):

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

上圖中,在home目錄下,假設有oscar和jean兩位使用者的家目錄存在。

我們可以看到,Linux的檔案系統的結構很像一棵樹,從最頂端的根目錄 / 開始,自頂向下逐級分佈,層疊包含。

pwd命令和which命令:我在哪呢?


Linux系統安裝後,包含了很多的檔案和目錄(雖然其實都是檔案),我們很容易迷失在“茫茫文海”中。

當然我們不可能一下子列出Linux中的所有檔案,那不現實。但是我們可以向你展示如何在Linux的目錄樹中來回穿梭,你可以知道此刻你位於哪個目錄下。就好比能看懂Linux這個很大的“地圖”。

pwd命令:顯示當前目錄的路徑


如果你剛開啟一個終端(Terminal),那麼你將位於你的使用者家目錄,也就是~目錄中。

在小編的情況,因為我的使用者名稱是oscar,所以其實~這個目錄,也是/home/oscar這個目錄。

通常來說,命令列提示符會告訴你目前位於哪個目錄下:

oscar@oscar-laptop:~$複製程式碼

如果上一課你認真學習的話,你會記得在冒號:和美元符$之間的就是當前目錄了,所以我們當前目錄是~,也就是當前使用者的家目錄。當前我的使用者名稱是oscar,所以,也就是位於/home/oscar中。

看命令列提示符來獲知當前目錄是一個不錯的方法,但是我們還有一個方法:pwd命令。

pwd是英語Print Working Directory的縮寫,表示“列印當前工作目錄”。

使用方法也很簡單,直接輸入pwd,然後回車,就會執行此命令:

pwd複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

如上圖所示,當我們呼叫pwd這個命令時,就為我們列印出了我們當前所在的工作目錄:

/home/oscar複製程式碼

所以,pwd命令和看命令列提示符都證明了我目前所在的目錄就是 /home/oscar。如下圖:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

所以不要怕迷失在Linux的茫茫海洋中,我們靠著pwd這張舊船票,隨時能夠知道我們身處哪艘破船。
這樣,”濤聲就可以依舊了,毛寧也不會憂傷了”。

which命令:獲取命令的可執行檔案的位置


which命令並不是一個必不可少的命令,我們平時用到它的機會也不多。不過我們還是來介紹一下,以便我們對Linux的檔案系統有更好的認識。

那麼which命令的作用是什麼呢?我們知道which在英語裡是“哪一個”的意思。

which命令用於顯示一個命令的對應的可執行程式的位置。可能聽起來有點拗口。

不要急,我們來解釋。

在Linux下,每一條命令其實對應了一個可執行程式。我們在終端中輸入命令,再按回車的時候,其實就是執行了對應的那個程式。比如說,pwd命令對應的pwd程式就是存在於Linux中的。

一個命令,其實只不過是一個我們隨時可以呼叫的程式罷了。

which命令接受一個引數,也就是你想要知道其可執行程式位於哪裡的那個命令。

我們來測試一下,就拿pwd命令來測試好了:

which pwd複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

因此,pwd命令對應的pwd這個可執行程式位於/bin目錄中。

我們也可以注意到Linux中的可執行程式和Windows中不太一樣,在Windows中可執行程式一般以.exe結尾,而Linux中一般是沒有字尾名的。

Linux中的可執行程式也不是都位於相同目錄的。我們可以來測試一下which命令本身對應的可執行程式位於哪裡:

which which複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

我們可以看到,which命令對應的可執行程式which並不位於/bin中,而是在/usr/bin中。

ls命令:列出檔案和目錄


ls命令絕對是最常用的Linux命令之一。

之前的課程我們也簡單地介紹了ls命令的用法。現在我們比較仔細地來學習一下ls命令的功能和它的眾多引數。

ls是list的縮寫,是英語“列出”的意思。所以ls命令用於列出檔案和目錄。

首先,我們在自己的家目錄中執行ls命令,不帶任何引數:

ls複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

小編以前自學程式設計的時候在家目錄當中建立了太多資料夾,所以大家可以看到由藍色字樣標明的很多目錄,這裡截圖到的只是一部分目錄,下面還有很多。

Ubuntu的終端預設是有顏色標註的,一般來說:

  • 藍色 –> 目錄

  • 綠色 –> 可執行檔案

  • 紅色 –> 壓縮檔案

  • 淺藍色 –> 連結檔案

  • 灰色 –> 其他檔案

如果在你的終端裡沒有標明顏色,那麼你可以加上引數 –color=auto 來開啟顏色標註。如下:

ls --color=auto複製程式碼

如果你不需要顏色標註,那麼可以用 –color=none 來關閉顏色標註。如下:

ls --color=none複製程式碼

當然,為了避免每次都輸入這麼一串額外的引數,其實我們可以在一個配置檔案裡修改,使得永久顯示顏色或不顯示顏色。我們之後的課程再說。

ls命令接受很多引數,如果要把這些引數全部列出來,也沒什麼意思,畢竟平時常用的引數也就那幾個。所以,我們一起來看一下ls常用的一些引數的使用方法。

-a :顯示所有檔案和目錄,包括隱藏的


在Linux中,我們可以隱藏一些檔案。這並不是一種很強的保護機制,因為我們其實還是可以把這些檔案顯示出來。

平時我們單獨使用ls,不帶引數時,就沒有列出這些隱藏的檔案,也是為了簡潔起見。

我們的家目錄是個很好的演示隱藏檔案的目錄,因為這個目錄裡的隱藏檔案還不少呢。我們在ls命令後面新增-a引數看看:

ls -a複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到比單獨用ls時多了那些以點開頭的檔案和目錄,現在你知道為什麼要隱藏這些以點開頭的檔案了吧。因為這些檔案還真不少,會顯得很混亂。

在Linux,以點(.)開頭的檔案是隱藏檔案,不過這裡不包括開頭的兩個 . 和 .. ,這兩個的含義如下:

  • . (一個點)表示當前目錄。在當前情況下,就是 /home/oscar 。

  • .. (兩個點)表示上一級目錄。因為當前目錄是/home/oscar,所以上一級目錄就是 /home 。

我們有一個大寫的引數 -A,它的作用和小寫的-a幾乎一樣,唯一不同就是-A不列出 . 和 .. 這兩個檔案。

-l :詳細列表


-l 這個引數算是ls命令最常用的了。加上-l引數使得ls命令列出一個顯示檔案和目錄的詳細資訊的列表:

ls -l複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

這裡的列表顯示得不是那麼美觀,因為有一些檔案或目錄的名字太長,所以沒有辦法集中顯示在一行裡。

不過我們可以看到,每一個檔案或目錄都有對應的一行資訊。在這些資訊的最前面,有一個 total xxx 的,是表示當前目錄所有檔案的總大小是total後面的那個數字所表示的位元組(byte)數。

在我們的例子中,是total 123360,所以表示我的家目錄中所有檔案的總大小加起來是123360個位元組。

後面學到du命令的時候,就知道其實這裡的total後面的大小並不是統計了當前目錄真正的所有檔案的大小(包括逐層的檔案大小相加)。
這裡的大小隻是統計了當前目錄列出的這一層的檔案和目錄的大小,並沒有深入統計總的大小。

一行上的每一列是一個單獨的資訊,我們從左到右一一說明:

  • 檔案許可權:也就是那個drwxr-xr-x之類的。暫時不需要理解,我們之後會用單獨的一課來學習Linux下的檔案許可權。

  • 連結的數目:也就是那些3,8,11之類的。這個我們暫時不感興趣。之後的課也會解釋。

  • 檔案的所有者的名稱:這裡是oscar,也就是小編所在的使用者。當然,如果此檔案是屬於另一個使用者,比如說jean,那麼這裡的檔案所有者就會顯示jean了。

  • 檔案所在的群組:這裡也是oscar,表示是在oscar這個群組裡。關於群組,我們暫時不需要理解,之後在檔案許可權的那一課會講解。

  • 檔案大小:單位是octet,也就是byte,是英語“位元組”的意思。比如14_small_c那個目錄的大小是4096個位元組。可以看到這裡列出的檔案都是目錄,因此大小都是4096個位元組,並沒有顯示目錄中的所有檔案的總大小。

  • 最近一次修改的時間。比如14_small_c那個目錄的最近一次修改時間是是2012-06-15 23:31,也就是2012年6月15日 23點31分。

  • 檔案或目錄的名稱。

-h:以Ko,Mo,Go的形式顯示檔案大小


當我們僅用ls -l時,列出的檔案詳細資訊中,檔案的大小是以位元組為單位的。有時這不是太直觀。

我們可以再加一個引數-h,h是humain readable的縮寫,表示“適合人類閱讀的”。所以我們的命令變成了:

ls -lh複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

這次的顯示就美觀多了,可以看到,最開頭的total後面的123360,變成了121M,也就是121MB的意思,表示當前目錄所有檔案的總大小是121MB(MB大家應該不陌生吧,就是Mo,是Mega Octet的縮寫,表示“兆位元組”)。同樣,121MB絕對不是當前目錄真正的所有檔案的總大小。

可以看到每個檔案的大小資訊那一列,都變成了4.0K這樣的形式,也就是之前的4096B。用了-h引數,我們的檔案資訊更便於閱讀了。

-t:按檔案最近一次修改時間排序


t是time的縮寫,表示“時間”。

ls -lt複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到,這是按照檔案或目錄最近一次修改時間的降序排列,也就是說排在第一位的是Desktop(桌面)這個目錄,修改時間是最新的(2015年8月8日23:24),其他的依次降序。

當然,我們瞭解了這些ls的常用引數後,也可以把這幾個引數合併在一起使用,效果是疊加的:

ls -lath複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

cd命令:切換目錄


cd命令也是最常用的Linux命令之一,甚至可以說是最常用的命令。

cd是英語change directory的縮寫,表示“切換目錄”。所以顧名思義,cd命令是用於切換目錄的命令。

也許你發現了,目前來說,我們還沒跳出我們使用者的家目錄這個“小圈子”。對於渴望自由,嚮往探索的我們來說,這簡直不能忍,不是嗎?

好的,那就使用cd命令,開動起我們的這艘“破船”吧!我們得去其他海域逛逛。

與ls命令不同,cd命令沒有那麼多引數,cd命令後面接的引數就是一個,你要去的那個目錄的路徑。

比如我想去根目錄 / 轉轉,那麼我們就可以使用

cd /複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到,使用pwd命令,顯示當前我們已經位於根目錄/中了,我們也可以從命令列提示符中看出來,當前冒號和美元符之間已經從之前的~變成了/。

怎麼樣,對Linux的“狂拽酷炫”是不是已經有點感覺了?就是這麼輕盈,穿梭在各個目錄之間。比起Windows的滑鼠點點點,是不是快捷了很多?

我們再去其他地方轉轉,輸入

cd usr複製程式碼

因為我們當前是在根目錄/中,所以用cd usr 我們就切換到了/usr這個目錄:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

然後我們想看看/usr這個目錄中有哪些子目錄,用ls命令,可以看到有好幾個子目錄,我們再用cd命令進入其中的games(game是英語“遊戲”的意思)這個子目錄:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

剛才的一系列操作,我們可以用以下圖示來表示:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

好了,現在我們位於/usr/games這個目錄下。那麼如果我要回到上一級目錄(也叫父目錄),應該怎麼做呢?

可以用

cd ..複製程式碼

就是cd命令後面接兩個點。Linux中,一個點表示當前目錄,而兩個點表示上一級目錄:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以用如下圖示表示:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

那麼,聰明如你,應該不難想見,如何連續後退兩個層級。是的,可以用

cd ../..複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到,我們用 cd ../.. 連續後退了兩個層級,回到了根目錄 /

實際上,我們在切換目錄時,可以有兩種路徑表示方式,一種是相對路徑,一種是絕對路徑。

顧名思義,相對路徑就是相對於當前目錄的一個路徑表示法。絕對路徑就是絕對的,不因當前目錄而改變的一個路徑表示法。

相對路徑


剛才,我們位於/usr 目錄時,我們只用了 cd games 就切換到了 /usr/games,這裡cd games中的games就是相對路徑。因為這個games目錄是/usr 目錄的子目錄,所以是相對當前的/usr目錄而言的。

如果我們在根目錄裡執行命令 cd games,那麼會出現錯誤,因為根目錄/ 裡並沒有games這個子目錄,它找不到這個相對路徑,會顯示 No such file or directory (表示“不存在此檔案或目錄”):

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

所以我們只能這樣:

cd usr/games複製程式碼

才能從根目錄用相對路徑的方式切換到 /usr/games目錄中:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

絕對路徑


與相對路徑不一樣,不管我們當前位於哪個目錄,絕對路徑的使用都是一樣的。

絕對路徑很好辨認,因為它總是以 / 開頭, / 表示根目錄。假設,我們目前位於家目錄中,那麼如果我要用絕對路徑來切換到/usr/games中,怎麼做呢?很簡單,就是使用

cd /usr/games複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

圖示如下:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

如果我們要用相對路徑達到同樣的目的,那麼需要這樣:

cd ../../usr/games複製程式碼

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

圖示如下:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

重回家目錄


家目錄畢竟可以說是使用者使用最多的目錄,所以我們在用cd命令跳轉到其他目錄之後,經常渴望快速切換到自己的家目錄,怎麼做呢?如何重返家園呢?

有三種方法:

  • 比較”笨”的方法:cd /home/oscar 這裡的oscar可以替換為你自己的使用者名稱。這種方法有點繁瑣。

  • 較好的方法:cd ~

  • 最好的方法:cd。就是直接使用cd命令,不加任何引數,就可以切換到使用者的家目錄了,是不是很帥?

路徑自動補全


細心的你可能已經想到了,因為上一課中我們已經提過Tab鍵可以進行命令的補全(按兩下Tab鍵),也提了一下其實Tab鍵還可以用於路徑的補全。

所以,這樣用Tab鍵可以大大提高我們的效率,而且防止我們手動輸入路徑時將名字寫錯:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

du命令:顯示目錄包含的檔案大小


du命令也是很有用的,因為它可以讓我們知道檔案和目錄所佔的空間大小。

雖然ls -l命令也可以顯示檔案和目錄的大小,但是du命令統計的才是真正的檔案大小。du命令會深入遍歷每個目錄的子目錄,把所有檔案的大小都做一個統計。

du是英語disk usage的縮寫,表示“磁碟使用/佔用”。來對我們的家目錄做一個真正的大小的統計吧:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

因為執行du命令後,列出的檔案大小的列表實在太長,所以只能截圖了最後的部分。

可以看到,小編的家目錄的總大小是 28324348個位元組(byte)。是不是覺得換算這麼龐大的數字讓人抓狂呢?

不要著急,我們的du命令也可以使用引數。

-h:以Ko,Mo,Go的形式顯示檔案大小


-h引數的用法類似之前在ls命令中的-h引數,所以我們可以執行 du -h 來看一下:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到小編的家目錄/home/oscar 的總大小是 28GB。

-a:顯示檔案和目錄的大小


預設情況下,du命令只顯示目錄的大小。如果加上-a引數,則會顯示目錄和檔案的大小。我們使用 du -ah 來看一下:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

可以看到總大小還是28GB。因為雖然du命令預設情況下只顯示各個目錄的大小,但是統計的總大小已經包括了目錄中的各個檔案了,只不過預設沒有把檔案列出來罷了。

-s:只顯示總計大小


如果我們不想看到各個目錄和檔案的大小統計,而只想知道當前目錄的總大小,可以使用-s引數,我們用 du -sh 來看一下:

Linux 探索之旅 | 第二部分第三課:檔案和目錄,組織不會虧待你

總結


  1. 在Linux中,一切皆檔案!這是與Windows區別很大的一點。

  2. Linux的檔案和目錄都是由根目錄/開始自頂向下呈喬木狀分散的。

  3. 普通使用者存放自己私人檔案的地方是在/home目錄下,如果你的使用者名稱是oscar,那麼你的使用者的家目錄就是/home/oscar。

  4. pwd命令用於顯示當前所在目錄。

  5. ls命令用於顯示當前目錄中的檔案。

  6. cd命令用於切換目錄。

  7. du命令用於統計目錄大小。

第二部分第四課預告


今天的課就到這裡,一起加油吧!

下一課我們學習:Linux探索之旅 | 第二部分第四課:檔案操縱,股掌之中


微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”

相關文章