是否有办法在没有驱动器名称的情况下获取驱动器空间详细信息。例如,输出
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 20G 15G 4.2G 78% /
/dev/sda6 68G 39G 26G 61% /u01
/dev/sda2 30G 5.8G 22G 21% /opt
/dev/sda1 99M 19M 76M 20% /boot
tmpfs 48G 8.2G 39G 18% /dev/shm
/dev/mapper/vg3-KPGBKUP4
10T 7.6T 2.5T 76% /KPGBKUP4
我想要的输出如下:
20G 15G 4.2G 78%
68G 39G 26G 61%
30G 5.8G 22G 21%
99M 19M 76M 20%
48G 8.2G 39G 18%
10T 7.6T 2.5T 76%
为什么我想要这个?我有几台服务器,每天都必须做报告。这将使我的工作量减少到十分之一。任何建议都将受到高度赞赏。
答案1
从 GNU coreutils 8.21 开始(变更日志),df
有一个--output
选项。用于sed
修剪标题:
df -h --output=size,used,avail,pcent | sed 1d
答案2
假设文件系统和挂载点不包含空白字符,请尝试:
df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t
df -hP
列出长文件系统名称的不带换行符的文件系统统计信息。
awk 'NR>1 { ... }'
将给定操作限制为第二行及以下行以跳过 的df
标题行...
-actionawk
将{ $1=$6="" ; print }
不需要的字段清零并打印其余字段。
使用{ print $2,$3,$4,$5 }
会做同样的工作。
column -t
将整个输出排列为干净的表。
$ cat x
#!/bin/sh
echo '<testing inside a script>'
df -hP | awk 'NR>1 { $1=$6="" ; print }' | column -t
echo '</testing inside a script>'
$ chmod +x x
$ ./x
<testing inside a script>
71G 39G 29G 58%
1006M 0 1006M 0%
10M 208K 9,8M 3%
1006M 0 1006M 0%
</testing inside a script>
$ _
(当评论中提到的问题解决后,我会再次删除它......)
答案3
findmnt -Do SIZE,USED,AVAIL,USE%
这是我的输出:
SIZE USED AVAIL USE%
11.8G 0 11.8G 0%
11.8G 63.1M 11.7G 1%
11.8G 920K 11.8G 0%
11.8G 0 11.8G 0%
12G 8.9G 2.7G 74%
11.8G 410.6M 11.4G 3%
3G 584.4M 2.4G 19%
3G 584.4M 2.4G 19%
2.4G 4K 2.4G 0%
0 0 0 -
所以如果你还没有使用findmnt
对于您的报告,您可能应该这样做。你可以得到比这更具体的信息 - 但在上面的例子中我指定了-Do
到模仿df
(如选项所述)并限制输出列。到删除列标题,只需添加-n
。您不需要任何字符串解析;它对于输出来说是原子的。
但不要相信我的话:
man mount
...为了更强大和可定义的输出使用
findmnt(8)
, 特别是在你的脚本中......
答案4
尝试这个:
$ df -h | awk 'NR==1{next}{for(i=2;i<NF;i++){printf("%s\t",$i)};print""}'
92G 5.2G 82G 6%
2.9G 4.0K 2.9G 1%
1.2G 932K 1.2G 1%
5.0M 0 5.0M 0%
2.9G 700K 2.9G 1%
360G 53G 289G 16%