詳解Linux文件係統(tǒng)
1. Linux 磁(cí)盤分區和目(mù)錄
Linux 發行版本(běn)之間的差別很少,差別主要表現在係統管(guǎn)理的特色工具以及(jí)軟件包管理方(fāng)式的不同。目錄結構基本上都是一樣的。 Windows 的文件結構是多個並列的樹狀結構,最頂部的是不同的磁盤(分區),如: C , D , E , F 等。
Linux 的文(wén)件結構是(shì)單個的樹狀結構 . 可以用(yòng) tree 進行展示(shì)。 在 Ubuntu 下安裝 tree ( sudo apt-get install tree ) , 並可通過命令來查看。
每次安裝係統的(de)時(shí)候(hòu)我們都會進行分區, Linux 下磁盤(pán)分區和目錄的(de)關(guān)係如下:
– 任(rèn)何一個分區都必須掛載到某個目錄上。
– 目(mù)錄(lù)是邏輯上的區分。分區是物理上的(de)區分。
– 磁(cí)盤 Linux 分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫(xiě)操作。
– 根目錄是所有 Linux 的文(wén)件(jiàn)和目錄所在的地方,需要掛載上(shàng)一個磁盤分區。
以下是我們(men)可能存在(zài)的一種(zhǒng)目錄和(hé)分區關係(xì):
圖1:目錄和分區關係
Q: 如何查(chá)看分區和目錄及使用情況?
– fdisk 查看(kàn)硬盤分區表
– df :查看分區使用情況
– du: 查看文件(jiàn)占用空間情況
Q: 為什麽要分區,如何(hé)分區?
– 可以把(bǎ)不同資料,分別放入不同分(fèn)區中管理,降低風險。
– 大硬盤搜(sōu)索範(fàn)圍大,效率低
– 磁盤(pán)配合隻能對分區做設定
– /home /var /usr/local 經常是單(dān)獨分區,因為經常會操作,容易產生碎片
2. Mount 掛載和 NFS 簡介
掛載的概念 :當要使用某個設備時,例如要讀取(qǔ)硬盤中的(de)一個格(gé)式化好的分區、光盤或軟件等設備時,必須(xū)先把這些設備(bèi)對(duì)應到某個目錄上,而這個目錄就稱為 “ 掛載點( mount point ) ” ,這樣才可以讀取這些設(shè)備,而這些(xiē)對應的動作(zuò)就是 “ 掛載 ” 。 將物理分區細節屏蔽掉。用(yòng)戶隻有統一的(de)邏輯(jí)概(gài)念。所(suǒ)有的東西都是文件。 Mount 命(mìng)令可以實現掛(guà)載:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
Q :所有的磁盤分區都必須被掛載上才能使用,那麽我們機器上的硬盤(pán)分區是如何被掛載的?
A :這主要是它利用(yòng)了 /etc/fstab 文件。每次內核加載(zǎi)它知(zhī)道從這裏開始 mount 文件(jiàn)係統。每次係統(tǒng)啟動會根據該文件定義自動掛載。若沒有被自動掛載,分區將不能使用。 如下是我的 /etc/fstab 的定義,主要是根(gēn)據裝機的分區來的:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
#/dev/sda1 被自動掛載到 /
UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 / ext3 relatime,errors=remount-ro 0 1
# /dev/sda5 被自動掛載(zǎi)到分區 /home
UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /home ext3 relatime 0 2
#/dev/sda7 被自動掛載到 /work
UUID=0f918e7e-721a-41c6-af82-f92352a568af /work ext3 relatime 0 2
# 分區(qū) /dev/sda6 被自動掛載到 swap
UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0
Q :移動硬盤如何掛載?如何掛載一個新的分區?
移動硬盤有驅動模塊會自動掛載,如果有個新硬盤,要先進行分區,並通過 mount 命令掛載到某個文件夾。如果要自動掛載則可以修改 /etc/fstab 文件 .
NFS 簡介: NFS 相信在很多(duō)地方都有廣泛使用,是一個非常(cháng)好的文件共(gòng)享方式。我們公司(sī)所(suǒ)使用的上傳服務就是把文件上傳到某台網絡(luò)服務器上,中間(jiān)就是通過 NFS 實現。
使用 NFS 客戶端可以透明的地訪(fǎng)問(wèn)服務器端的文件。 NFS 也(yě)是通過 mount 來實現,底層是通(tōng)過(guò) NFS 通(tōng)信(xìn)協議實現。基本原理:
![](http://pic.pynaad.com/upload/tech/UploadPic/2011-9/2011919141154519.png)
圖2:NFS基本原(yuán)理
Ubuntu 下(xià)麵 Ubuntu 下的(de)例子
服務端 :
$apt-get install nfs-kernel-server
vi /etc/exports 添加 nfs 目(mù)錄 : /personal/nfs_share
10.1.60.34(rw,sync,no_root_squash)
$sudo exportfs -r
$sudo /etc/init.d/portmap start
$sudo /etc/init.d/nfs-kernel-server start
客戶端 :
$sudo apt-get install nfs-common
$sudo mount 10.19.34.76:/personal/nfs_share ~/nfsshare 例子(zǐ):
3. 文件類型
Linux 下麵的文件類型主要有:
a) 普通文件(jiàn) : C 語言元代碼、 SHELL 腳本、二進製的可執行文(wén)件等。分為純文本和二進製。
b) 目錄文件(jiàn) :目(mù)錄,存儲文件的唯一地方。
c) 鏈接文件 :指向(xiàng)同一個文(wén)件或目錄的的文件。
d) 特殊文件 :與係統外設相關的,通常在 /dev 下麵。分為塊設備和字符設備。
可以通過 ls –l, file, stat 幾個(gè)命令來查看文件的類(lèi)型(xíng)等相關信息。
4.文件存儲結(jié)構
Linux 正統的文(wén)件係(xì)統 ( 如 ext2 、 ext3) 一個文件由目錄項、 inode 和(hé)數據塊組成。
目錄項 : 包括文件名和 inode 節點號(hào)。
Inode :又稱文件索引節點,是文件基本信(xìn)息的(de)存放地和數據塊指針存放(fàng)地(dì)。
數據(jù)塊 :文件的具體內容存放地。
Linux 正統的文件(jiàn)係統 ( 如 ext2 、 3 等 ) 將(jiāng)硬盤分區時會劃分出(chū)目(mù)錄塊、 inode Table 區塊和 data block 數(shù)據區域。 一個文件由一個(gè)目錄項、 inode 和數據區域塊組成。 Inode 包含文件的屬(shǔ)性 ( 如讀寫(xiě)屬性(xìng)、 owner 等(děng),以(yǐ)及指向數據塊的(de)指針 ) ,數據區域塊則是文件內容。 當查看某個文件時,會先從 inode table 中查出文件屬性及數據存放點,再從(cóng)數據(jù)塊(kuài)中讀取數(shù)據。
站在 2w 英尺視圖(tú),文件存儲結構大概如(rú)下:
![](http://pic.pynaad.com/upload/tech/UploadPic/2011-9/2011919141157922.png)
圖3:文(wén)件存儲結構2w英尺視圖
其中目錄項的結構(gòu)如下 ( 每個文件的目錄項存儲在改文件所屬(shǔ)目錄的文件內容裏 ) :
![](http://pic.pynaad.com/upload/tech/UploadPic/2011-9/2011919141157614.jpg)
圖4:目錄項結構
其中文(wén)件(jiàn)的 inode 結(jié)構如下( inode 裏所包含的文件信息(xī)可以通過 stat filename 查看得到):
![](http://pic.pynaad.com/upload/tech/UploadPic/2011-9/2011919141157238.jpg)
圖5:inode結構
以上隻反映大體的(de)結構, linux 文件係統本身(shēn)在不斷(duàn)發展。但是以(yǐ)上概念基本(běn)是不變的。且如 ext2 、 ext3 、 ext4 文件係統(tǒng)也存(cún)在很大差別,如果要了(le)解可以查看專門的文件係統介(jiè)紹。
5. 軟連接、硬鏈接
軟鏈接和(hé)硬鏈接是我們常見的兩種概念:
硬連接 :是給文(wén)件一個副本,同時建立兩者之間的連接關係。修改其中一個,與其連接的文件同時被修改。如果(guǒ)刪(shān)除其中(zhōng) [color=red] 任意一個 [/color] 其餘的文件將不受影響。
軟(ruǎn)連接 : 也叫符號連接 , 他隻是(shì)對源文件在新的位置建立一個“快(kuài)捷(借用一下 wondows 常用詞)”,所以,當源文件(jiàn)刪除時,符號連接的文件將(jiāng)成為無源(yuán)之水 -> 僅(jǐn)僅剩(shèng)下個文件(jiàn)名了,當然刪除這個連接,也不會影響到源文件(jiàn),但對(duì)連接文(wén)件的使用、引用都是直接調用源文件的。
具體關係可以看下圖:
![](http://pic.pynaad.com/upload/tech/UploadPic/2011-9/2011919141157576.jpg)
圖6:軟鏈接和硬鏈接
從圖(tú)上可以(yǐ)看出硬鏈接和軟鏈接的區別:
1 :硬鏈接原(yuán)文件和新文件的 inode 編號一致。而(ér)軟鏈接不一(yī)樣。
2 :對原文件刪除,會導(dǎo)致軟(ruǎn)鏈接不可用,而硬鏈接不受影(yǐng)響。
3 :對原文件的修改,軟、硬(yìng)鏈接文件(jiàn)內容也一樣的修(xiū)改,因(yīn)為(wéi)都是(shì)指向同一個文件內(nèi)容的。
6. 文件目錄管理命令
磁盤和(hé)文件空(kōng)間
fdisk df du
文件目錄與管理
cd pwd mkdir rmdir ls cp rm mv
查看文件內容
cat:
cat [file]
查看文(wén)件的內容。全程式concatenate的意思,將文件內容連續輸(shū)出到屏幕上。第一行到最後(hòu)一行(háng)顯示。
tac:
tac [file]
和cat剛好相反 是從最後一行到(dào)第(dì)一行的方式查(chá)看。
cat有個比較不好的地(dì)方(fāng)時當文件比較大時候沒辦法看清楚,這(zhè)個時候可以用more或者Less命(mìng)令。
more:
more [file]
如果使用grep或者find等命令(lìng)時,可以配合使用more一頁一頁的(de)查看。如果看到一半想退出,則(zé)敲入’q’即可退出。
less:
less [file]
less比more更有彈性,可以上下翻頁。
如果隻想讀取文(wén)件的頭幾行或者文件的末尾幾行,可以用head或(huò)tail.
head –n [file]:讀(dú)取文件的前n行(háng)。
tail –n [file]:讀取文件末尾n行。
以上命令都(dōu)是用於查看(kàn)字符文(wén)件(jiàn),二(èr)進製文(wén)件(jiàn)出來的都是亂碼,要看二進(jìn)製文(wén)件的內容,可以用od命令,如(rú)查看一個MP3文件裏麵的內(nèi)容:
od shijiemori.mp3
文件目錄與權限
關鍵(jiàn)詞:Linux,文件係統(tǒng)
閱讀本文後您有什麽感想? 已有 人給出評價!
- 0
- 0
- 0
- 0
- 0
- 0