Awk
lsblk + 如何只列印沒有文件系統的磁碟
我們只想通過命令行列印沒有文件系統的磁碟
從下面的例子我們可以看到
sde
磁碟沒有文件系統lsblk -o NAME,FSTYPE NAME FSTYPE sda ├─sda1 xfs └─sda2 LVM2_member ├─vg-LV_root xfs ├─vg-LV_swap swap ├─vg-LV_var xfs └─vg-LV_docker xfs sdb ext4 sdc ext4 sdd ext4 sde
所以我們嘗試以下命令以擷取沒有 FS 的磁碟
lsblk -o NAME,FSTYPE | awk '$2 == "" { print $0 }'
我們得到
sda sde
正如我們從上面
sda
列印的磁碟中看到的,但是sda
是作業系統磁碟,所以命令行沒有給出正確的輸出正確的輸出應該是:
sde
有什麼建議或其他方法可以提供正確的輸出嗎?
lsblk -oNAME,FSTYPE,FSTYPE --noheadings --nodeps sda sdb ext4 ext4 sdc ext4 ext4 sdd ext4 ext4 sde
我建議我們在方法中將 fdisk(以及一些簡單的幫助工具)添加到 lsblk 中。以下 shellscript 在我的測試案例中有效,
#!/bin/bash for i in $(lsblk -dno name|grep -v sr) do LANG=C sudo fdisk -lu "/dev/$i" | tr '\n' ' ' | grep 'Disk ' | grep -v 'Disklabel type:' | grep -o "/dev/$i" done
這標識了一個乾淨的驅動器(沒有任何磁碟標籤別名分區表)。
如果您希望查看具有分區表和分區的驅動器,但在任何分區中都沒有文件系統(也沒有交換空間),請嘗試以下僅使用 lsblk(和一些簡單的幫助工具)的 shellscript,
#!/bin/bash for i in $(lsblk -dno name|grep -v sr) do LANG=C echo -n "/dev/$i " lsblk -lno fstype "/dev/$i" | tr '\n' ' ' echo "" done | sed 's/ *$//' | grep -v '\ [a-z]*'
編輯:
如果您有時想查看 CD/DVD 驅動器,請
|grep -v sr
從“換行”中刪除。這在第二種選擇中效果很好(但在第一種中效果不佳,因為 fdisk 可以使用“fdisk:無法打開 /dev/sr0:未找到介質”將您從 do-loop 中拋出)。