На сайте fedoramagazine.org вышла серия статей о программах для получения информации о своей системе. Возможно кто-то узнает для себя что-то новое или найдет интересные флаги и/или возможности, которыми еще не пользовался. Первая статья будет об двух инструментах:

  • lscpu - информация о центральном процессоре;
  • lsusb - информация о подключенных USB устройствах.

Введение

Fedora (и другие распространенные системы Linux) предлагает вам набор инструментов для управления, мониторинга и понимания системы. Среди этих инструментов есть ряд команд, которые начинаются с ls (что означает «список»).

Они обеспечивают легкое понимание различных аспектов аппаратного обеспечения и ресурсов системы. В этой серии статей вы найдете введение и обзор многих из них, начиная с самых простых. В этом посте будут рассмотрены lscpu и lsusb.

lscpu - отображение информации о процессоре

Команда lscpu собирает и отображает информацию об архитектуре центрального процессора. Она предоставляется пакетом util-linux. Команда собирает информацию о процессоре из нескольких источников, таких как /proc/cpuinfo и библиотек, зависящих от архитектуры (например, librtas на PowerPC):

1
$ lscpu

Эта команда выводит такую информацию как: количество процессоров, количество потоков на ядро, количество ядер на сокет, а также семейство и модель процессора.

По запросу она может выводить подробную информацию о процессоре в формате JSON. Это обеспечивает структурированное представление, которое особенно полезно для сценариев и автоматизации:

1
$ lscpu --extended --json

Расширенный пример использования

Благодаря машиночитаемому выводу JSON вы можете извлекать информацию с помощью jq (мощного инструмента командной строки, который позволяет пользователям эффективно анализировать, фильтровать и манипулировать данными JSON и заслуживает отдельной статьи). Например, следующая команда извлечет текущие значения MHz для каждого ядра центрального процессора:

1
2
3
4
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
lscpu --json --extended \
    | jq '.cpus[] | {cpu: .cpu, mhz: .mhz}'

Давайте посмотрим на отдельные части команды:

  • export LANG=en_US.UTF-8 и export LC_ALL="en_US.UTF-8" гарантируют, что в выводе не используются локализованные числа. Например, для немецкого или русского языка используется запятая вместо точек, в качестве разделителя целой и десятичной части чисел. Это приведет к нарушению формата JSON и ошибкам ввода программы jq (jq: parse error: Objects must consist of key:value pairs at line 10, column 29).
  • lscpu --json --extended генерирует подробную информацию о процессоре в формате JSON.
  • jq '.cpus[] | будет перебирать каждую запись из массива данных о центральном процессоре.
  • {cpu: .cpu, mhz: .mhz}' создает новый объект JSON для каждого ядра процессора, отображающий порядковый номер ядра (cpu) и его текущую частоту в MHz (mhz).

Пример вывода для ноутбука, работающего в режиме производительности:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ lscpu --json --extended \
  | jq '.cpus[] | {cpu: .cpu, mhz: .mhz}'
{
  "cpu": 0,
  "mhz": 3700.0171
}
{
  "cpu": 1,
  "mhz": 3700.2241
}
{
  "cpu": 2,
  "mhz": 3700.1121
}
{
  "cpu": 3,
  "mhz": 3884.2539
}

А теперь в режиме энергосбережения:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ lscpu --json --extended \
  | jq '.cpus[] | {cpu: .cpu, mhz: .mhz}'
{
  "cpu": 0,
  "mhz": 1200.0580
}
{
  "cpu": 1,
  "mhz": 1200.0070
}
{
  "cpu": 2,
  "mhz": 1200.5450
}
{
  "cpu": 3,
  "mhz": 1200.0010
}

lsusb - отображение информации об USB-устройствах

Команда lsusb отображает подробную информацию о шинах USB в системе и подключенных к ним устройствах. Она предоставляется пакетом usbutils и помогает пользователям и системным администраторам легко просматривать конфигурацию и устройства, подключенные к их USB-интерфейсам:

1
$ lsusb

В результате выводится список всех шин USB, подключенных к ним устройств, а также краткая информация о каждом устройстве, например идентификатор и производитель. Это особенно полезно для быстрой проверки того, какие устройства подключены к системе. Так же полезно, если нужен идентификатор USB-устройства для правил udev или чего-то подобного.

Пример использования и вывод программы

Для тех, кому нужна более подробная информация о USB-устройствах, lsusb позволяет вывести более подробную информацию:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ lsusb | grep Fibocom
Bus 001 Device 013: ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem

$ sudo lsusb -d 2cb7:0210 -v
Bus 001 Device 013: ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 [unknown]
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x2cb7 Fibocom
  idProduct          0x0210 L830-EB-00 LTE WWAN Modem
  bcdDevice            3.33
  iManufacturer           1 FIBOCOM
  iProduct                2 L830-EB-00
  iSerial                 3 004999010640000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x00a1
    bNumInterfaces          4
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
[ more output omitted for readability ]

Использование опций -v и -t укажет lsusb выгрузить иерархию физических USB-устройств в виде дерева, включая идентификаторы. Ниже показано подробное дерево всех USB-устройств (здесь используется ThinkPad T480S), их типы, скорости и классы устройств. Это особенно полезно для устранения неполадок с USB-устройствами:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
$ lsusb -t -v
/:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/12p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    |__ Port 001: Dev 002, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        ID 046d:c069 Logitech, Inc. M-U0007 [Corded Mouse M500]
    |__ Port 002: Dev 003, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        ID 046a:c098 CHERRY 
    |__ Port 002: Dev 003, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        ID 046a:c098 CHERRY 
    |__ Port 003: Dev 004, If 0, Class=Chip/SmartCard, Driver=usbfs, 12M
        ID 058f:9540 Alcor Micro Corp. AU9540 Smartcard Reader
    |__ Port 005: Dev 005, If 0, Class=Video, Driver=uvcvideo, 480M
        ID 5986:2123 Bison Electronics Inc. 
    |__ Port 005: Dev 005, If 1, Class=Video, Driver=uvcvideo, 480M
        ID 5986:2123 Bison Electronics Inc. 
    |__ Port 006: Dev 013, If 0, Class=Communications, Driver=cdc_mbim, 480M
        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
    |__ Port 006: Dev 013, If 1, Class=CDC Data, Driver=cdc_mbim, 480M
        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
    |__ Port 006: Dev 013, If 2, Class=Communications, Driver=cdc_acm, 480M
        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
    |__ Port 006: Dev 013, If 3, Class=CDC Data, Driver=cdc_acm, 480M
        ID 2cb7:0210 Fibocom L830-EB-00 LTE WWAN Modem
    |__ Port 007: Dev 007, If 0, Class=Wireless, Driver=btusb, 12M
        ID 8087:0a2b Intel Corp. Bluetooth wireless interface
    |__ Port 007: Dev 007, If 1, Class=Wireless, Driver=btusb, 12M
        ID 8087:0a2b Intel Corp. Bluetooth wireless interface
    |__ Port 008: Dev 008, If 0, Class=Video, Driver=uvcvideo, 480M
        ID 5986:2115 Bison Electronics Inc. 
    |__ Port 008: Dev 008, If 1, Class=Video, Driver=uvcvideo, 480M
        ID 5986:2115 Bison Electronics Inc. 
    |__ Port 009: Dev 009, If 0, Class=Vendor Specific Class, Driver=[none], 12M
        ID 06cb:009a Synaptics, Inc. Metallica MIS Touch Fingerprint Reader
/:  Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/6p, 5000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 003: Dev 002, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
        ID 0bda:0316 Realtek Semiconductor Corp. Card Reader
/:  Bus 003.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/2p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
    |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/5p, 480M
        ID 0451:8442 Texas Instruments, Inc. 
        |__ Port 001: Dev 003, If 0, Class=Hub, Driver=hub/7p, 480M
            ID 0424:2137 Microchip Technology, Inc. (formerly SMSC) 
        |__ Port 003: Dev 005, If 0, Class=Hub, Driver=hub/3p, 480M
            ID 0bda:5411 Realtek Semiconductor Corp. RTS5411 Hub
            |__ Port 001: Dev 006, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
                ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
        |__ Port 004: Dev 004, If 0, Class=Human Interface Device, Driver=usbhid, 480M
            ID 0451:82ff Texas Instruments, Inc. 
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/2p, 10000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub

Заключение

Несмотря на свою простоту, обе команды дают представление о конфигурации и состоянии системы. Независимо от того, занимаетесь ли вы устранением неполадок, оптимизацией или просто проявляете любопытство, эти инструменты предоставляют ценные данные, которые помогут вам лучше понимать и управлять вашим окружением Linux. Увидимся в следующий раз, когда мы рассмотрим более полезные инструменты командной строки для получения списков и информации, а также способы их использования.