Linux經常使用命令_(磁盤管理)

磁盤信息:df、duphp

df命令
–功能:檢查文件系統的磁盤空間佔用狀況
–語法:df [選項]
–選項:
-a 顯示全部文件系統的磁盤使用狀況,包括0塊(block)的文件系統,如/proc文件系統。
-k 以k字節爲單位顯示。
-h 以可讀性較好的方式顯示。
-T 顯示文件系統類型。
範例:
df -hnode

 

 

du -h -slinux

du -h -s /* | sort
查看/ 目錄下 全部文件夾大小命令
1.0K      /lu1 1.1G      /lu2 11M       /lu3 2.2G      /lu5 6.0M      /lu56 6.9M      /lu567 80M       /lu5678安全

查看目錄的大小 du -sh dirname -s 僅顯示總計 -h 以k、m、g爲單位,提升信息的可讀性。kb、mb、gb是以1024爲換算單 位, -h以1000爲換算單位
如下是剛裝好的RH9.0(所有) Linux目錄大小參考: /usr    4.5G /usr/share 2.2Gbash

/usr/src     189Mssh

/usr/games 3.9Mpost

/usr/X11R6 173M測試

/usr/lib       1.5Gspa

/usr/include 91M指針

/usr/bin       258M
/var          250M

 

 

du:

du (disk usage)命令
–功能:統計目錄(或文件)所佔磁盤空間的大小
–說明:該命令逐級進入指定目錄的每個子目錄並顯示該目錄佔用文件系統數據塊(1024字節)的狀況。若沒有給出Names,則對當前目錄進行統計。
–選項:
-s 對每一個Names參數只給出佔用的數據塊總數
-a 遞歸地顯示指定目錄中各文件及子孫目錄中各文件佔用的數據塊數。若既不指定-s,也不指定-a,則只顯示Names中的每個目錄及其中的各子目錄所佔的磁盤塊數。
-b 以字節爲單位列出磁盤空間使用狀況(系統缺省以k字節爲單位)。
-k 以1024字節爲單位列出磁盤空間使用狀況。
-c 最後再加上一個總計(系統缺省設置)。
-l 計算全部的文件大小,對硬連接文件,則計算屢次


磁盤加載:mount、umount

磁盤
–mount /dev/floppy /media/floppy
–umount /dev/floppy

光盤
–mount /dev/cdrom /media/cdrom
–umount /dev/cdrom

USB
–fdisk -l /dev/sda (USB設備名,不一樣機器上顯示可能不同)
–mkdir /mnt/usb
–mount -t vfat /dev/sda2 /mnt/usb
–ls /mnt/usb
–umount /dev/sda2


磁盤分區:fdisk

 

df 和 du命令比較:

df命令用來查看磁盤的使用狀況。經常使用df -ah   或者  df -h;能夠查看一級文件夾大小、使用比例、檔案系統及其掛入點,但對文件卻無能爲力

du能夠查看文件及文件夾的大小,統計文件大小相加。du命令用來查詢檔案或目錄的磁盤使用空間,經常使用:du -sh 目錄    或者   du -h 目錄

df  統計數據塊使用狀況

    若是有一個進程在打開一個大文件的時候,這個大文件直接被rm 或者mv掉,則du會更新統計數值,df不會更新統計數值,仍是認爲空間沒有釋放。直到這個打開大文件的進程被Kill掉。

    如此一來在按期刪除 /var/spool/clientmqueue下面的文件時,若是沒有殺掉其進程,那麼空間一直沒有釋放。

    使用下面的命令殺掉進程以後,系統恢復。

    二者配合使用,很是有效。好比用df查看哪一個一級目錄過大,而後用du查看文件夾或文件的大小,如此即可迅速肯定癥結。

 

    下面分別簡要介紹

df命令參數: 

  • -a:顯示所有的檔案系統和各分割區的磁盤使用情形 
  • -i:顯示i -nodes的使用量 
  • -k:大小用k來表示 (默認值) 
  • -t:顯示某一個檔案系統的全部分割區磁盤使用量 
  • -x:顯示不是某一個檔案系統的全部分割區磁盤使用量 
  • -T:顯示每一個分割區所屬的檔案系統名稱 
  • -h :以 MB、GB爲單位顯示檔案系統大小,使用易讀的格式,可是計算式,1K=1000,而不是1K=1024

經常使用命令:df -ah
使用實例: 
# df -h 

Filesystem           Size      Used       Avail      Capacity     Mounted on 

/dev/ad0s1a        1.9G     389M      1.4G         21%             / 

devfs                   1.0K     1.0K         0B         100%          /dev 

/dev/ad0s1d        989M     54K        910M         0%           /tmp 

/dev/ad0s1f         4.8G      3.8G       657M       86%           /usr 

/dev/ad0s1e        1.9G      149M       1.6G         8%            /var 

/dev/ad0s1g        26G       890K        24G          0%           /volume2 

/dev/da0s1d        325G     261G        38G          87%          /volume1 
咱們加了。 
上面的指令輸出的第一個字段及最後一個字段分別是檔案系統及其掛入點。

咱們能夠看到 /dev/ad0s1a 這個分割區被掛在根目錄下。咱們在上一小節提到過 ad 所表明的是 IDE 的硬盤,而 s1 表示第一個主要扇區。我另外有一個 SCSI 硬盤,它的代號是 da,它的容量很大,主要用來存放數據。devfs 是一個特別的檔案系統,該檔案系統並不是真的磁盤,而是 FreeBSD 用來管理系統硬件裝置的虛擬檔案系統。 
接下來的四個字段 Size、Used、Avail、及 Capacity 分別是該分割區的容量、已使用的大小、剩下的大小、及使用的百分比。當硬盤容量已滿時,您可能會看到已使用的百分比超過 100%,由於 FreeBSD 會留一些空間給 root,讓 root 在檔案系統滿時,仍是能夠寫東西到該檔案系統中,以進行管理。 
另外,咱們還可使用參數 -i 來查看目前檔案系統 inode 的使用情形。有的時候雖然檔案系統還有空間,但若沒有足夠的 inode 來存放檔案的信息,同樣會不能增長新的檔案。 
# df -ih 
Filesystem      Size     Used      Avail    Capacity     iused      ifree     %iused   Mounted on 
/dev/ad0s1a   1.9G    389M     1.4G        21%      20495    262127      7%           / 
devfs              1.0K    1.0K       0B         100%         0            0         100%        /dev 
/dev/ad0s1d    989M   62K      910M         0%         24       141286       0%        /tmp 
/dev/ad0s1f     4.8G   3.8G      657M        86%      311439  348015      47%       /usr 
/dev/ad0s1e    1.9G    149M     1.6G         8%       1758     280864       1%        /var 
/dev/ad0s1g     26G    890K       24G         0%         12      3532786      0%      /volume2 
/dev/da0s1d    325G    261G      38G       87%      707277 43311409     2%      /volume1 

咱們能夠看到根目錄的已經用掉的 inode 數量爲 20495,還有 262127 的可用 inode。 
所謂的 inode 是用來存放檔案及目錄的基本信息 (metadata),包含時間、檔名、使用者及羣組等。在分割扇區時,系統會先作出一堆 inode 以供之後使用,inode 的數量關係着系統中能夠創建的檔案及目錄總數。若是要存的檔案大部分都很小,則一樣大小的硬盤中會有較多的檔案,也就是說須要較多的 inode 來掛檔案及目錄。 

 

du:查詢檔案或目錄的磁盤使用空間 (定位哪一個文件佔用的空間多,消耗磁盤空間)

  • -a:顯示所有目錄和其次目錄下的每一個檔案所佔的磁盤空間 
  • -b:顯示目錄或文件大小時,以byte爲單位 
  • -c:最後再加上總計 (默認值) ,除了顯示每一個目錄或文件的大小外,同時也顯示全部目錄或文件的總和。
  • -s:只顯示各檔案大小的總合 (summarize),僅顯示總計,只列出最後加總的值 
  • -x:只計算同屬同一個檔案系統的檔案 
  • -L:計算全部的檔案大小 
  • -h :以K,M,G爲單位顯示檔案系統大小,提升信息的可讀性。
  • -k :以KB(1024bytes)爲單位輸出
  • -m: 以MB爲單位輸出
  • -X:-X<文件>或--exclude-from=<文件>  在<文件>指定目錄或文件。 
  • --exclude=<目錄或文件>         略過指定的目錄或文件。
  • -H:-H與-h參數相同,可是K,M,G是以1000爲換算單位。

經常使用命令:du -a 


實例使用
引用  指令 du 能以指定的目錄下的子目錄爲單位,顯示每一個目錄內全部檔案所佔用的磁盤空間大小。例如: 
# du -h /etc 
104K /etc/defaults 
6.0K /etc/X11 
8.0K /etc/bluetooth 
4.0K /etc/gnats 
52K /etc/isdn 
388K /etc/mail 
68K /etc/mtree 
2.0K /etc/ntp 
38K /etc/pam.d 
44K /etc/periodic/daily 
6.0K /etc/periodic/monthly 
42K /etc/periodic/security 
16K /etc/periodic/weekly 
110K /etc/periodic 
6.0K /etc/ppp 
318K /etc/rc.d 
2.0K /etc/skel 
130K /etc/ssh 
10K /etc/ssl 
1.7M /etc 

在應用時,咱們可使用 du 這個指令來查看哪一個目錄佔用最多的空間。不過,du 的輸出結果一般很長,咱們能夠加上 -s 參數來省略指定目錄下的子目錄,而只顯示該目錄的總合便可: 
# du -sh /etc 

1.7M /etc 

在查看目錄的使用情形時,咱們能夠將輸出結果導到 sort 指令進行排序,以瞭解哪一個檔案用了最多的空間:

# du /etc | sort -nr | more 
1746 /etc 
388 /etc/mail 
318 /etc/rc.d 
130 /etc/ssh 
110 /etc/periodic 
104 /etc/defaults 
68 /etc/mtree 
52 /etc/isdn 
44 /etc/periodic/daily 
42 /etc/periodic/security 
38 /etc/pam.d 
16 /etc/periodic/weekly 
10 /etc/ssl 
8 /etc/bluetooth 
6 /etc/ppp 
6 /etc/periodic/monthly 
6 /etc/X11 
4 /etc/gnats 
2 /etc/skel 
2 /etc/ntp 
 
sort 的參數 -nr 表示要以數字排序法進行反向排序,由於咱們要對目錄大小作排序,因此不可使用 human-readable 的大小輸出,否則目錄大小中會有 K、M 等字樣,會形成排序不正確。

 

1> 要顯示一個目錄樹及其每一個子樹的磁盤使用狀況

#du /home

這在/home目錄及其每一個子目錄中顯示了磁盤塊數。只顯示目錄,不顯示文件

2> 要經過以1024字節爲單位顯示一個目錄樹及其每一個子樹的磁盤使用狀況

#du -k /home/

這在/home目錄及其每一個子目錄中顯示了 1024 字節磁盤塊數。

3> 以MB爲單位顯示一個目錄樹及其每一個子樹的磁盤使用狀況

#du -m  /home/

這在/home/linux目錄及其每一個子目錄中顯示了 MB 磁盤塊數。

4>查看當前目錄下全部目錄以及子目錄的大小:

#du -h  /home    //經常使用

「.」表明當前目錄下。

也能夠換成一個明確的路徑 -h表示用K、M、G的人性化形式顯示

5>查看當前目錄下user目錄的大小,並不想看其餘目錄以及其子目錄:

#du -sh /home                    經常使用到的方式

-s表示總結的意思,即只列出一個總結的值,

6>查看當前目錄下每一個目錄/文件的大小,不顯示子目錄中的文件的大小

    若是當前目錄下文件和文件夾不少,使用不帶參數du的命令,能夠循環列出全部文件和文件夾所使用的空間。這對查看到底是那個地方過大是不利的,因此得指定 深刻目錄的層數,參數:--max-depth=,這是個極爲有用的參數!以下,注意使用「*」,能夠獲得文件的使用空間大小.

#du -h –-max-depth=1 .        //--max-depth=n表示只深刻到第n層目錄,此處設置爲1,即表示不深刻到子目錄。輸出當前目錄下各個子目錄所使用的空間

#du -h –-max-depth=0 /home    //表示統計home文件夾的大小

 7>列出user目錄及其子目錄下全部目錄和文件的大小:

#du -ah /home -a表示包括目錄和文件

8>列出當前目錄中的目錄名不包括xyz字符串的目錄的大小:

du -h --exclude=’*xyz*’

 

 

[root@bsso yayu]# du -h --max-depth=1 work/testing

27M     work/testing/logs

35M     work/testing

[root@bsso yayu]# du -h --max-depth=1 work/testing/*

8.0K    work/testing/func.php

27M     work/testing/logs

8.1M    work/testing/nohup.out

8.0K    work/testing/testing_c.php

12K     work/testing/testing_func_reg.php

8.0K    work/testing/testing_get.php

8.0K    work/testing/testing_g.php

8.0K    work/testing/var.php

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/

27M     work/testing/logs/

[root@bsso yayu]# du -h --max-depth=1 work/testing/logs/*

24K     work/testing/logs/errdate.log_show.log

8.0K    work/testing/logs/pertime_show.log

27M     work/testing/logs/show.log

 

  df命令是linux系統以磁盤分區爲單位查看文件系統,能夠加上參數查看磁盤剩餘空間信息,命令格式:    
df -hl    顯示格式爲:     
文件系統              容量      已用       可用      已用%      掛載點       
Filesystem          Size    Used       Avail      Use%   Mounted on      
/dev/hda2          45G     19G        24G       44%          /      
/dev/hda1          494M   19M       450M       4%        /boot      
/dev/hda6          4.9G    2.2G       2.5G       47%      /home      
/dev/hda5          9.7G    2.9G       6.4G       31%       /opt      
none                 1009M    0         1009M      0%       /dev/shm      
/dev/hda3          9.7G    7.2G        2.1G      78%      /usr/local      
/dev/hdb2           75G    75G          0         100%         /      
/dev/hdb2           75G     75G         0         100%          / 
以上面的意思爲:HD硬盤接口的第二個硬盤(b),第二個分區(2),容量是75G,用了75G,可用是0,所以利用率是100%, 被掛載到根分區目錄上(/)。 
下面是相關命令的解釋: 
df -hl 查看磁盤剩餘空間 
df -h 查看每一個根路徑的分區大小 
du -sh [目錄名] 返回該目錄的大小 
du -sm [文件夾] 返回該文件夾總M數 
 

查看linux文件目錄的大小和文件夾包含的文件數 
統計總數大小 
du -sh xmldb/ 
du -sm * | sort -n //統計當前目錄大小 並安大小 排序 
du -sk * | sort -n 
du -sk * | grep guojf //看一我的的大小 
du -m | cut -d "/" -f 2 //看第二個/ 字符前的文字 
查看此文件夾有多少文件 /*/*/* 有多少文件 
du xmldb/        
du xmldb/*/*/* |wc -l 
      40752 
    解釋: 
      wc [-lmw] 
    參數說明: 
      -l :多少行 
      -m:多少字符 
      -w:多少字 
 
 
 Linux、Unix-Like平臺的用戶均可能會發現,du與df的查詢結果會不一致。最多見的狀況就是,df顯示的已使用磁盤佔用率比du統計出來的結果要大不少。

  下面說下二者結果不一樣的緣由,主要是因爲二者計算結果的方式不一樣。

  先來看看二者是如何計算的

  df命令:

  df是從文件系統考慮,經過文件系統中未分配的空間來肯定文件系統中已分配空間的大小。例如:若是一個文件系統中有8192個512-byte 塊,而且4096個塊沒有被分配出去,那麼已分配的空間就是4096個512-byte 的塊。

  已分配空間=空間總數-未分配空間

  df中的used還包含了程序申請的、被程序佔用的空間等等。由於基於文件系統整體來計算,因此df命令是報告文件系統空間使用狀況最可靠的命令。

  du命令

  du是面向文件的命令,它計算分配給指定文件或者目錄的空間。du命令必須跟着目的參數,並且不能隔離文件系統。

  例如:運行 #du /命令將計算全部在/文件系統下全部文件的空間分配信息。其中包括/文件系統全部的文件和安裝在/下面的,例如/tmp, /var和/usr下面的其餘文件系統的文件。能夠用du命令帶-x參數來限制僅在文件系統內進行操做。可是有時候會致使輸出結果不徹底。

  du命令只計算被文件佔用的空間。不計算文件系統metadata 佔用的空間,如inodes, inode maps, 或者disk maps。

  du命令只計算那些能夠訪問的文件所佔用的存儲空間。

  下面兩種狀況du命令不會計算已經分配給文件的空間。

  Case1:

  文件被隱藏了。

  例如:若是一個文件存放在/bobby 目錄下, 接着有文件系統安裝(mount)在/bobby目錄下, 那麼du 命令將不會計算 /bobby 目錄下的文件所佔用的存儲空間。

  Case2:

  文件被其餘的應用的打開了,接着文件被刪除了(rm命令刪除)。 在這種狀況下,文件所佔用的存儲空間將維持着被分配的狀態直到全部對這個文件的訪問都被關閉。因爲目錄中沒有這個文件的相關紀錄,du命令將不會計算這個文件的被分配空間,但df命令將計算這部分已分配的空間。

  除rm外,有些不明顯的操做也會產生相似的問題。

  例如gzip命令,其對某個文件xxx.log進行壓縮時,會產生一個新的xxx.log.gz文件,完成後,會把原來的xxx.log刪除。這時,若仍有進程在使用xxx.log文件。那麼,實際上該文件仍是隻會標記爲deleted,其空間也不會釋放,問題與上面提到的狀況是相同的。因此,在編寫腳本時,可先判斷是否仍有進程正在使用該文件,而後再進行gzip操做。

  通俗點講,du就是遍歷某個目錄,把全部文件的大小加起來,都是那看得見的東西的和

  簡單的模擬測試實驗(如下實驗屬引用,未測試。看了下輸出,結果應該沒問題。呵呵!)

  實驗狀況

  一、建立並刪除文件

  建立文件前的磁盤容量狀況:

 
1
2
3
4
# df -h
文件系統      容量   已用   可用   已用%   掛載點
/dev/sda1    12G   5.7G  5.5G   51%      /
tmpfs        506M   0    506M   0%    /dev/shm

  建立文件: 

1
2
3
4
# dd if=/dev/zero of=test.iso bs=1024k count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 14.3055 seconds, 73.3 MB/s

  如今的磁盤狀況: 

1
2
3
4
# df -h
文件系統       容量   已用   可用   已用%   掛載點
/dev/sda1     12G   6.7G  4.6G   60%      /
tmpfs         506M   0    506M    0%   /dev/shm

  模擬某個進程正在使用該文件: 

1
# tail -f /tmp/test.iso

二、刪除該文件

  打開另外一個終端,登錄到系統中。查看是否有進程正在使用上面建立的文件: 

1
2
# lsof |grep test.iso
tail      2175      root    3r      REG        8,1 1048576000     752972 /tmp/test.iso

  把該文件刪掉,並確認: 

1
2
3
4
# rm /tmp/test.iso
rm:是否刪除 通常文件 「/tmp/test.iso」? y
# ls /tmp/test.iso
ls: /tmp/test.iso: 沒有那個文件或目錄

  查看是否還有進程在使用(注意結尾的標記):

 
1
2
# lsof |grep test.iso
tail      2175      root    3r      REG        8,1 1048576000     752972 /tmp/test.iso (deleted)

  查看磁盤使用狀況: 

1
2
3
4
5
6
7
# df -h
文件系統        容量    已用    可用   已用%   掛載點
/dev/sda1      12G    6.7G   4.6G   60%     /
tmpfs          506M    0     506M   0%    /dev/shm
 
# cat /proc/diskstats |grep sda1
   8    1 sda1 54385 5184 1626626 130090 20434 635997 5251448 5345733 0 111685 5475829

  可見,雖然從ls已經沒法找到該文件,但由於tail進程仍在使用該文件,故實際上內核並無把這文件所佔用的空間釋放出來(df的結果)。

  三、中止相關進程

  回到第一終端,用Ctrl+C 終止tail 進程,查看結果: 

1
2
3
4
5
6
7
# df -h
文件系統              容量  已用 可用 已用% 掛載點
/dev/sda1              12G  5.7G  5.5G  51% /
tmpfs                 506M     0  506M   0% /dev/shm
 
# cat /proc/diskstats |grep sda1
   8    1 sda1 54473 5184 1627402 130617 20453 636042 5251960 5345756 0 112226 5476379

  至此,文件所佔用的空間已徹底釋放。

  從上面的實驗,可得出一些狀況:

  一、如有進程在佔用某個文件,而其餘進程把這文件刪掉,只會刪除其在磁盤中的標記,而不會釋放其佔用的磁盤空間;直到全部訪問該文件的進程退出爲止;   二、df是從內核中獲取磁盤佔用狀況數據的,而du是統計當前磁盤文件大小的結果,因爲磁盤標記已被刪掉,所以du 不會計算上述被刪除文件的空間,致使df 與 du的結果不一致。

  解決問題

  一般的解決方法有兩個

  一、把佔用文件的相關進程關閉

  這可經過下面的命令獲得這些已被刪除,但未釋放空間的文件和進程信息: 

1
# lsof |grep deleted

  找到這些進程後,在安全的狀況下把其關閉,空間自會立刻釋放。

  二、以清空的方式替代刪除

  歸根到底,產生問題的緣由是,訪問該文件的文件指針(句柄),在rm動做後,由於進程仍在訪問,所以,仍處在文件裏面(中間或結尾處)。因此,若是用清空的方式,把文件指針重置,該文件所佔用的空間也會立刻釋放出來。

1
2
3
4
5
6
7
8
9
# echo > /tmp/test.iso
 
# df -h
文件系統              容量  已用 可用 已用% 掛載點
/dev/sda1              12G  5.7G  5.5G  51% /
tmpfs                 506M     0  506M   0% /dev/shm
 
# tail -f /tmp/test.iso
tail: /tmp/test.iso: file truncated

  因此,對於常發生相似問題的文件,如:日誌記錄文件等。以更名、清空、刪除的順序操做可避免問題。

 

 

fdisk

相關文章
相關標籤/搜索