1. 程式人生 > >細說linux掛載——mount,及其他……(1)

細說linux掛載——mount,及其他……(1)

純粹針對剛剛解封開包的新新手,老鳥們請自覺繞行,否則浪費你的時間你非要逼我做謀殺犯可不光我的事你還沒 地方說理去。

如果你正好是個嶄新的新手,就耐心的花點時間看看吧,至少大概看看,不要在一個陌生又黑暗的到處碰壁,或張皇四顧,像個沒頭 的蒼蠅。
現在耐心聽我老人家絮絮叨叨沒個完的,這點時間絕對值!


續_______________________________________________________________________________________
用 linux,就一定要用linux的方式去思維。
嗯,說的容易做起來難。
我的D盤哪去了?恐怕每一個新手初次進入linux桌面後,第一 個想知道的就是這個答案吧?
我們就來說說這個D盤。

首先,請放心,他不會莫名其妙的被xx掉。除非你在分割槽的時侯亂來一氣;
其 次,你應該明白硬碟分割槽是怎麼回事,否則下面的就別看了,還不會走路就想跑馬拉松那是……,根本不可能滴;
再者,你應該明白,檔案其實是儲存在硬 盤的某個分割槽裡,並不是C盤或者D盤裡;
最後,拋棄你被widows“固化”了的思維,其意義不僅僅是使你更懂linux,而是可以令你擁有一種 更加活躍的思考方式,對你的整個人生可是大大的好喔。

原來事情還可以這樣做!

這是我們每一個走向知識的更高階段後必然會發出的感嘆。回想 一下,你有多久沒有發出過這樣的感嘆了?如果有一年以上的話——抱歉,你已經老了,至少你的思維是這樣。


複習 ________________________________________________________________________________________
硬 盤是幹什麼用的?廢話,當然是存檔案的啦。
首先作業系統需要放置一些它自己的檔案,其次作為使用者的我們自己,需要放置私人的物品——這是所謂儲存 (寫入)。
光放著不行,還要在需要的時候隨時拿出來——這是所謂取用(讀取),合稱存取控制。

既然要控制,就存在個怎麼組織這些 檔案的問題。
如果你的電腦上只有十幾二十個檔案的話簡單了,全放一起就行,那我也不用寫這個帖子了,省心。
可惜此事古難全啊,去看看你的 windows目錄吧,那裡面少說也有幾千個檔案吧?linux雖說比windows簡潔,不過可沒說檔案比windows少,新裝好的系統有一萬個以上 的檔案也正常得緊!
試想你把這些檔案全放一塊,是個啥情況?相信這個世界上沒有幾個人喜歡這樣搞。

不用說了,解決方法連火星人都 知道——分類

這時候你應該已經想到了 windows的樹形目錄了吧?
對喔,系統檔案全放進c:/windows裡,程式檔案全放進c:/program files裡,你個人的檔案全放進c:/Documents and Settings裡。
不過大多數有經驗的windows使用者又會發現一個問 題——個人的檔案放進c:/Documents and Settings裡不好!由於windows的經典藍屏的不可忽視的存在,這個c:不是個很可靠的地方,一旦它想提醒你它的不可忽視性的時候(天曉得是啥 時候),雖然你擁有對硬碟的絕對控制權,但你卻不得不面臨是幹掉匪徒還是拯救人質的兩難處境(至於怎麼徹底消滅這些匪徒這個問題,恐怕這個世界上沒人知 道),於是很多聰明人都會明智的選擇把私人檔案放到d盤或者e盤f盤……,反正只要不是c盤隨便哪裡都行。

好吧,我們來仔細分析一下以上 所說的那堆廢話。
c:/
這個部分是什麼意思?

所有的計算機教材都 會毫不含糊的告訴你——這是c盤的根目錄。
引用: ——老師老師,那這個c盤又是在哪裡呢?
遇上這麼麻煩的學生,一個本著誨人不倦優良傳統傳統的好教師 一定會拿出這個圖:
附件: CDE.jpg
——嗯,開頭那個 19.53G的新加捲(C:)就是c盤了,它位於磁碟的最前面,是主分割槽,而後面的D盤E盤是邏輯分割槽。這些分割槽很像一個大房間裡分割出來的小房間,可以 分別居住不同人而且互不干擾。
——收到!就是說假如我把一個檔案從c盤剪下到d盤的話,那一定是資料從第一個分割槽挪動到了第二個分割槽,就像居住在 1號房的房客搬家到2號房一樣。那根目錄又是蝦米意思捏?
——嗯,這位同學問的好!大家想想,當我們把一個檔案copy到c盤的某個目錄的時候, 比如說c:/windows吧,我們是怎樣找到這裡的?
對,先找到c盤,再在其中找到windows目錄。所以,這個先找到的c盤就是最基礎的一 層(或者說最高一層)了,在c:/的前面不用再找任何東西,它就是這顆樹的根,所以叫根目錄,c盤裡的所有目錄(資料夾)就是從樹根開始出現的分叉點,而 c盤裡的所有檔案都是從這個根上,通過各個分叉(目錄)逐漸長出的樹葉。我們要尋找某片樹葉(檔案)的時候,實際上就是從樹根開始,根據分叉點的指示最終 找到那片樹葉的。
而其他的D盤E盤也類似。下課!
——老師老師我明白了,可以這麼說——在windows裡,每個分割槽就是一顆 樹,windows裡又很多顆樹,樹的多少取決於你劃分了多少個分割槽!而這些CDEFG就是這些樹的編號!就好像我去一棟大樓裡找人,總是要先從1樓上去 一樣。烏拉!下課啦~~~~~~~~~~~~

