Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

А что внутри? Получение информации об аппаратном обеспечении компьютера в Linux

Оригинал: What's in the Box? Interrogate Your Linux Machine's Hardware
Автор: Federico Kereki
Дата публикации: 16 февраля 2016 г.
Перевод: А. Панин
Дата перевода: 17 мая 2016 г.

Недавно я столкнулся с проблемой при установке драйвера для видеокарты производства NVIDIA. Оказалось, что в последней версии драйвера была прекращена поддержка моей видеокарты, поэтому после обновления версии ядра ОС я оказался без работающего видеодрайвера. Разумеется, тогда мне нужно было вспомнить ответ на один простой вопрос: "видеокарту какой модели я использую?". Но, к сожалению, я уже не помнил этого. Если вам нужно узнать название чипсета вашей материнской платы, модель центрального процессора или получить какую-либо другую информацию об аппаратном обеспечении вашего компьютера в Linux, вы всегда можете воспользоваться несколькими специализированными утилитами. В моем случае удалось достаточно быстро получить информацию о модели установленной видеокарты, выяснить, что ее использование будет связано с некоторыми проблемами в будущем и принять решение о целесообразности покупки новой.

В рамках данной статьи я постараюсь описать некоторые способы получения информации об аппаратном обеспечении вашей машины. Я продемонстрирую классические приемы работы с некоторыми утилитами с интерфейсом командной строки, но если вы предпочитаете использовать утилиты с графическим интерфейсом, вы также сможете найти в данной статье описания нескольких таких утилит. Если же вы желаете получить доступ к низкоуровневым интерфейсам для получения информации об аппаратном обеспечении, данная статья также будет небезынтересной для вас, ведь я буду упоминать о некоторых файлах виртуальных файловых систем /proc и /sys, содержащих данную информацию.

Используемые термины

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

  • ACPI (Advanced Configuration and Power Interface - усовершенствованный механизм управления конфигурацией и питанием): интерфейс для управления различными аспектами работы системы электропитания компьютера.
  • AGP (Accelerated Graphics Port - ускоренный графический порт): порт, позволяющий подключить графическую карту (практически не используется после 2008 года).
  • APM (Advanced Power Management - расширенный механизм управления электропитанием): интерфейс, использовавшийся до появления ACPI, также предназначенный для управления различными аспектами работы системы электропитания компьютера.
  • ATA (AT Attachment - интерфейс подключения накопителей): стандарт "AT" из эры IBM AT, описывающий технологию подключения устройств хранения данных к машине, который был заменен на стандарт SATA в 2003 году.
  • BIOS (Basic Input/Output System - базовая система ввода-вывода): прошивка, используемая в процессе загрузки Intel-совместимого персонального компьютера.
  • DMA (Direct Memory Access - технология прямого доступа к памяти): технология, позволяющая аппаратному обеспечению использовать оперативную память независимо от центрального процессора.
  • DMI (Desktop Management Interface - интерфейс доступа к данным аппаратного обеспечения для настольных систем): фреймворк для получения информации об устройствах компьютера.
  • IDE (Integrated Drive Electronics - интерфейс подключения накопителей): стандарт, описывающий технологию подключения устройств хранения данных к машине, который позднее эволюционировал в ATA.
  • IRQ (Interrupt ReQuest - запрос прерывания): аппаратный сигнал, который позволяет обработчику прерываний обработать определенное событие.
  • PCI (Peripheral Component Interconnect - шина взаимосвязи периферийных компонентов): стандарт шины ввода-вывода для подключения различных периферийных устройств к компьютеру, разработанный в 1992 году.
  • UEFI (Unified EFI - Extensible Firmware Interface - интерфейс расширяемой прошивки): разработанный в 2005 году стандарт прошивки, предназначенной для замены прошивки BIOS, который пришел на смену разработанному в 1998 году стандарту EFI.
  • USB (Universal Serial Bus - универсальная последовательная шина): стандарт шины ввода-вывода, разработанный в 1995 году для предоставления возможности подключения к компьютеру периферийных устройств всех типов.
  • PATA (Parallel ATA - параллельный интерфейс подключения накопителей): новое название стандарта ATA, введенное в обиход после появления стандарта SATA.
  • PCIe (PCI Express - шина взаимосвязи периферийных компонентов третьего поколения): стандарт высокоскоростной последовательной шины, пришедший на смену стандартам PCI и AGP в 2004 году.
  • RAID (Redundant Array of Independent (Inexpensive) Disks - избыточный массив независимых (недорогих) дисков): технология виртуализации хранилища данных, позволяющая комбинировать несколько дисков в рамках одного виртуального накопителя с целью повышения производительности или избыточности хранения данных. Существует несколько схем RAID, таких, как RAID 0 ("массив с чередованием"), RAID 1 ("зеркальный массив"), RAID 5 ("массив с чередованием без выделенного диска для данных четности") и RAID 10 ("зеркальный массив с чередованием").
  • SATA (Serial ATA - последовательный интерфейс подключения накопителей): интерфейс для подключения устройств хранения данных, который используется в данное время практически во всех компьютерах.
  • SCSI (Small Computer System Interface - системный интерфейс для малых компьютеров, произносится "скази"): набор стандартов, описывающих технологию соединения устройств и передачи данных между компьютерами и периферийными устройствами.

