Команды для ядра linux

Обновлено: 03.07.2024

В статье систематизирована информация об основных командах в Linux. Приведенные команды будут одинаково верно работать во многих дистрибутивах, таких как: ASPLinux, Debian, Gentoo, Ubuntu, ALTLinux и во многих других. Автором статьи преследовалась цель составления наиболее полного списка основных команд Linux`а, для более легкого и эффективного изучения этой операционной системы.

Все команды Linux `а разбиты на тематические разделы и подразделы, которые имеют краткие описания. Список команд линукса постоянно обновляется и дополняется.

Содержание

Linux команды, которым не нашлось место ни в каком другом разделе.

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

2.1 Директории и файлы Наверх

2.2 Права доступа Наверх

4.1 Просмотр установленных пакетов Наверх

4.2 Установка и удаление пакетов Наверх

5. Команды Linux: мониторинг работы и просмотр логов.

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

7.1 Информация о файловой системе и жестком диске Наверх

7.2 Производительность жесткого диска Наверх

7.3 Монтирование разделов жесткого диска Наверх

8.1 Конфигурация сети Наверх

8.2 Маршрутизация Наверх

8.3 Управление портами (брандмауэр) Наверх

8.4 Управление NAT Наверх

Команды Linux необходимые для работы с пользователями и группами пользователей. Все запущенные процессы имеют уникальные номера - PID.

Важные сигналы посылаемые процессам:

  • 1 - HUP остановить процесс
  • 2 - INT прервать процесс
  • 3 - QUIT выйти
  • 9 - KILL “убить” процесс
  • 15 - TERM завершить процесс

После загрузки ядра Linux начинают загружаться различные демоны и программы, такие как NetworkManager, Evolution и т. д., результат которых мы видим у себя после загрузки на рабочем столе. Загрузка каждой службы осуществляется скриптом. Все скрипты лежат в /etc/init.d.

Runlevels – это целое число, которое определяет “уровень загрузки”.

“Уровни загрузки” бывают:

  • Runlevels=0 Выключение компьютера;
  • Runlevels=1 режим Single-User;
  • Runlevels=2 Текстовый режим без поддержки сети;
  • Runlevels=3 Текстовый режим с поддержкой сети;
  • Runlevels=4;
  • Runlevels=5 Графический режим;
  • Runlevels=6 Перезагрузка компьютера.

То есть скрипты, которые должны загружаться только в текстовом режиме с поддержкой сети, имеют Runlevels равный 3.

Более простой вариант настройки:

13.1 Работа с ядром системы Наверх

13.2 Работа с модулями ядра Наверх

15. Команды Linux: конвертирование различной информации;

15.1 Конвертирование текста Наверх

15.2 Конвертирование PDF в JPEG Наверх

15.3 Конвертирование видео Наверх

15.4 Конвертирование аудио Наверх

  1. Графическая оболочка компиляции программ в Linux Ubuntu
  2. Автоматическое монтирование дисков и разделов в Linux или что такое fstab?
  3. Настройка локальной сети в Linux
  4. Как добавить Telnet-клиент в Windows 7
  5. Проверка Linux на наличие руткитов
  6. Как найти ключ репозитория в Ubuntu?
  7. Настраиваем HotKey для DeaDBeeF

Жоска) а где двойные щелчки и ПКМ?)

Можно все это сделать и щелчками мыши, но это не наш путь))
Не путь системного администратора.

>Отличный ресурс. Оформление приятно для глаз, быстрочитабельно…
Спасибо!

Респект и увага :]

Отличная статья! Информация хорошо структурирована. Узнал несколько неведанных ранее удобных команд. Спасибо.

>Дмитрий
Рад стараться

Огромное спасибо! Давно искал удобный краткий справочник.

Всё просто класс! Только непонятны 2 вещи:
1. Как сменить пользователя?
2. Как чистить логи?

2. Просто удалить *.log :))

1. Добавил
2. Надосуге посмотрю команду ip. Про ее старость не знал, спасибо.)) Чего в ней старого, команда как команда. Командует и ладно
3. Добавил
4. Спасибо, старался

спасибо огромное! отличный справочник.
распечатал и на системник вывесил))

Mut@NT: 2. Просто удалить *.log :))

Просто удалять файл с розшерением *.log не рекомендуется. Их нужно чистить следующим образом echo > *.log

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

Большое спасибо,страничка в закладках.очень помогает в освоении системы

Спасибо! Удобный справочник. Отличный в целом сайт.

шикарно.. одним словом))))

