100G'nin üzerindeki disk boyutlarını bulan bu filtreyi kısaltabilir miyim?


12

Amacım lsblk'den 100G'den daha büyük diskler elde etmek.

Çalışıyorum, ama garip. Eminim kısaltılabilir. Ya lsblk'den tamamen farklı bir şey kullanarak, ya da belki insan tarafından okunabilir sayıları awk ile doğrudan filtreleyebilirim.

İşte bir araya getirdim:

lsblk | grep disk | awk '{print$1,$4}' | grep G | sed 's/.$//' | awk '{if($2>100)print$1}'

100G'den büyük disklerin yalnızca sdx ve nvmexxx kısımlarını verir. Tam olarak ihtiyacım olan şey.

Bundan memnunum, ama sizden daha fazla bilgi edinmek için can atıyorum Gurus 😉


100-999GB arasında ve 100T'den daha büyük, ama 1-99T arasında hiçbir şey, sanırım? (terabytes ~)
hanshenrik

Evet, dikkatimi çeken ve cevaplarda zaten tartışılan bir kusur. Bu nedenle, filtreyi insan tarafından okunabilir yerine bayt boyutuna göre yapma cevabını kabul ettim. Eğer başka bir yöntem kullanırsanız, bunu öğrenmekten mutluluk duyarım.
chalybeum

Yanıtlar:


28

Aşağıdakilerden istediğiniz çıktı biçimini belirleyebilirsiniz lsblk:

% lsblk -nblo NAME,SIZE
mmcblk0   15931539456
mmcblk0p1   268435456
mmcblk0p2 15662038528

Kullanılan seçenekler :

-b, --bytes
      Print the SIZE column in bytes rather than in human-readable format.

-l, --list
      Use the list output format.

-n, --noheadings
      Do not print a header line.

-o, --output list
      Specify which output columns to print.  Use --help to get a list of  all  supported
      columns.

Ardından filtreleme daha kolaydır:

% lsblk -nblo NAME,SIZE | awk '$2 > 4*2^30 {print $1}' # greater than 4 GiB
mmcblk0
mmcblk0p2

Sizin durumunuzda, bu 100*2^30100GiB veya 100e9/ 1e11100GB için olurdu .


Ahhh, bu akıllıca! İlk etapta gerekmeyenleri ayıklayacağız. Bir soru: Sadece baytlarla tutarlılık için x * 2 ** 30 mu kullanıyorsunuz? S.th. kullanmak için dezavantaj var mı 10 ** 3 gibi mi?
chalybeum

@chalybeum evet, bayt için. Hayır, 10 ** 9 kullanabilirsiniz. Değerler çok farklı değil.
muru

OP'nin tek katmanlı bölümleri filtrelediğini unutmayın.
AmcaCarl

@UncleCarl kaydetti
muru

1
Bu özel 100G sınır awk durumunda, egrep '\d{12,}'sırayla <12 basamaklı satırları kaldırmak için kısaltılabileceğine dikkat edin. Awk elbette daha evrensel.
Gnudiff

18

Ayrıca lsblkJSON biçiminde çıktı vermeyi söyleyebilir ve filtrelemeyi aşağıdakilerle yapabilirsiniz jq:

$ lsblk -Jb | jq -r '..|select(.size? >= 1e11).name'
sda
sda2

Veya:

$ lsblk -Jb | jq -r '..|select(.type? == "disk" and .size? >= 1e11).name'
sda

Tür girişleriyle sınırlamak için disk.

( 1e11100 GB. 100 GiB için değiştirin 107374182400(veya 100*1024*1024*1024). Yuvarlama nedeniyle, lsblkkendisi -byaklaşık 99.9278 ila 100.0488 GiB arasında değişen boyutlar için 100G raporları olmadan (bazı nedenlerden dolayı))

İle lsblk -OJb, daha lsblkayrıntılı bir seçim yapmanızı veya daha fazla veya daha fazla alakalı bilgi vermenizi sağlayan tüm mevcut bilgileri raporlar.

Bilgileri doğrudan adresinden de alabilirsiniz /sys. İle zsh:

$ printf '%s\n' /sys/class/block/*(e'[(($(<$REPLY/size) * 512 >= 1e11))]':t)
sda
sda2

Bu bir Guru'dan gerçek bir cevap, kimse okuyamayacak. : D
Archemar

Bunu bilmek güzel bir şey. Ama bash'taki yolculuğumun bu aşamasında başka bir araç kullanarak daha fazla karmaşıklık getirmek istemiyorum.
chalybeum

Bu güzel bir uygulama jq(sadece birkaç ay önce öğrendim).
Dubu

6

Deneyin

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

bu aynı anda grep ve süzülecektir.

  • $4 ~ /G$/ G boyutunda dosyalanmak
  • $4+0 > 100 100G üzerinde boyut elde et
  • {print $1} NAME yazdır

kural olarak asla grepve awkaynı boruda kullanmanız gerekmez .

disk (ve bölüm yok) almak için: awk filtreleme

lsblk| awk '$4 ~ /G$/ && $4+0 > 100 && $6 == "disk"  {print $1}'

nerede

  • $6 == "disk" sadece diskli sütun seç

disk (ve bölüm yok) almak için: lsblk filtreleme

lsblk --nodeps| awk '$4 ~ /G$/ && $4+0 > 100 {print $1}'

nerede

  • --nodeps : -d, - düğümler köle veya tutucu yazdırmıyor

Neredeyse. Hala bölümleri yazdırıyor. Ama biraz boş zamanım olduğunda bunun arkasına geçebileceğimi düşünüyorum.
chalybeum

1
@chalybeum, muru'nun cevabına aynı filtreleme hilesinin uygulanabileceğini düzelttim.
Archemar

(Ben muhtemelen --no-depsbu cevabın genel tarzı ile uyumlu olarak seçeneği kullanmak istiyorum )
muru

2
Korkarım ki boyutu terabayt (veya daha büyük birimler) olarak gösterilen diskleri yakalayamaz.
fra-san

@ fra-san fuar noktası ve orijinal çözümüm için de geçerlidir. Bu yüzden buradan disk filtre bitini alıp bayt dönüşümüne koyuyorum.
chalybeum
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.