Семейство утилит ls

Давайте начнем рассмотрение утилит с интерфейсом командной строки с нескольких утилит, имена которых начинаются с "ls" (Таблица 1). Некоторые из этих утилит позволяют получить информацию, которая предоставляется другими утилитами (например, lsdev и lshw), однако, для получения исчерпывающей информации об аппаратном обеспечении компьютера рекомендуется использовать все приведенные в таблице утилиты.

Таблица 1. Утилиты из семейства ls позволяют получить доступ к информации обо всем аппаратном обеспечении компьютера

Утилита Описание
lsblk Выводит информацию обо всех блочных устройствах, таких, как жесткие диски, приводы DVD, а также других подобных устройствах.
lscpu Выводит информацию о количестве центральных процессоров, их ядер, потоков обработки инструкций, а также других параметрах центральных процессоров.
lsdev Выводит информацию обо всех устройствах, которые идентифицированы операционной системой.
lshw Выводит список аппаратного обеспечения компьютера, содержащий подробную информацию о каждом из устройств.
lspci Выводит информацию о шинах PCI вашего компьютера и подключенных ним устройствах, таких, как графические карты, сетевые адаптеры и другие устройства.
lsscsi Выводит информацию обо всех устройствах SCSI, соединенных с вашим компьютером, таких, как жесткие диски или приводы для чтения оптических дисков.
lsusb Выводит информацию обо всех шинах USB вашего компьютера и подключенных к ним устройствах.

Давайте начнем с получения информации об используемом центральном процессоре. Утилита lscpu выведет всю информацию об установленном в вашем компьютере центральном процессоре. Вы можете сообщить утилите о необходимости вывода информации обо всех центральных процессорах, вне зависимости от того, задействованы они или нет, с помощью параметра --all, а также о задействованных и незадействованных центральных процессорах с помощью параметров --online и --offline соответственно. Параметр --parse позволяет выбрать характеристики центрального процессора, которые вас интересуют, такие, как количество ядер центрального процессора, количество центральных процессоров, объем кэша, минимальная и максимальная тактовые частоты (в МГц) и другие. Очевидно, что в моей машине установлен единственный не самый современный четырехядерный центральный процессор Intel Core 2 Quad с тактовой частотой 2.66 ГГц:

(Примечание: вы можете получить большую часть данной информации, прочитав содержимое файла /proc/cpuinfo или файлов из директорий /sys/bus/cpu/; обратитесь к разделу "Самостоятельная работа с содержимым файловых систем /proc и /sys" для ознакомления с дополнительной информацией.)

Давайте перейдем к блочным устройствам, таким, как жесткие диски или приводы CD-ROM и DVD-ROM. Утилита lsblk выводит информацию обо всех доступных блочных устройствах (пример вывода приведен в Листинге 1). Очевидно, что в моем компьютере установлены три жестких диска и привод DVD-ROM. Этим трем жестким дискам соответствуют файлы устройств /dev/sda, /dev/sdb и /dev/sdc, а приводу DVD-ROM - файл устройства /dev/sr0. Диски имеют объем 466 ГБ, 149 ГБ и 2.7 ТБ соответственно. Также утилита выводит немного информации о таблице разделов дисков; например, несложно заметить, что на двух первых дисках созданы разделы подкачки, а на третьем диске нет такого раздела. Кроме того, утилита выводит информацию о точках монтирования разделов трех дисков (/, /disk-laptop и /disk-data соответственно).

