与磁盘相关命令实例
##部分摘自 https://www.cnblogs.com/feimengv/p/5485560.html
1. df命令:
#查看磁盘空间占用,实际上是查看磁盘块占用的文件(block)
[root@node2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 13G 1.4G 11G 12% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/goodtest-second 7.8G 6.1G 1.3G 83% /mysec
/dev/mapper/mytest-first 9.8G 6.8G 2.5G 73% /mytest
/dev/mapper/rhel-home 4.8G 21M 4.6G 1% /home
/dev/sda1 297M 128M 169M 44% /boot
tmpfs 378M 0 378M 0% /run/user/0
#查看索引节点的占用(Inodes)
[root@node2 mysec]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/rhel-root 833952 59764 774188 8% /
devtmpfs 479810 442 479368 1% /dev
tmpfs 482944 1 482943 1% /dev/shm
tmpfs 482944 1379 481565 1% /run
tmpfs 482944 16 482928 1% /sys/fs/cgroup
/dev/mapper/goodtest-second 524288 12 524276 1% /mysec
/dev/mapper/mytest-first 655360 13 655347 1% /mytest
/dev/mapper/rhel-home 327680 22 327658 1% /home
/dev/sda1 153600 325 153275 1% /boot
tmpfs 482944 1 482943 1% /run/user/0
#磁盘块和索引节点其中之一满,都会导致无法创建文件,提示磁盘空间已满。
#磁盘满可通过下列命令找出没有用的大文件删除
#列出系统内大于100M的文件
[root@node2 mysec]# find / -size +100M |xargs ls -lh
-rw-r--r--. 1 root root 6.0G Jul 15 06:33 /mysec/testb.txt
-rw-r--r--. 1 root root 3.0G Jul 15 06:32 /mytest/testa.txt
-rw-r--r--. 1 root root 3.7G Jul 15 06:30 /mytest/testc.txt
-r--------. 1 root root 128T Jul 15 07:45 /proc/kcore
-rw-------. 1 root root 128M Jul 15 07:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1
-rw-------. 1 root root 128M Jul 15 07:24 /sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
-rw-r--r--. 1 root root 102M Jul 15 03:57 /usr/lib/locale/locale-archive
#查看当前目录内文件夹的大小
[root@node2 mysec]# du -h --max-depth=1
16K ./lost+found
6.1G .
#磁盘Inodes满可通命令:
1.进入/根目录然后执行
find */ ! -type l | cut -d / -f 1 | uniq -c
2.然后一层一层找出文件最多目录,定位出哪个目录占用inodes最多(通常inodes是因为小文件太多)
3.[root@localhost clientmqueue]# rm -rf * 删除所有文件,发现提示-bash: /bin/rm: Argument list too long,文件太多了,服务器都懒得执行删除
4.用命令ls | xargs rm -f 过了一段时间终于删除了所有文件
5.df -ih 可以看到Inodes终于回来了很多空间
6.如果你删除文件最多的目录是/var/spool/clientmqueue,那么说明你使用了计划任务,而且按秒执行
备注:为什么var/spool/clientmqueue会产生大量的文件呢,查资料是因为cron执行时会将相关结果以mail方式发送到执行用户的帐号,可是当sendmail 沒有启动 那么所有信件就会暂存在这个目录中,此时就会出现这种情况。
7.修改cronwtab文件 crontab -e (修改计划任务,最好刷新一下计划任务或者等几分钟,使其生效)
01 * * * * root run-parts /etc/cron.hourly > /dev/null 2>&1
02 4 * * * root run-parts /etc/cron.daily > /dev/null 2>&1
8.修改计划任务这样就不会产生记录了,完美结局Inodes空间满的问题!
####################################################################################
2. du命令
#显示文件或目录所占用的磁盘空间
[root@node2 /]# du -sh /var
84M /var
#列出var下每个目录和文件所占的容量
[root@node2 /]# du -sh /var/*
4.0K /var/account
4.0K /var/adm
2.0M /var/cache
4.0K /var/crash
20K /var/db
8.0K /var/empty
4.0K /var/games
4.0K /var/gopher
12K /var/kerberos
78M /var/lib
4.0K /var/local
0 /var/lock
4.3M /var/log
0 /var/mail
4.0K /var/nis
4.0K /var/opt
4.0K /var/preserve
0 /var/run
124K /var/spool
16K /var/tmp
4.0K /var/yp
#列出var下第一层目录和文件所占的容量
[root@node2 /]# du -h --max-depth=1 /var
4.0K /var/preserve
8.0K /var/empty
4.0K /var/games
4.0K /var/local
12K /var/kerberos
4.0K /var/yp
78M /var/lib
4.0K /var/gopher
16K /var/tmp
124K /var/spool
4.0K /var/account
4.3M /var/log
2.0M /var/cache
20K /var/db
4.0K /var/adm
4.0K /var/opt
4.0K /var/nis
4.0K /var/crash
84M /var
#列出mysec下第一层目录和文件所占的容量
[root@node2 mysec]# pwd
/mysec
[root@node2 mysec]# du -h -d1 2>/dev/null
16K ./lost+found
6.1G .
#结合find命令:
[root@node2 mysec]# find / -size +500M |xargs ls -lh
-rw-r--r--. 1 root root 6.0G Jul 15 06:33 /mysec/testb.txt
-rw-r--r--. 1 root root 3.0G Jul 15 06:32 /mytest/testa.txt
-rw-r--r--. 1 root root 3.7G Jul 15 06:30 /mytest/testc.txt
-r--------. 1 root root 128T Jul 15 07:24 /proc/kcore
3.blkid命令:
#对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等信息进行查询
[root@node2 ~]# blkid
/dev/mapper/rhel-root: UUID="69b546d4-a6c5-4b18-879e-8e608aaa3061" TYPE="ext4"
/dev/sda2: UUID="Wxjhw2-jGNq-2LlI-had1-hoId-8Z2K-Fq9gdR" TYPE="LVM2_member"
/dev/sda1: UUID="2c1fab97-a620-4d8f-be84-8da9c7bc67df" TYPE="xfs"
/dev/sda3: UUID="211a23db-610d-4d94-bee4-92a1abfb9424" TYPE="swap"
/dev/sdb1: UUID="TKYA1E-cPFR-ux0w-MX6W-pEm5-GUg3-ABUdlV" TYPE="LVM2_member"
/dev/sdb2: UUID="IygZYq-zekX-LjjC-VEEN-V5pJ-TC1q-07ot4f" TYPE="LVM2_member"
/dev/sdb3: UUID="lJhEbj-h0wY-KfKJ-GR7J-u08W-fL1E-yfM0BF" TYPE="LVM2_member"
/dev/sdc1: UUID="sJXEnO-vkdZ-NTG0-twEJ-kP26-jRMt-W1Njdu" TYPE="LVM2_member"
/dev/sdc2: UUID="cuZXAD-ZGRQ-iuHc-oBbv-t5KA-Wrtu-CvatEc" TYPE="LVM2_member"
/dev/mapper/mytest-first: UUID="10b02a1c-3bbc-486b-b06e-628a8f11d351" TYPE="ext4"
/dev/mapper/goodtest-second: UUID="9e04627b-eb29-463f-aa28-fe7c40d29d94" TYPE="ext4"
/dev/mapper/rhel-home: UUID="ffc28984-fe57-451e-b58f-f419e4b87e2a" TYPE="ext4"
4.lsblk命令
#列出块设备)命令用于列出所有可用块设备的信息,但是,它不会列出RAM盘的信息。块设备有硬盘,闪存盘,CD-ROM等等
[root@node2 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 17.7G 0 part
│ ├─rhel-root 253:0 0 12.7G 0 lvm /
│ └─rhel-home 253:3 0 5G 0 lvm /home
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
├─sdb2 8:18 0 8G 0 part
│ └─goodtest-second 253:2 0 8G 0 lvm /mysec
└─sdb3 8:19 0 7G 0 part
sdc 8:32 0 40G 0 disk
├─sdc1 8:33 0 15G 0 part
│ └─mytest-first 253:1 0 10G 0 lvm /mytest
└─sdc2 8:34 0 5G 0 part
└─goodtest-second 253:2 0 8G 0 lvm /mysec
sr0 11:0 1 1024M 0 rom
#以键值对的形式列出 /dev/sdb 盘的名称,大小,挂载点,类型,ROTA 位,分区 UUID,文件系统 UUID
[root@node2 ~]# lsblk /dev/sdb -b -p -P -o NAME,SIZE,MOUNTPOINT,TYPE,ROTA,UUID,PARTUUID
NAME="/dev/sdb" SIZE="21474836480" MOUNTPOINT="" TYPE="disk" ROTA="1" UUID="" PARTUUID=""
NAME="/dev/sdb1" SIZE="5368709120" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="TKYA1E-cPFR-ux0w-MX6W-pEm5-GUg3-ABUdlV" PARTUUID=""
NAME="/dev/sdb2" SIZE="8589934592" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="IygZYq-zekX-LjjC-VEEN-V5pJ-TC1q-07ot4f" PARTUUID=""
NAME="/dev/mapper/goodtest-second" SIZE="8589934592" MOUNTPOINT="/mysec" TYPE="lvm" ROTA="1" UUID="9e04627b-eb29-463f-aa28-fe7c40d29d94" PARTUUID=""
NAME="/dev/sdb3" SIZE="7515144192" MOUNTPOINT="" TYPE="part" ROTA="1" UUID="lJhEbj-h0wY-KfKJ-GR7J-u08W-fL1E-yfM0BF" PARTUUID=""
#判断磁盘是否为HHD或SSD
#如果返回值为:1,则表示为 HDD 盘;如果返回值为:0,则表示为 SSD 盘。
[root@node2 ~]# cat /sys/block/sdb/queue/rotational
1
5.脚本常用到与磁盘相关命令:
#按照目录大小排序战士最前面15个目录或者文件
[root@node2 /]# du -xB M --max-depth=2 /var | sort -rn | head -n 15
84M /var
78M /var/lib
69M /var/lib/rpm
8M /var/lib/yum
5M /var/log
3M /var/log/anaconda
2M /var/lib/mlocate
2M /var/cache/man
2M /var/cache
1M /var/yp
1M /var/tmp/systemd-private-36cb8e97b4bf4eb3917d850864d54a50-chronyd.service-isbX3D
1M /var/tmp/abrt
1M /var/tmp
1M /var/spool/up2date
1M /var/spool/rhsm
#列出当前所有子目录的文件大小
[root@node2 var]# pwd
/var
[root@node2 var]# du -h --max-depth=1
4.0K ./preserve
8.0K ./empty
4.0K ./games
4.0K ./local
12K ./kerberos
4.0K ./yp
78M ./lib
4.0K ./gopher
16K ./tmp
124K ./spool
4.0K ./account
4.3M ./log
2.0M ./cache
20K ./db
4.0K ./adm
4.0K ./opt
4.0K ./nis
4.0K ./crash
84M .
#列出当前文件或者目录最大的10个
[root@node2 var]# pwd
/var
[root@node2 var]# du -s * | sort -n | tail
4 preserve
4 yp
8 empty
12 kerberos
16 tmp
20 db
124 spool
2032 cache
4340 log
79244 lib
#按照目录大小从大到小排序
[root@node2 var]# pwd
/var
[root@node2 var]# du -b --max-depth 1 | sort -nr | perl -pe 's{([0-9]+)}{sprintf "%.1f%s", $1>=2**30? ($1/2**30, "G"): $1>=2**20? ($1/2**20, "M"): $1>=2**10? ($1/2**10, "K"): ($1, "")}e'
79.8M .
73.2M ./lib
4.4M ./log
2.0M ./cache
112.0K ./spool
17.2K ./db
16.0K ./tmp
12.0K ./kerberos
8.0K ./empty
4.0K ./yp
4.0K ./preserve
4.0K ./opt
4.0K ./nis
4.0K ./local
4.0K ./gopher
4.0K ./games
4.0K ./crash
4.0K ./adm
4.0K ./account
#列出path这个目录的文件树(太多,只列出后10)
[root@node2 var]# du -h /var | sort -h|tail
1.3M /var/lib/yum/yumdb/l
2.0M /var/cache
2.0M /var/cache/man
3.0M /var/log/anaconda
4.3M /var/log
6.4M /var/lib/yum/yumdb
7.1M /var/lib/yum
69M /var/lib/rpm
78M /var/lib
84M /var
#每隔60s监控对应目录的文件大小变化
watch -n60 du /var/log/messages
Every 60.0s: du /var/log/messages Wed Jul 15 08:10:17 2020
508 /var/log/messages
#递归删除当前目录下所有子目录中的.svn目录
find . -type d -name '.svn' -print0 | xargs -0 rm -rdf
#列出当前磁盘的使用情况
df -P | column -t
#监控磁盘的使用情况
watch -d -n 5 df
#列出当前inode的使用情况
df -i <partition>
#按照每个磁盘使用量从高到低排序
df -h | grep -v ^none | ( read header ; echo "$header" ; sort -rn -k 5)
#查看物理磁盘的使用情况
df -x tmpfs | grep -vE "(gvfs|procbususb|rootfs)"
#查看当前所有磁盘的大小和使用量
df -H
#查看所有分区使用情况
fdisk -l /dev/sda
# 显示系统所有的分区或给定的分区
fdisk -l
# 显示时,显示的是扇区数不是柱面数
fdisk -u
# 显示指定partition的block数
fdisk -s partition
#查看磁盘的读写容量
iostat -m -d /dev/sda1
#测试磁盘的读写速度
hdparm -t /dev/sda
#查看某个文件的所有链接
find -L / -samefile /path/to/file -exec ls -ld {} +
#查看最大的5个文件
find . -type f -exec ls -s {} \; | sort -n -r | head -5
#查看365天前的文件并删除
find ./ -type f -mtime +365 -exec rm -f {} \;
#查看大于100M的文件
find . -type f -size +100M
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通