在 Linux 系统中,管理磁盘空间是系统管理员和开发者的一项重要任务。本文将详细介绍用于查看文件系统磁盘空间使用情况的
df
命令以及用于查看目录和文件磁盘使用情况的du
命令。这两个命令相辅相成,可以帮助你全面了解和管理系统的磁盘使用情况。
df
命令详解
df
(disk free)命令是 Linux 系统中用于查看文件系统磁盘空间使用情况的工具。
基本用法
df [选项] [文件]
执行 df
命令而不带任何参数时,会显示所有文件系统的磁盘使用情况。
常用选项
-
-h
:以可读性更好的方式显示磁盘空间信息(例如,KB、MB、GB)。 -
-a
:包括所有文件系统(包括大小为 0 的文件系统)。 -
-T
:显示文件系统类型。 -
-i
:显示 inode 信息,而不是块使用情况。 -
--total
:显示总计。 -
-B
:指定块大小,例如-B M
以 MB 为单位显示。 -
--output
:指定输出信息的格式,如--output=source,size,used,avail,pcent,target
。 -
-P
:使用 POSIX 输出格式。
示例
-
显示所有文件系统的磁盘使用情况
df
输出示例:
文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda1 20480000 10240000 10240000 50% /
-
以人类可读的格式显示
df -h
输出示例:
文件系统 大小 已用 可用 已用% 挂载点 /dev/sda1 20G 10G 10G 50% /
-
显示文件系统类型
df -T
输出示例:
文件系统 类型 1K-块 已用 可用 已用% 挂载点 /dev/sda1 ext4 20480000 10240000 10240000 50% /
-
显示 inode 信息
df -i
输出示例:
文件系统 Inodes 已用 可用 已用% 挂载点 /dev/sda1 1280000 640000 640000 50% /
-
显示总计信息
df --total
输出示例:
文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda1 20480000 10240000 10240000 50% / /dev/sdb1 51200000 25600000 25600000 50% /data total 71680000 35840000 35840000 50%
-
指定块大小
df -B M
输出示例:
文件系统 1M-块 已用 可用 已用% 挂载点 /dev/sda1 20000 10000 10000 50% /
-
指定输出格式
df --output=source,size,used,avail,pcent,target
输出示例:
源 大小 已用 可用 已用% 挂载点 /dev/sda1 20G 10G 10G 50% /
-
使用 POSIX 输出格式
df -P
输出示例:
文件系统 1024-blocks Used Available Capacity Mounted on /dev/sda1 20480000 10240000 10240000 50% /
-
显示指定目录或文件的磁盘使用情况
df -h /home
输出示例:
文件系统 大小 已用 可用 已用% 挂载点 /dev/sda1 20G 10G 10G 50% /home
du
命令详解
du
(disk usage)命令用于查看一个目录和文件的磁盘使用情况,与 df
命令配合使用,可以详细了解磁盘空间的分配情况。
基本用法
du [选项] [文件或目录]
执行 du
命令时,会递归显示指定目录及其子目录的磁盘使用情况。
常用选项
-
-h
:以可读性更好的方式显示磁盘空间信息(例如,KB、MB、GB)。 -
-s
:仅显示每个参数的总计。 -
-a
:显示所有文件和目录的磁盘使用情况。 -
-c
:显示总计。 -
--max-depth=N
:限制显示的目录深度。 -
--exclude=PATTERN
:排除匹配特定模式的文件或目录。 -
-d
:与--max-depth
相同,指定显示的目录深度。
示例
-
显示指定目录的磁盘使用情况
du /home
输出示例:
1024 /home/user1 2048 /home/user2 3072 /home
-
以人类可读的格式显示
du -h /home
输出示例:
1.0K /home/user1 2.0K /home/user2 3.0K /home
-
显示指定目录的总计
du -sh /home
输出示例:
3.0K /home
-
显示所有文件和目录的磁盘使用情况
du -ah /home
输出示例:
1.0K /home/user1/file1 1.0K /home/user1 2.0K /home/user2/file2 2.0K /home/user2 3.0K /home
-
显示总计信息
du -hc /home
输出示例:
1.0K /home/user1/file1 1.0K /home/user1 2.0K /home/user2/file2 2.0K /home/user2 3.0K /home 3.0K total
-
限制显示的目录深度
du -h --max-depth=1 /home
输出示例:
1.0K /home/user1 2.0K /home/user2 3.0K /home
-
排除特定模式的文件或目录
du -h --exclude="*.log" /home
该命令会排除所有
.log
文件。输出示例:
1.0K /home/user1 2.0K /home/user2 3.0K /home
高级实例
-
查找存储占用最高的目录
使用
df
命令你可以了解文件系统的使用情况,但要进一步找到占用空间最多的目录,可以结合du
(disk usage)命令。du -sh /* | sort -rh | head -n 10
这条命令会显示根目录下占用空间最大的10个目录。
输出示例:
12G /var 8.0G /home 4.0G /usr 2.1G /lib 1.5G /opt 1.0G /tmp
-
监控磁盘使用情况并发送告警
结合
df
命令和一些脚本,你可以监控磁盘使用情况并在空间接近满载时发送告警。#!/bin/bash THRESHOLD=80 df -h | awk 'NR>1{if($5+0 > '$THRESHOLD') print $0}'
该脚本会检查所有文件系统的使用率,如果超过了80%,就会输出相关信息。
-
自动清理临时文件
你可以设置一个自动化任务,当某个分区的使用率超过一定阈值时,自动清理临时文件。
#!/bin/bash THRESHOLD=90 USAGE=$(df /tmp | awk 'NR==2 {print $5}' | sed 's/%//') if [ $USAGE -gt $THRESHOLD ]; then echo "Cleaning /tmp directory..." rm -rf /tmp/* fi
可以将这个脚本设置为 cron 任务,每隔一段时间自动运行。
-
定期生成磁盘使用报告
可以编写一个脚本,定期生成磁盘使用报告并发送给系统管理员。
#!/bin/bash df -h > /var/log/disk_usage_report.txt mail -s "Disk Usage Report" admin@example.com < /var/log/disk_usage_report.txt
将这个脚本设置为 cron 任务,每天生成并发送磁盘使用报告。
使用场景
- 监控磁盘使用情况:可以定期检查磁盘使用情况,防止磁盘空间不足。
- 管理文件系统:可以帮助识别哪个分区空间不足,需要进行扩展或清理。
- 系统优化:通过观察 inode 使用情况,判断是否需要调整文件系统。
- 自动化脚本:通过 POSIX 格式输出,可以方便地在脚本中进行进一步处理。
- 定期报告和告警:结合脚本和邮件系统,可以实现磁盘使用的自动监控和告警。
-
目录和文件分析:通过
du
命令,可以详细了解磁盘空间在目录和文件之间的分配情况。
注意事项
- 使用
df
命令时,结果可能会因为文件系统的不同而有所差异。 - 有些挂载点可能会被忽略,需要使用
-a
选项来显示所有挂载点。 - 在使用
-h
等选项时,注意与其他选项的组合可能会导致输出格式变化。 -
du
命令的权限问题:使用du
命令时,可能会因为权限问题无法访问某些目录或文件,需要使用sudo
命令来提升权限。