Листинг 1. Утилита lsblk выводит информацию обо всех блочных устройствах (или устройствах для хранения данных). Параметр --topology позволяет получить немного дополнительной информации; воспользуйтесь параметром --output-all, если даже этой информации не достаточно.

Утилита поддерживает множество дополнительных параметров, но чаще всего используются такие параметры, как параметр --paths, предназначенный для вывода путей к файлам устройств и параметр --topology, предназначенный для вывода значений таких низкоуровневых параметров устройства, как размер физического сектора, название планировщика ввода/вывода и других. Вы можете получить информацию о владельце, группе владельцев и правах доступа к файлу устройства с помощью параметра --perm таким образом, как показано ниже (если же вам нужно еще больше информации, вы можете воспользоваться параметром --output-all, который активирует режим вывода таблицы с практически 50 столбцами полезных данных):

Для получения информации о SCSI-устройствах может использоваться параметр --scsi утилиты lsblk, но при этом также не стоит забывать о существовании специализированной утилиты lsscsi. Эта утилита выводит базовую информацию обо всех используемых устройствах SCSI таким же образом, как показано ниже. В моем случае она выводит информацию о трех жестких дисках и устройстве для чтения оптических дисков, ранее обнаруженных с помощью утилиты lsblk, а также о трех кардридерах. Обратите внимание на то, что утилита также выводит информацию о производителях и моделях устройств. Например, в моем компьютере установлено два жестких диска производства Western Digital (WD5000AAKS и WD30EZRX), а также жесткий диск производства Maxtor (STM316021) и привод для чтения дисков DVD производства Sony (AD-7200S):

Вы можете ознакомиться со списком всех поддерживаемых параметров рассматриваемой утилиты, выполнив команду lsscsi --help. Таким образом вы сможете убедиться в том, что она позволяет получить практически всю информацию о каждом из устройств SCSI. А если вас интересует принцип работы данной утилиты, вам может быть полезна информация о том, что она осуществляет сканирование структуры дерева директорий файловой системы /sys (обратитесь к разделу "Самостоятельная работа с содержимым файловых систем /proc и /sys" для ознакомления с дополнительной информацией).

Давайте перейдем к рассмотрению других утилит. Утилита lsusb выводит информацию об устройствах, соединенных с компьютером посредством шины USB; пример вывода данной утилиты представлен в Листинге 2. (Альтернативой данной утилите является утилита usb-devices, которая выводит информацию об устройствах в более сложном формате и не поддерживает параметров конфигурации.) Если вы работаете с современным компьютером, у вас наверняка имеется множество устройств, подключенных к нему посредством рассматриваемой шины. В моем случае такими устройствами являются адаптер Bluetooth, веб-камера, клавиатура, мышь и некоторые другие. Вы можете получить информацию об определенных шине или устройстве с помощью параметра -s или выбрать устройства заданного производителя с помощью параметра -d; если вы планируете использовать последний параметр, вам стоит ознакомиться с реестром идентификаторов устройств USB (ссылка на который приведена в разделе "Ресурсы"), содержащим все идентификаторы производителей и устройств с интерфейсом USB. Наконец, если вы желаете получить максимально подробную информацию обо всех используемых устройствах, вы можете воспользоваться параметром -v (verbose - подробный вывод), но сразу же приготовьтесь к продолжительному чтению. На моей машине в результате исполнения команды lsusb -v выводится более 1300 строк текста с информацией об устройствах.

Листинг 2. Утилита lsusb выводит информацию обо всех устройствах, подсоединенных к компьютеру посредством шины USB, в формате списка или дерева.

Другой утилитой, выводящей большой объем информации о подключенных к компьютеру устройствах, является утилита lspci, которая выводит всю информацию об используемых устройствах с интерфейсом PCI. И, фактически, это именно та утилита, которая помогла мне вспомнить модель установленной в компьютере видеокарты:

Попробуйте использовать параметры утилиты -v и -vv для получения подробного и очень подробного вывода соответственно. Для получения всей информации о моей (текущей) видеокарте я использовал команду, приведенную в Листинге 3. Изучив большой объем информации о параметрах устройства, несложно сделать вывод о том, что в данное время я использую видеокарту NVIDIA GeForce 740 с драйвером nouveau из состава ядра ОС. Разумеется, для полного понимания значения всех выведенных параметров устройства следует обладать опытом работы с PCI-устройствами. Попробуйте выполнить эту же команду, заменив параметр -v на параметр -vv и вы поймете, о чем я говорю.

