You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下如何解析提取PCIe NVMe设备对应的PCI地址?

NVMe设备PCI地址提取方案

以下方案均基于你给出的示例路径 /sys/devices/pci0000:00/0000:00:01.2/0000:01:00.2/0000:02:00.0/0000:03:00.0/nvme/nvme0 测试,可直接嵌入bash脚本使用。

方案1:纯bash内置操作(性能最优,无外部依赖)

不需要调用sed/awk等外部工具,适合脚本高频调用场景:

# 替换为你的设备路径变量
dev_path="/sys/devices/pci0000:00/0000:00:01.2/0000:01:00.2/0000:02:00.0/0000:03:00.0/nvme/nvme0"

# 第一步:截断/nvme/及之后的所有内容
temp_path="${dev_path%/nvme/*}"
# 第二步:提取最后一段路径即PCI地址
pci_addr="${temp_path##*/}"

# 输出结果为 0000:03:00.0
echo $pci_addr

方案2:sed单行命令

适合管道流式处理场景:

echo "$dev_path" | sed -E 's/.*\/([0-9a-fA-F:.]+)\/nvme\/.*/\1/'

方案3:awk单行命令

适合多字段同时处理的场景:

awk -F'/nvme/' '{split($1, arr, "/"); print arr[length(arr)]}' <<< "$dev_path"

批量获取所有NVMe设备PCI地址示例

如果需要遍历本机所有NVMe设备批量提取地址,可以直接用以下片段:

for nvme_dev in /sys/class/nvme/nvme*; do
    [[ -e "$nvme_dev" ]] || continue
    dev_path=$(readlink -f "$nvme_dev")
    temp_path="${dev_path%/nvme/*}"
    pci_addr="${temp_path##*/}"
    echo "NVMe设备$(basename $nvme_dev) 对应PCI地址:$pci_addr"
done

注意事项

可以提前加路径合法性判断避免异常输入报错:

[[ "$dev_path" =~ /nvme/ ]] || { echo "无效的NVMe设备路径"; exit 1; }

内容的提问来源于stack exchange,提问作者Nell69Rock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:27:01