спасибо за мануал по основным командам линукс!
сразу сделал печатную версию!

Спасибо автору за труд. Давно искал что-то подобное по линуху. Очень хорошо структурировано и просто удобно. У меня тоже печатный вариант уже на столе.

Ну просто нет слов :) СУПЕР СУПЕР СУПЕР Респект :)

а сделайте еще в самом низу ссылочку на скачивание) пригодилась бы)
Спс за справочник!

takprosto: нам надо бы тоже кнопку “донате” внедрять, как говориться “лучше помоги материально”

А где работа с загрузчиками?

И неплохо бы поработать над ошибками. Глаза режет.

А кто может сказать, как иксы запускать с консоли ?

SHok: А кто может сказать, как иксы запускать с консоли ?

startx

Там один текст полез на другой. Неудобно читать.

Rasul: Один вопрос: эти команды стандартны для всех дистрибутивов, в том числе и реализованных не под x86?

Команды по большей части все схожи, есть некоторые нюансы, но очень незначительные.

Отличный сайт, и супер шпаргалка. Спасибо, сайт в избранном!

очень полезная статья но команды далеко не все

tehnik: очень полезная статья но команды далеко не все

Вы правы. Все команды не объять

Здравствуйте! Не могу установить принтер HP LJ M1120 MFU . Помогите, пожалуйста.

inok: Давно отвык от досовских комманд, теперь вспоминаем навыки, за шпаргалку спасибо…

Досу и не снилось о такой гибкости как в Linux

Flash: Здравствуйте! Не могу установить принтер HP LJ M1120 MFU . Помогите, пожалуйста.

Я попробовал, но тоже не могу, руки не дотягиваются )))

спасибо, очень пригодились )

Quickern: dpkg -l |more

прочел все коменты и обсалютно согласен, а вообще по всем этим утилитам в систему вшиты маны )

Fish: прочел все коменты и обсалютно согласен, а вообще по всем этим утилитам в систему вшиты маны )

В MAN ах есть все, но только на английском языке ;)

А как запустить графический интерфейс?

Нуб: А как запустить графический интерфейс?

Все бы так свои сайты декорировали,а то иной раз глаза сломать можно то зеленым по черному ,то синим по зеленному.Спасибо за инфу и целые глаза)))

Подскажите есть возможность на Debian сделать жесткий диск доступным в сети виндоус.И возможно ли завести Debian в рабочую группу виндоус?Буду очень признателен за ответ.

Всеволод: Подскажите есть возможность на Debian сделать жесткий диск доступным в сети виндоус.

Можно. Вроде ExtFS прога называется

Всеволод: И возможно ли завести Debian в рабочую группу виндоус?Буду очень признателен за ответ.

Вам нужно настраивать Samba

Огромное спасибо за статью, все четко и кратко

Спасибо огромное, но: в описании iconv ошибка.

Борис Борисович: Не Вы выбираете Linux, Linux должен выбрать Вас.

Mut@NT: Можно все это сделать и щелчками мыши, но это не наш путь

Mut@NT: В MAN ах есть все, но только на английском языке ;)

Сейчас уже многие маны переведены на русский. Не знаю правда как в Ubuntu, но в Archlinux точно. Недавно они были ужасными, а сейчас видимо кто-то над ними серьёзно поработал и маны стали очень даже читабедьными. Хотя я и оригинал без проблем читаю, но на родном языке всё равно приятней :)

Как переместиться в другой раздел жесткого диска или перейти на другой жесткий диск(например, на /dev/sdb4) и установить оттуда пакет?

опишите еще про установку с /usr/src/

а не подскажете какой командой можно поменять порт сетевого интерфейса?

Azur: а не подскажете какой командой можно поменять порт сетевого интерфейса?

Что значит поменять порт? Поясните.

Спасибо за справочник, много нужного и полезного.

Это по моему в винде такое, если сглючит, или не полностью установлена. Ввести логин администратора (root)и пароль.

Вот ещё одна памятка:

А где команды? Почему я ничего не вижу?

Пробовал на практике, благодарствуем.

Спасибо на автору этот статье..

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

Автор немного согрешил, в тегах написал Репозиторий, а в статье об этом ни слова. Не надо так


Информация о CPU (Central Processing Unit. Центральный процессор) включает в себя подробные сведения о процессоре, такие как архитектура, название производителя, модель, количество ядер, скорость каждого ядра и т.д.

В linux существует довольно много команд для получения подробной информации о CPU.

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

1. /proc/cpuinfo

Файл /proc/cpuinfo содержит подробную информацию об отдельных ядрах CPU.