Листинг 3. Параметр -v позволяет получить подробную информацию о заданном устройстве; параметр -vv позволяет увеличить объем выводимой информации.

Если вы неплохо разбираетесь в цифровой электронике, вы можете воспользоваться утилитой lsdev, которая выводит информацию об используемом аппаратном обеспечении вместе с номерами прерываний, номерами портов ввода-вывода, адресами в памяти и другими низкоуровневыми параметрами. Эта утилита не поддерживает параметров конфигурации и наверняка понадобится вам лишь в том случае, если вы будете работать непосредственно с аппаратным обеспечением компьютера. Сокращенный пример вывода рассматриваемой утилиты представлен в Листинге 4. Данная утилита читает содержимое файлов /proc/interrupts, /proc/ioports и /proc/dma таким образом, как описано в разделе "Самостоятельная работа с содержимым файловых систем /proc и /sys".

Листинг 4. Утилита lsdev выводит информацию о номерах прерываний, номерах портов ввода-вывода и адресах в памяти, используемых устройствами.

Наконец, если вы дочитали до этого абзаца, вам наверняка будет интересна утилита lshw, являющаяся универсальным инструментом, который способен предоставлять пользователю огромный объем информации обо всем используемом аппаратном обеспечении его компьютера. Параметр -short позволяет получить (в некоторой степени) сокращенный вариант списка аппаратного обеспечения компьютера (рассмотрите Листинг 5 и обратите внимание на интересные строки "To Be Filled By O.E.M.", которые обозначают, что сборщик моего компьютера не утруждал себя дополнительной работой по смене прошивки материнской платы). С помощью данной утилиты вы можете получить информацию о системе, шинах, памяти, процессоре, видеокарте, сетевом адаптере и любых других аппаратных устройствах.

Листинг 5. Утилита lshw выводит информацию обо всем используемом аппаратном обеспечении компьютера.

Обратите внимание на столбец "class" в Листинге 5. Благодаря наличию данного столбца вы можете получить полную информацию об устройстве определенного класса, использовав параметр -class. Например, ниже приведена подробная спецификация моей сетевой карты; в ней присутствует информация о производители и модели карты, а также большое количество других характеристик (примечание: вы получите аналогичный вывод лишь в том случае, если не будете использовать параметр -short; при запуске утилиты lshw на моей машине без каких-либо параметров выводится более 500 строк текста):

Утилита lshw поддерживает и некоторые другие параметры конфигурации. Например, она может генерировать документы формата HTML или XML с информацией об используемом аппаратном обеспечении (для этого предназначены параметры -html и -xml соответственно); документ первого формата удобен для показа собранной информации в веб-браузере, второго формата - для сохранения или автоматизированной обработки собранной информации. На Рисунке 1 показан небольшой фрагмент сгенерированного документа с информацией обо всем аппаратном обеспечении моего компьютера. По соображениям безопасности утилита поддерживает параметр -santize, который позволяет удалить из генерируемого документа конфиденциальную информацию, такую, как серийные номера устройств. Утилита поддерживает даже параметр -X, позволяющий использовать графический интерфейс (о котором будет сказано позднее).

Утилита lshw может генерировать документы формата HTML или XML с информацией об аппаратном обеспечении; на рисунке показан документ первого формата, открытый с помощью веб-браузера

Рисунок 1. Утилита lshw может генерировать документы формата HTML или XML с информацией об аппаратном обеспечении; на рисунке показан документ первого формата, открытый с помощью веб-браузера.

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

Что такое SMBIOS?

Но откуда Linux получает информацию об используемых устройствах? В 1995 году была разработана спецификация SMBIOS (System Management BIOS), описывающая методику доступа к данной информации, которая упразднила необходимость в осуществлении потенциально ошибочных операций, направленных на идентификацию различных устройств. Этот стандарт (используемый при реализации интерфейса DMI) был использован при разработке всех систем на основе 32-битных и 64-битных центральных процессоров производства компании Intel и совместимых центральных процессоров других производителей. На самом деле, в упомянутой спецификации описывается структура данных для хранения информации об устройствах всех типов, таких, как центральный процессор, оперативная память, системные слоты и других. В принципе, вы можете разобрать и декодировать эту таблицу самостоятельно, но некоторые из описанных выше утилит отлично справляются с данной задачей. Если же вас интересуют все аспекты упомянутого стандарта, вы можете перейти по соответствующим ссылкам из раздела "Ресурсы".

