Список устройств PCI путем чтения из файла (Вместо команды lspci)

Использованиеawk:

list="1,21,3,4"
source=2

awk -F, -v search="$source" '{ for (i=1;i<=NF;i++) { if ($i==search) {print $i} } }' <<<"$list"

Вы ищете 2во всей строке, а 21на самом деле содержит 2.

Если вся ваша строка всегда разделена запятой, вы также можете сделать:

grep -E ',2,|,2$|^2,'

Это найдет 2в начале, середине или конце списка.

0
14.05.2021, 06:56
2 ответа

Не каждый файл в каталоге /proc/ содержит текст.

/proc/bus/pci/05/00.0(и подобные файлы )содержат двоичные данные, а не текст. Они не предназначены для отображения на терминале, они предназначены для чтения программой, которая понимает двоичный формат данных (, который будет задокументирован где-то в документации ядра. или исходный код, по крайней мере ).

Если вы хотите посмотреть, что в нем, вы можете использовать hexdumpака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  |..@.P...........|
00000040

Ваш вывод, вероятно, будет другим, потому что у вас почти наверняка есть другое устройство PCI -e на 05 :00.0

2
28.07.2021, 11:32

Если вы ищете, например,. Идентификаторы поставщиков/устройств 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, прежде чем переходить к /proc.

2
28.07.2021, 11:32

Теги

Похожие вопросы