Выведите его содержимое с помощью less или cat .

Каждый процессор или ядро перечислены отдельно, а различные подробности о скорости, размере кэша и названии модели включены в описание.

Чтобы подсчитать количество процессоров, используйте grep с wc

Количество процессоров, показанное в /proc/cpuinfo, может не соответствовать реальному количеству ядер процессора. Например, процессор с 2 ядрами и гиперпоточностью будет показан как процессор с 4 ядрами.

Чтобы получить фактическое количество ядер, проверьте идентификатор ядра на наличие уникальных значений

Соответственно, есть 4 разных идентификатора ядра. Это указывает на то, что существует 4 реальных ядра.

2. lscpu - отображение информации об архитектуре CPU

lscpu - это небольшая и быстрая команда, не требующая никаких опций. Она просто выводит информацию об аппаратном обеспечении CPU в удобном для пользователя формате.

3. hardinfo

Hardinfo - это gui инструмент на базе gtk, который генерирует отчеты о различных аппаратных компонентах. Но он также может запускаться из командной строки, в случае если отсутствует возможность отображения gui (Graphical User Interface — графический интерфейс пользователя).

Он создаст большой отчет о многих аппаратных частях, читая файлы из каталога /proc. Информация о CPU находится в начале отчета. Отчет также может быть записан в текстовый файл.

Hardinfo выполняет несколько эталонных тестов, занимающих несколько минут, прежде чем вывести отчет на экран.

4. lshw

Команда lshw может отобразить ограниченную информацию о CPU. lshw по умолчанию показывает информацию о различных аппаратных частях, а опция ' -class ' может быть использована для сбора информации о конкретной аппаратной части.

Производитель, модель и скорость процессора отображаются правильно. Однако из приведенного выше результата невозможно определить количество ядер в процессоре.

Чтобы узнать больше о команде lshw, ознакомьтесь с этой статьей:

5. nproc

Команда nproc просто выводит количество доступных вычислительных блоков. Обратите внимание, что количество вычислительных блоков не всегда совпадает с количеством ядер.

6. dmidecode

Команда dmidecode отображает некоторую информацию о CPU, которая включает в себя тип сокета, наименование производителя и различные флаги.

7. cpuid

Команда cpuid собирает информацию CPUID о процессорах Intel и AMD x86.

Программа может быть установлена с помощью apt на ubuntu

А вот пример вывода

8. inxi

Inxi - это скрипт, который использует другие программы для создания хорошо структурированного легко читаемого отчета о различных аппаратных компонентах системы. Ознакомьтесь с полным руководством по inxi.

Вывод соответствующей информации о CPU/процессоре

Чтобы узнать больше о команде inxi и ее использовании, ознакомьтесь с этой статьей:

9. Hwinfo

Команда hwinfo - это программа для получения информации об оборудовании, которая может быть использована для сбора подробных сведений о различных аппаратных компонентах в системе Linux.

Она также отображает информацию о процессоре. Вот быстрый пример:

Если не использовать опцию "--short", команда отобразит гораздо больше информации о каждом ядре CPU, например, архитектуру и характеристики процессора.

Чтобы более подробно изучить команду hwinfo, ознакомьтесь с этой статьей:

Заключение

Это были некоторые команды для проверки информации о CPU в системах на базе Linux, таких как Ubuntu, Fedora, Debian, CentOS и др.

Примеры других команд для проверки информации о CPU смотрите в этой статье:

Большинство команд обрабатываются с помощью интерфейса командной строки и выводятся в текстовом формате. Для GUI интерфейса используйте программу Hardinfo.

Она показывает подробности об аппаратном обеспечении различных компонентов в простом для использования GUI интерфейсе.

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

В 1991 году Linus Torvalds разработал первую версию ядра Linux. Он выложил исходный код ядра в открытый доступ, после чего другие люди начали вносить свой вклад в его развитие. В разработке одной из версий ядра (а именно, версии 2.6.27, выпущенной в ноябре 2008 года) поучаствовало более 4000 разработчиков.

Для основных версий ядра Linux используются четные и нечетные номера. Ранее существовало разделение версий, в соответствии с которым версии 2.0 , 2.2 , 2.4 и 2.6 считались стабильными. В то же время версии 2.1 , 2.3 и 2.5 считались нестабильными (или разрабатываемыми). Начиная с выпуска версии ядра 2.6.0 в январе 2004 года вся разработка велась в рамках ветки 2.6. Версия ядра 2.7.0 так и не была выпущена и, судя по заявлениям главного разработчика ядра, которым все также является Linus Torvalds, схема разделения версий ядра на четные/стабильные и нечетные/разрабатываемые не используется и не будет использоваться в будущем.