Дополнительные утилиты с интерфейсом командной строки

Давайте начнем с рассмотрения некоторых утилит общего назначения. Первой такой утилитой является утилита dmidecode, которая позволяет получить и декодировать содержимое таблицы DMI (или SMBIOS) компьютера и вывести его в читаемом человеком формате. В том случае, если соответствующая таблица обнаруживается, содержащиеся в ней записи последовательно выводятся в аналогичном формате:

Если вы не желаете просматривать содержимое всей таблицы (несколько сотен строк текста на моем компьютере), вы можете сообщить утилите о необходимости вывода лишь записей определенного типа, в соответствии с таблицей типов записей SMBIOS (обратитесь к Таблице 2).

Таблица 2. В рамках SMBIOS выделяются различные типы записей, которые вы можете использовать при работе с утилитой dmidecode.

Тип Описание
0 Информация о BIOS
1 Информация о системе
2 Информация о материнской плате
3 Информация о корпусе
4 Информация о центральном процессоре
5 Информация о контроллере памяти
6 Информация о модуле памяти
7 Информация о кэше
8 Информация о коннекторе порта
9 Информация о системных слотах
10 Информация о интегрированных устройствах материнской платы
11 Строки производителя
12 Параметры конфигурации системы
13 Информация о языке BIOS
14 Ассоциации групп
15 Системный журнал событий
16 Информация о массиве физической памяти
17 Информация о запоминающем устройстве
18 Информация об ошибке доступа к памяти в 32-битном режиме
19 Информация об адресе отображения массива памяти
20 Информация об адресе отображения запоминающего устройства
21 Информация о встроенном манипуляторе
22 Информация о батарее устройства
23 Информация о кнопке сброса
24 Информация о функциях безопасности аппаратного обеспечения
25 Информация о функциях управления электропитанием системы
26 Информация об устройстве для измерения напряжения
27 Информация об охлаждающем устройстве
28 Информация об устройстве для измерения температуры
29 Информация об устройстве для измерения тока
30 Информация о внеполосных данных удаленного администрирования
31 Информация о механизме обеспечения безопасности загрузки системы
32 Информация о загрузке системы
33 Информация об ошибке доступа к памяти в 64-битном режиме
34 Информация об управляющем устройстве
35 Информация о компоненте управляющего устройства
36 Информация граничных условиях работы с управляющим устройством
37 Информация о канале доступа к памяти
38 Информация об устройстве IPMI
39 Информация о блоке питания
40 Дополнительная информация
41 Расширенная информация об интегрированных устройствах материнской платы
42 Информация об интерфейсе контроллера управления
126 Деактивированный элемент
127 Специальный маркер окончания таблицы
128-255 Данные, специфичные для производителя

Существуют и специальные ключевые слова, соответствующие сразу нескольким типам записей (обратитесь к Таблице 3).

Таблица 3. Вы также можете использовать специальные ключевые слова для получения соответствующей информации из таблицы SMBIOS.

Ключевое слово SMBIOS Типы SMBIOS
bios 0, 13
system 1, 12, 15, 23, 32
baseboard 2, 10, 41
chasis 3
processor 4
memory 5, 6, 16, 17
cache 7
connector 8
slot 9

Если бы существовала награда "Утилита с самым подробным выводом", она, без сомнения, была бы присуждена утилите hwinfo, которая, как и одна из рассмотренных ранее утилит, может осуществлять вывод информации обо всем аппаратном обеспечении вашего компьютера. На моей машине после запуска утилиты hwinfo без каких-либо параметров было сгенерировано около 12000 строк текста, включающих несколько дампов таблицы SMBIOS. Вы же можете получить более компактный вывод, воспользовавшись параметром --short (Листинг 6).

Листинг 6. Утилита hwinfo может генерировать очень подробный вывод; в случае использования параметра --short объем выводимого текста резко сокращается.

Вы можете сообщить утилите hwinfo о необходимости вывода информации лишь об определенном типе аппаратного обеспечения с помощью таких параметров, как --monitor или --printer. Для получения полного списка поддерживаемых параметров следует выполнить команду hwinfo --help. Например, я могу получить информацию об устройстве для чтения оптических дисков с помощью команды hwinfo --cdrom (Листинг 7). Параметр --listmd позволяет включить в вывод информацию об устройствах RAID, которые игнорируются по умолчанию.

