Библиотека сайта 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
, позволяющий использовать графический интерфейс (о котором будет сказано позднее).
Рисунок 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).
Рисунок 2. Утилита inxi - скорее всего, единственная утилита с интерфейсом командной строки, использующая несколько цветов для выделения важных фрагментов вывода.
При запуске без каких-либо параметров она выводит лишь строку с информацией об используемом центральном процессоре, ядре ОС, времени работы системы и некоторых других параметрах системы, аналогичную следующей:
Однако, вы можете использовать большое количество параметров для получения интересующей вас информации. Например, вы можете повлиять на подробность вывода с помощью одного из параметров из диапазона от -v0
(минимально подробный вывод) до -v7
(максимально подробный вывод). Параметр -x
позволяет включать в вывод дополнительную информацию о некотором аппаратном обеспечении. Выполните команду inxi -h
для ознакомления со списком всех поддерживаемых утилитой параметров. К примеру, вы можете получить информацию о звуковой карте с помощью команды inxi -A
, о видеокарте - с помощью команды inxi -G
и так далее:
А теперь давайте закончим статью, рассмотрев несколько утилит с графическим интерфейсом.
Утилиты с графическим интерфейсом
Начнем с утилиты usbview
, которая является графическим эквивалентом таких описанных ранее утилит, как lsusb
и usb-devices
. Она очень проста в использовании, не позволяет изменить какие-либо системные настройки и не поддерживает каких-либо параметров. Окно утилиты разделено на две части: в левой части окна расположен древовидный список со всеми доступными устройствами с интерфейсом USB, в правой - текстовое поле, в котором выводится информация о выбранном устройстве. На Рисунке 3 представлен снимок окна утилиты, в котором выводится информация о моей клавиатуре с интерфейсом USB.
Рисунок 3. Утилита usbview выводит информацию обо всех устройствах с интерфейсом USB в формате древовидного списка.
Перейдем к ранее описанной утилите, которая помимо интерфейса командной строки позволяет использовать графический интерфейс: lshw
с параметром -X
. При использовании параметра -X
данная утилита вместо вывода листинга (приведенного выше) отображает графический интерфейс с несколькими списками для выбора устройства в левой части. В правой части расположено текстовое поле, в котором выводится информация о выбранном устройстве. На Рисунке 4 показан результат анализа параметров моего привода для чтения и записи оптических дисков DVD; в текстовом поле выводится дополнительная информация о параметрах устройства, таких, как имя логического устройства, список его возможностей и другие данные.
Рисунок 4. В случае запуска утилиты lshw с параметром -X, она будет осуществлять взаимодействие с пользователем посредством графического интерфейса, позволяющего получить информацию обо всех устройствах системы.
Еще одной интересной утилитой с графическим интерфейсом является утилита hardinfo
, которая, в соответствии с описанием на странице репозитория исходного кода на ресурсе GitHub (обратитесь к разделу "Ресурсы", если вам нужна ссылка), "не мертва, но требует сопровождения". В левой части окна этой утилиты расположен древовидный список с четырьмя основными разделами:
- Раздел "Компьютер" содержит большой объем информации о вашей машине: в нем выводится информация как об аппаратном, так и о программном обеспечении.
- Раздел "Устройства" содержит информацию обо всех устройствах вашего компьютера, причем каждому типу устройств соответствует отдельная категория.
- Раздел "Сеть" содержит информацию не только о сетевых картах, но и о некоторых структурах данных, необходимых для корректной работы сети, таких, как список серверов DNS или таблица маршрутизации.
- Раздел "Тесты" позволяет сравнить производительность вашей машины с производительностью других компьютеров, но из-за долгого отсутствия обновлений утилиты имеется возможность сравнения производительности лишь с производительностью компьютеров с устаревшими центральными процессорами.
На Рисунке 5 представлен снимок окна утилиты.
Рисунок 5. Утилита hardinfo предоставляет дополнительные данные, не всегда относящиеся к аппаратному обеспечению компьютера.
В рассматриваемой утилите реализованы и другие функции. Пункт меню "Информация" позволяет выбрать интересующие вас параметры системы и сгенерировать отчет в формате HTML или в обычном текстовом формате. Пункт меню "Обновление через сеть..." предназначен для обновления данных утилиты, включающих результаты тестирования новых компьютеров, но в моем случае при его активации постоянно выводится сообщение об ошибке "Подключение к центральной базе данных Hardinfo (ошибка)".
Давайте закончим обзор утилит с графическим интерфейсом, предназначенных для получения информации об аппаратном обеспечении компьютера, рассмотрением утилиты из состава окружения рабочего стола KDE под названием kinfocenter
. Эта утилита очень похожа на описанные выше утилиты (на Рисунке 6 представлен снимок ее окна с информацией об использовании оперативной памяти), поэтому, по аналогии с другими утилитами, в левой части ее окна содержится древовидный список с категориями параметров системы, а в правой части - поле для вывода информации о выбранном параметре системы.
Рисунок 6. Утилита kinfocenter из состава окружения рабочего стола KDE выводит информацию не только об аппаратном обеспечении, но и о множестве параметров системы.
Данная утилита, помимо вывода информации об аппаратном обеспечении компьютера, также выводит дополнительную информацию о состоянии компонентов системы, такую, как "Статус сервера Samba", "Информация об энергопотреблении" или "Статус X-Сервера".
Самостоятельная работа с содержимым файловых систем /proc и /sys
Файловая система Linux содержит большое количество различных директорий и файлов, но директории /proc и /sys являются особенными. На самом деле их не существует на жестком диске, но в то же время вы имеете возможность просматривать их содержимое без каких-либо сложностей. Они содержат множество на первый взгляд пустых файлов, но вы можете открыть каждый из этих файлов и просмотреть его содержимое. Директория /proc появилась перед директорией /sys и в данное время содержит всю информацию об исполняющихся процессах (отсюда и имя /proc). Со временем в нее было добавлено большое количество файлов, подавляющая часть которых являлась "виртуальными" файлами, отсутствующими на жестком диске и создающимися в процессе открытия. (Большинство виртуальных файлов содержит текущую метку времени, которая указывает на то, что их содержимое постоянно обновляется и поддерживается в актуальном состоянии.) Директория /sys является более современной разработкой. Она была введена в строй в момент выпуска первой версии ядра Linux ветки 2.6 с целью лучшего структурирования данных, которые ранее размещались в директории /proc, разросшейся до невероятных размеров. Многие файлы (но не все) из директории /proc дублируются в директории /sys и, если это возможно, вы должны отдавать предпочтение файлам из последней. Директория /sys содержит несколько поддиректорий:
- Директория block/ является отправной точкой для получения параметров каждого из блочных устройств.
- Директория bus/ содержит директории, соответствующие каждому из типов шин, которые, в свою очередь, содержат по две поддиректории: devices/ и drivers/. Первая содержит директорию с параметрами каждого из устройств со ссылкой на файл устройства, а вторая - директорию с параметрами каждого драйвера, который был загружен для работы с устройством на данной шине.
- Директория class/ содержит директории, соответствующие каждому из типов объектов; примерами таких директорий являются block/, graphics/, net/, sound/ и другие.
- Директория dev/ содержит директории, соответствующие каждому из типов устройств (например, dev/block/ и dev/char/), каждая из которых содержит директорию с параметрами соответствующего устройства.
- Директория devices/ содержит структуру директорий, сформированную в соответствии с глобальной иерархической структурой устройств вашей системы.
- Директория firmware/ содержит директории объектов, специфичных для микропрограмм; например, acpi/ или memmap/, причем директории на вашем компьютере будут зависеть от используемых на уровне ядра ОС микропрограмм.
- Директория fs/ содержит директории, соответствующие всем поддерживаемым типам файловых систем на вашей машине, причем каждая из этих директорий, в свою очередь, содержит директории, соответствующие каждому из устройств с той или иной файловой системой; например, у меня в системе имеется директория /sys/fs/ext4/sda2, так как на разделе диска, представленном файлом устройства /dev/sda2, используется файловая система ext4.
- Директория kernel/ содержит несколько файлов, связанных с используемым в данный момент ядром ОС.
- Директория module/ содержит поддиректории, соответствующие каждому из модулей, загруженных ядром ОС.
- Директория 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.