28.1.2. Команда uname -r

Для того, чтобы узнать текущую версию ядра Linux, следует использовать команду uname -r таким образом, как показано ниже.

В первом примере показан вывод данной команды в системе с ядром Linux основной версии 2.6 и дополнительной версии 24 . Остальная часть строки -22-generic является специфичной для дистрибутива (в данном случае используется дистрибутив Ubuntu).

При выполнении этой же команды в дистрибутиве Red Hat Entrprise Linux можно получить информацию о более старом ядре (версии 2.6.18), причем строка -92.1.17.el5 также является специфичной для дистрибутива.

28.1.3. Файл /proc/cmdline

Параметры, которые были переданы ядру ОС в процессе загрузки системы, могут быть получены из файла /proc/cmdline .

28.1.4. Однопользовательский режим

В случае передачи ядру Linux параметра single будет осуществляться загрузка системы в однопользовательском режиме . В данном случае после загрузки ядра Linux будет запущена командная оболочка bash с привилегиями пользователя root (ввода пароля не потребуется).

В некоторых дистрибутивах данная возможность заблокирована (на этапе компиляции ядра ОС).

28.1.5. Параметр init=/bin/bash

Обычно ядро ОС запускает бинарный файл, путь к которому передан с помощью параметра init , создавая таким образом первый процесс-демон. Добавление параметра init=/bin/bash к строке параметров ядра позволяет вызывать командную оболочку bash (снова с правами пользователя root без необходимости ввода пароля).

28.1.6. Файл журнала /var/log/messages

Ядро ОС в процессе загрузки передает демону syslogd информацию о множестве выполняемых действий, которая сохраняется в файле журнала /var/log/messages . Из данного файла журнала можно извлечь информацию о процессе загрузки ядра, включая информацию обо всех устройствах, которые были идентифицированы в процессе загрузки системы.

А в данном примере показан фрагмент файла /var/log/messages , который может использоваться для извлечения информации о дисковом устройстве, представленном файлом устройства /dev/sda .

28.1.7. Утилита dmesg

28.2. Исходный код ядра Linux

Архивы исходного кода всех версий ядра Linux расположены по пути pub/linux/kernel/.

28.2.2. Директория /usr/src

Исходный код ядра ОС на вашем локальном компьютере должен быть расположен в директории /usr/src . Учтите, что структура поддиректорий директории /usr/src может отличаться в зависимости от используемого вами дистрибутива.

В первую очередь давайте рассмотрим структуру поддиректорий директории /usr/src в дистрибутиве Debian . В данном случае в этой директории можно обнаружить две версии полного исходного кода ядра Linux. При поиске определенного файла (e1000_main.c) исходного кода с помощью утилиты find можно получить полный путь к этому файлу.

Данная структура поддиректорий очень похожа на структуру поддиректорий директории /usr/src в дистрибутиве Ubuntu за тем исключением, что в данном случае в директории расположен исходный код одной версии ядра (и эта версия более новая).

Теперь давайте рассмотрим содержимое директории /usr/src в дистрибутиве Red Hat Entrprise Linux .

Нам придется погрузиться немного глубже в дерево директорий для того, чтобы добраться до исходного кода ядра ОС в дистрибутиве Red Hat!

28.2.3. Загрузка исходного кода ядра ОС

Установка пакета программного обеспечения с исходным кодом ядра ОС в дистрибутиве Debian осуществляется достаточно просто с помощью команды aptitude install linux-source . В первую очередь вы можете осуществить поиск всех пакетов программного обеспечения с именами linux-source таким образом, как показано в примере ниже.

После этого вы можете использовать команду aptitude install для загрузки и установки пакета программного обеспечения с исходным кодом ядра Linux из состава дистрибутива Debian.

После того, как утилита aptitude закончит работу, вы обнаружите новый файл с именем /usr/src/linux-source-<версия>.tar.bz2 в файловой системе вашего компьютера.

Дистрибутив Ubuntu основывается на дистрибутиве Debian, причем в нем также может использоваться утилита aptitude , поэтому задача полностью аналогична предыдущей.

И после того, как утилита aptitude завершит свою работу, мы получим файл /usr/src/linux-source-<версия>.tar.bz2 .

Red Hat Enterprise Linux

Для загрузки пакета исходного кода ядра ОС дистрибутива RHEL следует использовать длинную команду (команда должна располагаться в одной строке без завершающего символа \).

