Linux 操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性存放在 inode 中,至于实际数据则放置到 data block 区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。
inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block。
df 命令主要读取的数据几乎都针对的是整个文件系统,所以 df 命令主要是从各文件系统的 Super block 中读取数据。
[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: -
[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 为单位显示出来。
[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。
[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 大小。
[root@CncLucZK ~]# 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
参考文献:
Linux df用法详解:查看文件系统硬盘使用情况
Linux 磁盘管理