文件系統是linux的一個(gè)十分基礎的知識,同時(shí)也是學(xué)習linux的必備知識。 本文將站在一個(gè)較高的視圖來(lái)了解linux的文件系統,主要包括了linux磁盤(pán)分區和目錄、掛載基本原理、文件存儲結構、軟鏈接硬鏈接、和常見(jiàn)目錄的介紹。相信有了這些知識對于深入的學(xué)習linux會(huì )有一定的幫助。文章例子主要是基于ubuntu發(fā)行版。
如有不對之處請大家多多指出。
1.Linux磁盤(pán)分區和目錄
Linux發(fā)行版本之間的差別很少,差別主要表現在系統管理的特色工具以及軟件包管理方式的不同。目錄結構基本上都是一樣的。 Windows的文件結構是多個(gè)并列的樹(shù)狀結構,最頂部的是不同的磁盤(pán)(分區),如:C,D,E,F等。
Linux的文件結構是單個(gè)的樹(shù)狀結構.可以用tree進(jìn)行展示。 在Ubuntu下安裝tree(sudo apt-get install tree),并可通過(guò)命令來(lái)查看。
每次安裝系統的時(shí)候我們都會(huì )進(jìn)行分區,Linux下磁盤(pán)分區和目錄的關(guān)系如下:
– 任何一個(gè)分區都必須掛載到某個(gè)目錄上。
– 目錄是邏輯上的區分。分區是物理上的區分。
– 磁盤(pán)Linux分區都必須掛載到目錄樹(shù)中的某個(gè)具體的目錄上才能進(jìn)行讀寫(xiě)操作。
– 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個(gè)磁盤(pán)分區。
以下是我們可能存在的一種目錄和分區關(guān)系:
圖1:目錄和分區關(guān)系
Q:如何查看分區和目錄及使用情況?
– fdisk查看硬盤(pán)分區表
– df:查看分區使用情況
– du: 查看文件占用空間情況
Q: 為什么要分區,如何分區?
– 可以把不同資料,分別放入不同分區中管理,降低風(fēng)險。
– 大硬盤(pán)搜索范圍大,效率低
– 磁盤(pán)配合只能對分區做設定
– /home /var /usr/local經(jīng)常是單獨分區,因為經(jīng)常會(huì )操作,容易產(chǎn)生碎片
2.Mount掛載和NFS簡(jiǎn)介
掛載的概念 :當要使用某個(gè)設備時(shí),例如要讀取硬盤(pán)中的一個(gè)格式化好的分區、光盤(pán)或軟件等設備時(shí),必須先把這些設備對應到某個(gè)目錄上,而這個(gè)目錄就稱(chēng)為“掛載點(diǎn)(mount point)”,這樣才可以讀取這些設備,而這些對應的動(dòng)作就是“掛載”。 將物理分區細節屏蔽掉。用戶(hù)只有統一的邏輯概念。所有的東西都是文件。Mount命令可以實(shí)現掛載:
mount [-fnrsvw] [-t vfstype] [-o options] device dir
Q:所有的磁盤(pán)分區都必須被掛載上才能使用,那么我們機器上的硬盤(pán)分區是如何被掛載的?
A:這主要是它利用了/etc/fstab文件。每次內核加載它知道從這里開(kāi)始mount文件系統。每次系統啟動(dòng)會(huì )根據該文件定義自動(dòng)掛載。若沒(méi)有被自動(dòng)掛載,分區將不能使用。 如下是我的/etc/fstab的定義,主要是根據裝機的分區來(lái)的:
# <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)掛載到分區/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
#分區 /dev/sda6被自動(dòng)掛載到swap
UUID=2f8bdd05-6f8e-4a6b-b166-12bb52591a1f none swap sw 0 0
Q:移動(dòng)硬盤(pán)如何掛載?如何掛載一個(gè)新的分區?
移動(dòng)硬盤(pán)有驅動(dòng)模塊會(huì )自動(dòng)掛載,如果有個(gè)新硬盤(pán),要先進(jìn)行分區,并通過(guò)mount命令掛載到某個(gè)文件夾。如果要自動(dòng)掛載則可以修改/etc/fstab文件.
NFS簡(jiǎn)介:NFS相信在很多地方都有廣泛使用,是一個(gè)非常好的文件共享方式。我們公司所使用的上傳服務(wù)就是把文件上傳到某臺網(wǎng)絡(luò )服務(wù)器上,中間就是通過(guò)NFS實(shí)現。
使用NFS客戶(hù)端可以透明的地訪(fǎng)問(wèn)服務(wù)器端的文件。NFS也是通過(guò)mount來(lái)實(shí)現,底層是通過(guò)NFS通信協(xié)議實(shí)現?;驹恚?div style="height:15px;">

