어떤 lspci 명령줄 스위치가 출력을 "이더넷" 장치로만 제한합니까?

어떤 lspci 명령줄 스위치가 출력을 "이더넷" 장치로만 제한합니까?

lspci이더넷 장치만 표시하도록 명령 출력을 제한할 수 있는지 확인해 보세요 . 스위치 -d가 작동할 것 같지만 제가 시도한 어떤 것도 작동하지 않았습니다. 예를 들어:

lspci -d '*:*:02'

아직 표시 중모두PCI 장치 클래스. 나는 02여기에 있는 값을 기반으로 클래스로 사용하고 있습니다.http://pci-ids.ucw.cz/read/PD/02

참고로 스위치에 대한 "man lspci" 정보는 다음과 같습니다 -d.

-d [<공급업체>]:[<장치>][:<클래스>] 지정된 공급업체, 장치 및 카테고리 ID가 있는 장치만 표시합니다. ID는 16진수로 지정되며 생략되거나 "*"로 지정될 수 있으며 둘 다 "모든 값"을 의미합니다.

현재 grep을 사용하여 출력을 필터링하고 있으므로 다음 작업을 수행합니다.

lspci -vv | grep -A20 Ethernet

답변1

*카테고리 값을 제거하고 4자리로 확장하면 원하는 결과를 얻을 수 있습니다.

$ lspci -d ::0200
81:00.0 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)
81:00.1 Ethernet controller: Intel Corporation I350 Gigabit Network Connection (rev 01)

업데이트: 클래스 기반 필터는 pciutils v3.3.0 이상에서만 작동합니다(참조변경 로그). RHEL/CentOS의 경우 이는 버전 7.3 이상을 의미합니다.

답변2

man lspci내 시스템에는 클래스를 표시하기 위한 display -d 옵션이 없지만 기계 판독 모드에서 이름을 가져와서 클래스를 파악할 수 있습니다. 지금 바로:

$ lspci -vmm | grep -B1 -A2 '^Class.*Ethernet'
Slot:   08:00.0
Class:  Ethernet controller
Vendor: Intel Corporation
Device: 82574L Gigabit Network Connection

또 다른 옵션은 sysfs를 직접 사용하는 것입니다. 즉, 모달리아의 "c02" 문자열로 모든 이더넷 장치를 찾을 수 있습니다:

$ find /sys/devices/ -name modalias | xargs grep -l c02
/sys/devices/pci0000:00/0000:00:1c.2/0000:03:00.0/modalias
                                          ^^^ PCI port

또는 systool을 사용하십시오:

$ systool -b pci -A modalias | awk '
     /modalias.*c02/ { 
          system("/sbin/lspci -s " dev); } 
     { dev = $1; }'
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 11)

답변3

원하는 결과를 얻으려면 이전에 사용한 것 대신 여기에 있는 pci ID를 사용해야 합니다.

http://pci-ids.ucw.cz/

예를 들어 vmware 이더넷 컨트롤러의 경우 명령은 다음과 같습니다.

lspci -d :07b0

관련 정보