Linux - df与du命令查看磁盘空间

笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述Linux - df与du命令查看磁盘空间相关的知识,希望能为你提供帮助。
背景
项目正常运行,然后某一天出现静态资源拿不到,需要重复刷新或者管理后台登录不上的情况。项目没有报异常,没有出错。经过排查,是服务器磁盘空间不足造成的。
那就研究一下吧,这些东西是躲不过去也糊弄不过去的。
【2】df命令df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法

df(选项)(参数)

选项:
-a或--all:包含全部的文件系统;
--block-size=< 区块大小> :以指定的区块大小来显示区块数目;
-h或--human-readable:以可读性较高的方式来显示信息;
-H或--si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;
-i或--inodes:显示inode的信息;
-k或--kilobytes:指定区块大小为1024字节;
-l或--local:仅显示本地端的文件系统;
-m或--megabytes:指定区块大小为1048576字节;
--no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;
-P或--portability:使用POSIX的输出格式;
--sync:在取得磁盘使用信息前,先执行sync指令;
-t< 文件系统类型> 或--type=< 文件系统类型> :仅显示指定文件系统类型的磁盘信息;
-T或--print-type:显示文件系统的类型;
-x< 文件系统类型> 或--exclude-type=< 文件系统类型> :不要显示指定文件系统类型的磁盘信息;
--help:显示帮助;
--version:显示版本信息。

参数:
文件(路径):指定文件系统上的文件(路径)。

实践实例 ① df
[root@heheapp1 ~]# df
Filesystem1K-blocksUsed Available Use% Mounted on
/dev/mapper/vg_heheapp1-lv_root
51475068 188388403001478839% /
tmpfs16438268228164380401% /dev/shm
/dev/xvda14876526910339294915% /boot
/dev/mapper/vg_heheapp1-lv_home
40645196621912379519402% /home

② df -h
(使用-h选项以KB以上的单位来显示,可读性高)
[root@heheapp1 ~]# df -h
列注释:文件系统容量已用 可用已用% 挂载点
FilesystemSizeUsed Avail Use% Mounted on
/dev/mapper/vg_heheapp1-lv_root
50G18G29G39% /
tmpfs16G228K16G1% /dev/shm
/dev/xvda1477M68M384M15% /boot
/dev/mapper/vg_heheapp1-lv_home
39G608M37G2% /home


③ df -a
[root@heheapp1 ~]# df -a
Filesystem1K-blocksUsed Available Use% Mounted on
/dev/mapper/vg_app1-lv_root
51475068 188383323001529639% /
proc000- /proc
sysfs000- /sys
devpts000- /dev/pts
tmpfs16438268228164380401% /dev/shm
/dev/xvda14876526910339294915% /boot
/dev/mapper/vg_app1-lv_home
40645196621912379519402% /home
none000- /proc/sys/fs/binfmt_misc
none000- /proc/xen
gvfs-fuse-daemon000- /root/.gvfs

④ df -h /opt
查看/opt 路径下文件磁盘空间情况:
[root@pc0 /]# df -h /opt
FilesystemSizeUsed Avail Use% Mounted on
/dev/sda314G6.1G6.8G48% /

【3】du命令查看指定目录磁盘空间【Linux - df与du命令查看磁盘空间】du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看。可以这样理解,df偏向于整体磁盘-宏观,du倾向于文件目录-微观。
语法:
du [选项][文件]

选项:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或--total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k或--kilobytes 以KB(1024bytes)为单位输出。
-m或--megabytes 以MB为单位输出。
-s或--summarize 仅显示总计,只列出最后加总的值。
-h或--human-readable 以K,M,G为单位,提高信息的可读性。
-x或--one-file-xystem 以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L< 符号链接> 或--dereference< 符号链接> 显示选项中所指定符号链接的源文件大小。
-S或--separate-dirs 显示个别目录的大小时,并不含其子目录的大小。
-X< 文件> 或--exclude-from=< 文件> 在< 文件> 指定目录或文件。
--exclude=< 目录或文件> 略过指定的目录或文件。
-D或--dereference-args 显示指定符号链接的源文件大小。
-H或--si 与-h参数相同,但是K,M,G是以1000为换算单位。
-l或--count-links 重复计算硬件链接的文件。
--max-depth=1 子目录深度
–help 显示帮助。
–version 显示版本信息。

