查看Linux系统中磁盘空间使用情况及大文件明细查询方法
一、查看Linux磁盘空间使用情况:
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:显示版本信息。
实例:
- 查看系统磁盘设备,默认是KB为单位,使用-h选项以KB以上的单位来显示,可读性高:
[root@localhost bin]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.3M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 18G 6.0G 12G 34% /
/dev/sda1 297M 229M 69M 77% /boot
tmpfs 98M 12K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
- 查看全部文件系统:
[root@LinServ-1 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
二、查看Linux文件及目录磁盘空间使用情况:
du命令
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的。
语法:
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 重复计算硬件链接的文件。
实例:
- 显示目录或者文件所占空间。只显示当前目录下面的子目录的目录大小和当前目录的总的大小,最下面的1288为当前目录的总大小:
[root@localhost test]# du
608 ./test6
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
- 显示指定文件或目录所占空间(如果接的是目录,仅会显示目录及子目录所占空间大小):
[root@localhost shell_22_num]# du -h test.sh
4.0K test.sh
- 显示多个文件所占空间:
[root@localhost shell_22_num]# du -h test.sh test1.sh
4.0K test.sh
4.0K test1.sh
三、当磁盘空间不足时,查看大文件明细排查方法:
- 先查询哪个磁盘占空间较大:
[root@localhost shell_22_num]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 8.3M 478M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 18G 6.0G 12G 34% /
/dev/sda1 297M 229M 69M 77% /boot
tmpfs 98M 12K 98M 1% /run/user/42
tmpfs 98M 0 98M 0% /run/user/0
- 查询磁盘所有文件中,大空间文件情况:
[root@localhost shell_22_num]# du -sh /*|grep G
du: cannot access ‘/proc/15839/task/15839/fd/3’: No such file or directory
du: cannot access ‘/proc/15839/task/15839/fdinfo/3’: No such file or directory
du: cannot access ‘/proc/15839/fd/3’: No such file or directory
du: cannot access ‘/proc/15839/fdinfo/3’: No such file or directory
4.9G /usr
-s:只显示总计大小;-h:以K,M,G为单位,提高信息的可读性;/*:全部路径文件;grep G:抓取容量单位是G的文件(大于等于1G的文件都会被抓到)。
- 一步步精准定位具体目录及文件:
[root@localhost shell_22_num]# du -sh /usr/*|grep G
1.1G /usr/lib
1.8G /usr/lib64
1.5G /usr/share
- 这种方法只能大致粗略定位,再往细了可能会翻车。就想下图所示:
因为路径中含有关键词“G”而被显示出来。
[root@localhost shell_22_num]# du -sh /usr/lib64/*|grep G
^[[5~124K /usr/lib64/GConf
0 /usr/lib64/libEGL_mesa.so.0
244K /usr/lib64/libEGL_mesa.so.0.0.0
0 /usr/lib64/libEGL.so.1
84K /usr/lib64/libEGL.so.1.1.0
0 /usr/lib64/libGeoIP.so.1
196K /usr/lib64/libGeoIP.so.1.5.0
0 /usr/lib64/libGLdispatch.so.0
628K /usr/lib64/libGLdispatch.so.0.0.0
0 /usr/lib64/libGLESv1_CM.so.1
48K /usr/lib64/libGLESv1_CM.so.1.2.0
0 /usr/lib64/libGLESv2.so.2
76K /usr/lib64/libGLESv2.so.2.1.0
0 /usr/lib64/libGLEW.so.1.10
544K /usr/lib64/libGLEW.so.1.10.0
0 /usr/lib64/libGL.so.1
572K /usr/lib64/libGL.so.1.7.0
0 /usr/lib64/libGLU.so.1
516K /usr/lib64/libGLU.so.1.3.1
0 /usr/lib64/libGLX_mesa.so.0
492K /usr/lib64/libGLX_mesa.so.0.0.0
0 /usr/lib64/libGLX.so.0
76K /usr/lib64/libGLX.so.0.0.0
0 /usr/lib64/libGLX_system.so.0
所以,明细部分需要直接使用du -sh [绝对路径下的文件名] 来查看。
确定文件后,就可以详细查询了。可以使用ls -lh [文件名] 等命令查看。
- 确认文件是否可以删除,再进行处理。
四、案例:如果向磁盘写入数据提示错误:no space left on device(磁盘空间不足)。通过df -h查看磁盘空间,发现没满。请问可能原因是什么?
iNode用光了。
通过使用命令df -i可以查询iNode使用情况。
[root@localhost shell_22_num]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 120550 380 120170 1% /dev
tmpfs 124466 1 124465 1% /dev/shm
tmpfs 124466 877 123589 1% /run
tmpfs 124466 16 124450 1% /sys/fs/cgroup
/dev/sda3 18566144 190479 18375665 2% /
/dev/sda1 281232 358 280874 1% /boot
tmpfs 124466 9 124457 1% /run/user/42
tmpfs 124466 1 124465 1% /run/user/0
模拟测试环境:
上图可见,/dev/sdc磁盘空间仍有富裕,而iNode已满。无法创建log文件。
解决方法:干掉这些log文件。
五、磁盘空间不足的其他原因
1、block满了。
2、inode满了(详细见第四部分)。
3、block 硬链接数量为0,进程调用数不为0,文件没有被彻底删除磁盘空间不足。
就酱。
PS:老年人不适合烫脚。