Awk

lsblk + 如何只列印沒有文件系統的磁碟

  • July 25, 2022

我們只想通過命令行列印沒有文件系統的磁碟

從下面的例子我們可以看到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 中拋出)。

引用自:https://unix.stackexchange.com/questions/711066