- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF142:LT1
Материал из Linuxformat.
(викификация, оформление, иллюстрация) |
м |
||
(1 промежуточная версия не показана) | |||
Строка 1: | Строка 1: | ||
- | : '''Тренинги Linux''' [[Категория | + | : '''Тренинги Linux''' [[Категория:Учебники]] |
{{Цикл/LinuxTraining}} | {{Цикл/LinuxTraining}} |
Текущая версия
- Тренинги Linux
Тренинги Linux от Майка Сондерса |
---|
|
Содержание |
Майк Сондерс ведет Тренинги Linux
- Часть 1: Ищете работу, связанную с Linux? Садитесь за первую парту и впитывайте информацию, необходимую для получения сертификата LPI. Тема урока – железо.
Как продемонстрировать, что вы хорошо знаете Linux? Друзей и родных убедить нетрудно: найдите кого-нибудь с компьютером под Linux, выполните пару хитроумных действий в командной строке, и они незамедлительно решат, что вы – это голова. Но работодатели не столь доверчивы. По резюме, сопроводительному письму или интервью они не обязательно сочтут, что у вас в мозгу есть полезная информация по управлению пакетами, процессом загрузки Linux и т. д. Им нужны веские свидетельства.
Сертифицирован = вооружен
К счастью, в мире Linux для этого есть прекрасная схема – сертификация LPI. LPI – сокращение от “Linux Professional Institute (Профессиональный институт Linux)”; это некоммерческая организация, организовывающая экзамены на квалификацию для тех, кто работает с Linux. Существует три уровня сертификации; первый из них охватывает общее системное администрирование, включая настройку аппаратной части, работу в командной строке, управление процессами и работу с пакетами.
В данной серии уроков мы начиним вас всем необходимым для сдачи экзамена LPI 101, который покажет, что вы способны позаботиться о компьютерах Linux в бизнес-окружении. Если вы уже работаете в Linux, кое-что покажется вам знакомым, но все-таки пробегитесь по этой статье – вы можете узнать нечто новое.
Век живи — век учись
Здесь также стоит отметить, что LPI старается формировать учебные материалы на основе консервативных, существующих долгое время дистрибутивов, которые не сотрясает революция каждые шесть месяцев. Хороший пример – Red Hat Enterprise Linux (RHEL), но он недешев, поэтому воспользуемся CentOS – свободной сборкой RHEL; это прекрасная основа для обучения. Еще один отличный вариант – Debian, который старается придерживаться стандартов и остается стабильным многие годы. Здесь мы воспользуемся CentOS 5.5.
Итак, хватить болтать – приступим! На данном уроке мы займемся аппаратной частью, и я расскажу, как узнать, что за устройства есть в системе, как включить/отключить драйверы, и т. д.
Раздел 1: Получаем список устройств
Компьютеры – даже сейчас – устройства очень сложные; снаружи они стараются выглядеть современно, но внутри все еще прячутся артефакты из восьмидесятых. К счастью, в открытых системах, подобных Linux, есть все необходимые инструменты для получения подробной информации о внутренних и периферийных устройствах. Начнем с каталогов /proc и /sys. Это не настоящие, «материальные» каталоги, как ваш каталог home, а виртуальные, созданные ядром и содержащие информацию о запущенных процессах и аппаратных устройствах. Зачем они нужны? Ну, /proc предоставляет информацию преимущественно о процессах (то есть программах, выполняющихся в системе), а /sys — об аппаратных устройствах. Но кое-где они пересекаются.
Болтливый lscpi
Большинство внутренних устройств компьютера подключено к системе передачи данных, которая называется шиной PCI. В старых дистрибутивах информацию об устройствах можно получить командой cat /proc/pci, но в более новых этот файл отсутствует. Вместо него можно заглянуть в /sys/bus/pci/devices – впрочем, знайте, что эта информация не предназначена для нас, простых смертных. Мы лучше обратимся к команде /sbin/lspci
Откройте терминал, выбрав пункт меню Applications > Accessories > Terminal (Приложения > Стандартные > Терминал), и переключитесь на пользователя root (администратор) командой su. Затем выполните приведенную выше команду – и получите список всех устройств на шине PCI, как показано на рисунке справа.
Вы должны увидеть свою видеокарту, Ethernet-адаптер и прочие устройства. Для получения более подробной информации добавьте к команде ключ –vv (дефис v v), и выведется информация о прерываниях или портах ввода/вывода. Для новичков в мире компьютерного оборудования: прерывания – по сути, способ, с помощью которого устройство просит процессор обслужить его; например, звуковая карта сообщает системе, что она завершила некую операцию. А порты ввода/вывода предназначены для передачи данных к устройству и от него.
Число прерываний (IRQ) у компьютера ограничено. Когда у большинства компьютеров были только монитор и клавиатура, прерываний вполне хватало; сегодня этого мало. Следовательно, прерывания можно разделить между устройствами. Вам не придется возиться с прерываниями и портами ввода/вывода – эти времена, к счастью, давно прошли – но вы всегда можете получить детальный список используемых ресурсов по все той же команде lspci -vv. У команды lspci есть и другие опции, и о них можно узнать более подробно на man-странице команды (man lspci).
Раздел 2: Модули драйверов
А если нужно отключить устройство? Для начала определите, что же его включает: найдите драйвер устройства. В Linux при компиляции ядра драйверы могут активироваться двумя способами. Сборщик дистрибутива может либо внедрить их в само ядро, либо сделать отдельными модулями, которые ядро будет загружать при необходимости. Обычно используется последний подход, так как он уменьшает размеры ядра, ускоряет загрузку и делает ОС гораздо более гибкой.
Модули ядра находятся в каталоге /lib/modules/<kernelversion>/kernel. Это файлы KO, и, как вы увидите, они разбиты по каталогам: для звуковой системы, файловой системы (fs) и т. д. Зайдя в подкаталог Drivers, вы увидите дополнительные категории модулей. Важно различать параллельные и последовательные устройства. В первых данные пересылаются большими порциями, как у жестких дисков, тогда как вторые – к ним относятся мышь или последовательные порты – пересылают байт или около того в единицу времени.
Ядро Linux – умное, и оно может загружать модули при обнаружении определенных устройств. На самом деле, оно может загружать модули по требованию при подключении USB-устройств – но к USB мы перейдем чуть позже. А пока займемся управлением модулями. Чтобы получить список всех модулей, загруженных в данный момент ядром, выполните такую команду под пользователем root:
lsmod
Учтите, что в некоторых дистрибутивах, например, CentOS, может возникнуть необходимость предварить команду префиксом /sbin/, т. е. указывать полный путь к команде /sbin/lsmod. Показанный список будет своим для каждой системы, в зависимости от установленных устройств.
Ты знаешь мое имя
Названия ряда модулей, такие как cdrom и battery, говорят сами за себя. Для некоторых модулей в правом столбце будет показан список использующих их модулей (Used By). Это аналог зависимостей из мира управления пакетами: он определяет, какие модули необходимо загрузить заранее перед вызовом данного модуля.
А модули с загадочными именами? Что именно они делают? Здесь на сцену выходит команда modinfo. Например, чем по жизни занимается модуль dm_mod – дело темное; но, запустив команду
/sbin/modinfo dm_mod
мы получим массу информации – по большей части технической, но в строке «Описание» (Description) коротко поясняется, что делает модуль. К сожалению, не у всех модулей в этой строке есть что-то полезное, но попытаться стоит.
Как я уже говорил, многие модули загружаются ядром автоматически. Модуль можно загрузить и принудительно, командой modprobe. Эта утилитка отвечает и за загрузку, и за выгрузку модулей из ядра, и это очень удобный способ включать или отключать тот или иной функционал ядра на лету. Например, в нашем списке модулей мы видим lp, parport и parport_pc. Они предназначены для принтеров, подключенных к параллельному порту, которым ныне едва ли кто-то пользуется – отключите этот функционал, чтобы освободить немного памяти, командой:
/sbin/modprobe -r lp parport_pc parport
Но в каком порядке их перечислять? Это можно определить по упомянутому выше полю Used By, поместив модуль, от которого зависят первые два, в конец команды. Итак, выгрузим модуль принтера lp, затем драйвер параллельного порта ПК parport_pc, и, наконец, общий драйвер параллельного порта parport.
Копаем глубже
Точно так же эти модули можно вернуть, командой modprobe без параметров (без флага -r). Благодаря системе зависимостей нужно указать только первый модуль из списка, а modprobe добавит остальное:
/sbin/modprobe lp
Эта команда также загрузит parport_pc и parport, в чем мы сможем убедиться, выполнив команду lsmod.
Хотя Linux обычно с большим апломбом обрабатывает модули автоматически, иногда полезно немного поучаствовать в процессе вручную. Тут нам поможет файл /etc/modprobe.conf. Первые сверху – алиасы, сокращения для списка модулей. Например, вы захотели включать и отключать звуковую карту вручную, но вам лень запоминать, какой модуль она использует. Тогда добавьте такую строку с алиасом (alias):
alias sound snd-ens1371
Теперь можно просто ввести команду modprobe sound, и звуковая карта заработает, не беря в голову название конкретного драйвера. По такой схеме можно унифицировать команды, используемые на разных компьютерах. Также есть команда options, которой можно передать параметры настройки модуля. Узнать, какие опции доступны для конкретного модуля, поможет команда modinfo (как в прошлый раз): найдите в ее выводе разделы parm.
Например, скомандовав modinfo snd-intel8x0, мы увидим набор разделов parm с доступными опциями для модуля этой звуковой карты. Один из них – index. В файле /etc/modprobe.conf в нашей CentOS на VirtualBox он выглядит так:
options snd-intel8x0 index=0
Пользовательские команды
Наконец, у нас есть команды install и remove. Они обладают реальной мощью – с ними вы можете заменять одни команды другими. Например, в нашей CentOS на VirtualBox мы видим:
remove snd-intel8x0 { /usr/bin/alsactl store 0…
Полностью строка гораздо длиннее, но по сути она означает: «Когда пользователь или система выполняет команду modprobe -r snd-intel8x0, выполнить вместо нее другую команду, начинающуюся с alsactl, утилиты управления громкостью». Так можно выполнять операции очистки и входа в систему перед фактическим удалением модуля.
Чтобы полностью запретить загрузку модуля, просто создайте для него алиас off в /etc/modprobe.conf:
alias parport off
Эта команда запретит все последующие загрузки модуля и, следовательно, соответствующего аппратного устройства.
Что такое /dev?
Одна из основных концепций Unix, а следовательно, и Linux, состоит в том, что всё на свете – это файл. Не только документы и изображения, но и устройства. Поначалу это озадачивает: ну как представить устройство в виде файла? Но на фундаментальном уровне тут есть смысл. Файл – это нечто для считывания и записи данных. То же верно для физического устройства, такого как жесткий диск: с него можно считывать байты данных, и на него можно их записывать. Однако существуют устройства (например, генераторы случайных чисел), обычно работающие только в одном направлении – считывать с них можно, а записывать на них нельзя.
Каталог /dev содержит узлы устройств [device nodes] – файлы, представляющие устройства. Например, /dev/dvd – это ваш привод DVD-ROM. С диском в приводе можно набрать cat /dev/dvd, и он скинет двоичные данные на терминал. Файлы устройств создаются ядром автоматически, и некоторые из них располагаются в подкаталогах, таких как snd (звуковые карты/платы), input (мышь) и т. д. Есть устройство /dev/null, которое просто пожирает данные и уничтожает их – им можно воспользоваться для перенаправления вывода команды в никуда, чтобы он не отображался на экране. Существует устройство /dev/mem, это устройство для оперативной памяти компьютера. Команда strings /dev/mem | less – прекрасный способ увидеть, чем сейчас забиты микросхемы вашего ОЗУ.
Что такое HAL, udev, D-Bus?
Окружение рабочего стола, такое как Gnome или KDE, абстрагируется от подробностей управления устройствами. Ну зачем опытным программистам Gnome, работающим над приложением для управления фотографиями, писать код, который отправит несколько байт по USB-кабелю в камеру? Они желают, чтобы это действие обработала ОС. В этом есть смысл, и это позволяет запускать Gnome в других ОС. Эта абстракция раньше предоставлялась демоном HAL (слой аппаратной абстракции), но потом его заменил udev, фоновый процесс, который создает файлы устройств в /dev и взаимодействует с устройствами.
Как программы взаимодействуют с udev? В основном через D-Bus, систему межпроцессной коммуникации (IPC): через нее программы могут отправлять сообщения друг другу. Например, рабочий стол может попросить D-Bus сообщить ему о подключении новых устройств. Когда пользователь вставляет устройство, D-Bus узнает об этом от udev и затем информирует рабочий стол, и тот может открыть диалоговое окно или запустить приложение.
Раздел 3: Периферийные устройства USB
Если бы эта статья писалась в середине девяностых, нам бы пришлось включать длинные разделы с описанием различных портов на задней стенке системного блока. PS/2, AUX, последовательный порт, параллельный порт… почти для каждого устройства требовался собственный разъем, и все было невероятно запутано. К счастью, благодаря USB (Universal Serial Bus – универсальная последовательная шина) сегодня все гораздо проще – почти на каждом настольном компьютере, выпущенном в последние десять лет, есть по крайней мере один USB-порт. Спецификация тоже не стоит на месте: USB 2.0 и 3.0 наращивают скорости, чтобы конкурировать с другими системами подключения – например, FireWire.
При подключении USB-устройства ядро сначала опрашивает его, чтобы определить, к какому классу оно принадлежит. Устройства USB подразделяются на эти классы для упрощения разработки драйверов. Существуют классы для аудиоустройств, принтеров, web-камер, манипуляторов (мышей, клавиатур, джойстиков) и т. д. Есть даже специальный класс, задаваемый производителем и предназначенный для особых устройств, которые не попадают ни в одну из обычных категорий, и, следовательно, для их работы нужны специальные драйверы.
ls + usb = lsusb
В Linux прекрасная поддержка USB, и есть множество утилит, помогающих администратору понять, что творится «за кулисами». Прежде всего, так как USB-контроллер обычно находится на шине USB, информацию о нем можно получить с помощью нашей верной команды lspci:
/sbin/lspci | grep -i usb
Здесь мы берем вывод команды lspci и перенаправляем его утилите grep, чтобы найти все вхождения слова “USB” в верхнем или нижнем регистре. Не пугайтесь, если вам не знакомы перенаправление и grep – мы поговорим о командной строке на дальнейших уроках. Сейчас достаточно знать, что эта команда фильтрует вывод lspci, выделяя только строки с информацией о USB.
После выполнения команды на экране появятся несколько строк, сообщающих тип и изготовителя вашего контроллера USB. Это может немного сбивать с толку, но существует два типа стандартных контроллеров для USB 1: UHCI и OHCI. USB 2.0 соответствует контроллер типа EHCI, который находится над одним из перечисленных в иерархии. Вам нечего беспокоиться об этих различиях – ядро обрабатывает их самостоятельно, но знайте, что в мире USB есть небольшое разделение.
Существует команда, подобная lspci, которая выводит список всех устройств, подключенных к нашему USB-контроллеру:
/sbin/lsusb
Сама по себе эта команда много информации не дает – только список номеров портов и их положение на шине USB. Вывод команды можно сделать чуть более осмысленным, добавив ключ -t, тогда список устройств примет древовидный формат, и вы сможете увидеть, какое устройство к какому подключено. А добавив ключ -v, мы получим гораздо более подробный результат, как показано на рисунке справа.
Посмотрите на результат, и вы увидите информацию и о USB-контроллере, и об устройствах, подключенных к компьютеру. Если вас тянет на приключения, зайдите в каталог /sys/bus/usb/devices, и увидите для каждого устройства каталог, в котором находятся файлы, содержащие наименование производителя, скорость, максимальное энергопотребление и т. д.
Как уже говорилось, модули ядра – традиционный способ поддержки устройств ядром Linux. Это верно и для USB. Например, попробуйте выполнить следующую команду:
/sbin/lsmod | grep hci
На нашем компьютере она показывает, что ядро загрузило модуль для контроллера OHC и модуль для поддержки EHCI USB 2.0.
Dmesg сообщает
Хороший способ определить, как ядро распознает USB-устройство – команда dmesg. Она выдает список сообщений, сгенерированных ядром с начала загрузки системы. Запустите dmesg, подключите USB-устройство, подождите пару секунд, чтобы устройство распозналось, и снова запустите dmesg, отметив различия. В конце вывода dmesg появятся дополнительные сообщения, означающие, что ядро (будем надеяться) распознало устройство и активировало его.
Загрузка без «железа»
Мы привыкли устанавливать Linux на компьютеры со всей необходимой периферией: клавиатурой, монитором и мышью. Наверное, можно обойтись без мыши, если вам знакомы нужные комбинации клавиш для конкретного дистрибутива, но остальное кажется обязательным. Но так ли это? В серверной среде, когда компьютер может быть смонтирован на стойке, и доступ к нему получить трудно, может возникнуть необходимость в установке Linux без этих периферийных устройств – и здесь в дело вступает установка по сети.
Волшебство этого метода заключается в PXE (Preboot Execution Environment – среда выполнения перед загрузкой). Это определенная прошивка на компьютере, которая сканирует сеть в поисках NBP (Network Bootstrap Program – программа начальной загрузки по сети), которую она затем загружает и исполняет. Для работы этой схемы в сети должны функционировать DHCP- и TFTP-серверы; на TFTP-сервере должны находиться подходящие загрузочные файлы дистрибутива.
Если в вашей BIOS отсутствует поддержка PXE, существует другая возможность – загрузка через USB. С USB-флэшки вы можете запустить зачаточную версию Linux, которая затем скачает более солидную версию из Интернета. Подробное руководство вы найдете на сайте журнала, родственного нашему – PC Plus http://tinyurl.com/linpxeboot.