我们想要捕获属于操作系统(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
命令fdisk
和sfdisk
包含在包中util-linux
。在同一个包中还有findmnt
命令,您可以像下面这样使用:
findmnt / -no SOURCE
/dev/sda6
答案2
- 我发现识别操作系统磁盘的最简单命令是
df /
.不幸的是,它会产生大量输出(我指的是标题行和许多字段),因此您仍然需要进行一些过滤才能仅获取设备名称。 你说得对;你的命令太长而且有点笨拙。
awk
是一个非常强大的程序;您很少需要将它与grep
and/or结合使用sed
,并且awk
几乎不需要在同一管道中使用多个命令。您的管道可以替换为sfdisk -l | sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1);分割($1,a,“/”);打印[3]; }'
还好,只有十几个人人物更短,但它是一个命令而不是五个。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 `
可以更改为,并且首选第二种形式(带括号)。OS_DISK=$(command)