Листинг 7. Утилита hwinfo может выводить информацию лишь об устройствах определенных типов, таких, как устройство для чтения оптических дисков.

Самой выразительной в плане расцветки вывода утилитой с интерфейсом командной строки из всех рассмотренных в данной статье по праву может считаться утилита inxi (Рисунок 2).

Утилита inxi - скорее всего, единственная утилита с интерфейсом командной строки, использующая несколько цветов для выделения важных фрагментов вывода

Рисунок 2. Утилита inxi - скорее всего, единственная утилита с интерфейсом командной строки, использующая несколько цветов для выделения важных фрагментов вывода.

При запуске без каких-либо параметров она выводит лишь строку с информацией об используемом центральном процессоре, ядре ОС, времени работы системы и некоторых других параметрах системы, аналогичную следующей:

Однако, вы можете использовать большое количество параметров для получения интересующей вас информации. Например, вы можете повлиять на подробность вывода с помощью одного из параметров из диапазона от -v0 (минимально подробный вывод) до -v7 (максимально подробный вывод). Параметр -x позволяет включать в вывод дополнительную информацию о некотором аппаратном обеспечении. Выполните команду inxi -h для ознакомления со списком всех поддерживаемых утилитой параметров. К примеру, вы можете получить информацию о звуковой карте с помощью команды inxi -A, о видеокарте - с помощью команды inxi -G и так далее:

А теперь давайте закончим статью, рассмотрев несколько утилит с графическим интерфейсом.

Утилиты с графическим интерфейсом

Начнем с утилиты usbview, которая является графическим эквивалентом таких описанных ранее утилит, как lsusb и usb-devices. Она очень проста в использовании, не позволяет изменить какие-либо системные настройки и не поддерживает каких-либо параметров. Окно утилиты разделено на две части: в левой части окна расположен древовидный список со всеми доступными устройствами с интерфейсом USB, в правой - текстовое поле, в котором выводится информация о выбранном устройстве. На Рисунке 3 представлен снимок окна утилиты, в котором выводится информация о моей клавиатуре с интерфейсом USB.

Утилита usbview выводит информацию обо всех устройствах с интерфейсом USB в формате древовидного списка

Рисунок 3. Утилита usbview выводит информацию обо всех устройствах с интерфейсом USB в формате древовидного списка.

Перейдем к ранее описанной утилите, которая помимо интерфейса командной строки позволяет использовать графический интерфейс: lshw с параметром -X. При использовании параметра -X данная утилита вместо вывода листинга (приведенного выше) отображает графический интерфейс с несколькими списками для выбора устройства в левой части. В правой части расположено текстовое поле, в котором выводится информация о выбранном устройстве. На Рисунке 4 показан результат анализа параметров моего привода для чтения и записи оптических дисков DVD; в текстовом поле выводится дополнительная информация о параметрах устройства, таких, как имя логического устройства, список его возможностей и другие данные.

В случае запуска утилиты lshw с параметром -X, она будет осуществлять взаимодействие с пользователем посредством графического интерфейса, позволяющего получить информацию обо всех устройствах системы

Рисунок 4. В случае запуска утилиты lshw с параметром -X, она будет осуществлять взаимодействие с пользователем посредством графического интерфейса, позволяющего получить информацию обо всех устройствах системы.

Еще одной интересной утилитой с графическим интерфейсом является утилита hardinfo, которая, в соответствии с описанием на странице репозитория исходного кода на ресурсе GitHub (обратитесь к разделу "Ресурсы", если вам нужна ссылка), "не мертва, но требует сопровождения". В левой части окна этой утилиты расположен древовидный список с четырьмя основными разделами:

  1. Раздел "Компьютер" содержит большой объем информации о вашей машине: в нем выводится информация как об аппаратном, так и о программном обеспечении.
  2. Раздел "Устройства" содержит информацию обо всех устройствах вашего компьютера, причем каждому типу устройств соответствует отдельная категория.
  3. Раздел "Сеть" содержит информацию не только о сетевых картах, но и о некоторых структурах данных, необходимых для корректной работы сети, таких, как список серверов DNS или таблица маршрутизации.
  4. Раздел "Тесты" позволяет сравнить производительность вашей машины с производительностью других компьютеров, но из-за долгого отсутствия обновлений утилиты имеется возможность сравнения производительности лишь с производительностью компьютеров с устаревшими центральными процессорами.

На Рисунке 5 представлен снимок окна утилиты.

