linux查看磁盘容量


父目录:linux磁盘管理

我们知道目录文件中存储的是该目录下文件的文件名和inode的对应关系。通过ls命令查看的目录大小,其实代表的是这个目录中文件数量的多少。 并不反应目录实际在磁盘中所占的容量。通过df命令可以知道磁盘的总容量,du命令可以查看某个目录所占的磁盘容量。

一.df和du命令查看磁盘和目录的容量

回到顶部

1.df命令

回到顶部
df命令列出文件系统的整体磁盘使用量;
df命令常用格式如下:
              [root@initroot ~]# df [-ahikHTm] [目录或文件名]
              
选项与参数:
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :连同该 partition 的 filesystem 名称 (例如 xfs) 也列出;
-i :不用磁盘容量,而以 inode 的数量来显示
列出系统中所有的filesystem:
[root@initroot ~]# df
Filesystem     1K-blocks     Used Available Use% Mounted on
udev             2502456        0   2502456   0% /dev
tmpfs             507140     2112    505028   1% /run
/dev/sda1       92364456 26831636  60797948  31% /
tmpfs            2535688   124976   2410712   5% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
tmpfs            2535688        0   2535688   0% /sys/fs/cgroup
virtualshare   312568828 73574916 238993912  24% /media/sf_virtualshare
tmpfs             507136       32    507104   1% /run/user/1000
tmpfs             507136        0    507136   0% /run/user/0


                
df默认将系统中所有的文件系统(不包含内存中的文件系统和swap)列出来,显示的容量单位为1kb
各字段含义如下:
1.Filesystem:代表该文件系统是在哪个 partition ,所以列出装置名称;
2.1k-blocks:说明底下的数字单位是 1KB 呦!可利用 -h 或 -m 来改变容量;
3.Used:顾名思义,就是使用掉的磁盘空间啦!
4.Available:也就是剩下的磁盘空间大小;
5.Use%:就是磁盘的使用率啦!如果使用率高达 90% 以上时, 最好需要注意一下了,免得容量不足造成系统问题喔! (例如最容易被灌爆的 /var/spool/mail 这个放置邮件的磁盘)
6.Mounted on:就是磁盘挂载的目录所在啦!(挂载点啦!)
至于那个 /dev/shm/ 目录,其实是利用内存虚拟出来的磁盘空间,通常是总物理内存的一半! 由于 是透过内存仿真出来的磁盘,因此你在这个目录底下建立任何数据文件时,访问速度是非常快速的! (在内存内工作) 不过,也由于他是内存仿真出来的,因此这个文件系统的大小在每部主机上都不一 样,而且建立的东西在下次开机时就消失了! 因为是在内存中嘛!
-h选项可以以更易读的容量单位显示:
[root@initroot ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            2.4G     0  2.4G   0% /dev
tmpfs           496M  2.1M  494M   1% /run
/dev/sda1        89G   26G   58G  31% /
tmpfs           2.5G  117M  2.4G   5% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.5G     0  2.5G   0% /sys/fs/cgroup
virtualshare    299G   71G  228G  24% /media/sf_virtualshare
tmpfs           496M   32K  496M   1% /run/user/1000
tmpfs           496M     0  496M   0% /run/user/0
              
我们看到容量单位以GBytes, MBytes, KBytes单位显示。
将系统内的所有特殊文件格式及名称都列出来
[root@initroot ~]# df -aT
Filesystem     Type            1K-blocks     Used Available Use% Mounted on
sysfs          sysfs                   0        0         0    - /sys
proc           proc                    0        0         0    - /proc
udev           devtmpfs          2502456        0   2502456   0% /dev
devpts         devpts                  0        0         0    - /dev/pts
tmpfs          tmpfs              507140     2180    504960   1% /run
/dev/sda1      ext4             92364456 26831676  60797908  31% /
securityfs     securityfs              0        0         0    - /sys/kernel/security
tmpfs          tmpfs             2535688   122016   2413672   5% /dev/shm
tmpfs          tmpfs                5120        4      5116   1% /run/lock
tmpfs          tmpfs             2535688        0   2535688   0% /sys/fs/cgroup
cgroup         cgroup2                 0        0         0    - /sys/fs/cgroup/unified
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/systemd
pstore         pstore                  0        0         0    - /sys/fs/pstore
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/blkio
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/cpuset
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/cpu,cpuacct
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/hugetlb
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/memory
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/net_cls,net_prio
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/freezer
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/perf_event
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/pids
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/devices
cgroup         cgroup                  0        0         0    - /sys/fs/cgroup/rdma
systemd-1      autofs                  0        0         0    - /proc/sys/fs/binfmt_misc
debugfs        debugfs                 0        0         0    - /sys/kernel/debug
mqueue         mqueue                  0        0         0    - /dev/mqueue
hugetlbfs      hugetlbfs               0        0         0    - /dev/hugepages
fusectl        fusectl                 0        0         0    - /sys/fs/fuse/connections
configfs       configfs                0        0         0    - /sys/kernel/config
virtualshare   vboxsf          312568828 73574916 238993912  24% /media/sf_virtualshare
tmpfs          tmpfs              507136       32    507104   1% /run/user/1000
gvfsd-fuse     fuse.gvfsd-fuse         0        0         0    - /run/user/1000/gvfs
tmpfs          tmpfs              507136        0    507136   0% /run/user/0
              
有很多特殊的文件系统,这些文件系统是用内存虚拟出来的,并不实际占用磁盘容量, 例如proc文件系统,挂载点为/proc.
另外需要注意的是,如果使用 -a 这个参数时,系统会出现 /proc 这个挂载点,但是里面的东西都是 0 ,不要紧张! /proc 的东西都是 Linux 系统所需要加载的系统数据,而且是挂载在『内存当中』 的, 所以当然没有占任何的磁盘空间啰!
如果df后面接有目录或者文件参数,那么df会自动分析该目录或文件所在的文件系统分区, 并将该文件系统分区的详细信息显示出来,这样就可以知道某个目录下还有多少容量可以使用了!
将/etc目录下的可用的磁盘容量以易读的容量格式显示:
[root@initroot ~]# df -h /etc
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        89G   26G   58G  31% /
              
列出各文件系统分区中可用的inode数量列出:
              [root@initroot ~]# df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
udev             611K   437  611K    1% /dev
tmpfs            620K   689  619K    1% /run
/dev/sda1        5.7M  1.2M  4.5M   21% /
tmpfs            620K   219  619K    1% /dev/shm
tmpfs            620K     6  620K    1% /run/lock
tmpfs            620K    18  620K    1% /sys/fs/cgroup
virtualshare     1000 -976K  977K     - /media/sf_virtualshare
tmpfs            620K    34  620K    1% /run/user/1000
tmpfs            620K    11  620K    1% /run/user/0
              
以上列出了可用的inode剩余量与总容量。通常inode的数量剩余都比block还要多。
由于 df 主要读取的数据几乎都是针对一整个文件系统,因此读取的范围主要是在 Superblock 内的信息, 所以这个指令显示结果的速度非常的快速!在显示的结果中你需要特别留意的是那个根目录的剩余容量! 因为我们所有的数据都是由根目录衍生出来的,因此当根目录的剩余容量剩下 0 时,那你的 Linux 可能就问题很大了。

2.du命令

回到顶部
du命令评估文件系统的磁盘使用量,常用来显示目录所占的磁盘容量
du命令常用格式如下:
              [root@initroot ~]# du [-ahskm] 文件或目录名称
              
选项与参数:
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
列出当前目录下的所有文件所占磁盘的容量
              [root@initroot ~]# du
              4 ./.cache/dconf
              4 ./.cache/abrt
              8 ./.cache
              #每个目录都会列出来
              ....(中间省略)....
              0 ./test4 4 ./.ssh #包括隐藏文件的目录
              76 . #这个目录(.)所占用的总量

              
直接输入 du 没有加任何选项时,则 du 会分析『目前所在目录』 的文件与目录所占用的磁盘空间。但是,实际显示时,仅会显示目录容量(不含文件), 因此 . 目录有很多文件没有被列出来,所以全部的目录相加不会等于 . 的容量喔! 此外,输出的数值数据为 1K 大小的容量单位。
但是将文件的容量也列出来
              [root@initroot ~]# du -a
              4 ./.bash_logout
              4 ./.bash_profile
              4 ./.bashrc
              ....(中间省略)....
              #有文件的列表了4 ./.ssh/known_hosts
              4 ./.ssh
              76 .
              
检查根目录底下每个目录所占用的容量
              [root@initroot ~]# du -sm /*
              0 /bin
              99 /boot
              ....(中间省略)....
              du: cannot access ‘/proc/17772/task/17772/fd/4’: No such file or directory
              du: cannot access ‘/proc/17772/fdinfo/4’: No such file or directory
              0 /proc
              1 /root
              25 /run
              #不会占用硬盘空间!
              ....(中间省略)....
              3126 /usr
              117 /var
              
这是du命令最常用的用法了。利用通配符*来代表每个目录,如果想要检查某个目录下,哪个子目录占用最大的容量,可以用这个方法找出来。 值得注意的是,如果刚刚安装好 Linux 时,那么整个系统容量最大的应该是 /usr 。 而 /proc 虽然有列出容量,但是那个容量是在内存中,不占磁盘空间。
至于 /proc 里头会列出一堆No such file or directory的错误,别担心!因为是内存内的程序,程序执行结束就会消失,因此会有些目录找不到,是正确的! 与 df 不一样的是,du 这个指令其实会直接到文件系统内去搜寻所有的文件数据, 所以du往往会花费更多的时间。此外,在默认的情况下,容量的输出是以 KB 来设计的, 如果你想要知道目录占了多少 MB ,那么就使用 -m 这个参数即可啰! 如果你只想要知道该目录占了多少容量的话,使用 -s 就可以啦!
至于 -S 这个选项部分,由于 du 默认会将所有文件的大小均列出,因此假设你在 /etc 底下使用 du时, 所有的文件大小,包括 /etc 底下的次目录容量也会被计算一次。然后最终的容量 (/etc) 也会加总一次, 因此很多朋友都会误会 du 分析的结果不太对劲。所以啰,如果想要列出某目录下的全部数据, 或许也可以加上 -S 的选项,减少次目录的加总喔!

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读