檔案系統的簡單操作


		df 		 查看檔案系統空間的使用狀況。

du 查看檔案或目錄容量。
ln 檔案的連結。
  1. df:查看檔案系統空間的使用狀況。
    [root@linux ~]# df [-ahikHTm] [目錄或檔名]
    參數:
    -a  :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統;
    -k  :以 KBytes 的容量顯示各檔案系統;
    -m  :以 MBytes 的容量顯示各檔案系統;
    -h  :以較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;
    -H  :以 M=1000K 取代 M=1024K 的進位方式;
    -T  :連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出;
    -i  :不用硬碟容量,而以 inode 的數量來顯示
    
    #範例:
    #範例一:將系統內所有的 partition 列出來
    [root@dywOffice ~]# df
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda1             2.0G  260M  1.6G  14% /
    /dev/hda9              25G   20G  4.5G  82% /home
    /dev/hda7             7.7G  3.2G  4.2G  44% /usr
    /dev/hda8             4.9G  506M  4.1G  11% /var
    /dev/hda6             981M  171M  761M  19% /home/ftp
    /dev/hda10             33G   20G   11G  65% /backup
    
    #範例二:將容量結果以易讀的容量格式顯示出來
    [root@dywOffice ~]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda1             2.0G  260M  1.6G  14% /
    /dev/hda9              25G   20G  4.5G  82% /home
    /dev/hda7             7.7G  3.2G  4.2G  44% /usr
    /dev/hda8             4.9G  506M  4.1G  11% /var
    /dev/hda6             981M  171M  761M  19% /home/ftp
    /dev/hda10             33G   20G   11G  65% /backup
    
    #範例三:將系統內的所有特殊檔案格式及名稱都列出來
    [root@dywOffice ~]# df -aT
    Filesystem    Type    Size  Used Avail Use% Mounted on
    /dev/hda1     ext3    2.0G  260M  1.6G  14% /
    none          proc       0     0     0   -  /proc
    /dev/hda9     ext3     25G   20G  4.5G  82% /home
    /dev/hda7     ext3    7.7G  3.2G  4.2G  44% /usr
    /dev/hda8     ext3    4.9G  506M  4.1G  11% /var
    none   binfmt_misc       0     0     0   -  /proc/sys/fs/binfmt_misc
    /dev/hda6     ext3    981M  171M  761M  19% /home/ftp
    /dev/hda10    ext3     33G   20G   11G  65% /backup
    
    #範例四:將 /etc 底下的可用的磁碟容量以易讀的容量格式顯示
    [root@dywOffice ~]# df -h /etc
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda1             2.0G  260M  1.6G  14% /
    
    #範例五:將目前各個 partition 當中可用的 inode 數量列出
    [root@dywOffice ~]# df -ih
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/hda1               250K     25K    226K   10% /
    /dev/hda9               3.1M    136K    3.0M    5% /home
    /dev/hda7              1000K    170K    831K   17% /usr
    /dev/hda8               625K    2.2K    623K    1% /var
    /dev/hda6               125K     829    125K    1% /home/ftp
    /dev/hda10              4.2M    242K    3.9M    6% /backup
    
  2. du:查看檔案或目錄容量。
    [root@linux ~]# du [-ahskm] 檔案或目錄名稱
    參數:
    -a  :列出所有的檔案與目錄容量,預設僅統計工作目錄下的檔案。
    -h  :以較易讀的容量格式 (G/M) 顯示;
    -s  :列出總量,而不列出各別的目錄佔用容量;
    -k  :以 KBytes 列出容量顯示;
    -m  :以 MBytes 列出容量顯示;
    
    #範例:
    #範例一:列出目前目錄下的所有檔案容量
    [dywang@dywOffice dutest]$ ll
    total 12
    drwxr-xr-x 2 dywang users 4096 Nov 30 13:15 dutest1/
    -rw-r--r-- 1 dywang users    6 Nov 30 13:16 test1
    -rw-r--r-- 1 dywang users    0 Nov 30 13:14 test1~
    -rw-r--r-- 1 dywang users    7 Nov 30 13:16 test2
    -rw-r--r-- 1 dywang users    0 Nov 30 13:14 test2~
    -rw-r--r-- 1 dywang users    0 Nov 30 13:15 test3
    [dywang@dywOffice dutest]$ du
    4.0K    ./dutest1
    16K     .
    [dywang@dywOffice dutest]$ du -a
    4.0K    ./test1  %*<==檔案大小 6 bytes 但佔用 4k bytes,可見 block size 為 4k bytes。*)
    4.0K    ./test2
    4.0K    ./dutest1
    0       ./test3
    0       ./test1~
    0       ./test2~
    16K     .
    
    #範例二:檢查根目錄 /root 底下每個目錄所佔用的容量
    [root@dywOffice ~]# du -sm /root/*
    9       /root/core.29348
    10      /root/core.29452
    9       /root/core.29456
    1       /root/Documents
    1       /root/Download
    2       /root/drakx
    1       /root/Music
    1       /root/Pictures
    1       /root/presets
    25      /root/tmp
    1       /root/Video
    

  3. 連結檔案
    1. 硬式連結 (hard link):
      1. 在某目錄下新增一個該檔案的關連資料。
      2. 假設 /home/test/issue 為一個硬式連結檔案,其連結到 /etc/issue,則只是在目錄 /home/test/ 所記錄的關連資料增加一筆資料,讓其指向 /etc/issue。
      3. 刪除檔案時僅是移除其在目錄中的關連資料,並未更動檔案的 inode 及 block 資料。
      4. 若有兩個目錄之關連資料有指向檔案 /etc/issue,即使刪除其中一個關連資料,另一關連資料仍可正常讀取檔案。
      5. 硬式連結之限制:
        1. 不能跨檔案系統﹔
        2. 不能連結目錄。
    2. 符號連結 (Symbolic link)
      1. 建立一個獨立檔案,此檔案讓資料的讀取指向連結的檔案內容。
      2. 佔用 inode 與 block (存連結檔的檔名,以指向該檔案)。
      3. 當來源檔被刪除之後,符號連結的檔案將無法開啟。
    3. 空的目錄中至少會有兩個關連資料 (現在目錄 . 及 上層目錄 ..)。
  4. ln:檔案的連結。
    [root@linux ~]# ln [-sf] 來源檔 目標檔
    參數:
    -s  :不加任何參數是 hard link, -s 是 symbolic link
    -f  :如果目標檔存在,強制將目標檔移除後再建立。
    
    #範例:
    #範例一:將 /etc/passwd 複製到 /tmp 底下,並且觀察 inode 與 block
    [root@linux ~]# cd /tmp
    [root@linux tmp]# cp -a /etc/passwd .
    [root@linux tmp]# du -sb ; df -i .
    26948   . %*<== 容量*)
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/hda1            1537088  144016 1393072   10% /
    
    #範例二:將 /tmp/passwd 製作 hard link 成為 passwd-hd 檔案
    [root@linux tmp]# ln passwd passwd-hd
    [root@linux tmp]# du -sb ; df -i .
    26948   . %*<== 容量不變*)
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/hda1            1537088  144016 1393072   10% /
    #  /tmp 下多了一個檔案,但 inode 與 block 的容量並沒改變。
    [root@linux tmp]# ls -il passwd*
    1242760 -rw-r--r--  2 root root 1746 Jun 29 01:03 passwd
    1242760 -rw-r--r--  2 root root 1746 Jun 29 01:03 passwd-hd
    # 兩個檔案指向同一個 inode。
    
    #範例三:將 /tmp/passwd 建立一個符號連結
    [root@linux tmp]# ln -s passwd passwd-so
    [root@linux tmp]# ls -li passwd*
    1242760 -rw-r--r--  2 root root 1746 Jun 29 01:03 passwd
    1242760 -rw-r--r--  2 root root 1746 Jun 29 01:03 passwd-hd
    1242806 lrwxrwxrwx  1 root root    6 Jul 23 20:02 passwd-so -> passwd
    # passwd-so 的 inode number 不同,檔案的大小 6bytes (passwd 共有六個字元)。
    [root@linux tmp]# du -sb ; df -i .
    26954   .
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/hda1            1537088  144017 1393071   10% /
    # 容量與 inode 使用數都改變。
    
    #範例四:刪除原始檔案 passwd ,其他兩個檔案是否能夠開啟?
    [root@linux tmp]# rm passwd
    [root@linux tmp]# cat passwd-hd
    ......正常顯示完畢。
    [root@linux tmp]# cat passwd-so
    cat: passwd-so: No such file or directory
    # 無法正常的開啟。
    

