鳥哥的linux私房菜學習筆記2

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
在某些服務被關到特定目錄下時(chroot),就須要這樣作了。此時這個 mknod 就得要知道如何操做才行!
[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與設備文件名的比較:

  • 優勢:不論磁盤文件名怎麼變,不論你將硬盤插在哪一個 IDE / SATA 接口,因爲系統是透過 Label ,因此,磁盤插在哪一個接口將不會有影響;

  • 缺點:若是插了兩顆硬盤,恰好兩顆硬盤的 Label 有重複的,那就慘了~由於系統可能會沒法判斷哪一個磁盤分區槽纔是正確的!
[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/
# 測試完成!記得將數據給他卸除!
-o options 主要用來描述設備或檔案的掛接方式。經常使用的參數有:
loop:用來把一個文件當成硬盤分區掛接上系統
ro:採用只讀方式掛接設備
rw:採用讀寫方式掛接設備
iocharset:指定訪問文件系統所用字符集


很是方便吧!如此一來咱們不須要將這個文件刻錄成爲光盤或者是 DVD 就可以讀取內部的數據了!換句話說,你也能夠在這個文件內『動手腳』去修改文件的!這也是爲何不少映象檔提供後,還得要提供驗證碼 (MD5)給使用者確認該映象檔沒有問題!

使用物理分區構建swap

建立 swap 分割槽的方式也是很是的簡單的!透過底下幾個步驟就搞定囉:

  1. 分割:先使用 fdisk 在你的磁盤中分割出一個分割槽給系統做爲 swap 。因爲 Linux 的 fdisk 默認會將分割槽的 ID 配置爲 Linux 的文件系統,因此你可能還得要配置一下 system ID 就是了。
  2. 格式化:利用建立 swap 格式的『mkswap 裝置文件名』就可以格式化該分割槽成爲 swap 格式囉
  3. 使用:最後將該 swap 裝置啓動,方法爲:『swapon 裝置文件名』。
  4. 觀察:最終透過 free 這個命令來觀察一下內存的用量吧!

    1. <p>1.先進行分割的行爲囉!</p>[root@www ~]# <span style="color:#FF0000;">fdisk</span> /dev/hdc  
    2. Command (m for help): n  
    3. First cylinder (2303-5005, default 2303):  <==這裏按[enter]  
    4. Using default value 2303  
    5. Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M  
    6.   
    7. Command (m for help): p  
    8.   
    9.    Device Boot      Start         End      Blocks   Id  System  
    10. .....中間省略.....  
    11. /dev/hdc6            2053        2302     2008093+  83  Linux  
    12. /dev/hdc7            2303        2334      257008+  83  Linux <==新增的項目  
    13.   
    14. Command (m for help):<span style="color:#FF0000;"> t             <==修改系統 ID</span>  
    15. Partition number (1-7): 7           <==從上結果看到的,七號partition  
    16. Hex code (type L to list codes): <span style="color:#FF0000;">82 <==改爲 swap 的 ID</span>  
    17. Changed system type of partition 7 to 82 (Linux swap / Solaris)  
    18.   
    19. Command (m for help): p  
    20.   
    21.    Device Boot      Start         End      Blocks   Id  System  
    22. .....中間省略.....  
    23. /dev/hdc6            2053        2302     2008093+  83  Linux  
    24. /dev/hdc7            2303        2334      257008+  82  Linux swap / Solaris  
    25.   
    26. Command (m for help): w  
    27. # 此時就將 partition table 升級了!  
    28.   
    29. [root@www ~]# <span style="color:#FF0000;">partprobe</span>  
    30. # 這個玩意兒很重要的啦!不要忘記讓核心升級 partition table 喔!  
    31.   
    32.   
    33.     2. 開始建置 swap 格式  
    34.   
    35. [root@www ~]#<span style="color:#FF0000;"> mkswap /dev/hdc7</span>  
    36. Setting up swapspace version 1, size = 263172 kB  <==很是快速!  
    37.   
    38.   
    39.     3. 開始觀察與加載看看吧!  
    40.   
    41. [root@www ~]# free  
    42.              total       used       free     shared    buffers     cached  
    43. Mem:        742664     684592      58072          0      43820     497144  
    44. -/+ buffers/cache:     143628     599036  
    45. Swap:      1020088         96    1019992  
    46. # 我有 742664K 的物理內存,使用 684592K 剩餘 58072K ,使用掉的內存有  
    47. # 43820K / 497144K 用在緩衝/緩存的用途中。  
    48. # 至於 swap 已經存在了 1020088K 囉!這樣會看了吧?!  
    49.   
    50. [root@www ~]# <span style="color:#FF0000;">swapon /dev/hdc7</span>  
    51. [root@www ~]# free  
    52.              total       used       free     shared    buffers     cached  
    53. Mem:        742664     684712      57952          0      43872     497180  
    54. -/+ buffers/cache:     143660     599004  
    55. Swap:      1277088         96    1276992  <==有添加囉!看到否?  
    56.   
    57. [root@www ~]# <span style="color:#FF0000;">swapon -s</span>  
    58. Filename                 Type            Size    Used    Priority  
    59. /dev/hdc5                partition       1020088 96      -1  
    60. /dev/hdc7                partition       257000  0       -2  
    61. <span style="color:#FF0000;">上面列出目前使用的 swap 裝置有哪些的意思!</span>  

P240

使用文件構建swap

若是是在實體分割槽沒法支持的環境下,此時前一小節提到的 loop 裝置建置方法就派的上用場啦!與實體分割槽不同的只是利用 dd 去建置一個大文件而已。多說無益,咱們就再透過文件建置的方法建立一個128 MB 的內存置換空間吧!


  • 1. 使用 dd 這個命令來新增一個 128MB 的文件在 /tmp 底下:
[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
這樣一個 128MB 的文件就建置穩當。若忘記上述的各項參數的意義,請回 前一小節查閱一下囉!


  • 2. 使用 mkswap 將 /tmp/swap 這個文件格式化爲 swap 的文件格式:
[root@www ~]# mkswap /tmp/swap
Setting up swapspace version 1, size = 134213 kB
# 這個命令下達時請『特別當心』,由於下錯字節控制,將可能使您的文件系統掛掉!


  • 3. 使用 swapon 來將 /tmp/swap 啓動囉!
[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


  • 4. 使用 swapoff 關掉 swap file
[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
從上面的特殊字體部分,那就是每一個文件所使用掉 block 的容量!舉例來講,那個 crontab 雖然僅有 255bytes ,不過他卻佔用了兩個 block (每一個 block 爲 4K)


P244

parted: 雖然你可使用 fdisk 很快速的將你的分割槽切割穩當,不過 fdisk 卻沒法支持到高於 2TB 以上的分割槽!此時就得須要 parted 來處理了。

P245

  • 磁盤的使用必須要通過:分割、格式化與掛載,分別慣用的命令爲:fdisk, mkfs, mount三個命令
  • 啓動自動掛載可參考/etc/fstab之配置,配置完畢務必使用 mount -a 測試語法正確否;

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:  將多個文件或目錄包成一個大文件的命令功能。前一小節談到的命令大多僅能針對單一文件來進行壓縮。

  • cvf    create  verbose  filename 壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的文件或目錄名稱 
  • tvf     list   查 詢:tar -jtv -f filename.tar.bz2                                            
  • xvf    extract  f解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄          

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 的區塊),很不錯啊~
P270

cpio  :cpio 能夠備份任何東西,包括裝置設備文件。不過 cpio 有個大問題,那就是 cpio 不會主動的去找文件來備份!啊!那怎辦?因此羅,通常來講, cpio 得要配合相似find等能夠找到檔名的命令來告知 cpio 該被備份的數據在哪裏啊!

  • 備份:find / | cpio -ocvB > /dev/st0
  • 還原:cpio -idvc < /dev/st0

P273

  • 情境模擬題二:你想要逐時備份 /srv/myproject 這個目錄內的數據,又擔憂每次備份的資訊太多,所以想要使用 dump 的方式來逐一備份數據到 /backups 這個目錄下。該如何處理?

    • 目標:瞭解到 dump 以及各個不一樣 level 的做用;
    • 前提:被備份的數據爲單一 partition ,亦即本例中的 /srv/myproject
    • 需求:/srv/myproject 爲單一 filesystem ,且在 /etc/fstab 內此掛載點的 dump 欄位爲 1

    實際處理的方法其實還挺簡單的!咱們能夠這樣作看看:

    1. 先替該目錄製做一些數據,亦即複製一些東西過去吧!
      cp -a /etc /boot /srv/myproject

    2. 開始進行 dump ,記得,一開始是使用 level 0 的完整備份喔!
      mkdir /backups
      dump -0u -j -f /backups/myproject.dump /srv/myproject

      上面多了個 -j 的選項,目的是爲了要進行壓縮,減小備份的數據量。

    3. 嘗試將 /srv/myproject 這個文件系統加大,將 /var/log/ 的數據複製進去吧!
      cp -a /var/log/ /srv/myproject
      此時本來的 /srv/myproject 已經被改變了!繼續進行備份看看!

    4. 將 /srv/myproject 以 level 1 來進行備份:
      dump -1u -j -f /backups/myproject.dump.1 /srv/myproject    (-u將此次dump的時間記錄到/etc/dumpdateS文件中,-j加入bzip2的支持,-f 後面接file)
      ls -l /backups

      你應該就會看到兩個文件,其中第二個文件 (myproject.dump.1) 會小的多!這樣就搞定羅備份數據!

  • 情境模擬三:假設過了一段時間後,你的 /srv/myproject 變的怪怪的,你想要將該 filesystem 以剛剛的備份數據還原,此時該如何處理呢?你能夠這樣作的:

    1. 先將 /srv/myproject 卸載,而且將該 partition 從新格式化!
      umount /dev/hdc6
      mkfs -t ext3 /dev/hdc6


    2. 從新掛載本來的 partition ,此時該目錄內容應該是空的!
      mount -a
      你能夠自行使用 df 以及 ls -l /srv/myproject 查閱一下該目錄的內容,是空的啦!

    3. 將完整備份的 level 0 的文件 /backups/myproject.dump 還原回來:
      cd /srv/myproject
      restore -r -f /backups/myproject.dump

      此時該目錄的內容爲第一次備份的狀態!還須要進行後續的處理才行!

    4. 將後續的 level 1 的備份也還原回來:
      cd /srv/myproject restore -r -f /backups/myproject.dump.1 此時纔是恢復到最後一次備份的階段!若是還有 level 2, level 3 時,就得要一個一個的依序還原才行!
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息