Linux + OSディスクデバイスをキャプチャする方法[閉じる]

Linux + OSディスクデバイスをキャプチャする方法[閉じる]

オペレーティングシステム(Linux)に属するディスクデバイスをキャプチャしたいです。

すべてのLinuxシステムにはオペレーティングシステムに属するディスクのリストがあるため、オペレーティングシステムに属するディスクをキャプチャしようとしています。

fdisk では、ブートが sda1 にあることがわかります。

# sfdisk -l   | grep Linux
/dev/sda1   *      0+     63-     64-    512000   83  Linux
/dev/sda2         63+  19581-  19518- 156773376   8e  Linux LVM

したがって、オペレーティングシステム(Linux)に属するディスクをキャプチャするために、次のコマンドを作成しました。

# OS_DISK=` sfdisk -l   | grep Linux | awk '$2 == "*" {print $1}' | sed s'/\// /g' | awk '{print $2}' | sed 's/[0-9]*//g' `

# echo $OS_DISK    
  sda

コマンドがアクションを実行しているようです。

しかし、私の考えでは、このCLIが長すぎて少し厄介だと思います。

答え1

コマンドを実行fdiskし、sfdiskパッケージに含まれていますutil-linux。同じパッケージには、findmnt次のように使用できるコマンドもあります。

findmnt / -no SOURCE
/dev/sda6

答え2

  1. OSディスクを識別するために見つけた最も簡単なコマンドはですdf /。残念ながら、このコマンドは多くの出力(ヘッダー行と多くのフィールドを意味します)を生成するため、デバイス名のみを取得するにはまだいくつかのフィルタリングを実行する必要があります。
  2. あなたは正しいです。コマンドが長すぎて少し不気味です。  awk非常に強力なプログラムです。grepおよび/またはで使用する必要はほとんどsedなくawk、同じパイプラインで複数のコマンドを使用する必要はほとんどありません。あなたのパイプラインは次のように置き換えることができます。

    sfdisk -l | sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1); print [サム]; } '
    幸いにも10人しかいません。数値短いが5つではなく1つのコマンドです。

    PSはsed 's/[0-9]*//g'やや危険な命令です。なぜならgそれを持っていても役に立たないからです*。どういう意味かを見るには、sed 's/[0-9]*/X/g'さまざまな入力をs/[0-9]/X/g試してみてくださいs/[0-9]\+/X/g

  3. OS_DISK=` command `に変更することができ、2番目の形式(括弧を含む)が優先されます。OS_DISK=$(command)

関連情報