Linux + 如何捕获操作系统磁盘设备

Linux + 如何捕获操作系统磁盘设备

我们想要捕获属于操作系统(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

命令fdisksfdisk包含在包中util-linux。在同一个包中还有findmnt命令,您可以像下面这样使用:

findmnt / -no SOURCE
/dev/sda6

答案2

  1. 我发现识别操作系统磁盘的最简单命令是df /.不幸的是,它会产生大量输出(我指的是标题行和许多字段),因此您仍然需要进行一些过滤才能仅获取设备名称。
  2. 你说得对;你的命令太长而且有点笨拙。  awk是一个非常强大的程序;您很少需要将它与grepand/or结合使用sed,并且awk几乎不需要在同一管道中使用多个命令。您的管道可以替换为

    sfdisk -l | sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1);分割($1,a,“/”);打印[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)

相关内容