Академический Документы
Профессиональный Документы
Культура Документы
1
Содержание
1 Что такое GNU/Linux?..............................................................................................................................6
2 Дистрибутив Linux....................................................................................................................................7
2.1 Компоненты дистрибутива Linux....................................................................................................7
3 Введение в ядро Linux.............................................................................................................................8
3.1.1 Свойства ядра Linux..................................................................................................................9
3.1.2 Основные подсистемы ядра Linux..........................................................................................9
Интерфейс системных вызовов...................................................................................................9
Управление процессами............................................................................................................10
Управление памятью..................................................................................................................10
Виртуальная файловая система................................................................................................10
Сетевой стек................................................................................................................................11
Драйверы устройств...................................................................................................................11
Архитектурно-зависимый код...................................................................................................11
4 Файлы и файловая система...................................................................................................................12
4.1 Типы файлов...................................................................................................................................12
4.2 Структура файловой системы ......................................................................................................18
5 Менеджеры пакетов..............................................................................................................................21
5.1 Компиляция программ и её недостатки......................................................................................21
5.2 Преимущества менеджеров пакетов...........................................................................................21
5.3 Разнообразие форматов пакетов.................................................................................................22
6 Работа с RPM-пакетами.........................................................................................................................22
6.1 Основные положения....................................................................................................................22
6.2 Учет RPM-пакетов...........................................................................................................................23
6.3 Формирование имен.....................................................................................................................23
6.4 Установка и удаление RPM-пакетов.............................................................................................23
7 Менеджер управления пакетами Yum.................................................................................................24
7.1 Преимущества Yum........................................................................................................................24
7.2 Главная конфигурация...................................................................................................................24
7.3 Настройка репозиториев...............................................................................................................25
7.4 Основные команды........................................................................................................................26
8 Установка и удаление DEB-пакетов......................................................................................................26
8.1 Основные положения....................................................................................................................26
8.2 Формирование имен.....................................................................................................................27
8.3 Установка и удаление пакетов......................................................................................................27
9 Менеджер пакетов АРТ.........................................................................................................................27
9.1 Преимущества APT.........................................................................................................................27
9.2 Основная конфигурация................................................................................................................28
9.3 Работа с пакетами..........................................................................................................................28
10 Работа с терминалами Linux...............................................................................................................29
10.1 Что такое текстовые терминалы.................................................................................................29
2
10.2 Запуск и закрытие терминалов...................................................................................................30
11 Краткое рассмотрение интерпретатора Bash....................................................................................30
11.1 Понятие командной оболочки....................................................................................................30
11.2 Основные возможности Bash......................................................................................................30
11.3 Командные оболочки и пользователи.......................................................................................31
12 Параметры и опции команд...............................................................................................................31
12.1 Выполнение команд с параметрами.........................................................................................31
12.2 Использование опций консольных команд...............................................................................31
13 Помощь по командам Linux................................................................................................................32
13.1 Причины использования справки..............................................................................................32
13.2 Использование опции Help.........................................................................................................33
13.3 Использование справочных страниц Man.................................................................................33
13.4 Тематические разделы man-страниц.........................................................................................33
14 Горячие клавиши терминала в Linux..................................................................................................34
14.1 Основные горячие клавиши........................................................................................................34
14.2 История команд, поиск и автодополнение...............................................................................35
15 Просмотр файлов в терминале Linux.................................................................................................36
15.1 Основные инструменты...............................................................................................................36
15.2 Просмотр содержимого файлов.................................................................................................36
Команда cat в Linux....................................................................................................................36
Команда tail в Linux....................................................................................................................39
Команда Head в Linux.................................................................................................................40
Комбинируем команды head и tail...........................................................................................41
Пейджеры more и less................................................................................................................41
15.3 Текстовый редактор Nano............................................................................................................43
15.4 Команда locate в Linux.................................................................................................................45
16 Потоки ввода-вывода в Linux..............................................................................................................47
16.1 Для чего нужны потоки ввода-вывода.......................................................................................47
16.2 Перенаправление потоков ввода-вывода.................................................................................48
17 Программные каналы в Linux.............................................................................................................49
17.1 Для чего нужны программные каналы......................................................................................49
17.2 Применение программных каналов..........................................................................................49
18 Работа с файлами и каталогами.........................................................................................................50
18.1 Именование файлов и каталогов...............................................................................................50
18.2 Вывод информации о файлах и каталогах.................................................................................51
19 Создание, копирование и удаление файлов в Linux........................................................................57
19.1 Создание пустого файла..............................................................................................................57
19.2 Создание папок в Linux................................................................................................................57
19.3 Копирование файла.....................................................................................................................57
19.4 Перемещение и переименование файла .................................................................................58
19.5 Удаление файла............................................................................................................................59
3
20 Поиск файлов в Linux...........................................................................................................................59
20.1 Поиск исполняемой программы................................................................................................59
20.2 Поиск файлов через базу данных...............................................................................................60
20.3 Поиск по текстовому содержимому...........................................................................................60
20.4 Подсчет слов в файле...................................................................................................................62
21 Права доступа файлов и папок в Linux...............................................................................................63
21.1 Система прав доступа файлов....................................................................................................63
21.2 Отличия прав доступа для папок................................................................................................63
21.3 Восьмеричное представление прав...........................................................................................64
21.4 Изменение прав доступа.............................................................................................................64
21.5 Изменение группы и владельца.................................................................................................65
22 Специальные биты доступа в Linux....................................................................................................66
22.1 Роль специальных битов.............................................................................................................66
22.2 Бит Setuid......................................................................................................................................66
22.3 Бит Setgid......................................................................................................................................67
22.4 Бит Sticky.......................................................................................................................................67
23 Создание и распаковка архивов в Linux............................................................................................67
23.1 Создание tar-архива без сжатия.................................................................................................68
23.2 Создание архива с использованием сжатия..............................................................................68
23.3 Распаковка архива.......................................................................................................................69
23.4 Просмотр содержимого архива без распаковки.......................................................................69
24 Процессы в Linux..................................................................................................................................69
24.1 Иерархия процессов....................................................................................................................69
24.2 Просмотр списка процессов.......................................................................................................70
24.3 Load Average.................................................................................................................................74
24.4 Статусы процессов.......................................................................................................................79
25 Завершение процесса в Linux.............................................................................................................79
25.1 Сигналы и способы завершения процесса................................................................................79
25.2 Завершение процесса по его PID................................................................................................82
25.3 Завершение программы по её имени........................................................................................82
25.4 Дополнительные инструменты...................................................................................................83
26 Приоритет процессов в Linux..............................................................................................................86
26.1 Введение в приоритеты процессов............................................................................................86
26.2 Назначение приоритета новому процессу................................................................................87
26.3 Управление ранее запущенным процессом.............................................................................87
27 Запуск процесса от имени другого пользователя.............................................................................88
27.1 Причины смены пользователя....................................................................................................88
27.2 Запуск от имени пользователя....................................................................................................88
28 Демоны в Linux.....................................................................................................................................90
28.1 Что такое демоны и сервисы......................................................................................................90
29 Запуск и остановка сервиса в Linux....................................................................................................91
4
29.1 Системы запуска сервисов..........................................................................................................91
29.2 Запуск сервисов............................................................................................................................92
29.3 Остановка сервисов.....................................................................................................................92
29.4 Перезапуск сервисов...................................................................................................................92
29.5 Автозапуск сервисов в Linux........................................................................................................93
29.6 Добавление сервиса в автозапуск..............................................................................................93
29.7 Удаление демона из автозагрузки.............................................................................................93
30 Планировщик задач в Linux................................................................................................................93
30.1 Область применения Cron...........................................................................................................93
30.2 Специальные директории...........................................................................................................94
30.3 Пользовательская настройка Cron..............................................................................................94
31 Получение сведений об обрудовании...............................................................................................95
31.1 Утилита dmidecode - отображение содержимого таблиц DMI компьютера..........................95
31.2 Утилита lshw..................................................................................................................................98
31.3 Прочие команды для получения сведений об оборудовании ...............................................99
Список вопросов для закрепления материала......................................................................100
5
1 Что такое GNU/Linux?
Linux — это операционная система: набор программ, которые позволяют вам работать с вашим
компьютером и запускать другие программы.
Операционная система (ОС) состоит из нескольких основных программ, которые нужны вашему
компьютеру, чтобы он мог общаться и получать инструкции от пользователей; читать и записывать
данные на жёсткие диски, другие накопители и принтеры; контролировать использование памяти;
запускать другие программы. На рис.1.1 отображена архитектура ОС Linux. Самая важная часть ОС
— ядро. В системе GNU/Linux ядром является Linux. Оставшаяся часть системы состоит из других
программ, многие из которых написаны проектом GNU или для проекта GNU. Поскольку одно ядро
Linux — это ещё не вся работающая ОС, мы предпочитаем использовать термин «GNU/Linux» для
обозначения систем, которые многие люди ошибочно называют «Linux».
6
пока ещё остаётся вклад Фонда Свободного Программного Обеспечения. Помимо разработки
большинства используемых инструментов, фонд также создал философию и организовал
сообщество (независимых программистов и энтузиастов-пользователей). Благодаря этому, в свою
очередь, стало возможным появление отлаженных Linux систем.
Ядро Linux впервые появилось в 1991 году, когда финский студент-компьютерщик по имени Линус
Торвальдс (Linus Torvalds) анонсировал первую версию замены ядра Minix в группе новостей
comp.os.minix.
Пользователи Linux имеют огромную свободу в выборе программного обеспечения. Например,
пользователи Linux могут выбирать из дюжины различных оболочек командной строки и
нескольких графических рабочих столов. Этот выбор часто удивляет пользователей других
операционных систем, которые и не думали, что командные оболочки или рабочий стол можно
заменить.
Linux также менее подвержен сбоям, лучше приспособлен для одновременного выполнения
более чем одной программы и более защищён, чем многие другие системы. Благодаря этим
преимуществам, Linux быстро завоёвывает рынок серверных операционных систем. С недавних
пор, Linux начал становиться популярным среди домашних пользователей и в корпоративной
среде.
2 Дистрибутив Linux
Дистрибутив Linux — общее определение операционных систем, использующих ядро Linux,
готовых для конечной установки на пользовательское оборудование. Кроме ядра и, собственно,
операционной системы, дистрибутивы обычно содержат широкий набор приложений, таких как
редакторы документов и таблиц, мультимедиа-проигрыватели, системы для работы с базами
данных, и т. д. Поставляемая в рамках дистрибутива операционная система состоит из ядра Linux
и, как правило, включает в себя набор библиотек и утилит, выпускаемых в рамках проекта GNU, а
также графическую подсистему X Window System. Небольшие дистрибутивы могут и не включать в
поставке подсистему X, и, в целях экономии, предлагать альтернативы GNU-утилитам, такие как
Busybox, uClibc или dietlibs. В настоящее время существует более шестисот дистрибутивов Linux;
более половины из них поддерживаются в актуальном состоянии, что обеспечивается регулярным
выпуском обновлений разработчиками дистрибутива.
Поскольку ядро и сопутствующее ему программное обеспечение, в основном, являются
открытыми, тот или иной дистрибутив Linux может быть установлен на самый широкий спектр
аппаратуры, как-то: домашний компьютер, оборудованный по последнему слову техники, сервер,
ноутбук или нетбук, смартфон или планшетный компьютер. Кроме этого, некоторые из
дистрибутивов Linux специально предназначены для разворачивания в средах с ограниченными
ресурсами (например, в решениях на микроконтроллерах или на очень устаревшем оборудовании
для загрузки с дискеты).
Существуют дистрибутивы, разрабатываемые как при коммерческой поддержке (Red Hat / Fedora,
SLED / OpenSUSE, Ubuntu), так и исключительно усилиями добровольцев (Debian, Slackware,
Gentoo, ArchLinux).
7
поставляться программы, распространяемые на условиях собственнических лицензий.
В состав многих дистрибутивов входит система установки, выполняющая те же функции, что и в
других современных ОС. Некоторые дистрибутивы, такие как Gentoo Linux, T2 SDE и Linux From
Scratch, содержат только ядро, средства для сборки ПО и собственно установщик, который в
процессе выполнения собирает всё необходимое ПО специально под архитектуру устройства, на
которое выполняется установка такого дистрибутива.
8
3.1.1 Свойства ядра Linux
Обсуждая архитектуру большой и сложной системы, можно рассматривать ее со многих разных
точек зрения. Одна из целей архитектурного анализа может состоять в том, чтобы лучше понять
исходный код системы. Именно этим мы здесь и займемся.
В ядре Linux реализован целый ряд важных архитектурных элементов. И на самом общем, и на
более детальных уровнях ядро можно подразделить на множество различных подсистем. С другой
стороны, Linux можно рассматривать как монолитное целое, поскольку все базовые сервисы
собраны в ядре системы. Такой подход отличается от архитектуры с микроядром, когда ядро
предоставляет только самые общие сервисы, такие как обмен информацией. ввод/вывод,
управление памятью и процессами, а более конкретные сервисы реализуются в модулях,
подключаемых к уровню микроядра. Каждая из этих точек зрения имеет свои достоинства, но я
здесь не буду вдаваться в это обсуждение.
С течением времени ядро Linux стало более эффективным с точки зрения использования памяти и
процессорных ресурсов и приобрело исключительную стабильность. Однако самый интересный
аспект Linux, учитывая размер и сложность этой системы - это ее переносимость. Linux можно
откомпилировать для огромного количества разных процессоров и платформ, имеющих разные
архитектурные ограничения и потребности. Например, Linux может работать на процессоре как с
блоком управления памятью (MMU), так и без MMU. Поддержка процессоров без MMU
реализована в версии ядра uClinux.
9
Управление процессами
Управление процессами сконцентрировано на исполнении процессов. В ядре эти процессы
называются потоками (threads); они соответствуют отдельным виртуализованным объектам
процессора (код потока, данные, стек, процессорные регистры). В пространстве пользователя
обычно используется термин процесс, хотя в реализации Linux эти две концепции (процессы и
потоки) не различают. Ядро предоставляет интерфейс программирования приложений (API) через
SCI для создания нового процесса (порождения копии, запуска на исполнение, вызова функций
Portable Operating System Interface [POSIX]), остановки процесса (kill, exit), взаимодействия и
синхронизации между процессами (сигналы или механизмы POSIX).
Еще одна задача управления процессами - совместное использование процессора активными
потоками. В ядре реализован новаторский алгоритм планировщика, время работы которого не
зависит от числа потоков, претендующих на ресурсы процессора. Название этого планировщика -
O(1) - подчеркивает, что на диспетчеризацию одного потока затрачивается столько же времени,
как и на множество потоков. Планировщик O(1) также поддерживает симметричные
многопроцессорные конфигурации (SMP). Исходные коды системы управления процессами
находятся в ./linux/kernel, а коды архитектурно-зависимой части - в ./linux/arch).
Управление памятью
Другой важный ресурс, которым управляет ядро - это память. Для повышения эффективности,
учитывая механизм работы аппаратных средств с виртуальной памятью, память организуется в
виде т.н. страниц (в большинстве архитектур размером 4 КБ). В Linux имеются средства для
управления имеющейся памятью, а также аппаратными механизмами для установления
соответствия между физической и виртуальной памятью.
Однако управление памятью - это значительно больше, чем просто управление буферами по 4 КБ.
Linux предоставляет абстракции над этими 4 КБ буферами, например, механизм распределения
slab allocator. Этот механизм управления базируется на 4 КБ буферах, но затем размещает
структуры внутри них, следя за тем, какие страницы полны, какие частично заполнены и какие
пусты. Это позволяет динамически расширять и сокращать схему в зависимости от потребностей
вышележащей системы.
В условиях наличия большого числа пользователей памяти возможны ситуации, когда вся
имеющаяся память будет исчерпана. В связи с этим страницы можно удалять из памяти и
переносить на диск. Этот процесс обмена страниц между оперативной памятью и жестким диском
называется подкачкой. Исходные коды управления памятью находятся в ./linux/mm.
10
Рис.1.4. VFS предоставляет коммутационную матрицу между пользователями и файловыми
системами
Ниже уровня файловой системы находится кэш буферов, предоставляющий общий набор функций
к уровню файловой системы (независимый от конкретной файловой системы). Этот уровень
кэширования оптимизирует доступ к физическим устройствам за счет краткосрочного хранения
данных (или упреждающего чтения, обеспечивающего готовность данных к тому моменту, когда
они понадобятся). Ниже кэша буферов находятся драйверы устройств, реализующие интерфейсы
для конкретных физических устройств.
Сетевой стек
Сетевой стек по своей конструкции имеет многоуровневую архитектуру, повторяющую структуру
самих протоколов. Вы помните, что протокол Internet Protocol (IP) - это базовый протокол сетевого
уровня, располагающийся ниже транспортного протокола Transmission Control Protocol, TCP). Выше
TCP находится уровень сокетов, вызываемый через SCI.
Уровень сокетов представляет собой стандартный API к сетевой подсистеме. Он предоставляет
пользовательский интерфейс к различным сетевым протоколам. Уровень сокетов реализует
стандартизованный способ управления соединениями и передачи данных между конечными
точками, от доступа к "чистым" кадрам данных и блокам данных протокола IP (PDU) и до
протоколов TCP и User Datagram Protocol (UDP). Исходные коды сетевой подсистемы ядра
находятся в каталоге ./linux/net.
Драйверы устройств
Подавляющее большинство исходного кода ядра Linux приходится на драйверы устройств,
обеспечивающие возможность работы с конкретными аппаратными устройствами. В дереве
исходных кодов Linux имеется подкаталог драйверов, в котором, в свою очередь, имеются
подкаталоги для различных типов поддерживаемых устройств, таких как Bluetooth, I2C,
последовательные порты и т.д. Исходные коды драйверов устройств находятся в ./linux/drivers.
Архитектурно-зависимый код
Хотя основная часть Linux независима от архитектуры, на которой работает операционная система,
11
в некоторых элементах для обеспечения нормальной работы и повышения эффективности
необходимо учитывать архитектуру. В подкаталоге ./linux/arch находится архитектурно-зависимая
часть исходного кода ядра, разделенная на ряд подкаталогов, соответствующих конкретным
архитектурам. Все эти каталоги в совокупности образуют BSP. В случае обычного настольного ПК
используется каталог i386. Подкаталог для каждой архитектуры содержит ряд вложенных
подкаталогов, относящихся к конкретным аспектам ядра, таким как загрузка, ядро, управление
памятью и т.д. Исходные коды архитектурно-зависимой части находятся в ./linux/arch.
12
FIFO или именованный канал (named pipe)
Связь (link)
Сокет
Обычный файл представляет собой наиболее общий тип файлов, содержащий данные в
некотором формате. Для операционной системы такие файлы представляют собой просто
последовательность байтов. Вся интерпретация содержимого файла производится прикладной
программой, обрабатывающей файл. К этим файлам относятся текстовые файлы, бинарные
данные, исполняемые программы и т. п.
Каталог. С помощью каталогов формируется логическое дерево файловой системы. Каталог — это
файл, содержащий имена находящихся в нем файлов, а также указатели на дополнительную
информацию — метаданные, позволяющие операционной системе производить операции над
этими файлами. Каталоги определяют положение файла в дереве файловой системы, поскольку
сам файл не содержит информации о своем местонахождении. Любая задача, имеющая право на
чтение каталога, может прочесть его содержимое, но только ядро имеет право на запись в каталог.
В ОС Linux имеются так называемые специальные каталоги. Специальные каталоги, такие как «.» и
«..», обозначают, соответственно, текущий рабочий каталог и его родительский каталог.
На рисунке в качестве примера приведена структура каталога. По существу каталог представляет
собой таблицу, каждая запись которой соответствует некоторому файлу. Первое поле каждой
записи содержит указатель на метаданные (номер inode), а второе определяет имя файла.
13
символьных устройств сами по себе не являются драйверами. Их можно рассматривать как
шлюзы, через которые драйвер принимает запросы на выполнение предусмотренных операций.
Файлы символьных устройств не используют буферизацию в процессе операций ввода-вывода.
Все операции ввода-вывода осуществляются немедленно по мере поступления. К символьным
устройствам относятся виртуальные терминалы, модемы и другие устройства, не
поддерживающие произвольный доступ к данным.
Файлы блочных устройств обрабатываются драйверами, которые осуществляют ввод-вывод
данных цельными блоками. В данном случае, на уровне ядра выполняется буферизация данных
ввода-вывода. К блочным устройствам относятся такие устройства как жесткие диски, DVD
приводы, модули памяти, а так же все остальные устройства, поддерживающие произвольный
доступ к данным.
Файлы блочных и символьных устройств характеризуются двумя номерами: старшим (major) и
младшим (minor). Старший номер устройства позволяет ядру определить, к какому драйверу
относится файл, а младший номер идентифицирует конкретное физическое устройство.
Просмотреть номера файлов устройств можно, используя команду Is:
# Is -l1 /dev/
brw-г----- 1 root disk 8, 0 Dec 22 13:30 sda
brw-r----- 1 root disk 8, 2 Dec 22 13:30 sda2
brw-rw---- 1 root disk 22, 0 Dec 22 13:30 hdc
crw-rw---- 1 root root 4, 0 Dec 22 16:29 ttyO
crw--w---- 1 root tty 4, 1 Dec 23 00:05 ttyl
crw------- 1 root root 5, 1 Dec 22 16:43 console
Из данного листинга видно, что блочному устройству sda2 соответствует старший номер 8 (номер
драйвера) и младший номер 2 (номер устройства). Номер драйвера 8 в ОС Linux соответствует
драйверу SCSI дисков sd. Младший номер устройства 2 является порядковым номером данного
устройства, т.е, по сути, файл /dev/sda2 представляет второй раздел, созданный на жестком диске
SCSI sda.
И так, символьные файлы устройств используются для небуферизированного обмена данными с
устройством, в противоположность этому блочные файлы позволяют производить обмен данными
в виде пакетов фиксированной длины — блоков. Доступ к некоторым устройствам может
осуществляться как через символьные, так и через блочные специальные файлы.
FIFO или именованный канал — это файл, используемый для связи между процессами. FIFO
впервые появились в System V UNIX, но большинство современных систем поддерживают этот
механизм. Файлы данного типа подобны сокетам, поскольку тоже используются для
взаимодействия между процессами, однако в отличие от сокетов в именованных каналах данные
передаются только в одном направлении.
Связь. Как уже говорилось, каталог содержит имена файлов и указатели на их метаданные. В то же
время сами метаданные не содержат ни имени файла, ни указателя на это имя. Такая архитектура
позволяет одному файлу иметь несколько имен в файловой системе. Имена жестко связаны с
метаданными и, соответственно, с данными файла, в то время как сам файл существует
независимо от того, как его называют в файловой системе. Такая связь имени файла с его данными
называется жесткой связью (hard link). Например, с помощью команды ln мы можем создать еще
одно имя (second) файла, на который указывает имя first.
$ pwd
/home/user1
$ ln first /home/user2/second
14
Жесткие связи абсолютно равноправны. В списках файлов каталогов, которые можно получить с
помощью команды ls, файлы first и second будут отличаться только именем. Все остальные
атрибуты файла будут абсолютно одинаковыми. С точки зрения пользователя — это два разных
файла. Изменения, внесенные в любой из этих файлов, затронут и другой, поскольку оба они
ссылаются на одни и те же данные файла. Вы можете переместить один из файлов в другой
каталог — все равно эти имена будут связаны жесткой связью с данными файла. Легко проверить,
что удаление одного из файлов (first или second) не приведет к удалению самого файла, т. е. его
метаданных и данных (если это не специальный файл устройства).
15
По определению жесткие связи указывают на один и тот же индексный дескриптор inode. Поэтому
проверить, имеют ли два имени файла жесткую связь, можно, вызвав команду ls с ключом -i
$ ls -i /home/user1/first /home/user2/second
12567 first
12567 second
Информацию о наличии у файла нескольких имен, связанных с ним жесткими связями, можно
получить, просмотрев подробный листинг файлов с помощью команды ls - l
$ ls -l /home/user2
-rw-r—r-- 2 andrei staff 7245 Jan 17 8:05 second
Во второй колонке листинга указано число жестких связей данного файла.
Сразу оговоримся, что жесткая связь является естественной формой связи имени файла с его
метаданными и не принадлежит к особому типу файла.
Особым типом файла является символическая связь, позволяющая косвенно адресовать файл. В
отличие от жесткой связи, символическая связь адресует файл, который, в свою очередь,
ссылается на другой файл. В результате, последний файл адресуется символической связью
косвенно.
Данные файла, являющегося символической связью, содержат только имя целевого файла.
Проиллюстрируем эти рассуждения на примере. Команда ln с ключом -s позволяет создать
символическую связь:
$ pwd
/home/user1
$ ln -s first /home/user2/symfirst
$ cd /home/user2
$ ls -l
lrwxrwxrwx 1 user1 staff 15 Jan 17 8:05 symfirst->../user1/first
Как видно из вывода команды ls файл symfirst (символическая связь) существенно отличается от
файла second (жесткая связь). Во-первых, фактическое содержимое файла symfirst отнюдь не то
же, что и у файла first или second, об этом говорит размер файла — 15 байт. На самом деле в этом
файле хранится не что иное как имя файла, на которую символическая связь ссылается на
../user1/first — ровно 15 байт. Во-вторых, файл symfirst не содержит никаких ограничений на
доступ (2-10 символы в первой колонке).
Символическая связь является особым типом файла (об этом свидетельствует символ l в первой
позиции вывода ls, и операционная система работает с таким файлом не так, как с обычным.
Например, при выводе на экран содержимого файла symfirst появятся данные файла
/home/use1/first.
16
На рисунке ниже отображено символическая связь:
17
называть сокетами домена UNIX (UNIX domain socket). Несмотря на то, что другие процессы
распознают файлы сокетов как элементы каталога, только процессы, между которыми установлено
соответствующее соединение, могут осуществлять чтение и запись файлов сокета. С локальными
сокетами работают различные сервисы ОС Linux - CUPS, X Window и Syslog. Помимо локальных
сокетов существуют сетевые сокеты, позволяющие процессам обмениваться данными по сети.
Интерфейс сокетов часто используется для доступа к сети TCP/IP. В системах, ветви BSD UNIX
реализована система межпроцессного взаимодействия, с помощью которой работают многие
системные сервисы, например, система печати.
/ - Корень
Это главный каталог в системе Linux. По сути, это и есть файловая система Linux. Здесь нет дисков
или чего-то подобного, как в Windows. Вместо этого, адреса всех файлов начинаются с корня, а
дополнительные разделы, флешки или оптические диски подключаются в папки корневого
каталога.
Только пользователь root имеет право читать и изменять файлы в этом каталоге.
Обратите внимание, что у пользователя root домашний каталог /root, но не сам /.
/bin - (binaries) бинарные файлы пользователя
Этот каталог содержит исполняемые файлы. Здесь расположены программы, которые можно
18
использовать в однопользовательском режиме или режиме восстановления. Одним словом, те
утилиты, которые могут использоваться пока еще не подключен каталог /usr/. Это такие общие
команды, как cat, ls, tail, ps и т д.
/sbin - (system binaries) системные исполняемые файлы
Так же как и /bin, содержит двоичные исполняемые файлы, которые доступны на ранних этапах
загрузки, когда не примонтирован каталог /usr. Но здесь находятся программы, которые можно
выполнять только с правами суперпользователя. Это разные утилиты для обслуживания системы.
Например, iptables, reboot, fdisk, ifconfig,swapon и т д.
/etc - (etcetera) конфигурационные файлы
В этой папке содержатся конфигурационные файлы всех программ, установленных в системе.
Кроме конфигурационных файлов, в системе инициализации Init Scripts, здесь находятся скрипты
запуска и завершения системных демонов, монтирования файловых систем и автозагрузки
программ. Структура каталогов linux в этой папке может быть немного запутанной, но
предназначение всех их - настройка и конфигурация.
/dev - (devices) файлы устройств
В Linux все, в том числе внешние устройства являются файлами. Таким образом, все
подключенные флешки, клавиатуры, микрофоны, камеры - это просто файлы в каталоге /dev/. Этот
каталог содержит не совсем обычную файловую систему. Структура файловой системы Linux и
содержащиеся в папке /dev файлы инициализируются при загрузке системы, сервисом udev.
Выполняется сканирование всех подключенных устройств и создание для них специальных
файлов. Это такие устройства, как: /dev/sda, /dev/sr0, /dev/tty1, /dev/usbmon0 и т д.
/proc - (proccess) информация о процессах
Это тоже необычная файловая система, а подсистема, динамически создаваемая ядром. Здесь
содержится вся информация о запущенных процессах в реальном времени. По сути, это
псевдофайловая система, содержащая подробную информацию о каждом процессе, его Pid, имя
исполняемого файла, параметры запуска, доступ к оперативной памяти и так далее. Также здесь
можно найти информацию об использовании системных ресурсов, например, /proc/cpuinfo,
/proc/meminfo или /proc/uptime. Кроме файлов в этом каталоге есть большая структура папок
linux, из которых можно узнать достаточно много информации о системе.
/var (variable) - Переменные файлы
Название каталога /var говорит само за себя, он должен содержать файлы, которые часто
изменяются. Размер этих файлов постоянно увеличивается. Здесь содержатся файлы системных
журналов, различные кеши, базы данных и так далее. Дальше рассмотрим назначение каталогов
Linux в папке /var/.
/var/log - Файлы логов
Здесь содержатся большинство файлов логов всех программ, установленных в операционной
системе. У многих программ есть свои подкаталоги в этой папке, например, /var/log/apache - логи
веб-сервера, /var/log/squid - файлы журналов кеширующего сервера squid. Если в системе что-
либо сломалось, скорее всего, ответы вы найдете здесь.
/var/lib - базы данных
Еще один тип изменяемых файлов - это файлы баз данных, пакеты, сохраненные пакетным
менеджером и т д.
/var/mail - почта
В эту папку почтовый сервер складывает все полученные или отправленные электронные письма,
здесь же могут находиться его логи и файлы конфигурации.
/var/lock - файлы блокировок
19
Здесь находятся файлы блокировок. Эти файлы означают, что определенный ресурс, файл или
устройство занят и не может быть использован другим процессом. Apt-get, например, блокирует
свою базу данных, чтобы другие программы не могли ее использовать, пока программа с ней
работает.
/var/run - PID процессов
Содержит файлы с PID процессов, которые могут быть использованы, для взаимодействия между
программами. В отличие от каталога /run данные сохраняются после перезагрузки.
/tmp (temp) - Временные файлы
В этом каталоге содержатся временные файлы, созданные системой, любыми программами или
пользователями. Все пользователи имеют право записи в эту директорию.
Файлы удаляются при каждой перезагрузке. Аналогом Windows является папка Windows\Temp,
здесь тоже хранятся все временные файлы.
/usr - (user applications) Программы пользователя
Это самый большой каталог с большим количеством функций. Тут наиболее большая структура
каталогов Linux. Здесь находятся исполняемые файлы, исходники программ, различные ресурсы
приложений, картинки, музыку и документацию.
/usr/bin/ - Исполняемые файлы
Содержит исполняемые файлы различных программ, которые не нужны на первых этапах загрузки
системы, например, музыкальные плееры, графические редакторы, браузеры и так далее.
/usr/sbin/
Содержит двоичные файлы программ для системного администрирования, которые нужно
выполнять с правами суперпользователя. Например, таких как Gparted, sshd, useradd, userdel и т д.
/usr/lib/ - Библиотеки
Содержит библиотеки для программ из /usr/bin или /usr/sbin.
/usr/local - Файлы пользователя
Содержит файлы программ, библиотек, и настроек созданные пользователем. Например, здесь
могут храниться программы собранные и установленные из исходников и скрипты, написанные
вручную.
/home - Домашняя папка
В этой папке хранятся домашние каталоги всех пользователей. В них они могут хранить свои
личные файлы, настройки программ и т д. Например, /home/sergiy и т д. Если сравнивать с
Windows, то это ваша папка пользователя на диске C, но в отличии от WIndows, home как правило
размещается на отдельном разделе, поэтому при переустановке системы все ваши данные и
настройки программ сохранятся.
/boot - Файлы загрузчика
Содержит все файлы, связанные с загрузчиком системы. Это ядро vmlinuz, образ initrd, а также
файлы загрузчика, находящие в каталоге /boot/grub.
/lib (library) - Системные библиотеки
Содержит файлы системных библиотек, которые используются исполняемыми файлами в
каталогах /bin и /sbin.
Библиотеки имеют имена файлов с расширением *.so и начинаются с префикса lib*. Например,
libncurses.so.5.7. Папка /lib64 в 64 битных системах содержит 64 битные версии библиотек из /lib.
Эту папку можно сравнить с WIndows\system32, там тоже сгружены все библиотеки системы,
только там они лежат смешанные с исполняемыми файлами, а здесь все отдельно.
/opt (Optional applications) - Дополнительные программы
20
В эту папку устанавливаются проприетарные программы, игры или драйвера. Это программы
созданные в виде отдельных исполняемых файлов самими производителями. Такие программы
устанавливаются в под-каталоги /opt/, они очень похожи на программы Windows, все
исполняемые файлы, библиотеки и файлы конфигурации находятся в одной папке.
/mnt (mount) - Монтирование
В этот каталог системные администраторы могут монтировать внешние или дополнительные
файловые системы.
/media - Съемные носители
В этот каталог система монтирует все подключаемые внешние накопители - USB флешки,
оптические диски и другие носители информации.
/srv (server) - Сервер
В этом каталоге содержатся файлы серверов и сервисов. Например, могут содержаться файлы веб-
сервера apache.
/run - процессы
Еще один каталог, содержащий PID файлы процессов, похожий на /var/run, но в отличие от него, он
размещен в TMPFS, а поэтому после перезагрузки все файлы теряются.
/sys (system) - Информация о системе
Назначение каталогов Linux из этой папки - получение информации о системе непосредственно от
ядра. Это еще одна файловая система организуемая ядром и позволяющая просматривать и
изменить многие параметры работы системы, например, работу swap, контролировать
вентиляторы и многое другое.
5 Менеджеры пакетов
21
установленных программ и их зависимостей, что значительно облегчает администрирование
системы. Пакет по принципу действия схож с установочным файлом Windows, однако не является
исполняемым. Его можно считать чем-то вроде заархивированного набора инструкций,
говорящего менеджеру как правильно и с какими зависимостями произвести установку
программы.
Получить необходимый пакет можно скачав его в сети или через официальные репозитории. Во
втором случае менеджер самостоятельно скачает файл пакета и осуществит все необходимые
процедуры.
Работа через менеджеры пакетов дает ряд существенных преимуществ:
1. Установка и удаление программ осуществляется вызовом простых команд.
2. Не нужно самостоятельно разрешать зависимости всех пакетов. Если вам необходимо
установить программу, все её компоненты подтянутся из репозитория.
3. Файловая система не замусоривается. Зависимости, директории логов и данных могут
удаляться автоматически в случае не надобности.
4. Высокая степень безопасности. Пакеты скачиваются через официальные репозитории и
имеют криптографические подписи. Это исключает возможность установки программ с
вредоносным кодом. В случае компиляции вы можете получить исходные коды с любого
сайта или форума, и никто не гарантирует их безопасность.
5. Менеджер самостоятельно следит за обновлением версий пакетов.
6 Работа с RPM-пакетами
22
дистрибутивов Linux, произошедших от него, придерживаются версии RPM 4.*. Именно её мы
будем изучать далее. В настоящее время за разработку этого стандарта отвечает проект
http://rpm.org/.
Преимущества :
Простота установки, удаления и обновления программ.
Безопасность за счет криптографических подписей пакетов.
Автоматизации развертывания системы с помощью скриптов.
Специальные пакеты Delta-RPM позволяют обновлять программы частично, а не скачивать
целиком для переустановки.
Недостатки:
Команда rpm не разрешает зависимости самостоятельно.
Новые версии пакетов не совместимы со старыми консольными командами. Например, в
силу определенных обстоятельств вы не можете обновить команду rpm с версии 4.0, а
современные пакеты требуют наличия версии 4.7.
23
подробного описания. Вы также можете ознакомиться со всеми возможными опциями, вызвав
справку по команде.
Пример установки пакета из файла, присутствующего на диске
[user@localhost]$ rpm -i package_name.rpm
Пример скачивания и установки прямо с открытого ftp сервера
[user@localhost]$ rpm -i ftp://host.domain/directory/package_name.rpm
Пример установки с выводом дополнительной информации и статуса
[user@localhost]$ rpm -ivh package_name.rpm
Пример удаления. Обратите внимание на то, что имя пакета без расширения
[user@localhost]$ rpm -e package_name
Пример обновления пакета с помощью файла с новой версией
[user@localhost]$ rpm -U package_name.rpm
Пример вывода общей информации об установленном пакете
[user@localhost]$ rpm -qi package_name
24
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3
Параметры конфигурации:
cachedir — директория хранения скачанных метаданных пакетов.
keepcache — нужно ли сохранять пакеты на диске или затирать их после установки
программы. По умолчанию пакеты не сохраняются. Функционал можно активировать,
установив значение «1». Однако это может вызвать большой расход дискового
пространства.
logfile — место расположения файла для записи логов.
gpgcheck — необходимо ли проверять цифровые подписи перед установкой пакетов.
Отключение этого параметра может привести к проблемам с безопасностью системы.
exclude — после знака «=» через пробел можно указать имена пакетов. Они будут
запрещены к скачиванию, установке и обновлению.
Заметка: Конфигурационный файл /etc/yum.conf имеет множество дополнительных настроек.
Ознакомиться с ними можно посредством команды «man yum.conf», которая использует
стандартный механизм вывода справки в Linux.
25
metadata_expire — срок по истечении, которого снова будут запрошены метаданные
пакетов, хранящихся в данном репозитории. Буква «d» после числа 7 говорит, что
обновление метаданных будет происходить каждые 7 дней.
gpgcheck — нужно ли проверять цифровые подписи пакетов.
gpgkey — место расположения открытого ключа шифрования.
Обратите внимание, что внутри конфигурации используются специальные переменные $releasever,
$arch и $basearch. Они будут заменены соответствующими значениями: $arch — результат
команды «uname -p», $basearch — результат команды «uname -i», $releasever — имя пакета, по
которому определяется версия текущего дистрибутива Linux.
26
На основе dpkg существует несколько высокоуровневых решений. Это настоящие системы
управления пакетами apt get в Ubuntu и aptitude в Debian. Их мы рассмотрим подробнее в
следующих статьях.
27
Пакеты хранятся в общедоступных репозиториях, с которых они могут быть скачаны в
любое время.
APT автоматически обрабатывает зависимости между пакетами во время установки и
удаления.
Простота использования. Всего одной командой APT позволяет осуществлять установку,
удаление и обновление пакетов.
28
Пример обновления всех установленных пакетов
[user@localhost]$ sudo apt-get upgrade
[user@localhost]$ aptitude upgrade
Пример установки пакета
[user@localhost]$ sudo apt-get install package_name
[user@localhost]$ aptitude install package_name
Пример удаления пакета с сохранением логов и конфигурации
[user@localhost]$ sudo apt-get remove package_name
[user@localhost]$ aptitude remove package_name
Пример полного удаления пакета вместе с конфигурацией
[user@localhost]$ sudo apt-get purge package_name
[user@localhost]$ aptitude purge package_name
Пример как показать полную информацию о пакете
[user@localhost]$ sudo apt-get show package_name
[user@localhost]$ aptitude show package_name
29
10.2 Запуск и закрытие терминалов
Работа с терминалами ведется в Linux двумя способами: полноэкранный текстовый режим и
оконная консоль. В первом случае операционная система полностью игнорирует графическую
оболочку. Вы находитесь в черном экране с приглашением на ввод команд. Результат работы
запускаемых программ также выводится в виде текста.
Всего существует шесть отдельных терминалов. Их запуск происходит посредством нажатия
сочетания клавиш Ctr + Alt + F{номер терминала}. Номерами соответственно считаются
клавиши от F1 до F6. При открытии будет запрошен ввод имени пользователя и пароля. На разных
консолях можно войти под разными пользователями.
Для разлогиневания необходимо нажать сочетание клавиш Ctrl + D. Если вы хотите закрыть
текстовый терминал и вернуться к графической оболочке Linux, нажмите сочетание клавиш Ctr +
Alt + F7.
30
1. Использование конвейеров для передачи результата одной программы в другую.
2. Встроенный язык программирования с условными операторами, циклами и т. д.
3. Запуск набора команд из файла (скрипта).
4. Авто дополнение имен файлов и директорий.
5. Просмотр истории введенных команд.
6. Перенаправление ввода-вывода.
7. Использование оболочковых переменных
При открытии текстового терминала Linux командная оболочка будет загружена в него
автоматически. От пользователя не требуется никаких дополнительных операций. Ниже мы
приводим простой пример команды echo и записи её результата в файл.
[user@localhost] $ echo "пример использования Bash" > ~/bash-test.txt
После выполнении команды интерпретатор Bash создаст в домашней папке пользователя файл с
именем bash-test.txt. Он будет содержать текст, стоящий после оператора echo.
31
как флаги. В Linux существует соглашение по использованию опций команд, запускаемых через
терминал.
Ключи должны задаваться с помощью знака «-» и следующей за ним латинской буквы. Буква
может быть записана как в верхнем, так и в нижнем регистре. Однако опции заданные одной и той
же буквой, но в разных регистрах считаются различными модификаторами логики. Если ключу
требуется указать значение, то оно должно быть записано сразу после него через пробел.
Общий вид строки вызова команды с ключами записывается как «имя_команды [-ключ
значение] [параметр]». Квадратные скобки указаны для логического разделения, они не
должны присутствовать при реальном вызове. Особенностью ключей в Linux является то, что они
могут быть записаны друг за другом. Обратите внимание на пример, приведенный ниже. Команда
ls показывает содержимое текущего каталога. Опция -l заставляет программу вывести
подробное описание файлов с указанием владельца, прав доступа, времени последнего доступа и
т. д. Опция -t сортирует файлы по времени последнего доступа.
[user@localhost] $ ls -lt
drwxr-xr-x 2 user user 20480 май 8 15:20 Загрузки
drwxr-xr-x 3 user user 4096 апр 20 22:11 Изображения
drwxr-xr-x 2 user user 4096 апр 17 20:59 Рабочий стол
...
Полноименные опции записываются с помощью последовательности знаков «--» и имени
модификатора. Они не могут быть объединены в одну строку. Для указания значения необходимо
поставить знак «=» после имени опции. Выражение в общем виде записывается как
«имя_команды [--имя_опции=значение] [параметр]».
[user@localhost] $ ls --all --size --block-size=M
1M . 1M .gphoto 1M .thunderbird
1M .. 1M .ICEauthority 1M .ViberPC
1M .adobe 1M .java 1M VirtualBox VMs
...
Приведенный выше пример демонстрирует вызов уже знакомой консольной команды ls с тремя
полноименными опциями. Они выполняют следующие действия: --all — выводит скрытые
файлы, --size — указывает размеры файлов в блоках, --block-size=M — указывает размеры
фалов в мегабайтах.
Заметка: Опции консольных команд в Linux могут иметь две записи одновременно. Как с
помощью ключа, так и с указанием полного имени. Это зависит от конкретной программы.
32
13.2 Использование опции Help
Вы можете получить помощь по конкретной команде Linux, вызвав её через терминал с указанием
опции --help или -h. За формирование такой информации отвечает сама программа. Она
содержит лаконичное описание принимаемых параметров и дополнительных опций. В
большинстве случаев этого достаточно.
Ниже приводится пример с вызовом помощи по команде find, отвечающей за поиск файлов и
директорий в файловой системе.
[user@localhost] $ find --help
33
У команды man есть дополнительный числовой параметр, указываемый перед именем
программы. Если он присутствует, будет осуществлен вывод справки из определенного
тематического раздела. Также можно использовать опцию -a, которая предоставит помощь по
одноименным программам, присутствующим во всех разделах. В таком случае выход из справки с
помощью клавиши q не вернет терминал в обычное состояние, а откроет следующую страницу с
информацией.
[user@localhost] $ man 1 mkdir
Список номеров тематических разделов:
1 — стандартные команды. Самый объемный из всех разделов.
2 — системные вызовы ядра Linux.
3 — функции языка программирования C.
4 — специализированные файлы устройств.
5 — конфигурационные файлы приложений.
6 — игры и развлечения.
7 — описание различных стандартов.
8 — команды для системного администрирования.
9 — описание принципов работы ядра.
n — не вошедшее в общую классификацию
34
Список основных горячих клавиш терминала:
Значение Описание
Alt + b
Перевод курсора на одно слово назад
Ctrl + leftArrow
Alt + f
Переводит курсор на одно слово вперёд
Ctrl + leftArrow
Alt + u Переводит буквы с текущей позиции курсора и до конца слова в верхний регистр
35
Список дополнительных горячих клавиш:
Значение Описание
36
для просмотра лаконичной информации. Команда cat позволяет создать один или несколько
файлов, просмотреть содержание файлов, объединять файлы и перенаправлять вывод в терминал
или файлы. Если файл содержит объемный текст, он заполнит всё пространство окна, а остальная
часть, скорее всего, будет утрачена.
Общий синтаксис команды cat
[user@localhost]$ cat [OPTION] [FILE]...
Ниже показаны пример использования команды cat:
1. Показать содержание файла
В приведенном ниже примере показано что содержится в файле /etc/passwd.
[user@localhost]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
narad:x:500:500::/home/narad:/bin/bash
2. Посмотреть вместимое нескольких файлов в терминале
В примере ниже показано как отобразить содержимое в test и test1 файл в терминале.
[user@localhost]$ cat test test1
Hello everybody
Hi world,
3. Создание файла с командой cat
Мы создадим файл с именем test2
[user@localhost]$ cat >test2
hello everyone, how do you do?
Ожидая ввод от пользователя, наберите необходимый текст и нажмите Ctrl + D (нажмите и
удерживайте клавишу Ctrl и наберите 'D'), чтобы выйти. Текст будет написан на test2 файле. Вы
можете увидеть содержимое файлов со следующей командой cat.
[user@localhost]$ cat test2
hello everyone, how do you do?
4. Используйте команду cat с опциями more & less
Если файл имеет большую информационную наполненность, то он не поместится в выходной
разъем и экран прокрутится вверх очень быстро. В таком случае мы можем использовать
параметры more & less с командой cat, как показано выше.
[user@localhost]$ cat song.txt | more
[user@localhost]$ cat song.txt | less
5. Отображение номеров строк в файле
С опцией -n вы можете увидеть номера строк файла song.txt в выходном терминале.
[user@localhost]$ cat -n song.txt
1 "Heal The World"
2 There's A Place In
3 Your Heart
4 And I Know That It Is Love
5 And This Place Could
6 Be Much
7 Brighter Than Tomorrow
8 And If You Really Try
9 You'll Find There's No Need
37
10 To Cry
11 In This Place You'll Feel
12 There's No Hurt Or Sorrow
6. Отображение $ в конце файла
В приведенном ниже примере, можно увидеть с опцией -e, что "$" появляется в конце линии, а
также если есть разрыв между пунктами. Эта опция полезна для того, чтобы собрать несколько
строк в одну строку.
[user@localhost]$ cat -e test
hello everyone, how do you do?$
$
Hey, am fine.$
How's your training going on?$
$
7. Показать разделение строк Tab в файле
В приведенном ниже выходе мы видим как пространство TAB заполняется символом " ^I".
[user@localhost]$ cat -T test
hello ^Ieveryone, how do you do?
Hey, ^Iam fine.
^I^IHow's your training ^Igoing on?
Let's do ^Isome practice in Linux.
8. Одновременное отображение нескольких файлов
В приведенном ниже примере мы имеем три файла test, test1 и test2 и возможность просмотра
содержимого этих файлов, как показано выше. Мы должны разделить каждый файл с ; (точка с
запятой).
[user@localhost]$ cat test; cat test1; cat test2
This is test file
This is test1 file.
This is test2 file.
9. Используйте стандартный вывод с оператором перенаправления
Мы можем перенаправить стандартный вывод в файл в новый файл другого существующего файла
с символом ' > '(больше). Осторожно, содержимое из test1 будет перезаписано в содержимое
файла test.
[user@localhost]$ cat test > test1
10. Добавление стандартного выход с оператором перенаправления
Добавление в существующий файл символами ' >> '(двойные больше). Здесь содержимое в файле
test будет добавлено в конце файла test1.
[user@localhost]$ cat test >> test1
11. Перенаправление стандартного ввода с оператором перенаправления
Когда вы используете перенаправление со стандартным входом ' < '( символ меньше), он
использует имя файла test2 в качестве входа для команды и выход будет показан в терминале.
[user@localhost]$ cat < test2
This is test2 file.
12. Перенаправление содержимого нескольки файлов в однин файл
Тут создается файл с именем test3 и все исходящие будут перенаправлены во вновь созданный
файл.
38
[user@localhost]$ cat test test1 test2 > test3
13. Сортировка содержимого нескольких файлов в один файл
Тут создается файл test4 и выход команды cat по конвейеру для сортировки; результат будет
перенаправлен во вновь созданный файл.
[user@localhost]$ cat test test1 test2 test3 | sort > test4
Зачастую требуется получить несколько строк текста из начала или конца файла. Linux позволяет
осуществить данную операцию с помощью команд head (начало файла) и tail (конец файла). По
умолчанию они выводят десять строк текста. Вы можете указать количество получаемых строк с
помощью опций -n или --lines.
Начнем с команды tail, исследуем все ее особенности и увидим, как использовать ее
наилучшим образом для полного удовлетворения наших нужд. После этого посмотрим, что можно
и чего нельзя сделать с командой head.
Пример 2: если мы хотим просмотреть последние 4 (3, 8, 15…) строк, мы применим параметр -n
--lines, чтобы увидеть желаемое количество строк вместо 10 по умолчанию.
head --lines=20 имя_файла
tail --lines=20 имя_файла
39
Как вы можете видеть, в данном примере мы следим за логом системы /var/log/syslog . Мы
будем наблюдать изменения файла до тех пор, пока не прервем выполнение команды с помощью
CTRL+C.
Пример 4: еще одна опция «-s», которая обычно применяется вместе с «-f», назначит интервал (в
секундах), с которым команда будет опрашивать файл (по умолчанию этот интервал равен 1
секунде).
Пример 5: Одной командой tail мы можем просматривать несколько файлов. При этом на экране
мы будем видеть заголовок каждого файла, начинающийся с “==>”
40
рассматривали для команды tail, применимы и к head, за исключением опции «-f», которая в
команде head отсутствует.
Синтаксис команды head
head [OPTION]... [FILE]...
Пример 1: как упоминалось выше, смотрим на первые 10 строк файла.
Пример 3: если в ключе «-n» перед значеним (перед цифрой) поставить «-« (к примеру -5), то
команда покажет нам не первые, а последние строки файла начиная со строки с указанным
номером.
41
Пейджеры more и less
more - это то, что мы называем “пейджером” (от англ. page - страница). Довольно часто данных,
выводимых определённой командой, оказывается слишком много, чтобы уместиться на одном
экране. Отдельные команды не знают, как уместить свои выходные данные на нескольких
страницах. Эту работу они оставляют утилитам, называемых пейджерами.
Команда more разбивает выходные данные на отдельные экраны и ожидает от вас нажатия на
пробел, перед тем как вывести следующую порцию. Нажатие на клавишу Enter сдвинет вывод
только на одну следующую строку, а не на целую страницу. Вот пример:
Командой more можете листать текст вперёд. Текст из файла, в принципе, можно пролистать
назад, но это нетипичное использование more.
Основные интерактивные команды more:
h – help
q – выход
SPACE – пролистать один экран
d – пролистать пол экрана
/pattern – пролистать до строки содержащей подстроку pattern
= – показать номер текущей строки
:n – перейти к следующему файлу
:p – вернуться к предыдущему файлу
:f – напечатать имя текущего файла и номер строки в нем
Только при просмотре файлов:
b – пролистать экран назад
Команда more довольно удобна, однако часто оказывается, что вы уже пролистали нужный вам
экран. more не предоставляет возможности прокрутки назад. А команда less(1) имеет такую
функцию. Она используется таким же образом, как и more, поэтому предыдущие примеры также
будут работать с ней. Таким образом less больше, чем more (англ., игра слов: less - меньше, more -
больше). Джуст Кремерс (Joost Kremers) так говорит от этом:
less is more, but more then more is, so more is less less, so use more less, if you want less more.
Синтаксис команды less:
less имя_файла
42
Горячие клавиши команды less:
Значение Описание
Q Выход в терминал
43
1) Верхняя строка – показывает версию редактора, редактируемый файл, вносились ли изменения.
2) Область редактирования
3) Строка состояния – вывод информационных сообщений.
4) Внизу окна показаны комбинации клавиш основных функций редактирования (символ “^” –
одинарное нажатие Ctrl или двойное – Esc):
Сочетание клавиш:
Ctrl+G или F1 — Показать справку
Ctrl+X или F2 — Выйти из nano
Ctrl+O или F3 — Сохранить внесенные изменения
Ctrl+J или F4 — Выровнять текущий абзац (абзацы отделены пустой строкой)
Ctrl+R или F5 — Добавить содержимое другого файла в текущий
Ctrl+W или F6 — Поиск по файлу
Ctrl+Y или F7 — Страница вперед
Ctrl+V или F8 — Страница назад
Ctrl+K или F9 — Вырезать текущую строку и запомнить
Ctrl+U или F10 — Вставить
Ctrl+C или F11 — Положение курсора
Ctrl+T или F12 — Проверить орфографию
Опции работы с nano
Файл открывается командой:
nano имя_файла
либо с дополнительными опциями:
nano –Опция1 Опция2 … ОпцияN +строка,столбец имя_файла
Список всех опций можно найти в справке:
nano -h
Опции, которые могут быть полезными в начале работы с nano:
Опции и Значение:
-h, -? — Показывать данную информацию
+row, column — Начать с указанной строки и позиции
-S — Построчная прокрутка вместо полу-экранной
-c — Построчная прокрутка вместо полу-экранной
-i — Автоматический отступ на новых строках
-u — Разрешить функцию отмены действий (Alt-U — undo, Alt-E — redo.)
-v — Режим просмотра
-w — Не переносить длинные строки
-x — Не показывать две строки помощи cнизу
-B — Сохранять резервные копии существующих файлов.
Действия при редактировании в nano
Простейшие действия, которые доступны во время редактирования (символ Meta (m) можно
заменить Esc):
44
Сочетание клавиш:
Alt+A — Начать выделение текста
Ctrl+K — Вырезать выделенный текст
Alt+6 — Скопировать выделенный текст
Ctrl+U — Вставить из буфера обмена
m+\ — На первую строку файла
m+/ — На последнюю строку файла
Ctrl+_ или m+G — Перейти на указанный номер строки и ряд ([строка], [ряд] – указываются
в появившемся сообщении)
m+W — Повторить последний поиск
m+6 — Копировать текущую строку и сохранить ее в буфере обмена
m+} — Увеличить отступ строки
m+{ — Уменьшить отступ строки
Home — На начало текущей строки
End — В конец текущей строки
m+9 — На начало текущего абзаца; потом следующего абзаца
m+0 — В конец текущего абзаца; потом следующего абзаца
m+T — Вырезать с текущей позиции до конца файла
m+J — Выровнять весь файл
m+D — Подсчитать количество слов, строк и символов
m+Y — Подсветка синтаксиса разрешить/запретить
Примечание: команда locate test (без звездочек) также вполне применима, ведь locate
автоматически заменяет переданное имя файла (такое, как NAME), на соответствующий шаблон (в
данном случае, *NAME*).
Принцип работы locate или почему поиск осуществляется так быстро
Причина, по которой утилита locate работает настолько быстро, заключается в том, что она не
исследует файловую систему в поисках файла или директории с заданным именем. Вместо этого
она использует информацию из базы данных (собранную утилитой updatedb) в процессе поиска
элементов файловой системы с заданными именами и генерирует вывод на основе этой
информации.
Хотя данный подход и имеет массу преимуществ, он не лишен недостатков. Основной его
недостаток заключается в том, что после создания каждого нового файла или новой директории
для корректной работы утилиты приходится обновлять информацию в базе данных. В противном
45
случае утилита не сможет найти файлы и директории, созданные после последнего обновления
информации в базе данных.
Например, если я попытаюсь найти файлы с именами, содержащими строку test , утилита find
сгенерирует следующий вывод:
Но при поиске файлов с теми же именами с помощью утилиты locate не будет выведено все файлы
в которых есть строка test:
Это означает, что информация в базе данных locate не была обновлена после создания
интересующего меня файла. Ну что же, давайте обновим информацию в базе данных с помощью
команды updatedb. Это делается следующим образом:
$ sudo updatedb
Теперь при исполнении приведенной выше команды locate выводится информация о найденных
файлах:
Аналогично, после удаления файла или директории вам придется убедиться в наличии актуальной
информации в базу данных locate, ведь в противном случае информация о них будет выводиться
при последующих операциях поиска.
Вывод информации о количестве найденных файлов и директорий
Как вы уже знаете, утилита locate выводит имена найденных файлов вместе с их полными или
абсолютными путями. Но при желании вы можете сообщить ей о том, что вместо вывода данной
информации нужно выводить лишь информацию о количестве найденных файлов и директорий.
Для этой цели предназначен параметр -c.
46
Но в случае использования параметра -i утилита будет игнорировать регистр символов имен
файлов, поэтому оба имени появятся в выводе:
47
Стандартный ввод (stdin) — дает доступ к информации, вводимой пользователем с
клавиатуры или любого другого устройства.
Стандартный вывод (stdout) — запись данных в такой поток осуществляет их показ на
стандартном устройстве вывода. Как правило, это дисплей монитора, то есть окно
терминала.
Стандартные ошибки (stderr) — операционная система должна уметь распознавать,
завершилась ли программа успешно или с ошибкой. Для этого помимо стандартного
вывода существует специальный поток. Запись в него сигнализирует об ошибках во время
выполнения.
Заметка: Вы как пользователь консоли Linux не имеете прямого доступа к потокам ввода-вывода.
Операционная система и командные интерпретаторы создают над ними уровень абстракции. Их
использование будет рассмотрено в уроках о написании консольных программ на встроенном
языке программирования Bash.
Вызов_программы < файл Передача содержимого файла программе в качестве стандартного ввода
48
всей файловой системе, начиная от корневой директории, ошибки доступа будут происходить на
защищенных системных папках.
test@test-VirtualBox:~$ find / -name .ini 2> ~/results.txt
49
18 Работа с файлами и каталогами
Данный урок открывает цикл учебных материалов, посвященных файлам и каталогам в
операционной системе Linux. Ниже мы рассматриваем основные принципы работы с ними:
правила именования, специальные символы консольных команд, общая структура директорий.
50
Заметка: Скрытые файлы имеют ряд особенностей. Большинство файловых менеджеров не
показывают их, пока не будет включена соответствующая настройка. Так же консольные команды
Linux работают с ними иначе. Например, вывод команды ls по умолчанию не захватывает скрытое
содержимое.
Структура каталогов
Напомним, что работа с каталогами в Linux строится по оригинальному принципу. Здесь нет
разделения на диски и устройства. Вся структура имеет древовидную форму, начиная от корневого
каталога «/». Другие файловые системы монтируются к ней в определенных местах. Например,
содержимое подключенного флеш-накопителя может быть доступно по адресу
«/media/user_name/flash».
Специальные символы
Существует три специальных символа заметно упрощающих использование консольных команд
при работе с файловой системой. Их описание и несколько примеров использования приводятся
ниже.
Специальные файловые символы:
~ - домашний каталог текущего пользователя. Неважно где вы находитесь в данный момент.
Использование символа «~» позволит обратиться к любому файлу в личной директории.
Например, команда «cp ~/uploads/best-video.mp4 ~/videos» скопирует скачанное видео в
новую директорию.
.. - каталог, располагающийся на уровень выше. Если вы находитесь в «/home/user-
name/games», символ «..» будет указывать на «/home/user-name».
. - текущий каталог. Использование аналогично символу «..», но не отбрасывает текущий
уровень.
Пример удаления файлов из указанного каталога в домашней директории
user@localhost:~$ rm -f ~/programs/old-builds/*
Пример копирования загруженных файлов в текущую директорию
user@localhost:~$ cd ~/new-awesome-videos
user@localhost:~$ cp ~/uploads/*.mp4 .
Пример аналогичного действия, но с перемещением по дереву каталогов
user@localhost:~$ cp ~/uploads/*.mp4 ../../another-user-dir/videos
51
Ниже приведены примеры опций и примеры их использования.
-R Рекурсивно обойти встретившиеся подкаталоги.
Вывести список всех файлов (без этой опции не выводятся скрытые файлы, имена которых
-a
начинаются с точки).
Если аргумент является каталогом, то выводить только его имя, а не содержимое. Часто используется
-d
с флагом -l для получения сведений о состоянии каталога.
Вывод в длинном формате: перед именами файлов выдается режим доступа, количество ссылок на
-l файл, имена владельца и группы, размер в байтах и время последней модификации (см. ниже). Если
файл является специальным, то в поле размера выводится старший и младший номера устройства.
-n То же, что и -l, но идентификаторы владельца и группы выводятся в виде чисел, а не в виде имен.
Изменить порядок сортировки на обратный алфавитный или, при наличии флага -t, сначала
-r
выводить более старые файлы.
Имена файлов сортируются не по алфавиту, а по времени (сначала идут самые свежие файлы). По
-t
умолчанию используется время последнего изменения. См. также флаги -u и -c.
Вместо времени последнего изменения использовать время последнего доступа для сортировки (с
-u
флагом -t) или для вывода (с флагом -l).
Если файл является каталогом, то выдавать после его имени символ /; если файл является
-F
выполняемым, то выдавать после его имени символ *.
Рассматривать каждый аргумент как каталог и выводить его содержимое. Этот флаг отменяет флаги
-f -l, -t, -s, -r и включает флаг -a. Сортировка имен файлов не производится; имена выдаются в таком
порядке, в каком они перечислены в каталоге.
52
Теперь несколько примеров наиболее полезных опций.
Пример как вывести список только каталогов:
user@localhost:~$ ls -d -1 /home/user/*/
/home/user/Desktop/
/home/user/Downloads/
/home/user/Dropbox/
/home/user/Images/
/home/user/Soft/
/home/user/Temp/
/home/user/VirtualBox VMs/
То же самое, но с использованием “длинного” (полного) вывода о каталогах:
user@localhost:~$ ls -dl /home/user/*/
drwxr-xr-x 2 user user 4096 May 6 10:22 /home/user/Desktop/
drwxr-xr-x 2 user user 4096 May 5 10:38 /home/user/Downloads/
drwx—— 16 user user 4096 May 6 07:40 /home/user/Dropbox/
drwxr-xr-x 2 user user 4096 May 5 12:00 /home/user/Images/
drwxr-xr-x 2 user user 4096 May 5 18:29 /home/user/Soft/
drwxrwxr-x 2 user user 4096 May 5 20:15 /home/user/Temp/
drwxrwxr-x 4 user user 4096 May 5 19:09 /home/user/VirtualBox VMs/
Ключ -l весьма полезен, так как позволяет проверять владельца и права на файлы/каталоги:
user@localhost:~$ ls -l
total 32
drwxr-xr-x 2 root root 4096 Aug 23 2012 bin
drwxr-xr-x 2 root root 4096 Aug 23 2012 etc
drwxr-xr-x 2 root root 4096 Aug 23 2012 games
drwxr-xr-x 2 root root 4096 Aug 23 2012 include
drwxr-xr-x 4 root root 4096 May 5 11:13 lib
lrwxrwxrwx 1 root root 9 May 5 10:22 man -> share/man
drwxr-xr-x 2 root root 4096 Aug 23 2012 sbin
drwxr-xr-x 7 root root 4096 Aug 23 2012 share
drwxr-xr-x 2 root root 4096 Aug 23 2012 src
Для вывода информации о скрытых файлах (начинаются с точки) используйте ключ -a:
user@localhost:~$ ls -la
total 524
drwxr-xr-x 37 user user 4096 May 6 21:20 .
drwxr-xr-x 3 root root 4096 May 5 10:25 ..
drwx------ 3 user user 4096 May 5 10:39 .adobe
-rw------- 1 root root 517 May 5 11:53 .bash_history
-rw-r–-r–- 1 user user 220 May 5 10:25 .bash_logout
-rw-r–-r–- 1 user user 133 May 5 11:52 .bashrc
drwx------ 17 user user 4096 May 5 18:29 .cache
drwxrwxr-x 3 user user 4096 May 5 10:54 .compiz-1
drwx------ 20 user user 4096 May 6 10:38 .config
drwx------ 3 user user 4096 May 5 10:38 .dbus
…
Кратко остановимся на обозначениях прав доступа и обозначениях файлов/каталогов. Первый
символ:
d – файл является каталогом;
b – файл является специальным блочным файлом;
c – файл является специальным символьным файлом;
53
p – файл является именованным каналом;
– – обычный файл.
Далее следуют три группы символов, обозначающих права доступа – r (read), w (write), x (execute) –
чтение, запись в файл/каталог и выполнение соответственно.
Обычный вывод ls без ключей выводит все файлы/каталоги одной строкой. Что бы вывести их в
колонку – выполняем:
user@localhost:~$ ls -1
Desktop
Downloads
Dropbox
file1.txt
file2.txt
Images
Soft
Temp
VirtualBox VMs
Ключ -h используется для вывода информации о размере в “человеко удобном” виде, т.е. в Kb,
Mb, Gb:
user@localhost:~$ ls -lh
total 36K
drwxr-xr-x 2 user user 4.0K May 6 10:22 Desktop
drwxr-xr-x 2 user user 4.0K May 5 10:38 Downloads
drwx------ 16 user user 4.0K May 6 07:40 Dropbox
-rw-r–-r–- 1 root root 2 May 6 21:06 file1.txt
-rw-r–-r–- 1 root root 2 May 6 21:06 file2.txt
drwxr-xr-x 2 user user 4.0K May 5 12:00 Images
drwxr-xr-x 2 user user 4.0K May 5 18:29 Soft
drwxrwxr-x 2 user user 4.0K May 5 20:15 Temp
drwxrwxr-x 4 user user 4.0K May 5 19:09 VirtualBox VMs
Отсортировать файлы/каталоги по их размеру, начиная с самого большого:
user@localhost:~$ ls -lS /var/log/
total 4152
-rw-r–-r–- 1 root root 1823273 May 6 19:46 dpkg.log
-rw-r----- 1 syslog adm 825505 May 6 08:05 syslog.1
-rw-r----- 1 syslog adm 589203 May 6 19:25 kern.log
-rw-r–-r–- 1 root root 47105 Aug 23 2012 bootstrap.log
-rw-r–-r–- 1 root root 37440 May 6 19:46 aptitude
-rw-r–-r–- 1 root root 20584 May 6 07:39 pm-
powersave.log
-rw-r----- 1 root adm 14329 May 5 11:38 dmesg.1.gz
-rw-r–-r–- 1 root root 6167 May 6 07:39 kdm.log
drwxr-xr-x 2 root root 4096 May 5 10:25 apt
-rw-r----- 1 root adm 31 Aug 23 2012 boot
-rw-r----- 1 syslog adm 0 May 5 10:38 ufw.log
Осотрировать файлы/каталоги по дате последней модификации, новые – в конце списка:
user@localhost:~$ ls -rtl /var/log/
total 4152
drwx------ 2 speech-dispatcher root 4096 Feb 6 2012 speech-
dispatcher
drwxr-xr-x 2 root root 4096 Mar 12 2012 unattended-
upgrades
54
drwxr-xr-x 2 root root 4096 Aug 10 2012 dist-upgrade
…
-rw-r–-r–- 1 root root 47105 Aug 23 2012 bootstrap.log
…
-rw-r–-r–- 1 root root 2990 May 5 19:20
fontconfig.log
…
-rw-r----- 1 syslog adm 60874 May 6 21:14 syslog
Что бы вывести новые в начале списка – используйте комбинацию опций без ключа -r:
user@localhost:~$ ls -tl /var/log/
То же самое, но сортировать по дате последнего доступа к файлу, а не дате его модификации,
используйте ключ -u:
user@localhost:~$ ls -tlu /var/log/
Вывести список файлов/каталогов, разделённый на 5 колонок, разделённых на всю ширину
окна:
user@localhost:~$ ls /usr/local | pr -T5 -W$COLUMNS
bin games lib sbin src
etc include man share
Добавлять символ обозначения принадлежности файла/каталога – каталог (/), исполняемый
файл (*), FIFO (|), символьная ссылка (@), сокеты семейства AF_UNIX (=):
user@localhost:~$ ls -F -1
Desktop/
Downloads/
Dropbox/
file1
file1.txt
file2
file2.txt
file3
file4.txt@
Images/
Soft/
Temp/
VirtualBox VMs/
Впрочем, ту же информацию выводит и ls -l – первый символ d для каталогов (directory) и ->; для
ссылок:
user@localhost:~$ ls -l
total 36
drwxr-xr-x 2 user user 4096 May 6 10:22 Desktop
…
lrwxrwxrwx 1 root root 9 May 6 21:20 file4.txt -> file1.txt
Выводить список через запятую:
user@localhost:~$ ls -m
Desktop, Downloads, Dropbox, file1, file1.txt, file2, file2.txt,
file3, file4.txt, Images, Soft, Temp, VirtualBox VMs
Вывести список рекурсивно, включая подкаталоги и их содержимое:
user@localhost:~$ ls -R
.:
Desktop
Downloads
Dropbox
55
Images
Soft
Temp
VirtualBox VMs
./Desktop:
PDF-Viewer.desktop
PDF-Viewer.lnk
./Downloads:
./Dropbox:
172210-1920×1080.jpg
271027-1366×768.jpg
…
Остортировать файлы/каталоги в обратном алфавитном порядке:
user@localhost:~$ ls -r
VirtualBox VMs Temp Soft Images file4.txt file3 file2.txt file2
file1.txt file1 Dropbox Downloads Desktop
Вывести информацию о номерах inode файлов и каталогов:
user@localhost:~$ ls -i -1
2368762 Desktop
1969746 Downloads
1987155 Dropbox
1987223 file1
1969890 file1.txt
1987865 file2
1969805 file2.txt
1987866 file3
1987863 file4.txt
1969751 Images
2141585 Soft
2368300 Temp
2141811 VirtualBox VMs
Вывести информацию о пользователе/группе в виде UID и GID, вместо символьных имён:
user@localhost:~$ ls -n
total 36
drwxr-xr-x 2 1000 1000 4096 May 6 10:22 Desktop
drwxr-xr-x 2 1000 1000 4096 May 5 10:38 Downloads
drwx------ 16 1000 1000 4096 May 6 07:40 Dropbox
-rw-r–-r–- 1 0 0 0 May 6 21:10 file1
-rw-r–-r–- 1 0 0 2 May 6 21:06 file1.txt
-rw-r–-r–- 1 0 0 0 May 6 21:10 file2
-rw-r–-r–- 1 0 0 2 May 6 21:06 file2.txt
-rw-r–-r–- 1 0 0 0 May 6 21:10 file3
lrwxrwxrwx 1 0 0 9 May 6 21:20 file4.txt -> file1.txt
drwxr-xr-x 2 1000 1000 4096 May 5 12:00 Images
drwxr-xr-x 2 1000 1000 4096 May 5 18:29 Soft
drwxrwxr-x 2 1000 1000 4096 May 5 20:15 Temp
drwxrwxr-x 4 1000 1000 4096 May 5 19:09 VirtualBox VMs
56
19 Создание, копирование и удаление файлов в Linux
57
довольно прост. После команды cp, через пробел указываются имена файлов, предназначенных
для копирования, а последний параметр будет считаться местом назначения. Также для захвата
нескольких фалов вы можете использовать механизмы подстановки. В общем виде команда
копирования может выглядеть как :
«cp имя_первого_файла имя_второго_файла место_назначения».
Обратите внимание: Linux при копировании позволяет задать новому файлу другое имя. Это
возможно при явном указании имени в последнем параметре. Если местом назначения является
директория, новый файл будет размещен в неё и назван как оригинал.
Пример копирования с изменением имени
user@localhost:~$ cp docs/file.txt archive/old-file.txt
Пример копирования с сохранением имени
user@localhost:~$ cp docs/file.txt archive
Пример копирования файлов подстановкой
user@localhost:~$ cp docs/*.txt archive
58
В данном случае, каталог «Pictures» существует, поэтому происходит перемещение а не
переименование каталога.
В следующем примере переименуем каталог «folder1» в «folder2»:
user@localhost:~$ mv /home/user/folder1 /home/user/folder2
В данном случае, каталог «folder1» был переименован в каталог «folder2», так как каталога
«folder2» не существовало.
59
20.2 Поиск файлов через базу данных
Linux имеет встроенные механизмы индексирования файловой системы и осуществления
быстрого поиска. Для этого раз в день запускается сканирование директорий и формирование
системной базы данных. Обычно она располагается в /var/lib/mlocate/mlocate.db. Механизм
сканирования также можно вызвать вручную с помощью команды updatedb.
Для осуществления поиска файлов в системной базе данных нужно использовать команду
locate. Просто укажите имя файла сразу за именем команды. Например, «locate my-
favorite-book».
Пример поиска по вхождению фразы
user@localhost:~$ locate config
/var/lib/dpkg/info/cups-bsd.config
/var/lib/dpkg/info/dash.config
/var/lib/dpkg/info/debconf.config
/var/lib/dpkg/info/dictionaries-common.config
...
Заметка: Поиск, производимый командой locate очень быстр. Однако учитывайте тот факт, что
системная база данных может быть не актуальной на момент осуществления операции. Механизм
сканирования файловой системы, время его проведения и вообще наличие такого инструмента
может разниться в различных дистрибутивах Linux.
60
Пример как достать все сообщения ядра из лог-файла
user@localhost:~$ grep "kernel" /var/log/syslog
Пример комбинирования grep с выводом других команд
user@localhost:~$ ls -l ~/ | grep "username"
Пример использование grep в чистом виде
user@localhost:~$ grep '12:00' /home/user/backup/log.txt
Эта команда показывает как можно использовать grep для того чтобы получить строки из файла
содержащие подстроку указаную в командной строке. Файл не обязательно должен оканчиваться
на .txt. Показаная выше команда производит поиск подстроки 12:00 в файле
/home/user/backup/log.txt и отображает все строки где эта подстрока встречается.
Эта комбинация может быть использована например для поиска бекапов которые происходили в
12:00.
Пример использование grep -v
user@localhost:~$ grep -v '12.00' /home/user/backup/log.txt
А вот эта команда (с использованием ключа -v) наоборот покажет только те строки где подстрока
’12:00′ НЕ встречается.
Пример использование grep -l
user@localhost:~$ grep -l 'delay' /code/*.c
Эта команда будет искать все файлы оканчивающиеся на .c и текст в найденых файлах
соответствующий подстроке 'delay' и в конечном итоге выведет только имена файлов где эта
подстрока встречается.
Пример использование комбинации из grep -w
user@localhost:~$ grep -w '\<bay' * $ grep -w 'watch\>' *
Эта команда уже более сложная и состоит из комбинации двух команд grep. Первая ищет строки
которые начинаются со слова ‘bay’ а вторая строки которые заканчиваются на слово ‘watch’.
Пример использования grep вместе с потоками
user@localhost:~$ ls -l | grep rwxrwxrwx
Команда ls -l отображает подробный список файлов в директории. Часть grep rwxrwxrwx фильтрует
результат полученый от ls -l и выводит только те директории у которых установлены
соответствующие права доступа. В данном случае это открытый доступ на чтение, запись и поиск
для всех пользователей и групп. Так что вместо того чтобы увидеть полный список файлов вы
увидите только те файлы у которых установлены нужные вам права доступа.
Вывод от команды grep может также быть направлен потоком в другую команду, например как в
следующем примере:
user@localhost:~$ du | grep 'mp3' | more
Пример отображенный выше выводит постранично список mp3 файлов найденых в текущей
директории.
Следующая команда отобразит все строки в файле /home/user/script1 которые начинаются с
символа ‘#’. Определение тип ‘^#’ означает что символ ‘#’ должен быть первым символом с троке.
user@localhost:~$ grep '^#' /home/user/script1 | more
Эта команда ищет строки содержащие в первом символе цифры от 0 до 9 а потом выводит только
те строки которые не попали в результаты поиска. Как вы видите — был использован ключ ‘-v’
означающий реверсивный поиск.
user@localhost:~$ grep -v '^[0-9]' /home/user/backup/log.txt | more
Важно: Необходимо заключать искомые строки в одинарные кавычки как указано в двух
предыдущих примерах для того чтобы интерпретатор командной строки мог воспринимать их
61
корректно. Иначе интерпретатор может понять это как другую команду и результат выполнения
будет непредсказуем.
Универсальный поиск по файлам
Своего рода швейцарским ножом в поиске файлов является команда find. Отметим, что она
имеет множество опций, которые могут кардинально изменять механизм поиска. Мы изложим
лишь основные принципы, а с остальными возможностями ознакомьтесь в справке по команде.
Базовый принцип использования find состоит в указании директории поиска и опций. Например,
выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих расширение «cpp»
по всем каталогам, находящимся в личной директории пользователя.
Значение, указанное после опции -name, задает шаблон соответствия имени файла. Вы можете
использовать опцию -type для указания типа файла, где в качестве значений нужно использовать
специальные буквы: d — директория, f — файл, l - символическая ссылка и т. д. Опции -user, -group
и -size также довольно полезны. Их значениями являются имя пользователя, имя группы и размер
файла в байтах.
С помощью опции -exec каждому файлу, предназначенному для установки соответствия, можно
добавить произвольную обработку. Таким образом, появляется возможность осуществления
поиска, как по имени файла, так и по содержимому. Ниже приводится пример комбинирования
команды find и grep за счет использования опции -exec.
Пример поиска по имени файла
user@localhost:~$ find ~/ -name *.cpp
Пример поиска по конкретному пользователю и группе
user@localhost:~$ find ~/ -name *.cpp -user 'my-username' -group 'my-
group'
62
user@localhost:~$ find /var/log/ -type f | wc -l
Пример как посчитать количество запущенных процессов php-fpm:
user@localhost:~$ ps -A | grep php-fpm | wc -l
63
Для файлов они устанавливают права на чтение, запись и выполнение. Однако в отношении папок
их роль меняется кардинально.
Бит «r» устанавливает пользователю право на просмотр содержимого директории с помощью
команды ls. Бит «x» дает право на перемещение в папку, используя команду cd. Если
одновременно установлены биты «x» и «w», пользователь получает право на создание файлов
внутри директории.
64
user@localhost:~$ ls -l ~/temp-file.txt
-rw-r-xr-x 1 user user 0 окт 17 22:36 temp-file.txt
Используем жесткую установку правил. Обратите внимание на исчезновение права выполнения
user@localhost:~$ chmod go=r temp-file.txt
user@localhost:~$ ls -l ~/temp-file.txt
-rw-r--r-- 1 user user 0 окт 17 22:36 temp-file.txt
Использование восьмеричной записи при изменении прав доступа аналогично буквенной. В
общем виде команду можно записать как «chmod [0-7][0-7][0-7] имя_файла». Каждая
квадратная скобка определяет единственное число от 0 до 7.
Назначение прав с помощью числовой записи
user@localhost:~$ chmod 764 temp-file.txt
user@localhost:~$ ls -l ~/temp-file.txt
-rwxrw-r-- 1 user user 0 окт 17 22:36 temp-file.txt
Если вам нужно поменять права для нескольких файлов, используйте механизмы постановки и
опцию -R. Подстановка обеспечит обработку всех файлов, попавших под заданный шаблон, а за
счет опции -R поиск будет продолжен и во вложенных директориях.
Заметка: Команда chmod также изменяет права доступа для директорий. При рекурсивном
назначении и использовании механизмов подстановки будьте внимательны. Задавая шаблон
соответствия, исключайте возможность совпадений с нежелательными файлами или
директориями.
65
user@localhost:~$ sudo chown mysql:docker ~/temp-file.txt
ls -l ~/temp-file.txt
-rwxrw-r-- 1 mysql docker 0 окт 17 22:36 temp-file.txt
Заметка: Если у вас нет прав на редактирование файла, единственно возможным способом
осуществить изменение его группы или пользователя является выполнение команды chown от
лица администратора.
66
setuid у владельца уже было право на выполнение, а большая «S» свидетельствует об обратном.
Заметка: Устанавливайте специальный бит setuid только по необходимости. Linux считается очень
защищенной операционной системой от разного рода атак. Однако бездумное распределение
прав может привести к нежелательным последствиям.
67
предусматривает возможность сжатия данных то есть архивирование в linux это не одно и то же
что и сжатие файлов linux. Архивирование — это объединение нескольких небольших файлов в
один, с целю более удобной последующей передачи, хранения, шифрования или сжатия. Для
сжатия данных используется Gzip или Bzip2. Архивы, созданные с применением Gzip, обычно
имеют расширение .tar.gz, а при использовании Bzip2 — .tar.bz2. Сначала выполняется архивация,
затем сжатие, отдельными программами. Автоматический запуск некоторых утилит сжатия для
только что созданного архива поддерживается в tar и других подобных программах с помощью
специальных опций.
Также полезной возможностью архивации есть шифрование. Но теперь давайте рассмотрим какие
существуют утилиты, с помощью которых выполняется архивирование файлов linux и как ими
пользоваться.
68
Пример сжатия Gzip:
user@localhost:~$ tar -cvzf filename.tar.gz dir_name
В данном случае мы попытались запаковать папку dir_name в архив filename.tar.gz. Из указанных
параметров -z указывает на использование метода Gzip, а -v выводит результаты процесса
создания архива с указанием упакованных файлов или папок.
Пример сжатия Bzip2:
user@localhost:~$ tar -cvjf filename.tar.bz2 dir_name
Данная команда аналогична предыдущей и имеет отличие в параметре –j, т.к. именно он отвечает
за использование метода сжатия Bzip2.
24 Процессы в Linux
69
Каждый процесс, зарегистрированный в системе, получает уникальный идентификационный
номер PID (англ. process identifier). Linux устроен так, чтобы у каждого процесса был родитель,
который может следить за его состоянием. Это позволяет системе быть устойчивой к отказам.
Например, если в дочернем процессе произошла логическая ошибка, и он перестал отвечать,
родитель может уничтожить его и пересоздать.
Получить дерево процессов можно с помощью команды pstree. Она выводит в терминал
структуру, построенную из графических примитивов. Дочерние процессы лежат в ней правее и
соединены линиями с родителями. Обратите внимание на пример, приведенный ниже. Если
пройти по иерархии родителей, в итоге мы доберемся до единственного процесса с именем
systemd или init (в зависимости от дистрибутива). Это первый процесс, стартующий при
инициализации системы. Именно он в дальнейшем запустит важнейшие фоновые задачи и станет
их родителем.
user@localhost:~$ pstree
systemd─┬─ModemManager─┬─{gdbus}
│ └─{gmain}
├─NetworkManager─┬─dhclient
│ ├─dnsmasq
│ ├─{gdbus}
│ └─{gmain}
├─accounts-daemon─┬─{gdbus}
│ └─{gmain}
├─acpid
├─agetty
├─aptd───{gmain}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord─┬─{gdbus}
│ └─{gmain}
├─cron
├─dbus-daemon
...
70
r : информация только о работающих процессах;
x : процессы, отсоединённые от терминала.
Независимо от наличия опций, команда ps выдает для каждого процесса отдельную строку, но
содержимое этой строки может быть разным. В зависимости от заданных опций могут
присутствовать следующие поля:
UID : идентификатор пользователя;
PID : идентификатор процесса;
PPID : идентификатор родительского процесса;
C : приоритет процесса, используемый планировщиком задач;
STIME : время старта процесса;
TTY : терминал, с которым связан данный процесс;
TIME : процессорное время, занятое этим процессом;
CMD : команда, запустившая данный процесс «с некоторыми опциями выводит и каталог
откуда процесс был запущен»;
STAT : состояние, в котором на данный момент находится процесс.
Для примера запустим текстовый редактор в фоновом режиме
user@localhost:~$ gedit &
[1] 18009
Теперь посмотрим вывод процессов текущего пользователя
user@localhost:~$ ps
PID TTY TIME CMD
17585 pts/2 00:00:00 bash
18009 pts/2 00:00:00 gedit
18017 pts/2 00:00:00 ps
Теперь посмотрим вывод всех доступных процессов в системе
user@localhost:~$ ps -A
PID TTY TIME CMD
1 ? 00:00:03 systemd
2 ? 00:00:00 kthreadd
3 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 kworker/u16:0
7 ? 00:00:02 rcu_sched
...
Примечания:
Альтернативой ps является команда top, удобно выводящая на экран постоянно
обновляющуюся информацию, однако top ограничена размерами окна, поэтому всё, что не
может поместиться на экран, просто игнорируется.
Для команды ps удобно пользоваться конвейером и утилитой less для пролистывания
выводимой информации с помощью кнопок вверх и вниз, например ps ax | less
С помощью утилиты grep удобно искать и выводить только нужные процессы, например ps
ax | grep smbd.
Команда ps позволяет сделать как бы "моментальный снимок" процессов, запущенных в системе.
В отличие от ps команда top отображает состояние процессов и их активность "в реальном режиме
времени". Команда top осуществит вывод таблицы со списком текущих процессов. Она
заблокирует терминал и будет обновлять данные через небольшие промежутки времени. Помимо
71
стандартной информации вывод будет содержать процентную долю загрузки процессора и
объема оперативной памяти. Попасть в строку ввода команд можно, нажав клавишу «Q». Список
процессов может быть отсортирован по используемому времени ЦПУ (по умолчанию), по
использованию памяти, по PID, по времени исполнения. Переключать режимы отображения
можно с помощью команд, которые программа top воспринимает. Это следующие команды
(просто нажимайте соответствующие клавиши, только с учетом регистра, то есть вместе с
клавишей Shift):
<Shift>+<N> — сортировка по PID;
<Shift>+<A> — Сортировка строк по максимальному потреблению различных системных
ресурсов. Полезна для быстрой идентификации задач, для которых в системе не хватает
ресурсов. ;
<Shift>+<P> — сортировать процессы по использованию ЦПУ;
<Shift>+<M> — сортировать процессы по использованию памяти;
<Shift>+<T> — сортировка по времени выполнения;
<Shift>+<Z> - Выбрать цвет подсветки.
Кроме команд, определяющих режим сортировки, команда top воспринимает еще ряд команд,
которые позволяют управлять процессами в интерактивном режиме.
<t> - Включение и выключение выдачи на экран суммарных данных.
<m> - Включение и выключение выдачи на экран информации об использовании памяти.
<1> - По умолчанию выводятся данные для одного ЦП (ядра). Этот переключатель
позволяет увидеть данные по каждому ЦП.
<f> - Вход в меню интерактивного конфигурирования данных, выдаваемых на экран
командой top. Полезна для настройки команды top для выполнения специфической
задачи.
<c> - Абсолютный путь расположения модуля команды и её аргументы.
<r> - Изменение приоритета процессов с помощью команды renice.
<k> - Удаление процесса с помощью команды kill. Программа запрашивает у вас код
процесса и сигнал, который будет ему послан.
<z> - Переключение между цветным / монохромным вариантом выдачи изображения.
<q> - Выйти из программы
<Пробел> - Немедленно обновить содержимое экрана.
<n> - Изменить число отображаемых процессов. Вам предлагается ввести число.
<u> - Сортировать по имени пользователя.
Ниже приведен пример использования команды top.
unifun@ubuntu:~$ top
top - 09:16:10 up 85 days, 23:04, 1 user, load average: 0.13, 0.03,
0.01
Tasks: 125 total, 1 running, 124 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0
si, 0.2 st
KiB Mem : 2039436 total, 1367312 free, 56632 used, 615492
buff/cache
KiB Swap: 645116 total, 645116 free, 0 used. 1906556 avail
Mem
72
COMMAND
9289 unifun 20 0 41796 3780 3192 R 0.3 0.2 0:00.16
top
1 root 20 0 37776 5816 3976 S 0.0 0.3 0:30.13
systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.74
kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:03.56
ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00
kworker/0:0H
7 root 20 0 0 0 0 S 0.0 0.0 2:39.20
rcu_sched
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00
rcu_bh
…
где:
Загрузка системы
09:16:10 — текущее время;
up 85 days - время работы системы после включения питания;
1 user - количество пользователей, которые в данный момент работают в системе;
load average: 0.13, 0.03, 0.01 - общая средняя загрузка системы (измеряется каждые 1, 5 и 15
минут). Общей средней загрузкой системы называется среднее число процессов,
находящихся в состоянии выполнения (R) или в состоянии ожидания (D), эту информацию
можно увидеть в колонке S вывода команды top, она может принимать 5 значений:
1. 'D' = uninterruptible sleep (состояние ожидания)
2. 'R' = running (состояние выполнения)
3. 'S' = sleeping
4. 'T' = traced or stopped
5. 'Z' = zombie
Состояния процессов
total — общее количество процессов в системе;
running — количество процессов, выполняемых процессором или стоящих в очереди на
выполнение;
sleeping — количество процессов, ожидающих какого-либо события ввода-вывода;
stoped — количество приостановленных процессов;
zombie — количество процессов, находящихся в состоянии «зомби».
73
ni — (Nice CPU time) процент использования процессорного времени программами с
измененным приоритетом;
id — простой процессора
wa — (iowait) время, затраченное на завершение ввода/вывода (IO)
hi — (Hardware IRQ) процент времени, которое процессор тратит на обработку прерываний
на уровне оборудования (hardware- прерываний).
si — (Software Interrupts) процент времени, затраченное на работу обработку software-
прерываний (network)
st — (Steal Time) время, «украденное» гипервизором у этой виртуальной машины для
других задач (например работа другой виртуальной машины)
74
Чтобы понять, что такое загрузка системы следует обратиться к логике работы центрального
процессора. Вне зависимости от того, мощный у вас процессор или слабый, многоядерный или
нет, он выполняет некий программный код для некоторых процессов. Если процесс один, то
вопросов нет, а вот когда их несколько? Надо как-то распределять ресурсы между ними и,
желательно, равномерно, чтобы один процесс, "дорвавшись" до CPU, не оставил без вычислений
другие.
Каждому нуждающемуся в вычислениях процессу выделяется некий промежуток времени,
который зависит от типа процессора и системы, если говорить о современных процессорах Intel, то
это значение обычно составляет 10 мс и называется тиком. Каждый тик - процессорное время
отдается какому-то одному процессу в порядке очереди, но если процесс имеет повышенный или
пониженный приоритет, то он, соответственно получит большее или меньшее количество тиков.
Количество использованных тиков, в первом приближении, и представляет загрузку системы. В
Linux для оценки загрузки используется интервал в 500 тиков (5 секунд), при этом учитываются как
работающие процессы (использованные тики), так и ожидающие (которым не хватило тика, либо
они не смогли его использовать, ожидая завершения иной операции).
Если мы используем все тики за указанный промежуток времени и у нас не будет ожидающих
сводного тика процессов, то мы получим загрузку процессора на 100% или load average (LA) равное
1.
Давайте рассмотрим следующую схему:
Для простоты будет использоватся в расчетах более короткий интервал - 9 тиков. На схеме слева
видно, что процессорные ресурсы сначала понадобились системе, затем браузеру и файловому
менеджеру, потом активности в системе не было, затем еще один тик взял файловый менеджер и
еще два браузер, последние два тика также не понадобились. Несложные расчеты показывают,
что было использовано 67% процессорного времени или load average системы составил 0,67.
Справа показана ситуация, когда каждый тик был занят своим процессом, но некоторые процессы
так и не получили своего тика или не смогли получить, например, ждали окончания операции
ввода-вывода. В таком случае загрузка процессора составит все те же 100%, но load average
вырастет до 1,33, указывая на наличие очереди.
Чтобы лучше понять ситуацию давайте представим себе небольшой супермаркет, касса
представляет собой аналог процессора, тик - среднее время обслуживания покупателя (скажем, 1
минута), а процессы - это покупатели. В разгар рабочего дня людей в магазине немного, и вы
спокойно прошли на свободную кассу, рассчитались и пошли по своим делам. Это хорошо, но как
оценить нагрузку на кассу? Для этого нужно взять некий промежуток времени, допустим 10 минут.
Если за 10 минут в магазине кроме вас было еще три человека, то средняя загрузка составит 0,4.
А теперь зайдем в магазин вечером, все кассы заняты, и чтобы оплатить покупки придется ждать.
75
Теперь если за 10 минут касса обслужила 10 человек и еще 10 стоят в очереди, то средняя загрузка
будет равна 2, хотя касса загружена всего на 100%.
Вернемся к процессору и еще одному моменту, процессам, ожидающим окончания операций
ввода-вывода (диск, сеть и т.п.). Во многих источниках указывается, что такие процессы искажают
результат load average и мы можем получить высокие значения LA при отсутствии загрузки
процессора. Да, это так. Посмотрим на еще одну схему ниже:
Как видно на рисунке, из 9 тиков было использовано только 6, т.е. процессор загружен всего на
67%, но так как три процесса ждут данные от диска, то load average по-прежнему равен 1.
Искажают ли такие процессы значение load average? На наш взгляд нет. Следует понимать, что
средняя загрузка - это не показатель производительности процессора, не результат бенчмарка, не
текущая нагрузка, а отношение числа процессов, которым требуются вычислительные ресурсы
системы к имеющимся в наличии ресурсам.
Т.е. если имеется 1 процессор и 500 тиков, но за это время процессорные ресурсы требуются
тысяче процессов, то нагрузка явно вдвое превышает имеющиеся ресурсы. И то, что часть
процессов ждут жесткий диск и процессор работает вхолостую, не говорит о том, что система
находится в простое, наоборот, она не может обработать нагрузку, правда по другой, не зависящей
от процессора причине.
Пользователю ведь все равно по какой причине тормозит сайт или приложение, тем более что
недостаток дисковых ресурсов обычно выражается в подвисании приложения, в то время как при
недостатке процессорных оно просто начинает тормозить.
То есть - Load average показывает отношение имеющихся запросов на вычислительные ресурсы к
количеству этих самых ресурсов (тиков). Для одного процессора (одного процессорного ядра)
использование всех имеющихся ресурсов обозначает load average = 1. Причем это будет
справедливо и для Core i7 и для Pentium I, хотя производительность у этих двух процессоров
разная.
Теперь перейдем к многопроцессорности и многоядерности. При появлении второго процессора
или второго ядра, появляются дополнительные вычислительные ресурсы, т.е. те самые 500 тиков.
Но за эти 500 тиков система уже может обработать уже 1000 запросов, что покажет load average =
2.
Значит ли это, что производительность выросла в два раза? Нет! Производительность зависит от
того, сколько вычислений способен произвести процессор в течении одного тика. Понятно, что
более мощный процессор выполнит за этот промежуток времени больше вычислений, но оба из
них сделают одинаковое число тиков (для каждого процессорного ядра). В многопроцессорных
(многоядерных) системах часть процессорного времени вместо вычислений занимают задачи
межпроцессорного взаимодействия, переключения контекста и т.д. Поэтому появление второго
76
ядра никогда не даст 100% прироста производительности, но всегда позволяет обработать вдвое
большее количество запросов.
Это хорошо видно на примере технологии Hyper-threading, которая позволяет сделать из одного
физического ядра процессора два виртуальных. Физическая производительность ядра процессора,
т.е. количество производимых им вычислений в единицу времени не меняется, но появляется,
хоть и виртуальное, но второе ядро, а это еще 500 тиков. Как показывают тесты, прирост
производительности от Hyper-threading составляет 15-30%, что еще раз подтверждает старую
поговорку, что лучше плохо ехать, чем хорошо стоять. Второе ядро, хоть и виртуальное, позволяет
обрабатывать вычислительные запросы тех процессов, которые в одноядерном варианте стояли
бы в очереди.
Непонимание этого момента приводит к тому, что load average ошибочно связывают не с
доступностью и достаточностью вычислительных ресурсов, а с производительностью процессора,
что приводит к неверным выводам.
Теперь разберемся с самими цифрами. Мы получаем три значения load average для промежутков в
1, 5 и 15 минут. Для отображения load average используется экспоненциально взвешенная
скользящая средняя, подобный тип кривых используется для для сглаживания краткосрочных
колебаний и выделения основных тенденций или циклов.
Именно усредненные по особому алгоритму значения позволяют нам окинуть ситуацию взглядом
вширь и вглубь и разглядеть за деревьями лес. В этом отношении временные значения load
average представляют собой не время, за которое посчитали среднее значение, а период времени
относительно которого проводится усреднение.
Можно точно смоделировать различные значения load average при заданной модели нагрузки. К
примеру если смоделировать ситуацию, когда первые 30 минут единственное ядро CPU было
нагружено на 100%, без ждущих в очереди процессов, в последующие полчаса нагрузка была
полностью снята.
Как видим, разные периоды усреднения дают совершенно различные результаты, так LA 1 (1 min),
77
начинает показывать реальные значения где-то через 4 минуты, LA 5 для отражения текущей
нагрузки потребовалось уже 20 минут, а LA 15 за полчаса полной загрузки вышла только на 0,8.
О чем это говорит и как интерпретировать данные значения? Можно сказать, что LA 1
представляет собой недавнее прошлое (несколько минут назад), LA 5 прошлое (полчаса-час) и LA
15 отдаленное прошлое (несколько часов).
Теперь, располагая этим багажом знаний, можно правильно интерпретировать простые, на
первый взгляд, три числа load average.
Для примера возьмем такое значение:
load average: 0.99 0.75 0.35
Это говорит о том, что имеет место достаточно кратковременный (около десятка минут) всплеск
нагрузки, при этом вычислительных ресурсов пока достаточно.
А вот значение:
load average: 0.00 0.36 0.59
Говорит о том, что не так давно система испытывала значительные нагрузки в течении довольно
продолжительного времени (полчаса-час).
А вот такая картина:
load average: 4.55 4.22 4.18
Для четырехядерного процессора означает, что он работает на пределе своих возможностей в
течении длительного времени (несколько часов).
Как видно, load average, несмотря всего на три цифры, способна представить системному
администратору огромный пласт информации о фактической загрузке системы на протяжении
последних нескольких часов.
Для одного ядра считается приемлемыми следующие значения:
LA 1 - может превышать 1.00, свидетельствуя о кратковременной пиковой нагрузке на
систему.
LA 5 - не должен превышать 1.00, в противном случае налицо явный недостаток
вычислительных ресурсов.
LA 15 - максимальное значение 0.7 - 0.8, но в любом случае не выше 1.0.
На многоядерной (многопроцессорной) системе значения load average следует откорректировать
пропорционально числу ядер. Узнать их количество можно командой
nproc
или
cat /proc/cpuinfo | grep "cpu cores"
Так, например, с учетом вышесказанного, для четырехядерной системы LA 15 не должен
превышать 3.00, для двухядерной 1.5, а для одноядерной 0.75.
Теперь, понимая, что такое load average и каким образом формируются его значения вы всегда
сможете быстро оценить производительность собственной системы и вовремя принять меры если
в работе вашего сервера возникнут узкие места.
78
R : процесс выполняется в данный момент или ожидает своей очереди.
S : процесс ожидает (т.е. спит менее 20 секунд).
I : процесс бездействует (т.е. спит больше 20 секунд).
D : процесс ожидает ввода-вывода (или ожидает какого-либо события системы),
непрерываемый сон.
Z : zombie или defunct процесс. Означает своего рода «зависание». Скорее всего, такой
процесс больше не выполнит ничего полезного, но останется зарегистрирован в системе по
причине того, что не сможет отдать родителю код своего завершения.
T : процесс приостановил свое выполнение. Возможно, происходит отладка.
W : процесс в свопе
< : процесс в приоритетном режиме.
N : процесс в режиме низкого приоритета.
L : real-time процесс, имеются страницы, заблокированные в памяти.
s : лидер сессии.
79
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
…
Описание некоторых сигналов
SIGABRT - Этот сигнал посылает сигнал процессу, чтобы прервать операцию. ABRT как
правило, направлен на сам процесс, когда он вызывает функцию abort() языка
программирования С, чтобы сигнализировать аварийное завершение, но он может быть
направлен из любого процесса, как и любой другой сигнал.
SIGALRM, SIGVTALRM и SIGPROF - отправляется процессу, когда лимит времени, указанный
при вызове функции сигнализации (например, setitimer) истекает. ALRM - Посылается, когда
настоящее время или часы с течением времени. VTALRM - Посылается, когда процессорное
время, используемое в процессе истечет. PROF - Посылается, когда процессорное время,
используемое процессом и системы от имени процесса истекает.
SIGBUS - BUS сигнал посылает процессу, когда это приводит к ошибке шины. Условия,
которые приводят к данному сигналу, например, неправильное выравнивание доступа к
памяти или отсутствие физического адреса.
SIGCHLD - Сигнал CHLD отправляет процессу, когда дочерний процесс завершается,
прерывается или возобновляется после прерывания. Один из распространенного
использование сигнала — это дать сигнал ОС на очистку ресурсов, которые используются в
процессе дочернего процесса после его окончания без явного системного вызова.
SIGCONT - Сигнал CONT инструктирует операционную систему, и дает сигнал перезапустить
процесс который ранее был приостановлен в режиме СТОП или сигнала TSTP. Одной из
важных особенностей этого сигнала является контроль работы в оболочке Unix.
SIGFPE - Сигнал FPE посылает процессу, когда он выполняет ошибочное, арифметические
срабатывания, например, такие как деление на ноль.
SIGHUP - Сигнал HUP посылает процессу, когда его управляющий терминал закрыт.
Первоначально он был разработан, чтобы уведомить процесс после последовательного
падения линии (HUP ответственный за «зависания»). В современных системах, этот сигнал
обычно означает, что контроль псевдо или виртуальным терминалом был закрыт.
SIGILL - ILL сигнал, посылаемый процессу при попытке выполнить вредоносные,
неизвестные или привилегированные команды (инструкции).
SIGINT - Сигнал INT посылает процессу от управляющего терминала, когда пользователь
желает прервать процесс. Это как правило, инициируется нажатием Control-C, но на
некоторых системах, «delete» или «break».
SIGKILL - Сигнал KILL посылает процессу чтобы он немедленно прекратил работу. В отличие
от SIGTERM и SIGINT этот сигнал не может быть захвачен или проигнорирован и
принимающий процесс не может выполнить какие-либо очистку после получения этого
сигнала.
SIGPIPE - Сигнал PIPE посылается процессу, когда он пытается записать в трубе без процесса,
подключенного к другому концу.
SIGQUIT - QUIT сигнал посылается процессу от его управляющего терминала, когда
пользователь запрашивает процесс выполнения дампа.
SIGSEGV - Сигнал SEGV отправляется в процесс, когда он делает недопустимую ссылку
виртуальной памяти или сбой сегментации, то есть когда он выполняет нарушение
сегментации.
SIGSTOP - STOP сигнал указывает ОС, чтобы остановить процесс для последующего
80
возобновления.
SIGTERM - Сигнал TERM посылается в процесс чтобы запросить о его прекращении. В
отличие от сигнала «kill», он может быть и интерпретируемым или игнорируемым в
процессе. Это позволяет процессу выполнять «nice» выполнение для прекращения
высвобождения ресурсов и сохранения состояния в случае необходимости. Следует
отметить, что SIGINT почти идентичен SIGTERM.
SIGTSTP - Сигнал TSTP посылается в процесс его управляющего терминала и говорит ему,
что нужно временно приостановить. Это обычно инициируется пользователем нажатием
Control-Z. В отличие от SIGSTOP, этот процесс может зарегистрировать обработчик сигнала
или чтобы игнорировать сигнал.
SIGTTIN и SIGTTOU - В TTIN и TTOU сигналы посылаются процессу, когда он пытается
прочитать или записать соответственно с (tty) терминала на заднем плане. Как правило,
этот сигнал может быть получен только с помощью процессов находящихся под контролем
рабочей панели; демоны не имеют управляющие терминалы и никогда не должны
получать этот сигнал.
SIGUSR1 и SIGUSR2 - Сигналы USR1 и USR2 отправляются процессу и указывают
определенные пользователем условия.
SIGPOLL - Сигнал POLL отправляется в процессе, когда происходит асинхронное событие
ввода / вывода.
SIGSYS - Сигнал SYS отправляется в процессе, когда он пропускает плохой аргумент для
системного вызова.
SIGTRAP - TRAP сигнал посылает процессу когда возникает состояние что отладчик просил
быть информированным — Например, когда конкретная функция выполняется или когда
меняется определенное значение переменной.
SIGURG - Сигнал URG отправляется процессу, когда socket имеет срочные или вне диапазона
данных, доступных для чтения.
SIGXCPU - Сигнал XCPU отправляется в процессе, когда он использует центральный
процессор в течение времени превышающего определенное заданное значение,
установленным пользователем. Прибытие сигнала XCPU обеспечивает процессу быстро
сохранить все промежуточные результаты и завершиться хорошо, прежде чем он
завершиться операционной системы с помощью сигнала SIGKILL.
SIGXFSZ - Сигнал XFSZ отправляется в процессе, когда файл вырастает (превышает заданное
значение), чем максимально допустимое значение.
SIGRTMIN to SIGRTMAX - Сигналы RTMIN — RTMAX предназначены для использования в
пользовательских целей. Они сигналы реального времени.
Следующие сигналы не стандартизированы POSIX, но иногда используются на некоторых
системах.
SIGEMT - Сигнал ЕМТ отправляется в процессе, когда происходит прерывание эмулятора.
SIGINFO - Сигнал INFO отправляется в процессе, когда запрос статуса получен от
управляющего терминала.
SIGPWR - Сигнал PWR отправляется в процессе, когда система испытывает сбой питания.
SIGLOST - LOST сигнал посылается к процессу, когда «file lock» теряется.
SIGWINCH - Сигнал WINCH отправляется в процессе, когда его управляющий терминал
меняет свой размер.
81
25.2 Завершение процесса по его PID
Если известен уникальный идентификационный номер процесса — PID, вы можете завершить его
выполнение или убить с помощью команды kill. PID указывается в качестве первого параметра.
При запуске команды kill без дополнительных опций, Linux посылает процессу сигнал SIGTERM.
Для отправки другого сигнала его код нужно передать в опции.
Для примера запустим текстовый редактор в фоновом режиме
user@localhost:~$ gedit &
[1] 15892
Примеры завершения работы с указанием кода сигнала и без
user@localhost:~$ kill 15892
user@localhost:~$ kill -9 15892
Заметка: Команда kill может завершить работу процесса, принадлежащего только текущему
пользователю. Если вам нужно осуществить эту операцию над чужими процессами, необходимо
войти в систему под администратором.
82
системы процесс продолжал работу в фоновом режиме.
nohup — UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери
связи (SIGHUP). Таким образом, команда будет продолжать выполняться в фоновом режиме и
после того, как пользователь выйдет из системы. Если стандартным выводом (stdout) команды
является терминал, то он и стандартный вывод ошибок (stderr) перенаправляются с добавлением
в файл «nohup.out» в текущей директории; если это невозможно сделать, то перенаправление
происходит в файл «$HOME/nohup.out». Если и это невозможно сделать, то команда не
запускается совсем. При создании файлов «nohup.out» или «$HOME/nohup.out» команда nohup
устанавливает им атрибуты доступа только для владельца этих файлов (группа и остальные
пользователи не имеют прав доступа к этим файлам). Если же эти файлы уже существуют, то их
права доступа не изменяются.
Заметка: nohup не переводит автоматически команду в фоновый режим; пользователь должен
сделать это явным образом, завершив командную строку символом «&».
Для примера – запустим ping с помощью команды nohup:
user@localhost:~$ nohup ping ya.ru
nohup: ignoring input and appending output to `nohup.out'
Посмотрим запущенные процессы с фильтром по слову ping.
user@localhost:~$ ps aux | grep ping
root 1318 0.1 0.0 4544 916 pts/0 S+ 05:56 0:00 ping
ya.ru
И попробуем ему отправить сигнал HUP (отбой):
user@localhost:~$ kill -1 1318
Проверим если процесс остановился:
user@localhost:~$ ps aux | grep ping
root 1318 0.0 0.0 4544 920 pts/0 S+ 05:56 0:00 ping
ya.ru
Процесс продолжает выполняться. Отправим ему сигнал KILL:
user@localhost:~$ kill -9 1318
user@localhost:~$ ps aux | grep ping
root 1326 0.0 0.0 4356 748 pts/1 S+ 05:59 0:00 grep
ping
Процесс “убит”. Посмотрим в консоли, где выполнялся ping:
user@localhost:~$ nohup ping ya.ru
nohup: ignoring input and appending output to `nohup.out'
Killed
Стоит отметить особенности работы процессов, запущенных с помощью команды nohup. Все
выводимые данные отправляются не на стандартный вывод (stdout или stderr), а записываются в
файл nohup.out, который создаётся в том каталоге, в котором находился пользователь,
запустивший программу. В случае, если в этом каталоге создать файл невозможно – он будет
создан в домашнем каталоге пользователя. Если не будет и такой возможности – команда
выполнена не будет. Например – если у пользователя, запускающего nohup нет прав записи в
файл:
user@localhost:~$ ls -l | grep nohup
-r--------. 1 user user 151393 May 18 06:46 nohup.out
user@localhost:~$ nohup ping ya.ru
nohup: failed to open `nohup.out': Permission denied
nohup: failed to open `/home/user/nohup.out': Permission denied
Кроме того, nohup продолжит выполнять программу даже после выхода пользователя из системы,
т.е. – проигнорирует сигнал TERM, который передаст ему командный интерпретатор при
83
завершении сессии пользователя. Однако, это не значит что процесс будет выполняться в фоном
режиме – для этого его необходимо запускать со знаком &:
user@localhost:~$ nohup ping ya.ru &
Посмотрим, как этой действует. Допустим, у нас открыты два терминала:
user@localhost:~$ w
06:11:33 up 36 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 192.168.1.100 05:35 0.00s 0.34s 0.26s sshd:
user [priv]
user pts/1 192.168.1.100 06:11 3.00s 0.04s 0.04s -bash
На одном из них мы запустим тот же ping с помощью nohup:
user@localhost:~$ nohup ping ya.ru
nohup: ignoring input and appending output to `nohup.out'
Вернёмся в первое окно:
user@localhost:~$ w
06:13:00 up 38 min, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/0 192.168.1.100 05:35 0.00s 0.27s 0.26s sshd:
user [priv]
user pts/1 192.168.1.100 06:11 6.00s 0.08s 0.03s ping
ya.ru
Как видно – пользователь user на терминале pts/1 выполняет команду ping.
Теперь – проверим его наличие в процессах:
user@localhost:~$ ps aux | grep ping
user 1408 0.0 0.0 4544 916 pts/1 S+ 06:12 0:00 ping
ya.ru
Теперь – попросту завершим работу второго терминала:
user@localhost:~$ skill -9 -v pts/1
pts/1 user 1373 bash
И проверим состояние процесса ping, запущенного user:
user@localhost:~$ ps aux | grep ping
user 1408 0.0 0.0 4544 916 ? S 06:12 0:00 ping
ya.ru
Процесс продолжает выполняться, но уже без указания управляющего терминала.
Еще один пример использования nohup Linux и выполнение длительных операции. Рассмотрим
ситуацию при которой необходимо скачать очень объемный файл при помощи wget и
использование nohup Linux утилиты, позволяющей продолжать процесс в фоне.
Процесс может длиться несколько часов.
nohup wget http://example.com/some-large-package.iso &
Подключившись из другой сессии можно убедиться в том, что процесс все еще выполняется
ps aux | grep wget
Контроля над процессом, тем не менее, нет. Можно только дождаться его завершения или
насильственно прекратить его выполнение:
killall wget
Значительно шире, чем nohup применяется утилита screen. Она позволяет в любое время
подключиться к сессии после выхода из нее и продолжить работу. При этом можно использовать
ту же машину или другую.
Screen очень полезная команда, которая предлагает возможность использовать несколько окон
84
оболочки (сеансов) от одного сеанса SSH в Linux. Когда сеанс отсоединен или есть нарушения сети,
процесс, который запускается в сеансе экрана по-прежнему будет работать, и вы можете повторно
подключиться к сессии экрана в любое время. Это также очень удобно, если вы хотите запустить
длительный процесс постоянно или подключиться к оболочке сеансов из нескольких мест.
Экран поставляется с предустановленной на некоторых из популярных дистрибутивов. Вы можете
проверить установлен он или нет на сервере с помощью следующей команды
user@localhost:~$ screen -v
Screen version 4.00.03 (FAU)
Если у вас нет экрана к VPS, вы можете легко установить его с помощью менеджера пакетов,
предоставляемой с операционной системой.
CentOS/RedHat/Fedora
user@localhost:~$ yum -y install screen
Ubuntu/Debian
user@localhost:~$ sudo apt-get -y install screen
Как начать сеанс экрана
Вы можете начать экран, набрав слово “screen” в командной строке и новый сеанс экран будет
запущен, который выглядит так же, как в командной строке
user@localhost:~$ screen
Это хорошая практика, чтобы начать занятия экрана с описательными именами, так что вы можете
легко вспомнить, какой процесс выполняется в сеансе. Чтобы создать новый сеанс с именем
сеанса выполните следующую команду
user@localhost:~$ screen -S name
и заменить ‘name‘ с понятным названием для вашей сессии.
Отсоединить экран от сессии
Для того, чтобы отключиться от текущего сеанса экрана вы можете нажать клавишу ‘Ctrl-A‘ и ‘ D‘ на
клавиатуре. Все сеансы экрана будут по- прежнему активны, и вы можете повторно
подсоединиться к ним в любое время позже.
Заново на экран сессии
Если вы оторваны от сеанса или ваше соединение прерывается по какой-то причине, вы можете
легко повторно подсоединиться, выполнив следующую команду:
user@localhost:~$ screen -r
Если у вас есть несколько сеансов экрана вы можете перечислить их с ‘ls‘
user@localhost:~$ screen -ls
There are screens on:
7880.session (Detached)
7934.session2 (Detached)
7907.session1 (Detached)
3 Sockets in /var/run/screen/S-root.
В нашем примере, у нас есть три активных сеансов экрана. Итак, если вы хотите восстановить
сеанс “session2”, вы можете выполнить
user@localhost:~$ screen -r 7934
или вы можете использовать имя экрана
user@localhost:~$ screen -r -S session2
Завершить сеанс экрана
Есть несколько способов, чтобы завершить сеанс экрана. Вы можете сделать это, нажав Ctrl+D на
клавиатуре или с помощью команды командной строки ‘exit‘.
Для того чтобы увидеть все полезные свойства экрана команды вы можете проверить man page
85
screen.
user@localhost:~$ man screen
NAME
screen - screen manager with VT100/ANSI terminal emulation
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
...
86
Опция -n ожидает получить числовое значение приоритета, а в качестве параметра необходимо
указать имя запускаемой программы и список её атрибутов. В общем виде запуск команды можно
представить как «nice -n -10 имя_программы [-опции] [параметры]».
Пример запуска архивирования пользовательской директории
user@localhost:~$ nice -n 20 tar -czf ~/archive ~/some-dir &
[2] 10077
user@localhost:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 10077 935 2 99 19 - 7708 pipe_w pts/2 00:00:00 tar
0 R 1000 10078 10077 48 99 19 - 1160 - pts/2 00:00:02 gzip
...
87
что может повлечь неисправимые последствия в случае ошибочных действий.
Заметка: Существуют дистрибутивы, в которых учетная запись администратора отсутствует, а
получение административных прав происходит на короткие промежутки времени с помощью
специальных команд. Например, такой подход используется в дистрибутиве Ubuntu.
88
user@localhost:~$ sudo useradd -p password another-user
Пароль: *****
При повторном использовании пароль не требуется
sudo deluser another-user
Конфигурацию может редактировать только суперпользователь. Таким образом, мы заранее
сообщаем системе о допустимости тех или иных действий, и требуем лишь подтверждения пароля
обычного пользователя. С подробными правилами составления этого файла вы можете
ознакомиться на страницах справки «man sudoers». Дадим краткий разбор конфигурации,
представленной ниже.
Defaults env_reset
Defaults mail_badpass
Defaults
secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/snap/bin"
%admin ALL=(ALL) ALL
Описание настроек:
Defaults env_reset — после смены пользователя возвращает переменные окружения к
исходным значениям.
Defaults mail_badpass — при неудачном входе в систему администратору отправляется
предупреждение.
Defaults secure_path — задает значение переменной окружения PATH для выполнения
sudo.
%admin ALL=(ALL) ALL — наличие знака процента обозначает, что правило действует для
группы с именем admin, иначе применилось бы к пользователю с аналогичным именем. Первый
ALL обозначает любое имя хоста, в противном случае необходимо указать конкретное имя.
Последний ALL сообщает о возможности выполнения любой команды. Вы можете ограничить
набор команд, указав их имена через запятую.
28 Демоны в Linux
89
Краткий список возможных сервисов:
Имя Описание
dhclient DHCP-клиент
Заметка: Отличительной особенностью демонов является то, что при запуске они не связываются с
конкретным терминалом, не блокируют его и не перестают выполнять свою логику после закрытия
консоли.
Просмотр запущенных сервисов
Разделение терминов демон и сервис имеет под собой практический смысл. Все демоны,
размещающие свои инициализационные скрипты в директории /etc/init.d, предоставляют
пользователю интерфейс управления своим состоянием. Именно такие программы принято
называть сервисами, так как взаимодействие с ними происходит через системную команду
/sbin/service или просто service (в зависимости от дистрибутива).
Для вывода списка всех запущенных сервисов и просмотра их статусов нужно использовать
команду service с опцией --status-all.
user@localhost:~$ service --status-all
[ + ] acpid
[ - ] alsa-utils
[ - ] anacron
[ - ] apparmor
[ + ] apport
[ + ] avahi-daemon
[ + ] binfmt-support
[ + ] bluetooth
[ - ] bootmisc.sh
[ - ] brltty
[ - ] cgroupfs-mount
[ - ] checkfs.sh
[ - ] checkroot-bootclean.sh
[ - ] checkroot.sh
…
90
29 Запуск и остановка сервиса в Linux
91
#применяется в Systemd (дистрибутив Fedora)
92
установлена с помощью менеджера пакетов или скомпилирована. Общий вид вызова нужных
команд представлен в примере, приведенном ниже.
user@localhost:~$ systemctl enable имя_сервиса.service
#стандартный механизм systemd
user@localhost:~$ update.rc имя_сервиса defaults
#используется в Init-V Debian/Ubuntu
user@localhost:~$ chkconfig --add имя_сервиса
#особый способ Init-V для Read Hat
93
/etc/cron.daily — запуск каждый день.
/etc/cron.weekly — запуск каждую неделю.
/etc/cron.monthly — запуск каждый месяц.
Основной файл конфигурации cron, /etc/crontab, выглядит примерно так:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-
parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-
parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-
parts --report /etc/cron.monthly )
#
Вы можете самостоятельно добавить необходимый скрипт в одну из перечисленных папок. Таким
образом, они попадут под контроль планировщика задач Linux.
Заметка: Изменять конфигурационный файл /etc/crontab крайне не желательно. Если вам
необходимо настроить более гибкое выполнение задач, создайте собственный конфигурационный
файл для конкретного пользователя.
94
3. День — указание дня внутри месяца. Число от 1 до 31.
4. Месяц — порядковый номер месяца. От 1 до 12.
5. День_недели — Указание дня недели. От 0 до 7. При этом число 0 и 7 соответствует
воскресенью.
6. Имя_пользователя — системное имя пользователя, от которого будет выполнена команда.
7. Команда — полная запись консольной команды со всеми опциями и параметрами.
Если вы не хотите указывать конкретное значение для минуты, часа или любого другого
временного отрезка, поставьте знак «*». Он будет соответствовать любому значению. После
сохранения настроек они будут добавлены в директорию
/var/spool/cron/crontabs/имя_пользователя.
Примеры настройки резервного копирования папки пользователя
12 */2 * * * user_name tar czf /home/user_name /backups #каждую 12 минуту четного часа
30 14 * * 7 user_name tar czf /home/user_name /backups #каждое воскресенье в 14:30
0 0 1 1 * user_name tar czf /home/user_name /backups #каждый новый год
Заметка: Обратите внимание. Путь до исполняемого файла в команде должен быть абсолютным,
т.е. начиная от корня файловой системы.
95
-q, --quiet - минимальная детализация отображаемой информации DMI
-s, --string KEYWORD - отображать только данные DMI, соответствующие введенному
ключевому слову. Перечень допустимых ключевых слов можно получить введя dmidecode
-s
-t, --type TYPE - отображать только данные указанных типов. Перечень типов можно
получить по команде dmidecode -t -u, --dump - не расшифровывать получаемые данные.
Отображаются только заголовки записей и шестнадцатеричные значения полей.
--dump-bin FILE - запись дампа данных DMI в файл.
--from-dump FILE - считывание и обработка данных из ранее сохраненного дампа данных
DMI.
-V, --version - отобразить версию программы и завершиться.
При запуске dmidecode без параметров, отображается версия программы, общая информация
базы DMI, и расшифрованное содержимое отдельных записей.
Пример общей информации:
# dmidecode 2.12
SMBIOS 2.4 present.
364 structures occupying 17092 bytes.
Table at 0x000E0010.
Отображается версия программы, версия SMBIOS, количество записей и объем данных DMI, а
также начальный адрес структуры DMI (0x000E0010 ) .
Долее отображается расшифрованная информация отдельных записей :
Handle 0x0001, DMI type 38, 20 bytes
IPMI Device Information
...
Handle 0x0002, DMI type 1, 27 bytes
System Information
...
Handle 0x0003, DMI type 2, 16 bytes
Base Board Information
...
Handle 0x0004, DMI type 3, 22 bytes
Chassis Information
...
96
слово.
Допустимые ключевые слова для типов данных, задаваемых параметром -t :
bios - сведения о BIOS
system - сведения о переключателях системной платы.
baseboard - сведения о материнской плате.
chassis - сведения о переключателях и датчиках шасси.
processor - сведения о центральном процессоре ( о процессорах для многопроцессорных
систем ) .
memory - сведения об оперативной памяти.
cache - сведения о кэш-памяти.
connector - сведения о разъемах контроллеров периферийных устройств.
slot - сведения о разъемах PCI/PCI-Express
Ниже приведены примеры выполнения команды dmidecode для разных типов данных.
Для отображения данных DMI о процессорах
$ dmidecode -t processor
dmidecode 2.10
SMBIOS 2.5 present.
Handle 0x0038, DMI type 4, 40 bytes
Processor Information
...
Для отображения данных, относящиеся к типу "connector", т.е информацию о разъемах
периферийного оборудования.
$ dmidecode -t connector
Handle 0x0009, DMI type 8, 9 bytes
Port Connector Information
...
Handle 0x000A, DMI type 8, 9 bytes
Port Connector Information
...
При использовании числовых значений дескрипторов , тип данных DMI можно указывать в
соответствии с таблицей :
97
Type Description Type Description
0 BIOS Information 23 System Reset
1 System Information 24 Hardware Security
2 Baseboard (or Module) Information 25 System Power Controls
3 System Enclosure or Chassis 26 Voltage Probe
4 Processor Information 27 Cooling Device
5 Memory Controller Information (Obsolete) 28 Temperature Probe
6 Memory Module Information (Obsolete) 29 Electrical Current Probe
7 Cache Information 30 Out-of-Band Remote Access
8 Port Connector Information 31 Boot Integrity Services (BIS) Entry Point
9 System Slots 32 System Boot Information
10 On Board Devices Information 33 64-Bit Memory Error Information
11 OEM Strings 34 Management Device
12 System Configuration Options 35 Management Device Component
13 BIOS Language Information 36 Management Device Threshold Data
14 Group Associations 37 Memory Channel
15 System Event Log 38 IPMI Device Information
16 Physical Memory Array 39 System Power Supply
17 Memory Device 40 Additional Information
18 32-Bit Memory Error Information 41 Onboard Devices Extended Information
19 Memory Array Mapped Address 42 Management Controller Host Interface
20 Memory Device Mapped Address 126 Inactive
21 Built-in Pointing Device 127 End-of-Table
22 Portable Battery 128-255 Available for system- and OEM- specific information
98
-format - формат выводимых данных.
-html - вывести информацию об оборудовании компьютера в формате HTML
-xml - вывести информацию об оборудовании компьютера в формате XML
-short - отобразить список устройств в кратком формате, без описаний.
-businfo - отобразить информацию о шинах .
Примеры использования:
lshw - отобразить полную информацию об оборудовании в текстовом формате.
lshw –xml -отобразить информацию в XML-формате.
lshw –html > hardware.html - вывести информацию об оборудовании в формате HTML в
файл hardware.html
Кроме того, существуют специальные команды для отображения информации об отдельных типах
устройств:
lscpu - отобразить информацию о процессорах.
lshal - отобразить информацию об оборудовании в виде дампа глобального списка
устройств ( Global Device List ).
lsusb - отобразить информацию о USB-устройствах.
lsscsi - отобразить информацию об устройствах SCSI.
lspci - отобразить информацию об устройствах на шинах PCI / PCI - Express.
lspcmcia - отобразить информацию об устройствах на шине PCMCIA.
lsblk - отобразить информацию о блочных устройствах (гибких и жестких дисках,
разделах и точках монтирования).
Информация, получаемая с помощью вышеперечисленных команд, носит более общий характер,
по сравнению с той, что может быть получена с помощью утилиты dmidecode.
99
Интерфейс системных вызовов.
Управление процессами.
Управление памятью.
Виртуальная файловая система.
Сетевой стек.
Драйверы устройств.
Архитектурно-зависимый код.
Менеджеры пакетов.
Преимущества менеджеров пакетов и разнообразие их форматов.
Работа с RPM-пакетами, основные положения и учет RPM-пакетов.
Установка и удаление RPM-пакетов.
Менеджер управления пакетами Yum.
Преимущества Yum, главная конфигурация и настройка репозиториев.
Работа с DEB-пакетами, основные положения и учет DEB-пакетов.
Установка и удаление DEB-пакетов.
Менеджер пакетов АРТ.
Преимущества APT и основная конфигурация.
Работа с терминалами Linux.
Понятие командной оболочки, основные возможности Bash.
Командные оболочки и пользователи.
Выполнение команд с параметрами.
Использование опций консольных команд.
Помощь по командам Linux.
Причины использования справки.
Использование опции Help и справочных страниц Man.
Основные горячие клавиши терминала в Linux.
История команд, поиск и автодополнение.
Просмотр файлов в терминале Linux.
Команды cat, tail и Head в Linux.
Пейджеры more и less.
Текстовый редактор Nano.
Команда locate в Linux.
Потоки ввода-вывода в Linux.
Перенаправление потоков ввода-вывода.
Для чего нужны программные каналы и их применение.
Работа с файлами и каталогами.
Создание, копирование и удаление файлов в Linux.
Поиск файлов в Linux.
Права доступа файлов и папок в Linux.
Специальные биты доступа в Linux.
100
Создание и распаковка архивов в Linux.
Просмотр содержимого архива без распаковки.
Иерархия процессов, просмотр списка процессов и их статусы процессов.
Сигналы и способы завершения процесса.
Назначение приоритета новому процессу.
Управление ранее запущенным процессом.
Запуск процесса от имени другого пользователя.
Что такое демоны и сервисы.
Запуск и остановка сервиса в Linux.
Перезапуск и автозапуск сервисов.
Добавление и удаление сервиса в автозапуск.
Планировщик задач в Linux.
Область применения Cron.
Пользовательская настройка Cron.
101