在windows裡,硬碟上的所有檔案都可以通過類似方式找到,很清晰是不?
唯 一的問題是——那個C盤根目錄也就是第一分割槽,為什麼一定要寫成c:/而不能是d:/或者L:/或者乾脆就寫成/或者別的什麼?
不行!這是人家 windows規定的,習慣了就好,嗯?
好吧好吧,我是個善於適應的人,就這樣挺好……


深究 __________________________________________________________________________________________
整 理一下思路吧:
:idea: C盤,這是一個編號,一般來說它就是指硬碟的第一分割槽;
:idea: 這種C盤D盤E盤的概念,是被windows賦予的。因為在一塊硬碟沒有裝入機箱並被windows檢測到以前,它就是一個個的分割槽,沒有碟符!第一分割槽 就是第一分割槽,不是C盤!就算你在上面裝入了windows作業系統,但如果沒有啟動windows,那麼它就是第一分割槽而不是C盤!
:idea: 反之,這種概念,是windows“內在”的,就算windows沒有被安裝到硬碟的任何分割槽,這個“構架”依然存在,也就是說這種C盤D盤E盤的概念不 依賴於是否有分割槽供其命名
:idea: 這種概念,在windows接管了電腦硬碟的管理權以後,才具有實際的意義(可以通過類似c:/windows這樣的路徑存取檔案了)。

引 用某人的話來說,碟符——是軟體級的概念分割槽——是硬體級的概念
雖然不能說互不相關,但是可以說——他們其中任 何一個,都不是另一個的前提或補充,而只是兩個相互獨立的合作伙伴。
當windows啟動的時候,它會檢測電腦已連線的所有硬碟上它能夠識別的分 區(NTFS、FAT32等),並自動為其分配碟符。
這個“分配碟符”的過程,就是掛載(mount)過程(請一定記住這個mount),只不過 這個過程完全不用你參與,windows認為所有的分割槽,不管三七二十一都應該掛上,讓你盡情的用。
具體說就是,windows把第一分割槽關聯到 c:這個碟符,第二分割槽關聯到d:這個碟符等等,這樣當你想在第一分割槽存取資料的時候,只需要尋找c:就行了。
這樣,軟體中的磁碟管理概念和實際 的硬碟分割槽緊密關聯,二者才具有了真正的實用意義。


Linux__________________________________________________________________________________________
好 了,羅哩羅嗦說那麼多,只是想順理成章的引出linux根檔案系統的概念。
請注意,這裡所說的“檔案系統”,跟一般意義上的NTFS、EXT3文 件系統不是一碼事,別拿來對比哈!
和windows的C盤D盤E盤的概念一樣,這個“檔案系統”或者叫“組織體系”是軟體級別的,是linux系 統“內在”的體系,就像你腦子裡的一個“想法”,並無需依賴於任何的實際一樣。
:idea: linux的系統組織方式是——整個系統從根開始,按樹形目錄依次向下逐漸擴大,分類存放不同用途的檔案,/讀作“斜線”,英文slash;當其寫作一個 路徑時,第一個/表示根,即root,其他的/表示路徑分割符,但都讀作“斜線”或“slash”。