После того, как утилита wget закончит свою работу, вы получите файл с расширением .rpm размером в 60 Мб.

Нам придется выполнить дополнительные действия для того, чтобы использовать исходный код ядра ОС из пакета программного обеспечения по назначению.

В первую очередь мы должны выполнить команду rpm -i kernel-2.6.9-42.EL.src.rpm для установки загруженного пакета программного обеспечения дистрибутива Red Hat.

После этого мы должны перейти в директорию SPECS и задействовать утилиту rpmbuild .

Утилита rpmbuild поместит исходный код ядра Linux дистрибутива RHEL в директорию /usr/src/redhat/BUILD/kernel-<версия>/ .

28.3. Файлы, используемые в процессе загрузки ядра ОС

28.3.1. Файл vmlinuz

Файл vmlinuz из директории /boot является сжатым исполняемым файлом ядра ОС.

28.3.2. Файл initrd

Ядро ОС использует файл initrd (Initial RAM disk - диск в оперативной памяти для начальной инициализации) в процессе загрузки системы. Данный диск монтируется до момента окончания загрузки ядра ОС и может содержать дополнительные драйверы и модули ядра ОС. На самом деле, данный файл является сжатым архивом формата CPIO , поэтому вы можете просмотреть его содержимое следующим образом.

28.3.3. Файл System.map

Файл System.map содержит таблицу символов и изменяется при каждой компиляции ядра ОС. Таблица символов также присутствует в файле /proc/kallsyms (до выпуска ядра Linux версии 2.6 данный файл носил имя /proc/ksyms).

28.3.4. Файл .config

Последним файлом, копируемым в директорию /boot, является файл со значениями параметров конфигурации ядра ОС, используемый в процессе его компиляции. Данный файл не должен находиться директории /boot для корректного функционирования ядра ОС, но размещение его копии в данной директории является обычной практикой. Благодаря его наличию появляется возможность осуществления повторной компиляции ядра ОС с использованием тех же значений параметров конфигурации, которые были использованы для компиляции существующего работоспособного ядра ОС.

28.4. Модули ядра Linux

28.4.1. Информация о модулях ядра Linux

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

28.4.2. Директория /lib/modules

Модули ядра ОС хранятся в директории /lib/modules/<версия-ядра-ос> . Для хранения модулей каждой версии ядра Linux, которая была скомпилирована для вашей системы, создается отдельная директория.

28.4.3. Файл <модуль>.ko

Имя файла, содержащего код модуля ядра ОС, обычно оканчивается на .ko . В данном примере показано расположение файлов модулей ядра ОС, предназначенных для поддержки протокола isdn.

28.4.4. Утилита lsmod

Для ознакомления со списком загруженных в текущий момент модулей ядра ОС, следует использовать утилиту lsmod . В выводе утилиты вы можете обнаружить информацию об имени каждого из загруженных модулей, его размере, значении счетчика использования модуля, а также именах других модулей, использующих данный модуль.

28.4.5. Файл /proc/modules

Файл /proc/modules содержит список всех модулей, загруженных ядром ОС. Список модулей ядра ОС из данного файла является слишком длинным для того, чтобы приводить его в данной книге, поэтому давайте используем утилиту grep для поиска модуля с именем vm .

Мы видим, что одновременно загружены модуля ядра ОС vmmon и vmnet. Вы можете получить ту же самую информацию и с помощью утилиты lsmod . На самом деле, утилита lsmod всего лишь читает содержимое файла /proc/modules и выводит его с соответствующим форматированием.

28.4.6. Зависимости модулей ядра ОС

Некоторые модули ядра ОС зависят от других модулей ядра ОС. В следующем примере вы можете увидеть, что модуль ядра ОС с именем nfsd зависит от модулей с именами exportfs, lockd и sunrpc.

28.4.7. Утилита insmod

Модули ядра ОС могут быть загружены в ручном режиме с помощью утилиты insmod . Это очень простой (и устаревший) способ загрузки модулей ядра ОС. В примере ниже показан процесс загрузки модуля ядра ОС с именем fat (реализующего поддержку файловой системы fat).

Утилита insmod не определяет зависимости между модулями ядра ОС, поэтому в следующем примере нам не удалось загрузить с помощью данной утилиты модуль с именем isdn (так как модуль с именем isdn зависит от модуля с именем slhc).

28.4.8. Утилита modinfo

Как вы можете увидеть в представленном ниже выводе утилиты modinfo , модуль ядра ОС с именем isdn зависит от модуля ядра ОС с именем slhc.

