Linux

Linux + 如何擷取 OS 磁碟設備

  • November 25, 2018

我們要擷取屬於作業系統(Linux)的磁碟設備

由於每台linux機器都有不屬於作業系統的磁碟列表,我們想要擷取屬於作業系統的磁碟

所以通過 fdisk 我們可以看到 boot 在 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. 我發現最簡單的命令來辨識作業系統磁碟是df /. 不幸的是,它會產生大量輸出(我的意思是標題行和許多欄位),因此您仍然需要進行一些過濾才能僅獲取設備名稱。
  2. 你是對的; 你的命令太長而且有點笨拙。  awk是一個非常強大的程序;您很少需要將它與grepand/or結合使用,並且幾乎不需要在同一管道中sed使用多個命令。awk您的管道可以替換為
sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1); 拆分($ 1,一個,“/”);列印一個[3];}'

好的,它只短了十幾個字元,但它是一個命令而不是五個。

PSsed '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 ``可以更改為,並且首選第二種形式(帶括號)。OS_DISK=$(*command*)

命令fdisksfdisk包含在 package 中util-linux。在同一個包中還有一個findmnt命令,你可以像下面這樣使用:

findmnt / -no SOURCE
/dev/sda6

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