簡介
文件系統就是分區或磁盤上的所有文件的邏輯集合。
文件系統不僅包含着文件中的數據而且還有文件系統的結構,所有Linux 用戶和程序看到的文件、目錄、軟連接及文件保護信息等都存儲在其中。
不同Linux發行版本之間的文件系統差別很少,主要表現在系統管理的特色工具以及軟件包管理方式的不同,文件目錄結構基本上都是一樣的。
文件系統有多種類型,如:
- ext2 : 早期linux中常用的文件系統;
- ext3 : ext2的升級版,帶日志功能;
- RAMFS : 內存文件系統,速度很快;
- iso9660:光盤或光盤鏡像;
- NFS : 網絡文件系統,由SUN發明,主要用於遠程文件共享;
- MS-DOS : MS-DOS文件系統;
- FAT : Windows XP 操作系統采用的文件系統;
- NTFS : Windows NT/XP 操作系統采用的文件系統。
分區與目錄
文件系統位於磁盤分區中;一個硬盤可以有多個分區,也可以只有一個分區;一個分區只能包含一個文件系統。
Linux文件系統與Windows有較大的差別。Windows的文件結構是多個並列的樹狀結構,最頂部的是不同的磁盤(分區),如 C、D、E、F等。
Linux的文件結構是單個的樹狀結構,根目錄是“/”,其他目錄都要位於根目錄下。
每次安裝系統的時候我們都會進行分區,Linux下磁盤分區和目錄的關系如下:
- 任何一個分區都必須對應到某個目錄上,才能進行讀寫操作,稱為“掛載”。
- 被掛載的目錄可以是根目錄,也可以是其他二級、三級目錄,任何目錄都可以是掛載點。
- 目錄是邏輯上的區分。分區是物理上的區分。
- 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。
下圖是常見的目錄和分區的對應關系:
為什么要分區,如何分區?
- 可以把不同資料,分別放入不同分區中管理,降低風險。
- 大硬盤搜索范圍大,效率低。
- /home、/var、/usr/local 經常是單獨分區,因為經常會操作,容易產生碎片。
為了便於定位和查找,Linux中的每個目錄一般都存放特定類型的文件,下表列出了各種Linux發行版本的常見目錄:
目錄 | 說明 |
---|---|
/ | 根目錄,只能包含目錄,不能包含具體文件。 |
/bin | 存放可執行文件。很多命令就對應/bin目錄下的某個程序,例如 ls、cp、mkdir。/bin目錄對所有用戶有效。 |
/dev | 硬件驅動程序。例如聲卡、磁盤驅動等,還有如 /dev/null、/dev/console、/dev/zero、/dev/full 等文件。 |
/etc | 主要包含系統配置文件和用戶、用戶組配置文件。 |
/lib | 主要包含共享庫文件,類似於Windows下的DLL;有時也會包含內核相關文件。 |
/boot | 系統啟動文件,例如Linux內核、引導程序等。 |
/home | 用戶工作目錄(主目錄),每個用戶都會分配一個目錄。 |
/mnt | 臨時掛載文件系統。這個目錄一般是用於存放掛載儲存設備的掛載目錄的,例如掛載CD-ROM的cdrom目錄。 |
/proc | 操作系統運行時,進程(正在運行中的程序)信息及內核信息(比如cpu、硬盤分區、內存信息等)存放在這里。/proc目錄偽裝的文件系統proc的掛載目錄,proc並不是真正的文件系統。 |
/tmp | 臨時文件目錄,系統重啟后不會被保存。 |
/usr | /user目下的文件比較混雜,包含了管理命令、共享文件、庫文件等,可以被很多用戶使用。 |
/var | 主要包含一些可變長度的文件,會經常對數據進行讀寫,例如日志文件和打印隊列里的文件。 |
/sbin | 和 /bin 類似,主要包含可執行文件,不過一般是系統管理所需要的,不是所有用戶都需要。 |
常用文件管理命令
你可以通過下面的命令來管理文件:
Command | Description |
---|---|
cat filename | 查看文件內容。 |
cd dirname | 改變所在目錄。 |
cp file1 file2 | 復制文件或目錄。 |
file filename | 查看文件類型(binary, text, etc)。 |
find filename dir | 搜索文件或目錄。 |
head filename | 顯示文件的開頭,與tail命令相對。 |
less filename | 查看文件的全部內容,可以分頁顯示,比more命令要強大。 |
ls dirname | 遍歷目錄下的文件或目錄。 |
mkdir dirname | 創建目錄。 |
more filename | 查看文件的全部內容,可以分頁顯示。 |
mv file1 file2 | 移動文件或重命名。 |
pwd | 顯示用戶當前所在目錄。 |
rm filename | 刪除文件。 |
rmdir dirname | 刪除目錄。 |
tail filename | 顯示文件的結尾,與head命令相對。 |
touch filename | 文件不存在時創建一個空文件,存在時修改文件時間戳。 |
whereis filename | 查看文件所在位置。 |
which filename | 如果文件在環境變量PATH中有定義,那么顯示文件位置。 |
df命令
管理磁盤分區時經常會使用 df (disk free) 命令,df -k 命令可以用來查看磁盤空間的使用情況(以千字節計),例如:
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
每一列的含義如下:
列 | 說明 |
---|---|
Filesystem | 代表文件系統對應的設備文件的路徑名(一般是硬盤上的分區)。 |
kbytes | 分區包含的數據塊(1024字節)的數目。 |
used | 已用空間。 |
avail | 可用空間。 |
capacity | 已用空間的百分比。 |
Mounted on | 文件系統掛載點。 |
某些目錄(例如 /devices)的 kbytes、used、avail 列為0,use列為0%,這些都是特殊(或虛擬)文件系統,即使位於根目錄下,也不占用硬盤空間。
你可以結合 -h (human readable) 選項將輸出信息格式化,讓人更易閱讀。
du 命令
du (disk usage) 命令可以用來查看特定目錄的空間使用情況。
du 命令會顯示每個目錄所占用數據塊。根據系統的不同,一個數據塊可能是 512 字節或 1024 字節。舉例如下:
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
結合 -h 選項可以讓信息顯示的更加清晰:
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
掛載文件系統
掛載是指將一個硬件設備(例如硬盤、U盤、光盤等)對應到一個已存在的目錄上。 若要訪問設備中的文件,必須將文件掛載到一個已存在的目錄上, 然后通過訪問這個目錄來訪問存儲設備。
這樣就為用戶提供了統一的接口,屏蔽了硬件設備的細節。Linux將所有的硬件設備看做文件,對硬件設備的操作等同於對文件的操作。
注意:掛載目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。
需要知道的是,光盤、軟盤、其他操作系統使用的文件系統的格式與linux使用的文件系統格式是不一樣的,掛載需要確認Linux是否支持所要掛載的文件系統格式。
查看當前系統所掛載的硬件設備可以使用 mount 命令:
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
一般約定,/mnt 為臨時掛載目錄,例如掛載CD-ROM、遠程網絡設備、軟盤等。
也可以通過mount命令來掛載文件系統,語法為:
mount -t file_system_type device_to_mount directory_to_mount_to
例如:
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
將 CD-ROM 掛載到 /mnt/cdrom 目錄。
注意:file_system_type用來指定文件系統類型,通常可以不指定,Linux會自動正確選擇文件系統類型。
掛載文件系統后,就可以通過 cd、cat 等命令來操作對應文件。
可以通過 umount 命令來卸載文件系統。例如,卸載 cdrom:
$ umount /dev/cdrom
不過,大部分現代的Linux系統都有自動掛載卸載功能,unmount 命令較少用到。
用戶和群組配額
用戶和群組配額可以讓管理員為每個用戶或群組分配固定的磁盤空間。
管理員有兩種方式來分配磁盤空間:
- 軟限制:如果用戶超過指定的空間,會有一個寬限期,等待用戶釋放空間。
- 硬限制:沒有寬限期,超出指定空間立即禁止操作。
下面的命令可以用來管理配額:
命令 | 說明 |
---|---|
quota | 顯示磁盤使用情況以及每個用戶組的配額。 |
edquota | 編輯用戶和群組的配額。 |
quotacheck | 查看文件系統的磁盤使用情況,創建、檢查並修復配額文件。 |
setquota | 設置配額。 |
quotaon | 開啟用戶或群組的配額功能。 |
quotaoff | 關閉用戶或群組的配額功能。 |
repquota | 打印指定文件系統的配額。 |
致謝:感謝您的耐心閱讀!