10.2 df用法详解:查看文件系统硬盘使用情况
- Linux 磁盘管理好坏直接关系到整个系统的性能问题。df (disk free)命令,检查文件系统的磁盘空间占用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。
Linux 操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性存放在 inode 中,至于实际数据则放置到 data block 区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。
inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block。
df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。
- 可以使用 stat 命令查看某个文件的 inode 信息:
[root@CncLucZK ~]# stat /test/user #目录inode信息
File: /test/user
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd01h/64769d Inode: 1048584 Links: 4
Access: (0711/drwx--x--x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-10-23 10:13:12.026008909 +0800
Modify: 2022-10-16 13:52:11.446111165 +0800
Change: 2022-10-16 13:52:11.446111165 +0800
Birth: -
[root@CncLucZK ~]# stat /test/tmp.txt #文件inode信息
File: /test/tmp.txt
Size: 77 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 1048621 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-10-19 09:57:12.706650044 +0800
Modify: 2022-10-19 09:57:09.392640825 +0800
Change: 2022-10-19 09:57:09.392640825 +0800
Birth: -
- df 命令的基本格式为:
[root@CncLucZK ~]# df [选项] [目录或文件名]
-
选项及作用。
选项 作用 -a 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统; -m 以 MB 为单位显示容量; -k 以 KB 为单位显示容量,默认以 KB 为单位; -h 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量; -H 以 M=1000K 取代 M=1024K 的进位方式; -T 显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出 -i 不用硬盘容量显示,而是以含有 inode 的数量来显示。 -
将系统内所有的文件系统列出来!
[root@CncLucZK ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hdc2 9920624 3823112 5585444 41% /
/dev/hdc3 4956316 141376 4559108 4% /home
/dev/hdc1 101086 11126 84741 12% /boot
tmpfs 371332 0 371332 0% /dev/shm
不使用任何选项的 df 命令,默认会将系统内所有的 (不含特殊内存内的文件系统与 swap) 文件系统信息,以 KB 为单位显示出来。
- 由 df 命令显示出的各列信息的含义分别是:
- Filesystem:表示该文件系统位于哪个分区,因此该列显示的是设备名称;
- 1K-blocks:此列表示文件系统的总大小,默认以 KB 为单位;
- Used:表示用掉的硬盘空间大小;
- Available:表示剩余的硬盘空间大小;
- Use%:硬盘空间使用率。如果使用率高达 90% 以上,就需要额外注意,因为容量不足,会严重影响系统的正常运行;
- Mounted on:文件系统的挂载点,也就是硬盘挂载的目录位置。
- 这里使用了 -h 选项,因此文件系统的各种容量数据,将容量结果以易读的容量格式显示出来(通常使用 GB 或 MB)。
[root@CncLucZK ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hdc2 9.5G 3.7G 5.4G 41% /
/dev/hdc3 4.8G 139M 4.4G 4% /home
/dev/hdc1 99M 11M 83M 12% /boot
tmpfs 363M 0 363M 0% /dev/shm
#这里在 df 命令后添加了目录名,在这种情况下,df 命令会自动分析该目录所在的分区,并将所在分区的有关信息显示出来。由此,我们就可以知道,该目录下还可以使用多少磁盘容量。
[root@CncLucZK ~]# df -h /etc
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 50G 8.5G 39G 18% /
#将 /etc 底下的可用的磁盘容量以易读的容量格式显示
devtmpfs 、tmpfs 、这些是硬盘的驱动程序 , /dev/sdal 是第一个分区,它的后面放了一个/boot是Linux的启动文件 .
/dev/mapper/centos-root 是逻辑卷
- 将系统内的所有特殊文件格式及名称都列出来
[root@localhost ~]# df -aT
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/hdc2 ext3 9920624 3823112 5585444 41% /
proc proc 0 0 0 - /proc
sysfs sysfs 0 0 0 - /sys
devpts devpts 0 0 0 - /dev/pts
/dev/hdc3 ext3 4956316 141376 4559108 4% /home
/dev/hdc1 ext3 101086 11126 84741 12% /boot
tmpfs tmpfs 371332 0 371332 0% /dev/shm
none binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
sunrpc rpc_pipefs 0 0 0 - /var/lib/nfs/rpc_pipefs
注意,使用 -a 选项,会将很多特殊的文件系统显示出来,这些文件系统包含的大多是系统数据,存在于内存中,不会占用硬盘空间,因此你会看到,它们所占据的硬盘总容量为 0。
10.3 du命令:统计目录或文件所占磁盘空间大小
- du (disk used)命令:是统计目录或文件所占磁盘空间大小的命令用以检查磁盘空间使用量。我们在统计目录时,用ls -l命令只能查看父目录下的子目录和子文件占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小
[root@CncLucZK test]# ll -dh user
drwx--x--x 4 root root 4.0K Oct 16 13:52 user
注意,使用"ls -h"命令也是可以看到文件的大小的。但在使用"ls -h"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。
- du 命令的格式如下:
[root@CncLucZK ~]# du [选项] [目录或文件名]
- 选项:
- -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
- -h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
- -s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量
- -S :不包括子目录下的总计,与 -s 有点差别。
- -k :以 KBytes 列出容量显示;
- -m :以 MBytes 列出容量显示;
- 直接输入 du 没有加任何选项时,则 du 会分析当前所在目录里的子目录(包括隐藏文件夹)不统计子文件所占用的硬盘空间:
#每个目录都会列出来
[root@CncLucZK test]# du
#磁盘占用量的大小。默认单位为KB #统计每个子目录的大小
4 ./users/u3
4 ./users/tmp
4 ./users/u1
4 ./users/u2
36 ./users
4 ./tproject/dict1
4 ./tproject/dict
12 ./tproject
4 ./user/tmp
4 ./user/config
3180 ./user
4 ./config/users
8 ./config
8508 .
#统计当前目录总大小
- 将文件的容量也列出来
[root@CncLucZK test]# du -a
4 ./demo.txt.bz2
4 ./demo2.txt
4 ./demotmo.txt
4 ./differ.patch
4 ./user.txt
4 ./users/u3
4 ./users/tmp
....
3180 ./user
4 ./config/users
8 ./config
8508 .
#统计当前目录的总大小,同时会统计当前目录下所有子文件和子目录磁盘占用量的大小。默认单位为 KB
[root@CncLucZK test]# du -sh
8.4M .
#只统计当前目录在磁盘占用量总的大小,同时使用习惯单位显示
- 检查根目录底下每个目录所占用的容量
[root@CncLucZK ~]# du -sh /* #通配符 * 来代表每个目录。
16K /app
0 /bin
122M /boot
8.0K /data
16K /dev
24M /etc
168K /home
0 /lib
0 /lib64
16K /lost+found
4.0K /media
4.0K /mnt
4.2M /opt
du: cannot access '/proc/790422/task/790422/fd/4': No such file or directory
du: cannot access '/proc/790422/task/790422/fdinfo/4': No such file or directory
du: cannot access '/proc/790422/fd/4': No such file or directory
du: cannot access '/proc/790422/fdinfo/4': No such file or directory
0 /proc
1.6M /root
420K /run
0 /sbin
4.0K /srv
0 /sys
8.4M /test
72K /tmp
4.0K /tproject
2.8G /usr
4.0G /var #系统初期最大文件
1.4G /www
- du命令和df命令的区别:使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统整体的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。而 du 命令是面向文件的,只会计算文件或目录占用的磁盘空间,会直接到文件系统内去搜寻所有的文件数据。也就是说,df 命令统计的分区更准确,是真正的空闲空间。
参考文献:
Linux df用法详解:查看文件系统硬盘使用情况
Linux 磁盘管理