如果我知道分区是例如 /dev/sda1,我如何获取包含该分区的磁盘名称(在本例中为 /dev/sda)?
输出应该只是磁盘路径。 (如“/dev/sda”)
编辑:它不应该是字符串操作
您可以使用 shell 的内置字符串切割功能:
$ d=/dev/sda1
$ echo ${d%%[0-9]*}
/dev/sda
$ d=/dev/sda11212
$ echo ${d%%[0-9]*}
/dev/sda
这仅适用于某些磁盘名称。如果名称中可以有多个数字,它将截断第一个数字之后的所有数字。
将磁盘名称与分区名称分开的确切规范是什么?
您可以使用
sed
获取磁盘。因为分区只是磁盘名称的增量,所以很容易执行:
echo "/dev/sda1" | sed 's/[0-9]*//g'
产生输出
/dev/sda
另一个可用于获取磁盘信息的命令是
lsblk
。只需键入不带参数的内容即可打印出与磁盘和分区相关的所有信息。
我发现的唯一可靠的方法是在非特权用户运行时读取
partx
的输出。
例如:
partx --show /dev/sda1
将输出:
partx: cannot open /dev/sda: Permission denied
另一个例子:
partx --show /dev/nvme1n1p1
将输出:
partx: cannot open /dev/nvme1n1: Permission denied
以下是如何从此类输出中提取设备名称的示例:
partx --show /dev/nvme0n1p1 2>&1 | awk -F'[ :]' '{print $5}'
这将输出:
/dev/nvme0n1p1
您还可以使用其他工具,如
grep
或 sed
来提取部分。