ドライブ名なしでドライブスペースの詳細を取得する方法はありますか?たとえば、出力
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%
私がこれをしたいのはなぜですか?サーバーが複数あり、毎日レポートを作成する必要があります。これで私の作業量は10分の1に減ります。どんな提案でも高く評価いたします。
答え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
ヘッダー行をスキップするには、指定された操作を2行目以下に制限します...
-actionは不要なフィールドをawk
0{ $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%