Утилита hardinfo предоставляет дополнительные данные, не всегда относящиеся к аппаратному обеспечению компьютера

Рисунок 5. Утилита hardinfo предоставляет дополнительные данные, не всегда относящиеся к аппаратному обеспечению компьютера.

В рассматриваемой утилите реализованы и другие функции. Пункт меню "Информация" позволяет выбрать интересующие вас параметры системы и сгенерировать отчет в формате HTML или в обычном текстовом формате. Пункт меню "Обновление через сеть..." предназначен для обновления данных утилиты, включающих результаты тестирования новых компьютеров, но в моем случае при его активации постоянно выводится сообщение об ошибке "Подключение к центральной базе данных Hardinfo (ошибка)".

Давайте закончим обзор утилит с графическим интерфейсом, предназначенных для получения информации об аппаратном обеспечении компьютера, рассмотрением утилиты из состава окружения рабочего стола KDE под названием kinfocenter. Эта утилита очень похожа на описанные выше утилиты (на Рисунке 6 представлен снимок ее окна с информацией об использовании оперативной памяти), поэтому, по аналогии с другими утилитами, в левой части ее окна содержится древовидный список с категориями параметров системы, а в правой части - поле для вывода информации о выбранном параметре системы.

Утилита kinfocenter из состава окружения рабочего стола KDE выводит информацию не только об аппаратном обеспечении, но и о множестве параметров системы

Рисунок 6. Утилита kinfocenter из состава окружения рабочего стола KDE выводит информацию не только об аппаратном обеспечении, но и о множестве параметров системы.

Данная утилита, помимо вывода информации об аппаратном обеспечении компьютера, также выводит дополнительную информацию о состоянии компонентов системы, такую, как "Статус сервера Samba", "Информация об энергопотреблении" или "Статус X-Сервера".

Самостоятельная работа с содержимым файловых систем /proc и /sys

Файловая система Linux содержит большое количество различных директорий и файлов, но директории /proc и /sys являются особенными. На самом деле их не существует на жестком диске, но в то же время вы имеете возможность просматривать их содержимое без каких-либо сложностей. Они содержат множество на первый взгляд пустых файлов, но вы можете открыть каждый из этих файлов и просмотреть его содержимое. Директория /proc появилась перед директорией /sys и в данное время содержит всю информацию об исполняющихся процессах (отсюда и имя /proc). Со временем в нее было добавлено большое количество файлов, подавляющая часть которых являлась "виртуальными" файлами, отсутствующими на жестком диске и создающимися в процессе открытия. (Большинство виртуальных файлов содержит текущую метку времени, которая указывает на то, что их содержимое постоянно обновляется и поддерживается в актуальном состоянии.) Директория /sys является более современной разработкой. Она была введена в строй в момент выпуска первой версии ядра Linux ветки 2.6 с целью лучшего структурирования данных, которые ранее размещались в директории /proc, разросшейся до невероятных размеров. Многие файлы (но не все) из директории /proc дублируются в директории /sys и, если это возможно, вы должны отдавать предпочтение файлам из последней. Директория /sys содержит несколько поддиректорий:

  1. Директория block/ является отправной точкой для получения параметров каждого из блочных устройств.
  2. Директория bus/ содержит директории, соответствующие каждому из типов шин, которые, в свою очередь, содержат по две поддиректории: devices/ и drivers/. Первая содержит директорию с параметрами каждого из устройств со ссылкой на файл устройства, а вторая - директорию с параметрами каждого драйвера, который был загружен для работы с устройством на данной шине.
  3. Директория class/ содержит директории, соответствующие каждому из типов объектов; примерами таких директорий являются block/, graphics/, net/, sound/ и другие.
  4. Директория dev/ содержит директории, соответствующие каждому из типов устройств (например, dev/block/ и dev/char/), каждая из которых содержит директорию с параметрами соответствующего устройства.
  5. Директория devices/ содержит структуру директорий, сформированную в соответствии с глобальной иерархической структурой устройств вашей системы.
  6. Директория firmware/ содержит директории объектов, специфичных для микропрограмм; например, acpi/ или memmap/, причем директории на вашем компьютере будут зависеть от используемых на уровне ядра ОС микропрограмм.
  7. Директория fs/ содержит директории, соответствующие всем поддерживаемым типам файловых систем на вашей машине, причем каждая из этих директорий, в свою очередь, содержит директории, соответствующие каждому из устройств с той или иной файловой системой; например, у меня в системе имеется директория /sys/fs/ext4/sda2, так как на разделе диска, представленном файлом устройства /dev/sda2, используется файловая система ext4.
  8. Директория kernel/ содержит несколько файлов, связанных с используемым в данный момент ядром ОС.
  9. Директория module/ содержит поддиректории, соответствующие каждому из модулей, загруженных ядром ОС.
  10. Директория power/ представляет подсистему управления электропитанием.

