P198php
spuer block(P202合併):記錄此文件系統的總體信息(inode/block的大小,總量、使用量、剩餘量),以及文件系統的格式與相關信息(文件系統掛載時間、最近一次寫入數據時間、最近一次檢驗磁盤fsck時間、一個validbit數值:0系統已掛載,1未掛載)html
inode:記錄文件的權限與屬性,一個文件佔用一個inode,同時記錄此文件的數據所在的block號碼node
block:記錄文件的內容,一個文件可佔用多個blocklinux
P200centos
block group的概念緩存
data block: ext2文件系統支持的block大小有三種 1/2/4KB工具
inodetable記錄的內容:權限(rwx)、屬性(owner/group)、文件大小 、ctime/atime/mtime、定義文件特性的flag(如SetUid)、該文件真正內容的指向(pointer)oop
每一個inode大小固定爲128bytes測試
每一個文件佔用一個inode 因此文件數量與inode數量有關字體
讀取文件時先找到inode,並分析inode所記錄的權限是否與用戶符合,符合才能開始實際讀取block的內容
間接,雙間接,三間接:以block擴展做爲號碼記錄
P203
一個文件系統僅有一個superblock,但每一個block group內能夠有superblock的內容做爲第一個block group的備份
flie system description:描述每一個block group 的起始block號碼,以及說明每一個區段(superblock /bitmap/ inodemap /data block)分別介於哪個block號碼之間
block bitmap:哪些block是空的
inode bitmap:哪些inode是空的
dump2fs: superblock與file system description的信息(每一個block group的信息)
P204
目錄在ext2文件系統如何記錄數據:新建目錄時,ext2分配一個inode與至少一個block給它,inode記錄該目錄的權限與屬性,並記錄分配到的那塊block號碼;block則記錄這個目錄下的文件名與該文件名佔用的inode號碼數據(inode自己不記錄文件名,文件名記錄是在目錄的block中,所以文件的增/刪/重命名與目錄的w權限有關;那麼由於文件名是記錄在目錄的block中,所以當咱們要讀取某個文件時,就務必通過它上面各級目錄的inode與block,而後才能找到真正待讀文件的inode號碼以讀取數據)
文件在ext2中如何記錄數據:新建通常文件是,ext2分配一個inode與相對於該文件大小的block數量給該文件
P207
數據存放區域:inode table/data block
中間數據(meta data):superblock/block bitmap/inode bitmap(每次增刪改均可能影響這三部分數據)
P208
文件系統最頂層的目錄的inode通常爲2
P210
df -h human-readable -i inode(不用硬盤容量來顯示) 讀取的主要範圍是superblock 特別留意根目錄的剩餘容量,由於全部數據都是由根目錄衍生出來的。
df -a 看到/proc的結果爲0的緣由: 是Linux系統所須要加載的系統數據,並且是掛載在虛擬內存中的,因此沒有佔用硬盤空間
P212
du:與df不一樣,會直接到文件系統去查找全部的文件數據 du -S 不包括子目錄下的總計 -s列出總量,不列出每一個各別的目錄佔用容量
P213
hardlink 在某個目錄下新建一條文件名連接到某inode號碼的關聯記錄(ls -l filename 第二列比原來多1 p170) 好處:將任何一個文件名刪除,inode與block仍是存在
hardlink只是在某個目錄下的block內多寫入一個關聯數據,不會增長inode也不會耗用block數量
hard link的限制: 不能跨文件系統 不能鏈接到目錄(由於複雜度高)
symbolic link: 建立一個獨立的文件,這個文件會讓數據的讀取指向它鏈接的那個文件的文件名。會佔用掉inode與block
ln不加參數是hard link ,加-s是symbolic link
新建一個目錄時,新的目錄鏈接數爲2,而上層目錄的鏈接數會增長1(/tmp/testing /tmp/testing/. /tmp/testing/..)
fdisk:調整分區表 -l輸出後面接的設備全部的分區內容,若僅有fdisk -l 時,系統會把整個系統內可以找到的設備分區均列出來。(識別U盤能夠用到)
partprobe 強制讓內核從新找一次分區表(當fdisk 輸入w後系統提示重啓才能生效,此時用partprobe避免重啓)
mkfs [-t 文件系統格式] 設備文件名 磁盤格式化
mke2fs :Ext2/Ext3的公用程序 -b block大小(每一個block大小) -i block大小(多少容量給一個inode) -L 卷標 -c(檢查磁盤錯誤)-j(不帶-j是ext2,帶-j是ext3)
fsck:正常狀況下使用此命令,可能損壞系統;被檢查的分區要在卸載狀態;當fsck檢查文件系統後,有問題的數據會被放置到lost+found目錄中。
P226
做爲掛載點的目錄理論上應當爲空目錄。若是非空,掛載後原先的內容會被隱藏,新分區被卸載後纔會再次顯示出來。
mount一般不須要參數-t(指定欲掛載的文件系統類型):文件系統幾乎都有superblock,linux能夠經過分析superblock搭配linux本身的驅動程序去測試掛載,若是成功掛載了,就馬上使用該類型的文件系統掛載起來。參考的文件:/etc/filesystems系統指定的測試掛載文件系統類型 /proc/filesystems linux系統已經加載的文件系統類型。
如何知道linux有沒有相關文件系統類型的驅動程序:/lib/modules/$(uname -r)/kernel/fs/ 文件系統的驅動程序所在目錄
/dev/cdrom是鏈接文件,光驅一旦掛載後就沒法退出光盤,除非將它卸載
從新掛載根目錄:mount -o remount, rw, auto / (在單用戶模式下,根目錄一般被系統掛載爲只讀,可用此命令)
在不支持symboliclink的程序中,利用mount --bind來將某個目錄掛載到另外一個目錄去(並非掛載文件系統,而是額外掛載某個目錄)
範例七:將 /home 這個目錄暫時掛載到 /mnt/home 底下: [root@www ~]# mkdir /mnt/home [root@www ~]# mount --bind /home /mnt/home [root@www ~]# ls -lid /home/ /mnt/home 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/ 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home [root@www ~]# mount -l /home on /mnt/home type none (rw,bind)
umount:卸除的方式,能夠跟設備文件名或掛載點
[root@www ~]# cd /media/cdrom
[root@www cdrom]# umount /media/cdrom
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy
因爲你目前正在 /media/cdrom/ 的目錄內,也就是說其實『你正在使用該文件系統』的意思! 因此天然沒法卸除這個裝置!那該如何是好?就『離開該文件系統的掛載點』便可。
使用 Label name 進行掛載的方法:
除了磁盤的裝置文件名以外,其實咱們可使用文件系統的標頭(label)名稱來掛載喔! 舉例來講,咱們剛剛卸除的 /dev/hdc6 標頭名稱是『vbird_logical』,你也能夠使用dumpe2fs 這個命令來查詢文件系統的lable!而後就這樣作便可:
範例九:找出 /dev/hdc6 的 label name,並用 label 掛載到 /mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical .....底下省略..... # 找到啦!標頭名稱爲 vbird_logical 囉! [root@www ~]# mount -L "vbird_logical" /mnt/hdc6 |
這種掛載的方法有一個很大的好處:『系統沒必要知道該文件系統所在的接口與磁盤文件名!』
P231
在 Linux 底下全部的裝置都以文件來表明吧!可是那個文件如何表明該裝置呢?很簡單!就是透過文件的 major 與 minor 數值來替代的~因此,那個 major 與 minor 數值是有特殊意義的,不是隨意配置的喔!舉例來講,在鳥哥的這個測試機當中,那個用到的磁盤 /dev/hdc 的相關裝置代碼以下:
[root@www ~]# ll /dev/hdc* brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1 brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2 brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3 brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4 brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5 brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6 |
上表當中 22 爲主要裝置代碼 (Major) 而 0~6 則爲次要裝置代碼 (Minor)。咱們的 Linux 核心認識的裝置數據就是透過這兩個數值來決定的!舉例來講,常見的硬盤文件名 /dev/hda 與 /dev/sda 裝置代碼以下所示:
磁盤文件名 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/sda | 8 | 0-15 |
/dev/sdb | 8 | 16-31 |
[root@www ~]# mknod 裝置文件名 [bcp] [Major] [Minor] 選項與參數: 裝置種類: b :配置裝置名稱成爲一個周邊儲存設備文件,例如硬盤等; c :配置裝置名稱成爲一個周邊輸入設備文件,例如鼠標/鍵盤等; p :配置裝置名稱成爲一個 FIFO 文件; Major :主要裝置代碼; Minor :次要裝置代碼; 範例一:由上述的介紹咱們知道 /dev/hdc10 裝置代碼 22, 10,請建立並查閱此裝置 [root@www ~]# mknod /dev/hdc10 b 22 10 [root@www ~]# ll /dev/hdc10 brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10 # 上面那個 22 與 10 是有意義的,不要隨意配置啊! 範例二:建立一個 FIFO 文件,檔名爲 /tmp/testpipe [root@www ~]# mknod /tmp/testpipe p [root@www ~]# ll /tmp/testpipe prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe # 注意啊!這個文件可不是通常文件,不能夠隨便就放在這裏! # 測試完畢以後請刪除這個文件吧!看一下這個文件的類型!是 p 喔!^_^
e2lable:修改Label
關於用lable與設備文件名的比較:
[root@www ~]# e2label 裝置名稱 新的Label名稱 範例一:將 /dev/hdc6 的標頭改爲 my_test 並觀察是否修改爲功? [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical <==本來的標頭名稱 .....底下省略..... [root@www ~]# e2label /dev/hdc6 "my_test" [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: my_test <==改過來啦! .....底下省略.....P234
開機就掛載:/etc/fstab 用mount時,全部的參數寫入這個文件
/etc/fstab 是啓動時的配置文件,不過,實際 filesystem 的掛載是記錄到 /etc/mtab 與 /proc/mounts 這兩個文件當中的。每次咱們在更動 filesystem 的掛載時,也會同時更動這兩個文件喔!可是,萬一發生您在 /etc/fstab 輸入的數據錯誤,致使沒法順利啓動成功,而進入單人維護模式當中,那時候的 / 但是 read only 的狀態,固然您就沒法修改 /etc/fstab ,也沒法升級 /etc/mtab 囉~那怎麼辦?不要緊,能夠利用底下這一招:
[root@www ~]# mount -n -o remount,rw /
P237
掛載光盤/DVD映象文件
下載了 Linux 或者是其餘所需光盤/DVD的映象文件後,難道必定須要刻錄成爲光盤纔可以使用該文件裏面的數據嗎?固然不是啦!咱們能夠透過 loop 裝置來掛載的!
那要如何掛載呢?鳥哥將整個 CentOS 5.2 的 DVD 映象檔捉到測試機上面,而後利用這個文件來掛載給你們參考看看囉!
[root@www ~]# ll -h /root/centos5.2_x86_64.iso -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso # 看到上面的結果吧!這個文件就是映象檔,文件很是的大吧! [root@www ~]# mkdir /mnt/centos_dvd [root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /root/centos5.2_x86_64.iso 4493152 4493152 0 100% /mnt/centos_dvd # 就是這個項目! .iso 映象文件內的全部數據能夠在 /mnt/centos_dvd 看到! [root@www ~]# ll /mnt/centos_dvd total 584 drwxr-xr-x 2 root root 522240 Jun 24 00:57 CentOS <==瞧!就是DVD的內容啊! -rw-r--r-- 8 root root 212 Nov 21 2007 EULA -rw-r--r-- 8 root root 18009 Nov 21 2007 GPL drwxr-xr-x 4 root root 2048 Jun 24 00:57 images .....底下省略..... [root@www ~]# umount /mnt/centos_dvd/ # 測試完成!記得將數據給他卸除! |
很是方便吧!如此一來咱們不須要將這個文件刻錄成爲光盤或者是 DVD 就可以讀取內部的數據了!換句話說,你也能夠在這個文件內『動手腳』去修改文件的!這也是爲何不少映象檔提供後,還得要提供驗證碼 (MD5)給使用者確認該映象檔沒有問題!
使用物理分區構建swap建立 swap 分割槽的方式也是很是的簡單的!透過底下幾個步驟就搞定囉:
P240
使用文件構建swap
若是是在實體分割槽沒法支持的環境下,此時前一小節提到的 loop 裝置建置方法就派的上用場啦!與實體分割槽不同的只是利用 dd 去建置一個大文件而已。多說無益,咱們就再透過文件建置的方法建立一個128 MB 的內存置換空間吧!
[root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap |
[root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 這個命令下達時請『特別當心』,由於下錯字節控制,將可能使您的文件系統掛掉! |
[root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45584 261284 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992 [root@www ~]# swapon /tmp/swap [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45604 261284 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056 [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 /tmp/swap file 131064 0 -3 |
[root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回覆成最原始的樣子了!
P243
當你使用 ls -l 去查詢某個目錄下的數據時,第一行都會出現一個『total』的字樣!那是啥東西?其實那就是該目錄下的全部數據所耗用的實際 block 數量 * block 大小的值。咱們能夠透過 ll -s 來觀察看看上述的意義:
[root@www ~]# ll -s total 104 8 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 8 -rw-r--r-- 2 root root 255 Jan 6 2007 crontab 4 lrwxrwxrwx 1 root root 12 Oct 22 13:58 crontab2 -> /etc/crontab 48 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 12 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog 4 -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 8 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 4 -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 8 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4 |
P244
parted: 雖然你可使用 fdisk 很快速的將你的分割槽切割穩當,不過 fdisk 卻沒法支持到高於 2TB 以上的分割槽!此時就得須要 parted 來處理了。
P245
P252
[root@www ~]# gzip [-cdtv#] 檔名 [root@www ~]# zcat 檔名.gz 選項與參數: -c :將壓縮的數據輸出到螢幕上,可透過數據流重導向來處理; -d :解壓縮的參數; -t :能夠用來檢驗一個壓縮檔的一致性~看看文件有無錯誤; -v :能夠顯示出原文件/壓縮文件的壓縮比等資訊; -# :壓縮等級,-1 最快,可是壓縮比最差、-9 最慢,可是壓縮比最好!默認是 -6 範例一:將 /etc/man.config 複製到 /tmp ,而且以 gzip 壓縮 [root@www ~]# cd /tmp [root@www tmp]# cp /etc/man.config . [root@www tmp]# gzip -v man.config man.config: 56.1% -- replaced with man.config.gz [root@www tmp]# ll /etc/man.config /tmp/man* -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config -rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z -rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz <==gzip壓縮比較佳
範例三:將範例一的文件解壓縮 [root@www tmp]# gzip -d man.config.gz # 不要使用 gunzip 這個命令,很差背!使用 gzip -d 來進行解壓縮! # 與 gzip 相反, gzip -d 會將本來的 .gz 刪除,產生本來的 man.config 文件。
P254
tar: 將多個文件或目錄包成一個大文件的命令功能。前一小節談到的命令大多僅能針對單一文件來進行壓縮。
tar 的選項與參數很是的多!咱們只講幾個經常使用的選項,更多選項您能夠自行 man tar 查詢羅!
[root@www ~]# tar [-j|-z] [cv] [-f 建立的檔名] filename... <==打包與壓縮 [root@www ~]# tar [-j|-z] [tv] [-f 建立的檔名] <==察看檔名 [root@www ~]# tar [-j|-z] [xv] [-f 建立的檔名] [-C 目錄] <==解壓縮 選項與參數: -c :建立打包文件,可搭配 -v 來察看過程當中被打包的檔名(filename) -t :察看打包文件的內容含有哪些檔名,重點在察看『檔名』就是了; -x :解打包或解壓縮的功能,能夠搭配 -C (大寫) 在特定目錄解開 特別留意的是, -c, -t, -x 不可同時出如今一串命令列中。 -j :透過 bzip2 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.bz2 -z :透過 gzip 的支持進行壓縮/解壓縮:此時檔名最好爲 *.tar.gz -v :在壓縮/解壓縮的過程當中,將正在處理的檔名顯示出來! -f filename:-f 後面要馬上接要被處理的檔名!建議 -f 單獨寫一個選項羅! -C 目錄 :這個選項用在解壓縮,若要在特定目錄解壓縮,可使用這個選項。 其餘後續練習會使用到的選項介紹: -p :保留備份數據的本來權限與屬性,經常使用於備份(-c)重要的配置檔 -P :保留絕對路徑,亦即容許備份數據中含有根目錄存在之意; --exclude=FILE:在壓縮的過程當中,不要將 FILE 打包!
P259
dump: 備份
restore:恢復
P267
mkisofs:新建鏡像文件
cdrecord: 光盤刻錄工具
dd:
[root@www ~]# dd if="input_file" of="output_file" bs="block_size" \ > count="number" 選項與參數: if :就是 input file 羅~也能夠是裝置喔! of :就是 output file 喔~也能夠是裝置; bs :規劃的一個 block 的大小,若未指定則默認是 512 bytes(一個 sector 的大小) count:多少個 bs 的意思。你能夠說, tar 能夠用來備份關鍵數據,而 dd 則能夠用來備份整顆 partition 或整顆 disk ( 包括了cp和tar不能複製的boot sector 的區塊),很不錯啊~
cpio :cpio 能夠備份任何東西,包括裝置設備文件。不過 cpio 有個大問題,那就是 cpio 不會主動的去找文件來備份!啊!那怎辦?因此羅,通常來講, cpio 得要配合相似find等能夠找到檔名的命令來告知 cpio 該被備份的數據在哪裏啊!
P273