28.4.9. Утилита modprobe

Большим преимуществом утилиты modprobe перед утилитой insmod является возможность первой утилиты загружать все необходимые модули ядра ОС, в то время, как вторая утилита требует загрузки всех необходимых модулей ядра ОС в ручном режиме. Другое преимущество данной утилиты заключается в отсутствии необходимости указания полного пути к файлу загружаемого модуля ядра ОС.

В данном примере показан способ загрузки модуля с именем isdn с помощью утилиты modprobe с автоматической загрузкой модуля с именем shlc в фоновом режиме.

28.4.10. Файл /lib/modules/<версия-ядра-ос>/modules.dep

Зависимости модулей ядра ОС описаны в рамках файла с именем modules.dep .

28.4.11. Утилита depmod

Файл modules.dep может быть обновлен (повторно создан) с помощью утилиты depmod . В следующем примере не было добавлено никаких новых модулей ядра ОС, поэтому утилита depmod сгенерировала идентичный файл.

28.4.12. Утилита rmmod

По аналогии с утилитой insmod , утилита rmmod на сегодняшний день практически не используется.

28.4.13. Команда modprobe -r

В отличие от утилиты rmmod , утилита modprobe будет автоматически удалять неиспользуемые модуля ядра ОС.

28.4.14. Файл конфигурации /etc/modprobe.conf

Файл конфигурации /etc/modprobe.conf и специальные файлы конфигурации из директории /etc/modprobe.d могут содержать псевдонимы (для использования людьми), а также параметры (для зависимых модулей ядра ОС), используемые утилитой modprobe .

28.5. Компиляция ядра ОС

28.5.1. Дополнительная версия

Перейдите в директорию /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9/ и измените дополнительную версию ядра ОС, заменив значение параметра extraversion в файле с именем Makefile.

28.5.2. Команда make mrproper

Теперь необходимо удалить результаты предыдущих сборок ядра ОС с помощью команды make mrproper . В том случае, если это ваша первая сборка после загрузки исходного кода, вы не должны выполнять это действие.

28.5.3. Файл .config

Теперь скопируйте работоспособный файл с именем .config из директории /boot в директорию с исходным кодом вашего ядра ОС. Этот файл содержит значения параметров конфигурации, которые использовались при компиляции вашего текущего ядра ОС. Грубо говоря, данный файл содержит информацию о том, должны ли компилироваться определенные модули ядра ОС.

28.5.4. Команда make menuconfig

Теперь следует выполнить команду make menuconfig (или команду make xconfig в случае использования графического интерфейса). Запущенная утилита позволит вам установить, необходимо ли компилировать определенный модуль (m), включить код модуля в состав ядра ОС (*) или вообще не компилировать его (что позволит сократить размер ядра ОС). Если вы откажитесь от компиляции слишком большого количества модулей, ваше ядро ОС не будет работать корректно. Данные конфигурации будут сохранены в скрытом файле с именем .config.

28.5.5. Команда make clean

Выполните команду make clean для подготовки исходного кода ядра ОС к компиляции. Команда make clean позволяет удалить большую часть сгенерированных файлов, но сохраняет ваши файлы конфигурации ядра ОС. Исполнение команды make mrproper на данном этапе приведет к уничтожению файла .config, который был создан в результате исполнения команды make menuconfig .

28.5.6. Команда make bzImage

А теперь следует выполнить команду make bzImage , присесть и расслабиться, ожидая окончания процесса компиляции ядра ОС. Вы также можете использовать команду time make bzImage , чтобы получить информацию о времени, необходимым для компиляции ядра ОС, которая может понадобиться для планирования непродолжительной прогулки во время следующей компиляции.

Исполнение данной команды завершится выводом информации о пути к результирующему файлу bzImage (а также времени компиляции, если вы также использовали команду time ).

На данном этапе вы можете вручную скопировать результирующий файл в директорию /boot с помощью команды cp arch/i386/boot/bzImage /boot/vmlinuz-<версия-ядра-ОС> .

28.5.7. Команда make modules

Теперь следует выполнить команду make modules . На компиляцию всех модулей ядра ОС уйдет от 20 до 50 минут.

28.5.8. Команда make modules_install

Для копирования всех скомпилированных модулей ядра ОС в директорию /lib/modules следует всего лишь выполнить команду make modules_install (на установку модулей уйдет примерно 20 секунд). В примере ниже приведен список содержимого директории модулей перед исполнением упомянутой команды.

