Краткий обзор принтера использования физического диска awk
(nb: пробовал только в Linux):
#!/bin/sh
while ! [ $# -eq 0 ]; do
df --block-size=1G | awk '$1 ~ /\/dev\/'"${1}"'/ {free+=$4; total+=$2} END {printf "%4s: %4sG / %4sG\n", "'"${1}"'", free, total}'
shift
done
Сохраните приведенный выше скрипт как, например, dfsum
и запустите его, например:
$ dfsum sda sdb
sda: 19G / 916G
sdb: 59G / 1834G
РЕДАКТИРОВАТЬ: обновленная версия с заголовком и автоматическим определением дисков:
#!/bin/sh
df --block-size=1G | awk '
BEGIN {printf "%-5s%5s %5s\n", "disk", "free", "total"}
!match($1, "^/dev/([[:alpha:]]+)", disk) {next} \
{free[disk[1]]+=$4; total[disk[1]]+=$2} \
END {for (var in free) printf "%3s: %4sG / %4sG\n", var, free[var], total[var]}'
Примечание: для этого требуется gawk
РЕДАКТИРОВАТЬ снова:
#!/bin/sh
df --block-size=1G |\
awk '
BEGIN {
printf "%-5s%5s %5s\n", "disk", "free", "total"
}
!match($1, "^/dev/([[:alpha:]]+)[[:digit:]]", disk) {next}
{
free[disk[1]]+=$4
total[disk[1]]+=$2
}
END {
for (var in free) {
printf "%3s: %4sG / %4sG\n", var, free[var], total[var]
totalfree+=free[var]
totalsize+=total[var]
}
printf " -------------\n %4sG / %4sG\n", totalfree, totalsize
}
'
Это также дает общую сумму и исправляет изменения в моей системе, которые произошли после перезапуска, когда столбец с /dev/disk/by-uuid/
... отображается для корневой файловой системы в выводе df
, но также как отдельная запись как /dev/sda1
. Меня интересует только последнее.