При перемещении на глубинные уровни каждой из ветвей описанной файловой системы вы наверняка обнаружите большое количество отдельных файлов, в которых содержатся доступные для чтения значения различных атрибутов заданного объекта. Что это за файлы? Ну, это сложный вопрос, так как список файлов и содержимое каждого из них зависят от посещаемой вами ветви файловой системы, поэтому вам придется проделать небольшую работу для того, чтобы получить информацию о том или ином устройстве из файлов файловой системы /sys. (В разделе "Ресурсы" вы можете найти ссылки на спецификации данной файловой системы.) Также помните о том, что вы можете записывать данные в некоторые из этих файлов, причем в результате будут изменяться значения соответствующих параметров того или иного устройства - делайте это с особой осторожностью! Однако, в том случае, если вы в конце концов разберетесь со структурой данной файловой системы, вы сможете дублировать в рамках своих приложений функции большинства описанных в статье утилит, работающих именно с ней.

Заключение

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

Ресурсы

Вы можете ознакомиться с текстом стандарта SMBIOS, перейдя по адресу http://www.dmtf.org/standards/smbios. На момент написания статьи, последней версией стандарта является версия 3.0.0 от 2.15.2015.

Вы можете найти информацию о файловой системе sysfs, перейдя по адресу https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt, при этом более подробная документация доступна по адресу https://www.kernel.org/doc/Documentation/ABI/stable.

Что касается более старой специализированной файловой системы procfs, то ее описание доступно по адресу https://www.kernel.org/doc/Documentation/filesystems/proc.txt.

Репозиторий USB ID по адресу http://www.linux-usb.org/usb-ids.html содержит полный список известных идентификаторов устройств с интерфейсом USB.

Репозиторий PCI ID по адресу http://www.pcidatabase.com содержит централизованный список всех идентификаторов устройств с интерфейсом PCI.

Утилиты lscpu и lsblk являются частью пакета util-linux, исходный код которого доступен по адресу https://www.kernel.org/pub/linux/utils/util-linux. Если вас интересует документация данных утилит, вы можете найти ее по адресам http://linux.die.net/man/1/lscpu и http://linux.die.net/man/8/lsblk соответственно.

Вы можете узнать о параметрах утилиты lsscsi, прочитав документ, расположенный по адресу http://sg.danny.cz/scsi/lsscsi.html, а также ознакомившись со страницей руководства, расположенной по адресу http://linux.die.net/man/8/lsscsi.

Страница руководства утилиты lsdev доступна по адресу http://linux.die.net/man/8/lsdev.

Домашняя страница утилиты lshw расположена по адресу http://www.ezix.org/project/wiki/HardwareLiSter, а ее страница руководства - по адресу http://linux.die.net/man/1/lshw.

Исходный код утилиты lsusb доступен на странице проекта "usbutils", расположенной по адресу https://github.com/gregkh/usbutils, а дополнительная информация о ней - на странице руководства, расположенной по адресу http://linux.die.net/man/8/lsusb.

Вы можете найти исходный код утилиты lspci, а также ее страницу руководства на домашней странице проекта "PCI Utilities", расположенной по адресу http://mj.ucw.cz/sw/pciutils.

Также не лишним будет ознакомиться с исходным кодом утилиты usbview, доступным по адресу http://www.kroah.com/linux/usb и ее страницей руководства, доступной по адресу http://linux.die.net/man/8/usbview.

Репозиторий исходного кода утилиты hardinfo расположен по адресу https://github.com/lpereira/hardinfo, но в первую очередь следует проверить репозитории пакетов программного обеспечения вашего дистрибутива; высока вероятность того, что что данная утилита уже добавлена в один из них. Обратите внимание на то, что данная утилита обновлялась в последний раз более двух лет назад, причем после этого обновления в нее не было внесено каких-либо значительных улучшений.

Вы можете найти исходный код утилиты KInfoCenter по адресу https://www.kde.org/applications/system/kinfocenter.