|
文件系統(tǒng)是linux的一個(gè)十分基礎(chǔ)的知識(shí),同時(shí)也是學(xué)習(xí)linux的必備知識(shí)。
本文將站在一個(gè)較高的視圖來了解linux的文件系統(tǒng),主要包括了linux磁盤分區(qū)和目錄、掛載基本原理、文件存儲(chǔ)結(jié)構(gòu)、軟鏈接硬鏈接、和常見目錄的介紹。相信有了這些知識(shí)對(duì)于深入的學(xué)習(xí)linux會(huì)有一定的幫助。文章例子主要是基于ubuntu發(fā)行版。 如有不對(duì)之處請(qǐng)大家多多指出。 1.Linux磁盤分區(qū)和目錄 Linux發(fā)行版本之間的差別很少,差別主要表現(xiàn)在系統(tǒng)管理的特色工具以及軟件包管理方式的不同。目錄結(jié)構(gòu)基本上都是一樣的。 Windows的文件結(jié)構(gòu)是多個(gè)并列的樹狀結(jié)構(gòu),最頂部的是不同的磁盤(分區(qū)),如:C,D,E,F等。 Linux的文件結(jié)構(gòu)是單個(gè)的樹狀結(jié)構(gòu).可以用tree進(jìn)行展示。 在Ubuntu下安裝tree(sudo apt-get install tree),并可通過命令來查看。 每次安裝系統(tǒng)的時(shí)候我們都會(huì)進(jìn)行分區(qū),Linux下磁盤分區(qū)和目錄的關(guān)系如下: – 任何一個(gè)分區(qū)都必須掛載到某個(gè)目錄上。 – 目錄是邏輯上的區(qū)分。分區(qū)是物理上的區(qū)分。 – 磁盤Linux分區(qū)都必須掛載到目錄樹中的某個(gè)具體的目錄上才能進(jìn)行讀寫操作。 – 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個(gè)磁盤分區(qū)。 以下是我們可能存在的一種目錄和分區(qū)關(guān)系:
Q:如何查看分區(qū)和目錄及使用情況? – fdisk查看硬盤分區(qū)表 – df:查看分區(qū)使用情況 – du: 查看文件占用空間情況 Q: 為什么要分區(qū),如何分區(qū)? – 可以把不同資料,分別放入不同分區(qū)中管理,降低風(fēng)險(xiǎn)。 – 大硬盤搜索范圍大,效率低 – 磁盤配合只能對(duì)分區(qū)做設(shè)定 – /home /var /usr/local經(jīng)常是單獨(dú)分區(qū),因?yàn)榻?jīng)常會(huì)操作,容易產(chǎn)生碎片
2.Mount掛載和NFS簡(jiǎn)介 掛載的概念 :當(dāng)要使用某個(gè)設(shè)備時(shí),例如要讀取硬盤中的一個(gè)格式化好的分區(qū)、光盤或軟件等設(shè)備時(shí),必須先把這些設(shè)備對(duì)應(yīng)到某個(gè)目錄上,而這個(gè)目錄就稱為“掛載點(diǎn)(mount point)”,這樣才可以讀取這些設(shè)備,而這些對(duì)應(yīng)的動(dòng)作就是“掛載”。 將物理分區(qū)細(xì)節(jié)屏蔽掉。用戶只有統(tǒng)一的邏輯概念。所有的東西都是文件。Mount命令可以實(shí)現(xiàn)掛載: mount [-fnrsvw] [-t vfstype] [-o options] device dir Q:所有的磁盤分區(qū)都必須被掛載上才能使用,那么我們機(jī)器上的硬盤分區(qū)是如何被掛載的? A:這主要是它利用了/etc/fstab文件。每次內(nèi)核加載它知道從這里開始mount文件系統(tǒng)。每次系統(tǒng)啟動(dòng)會(huì)根據(jù)該文件定義自動(dòng)掛載。若沒有被自動(dòng)掛載,分區(qū)將不能使用。 如下是我的/etc/fstab的定義,主要是根據(jù)裝機(jī)的分區(qū)來的: # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 #/dev/sda1被自動(dòng)掛載到 / UUID=cb1934d0-4b72-4bbf-9fad-885d2a8eeeb1 / ext3 relatime,errors=remount-ro 0 1 # /dev/sda5 被自動(dòng)掛載到分區(qū)/home UUID=c40f813b-bb0e-463e-aa85-5092a17c9b94 /home ext3 relatime 0 2 #/dev/sda7 被自動(dòng)掛載到/work UUID=0f918e7e-721a-41c6-af82-f92352a568af /work ext3 relatime 0 2 #分區(qū) /dev/sda6被自動(dòng)掛載到swap UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0
Q:移動(dòng)硬盤如何掛載?如何掛載一個(gè)新的分區(qū)? 移動(dòng)硬盤有驅(qū)動(dòng)模塊會(huì)自動(dòng)掛載,如果有個(gè)新硬盤,要先進(jìn)行分區(qū),并通過mount命令掛載到某個(gè)文件夾。如果要自動(dòng)掛載則可以修改/etc/fstab文件. NFS簡(jiǎn)介:NFS相信在很多地方都有廣泛使用,是一個(gè)非常好的文件共享方式。我們公司所使用的上傳服務(wù)就是把文件上傳到某臺(tái)網(wǎng)絡(luò)服務(wù)器上,中間就是通過NFS實(shí)現(xiàn)。 使用NFS客戶端可以透明的地訪問服務(wù)器端的文件。NFS也是通過mount來實(shí)現(xiàn),底層是通過NFS通信協(xié)議實(shí)現(xiàn)?;驹恚?/span>
圖2:NFS基本原理
Ubuntu下面Ubuntu下的例子 服務(wù)端: $apt-get install nfs-kernel-server vi /etc/exports 添加nfs目錄: /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例子: 3.文件類型 Linux下面的文件類型主要有: a) 普通文件:C語言元代碼、SHELL腳本、二進(jìn)制的可執(zhí)行文件等。分為純文本和二進(jìn)制。 b) 目錄文件:目錄,存儲(chǔ)文件的唯一地方。 c) 鏈接文件:指向同一個(gè)文件或目錄的的文件。 d) 特殊文件:與系統(tǒng)外設(shè)相關(guān)的,通常在/dev下面。分為塊設(shè)備和字符設(shè)備。 可以通過ls –l, file, stat幾個(gè)命令來查看文件的類型等相關(guān)信息。 4.文件存儲(chǔ)結(jié)構(gòu)
Linux正統(tǒng)的文件系統(tǒng)(如ext2、ext3)一個(gè)文件由目錄項(xiàng)、inode和數(shù)據(jù)塊組成。 目錄項(xiàng):包括文件名和inode節(jié)點(diǎn)號(hào)。 Inode:又稱文件索引節(jié)點(diǎn),是文件基本信息的存放地和數(shù)據(jù)塊指針存放地。 數(shù)據(jù)塊:文件的具體內(nèi)容存放地。
Linux正統(tǒng)的文件系統(tǒng)(如ext2、3等)將硬盤分區(qū)時(shí)會(huì)劃分出目錄塊、inode Table區(qū)塊和data block數(shù)據(jù)區(qū)域。一個(gè)文件由一個(gè)目錄項(xiàng)、inode和數(shù)據(jù)區(qū)域塊組成。Inode包含文件的屬性(如讀寫屬性、owner等,以及指向數(shù)據(jù)塊的指針),數(shù)據(jù)區(qū)域塊則是文件內(nèi)容。當(dāng)查看某個(gè)文件時(shí),會(huì)先從inode table中查出文件屬性及數(shù)據(jù)存放點(diǎn),再從數(shù)據(jù)塊中讀取數(shù)據(jù)。
站在2w英尺視圖,文件存儲(chǔ)結(jié)構(gòu)大概如下:
圖3:文件存儲(chǔ)結(jié)構(gòu)2w英尺視圖
其中目錄項(xiàng)的結(jié)構(gòu)如下(每個(gè)文件的目錄項(xiàng)存儲(chǔ)在改文件所屬目錄的文件內(nèi)容里):
其中文件的inode結(jié)構(gòu)如下(inode里所包含的文件信息可以通過stat filename查看得到):
圖5:inode結(jié)構(gòu)
以上只反映大體的結(jié)構(gòu),linux文件系統(tǒng)本身在不斷發(fā)展。但是以上概念基本是不變的。且如ext2、ext3、ext4文件系統(tǒng)也存在很大差別,如果要了解可以查看專門的文件系統(tǒng)介紹。 5.軟連接、硬鏈接 軟鏈接和硬鏈接是我們常見的兩種概念: 硬連接:是給文件一個(gè)副本,同時(shí)建立兩者之間的連接關(guān)系。修改其中一個(gè),與其連接的文件同時(shí)被修改。如果刪除其中[color=red]任意一個(gè)[/color]其余的文件將不受影響。 軟連接:也叫符號(hào)連接,他只是對(duì)源文件在新的位置建立一個(gè)“快捷(借用一下wondows常用詞)”,所以,當(dāng)源文件刪除時(shí),符號(hào)連接的文件將成為無源之水->僅僅剩下個(gè)文件名了,當(dāng)然刪除這個(gè)連接,也不會(huì)影響到源文件,但對(duì)連接文件的使用、引用都是直接調(diào)用源文件的。 具體關(guān)系可以看下圖:
圖5:軟鏈接和硬鏈接
從圖上可以看出硬鏈接和軟鏈接的區(qū)別: 1:硬鏈接原文件和新文件的inode編號(hào)一致。而軟鏈接不一樣。 2:對(duì)原文件刪除,會(huì)導(dǎo)致軟鏈接不可用,而硬鏈接不受影響。 3:對(duì)原文件的修改,軟、硬鏈接文件內(nèi)容也一樣的修改,因?yàn)槎际侵赶蛲粋€(gè)文件內(nèi)容的。
6.文件目錄管理命令 磁盤和文件空間 fdisk df du 文件目錄與管理 cd pwd mkdir rmdir ls cp rm mv 查看文件內(nèi)容 cat: cat有個(gè)比較不好的地方時(shí)當(dāng)文件比較大時(shí)候沒辦法看清楚,這個(gè)時(shí)候可以用more或者Less命令。 more: 如果只想讀取文件的頭幾行或者文件的末尾幾行,可以用head或tail. 以上命令都是用于查看字符文件,二進(jìn)制文件出來的都是亂碼,要看二進(jìn)制文件的內(nèi)容,可以用od命令,如查看一個(gè)MP3文件里面的內(nèi)容: 文件目錄與權(quán)限 chmod chown chgrp umask 文件查找 which: locate: find: 7.常見目錄解釋 Linux各種發(fā)行版的目錄結(jié)構(gòu)基本一致,各個(gè)目錄簡(jiǎn)單介紹如下:
|
|
|