А это список содержимого этой же директории после исполнения этой команды. Обратите внимание на то, что в процессе исполнения команды make modules_install была создана новая директория для модулей нового ядра ОС.

28.5.9. Директория /boot

Нам все также необходимо скопировать исполняемый файл ядра ОС, файл System.map и наш файл со значениями параметров конфигурации ядра ОС в директорию /boot. Строго говоря, копировать файл со значениями параметров конфигурации ядра ОС с именем .config совсем не обязательно, но он может пригодиться в будущем при компиляции ядра ОС.

28.5.10. Утилита mkinitrd

Ядро ОС обычно использует файл initrd в процессе загрузки. Мы можем использовать утилиту mkinitrd для генерации этого файла. Убедитесь в том, что вы используете корректное имя ядра ОС!

28.5.11. Системный загрузчик

На этом компиляция ядра ОС закончена, но не следует забывать о необходимости создания дополнительного станса для отображения пункта в меню системного загрузчика grub или lilo.

28.6. Компиляция отдельного модуля ядра ОС

28.6.1. Файл исходного кода hello.c

Небольшая программа на языке C послужит основой для нашего модуля ядра ОС.

28.6.2. Файл Makefile

Файл для сборки модуля ядра ОС будет содержать следующие строки.

Для компиляции модуля необходимы только два описанных файла.

28.6.3. Команда make

В примере ниже представлен результат исполнения команды make .

Теперь у нас больше файлов.

28.6.4. Файл hello.ko

Следует использовать утилиту modinfo для проверки того, действительно ли файл с расширением .ko является модулем ядра ОС.

Отлично, значит мы можем загрузить наш модуль ядра ОС с именем "hello".

Наконец мы можем обнаружить небольшой сюрприз в файле журнала /var/log/messages .

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

Общая информация

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

Исторически, ядро Linux выпускается под определенной версией. То есть имеет определенную маркировку нумерацию. Нумерация версии ядра Linux на текущий момент содержит четыре числа, следуя недавнему изменению в долго используемой до этого политике схемы версий, основанной на трёх числах. Для иллюстрации допустим, что номер версии составлен таким образом: A. B. C [ .D ] (например 2.2.1, 2.4.13 или 2.6.12.3).

  • Число A обозначает версию ядра. Оно изменяется менее часто и только тогда, когда вносятся значительные изменения в код и концепцию ядра. Оно изменялось дважды в истории ядра: в 1994 (версия 1.0) и в 1996 (версия 2.0).
  • Число B обозначает старшую версию ревизии ядра. Чётные числа обозначают стабильные ревизии, то есть те, которые предназначены для промышленного использования, такие как 1.2, 2.4 или 2.6. Нечётные числа обозначают ревизии для разработчиков, такие как 1.1 или 2.5. Они предназначены для тестирования новых улучшений и драйверов до тех пор, пока они не станут достаточно стабильными для того, чтобы быть включёнными в стабильный выпуск.
  • Число C обозначает младшую версию ревизии ядра. В старой трёхчисловой схеме нумерации, оно изменялось тогда, когда в ядро включались заплатки связанные с безопасностью, исправления ошибок, новые улучшения или драйверы. С новой политикой нумерации, однако, оно изменяется только тогда, когда вносятся новые драйверы или улучшения; небольшие исправления поддерживаются числом D.
  • Число D впервые появилось после случая, когда в коде ядра версии 2.6.8 была обнаружена грубая, требующая незамедлительного исправления ошибка, связанная с NFS. Однако, было недостаточно других изменений, для того чтобы это послужило причиной для выпуска новой младшей ревизии (которой должна была стать 2.6.9). Поэтому была выпущена версия 2.6.8.1 с единственным исправлением в виде исправления для этой ошибки. С ядра 2.6.11, эта нумерация была адаптирована в качестве новой официальной политики версий. Исправления ошибок и заплатки безопасности теперь обозначаются с помощью четвёртого числа, тогда как большие изменения выполняются в изменениях младшей версии ревизии ядра (число C).

Как я уже говорил, ядро - это код низкого уровня, который взаимодействует с интерфейсами аппаратных средств и управляет системой на низшем уровне. В настоящее время существует громаднейшее количество разновидностей аппаратного обеспечения, файловых систем и остальных компонентов, с которыми взаимодействует ядро системы. Если поддержку всех мыслимых и не мыслимых аппаратных средств включить в ядро, то размер ядра вырастет до неподъемных величин. Для того чтобы ядро не занимало большого количества оперативной памяти и при этом оставалось универсальным, придумали - модули ядра. Модули ядра позволяют при необходимости загрузить обеспечивающее поддержку программное обеспечение, такое как драйверы для аппаратных средств или файловые системы. Это позволяет запускать систему с небольшим ядром и затем подгружать модули по мере необходимости. Часто эта подгрузка происходит автоматически, например, при подключении устройств USB.

