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

相关文章
相关标签/搜索