实践实例 ① du
[root@app1 tomcat8086]# du //建议使用du -h ,以M为单位
56./webapps/host-manager/images
16./webapps/host-manager/WEB-INF/jsp
28./webapps/host-manager/WEB-INF
8./webapps/host-manager/META-INF
104./webapps/host-manager
56./webapps/manager/images
44./webapps/manager/WEB-INF/jsp
56./webapps/manager/WEB-INF
8./webapps/manager/META-INF
144./webapps/manager
252./webapps
7560./lib
4./work/Catalina/localhost/host-manager
12./work/Catalina/localhost/ROOT/org/apache/jsp
16./work/Catalina/localhost/ROOT/org/apache
20./work/Catalina/localhost/ROOT/org
24./work/Catalina/localhost/ROOT
68./work/Catalina/localhost/manager/org/apache/jsp/WEB_002dINF/jsp
72./work/Catalina/localhost/manager/org/apache/jsp/WEB_002dINF
92./work/Catalina/localhost/manager/org/apache/jsp
96./work/Catalina/localhost/manager/org/apache
100./work/Catalina/localhost/manager/org
104./work/Catalina/localhost/manager
136./work/Catalina/localhost
140./work/Catalina
144./work
4./conf/Catalina/localhost
8./conf/Catalina
244./conf
4./temp
816./bin
2144./logs
786908./hh
798160.

只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的798160为当前目录的总大小,此时单位为kb。
② du [文件] - 显示指定文件所占空间
[root@app1 tomcat8086]# du ./logs/catalina.out
964./logs/catalina.out

③ 查看指定目录的所占空间
[root@app1 tomcat8086]# du ./hh
786976./hh

④ 只显示总和的大小
[root@app1 tomcat8086]# du -sh
780M.

⑤ 深度为1–??du -ach --max-depth=1 /opt??
[root@bogon home]# df -h
FilesystemSizeUsed Avail Use% Mounted on
/dev/sda218G8.3G8.3G50% /
tmpfs491M228K491M1% /dev/shm
/dev/sda1283M34M234M13% /boot
.host:/100G18G83G18% /mnt/hgfs
/dev/sdb12.0G3.1M1.9G1% /home/sdb1

[root@bogon home]# du --max-depth=1 ./
136768./mysql
28./sdb1
572 ./jane
540 ./janus
137912./
[root@bogon home]#

//深度为1与2对比
[root@bogon home]# du -ach --max-depth=1 /opt
4.0K/opt/rh
4.0K/opt/java需要软件百度云.txt
12K /opt/test
14M /opt/www
14M /opt
14M total

[root@bogon home]# du -ach --max-depth=2 /opt
4.0K/opt/rh
4.0K/opt/java需要软件百度云.txt
8.0K/opt/test/test2
12K /opt/test
8.3M/opt/www/xc_train
5.3M/opt/www/bysj
14M /opt/www
14M /opt
14M total

[root@VM-24-14-centos recruite8091]# du -h --max-depth=1 ./*
8.0K./application.properties
4.0K./clear.sh
8.0K./config.json
83M./recruit-0.0.1-SNAPSHOT.jar
4.0K./restart.sh
4.0K./stop.sh

【4】查看硬盘与分区信息fdisk命令用于观察硬盘实体使用情况,也可对硬盘分区。
语法
fdisk(选项)(参数)

选项
-b< 分区大小> :指定每个分区的大小;
-l:列出指定的外围设备的分区表状况;
-s< 分区编号> :将指定的分区大小输出到标准输出上,单位为区块;
-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址;
-v:显示版本信息。

参数
设备文件:指定要进行分区或者显示分区的硬盘设备文件。
查看硬盘分区信息
[root@iZ8vb3n2dl2w360w65xtf3Z ~]# fdisk -l

Disk /dev/vda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00020f78

Device BootStartEndBlocksIdSystem
/dev/vda1*152224194099283Linux

【5】常用实践① 统计/home文件夹下文件的个数
[root@bogon home]# ls -l /home|grep "^-"|wc -l
1
[root@bogon home]# ll
total 20
drwx------. 25 janejane4096 Jun 14 07:06 jane
drwx------. 24 janus mygroup 4096 Jul4 00:31 janus
-rw-r--r--.1 rootroot2140 Jul 10 20:29 java需要软件百度云.txt
drwx------.5 mysql mysql4096 Jul3 02:24 mysql
drwxr-xr-x.4 rootroot4096 Jul9 02:57 sdb1

② 统计/home文件夹下目录的个数
[root@bogon home]# ls -l /home|grep "^d"|wc -l
4

③ 统计/home文件夹下文件的个数,包括子文件夹里的
// R表示递归统计
[root@bogon home]# ls -lR /home|grep "^-"|wc -l
302

④ 统计/home文件夹下目录的个数,包括子文件夹里的
[root@bogon home]# ls -lR /home|grep "^d"|wc -l
27

⑤以树状显示目录结构
tree /home/

【6】df 与du显示空间不一致背景:测试说磁盘空间不够了,??df -h???看了一下,200多G的硬盘占用100%。但是用??du -sh /home??看了一下只有103G。那么问题来了,另外100多G去哪里了?
使用??lsof |grep deleted??? 命令检测如下图所示:

好了,发现问题了!Tomcat???的apache-tomcat-8.5.37/logs/catalina.out??143G没有彻底释放!重启Tomcat服务解决!
参考博文:Linux添加硬盘并进行分区、格式化、挂载



    推荐阅读