OK,現在讓我們把“理想”變成“現 實”吧!
:idea: 系統啟動時,首先有一個分割槽被掛載到了/,可以理解為該分割槽被分配了/這個奇怪“碟符”(注意,在windows裡,這個符號被用做命令引數引導符號,而 反斜線/,英文backslash作為路徑分割符,習慣不同而已,就像英國行車靠左一樣,沒啥可奇怪的)。
這個被掛載為/的分割槽,就叫做根分割槽 (不管它是主分割槽還是邏輯分割槽),它從此開始在整兒linux系統裡具有了特殊的地位,因為整兒電腦裡的所有硬碟,包括其上的所有其他分割槽,不管是主分 區、邏輯分割槽,都將以這個“根分割槽”為主幹,開始構造linux大樹,並最終成為這顆樹上的一個分支或樹葉。整個linux的系統結構裡,有且只有一個 root(根分割槽),不可能有第二個(其實,任何一個分割槽,都可以掛載為/,windows分割槽也可以。只不過掛載根分割槽的目的是啟動系統,如果/下面沒 有linux核心及其所需的系統檔案的話,將無法引導系統而已。所以這個根分割槽並不神祕)。
:idea: 你的其他分割槽只能被繼續掛載到/(根分割槽)下的某個目錄裡,比如“/mnt”或者“/media”或者“/什麼什麼”目錄,看你喜歡嘍。掛載好之後,當你 向這個目錄讀寫資料的時候,其實是在向被掛載到該目錄的另一個分割槽讀寫資料。多個分割槽在同一個時候只能被掛載到多個不同的目錄,比如“/mnt/a”、“ /media/123”或者“/home/anywhere”,任何一個處於/之下的目錄,都可以用來作為掛載其他分割槽的“平臺”,當然系統需要的目錄可 不要用哈,你自己新建你自己的用吧。
掛載好之後,你硬盤裡的資料,就可以通過類似/path/to/anywhere這樣的方式找到;如果沒有掛 載就找不到嘍。
用一個庸俗的比喻來說,“/”相當於c:/,而“/etc、/bin、/sbin、/lib”這些目錄大概相當於c: /windows和c:/program files,“/home”相當於c:/Documents and Settings,而當你把第二分割槽掛載到“/mnt/partition2”的時候,這個目錄就相當於d:/了,你地明白?

不信就掛一 次試試:
程式碼: cd /mnt                  (切換到/mnt目錄)
sudo mkdir partition2      (新建一個名為partition2的空目錄,你可以隨意用其他名稱)
sudo mount /dev/sda5 partition2   (如果你只有一個硬碟且第二分割槽是邏輯分割槽的話,這個命令就將掛載該分割槽到partition2)
cd partition2            (切換到/mnt/partition2目錄)
ls                     (列出該目錄的檔案)
這 樣應該可以看到你的D盤下的檔案了。
既然能掛載就一定能反掛載:
程式碼: sudo umount /dev/sda5   (或者/mnt/partition2)
這 個命令將“解除安裝”該分割槽,現在你再看會發現partition2又是空目錄了。




閒話 __________________________________________________________________________________________
到 這裡,有人可能會說“linux太麻煩了,我有十幾個分割槽,難道讓我每次都要敲幾十行命令?為什麼不像windows那樣啟動時就全給我自動掛上呢?”
1. 我是說過要敲命令,可我沒說過“每次”!下面將會介紹的fstab檔案將會使你在這件事上一勞永逸的解決問題;事實上,甚至還有一種“零”勞永逸的方法, 你甚至一個命令都不用敲,點幾下滑鼠就好了;
2. 像windows那樣全自動掛上?也沒有問題啊,裝上一兩個軟體即可,不過我想提醒你:
:idea: 這樣真的好嗎?未必。我可以肯定,你大多數時間只會使用幾個特定的分割槽;再退一步講,即使你是例外,但你也應該為別人想想吧?比如我,有一個分割槽有“敏 感”資料(是啥你自己猜),而且不常用,以前用windows的時候,我對這種做法就很討厭,誰都可以隨便瞅一瞅,不好!後來全搬家到linux分割槽了, 平時不掛載,要用才掛上,哈哈哈,我的系統我做主!從此不再受那微軟的苦~~~
:idea: “像windows那樣”,你的腦子裡為什麼每時每刻都在這樣想?是因為windows的方法最“好”?也未必,頂多只是你習慣了“那樣”而已。試想如果 你從來都用linux的“這樣”,然後有一天我突然給你一臺windows電腦的時候,你也一樣會疑惑的問我:“我的家目錄哪去了?”,“為什麼不能搞得 像linux那樣?”。
承認了吧,所謂“最好”的“那樣”是沒有的,除了你那個有衰老跡象的思維裡,哪兒都沒有!趕快活動活動吧。


