我需要从文件中读取 PCI 设备信息。但当我使用这样的命令时,它会给出不可用的输出:
cat /proc/bus/pci/05/00.0
输出:
�h��
我该如何解决这个问题?
操作系统:类似 Debian 的 Linux x64、Kenel 4.19
答案1
并非 /proc/ 下的每个文件都包含文本。
/proc/bus/pci/05/00.0
(和类似的文件)包含二进制数据,而不是文本。它们并不是要显示到终端,而是要由理解二进制数据格式的程序读取(至少会记录在内核文档或源代码中的某个位置)。
如果您想查看其中的内容,可以使用hexdump
aka hd
:
$ hd /proc/bus/pci/05/00.0
00000000 00 10 72 00 07 04 10 00 03 00 07 01 10 00 00 00 |..r.............|
00000010 01 c0 00 00 04 00 6c d2 00 00 00 00 04 00 28 d2 |......l.......(.|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 10 40 30 |..............@0|
00000030 00 00 40 fe 50 00 00 00 00 00 00 00 0a 01 00 00 |[email protected]...........|
00000040
您的输出可能会有所不同,因为您几乎肯定在 05:00.0 有不同的 PCI-e 设备
答案2
如果您正在寻找 PCI 供应商/设备标识符,您可以使用/sys/bus/pci/...
目录树:
for i in /sys/bus/pci/devices/*
do
printf "Device ${i##*/}: vendor %s, device %s\n" "$(< $i/vendor)" "$(< $i/device)"
done
我认为/sys
目录层次结构是/proc
由于随机难以解析格式的杂项(与进程无关)系统信息而变得混乱而创建的,内核开发人员不喜欢这样,因此/sys
对虚拟目录有更严格的要求文件易于解析。
/sys
因此,在访问 之前,您可能需要检查一下您要查找的信息是否可以在“first”下找到/proc
。