圖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
客戶(hù)端:
$sudo apt-get install nfs-common
$sudo mount 10.19.34.76:/personal/nfs_share ~/nfsshare例子:
3.文件類(lèi)型
Linux下面的文件類(lèi)型主要有:
a) 普通文件:C語(yǔ)言元代碼、SHELL腳本、二進(jìn)制的可執行文件等。分為純文本和二進(jìn)制。
b) 目錄文件:目錄,存儲文件的唯一地方。
c) 鏈接文件:指向同一個(gè)文件或目錄的的文件。
d) 特殊文件:與系統外設相關(guān)的,通常在/dev下面。分為塊設備和字符設備。
可以通過(guò)ls –l, file, stat幾個(gè)命令來(lái)查看文件的類(lèi)型等相關(guān)信息。
4.文件存儲結構
Linux正統的文件系統(如ext2、ext3)一個(gè)文件由目錄項、inode和數據塊組成。
目錄項:包括文件名和inode節點(diǎn)號。
Inode:又稱(chēng)文件索引節點(diǎn),是文件基本信息的存放地和數據塊指針存放地。
數據塊:文件的具體內容存放地。
Linux正統的文件系統(如ext2、3等)將硬盤(pán)分區時(shí)會(huì )劃分出目錄塊、inode Table區塊和data block數據區域。一個(gè)文件由一個(gè)目錄項、inode和數據區域塊組成。Inode包含文件的屬性(如讀寫(xiě)屬性、owner等,以及指向數據塊的指針),數據區域塊則是文件內容。當查看某個(gè)文件時(shí),會(huì )先從inode table中查出文件屬性及數據存放點(diǎn),再從數據塊中讀取數據。
站在2w英尺視圖,文件存儲結構大概如下:
圖3:文件存儲結構2w英尺視圖
其中目錄項的結構如下(每個(gè)文件的目錄項存儲在改文件所屬目錄的文件內容里):
圖4:目錄項結構
其中文件的inode結構如下(inode里所包含的文件信息可以通過(guò)stat filename查看得到):
圖5:inode結構
以上只反映大體的結構,linux文件系統本身在不斷發(fā)展。但是以上概念基本是不變的。且如ext2、ext3、ext4文件系統也存在很大差別,如果要了解可以查看專(zhuān)門(mén)的文件系統介紹。
5.軟連接、硬鏈接
軟鏈接和硬鏈接是我們常見(jiàn)的兩種概念:
硬連接:是給文件一個(gè)副本,同時(shí)建立兩者之間的連接關(guān)系。修改其中一個(gè),與其連接的文件同時(shí)被修改。如果刪除其中[color=red]任意一個(gè)[/color]其余的文件將不受影響。
軟連接:也叫符號連接,他只是對源文件在新的位置建立一個(gè)“快捷(借用一下wondows常用詞)”,所以,當源文件刪除時(shí),符號連接的文件將成為無(wú)源之水->僅僅剩下個(gè)文件名了,當然刪除這個(gè)連接,也不會(huì )影響到源文件,但對連接文件的使用、引用都是直接調用源文件的。
具體關(guān)系可以看下圖:
圖5:軟鏈接和硬鏈接
從圖上可以看出硬鏈接和軟鏈接的區別:
1:硬鏈接原文件和新文件的inode編號一致。而軟鏈接不一樣。
2:對原文件刪除,會(huì )導致軟鏈接不可用,而硬鏈接不受影響。
3:對原文件的修改,軟、硬鏈接文件內容也一樣的修改,因為都是指向同一個(gè)文件內容的。
6.文件目錄管理命令
磁盤(pán)和文件空間
fdisk df du
文件目錄與管理
cd pwd mkdir rmdir ls cp rm mv
查看文件內容
cat:
cat [file]
查看文件的內容。全程式concatenate的意思,將文件內容連續輸出到屏幕上。第一行到最后一行顯示。
tac:
tac [file]
和cat剛好相反 是從最后一行到第一行的方式查看。
cat有個(gè)比較不好的地方時(shí)當文件比較大時(shí)候沒(méi)辦法看清楚,這個(gè)時(shí)候可以用more或者Less命令。
more:
more [file]
如果使用grep或者find等命令時(shí),可以配合使用more一頁(yè)一頁(yè)的查看。如果看到一半想退出,則敲入’q’即可退出。
less:
less [file]
less比more更有彈性,可以上下翻頁(yè)。
如果只想讀取文件的頭幾行或者文件的末尾幾行,可以用head或tail.
head –n [file]:讀取文件的前n行。
hail –n [file]:讀取文件末尾n行。
以上命令都是用于查看字符文件,二進(jìn)制文件出來(lái)的都是亂碼,要看二進(jìn)制文件的內容,可以用od命令,如查看一個(gè)MP3文件里面的內容:
od shijiemori.mp3
文件目錄與權限
chmod chown chgrp umask
文件查找
which:
which [filename]
該命令用于查詢(xún)通過(guò)PATH路徑到該路徑內查找可執行文件。
如:Which passwd:查找可執行文件passwd
whereis:
whereis [-bmsu] [keyword]
該命令用于把相關(guān)字的文件和目錄都列出來(lái)。(Linux 會(huì )將文件都記錄在一個(gè)文件數據庫里面,該命令式從數據庫去查詢(xún),所以速度比較快,Linux每天會(huì )更新該數據庫)
locate:
locate [filename]
該命令用于把相關(guān)字的文件和目錄都列出來(lái)。查找數據特別快,也是通過(guò)數據庫方式來(lái)查詢(xún)。但是數據庫一周更新一次,所以可能有些存在數據查不到??梢匀バ薷呐渲梦募?。
find:
find [path] [參數] [keyword]
該命令用于在指定路徑下查找文件。不是通過(guò)數據來(lái)查詢(xún),所以速度會(huì )比較慢。
7.常見(jiàn)目錄解釋
Linux各種發(fā)行版的目錄結構基本一致,各個(gè)目錄簡(jiǎn)單介紹如下:
目錄
描述
/
根目錄
/bin
做為基礎系統所需要的最基礎的命令就是放在這里。比如 ls、cp、mkdir等命令;功能和/usr/bin類(lèi)似,這個(gè)目錄中的文件都是可執行的,普通用戶(hù)都可以使用的命令。
/boot
Linux的內核及引導系統程序所需要的文件,比如 vmlinuz initrd.img 文件都位于這個(gè)目錄中。在一般情況下,GRUB或LILO系統引導管理器也位于這個(gè)目錄;啟動(dòng)裝載文件存放位置,如kernels,initrd,grub。一般是一個(gè)獨立的分區。
/dev
一些必要的設備,聲卡、磁盤(pán)等。還有如 /dev/null. /dev/console /dev/zero /dev/full 等。
/etc
系統的配置文件存放地. 一些服務(wù)器的配置文件也在這里;比如用戶(hù)賬號及密碼配置文件;
/etc/opt:/opt對應的配置文件
/etc/X11:Xwindows系統配置文件
/etc/xml:XML配置文件
……
/home
用戶(hù)工作目錄,和個(gè)人配置文件,如個(gè)人環(huán)境變量等,所有的賬號分配一個(gè)工作目錄。一般是一個(gè)獨立的分區。
/lib
庫文件存放地。bin和sbin需要的庫文件。類(lèi)似windows的DLL。
/media
可拆卸的媒介掛載點(diǎn),如CD-ROMs、移動(dòng)硬盤(pán)、U盤(pán),系統默認會(huì )掛載到這里來(lái)。
/mnt
臨時(shí)掛載文件系統。這個(gè)目錄一般是用于存放掛載儲存設備的掛載目錄的,比如有cdrom 等目錄??梢詤⒖?etc/fstab的定義。
/opt
可選的應用程序包。
/proc
操作系統運行時(shí),進(jìn)程(正在運行中的程序)信息及內核信息(比如cpu、硬盤(pán)分區、內存信息等)存放在這里。/proc目錄偽裝的文件系統proc的掛載目錄,proc并不是真正的文件系統,它的定義可以參見(jiàn) /etc/fstab 。
/root
Root用戶(hù)的工作目錄
/sbin
和bin類(lèi)似,是一些可執行文件,不過(guò)不是所有用戶(hù)都需要的,一般是系統管理所需要使用得到的。
/tmp
系統的臨時(shí)文件,一般系統重啟不會(huì )被保存。
/usr
包含了系統用戶(hù)工具和程序。
/usr/bin:非必須的普通用戶(hù)可執行命令
/usr/include:標準頭文件
/usr/lib:/usr/bin/ 和 /usr/sbin/的庫文件
/usr/sbin:非必須的可執行文件
/usr/src:內核源碼
/usr/X11R6:X Window System, Version 11, Release 6.
/srv
該目錄存放一些服務(wù)啟動(dòng)之后需要提取的數據