練習題

  1. 如何列出 linux 所有的檔案系統?
    Sol. df
  2. 如何以易讀的容量格式列出 linux 所有的檔案系統?
    Sol. df -h
  3. 如何列出 linux 所有的 partitions 及其檔案系統名稱?
    Sol. df -T
  4. 如何列出 linux 所有的 partitions 及其 inode 使用狀況列?
    Sol. df -i
  5. 如何列出 linux 所有的 partitions 包括所有特殊檔案格式?
    Sol. df -a
  6. 如果 block 大小為 4k bytes,檔案 foo 大小為 100 bytes,則以 du foo 列出的檔案佔用容量為何?
    Sol. 4k bytes
  7. 如果檔案 foo 大小為 2.1k bytes,以 du foo 列出的檔案佔用容量為 3k bytes,則 block 大小為何?
    Sol. block 大小為 1k bytes,
  8. 如何列出工作目錄下所有的檔案與目錄容量?
    Sol. du -a
  9. 如何列出工作目錄容量總量,但不列出各別的目錄佔用容量?
    Sol. du -s
  10. 如何列出工作目錄容量總量,但不列出各別的目錄佔用容量,且以較易讀的格式(如 G 或 M)顯示?
    Sol. du -sh
  11. 如何列出工作目錄容量總量,但不列出各別的目錄佔用容量,且以 Mbytes 格式顯示?
    Sol. du -sm
  12. 如何列出目錄 /etc 容量總量,但不列出各別的目錄佔用容量,且以 kbytes 格式顯示?
    Sol. du -sk /etc
  13. 指令 ln 有那兩種連結檔案方式?
    Sol. hard link (硬式連結),symbolic link (符號式連結)。
  14. 那種連結檔案方式只是在目錄所記錄的關連資料增加一筆資料,讓其指向目標檔案,並未佔用 inode?
    Sol. hard link (硬式連結)
  15. 若 /etc/issue-ln 為 /etc/issue 之硬式連結檔案,刪除 /etc/issue-ln 後 /etc/issue 是否能正常讀取?
    Sol. 可以
  16. 若 /etc/issue-ln 為 /etc/issue 之硬式連結檔案,刪除 /etc/issue 後 /etc/issue-ln 是否能正常讀取?
    Sol. 可以
  17. 若 /etc/issue-ln 為 /etc/issue 之硬式連結檔案,則 /etc/issue-ln 與 /etc/issue 的 inode 是否相同?
    Sol. 相同。
  18. ln /etc/issue /home/csie/issue-ln 要成功執行,則目錄 /etc 與 /home/csie 要有何限制?
    Sol. 同一檔案系統(分割槽)
  19. ln /etc /backup/etc 是否可以成功執行,為什麼?
    Sol. /etc 為一目錄,硬式連結無法連結目錄
  20. 那種連結檔案方式,會建立一個獨立檔案,讓資料的讀取指向連結的檔案內容,故會佔用 inode 及 block?
    Sol. symbolic link (符號式連結)
  21. 若 /etc/issue-ln 為 /etc/issue 之符號式連結檔案,刪除 /etc/issue-ln 後 /etc/issue 是否能正常讀取?
    Sol. 可以
  22. 若 /etc/issue-ln 為 /etc/issue 之符號式連結檔案,刪除 /etc/issue 後 /etc/issue-ln 是否能正常讀取?
    Sol. 不可以
  23. 若 /etc/issue-ln 為 /etc/issue 之符號式連結檔案,則 /etc/issue-ln 與 /etc/issue 的 inode 是否相同?
    Sol. 不相同。
  24. 空的目錄中至少會有那兩個關連資料。
    Sol. 現在目錄 . 及 上層目錄 ..
  25. 如何產生 /etc/issue 之符號式連結檔案 /etc/issue-ln?
    Sol. ln -s /etc/issue /etc/issue-ln
  26. 如何產生 /etc/issue 之硬式連結檔案 /etc/issue-ln?
    Sol. ln /etc/issue /etc/issue-ln
  27. 如何產生 /etc/issue 之符號式連結檔案 /etc/issue-ln,若 /etc/issue-ln 已存在則直接覆蓋?
    Sol. ln -sf /etc/issue /etc/issue-ln

  DYWANG_HOME