• Linux学习-37-查看文件系统硬盘信息(df、du命令)


    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: -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • df 命令的基本格式为:
    [root@CncLucZK ~]# df [选项] [目录或文件名]
    
    • 1
    • 选项及作用。

      选项作用
      -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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    不使用任何选项的 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 底下的可用的磁盘容量以易读的容量格式显示
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    注意,使用 -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
    
    • 1
    • 2

    注意,使用"ls -h"命令也是可以看到文件的大小的。但在使用"ls -h"命令査看目录大小时,目录的大小多数是 4KB,这是因为目录下的子目录名和子文件名是保存到父目录的 block(默认大小为 4KB)中的,如果父目录下的子目录和子文件并不多,一个 block 就能放下,那么这个父目录就只占用了一个 block 大小。

    • du 命令的格式如下:
    [root@CncLucZK ~]# du [选项] [目录或文件名]
    
    • 1
    • 选项:
      • -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	.
    #统计当前目录总大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 将文件的容量也列出来
    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    [root@CncLucZK test]# du -sh
    8.4M	.
    #只统计当前目录在磁盘占用量总的大小,同时使用习惯单位显示
    
    • 1
    • 2
    • 3
    • 检查根目录底下每个目录所占用的容量
    [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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • du命令和df命令的区别:使用 du 命令和 df 命令去统计分区的使用情况时,得到的数据是不一样的。那是因为df命令是从文件系统整体的角度考虑的,通过文件系统中未分配的空间来确定文件系统中已经分配的空间大小。也就是说,在使用 df 命令统计分区时,不仅要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)。而 du 命令是面向文件的,只会计算文件或目录占用的磁盘空间,会直接到文件系统内去搜寻所有的文件数据。也就是说,df 命令统计的分区更准确,是真正的空闲空间。

    参考文献:
    Linux df用法详解:查看文件系统硬盘使用情况
    Linux 磁盘管理

    下一篇:Linux学习-38-硬盘分区命令fdisk介绍
  • 相关阅读:
    Windows 95 的辉煌诞生历史
    ssm基于Java的微小企业人事管理系统的设计与实现毕业设计源码231012
    Codeforces Round #790 (Div. 4)
    【Kubernetes】基于K8S & SpringCloud OpenFeign的一种微服务构建模式
    【C语言好题系列三】
    element el-date-picker报错Prop being mutated:“placement“快速解决方式
    一、PHP环境搭建[phpstorm]
    M1Mac使用UTM虚拟机最小化安装x86_64架构的Archlinux
    《沟通的方法》作者序读后感
    SpringBoot+vue开发记录(二)
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/127881968