一個例子 __________________________________________________________________________________________
程式碼: /         (這就是著名的根)
├── bin         (你在終端執行的大多數程式,比如cp、mv...)
├── boot         (核心放在這裡,這個目錄也經常被作為某個獨立分割槽的掛載點)
│   └── grub   (grub載入程式和引導選單就放在這裡)
├── cdrom
├── dev         (存放裝置檔案,這裡相當於一個裝置管理器,由系統自動生成。視硬體環境不同變化很大)
│   ├── block
│   ├── bsg
│   ├── bus
│   ├── char
│   ├── disk         (磁碟資訊,要掛載硬碟分割槽就要注意這裡的資訊嘍)
│   │   ├── by-id      (硬碟分割槽的永久性符號連結)
│   │   ├── by-label   (按卷標識別的硬碟分割槽,常用於掛載)
│   │   ├── by-path   (硬碟分割槽的節點連結)
│   │   └── by-uuid   (按UUID識別的硬碟分割槽,常用於掛載)
│   ├── dri
│   ├── fd
│   ├── input
│   ├── net
│   ├── pts
│   ├── shm
│   └── snd
├── etc         (存放所有程式和系統的配製檔案和全域性變數,對所有使用者生效,非常值得備份)
├── home         (這就是著名的home目錄了,注意不是”家目錄”,強烈建議把一個獨立分割槽掛載到這裡!)
│   ├── adagio   (這才是我真正的家!一般來說目錄名就是帳號名,當然也可以不是,隨便。命令列中用波浪線~代表這裡)
│   ├── MNT      (這是我掛載其它硬碟分割槽的地方,你可以看到用硬碟品牌、容量或用途區分的目錄名)
│   │   ├── MAX40NT1   (邁拓40G)
│   │   ├── ST160NT1   (希捷160G第一分割槽,下面兩個類似)
│   │   ├── ST160NT2
│   │   ├── ST160SYS
│   │   ├── ST320G      (希捷320G)
│   │   │   ├── MOVIE
│   │   │   ├── MUSIC
│   │   │   └── P2P   (電驢、BT的緩衝區)
│   │   ├── ST80G      (希捷80G)
│   │   │   ├── PROGRAM
│   │   │   ├── ST80PE
│   │   │   └── YEAR
│   │   └── WD1000      (西數1T)
│   │       ├── WD2
│   │       ├── WD3
│   │       ├── WD5
│   │       ├── WD6.Lib
│   │       └── WD7
│   └── test   (我建立的另一個帳號的家目錄,專門用於測試,一旦搞到無法收拾的地步,只需簡單的
│                把裡面的所有檔案刪除,就可以恢復預設。實際上你可以擁有無數個帳號)
├── lib         (所有程式共享的庫檔案)
├── lost+found   (磁碟掃描出現的丟失的資料)
├── media      (你在檔案管理器裡點選後自動掛載的分割槽就在這裡,按卷標命名,沒有卷標則按大小命名)
├── mnt         (同樣用於掛載磁碟,這是最傳統的位置,喜歡掛哪裡隨便)
├── opt         (某些特殊的程式喜歡把資料放在這裡,比如JAVA)
├── proc         (當前系統所有的詳細資訊,這裡的”檔案”並不存在於硬碟中,而是在記憶體或快取裡,每次啟動後都不一樣)
├── root       (這是系統最高權威root使用者的家!他是老大,所以不住在/home裡,那裡是草民住的)
├── sbin         (類似/bin,存放常用程式,但這裡的程式都是要命的啊,比如格式化,所以只有root或sudo使用者有權使用)
├── srv         (一些服務所要訪問的檔案)
├── sys         (系統的核心檔案,類似/proc,不必管它)
├── tmp         (存放臨時檔案,所有使用者均可使用,不過你要小心啊,這裡的所有檔案一旦重啟就全沒了,自動清空的)
├── usr         (你在X下使用的所有程式資料都在這裡了,包括圖示、manual等。所有使用者都可以使用。也是最龐大的目錄)
└── var         (variation,顧名思義就是變數,這裡存放系統中經常變化的資料。和/tmp不同啊,很有用的地方)
    ├── backups
    ├── cache
    │   └── apt
    │        └── archives   (存放你安裝的所有程式的deb包!重灌系統時太有用了,一定要備份好,到時候放回來。
    │                     我建議把整兒/var單獨掛載到一個獨立分割槽,像/home一樣。這樣你重灌好系統後,只
    │                      需要簡單的把整兒分割槽掛載到/var就行了,省去了備份-還原的時間。要知道這些deb包
    │                      可不是幾十M而已,而是有可能幾百M、幾個G,一來一回可夠嗆的。你也可以單獨掛載
    │                      一個分割槽到/var/cache/apt/archives,其他的都不要。
    │                      當然,這樣又增加了一點系統構造的複雜度,喜歡怎樣請自己斟酌。)
    ├── crash
    ├── games
    ├── lib
    ├── local
    ├── lock
    ├── log      (呵呵,這裡的檔案是系統執行的完整記錄,出了問題一定要來這裡看看)
    ├── mail      (這裡是存放所有使用者email的地方)
    ├── opt
    ├── run
    ├── spool
    └── tmp

40616 directories   (根目錄下共有40616個子目錄,你不會都想瀏覽一遍吧?所以不重要我全乾掉,否則這個帖子沒法看了)