Disk kullanım yüzdesi `df -hl`den nasıl yazdırılır


12

df -hlBoyutu, yüzde olarak kullanımı ve kullanılabilir alanı ile tüm bölümlerimin bir listesini çıktı biliyorum .

Yüzde olarak yalnızca boyutu ve kullanımı çıktılamak istersem sda2ve sda3örneğin, Linux'a (Ubuntu) bunları kontrol etmesini, toplamını ve bana göstermesini nasıl söyleyebilirim?


1
Aşağıdaki yanıtlar, tüm diskleri ayrıştırmak yerine diskleri df komut satırına koymak için kullandıkları df komutunu değiştirerek basitleştirilebilir. ie df -hl / dev / sda [23]
mdpc

Yanıtlar:


11

İçin dfhesapla toplamları için kullanın --totalsseçeneği. Toplamların yalnızca belirli sürücülerde olmasını istiyorsanız, bunları bağımsız değişken olarak belirtin.

Örnekler (ve bilgisayarımdan çıktı)

Bu, tüm yerel bağların toplamıdır:

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

Birkaç sürücü ile kısıtlama (belirtilen yol tam bir montaj noktası değilse, en yakın montaj noktasının kullanıldığını unutmayın [sondaki nota bakın] ):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

veya devisimleri kullanarak :

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

Daha fazla özelleştirme

'Özel' olanlar dışındaki tüm mount'ları listelemek istiyorsanız, -xbölüm türüne göre hariç tutma seçeneğini kullanabilirsiniz . ( -TTürleri gösterme seçeneğini kullanın .)

Şahsen, etkileşimli kullanım için, ~/.bash_aliases'fiziksel olmayan' bağları hariç tutmak için aşağıdaki bash takma adını (eklendi ) kullanıyorum.

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

Not

Bağlama noktaları içindeki yolların belirtilmesi, bazen bağlanma noktasına olan tam yolu belirten farklı form sonuçları verebilir. Örneğin, dizüstü bilgisayarımda sshfs(yerel) dosya sunucumu bağlamak için kullanıyorum .

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

Sunucu kökü ( /) adresinde bulunur ~/.server-root. Ancak, sunucu üzerinde, diskler üzerine monte edilir /disks/*ki, df(dizüstü) hakkında 'bilmek' değil.

Anlaşılan dfuygun yolları verilirse, sunucuda farklı bağlar disk kullanımını listeleyebilirsiniz. Ancak, tüm yollar için aynı “Dosya Sistemi” ve “Bağlandı” yı gösterir, çünkü (inanıyorum)sshfs yerel çekirdek bağlama tablosundaki tek bağlama noktası budur ( inanıyorum) .


Başka bir şey: Soruyla gerçekten ilgili değil, sorunun daha önceki bir cevabı ile ilgili.

Numaraları bir awkkomut dosyasıyla (ya da benzeri), daha önce gönderilen cevapların yaptığı gibi eklemek , bayrağı kullanırken iyi bir fikir değildir-h . Bunun nedeni özel işlemlerin gerekli olmasıdır. Sadece bir satırda ve diğerinde size+=$2;olan bir alan için yapamazsınız ve bundan faydalı bir şey elde edemezsiniz …418M12G

Bir örnek için awk, ekleme 500Miçin 10.2Gverim

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

510.2 neyi?

Burada açıkça bir sorun var. Yani, hatırlanması için bir ipucu olarak , df (ve 'insan tarafından okunabilir' sayıları kullanabilen ) çıktısında (otomatik) hesaplama yaparken . Eğer emin olun değil kullanmak -hbayrağı ve hesaplama komut dosyasına girdi olduğunu, bunun yerine, (bayt, bloklar, KB'leri örneğin, ya da her neyse) normalize ve yapılacak 'ekran ölçeklendirme' ucunda. Çoğu komut dosyası yazma ve programlama dilinde böyle bir şey eklemek zor değildir:

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

burada değer bayt cinsindendir ve eşik değeri 1000 mertebesinde bir değerdir. Bu yöntemin sonucu, istenen aralıkta ve birkaç önemli basamakla yazdırılan değerleri (önek hariç) üretmek için kolayca ayarlayabilmenizdir. seçmek. Biçimin -hgenellikle sabit olduğu, anahtarlı standart yardımcı programlarla karşılaştırıldığında .

Tabii ki, bu hesaplama genellikle daha verimli ve / veya zarif yapılabilir, ancak bu yazıldığı belirli bir dil için bir sorudur. Açıkçası, sadece şimdi ve sonra etkileşimli olarak görüntülemek için çalışan bir kullanıcı komut dosyasında kullanılıyorsa bazı bilgiler, verimlilik gerçekten bir endişe değildir.


4

Bence ikisinin de toplamını istediniz sizeveuse%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t

Aynen, yukarıdakiyle aynı.
user32398

@ user32398: Farklılıklar var ahbap.
pradeepchhetri

Bu soruya cevabımın sonunda, bu soruya neden basit bir awk yaklaşımı (sadece size+=$1) kullanmama konusunda biraz ayrıntı verdim . Bu yöntem gerçekten -hseçeneğiyle uyumlu değil df.
Johan E

2

Şunun gibi bir araç kullanırsınız awk:

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

Nerede:

  • /^\/dev\/sd[ab]/yalnızca /dev/sdaveya ile başlayan satırları filtrelemek için kullanılan bir kalıptır/dev/sdb
  • { sum+=$5 } yukarıdaki kalıbın herhangi bir eşleşmesi için beşinci alanı ekleyin

Awk.info wiki'sinde bazı yararlı awkreferanslar bulabilirsiniz .


Sanırım% 'yi toplamam yeterli değil, ama teşekkürler fikri anladım.
user32398

1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'

1
O istedi size, % usedve available. Sadece kullanılan% değil. Ayrıca mdpc sürücüyü tek tek söylemek için daha iyi bir yöntem var, ama maç awk desen yapmak istiyorsanız bunu yapabilirsiniz:df -hl | awk '/sda2/{print $2,$5,$4}'
jesse_b

0

Uyarılarla isterseniz, IFTTT, Telegram ve WebHooks ile yapıyorum (hepsi ücretsiz)

#!/bin/bash
diskusage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom|mmcblk0p1' | awk '{ print $5 " " $1 }'| cut -f1 -d '%')
hostname=$(hostname)
tolerance=(85)
date=$(date)

if [[ "$diskusage" -gt "$tolerance" ]]
        then
        echo ""
        echo total disk usage is $diskusage%
        echo ""
        curl -X POST -H "Content-Type: application/json" -d '{"value1":"--Alert--","value2":"Total disk usage is '$diskusage'% ","value3":"Host information: '$hostname' "}' https://maker.ifttt.com/trigger/{alert}/with/key/PutYourKeyHEre
fi
echo ''
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date
echo Disk usage is $diskusage%. The tolerance is $tolerance%. No alert fired $date >> /var/log/IFTTT/checkdiskspace.log
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.