lsblk +ファイルシステムなしでディスクのみを印刷する方法

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

ベストアンサー1

メソッドでは、lsblkにfdisk(およびいくつかの簡単なヘルパーツール)を追加することをお勧めします。次のシェルスクリプトは私のテストケースで動作します。

#!/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(およびいくつかの簡単なヘルパーツール)のみを使用する次のシェルスクリプトを試してください。

#!/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「for-line」から削除してください。これは2番目のオプションではうまく機能します(ただし、fdiskは "fdisk:can open /dev/sr0:media notfound"を介してdoループから出ることができるため、最初のオプションではうまくいきません)。

おすすめ記事