Linux
Linux + 如何擷取 OS 磁碟設備
我們要擷取屬於作業系統(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太長而且有點笨拙
- 我發現最簡單的命令來辨識作業系統磁碟是
df /
. 不幸的是,它會產生大量輸出(我的意思是標題行和許多欄位),因此您仍然需要進行一些過濾才能僅獲取設備名稱。- 你是對的; 你的命令太長而且有點笨拙。
awk
是一個非常強大的程序;您很少需要將它與grep
and/or結合使用,並且幾乎不需要在同一管道中sed
使用多個命令。awk
您的管道可以替換為sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1); 拆分($ 1,一個,“/”);列印一個[3];}'
好的,它只短了十幾個字元,但它是一個命令而不是五個。
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 ``可以更改為,並且首選第二種形式(帶括號)。OS_DISK=$(*command*)
命令
fdisk
和sfdisk
包含在 package 中util-linux
。在同一個包中還有一個findmnt
命令,你可以像下面這樣使用:findmnt / -no SOURCE /dev/sda6