Команды для выполнения задач загрузки и удаления модулей ядра требуют полномочий суперпользователя root. Команды, выдающие информацию о модулях, обычно могут быть выполнены обычным пользователем. Однако, в случае, если они расположены в каталоге /sbin, они будут недоступны для обычного пользователя, так как этот каталог не включается в путь поиска PATH. Таким образом, если вы не root, вам, вероятно, надо будет использовать полное наименование пути.

Просмотр информации о ядре и управление параметрами ядра (команды управления)

Просмотр общей информации о ядре (версии, имени ОС, аппаратная платформа и т.п.) производится с помощью команды uname.

Просмотреть список подключенных модулей в данный момент возможно с помощью команды lsmod:

В приведенном примере видно, что в системе загружено множество модулей. Большинство из них поставляются вместе с ядром и имеют свободную лицензию. Бывают так же модули и проприетарные (например драйвера видеоадаптеров NVIDIA). Соответственно, модульный подход позволяет включать в ядро несвободные компоненты, если проприетарная лицензия позволяет это, что избавляет от необходимости получать данные модули от производителя железа.

В примере также можно видеть, что соответствующими модулями осуществляется поддержка таких устройств как видео, SATA, SCSI, дискеты и звуковые карты, а также сетевые устройства, например, IPV6, поддержка файловых систем, такой как ext3, и Remote Procedure Call (RPC) компании Sun.

Помимо имени модуля, команда lsmod показывает также размер, число пользователей модуля и имена пользователей.

Команда modinfo выдает информацию об одном или нескольких модулях.

В приведенном примере видно, что команда modinfo показывает информацию о модуле ipv6, которая включает такие параметры как имя файла и путь, лицензия, описание, автор модуля и др. Параметры модуля могут различаться в зависимости от модуля.

Отдельно хотелось бы затронуть параметр filename, содержащий путь к файлу модуля и имя файла. Имя файла модуля ipv6 оканчивается на .ko, это говорит нам, что данный модуль относится к версии ядра 2.6. В более ранней версии ядра - 2.4, имена модулей оканчивались на .o). Как видно, модуль расположен в подкаталогах каталога /lib/modules/2.6.26-2-686/, в данном пути, каталог 2.6.26-2-686 соответствует версии ядра (а так же выводу команды uname -r, что активно используется в написании скриптов). Структура подкаталогов указанного каталога отражает взаимосвязь модулей ядра и назначения модулей, думаю пример ниже это наглядно покажет:

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

Как же нам узнать, какие модули ядра нужны, а какие можно удалить?

А все просто: если счетчик Used By равен нулю, то модуль ядра никем и ничем не используется. Соответственно, его можно удалить.

Удаление модуля ядра происходит командой rmmod module_name.

Удаленный модуль может понадобиться в процессе работы, для загрузки модуля необходимо выполнить команду: insmod /path/to/module.ko

Интересный пример использования insmod в купе с другими командами:

Существует так же и другая команда для управления модулями: modprobe. Особенность данной команды в том, что она удаляет/добавляет модули с учетом зависимостей между модулями (зависимости между модулями прописаны в файле /lib/modules/версия/modules.dep). Пример использования:

Как уже выше было сказано, модули ядра имеют зависимости друг от друга, которые прописаны в файле /lib/modules/версия/modules.dep. Данный файл формируется командой depmod , которая при выполнении просматривает структуру каталогов /lib/modules/текущая_версия_ядра/ и формирует информацию о зависимостях.

Так же хочу отметить, что в Linux существует конфигурационный файл /etc/modules.conf, к которому обращается и modprobe и debmod. Данный файл в большинстве своем используется для корректировки алиасов модулей. Некоторые ОС используют другие конфигурационные файлы, таки как /etc/modprobe.conf или каталог с конфигурационными файлами - /etc/modprobe.d/.

Еще отличным источником информации о действующем ядре Linux является файл конфигурации ядра, который расположен в /boot/config-2.6. Используя команду grep можно получить достаточно информации (например, поддерживает ли ядро файловую систему cifs):

На сегодня все. Как всегда - буду очень рад Вашим комментариям! В следующей статье, посвященной ядру Linux мы научимся собирать свое ядро.

Читайте также: