オペレーティングシステム(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
- OSディスクを識別するために見つけた最も簡単なコマンドはです
df /
。残念ながら、このコマンドは多くの出力(ヘッダー行と多くのフィールドを意味します)を生成するため、デバイス名のみを取得するにはまだいくつかのフィルタリングを実行する必要があります。 あなたは正しいです。コマンドが長すぎて少し不気味です。
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
。OS_DISK=` command `
に変更することができ、2番目の形式(括弧を含む)が優先されます。OS_DISK=$(command)