Red Hat RHCSA ™ 8 Cert Guide EX200 9780135938133

3,334 396 9MB

Russian Pages [561]

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Red Hat RHCSA ™ 8 Cert Guide EX200
 9780135938133

Citation preview

Вступление от переводчика leshi: на мой взгляд, автор, не вдаваясь в особые подробности, даёт добротные, общие начальные знания по Red Hat 8. Перевод не профессиональный, делал для себя. Буду рад, если полученный текст принесёт пользу для изучения темы. Номера страниц кликабельны.

Red Hat RHCSA ™ 8 Cert Guide EX200 Сандер ван Вугт

Краткое содержание Введение 5 Часть I. Выполнение основных задач управления системой ГЛАВА 1 Установка Red Hat Enterprise Linux 14 ГЛАВА 2 Использование основных инструментов 33 ГЛАВА 3 Основные инструменты управления файлами 53 ГЛАВА 4 Работа с текстовыми файлами 74 ГЛАВА 5 Подключение к Red Hat Enterprise Linux 8 88 ГЛАВА 6 Управление пользователями и группами 105 ГЛАВА 7 Управление разрешениями 122 ГЛАВА 8 Настройка сети 142 Часть II: Операционные системы ГЛАВА 9 Управление программным обеспечением 168 ГЛАВА 10 Управление процессами 200 ГЛАВА 11 Работа с Systemd 217 ГЛАВА 12 Планирование задач 231 ГЛАВА 13 Настройка ведения журнала 242 ГЛАВА 14 Управление хранилищем 262 ГЛАВА 15 Управление расширенным хранилищем 289

1

Часть III: Выполнение расширенных задач системного администрирования ГЛАВА 16 Базовое управление ядром 312 ГЛАВА 17 Управление и понимание процедуры загрузки 326 ГЛАВА 18 Основные навыки поиска и устранения неисправностей 339 ГЛАВА 19 Введение в создание сценариев оболочки Bash 357 Часть IV: Управление сетевыми службами ГЛАВА 20 Настройка SSH 373 ГЛАВА 21 Управление HTTP-сервисами Apache 384 ГЛАВА 22 Управление SELinux 396 ГЛАВА 23 Настройка межсетевого экрана 417 ГЛАВА 24 Доступ к сетевому хранилищу 428 ГЛАВА 25 Настройка служб времени 442 ГЛАВА 26 Заключительная подготовка 454 ГЛАВА 27 Предварительный теоретический экзамен 458 Часть V: Практические экзамены RHCSA RHEL 8 Практический экзамен RHCSA A 460 Практический экзамен RHCSA B 462 ПРИЛОЖЕНИЕ А Ответы на вопрос «Знаю ли я это уже?» Тесты и вопросы для повторения 464 Глоссарий 489 Сетевые элементы: Практический экзамен C RHCSA 512 Практический экзамен D RHCSA 514 ПРИЛОЖЕНИЕ B Таблицы памяти 516 ПРИЛОЖЕНИЕ C Таблицы памяти Ключи ответов 539

2

Об авторе Сандер ван Вугт - независимый тренер, автор и консультант по Linux, живущий в Нидерландах. Сандер является автором самой продаваемой системы сертификации Red Hat. Полный видеокурс администратора (RHCSA) и сертифицированный инженер Red Hat (RHCE). Он также написал множество книг на различные связанные с Linux темы и множество статей для публикаций по Linux по всему миру. Сандер преподает в классаъ Red Hat, Linux + и LFCS с 1994 года. Как консультант, он специализируется на решениях Linux высокой доступности, производительности и оптимизации. Вы можете найти более подробную информацию о Сандере на его веб-сайте по адресу http://www.sandervanvugt.com. Для получения дополнительной информации о сертификации RHCSA и дополнительных ресурсах посетите страницу сертификации автора Red Hat по адресу http://www.rhatcert.com/. Посвящение Эта книга посвящена моей семье: Флоренс, Франку и Алексу. Вместе мы сделали великие достижения за последний год. Благодарности Эта книга не могла бы быть написана без помощи всех людей, которые внесли свой вклад к её созданию. Я хочу поблагодарить сотрудников Дениз Линкольн и Элли Брю. Мы много работали вместе на протяжении многих лет, и эта книга - еще одна веха на нашем пути к успеху!

Мы хотим услышать от тебя! Как читатель этой книги вы наш самый важный критик и комментатор. Мы ценим ваше мнение и хотим знать, что мы делаем правильно, что мы могли бы сделать лучше, в каких областях вы хотели бы, чтобы мы публиковались, и любые другие мудрые слова, которые вы готовы в нашем пути. Обратите внимание, что мы не можем помочь вам с техническими проблемами, связанными с темой этой книги. При написании не забудьте указать название и автора этой книги, а также свои имя и адрес электронной почты. Мы внимательно рассмотрим ваши комментарии и поделимся ими с автором и редакторами, работавшими над книгой. Email: [email protected]

Читательские услуги Зарегистрируйте свою копию Red Hat RHCSA 8 Cert Guide на сайте www.pearsonitcertification.com для удобного доступа к загрузкам, обновлениям и исправлениям по мере их появления. Чтобы начать процесс регистрации, перейдите на сайт www.pearsonitcertification.com/ зарегистрируйтесь и войдите в систему или создайте учетную запись *. Введите ISBN продукта 9780135938133 и нажмите "Отправить". Когда процесс будет завершен, вы найдете любой доступный бонус содержащийся в Зарегистрированных продуктах. 3

* Обязательно установите флажок, что вы хотели бы услышать от нас, чтобы получать эксклюзивные скидки на будущие выпуски этого продукта.

4

Введение Добро пожаловать в Red Hat RHCSA 8 Cert Guide. Экзамены Red Hat - одни из сложных в бизнесе, и это руководство станет важным инструментом, который поможет вам подготовиться сдать экзамен на сертифицированного системного администратора Red Hat (RHCSA). Как инструктор с более чем 20-летним опытом преподавания Red Hat Enterprise Linux, я много раз сдавал экзамен RHCSA (и экзамен RHCE), поэтому я могу быть в курсе хода экзамена, и знаю, что появилось нового или что изменилось в экзаменах. Я делюсь с вами своими знаниями в этом всеобъемлющем руководстве по сертификации, чтобы вы получили руководство, необходимое для сдачи экзамена RHCSA. Экзамен RHCSA недавно был обновлен для Red Hat Enterprise Linux 8. Эта книга содержит все, что вам нужно знать, чтобы сдать экзамен RHCSA. Как вы увидите, это Руководство охватывает все задачи экзамена и состоит из 27 глав, более чем 80 упражнений, 4 практических экзамена, обширный глоссарий и часы видео-обучения. Этот Cert Guide - лучший ресурс, который вы можете получить для подготовки и сдачи экзамена RHCSA.

Цели и методы Чтобы изучить темы, описанные в этой книге, рекомендуется создать свою тестовую среду. Вы не станете специалистом RHCSA без постоянной практики. В упражнениях, включенных в каждую главу книги, вы найдете все примеры, которые вам нужны, чтобы понять, что находится на экзамене и досконально изучить материал, необходимый для его прохождения. Упражнения в главах дают пошаговые процедуры, которым вы можете следовать, чтобы найти рабочие решения, которые даст вам возможность получить реальный опыт до сдачи экзамена. Каждая глава также включает в себя одну или несколько лабораторных работ в конце главы. Эти лаборатории задают вопросы, которые похожи на вопросы, которые могут возникнуть на экзамене. Решения не предусмотрены для э тих лабораторных работ, и это сделано специально, потому что вам необходимо тренироваться, проверяя свою работу перед экзаменом. На экзамене вы тоже должны быть в состоянии убедиться, что решение работает должным образом. Не забудьте также посетить сопутствующий веб-сайт https://www.rhatcert.com/ этой книги, на котором представлены дополнительные практические экзамены, приложения и видеотренинги - все ключевые компоненты обучения для сдачи экзамена. Чтобы максимально упростить работу с заданиями в этой книге, полная лабораторная среда - это сделать свое. Эта книга содержит всю необходимую информацию для подготовки к сдаче экзаменов. Но если вы хотите получить больше информации и практического опыта у меня есть несколько обучающих видео, которые включают в себя следящие материалы: ▪ ▪

Полный видеокурс для сертифицированного системного администратора Red Hat (RHCSA), 3-е издание. Обновление до Red Hat Enterprise Linux (RHEL) 8 LiveLessons

Помимо этих продуктов, вы также можете оценить мой сайт http://rhatcert.com. Через этот веб-сайт я предоставляю обновленную информацию обо всем, что полезно для кандидатов на экзамены. Я рекомендую вам зарегистрироваться на сайте, чтобы я мог отправлять вам сообщения о важные обновления, которые я сделал доступными. Кроме того, вы будете время от времени 5

получать обновления видео на моем канале на YouTube, rhatcert Я надеюсь, что эти ресурсы предоставят вам все необходимое для сдачи экзамена на сертифицированного системного администратора Red Hat. Удачи!

Кому следует прочитать эту книгу? Эта книга написана как руководство по подготовке к экзамену RHCSA. Это означает, что вам следует прочитать её, если вы хотите увеличить свои шансы при сдаче экзамена RHCSA. Второе назначение этой книги - справочное руководство для системных администраторов Red Hat. Как администратор, вам понравятся объяснения и процедуры, описывающие, как добиться успеха в Red Hat Enterprise Linux. Итак, почему вам стоит подумать о сдаче экзамена RHCSA? Этот вопрос прост, Ответ: Linux стала очень важной операционной системой, и квалифицированные специалисты востребованы во всем мире. Если вы хотите работать профессионалом Linux и докажите свои навыки, сертификат RHCSA действительно помогает и является одним из самых востребованные сертификаты в сфере IT. Наличие этого сертификата значительно увеличивает ваши шансы стать профессионалом Linux.

Как организована эта книга Эта книга представляет собой справочное руководство, которое поможет вам подготовиться к экзамену RHCSA. Если вы новичок в этих темах, вы можете просто прочитать их от корки до корки. Вы также можете прочтите отдельные главы, которые вам понадобятся, чтобы отточить свои навыки в этой книге. Каждая глава начинается с вопроса «Знаю ли я это уже?» викторина, которая задает вопросы около десяти тем, затронутых в этой главе, и предоставляет простой инструмент для проверки знакомы ли вы с темами, затронутыми в этой главе. В книге также представлены четыре практических экзамена RHCSA; это важная часть к подготовке к настоящему экзамену. Возможно, вы сможете дать правильный ответ на вопросы главы с множественным выбором, но это не значит, что вы можете создавать конфигурации при сдаче экзамена. В сопутствующие файлы входят два дополнительные практические экзамена, два часа видео от сертифицированного системного администратора Red Hat (RHCSA) Полный видеокурс, 3-е издание и дополнительные приложения. Ниже описаны темы, которые рассматриваются в главах:

Часть I: Выполнение базовых задач управления системой ▪

▪ ▪ ▪

Глава 1: Установка Red Hat Enterprise Linux: В этой главе вы узнаете, как установить Red Hat Enterprise Linux Server (RHEL). В ней также показано, как создать среду, которая может быть использована для выполнения лабораторных работ и других упражнений в этой книге. Глава 2: Использование основных инструментов. В этой главе рассматриваются некоторые основные возможности Linux, включая работу с оболочкой и командами Linux. Эта глава особенно важна, если вы новичок в работе с Linux. Глава 3: Основные инструменты управления файлами. В этой главе вы узнаете, как работать с инструментами для управления файловой системой Linux. Это важный навык, потому что все в Linux очень ориентировано на файловую систему. Глава 4: Работа с текстовыми файлами: В этой главе вы узнаете, как работать с текстовыми файлами. В этой главе рассказывается, как создавать текстовые файлы, а также как, искать конкретное содержимое в разных текстовых файлах. 6





▪ ▪

Глава 5: Подключение к Red Hat Enterprise Linux 8: Эта глава описывает различные методы, которые можно использовать для подключения к RHEL 8. В ней объясняется как локальный, так и удаленный вход, а также различные типы терминалов, используемые для этой цели. Глава 6. Управление пользователями и группами. В Linux пользователи — это сущности, которые могут использоваться людьми или процессами, которым необходим доступ к определенным ресурсам. В этой главе объясняется, как создавать пользователей и упростить управление пользователями с помощью работы с группами. Глава 7. Управление разрешениями. В этой главе вы узнаете, как управлять разрешениями Linux с помощью разрешений на чтение, запись и выполнение, а также с помощью специальных разрешений и списков контроля доступа. Глава 8: Настройка сети: сервер бесполезен, если он не подключен к сети. В этой главе вы изучите основные навыки, необходимые для управления сетевыми подключениями.

Часть II: Операционные системы ▪ ▪ ▪ ▪ ▪ ▪



Глава 9: Управление программным обеспечением: Red Hat предлагает продвинутую систему для управления программными пакетами. В этой главе рассказывается, как это работает. Глава 10: Управление процессами. Как администратор, вы должны знать, как работать с различными задачами, которые могут выполняться в Linux. В этой главе показано, как это сделать, посылая сигналы процессам и изменяя приоритет процесса. Глава 11: Работа с Systemd: Systemd - стандартный менеджер служб и многое другое в RHEL 8. В этой главе вы узнаете, как управлять службами с помощью Systemd. Глава 12: Планирование задач. В этой главе вы узнаете, как запланировать выполнение задачи в наиболее подходящий для вас момент. Глава 13: Настройка ведения журнала. Как администратор, вы должны знать, что происходит на вашем сервере. Для этого используются службы rsyslogd и journald. В этой главе объясняется, как с ними работать. Глава 14: Управление хранилищем. Управление хранилищем - важный навык, которым должен овладеть администратор Linux. В этой главе объясняется, как жесткие диски могут быть организованы в разделы и как эти разделы могут быть смонтированы в файловой системе. Глава 15: Управление расширенным хранилищем: разделение дисков на разделы не очень гибкое. Если вам нужна оптимальная гибкость, вам потребуются логические тома LVM, которые используются по умолчанию при установке Red Hat Enterprise Linux. В этой главе показано, как создавать эти логические тома и управлять ими. Вы также узнаете, как работать с новыми технологиями хранения Stratis и VDO.

Часть III: Выполнение расширенных задач системного администрирования ▪ ▪





Глава 16. Базовое управление ядром: ядро является частью операционная система, которая заботится об оборудовании. В этой главе объясняется, как это работает и что администратор может сделать для анализа текущей конфигурации и управления аппаратными устройствами в случае, если автоматическая процедура не работает. Глава 17: Управление и понимание процедуры загрузки: много что происходит, когда загружается сервер Linux. В этой главе подробно описывается процедура загрузки и рассматриваются важные аспекты процедуры загрузки, включая загрузчик GRUB 2 и диспетчер служб Systemd. Глава 18: Основные навыки устранения неполадок: иногда неправильная конфигурация может привести к тому, что ваш сервер больше не загружается должным образом. В этой 7



главе рассказывается о некоторых методах, которые можно применить, когда обычный запуск сервера невозможен. Глава 19: Введение в создание сценариев оболочки Bash. Некоторые задачи являются сложными и требуют повторного выполнения. Такие задачи - идеальные кандидаты для оптимизации с помощью сценариев оболочки. В этой главе вы узнаете, как использовать условные структуры в сценариях оболочки для эффективной автоматизации задач.

Часть IV: Управление сетевыми службами ▪ ▪ ▪





▪ ▪ ▪

Глава 20. Настройка SSH: Secure Shell (SSH) - одна из основных служб, которая включена в RHEL 8 по умолчанию. Использование SSH позволяет удаленно подключаться к серверу. В этой главе вы узнаете, как настроить SSH-сервер. Глава 21: Управление HTTP-службами Apache: Apache - наиболее часто используемая служба в Linux. В этой главе показано, как настроить Apache для виртуальных хостов Apache. Глава 22: Управление SELinux. Многие администраторы Linux знают только, как его выключить, потому что SELinux сложно управлять, и часто именно поэтому службы недоступны. В этой главе вы узнаете, как работает SELinux и что нужно сделать, чтобы настроить его, чтобы ваши службы продолжали работать и были намного лучше защищены от возможных злоупотреблений. Глава 23. Настройка брандмауэра. Помимо SELinux, в RHEL 8 есть брандмауэр как одна из основных мер безопасности, которая реализуется службой firewalld. В этой главе вы узнаете, как организована эта служба и что вы можете сделать, чтобы заблокировать или разрешить доступ к определенным службам. Глава 24: Доступ к сетевому хранилищу. При работе в серверной среде управление удаленными подключёнными дисками является важным навыком. Удаленное монтирование позволяет клиентскому компьютеру получить доступ к файловой системе, предлагаемой через удаленный сервер. Удаленные подключение к дискам могут быть выполнены с помощью постоянного монтирования в /etc/fstab или с помощью службы automount. В этой главе рассказывается, как настроить любой из них, и показано, как настроить FTP-сервер. Глава 25: Настройка служб времени. Для многих служб, таких как базы данных и Kerberos, важно иметь правильное время. Вот почему вы как администратор должны уметь управлять временем в Linux. В этой главе вы узнаете, как это сделать. Глава 26: Заключительная подготовка: В этой главе вы получите несколько заданий для подготовки к выпускному экзамену. Он содержит множество советов, которые помогут вам максимально увеличить ваши шансы на сдачу экзамена RHCSA. Глава 27: Теоретический предварительный экзамен. В этой главе представлен теоретический предварительный оценочный экзамен RHCSA, который поможет вам оценить свои навыки и определить наилучший путь для подготовки к нему.

Часть V: Практические экзамены RHCSA RHEL 8 В этой части представлены два практических экзамена RHCSA, чтобы вы могли дополнительно проверить свои знания и навыки перед сдачей экзаменов. Два дополнительных экзамена находятся на сопутствующем веб-сайте. Как пользоваться этой книгой Чтобы помочь вам распределить учебное время в изучение книги, определю основные моменты в главах, которые помогут вам с максимальной пользой использовать свое время:

8

▪ ▪ ▪

«Знаю ли я это уже?» Опрос: каждая глава начинается с проверочного опроса, который помогает определить количество времени, которое вам нужно потратить на изучение этой главы, и конкретные темы, на которых вам нужно сосредоточиться. Основные темы: Это основные разделы каждой главы. Они объясняют протоколы, концепции и конфигурацию тем в этой главе. Задачи подготовки к экзамену: После раздела «Основные темы» каждой главы в разделе «Задачи подготовки к экзамену» перечислен ряд учебных заданий, которые вы должны выполнить. Каждая глава включает в себя упражнения, которые имеют наибольший смысл для изучения тем в этой главе. Данное действие включают следующее: ✓ Просмотрите все ключевые темы: значок ключевой темы отображается рядом с наиболее важные пункты в разделе «Основные темы» главы. В упражнении «Обзор всех ключевых тем» перечислены ключевые темы главы и соответствующие им номера страниц. Хотя на экзамене может быть содержание всей главы, вы обязательно должны знать информацию, указанную в каждой ключевой теме. ✓ Заполненные таблицы и списки по памяти: чтобы помочь вам запоминать и запоминать некоторые факты, многие из наиболее важных списков и таблиц из главы включены в документ на сопутствующем веб-сайте. Этот документ предлагает только частичную информацию, позволяющую вам заполнить таблицу или список. ✓ Определите ключевые термины. В этом разделе перечислены наиболее важные термины из главы с просьбой написать краткое определение и сравнить свои ответ в глоссарии в конце книги.

▪ ▪

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

Другие особенности В дополнение к особенностям каждой из основных глав, эта книга в целом содержит дополнительные учебные ресурсы на сопутствующем веб-сайте, в том числе следующие: ▪ Четыре практических экзамена: Red Hat RHCSA 8 Cert Guide включает четыре практических экзамена. Вы найдете два в книге и два дополнительных экзамена на сопутствующем веб-сайте; они представлены в виде PDF-файлов, чтобы вы могли дополнительно попрактиковаться в проверке своих навыков перед сдачей экзамена в испытательном центре. ▪ Более двух часов обучающего видео. Дополнительный веб-сайт содержит более двух часов инструкций из пользующегося спросом полного видеокурса для сертифицированных системных администраторов Red Hat (RHCSA), 3-е издание. Задача экзамена для сопоставления глав В таблице 1 подробно описаны все задачи экзамена RHCSA в этой книге, чтобы вам было легче составить успешный план сдачи экзамена. Далее - сопоставление глав. В таблице 1 подробно описаны все задачи экзамена RHCSA в этой книге, чтобы вам было легче составить успешный план сдачи экзамена. 9

Таблица 1 Обзор задач RHCSA

Задача

Название главы

Глава

Получите доступ к приглашению оболочки Использование и введите команды с правильным инструментов синтаксисом

основных 2

Использовать перенаправление вводавывода (>, >>, |, 2> и т. Д.)

основных 2

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

Используйте grep и регулярные выражения Работа с текстовыми файлами для анализировать текст

4

Доступ к удаленным системам с помощью SSH

Подключение к Enterprise Linux 8

Red

Hat 5

Авторизуйтесь и переключайте пользователей multiuser targets

Подключение к Enterprise Linux 8

Red

Hat 5

Архивировать, сжимать, распаковывать и распаковывать файлы с помощью tar, star, gzip, и bzip2

Основные инструменты 3 управления файлами

Создавать и редактировать текстовые файлы

Работа с текстовыми файлами

Создавать, удалять, копировать и перемещать файлы и каталоги

Основные инструменты 3 управления файлами

Создавайте жесткие и символьные ссылки

Основные инструменты 3 управления файлами

Список, установка и изменение стандартных разрешения ugo/rwx

Управление разрешениями

Найдите, прочтите и используйте систему документация, включая man, info, и файлы в /usr/share/doc

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

Загрузка, перезагрузка и нормальное выключение системы

Подключение к Enterprise Linux 8

Загрузите системы в разные цели (targets) вручную

Основные навыки устранения 18 неполадок

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

Основные навыки устранения 18 неполадок

Выявление процессов, интенсивно использующих процессор/память, и выполнить kill нужного процесса.

Управление процессами

10

Настроить планирование процессов

Управление процессами

10

10

4

7

основных 2

Red

Hat 5

Найдите и интерпретируйте лог файлы и журналы

Настройка ведения журнала

13

Сохранять системные журналы

Настройка ведения журнала

13

Запуск, остановка и проверка статуса сетевых сервисов

Настройка сети

8

Безопасная передача файлов между системами

Подключение к Enterprise Linux 8

Список, создание и удаление разделов на MBR и GPT диски

Управление хранилищем

Создание и удаление физических томов

Управление хранилищем

расширенным 15

Назначение физических томов группам томов

Управление хранилищем

расширенным 15

Создание и удаление логических томов

Управление хранилищем

расширенным 15

Настроить системы для монтирования файловых систем при загрузке по универсально уникальному ID (UUID) или метки (якрлыка)

Управление хранилищем

14

Добавить новые разделы и логические тома, а также раздела подкачки swop неразрушающим методом

Управление хранилищем

14

Создавать, монтировать, размонтировать и использовать файловые системы vfat, ext4 и xfs

Управление хранилищем

14

Смонтировать и размонтировать сетевую файловую систему, использующие NFS

Доступ к сетевому хранилищу

24

Расширение существующих логических томов

Управление хранилищем

Создать и настроить set-GID на каталоги для совместной работы

Управление разрешениями

Настройка сжатия диска

Управление хранилищем

расширенным 15

Управление многоуровневым хранилищем

Управление хранилищем

расширенным 15

Диагностика и исправление проблем с разрешениями файла

Управление разрешениями

7

Планирование задач с помощью at и cron.

Планирование задач

12

11

Red

Hat 5 14

расширенным 15 7

Запускать и останавливать службы, настраивать службы для автоматического запуска при загрузке

Работа с Systemd

Настройте системы для загрузки определенную цель(target) автоматически

Управление и понимание 17 процедуры загрузки

Настройка клиентов службы времени

Настройка служб времени

Установите и обновите пакеты программного обеспечения из Red Hat Network, удаленного репозитория, или из локальной файловой системы

Управление обеспечением

Работа с package module streams

Управление ПО

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

Управление и понимание 17 Процедура загрузки

Настройка адресов IPv4 и IPv6

Настройка сети

8

Настройка разрешения имени хоста

Настройка сети

8

Настройте сетевые службы для автоматического запуска при загрузке

Настройка сети

8

Ограничьте доступ к сети с помощью firewall-cmd/ firewall

Настройка межсетевого экрана

23

Создание, удаление и изменение аккаунта локального пользователя

Управление пользователями и 6 группами

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

Управление пользователями и 6 группами

Создание, удаление и изменение локальных групп и членство в группах

Управление пользователями и 6 группами

Настройка доступа суперпользователя

Управление пользователями и 6 группами

11

25

программным 9

9

Управление безопасностью Настройте параметры брандмауэра с помощью firewall-cmd/firewalld

Настройка межсетевого экрана

23

Настроить аутентификацию на основе ключей для SSH

Настройка SSH

20

Установите enforcing и permissive режимы для SELinux

Управление SELinux

22

Перечислить и идентифицировать файл SELinux и контекст процесса

Управление SELinux

22

12

Восстановить контексты файлов по умолчанию

Управление SELinux

22

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

Управление SELinux

22

Процедура диагностики и адресации SELinux нарушения политики

Управление SELinux

22

Где находятся файлы сопутствующего контента? Зарегистрируйте эту печатную версию Red Hat RHCSA 8 Cert Guide, чтобы получить доступ к бонусу контент онлайн. К этой печатной версии этого названия прилагается веб-сайт с сопутствующим контентом. У тебя есть онлайн-доступ к этим файлам, выполнив следующие действия: Перейдите на сайт www.pearsonITcertification.com/register и войдите в систему или создайте новый аккаунт. Введите ISBN: 9780135938133. Ответьте на контрольный вопрос как доказательство покупки. Щелкните ссылку «Доступ к бонусному контенту» в разделе «Зарегистрированные продукты» на странице своей учетной записи, чтобы перейти на страницу, где доступен загружаемый контент. Обратите внимание, что многие файлы сопутствующего контента могут быть очень большими, особенно файлы изображений и видео. Если вам не удается найти файлы для этого заголовка, следуя инструкциям, посетите www.pearsonITcertification.com/contact и выберите параметр «Проблемы сайта/Комментарии» (Problems/Comments). Представитель службы поддержки клиентов поможет вам. Эта книга также включает эксклюзивное предложение на 70% скидку на Полный видеокурс Red Hat Certified System Administrator (RHCSA), 3rd Edition.

13

Глава 1 В этой главе рассматриваются следующие темы: ▪ ▪

Подготовка к установке Red Hat Enterprise Linux Выполнение ручной установки В этой главе не рассматриваются задачи для экзамена.

Чтобы узнать, как работать с Red Hat Enterprise Linux в качестве администратора, вам сначала необходимо установить его. В этой главе вы узнаете, как создать среду, в которой вы сможете выполнять все упражнения из этой книги. На экзамене RHCSA вам не нужно устанавливать Red Hat Enterprise Linux. Однако, поскольку вам необходимо установить среду, позволяющую протестировать все элементы, обсуждаемые в этой книге, вы начнете с установки Red Hat Enterprise Linux в этой главе. В этой главе описаны все шаги, с которыми вы столкнетесь при установке RHEL 8. В ней также обсуждается, как настроить среду, в которой вы можете выполнять все упражнения из этой книги. Поскольку Red Hat Enterprise Linux содержит зарегистрированные торговые марки, я покажу установку на примере CentOS. Единственное, что отличается в CentOS, - это брэндинг, который в CentOS можно использовать бесплатно. Все программное обеспечение в CentOS такое же, как и в Red Hat Enterprise Linux. Поскольку CentOS не содержит зарегистрированных товарных знаков, это распространенное и популярное решение, которое позволяет людям научиться работать с Red Hat Enterprise Linux.

Установка Red Hat Enterprise Linux Опрос «Знаю ли я это уже?» Опрос «Знаю ли я это уже?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В Таблице 1-1 перечислены основные заголовки в этой главе и соответствующие им вопросы «Знаю ли я это уже?» опроса. Вы можете найти ответы в Приложении «A», «Ответы на тесты «Знаю ли я это уже?» И «Контрольные вопросы». Таблица 1-1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Основные темы раздела Подготовка к установке Red Hat Enterprise Linux

Вопросы 1, 2, 6

Выполнение ручной установки

3–5, 7–10

1. Вы хотите установить тестовую среду для практики к экзамену RHCSA. Каких из следующих дистрибутивов вам следует избегать? a. Самая последняя версия Fedora 14

b. CentOS 8 c. Scientific Linux 8 d. RHEL 8 2. Какие из следующих функций доступны как в RHEL, так и в CentOS? a. b. c. d.

Сертификация оборудования Сертификация программного обеспечения Право звонить в службу поддержки Программные обновления

3. Почему вам следует устанавливать сервер с графическим интерфейсом пользователя? a. Чтобы подготовиться к RHCSA, вам понадобятся некоторые инструменты, которые работают только в графическом интерфейсе. b. Минимальная установка не завершена. c. Если вы не установите графический интерфейс сразу, его будет сложно добавить позже. d. Сервер с графическим интерфейсом - это установка по умолчанию, рекомендованная Red Hat. 4. Какая файловая система по умолчанию используется в RHEL 8? a. b. c. d.

Ext3 Ext4 XFS Btrfs

5. Какая функция поддерживается в Ext4, но не в XFS? a. b. c. d.

Уменьшение файловой системы Снимки (Snapshots) Квота файловой системы Максимальный размер превышает 2 ТБ

6. Что из перечисленного не является причиной, по которой следует избегать Fedora? a. Fedora содержит функции, которые могут быть доступны или недоступны в будущих выпусков RHEL. b. Дистрибутивы Fedora находятся на более позднем этапе разработки, чем RHEL. c. Программное обеспечение Fedora нестабильно. d. Программное обеспечение в Fedora может отличаться от того же программного обеспечения в RHEL. 7. Какие из следующих параметров недоступны в сводке на экране по установке? a. b. c. d.

Время и дата Клавиатура Языковая поддержка Устранение неполадок существующей установки

8. После установки пароля root, который вы хотите использовать, вы не сможете продолжить установку. Какая наиболее вероятная причина? a. Пароль небезопасен, и незащищенные пароли не принимаются. 15

b. Пароль не соответствует требованиям политики паролей. c. Также вам необходимо создать пользователя. d. Если используется незащищенный пароль, необходимо дважды нажать Готово. 9. Какое утверждение о системном языке не соответствует действительности? a. b. c. d.

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

10. При установке сервера, использующего логические тома LVM, вы получите как минимум три тома хранения (разделы или LVM). Что из следующего не является частью из них? a. b. c. d.

/boot /var / Swap

Основные Темы Подготовка к установке Red Hat Enterprise Linux Перед тем, как вы начнете устанавливать Red Hat Enterprise Linux, будет полезно немного подготовиться, как описано в этом разделе. Сначала вы узнаете, что такое Red Hat Enterprise Linux. Затем вы узнаете, как получить доступ к программному обеспечению. Затем мы обсудим надстройки Red Hat Enterprise Linux, а также требования к установке. После того, как вы узнаете все об этом, вы перейдете к следующему разделу, где узнаете, как установить Red Hat Enterprise Linux. Что такое Red Hat Enterprise Linux 8 Server? RHEL 8 - это дистрибутив Linux. Как вы, наверное, знаете, Linux - это бесплатная операционная система. Это означает, что исходный код всех программ доступен бесплатно. Однако некоторые корпоративные дистрибутивы Linux продаются как коммерческие продукты со встроенной поддержкой и обслуживанием, как в случае с RHEL 8; бесплатные загрузки RHEL 8 ограничены. Доступна 60-дневная ознакомительная версия, или же вы можете зарегистрироваться для получения бесплатной подписки разработчика Red Hat на https://developers.redhat.com. Чтобы использовать RHEL 8, вам нужна подписка. Эта подписка дает вам право на несколько дополнительных элементов, таких как поддержка и исправления. Когда вы платите за Red Hat Enterprise Linux, Red Hat предлагает вам поддерживаемую операционную систему Enterprise Linux, которая имеет некоторые ключевые преимущества, которые являются обычным требованием в корпоративных средах: ▪

Отслеживаемые тестирования.

обновления

и

исправления,

16

прошедшие

тщательную

процедуру

▪ ▪ ▪ ▪

Различные уровни поддержки и помощи, в зависимости от того, какой тип подписки вы приобрели. Сертифицированная операционная система, которая гарантированно работает и поддерживается на определенных моделях оборудования. Сертифицированная платформа для запуска корпоративных приложений, таких как промежуточное ПО SAP, Oracle Database и многие другие. Доступ к клиентскому порталу Red Hat по адресу https://access.redhat.com, где вы можете найти очень подробную документацию, доступную только для клиентов.

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

CentOS 8 Fedora Больше вы узнаете в следующих разделах этой главы.

Получение программного обеспечения Есть разные способы получить программное обеспечение, необходимое для выполнения всех упражнений из этой книги. В этом разделе вы узнаете, какие у вас есть варианты. Использование Red Hat Enterprise Linux Если вы хотите научиться работать с различными программами, инструментами и службами, которые предоставляются в Red Hat Enterprise Linux 8, самый простой способ использовать программу разработчика, предлагаемую Red Hat. Перейдите на https://developers.redhat.com, чтобы зарегистрироваться в бесплатной программе для разработчиков. Эта программа дает вам бесплатный доступ к Red Hat Enterprise Linux, что позволяет вам работать с RHEL в вашей собственной тестовой среде, не приобретая ее. Самое важное, что вы получаете в официальном выпуске сервера RHEL 8, - это доступ к порталу клиентов Red Hat. Через этот портал у вас есть доступ к разнообразной информации о RHEL в дополнение к предоставленным обновлениям через Red Hat Network (RHN). В частности, бесценна база знаний Red Hat; вы можете использовать его, чтобы найти ответы на многие общие проблемы, которые были опубликованы консультантами Red Hat. Использование CentOS CentOS - это операционная система Community Enterprise. CentOS начиналась как перекомпилированная версия RHEL, при этом все элементы, которые не были доступны бесплатно, были удалены из программного обеспечения RHEL. По сути, было изменено просто название, а логотип Red Hat (который является проприетарным) был удален из всех программных пакетов CentOS. В результате, все еще доступная сегодня операционная система CentOS 8, представляет собой, тот же RHEL которая предлагает те же функциональные возможности, , но доступна бесплатно (и без услуг корпоративной поддержки). В 2014 году Red Hat включила CentOS с намерением предложить что-то клиентам, которые еще не готовы к корпоративной (Enterprise) поддержке. Основная идея заключается в том, что в конечном итоге многим клиентам потребуется корпоративная поддержка, потому что их дистрибутив Linux станет все более важным. Отдавая CentOS бесплатно прежде бренда Red Hat, ожидается естественным, что клиенты обновятся до Red Hat Enterprise Linux. 17

CentOS 8 также является отличным выбором для работы с этой книгой; он предлагает все, что может предложить RHEL, но вам не нужно за это платить. Вы можете загрузить CentOS 8 с https://www.centos.org. Обратите внимание, что CentOS не всегда имеет самую последнюю версию программного обеспечения RHEL и может отставать от последней версии RHEL от пары недель до пары месяцев. Другие дистрибутивы CentOS - не единственный бесплатный дистрибутив, который предлагает Red Hat. Другим широко используемым дистрибутивом Linux, который был бесплатным, но основанным на пакетах Red Hat Enterprise Linux, был Scientific Linux, дистрибутив Linux, разработанный в Fermi National Accelerator Laboratory. Scientific Linux больше не выпускается, и нет версии Scientific Linux, которая соответствует программному обеспечению Red Hat Enterprise Linux 8. Другой дистрибутив Linux, тесно связанный с Red Hat Enterprise Linux, - это Fedora, дистрибутив Linux с полностью открытым исходным кодом, он доступен бесплатно. В Red Hat есть много сотрудников, которые вносят свой вклад в проект Fedora, потому что Red Hat использует Fedora в качестве платформы разработки для RHEL. В результате Fedora предлагает доступ к новейшему и лучшему программному обеспечению, которое в большинстве случаев является гораздо более новым, чем тщательно протестированные программные компоненты RHEL (вот почему вы не должны использовать Fedora для подготовки к экзамену RCHSA). Fedora также используется Red Hat в качестве испытательной площадки для новых функций, которые могут быть включены или не включены в будущие выпуски RHEL. Если бы вы выбрали Fedora, вы бы работали с элементами, недоступными в RHEL, а это значит, что на экзамене вам пришлось бы действовать по-другому. Так что не используйте это! Понимание доступа к репозиториям Важным отличием RHEL от других дистрибутивов является доступ к репозиторию. Репозиторий - это источник пакетов для установки, используемый для установки программного обеспечения. Если вы используюте бесплатное программное обеспечение, такое как CentOS, правильные репозитории устанавливаются автоматически, и никаких дополнительных действий не требуется. Если вы используете Red Hat Enterprise Linux с подпиской вам нужно будет использовать программное обеспечение Subscription Manager, чтобы получить доступ к репозиториям Red Hat Enterprise Linux. СОВЕТ Если вы устанавливаете Red Hat с установочного диска RHEL 8, но не регистрируете его, у вас не будет доступа к репозиторию, поэтому вам нужно знать, как настроить доступ к репозиторию вручную. В главе 9 «Управление программным обеспечением» вы узнаете, как это сделать.

Требования к установке RHEL 8 можно установить, как на физическом, так и на виртуальном оборудовании. Для доступности определенных функций не имеет значения, какой тип оборудования используется, если выполняются следующие условия: ▪ ▪

1 ГиБ ОЗУ Жесткий диск емкостью 10 ГиБ 18



Сетевая карта

СОВЕТ Один ГБ составляет 1000 × 1000 × 1000 байт. Производители оборудования обычно работают с числами, кратными 1000; однако это не соответствует принципу работы компьютера, поэтому большая часть компьютерного программного обеспечения работает с KiB, MiB и GiB. В этом случае один ГиБ равен 1024 × 1024 × 1024 байта (что составляет 1,07 ГБ). Приведенные выше требования позволяют запустить минимальную установку RHEL, но если вы хотите создать среду, которая позволит вам выполнять все упражнения, описанные в этой книге, убедитесь, что выполняются следующие минимальные требования: ▪ ▪ ▪ ▪ ▪

Поддержка 64-битной платформы 2 ГиБ ОЗУ Жесткий диск емкостью 20 ГиБ DVD-привод, виртуальный или физический. Сетевая карта

ПРИМЕЧАНИЕ. Некоторые ресурсы в Интернете могут упоминать другие минимальные требования. Для экзамена RHCSA это не проблема.

Руководство и описание среды для сертификации Чтобы настроить среду для работы с этой книгой, я предлагаю вам начать с установки одного сервера CentOS или RHEL 8, следуя инструкциям в следующем разделе. Для глав в Части IV «Управление сетевыми службами» полезно если у вас есть второй сервер. Второй сервер не имеет особых требований. Чтобы настроить среду для подготовки к получению сертификата, я рекомендую вам использовать решение для виртуализация настольных компьютеров, например, VMware Workstation (или Fusion, если вы используете Mac) или Oracle VirtualBox. Преимущество использования одного из них заключается в том, что вы можете использовать моментальные снимки (snapshots), что позволяет легко вернуться к предыдущему состоянию конфигурации. Другие решения виртуализации, такие как KVM, также поддерживаются, но поскольку KVM работает в Linux, вам потребуются уже некоторые знания Linux, если вы хотите начать с KVM. Вы также можете установить на реальном оборудовании, но это решение будет менее гибким. СОВЕТ Во всех главах вы найдете пошаговые упражнения, которые расскажут вам, что именно нужно делать для настройки определенных служб. В конце всех глав вы найдете лабораторные работы, которые предоставляют задания, очень похожие на типы заданий, с которыми вы столкнетесь на экзамене. Чтобы получить максимальную отдачу от лабораторных работ в конце главы, рекомендуется начинать с чистой среды. Самый эффективный способ сделать это - создать моментальные снимки состояния ваших виртуальных машин в начале главы. Это позволяет вам вернуться в состояние, в котором были ваши виртуальные машины, когда вы начали работу над главой, сохранив при этом всю работу, которую вы проделали в предыдущих главах. Выполнение ручной установки Даже если RHEL и CentOS 8 можно установить с другого носителя, такого как установочный сервер или USB-ключ, обычно установка начинается с установочного DVD-диска или, при работе на виртуальной машине, с установочного DVD-файла ISO. Итак, возьмите 19

установочный DVD-диск (или его ISO-образ) и загрузите компьютер, на который вы хотите установить программное обеспечение. Следующие шаги описывают, как действовать с того момента, как вы увидите загрузочный экран с установочного DVD. Обратите внимание, что в пошагово описано установка CentOS 8, и все показаное на рисунках также основано на CentOS 8. Тем не менее, процедура применяется так же и к установке Red Hat Enterprise Linux 8:

Шаг 1. После загрузки с DVD вы увидите меню загрузки CentOS 8. В меню вы можете выбрать один из нескольких вариантов: ▪ ▪



Установить CentOS 8.0.0: Выберите этот вариант для обычной установки. Проверить этот носитель и установить CentOS 8.0.0: Выберите это, если перед установкой вы хотите протестировать установочный носитель. Учтите, что это займет много времени. Устранение неполадок: Выберите этот вариант для некоторых вариантов устранения неполадок. Эта опция полезна, если вы не можете нормально загрузиться с жесткого диска вашего компьютера.

При запуске программы установки вы можете передать ядру параметры загрузки, чтобы включить или отключить определенные функции. Чтобы получить доступ к приглашению, в котором вы можете добавить эти параметры, нажмите Tab в меню установки. Здесь показана строка загрузки ядра, которая будет использоваться, и предложена опция для изменения параметров загрузки. Шаг 2. Чтобы начать обычную установку, выберите вариант загрузки «Установить CentOS 8.0.0» (Install CentOS 8.0.0)(см. Рисунок 1-1). Сей час загрузится система установки, и вы сможете продолжить в течение минуты. РИСУНОК 1-1. Выберите «Установить CentOS 8.0.0» (Install CentOS 8.0.0), чтобы начать установку.

20

Шаг 3 После загрузки базовой системы, из которой вы будете выполнять установку, вы увидите экран «Добро пожаловать в CentOS 8.0.0». На этом экране вы можете выбрать язык и настройку клавиатуры. Для экзамена RHCSA нет смысла выбирать что-либо, кроме английского. Если вы работаете с неамериканской клавиатурой, на этом экране вы можете выбрать настройка клавиатуры. Обязательно выберите соответствующую настройку клавиатуры, после чего нажмите «Продолжить» (Continue), чтобы продолжить (см. Рисунок 1-2). РИСУНОК 1-2 Выберите соответствующий язык и настройку клавиатуры, прежде чем продолжить

РИСУНОК 1-3. Укажите полную конфигурацию вашего сервера при установке в окне «Обзор установки» (Installation Summary)

21

Шаг 4 После выбора настроек клавиатуры и языка вы увидите экран «Сводная информация об установке» (см. Рисунок 1-3). На этом экране вы указываете все настройки, которые хотите использовать. На этом экране у вас есть несколько различных вариантов: ▪ Клавиатура: используется для изменения расположения клавиатуры. ▪ Языковая поддержка: используется для добавления поддержки дополнительных языков. ▪ Время и дата: используются для указания текущего времени и даты, а также часового пояса. ▪ Источник установки: используется для указания источника установки. Обычно вы выполняете установку с установочного DVD. ▪ Выбор программного обеспечения: предлагает различные шаблоны установки, чтобы легко установить набор пакетов по умолчанию. ▪ Место установки: используется для определения диска (дисков) для копирования файлов во время установки. ▪ KDUMP: позволяет использовать ядро KDUMP. Это ядро, которое создает дамп ядра, если что-то пойдет не так. ▪ Сеть и имя хоста: установите здесь IP-адрес и соответствующие настройки. ▪ Политика безопасности: предлагает ограниченный набор политик безопасности, позволяющих легко усилить защиту сервера. ▪ Назначение системы: позволяет указать, для какой цели используется эта система. Эту информацию можно легко передать в службу поддержки Red Hat для облегчения любых случаев, когда требуется поддержка. На этом экране «Сводная информация об установке» вы можете увидеть, нужно ли еще настраивать элементы - эти элементы отмечены восклицательным знаком, а описание - красным текстом. Пока существуют какие-либо проблемы, вы не можете нажимать кнопку «Начать установку» (т. е. Она отключена). Во всех случаях Вам не придется изменять настройки для каждого параметра, но для полноты картины следующие шаги описывают различные настройки, доступные при установке в окне «Обзор установки» (Installation Summary), где это возможно с рекомендованными изменениями. Шаг 5. Щелкните параметр «Клавиатура», чтобы просмотреть параметры настройки раскладки клавиатуры. На этом экране вы также можете выбрать дополнительную раскладку клавиатуры, это полезно, если ваш сервер используется администраторами, использующими разные раскладки клавиатуры. Поддерживаются не только различные языковые настройки, но и также разные компоновки оборудования. Если многие администраторы используют Apple Компьютер Mac, например, вы можете выбрать стандартную раскладку клавиатуры для Mac в соответствующем регионе. После добавления другой раскладки клавиатуры вы также можете настроить варианты переключения раскладки клавиатуры. Это последовательность клавиш, которая используется для переключения между разными видами языковых раскладок. Выберите «Параметры» (Options), чтобы указать комбинацию клавиш, которую вы хотите использовать для переключения раскладки клавиатуры. После указания конфигурации, которую вы хотите использовать, нажмите «Готово» (Done), чтобы вернуться к окну «Обзор установки» (Installation Summary). Шаг 6. Параметр «Поддержка языков» на экране «Обзор установки» (Installation Summary) 22

такой же, как вариант языковой поддержки, который вы использовали на шаге 3. Если вы уже настроили языковые настройки, которые будут использоваться, то здесь ничего менять не нужно. Шаг 7. Щелкните «Время и дата» (Time & Date), чтобы увидеть карту мира, на которой вы можете легко выбрать часовой пояс, в котором вы находитесь (см. Рисунок 1-4). Кроме того, вы можете выбрать регион и город, в котором вы находитесь, из соответствующих выпадающих списков. Вы также можете установить текущую дату и время, а после настройки сети вы можете указать сетевой протокол времени (NTP), который будет использоваться для синхронизации времени с серверами времени в Интернете. Эта опция недоступна, если сеть недоступна. При использовании сетевого времени вы можете добавить сетевые серверы времени, которые будут использоваться, щелкнув значок конфигурацию в верхней правой части экрана. После указания параметров, которые вы хотите использовать, нажмите «Готово» (Done) в верхнем левом углу экрана, чтобы записать выбранные параметры. Шаг 8. В разделе «Программное обеспечение» (Software) в окне «Обзор установки» (Installation Summary) щелкните «Источник установки» (Installation Source), чтобы открыть экран, показанный на (рис. 1-5). Если вы загрузились с обычного установочного диска, то указывать ничего не надо. Если вы загрузились из среды с минимальной загрузкой, вы можете указать сетевой URL-адрес, по которому доступны дополнительные пакеты, а также дополнительные репозитории, которые необходимо использовать. Вам не обязательно делать это для подготовки к экзамену RHCSA, но если вам когда-либо настраивать сервер, то полезно знать, что такой выбор существует. Щелкните «Готово» (Done). Шаг 9. Щелкните «Выбор программного обеспечения» (Software Selection), чтобы перейти к важной части процедуры установки (см. Рисунок 1-6). Отсюда вы выбираете базовую среду и надстройки, доступные для выбранной среды. Очень распространен минимальный вариант установки. Эта базовая среда позволяет установить CentOS на жесткий диск минимального размера. В этой книге я предполагаю, что вы устанавливаете сервер с опцией Server with GUI. Для выполнения задач, которые необходимо выполнить на экзамене RHCSA доступны несколько простых в использовании графических инструментов, поэтому имеет смысл установить сервер с графическим пользовательским интерфейсом (GUI), даже если вы никогда не сделаете этого в производственной среде. Все дополнительные пакеты могут быть добавлены позже. На этом этапе вам не нужно выбирать какие-либо дополнительные пакеты. Щелкните «Готово» (Done).

Рис. 1-4 выбор настроек времени и даты

23

Рис. 1-5 Выбор источника установки

Рисунок 1-6 Убедитесь, что вы выбрали сервер с графическим интерфейсом для каждого сервера, который вы собираетесь использовать для упражнений в этой книге.

24

ПРИМЕЧАНИЕ Некоторые люди говорят, что настоящие администраторы не используют сервер с шаблоном установки GUI. Подготовка к экзамену RHCSA - это не значит быть настоящим администратором. Большим преимуществом использования сервера с шаблоном установки графического интерфейса пользователя является то, что он обеспечивает простой в использовании интерфейс. Некоторые инструменты, обсуждаемые в этой книге, работают только в графическом интерфейсе. Кроме того, при использовании сервера с графическим интерфейсом вы можете использовать несколько окон терминала одновременно, и это делает работу с командной строкой RHEL очень простой!

Шаг 10. После установки программного обеспечения необходимо указать, куда вы хотите установить операционную систему. Щелкните пункт «Место установки» (Installation Destination) на экране «Обзор установки» (Installation Summary). По умолчанию выбрано автоматическое разбиение на разделы, и вам нужно только подтвердить дисковое устройство, которое вы хотите использовать для автоматического разбиения на разделы (см. рис. 1-7). Также доступны многие дополнительные параметры. Чтобы подготовить вашу установку ко всем упражнениям, описанным в последующих главах этой книги, вы не можете просто использовать разделение по умолчанию. Вместо этого вам нужна установка, которая использует диспетчер логических томов (LVM) и сохраняет доступное дисковое пространство. Для этого на экране, показанном на Рисунке 1-7, выберите переключатель Пользовательский (Custom) в разделе «Конфигурация хранилища» Storage Configuration. Затем убедитесь, что выбран диск, который вы хотите использовать, и нажмите «Готово» (Done), чтобы продолжить. Обратите внимание, что иногда отображаются не все параметры, и вы видите полосу прокрутки справа от экрана. Если это так, прокрутите вниз, чтобы отобразить дополнительные параметры установки. 25

РИСУНОК 1-7. Выберите «Пользовательский» (Custom) и нажмите «Готово» (Done), чтобы продолжить.

СОВЕТ. Если вы хотите использовать этот сервер для выполнения упражнений, описанных в следующих главах, убедитесь, что у вас есть дисковое пространство, которое не выделено ни одному из разделов. Вам потребуется неразмеченное дисковое пространство для работы с упражнениями по разбиению на разделы и LVM, что является важной частью целей экзамена RHCSA. После того, как вы укажете, что хотите настроить структуру диска вручную, вы увидите экран ручного разбиения диска, показанный на рис. 1-8. Щелкните +, чтобы добавить новые дисковые устройства. Чтобы настроить среду, которая требуется в этой книге, я рекомендую использовать следующую структуру диска (на основе жесткого диска 20 ГиБ диск): ▪ ▪ ▪

/ boot установлен на традиционный раздел в формате XFS размером 500 МБ. Логический том в формате XFS размером 10 ГиБ, смонтированный на / Логический том размером 1 ГиБ, который используется как пространство подкачки.

ПРИМЕЧАНИЕ RHEL 8 по умолчанию использует файловую систему XFS. Эта файловая система не может быть сжата; его можно только расширить. Поэтому иногда лучше использовать Ext4.

26

РИСУНОК 1-8. Настройка расширенного размещение диска.

Начните конфигурировать, после нажатия + на экране, показанном на рис. 1-8, вы увидите всплывающее диалоговое окно, в котором вы можете указать точку монтирования и желаемую емкость. В раскрывающемся списке «Точка монтирования» (Mount Point) выберите /boot и добавьте желаемую емкость 500 МБ. Обратите внимание, что вместо этого вы можете ввести 500M, что позволит выделить емкость 500MiB. Затем нажмите «Добавить точку подключения» (Add Mount Point). Теперь вы перейдете к экрану, показанному на Рисунке 1-9, на котором вы можете указать конкретные детали только что созданной точки монтирования. На этом этапе в интерфейсе, который вы видите на рис. 1-9, снова щелкните значок + и укажите точку монтирования / и емкость 10 ГиБ. На экране «Сведения о точке подключения», который вы видите сейчас, убедитесь, что установлен тип устройства LVM и выбрана файловая система XFS. Больше ничего изменять не нужно. Теперь щелкните значок + еще раз, чтобы добавить устройство swop. В раскрывающемся списке Mount Point выберите swap и укажите желаемую емкость 1 ГиБ. Затем нажмите «Добавить точку подключения». Схема на этом этапе должна выглядеть, как на рис. 1-10. В этом случае щелкните «Готово» (Done), чтобы записать конфигурацию. Перед тем как конфигурация будет сохранена на диске, вы увидите экран, на котором отображается сводка изменений, которые вы применили (см. Рис. 1-11). Если все в порядке, нажмите «Принять изменения» (Accept Changes), чтобы записать выбранную конфигурацию.

РИСУНОК 1-10. Если конфигурация выглядит так, вы можете записать ее на диск.

27

РИСУНОК 1-11. Прежде чем записывать изменения на диск, вы можете убедиться, что все в порядке

Шаг 11. Следующая часть экрана «Обзор установки» (Installation Summary) позволяет настроить сеть. Обратите внимание, что вы должны, что либо настроить. Если вы ничего не сделаете, ваш сервер может не подключиться ни к какой сети. Щелкните «Сеть и имя хоста» (Network & Host Name), чтобы настроить сеть. Это открывает экран что вы видите на рисунке 1-12. РИСУНОК 1-12. На экране «Сеть и имя хоста» установите для сетевой карты значение «Вкл.».

28

Сетевое подключение по умолчанию отключено. Обязательно включите его. После включения сетевого подключения вы можете нажать «Настроить» (Configure), чтобы добавить дополнительную конфигурацию. Работа в сети подробно обсуждается в главе 8 «Настройка сети», поэтому вам не нужно делать это сейчас, и вы можете просто оставить настройки по умолчанию, которые получают IP-адрес от сервера (DHCP). Вы также можете оставить имя хоста по умолчанию; вы также узнаете, как это изменить, в главе 8. Шаг 12. Параметр «Политика безопасности» позволяет усилить безопасность на сервере в соответствии с некоторыми общепринятыми стандартами. В настоящее время поддерживаются параметры PCI-DSS и OSPP. Откройте интерфейс и нажмите «Выбрать профиль» (Select Profile), чтобы применить любой из них. Шаг 13. Последний параметр, доступный в «Обзор установки» (Installation Summary), позволяет определить цель системы (System Purpose). Под этой опцией вы найдете несколько опций, которые позволят вам указать, для чего вы используете свой сервер. Вы можете указать роль (например, RHEL Server или RHEL Workstation), а также Соглашение об уровне обслуживания Red Hat. Установка этих параметров может облегчить определение конкретных типов серверов в большой корпоративной среде. Шаг 14. После задания всех параметров на экране «Обзор установки» (Installation Summary) вы можете нажать «Начать установку», чтобы начать установку. Это немедленно запускает процедуру установки, при этом в следующем окне будет запрошено настройки для пользователей. (см. Рисунок 1-13). 29

РИСУНОК 1-13 Указание параметров обычного пользователя и пользователя root

Шаг 15. На этом экране сначала нажмите Root Password и установите пароль password. Это не очень безопасно, но, используя такой простой пароль, вы впоследствии избежите проблем, которые могут возникнуть из-за того, что вы его не запомните. Вы должны указать пароль дважды, а также вам потребуется дважды нажать «Готово» (Done) (потому что вы должны подтвердить, что действительно хотите использовать слабый пароль). Шаг 16. Затем нажмите «Создание пользователя» (User Creation), чтобы создать пользователя (см. Рис. 1-14). Введите имя пользователя student, и для этого пользователя также установите пароль password. Опять же, вам нужно дважды нажать «Готово», чтобы подтвердить, что вы действительно хотите использовать слабый пароль.

РИСУНОК 1-14. Задание дополнительных пользовательских настроек

30

Шаг 17. Когда установка будет завершена, вы увидите экран, показанный на рисунке 1-15. Теперь вам нужно будет нажать Reboot, чтобы перезагрузить компьютер и завершить установку. Шаг 18. После перезагрузки вам необходимо выполнить еще пару дополнительных шагов по настройке. Во-первых, вам нужно принять лицензионное соглашение. Для этого щелкните красный текст «Лицензия не принята» (License Not Accepted), выберите «Я принимаю лицензионное соглашение» (Accept the License Agreement), а затем нажмите «Готово» (Done) для завершения. Теперь вы можете нажать «Завершить настройку», чтобы завершить настройку, после чего откроется графическое окно входа в систему. НЕ настраивайте регистрацию в системе с помощью диспетчера подписок; нам нужна очень специфическая настройка, и мы позаботимся об этом в главе 9. РИСУНОК 1-15 Перезагрузка для завершения установки

31

Резюме В этой главе вы узнали, что такое Red Hat Enterprise Linux и как он соотносится с некоторыми другими дистрибутивами Linux. Вы также узнали, как установить Red Hat Enterprise Linux 8 или CentOS 8. Теперь вы готовы настроить базовую среду, которую можно использовать для работы над всеми упражнениями из этой книги.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во Введении, у вас есть несколько вариантов подготовки к экзамену: лабораторные работы в конце главы; таблицы памяти в Приложение B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 1-2 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 1-2 Ключевые темы главы 1 Ключевая тема Элемент Список шагов

Описание

Страница

Как выполнить ручную установку RHEL 8

20

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: distribution, Linux, Red Hat, CentOS, Fedora, Scientific Linux

Обзорные вопросы

Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Вы не хотите покупать лицензию RHEL, но хотите создать среду для практики перед экзаменом. Какой дистрибутив вам следует использовать? 2. Что произойдет с конфигурацией сети, если вы ничего не укажете при установке? 3. Вы хотите установить минимальную систему. Сколько оперативной памяти вам нужно? 4. Почему рекомендуется иметь доступ в Интернет на всех устанавливаемых серверах? 5. Вы хотите установить виртуальную машину на компьютер без оптического дисковода. Какую альтернативу выполнить установку проще всего? 6. Почему установить графический интерфейс - это хорошая идея?

32

Глава 2 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Базовые навыки работы с оболочкой shell Редактирование файлов с помощью vim Понимание окружающей среды Shell Поиск помощи

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪ ▪

Использовать перенаправление ввода-вывода (>, >>, |, 2> и т. Д.) Создавать и редактировать текстовые файлы Найдите, прочтите и используйте системную документацию, включая man, info и файлы в /usr/share/doc.

Эта глава посвящена описанию основных навыков работы с Linux, которые необходимо знать до начала сдачи экзамена RHCSA.

Использование основных инструментов Опрос «Знаю ли я это уже?» Опрос «Знаю ли я это уже?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 2-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это уже?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 2 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Базовые навыки работы с оболочкой shell Редактирование файлов с помощью vim

Вопросы 1, 3, 4–7 8

Понимание окружающей среды Shell

2, 9

Поиск помощи

10

1. Какая из следующих команд позволяет перенаправить стандартный вывод, а также стандартную ошибку в файл? a. 1&2> file b. file 2>&1 33

c. >1&2 file d. 1>2& file

2. Вы ищете переменную, которая установлена в оболочке входа в Bash для всех пользователей. Какой из следующих файлов является наиболее вероятным местом установки этой переменной? (Выберите два.) a. b. c. d.

/etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc

3. Пользователь создал скрипт с именем myscript. Он пытается запустить его с помощью команды myscript, но он не запускается. Пользователь подтвердил, что разрешения скрипта установлены как исполняемые. Что из следующего является наиболее вероятным объяснением?

a. b. c. d.

Внутренняя команда препятствует запуску скрипта. Пользователям не разрешается запускать скрипты. Каталог, содержащий сценарий, отсутствует в PATH. У скрипта нет соответствующих разрешений.

4. Вам нужен вывод команды ls, который будет использоваться в качестве ввода для команды less. Какой из следующих примеров подойдет вам?

a. b. c. d.

ls > less ls >> less ls >| less ls | less

5. Пользователь хочет удалить свою историю полностью. Какой из следующих подходов сделает это?

a. b. c. d.

Удалите файл ~/.bash_history и введите history -c. Введите history -c. Удалите файл ~/.bash_history. Введите history -c и закройте текущую оболочку.

6. Что из нижеперечисленного не является допустимым методом повторения команды из истории?

34

a. b. c. d.

Нажмите Ctrl-r и начните вводить часть команды. Напечатать символ «!» за которым следуют первые буквы команды. Напечатать символ «!» за которым следует номер команды, как указано в истории. Нажмите Ctrl-x, а затем номер в истории.

7. Для каких из следующих элементов можно использовать авто завершение Bash?

a. b. c. d.

Команды Файлы Переменные Все вышеперечисленное

8. Какая из следующих команд позволяет вам заменять каждое вхождение старого на новое в текстовом файле, который открывается с помощью vi? a. b. c. d.

:%s/old/new/g :%r/old/new/ :s/old/new/g r:/old/new

9. Какой подход работает лучше всего, если во время процесса входа в систему вы хотите показать сообщение всем пользователям, которые только что вошли в сеанс оболочки на вашем сервере? a. Поместите сообщение в /etc/issue. b. Поместите сообщение в /etc/motd. c. Поместите сообщение в /etc/profile. d. Поместите сообщение в /etc/bashrc.

10. Вы используете команду man -k user, но получаете сообщение «ничего подходящего». Какое из следующих решений, скорее всего, исправит это для вас?

a. b. c. d.

Введите updatedb, чтобы обновить базу данных mandb. Введите makewhatis, чтобы обновить базу данных mandb. Введите mandb, чтобы обновить базу данных mandb. Используйте man -K, а не man -k.

Основные Темы Базовые навыки работы с оболочкой shell Оболочка shell - это рабочая среда по умолчанию для администратора Linux. Это среда, в которой пользователи и администраторы вводят команды, выполняемые операционной системой. Доступны разные оболочки для Linux, но наиболее распространенной оболочкой является Bash. 35

Поэтому, когда мы говорим в этой книге о «оболочке shell», мы фактически говорим о оболочке Bash. В этой главе представлен обзор некоторых элементов, с которыми вы столкнетесь при работе с оболочкой.

Понимание команд Работа с оболочкой shell - это работа с синтаксисом команд. Обычно синтаксис команды состоит из трех основных частей: команды, ее параметров и аргументов. Команда - это сама команда, например ls. Эта команда показывает список файлов в текущем каталоге. Чтобы изменить поведение команды, вы можете использовать параметры (options). Параметры являются частью программного кода и изменяют то, что делает команда. Например, когда вы используете параметр -l с командой ls, отображается длинный список имен файлов и свойств. Слово аргумент немного сбивает с толку. Вообще говоря, это относится ко всему, к чему обращается команда, поэтому все, что вы помещаете после команды, является аргументом (включая параметры). Помимо параметров, которые можно использовать в качестве аргумента, команды могут иметь и другие аргументы, которые служат целью для команды. Давайте посмотрим на пример: команда ls -l /etc. У этой команды есть два разных аргумента: -l и /etc. Первый аргумент - это опция, изменяющая поведение команды. Второй аргумент - это цель, указывающая, где команда должна выполнять свою работу. Вы найдете эти три элемента почти во всех командах, с которыми вы будете работать в среде Linux.

Выполнение команд Назначение оболочки shell Linux - предоставить среду, в которой могут выполняться команды. Shell заботится о правильной интерпретации команды, введенной пользователем. Для этого оболочка различает три вида команд: ▪ ▪ ▪

Псевдонимы (Aliases) Внутренние команды Внешние команды

Псевдоним далее по тексту Aliases - это команда, которую пользователь может определить по мере необходимости. Некоторые Aliases предоставляются по умолчанию; введите alias в командной строке, чтобы получить обзор определённых Aliases. Чтобы определить псевдоним, используйте Aliases newcommand = 'oldcommand', как в Aliases по умолчанию ll = 'ls -l --color = auto', который уже был создан в вашей системе. Псевдонимы всегда выполняются в первую очередь. Таким образом, если у вас есть псевдоним с именем ll, но также есть команда с именем ll, псевдоним всегда будет иметь приоритет, если не используется полный путь. Внутренняя команда - это команда, которая является частью самой оболочки и, как таковая, не должна загружаться с диска отдельно. Внешняя команда - это команда, которая существует в виде исполняемого файла на диске компьютера. Поскольку он должен быть прочитан с диска при первом использовании, он немного медленнее. Когда пользователь выполняет команду, оболочка shell сначала проверяет, является ли это внутренней командой; если это не так, shell ищет исполняемый файл с именем, которое соответствует команде на диске. Чтобы узнать, является ли

36

команда внутренним файлом Bash или исполняемым файлом на диске, вы можете использовать команду type. Пример: 1. $ type ls ls is aliased to `ls --color=auto' 2. # type man man is /usr/bin/man Для поиска внешних команд используйте переменную $PATH. Эта переменная определяет список каталогов, в которых выполняется поиск соответствующего имени файла, когда пользователь вводит команду. Чтобы узнать, какую именно команду будет использовать оболочка, вы можете использовать команду which. Например, введите which ls, чтобы узнать, где shell найдёт файл команды ls. Еще более сильная команда - type. Эта команда также будет работать с внутренними командами и псевдонимами. Вы должны заметить, что по соображениям безопасности текущий каталог не находится в переменной $PATH, и Linux не смотрит в текущий каталог, чтобы узнать, доступна ли конкретная команда из этого каталога. Вот почему вам для выполнения команды из текущего каталога, но не указана в переменной $PATH, необходимо добавить символы ./ перед ней. Точка обозначает текущий каталог, и, запустив его как ./ , вы указываете Bash искать команду в текущем каталоге. Хотя такой способ выполнения команд не является распространенным явлением, вам придется делать это для запуска сценариев, которые вы создали в текущем каталоге. Переменная $PATH может быть установлена для конкретных пользователей, но в целом большинство пользователей будут использовать одну и ту же переменную $PATH. Единственным исключением является пользователь root, которому требуется доступ к определенным командам администрирования. В упражнении 2-1 вы узнаете некоторые основы работы с командами. Упражнение 2-1 Использование внутренних и внешних команд из оболочки shell 7. При установке сервера авторизуйтесь как пользователь, созданный вами в главе 1, «Установка Red Hat Enterprise Linux». 8. Введите time ls. При этом выполняется команда ls, где внутреннее Bash time показывает информацию о времени, которое потребовалось для выполнения этой команды. 9. Введите which time. Это показывает имя файла /usr/bin/time, которое было найдено в переменной $PATH. 10. Введите echo $PATH, чтобы отобразить содержимое переменной $PATH. Вы можете видеть, что директория /usr/bin включена в список, но поскольку существует также внутренняя команда time, команда time из указанного пути не будет выполняться, если вы специально не укажете оболочке сделать это - команда на шаге 2 выполнила внутреннюю команду из-за приоритета команд. 11. Введите /usr/bin/time ls, чтобы запустить команду /usr/bin/time при выполнении ls. Вы заметите, что результат полностью отличается. Не обращайте внимания на смысл вывода; мы вернемся к этому позже. На данный момент важно то, что вы понимаете, что это действительно две разные команды. Перенаправление ввода/вывода По умолчанию, когда команда выполняется, она показывает ее результаты на экране компьютера, с которым вы работаете. Монитор компьютера используется как стандартное место назначения для вывода, которое также называется STDOUT. Оболочка также имеет места назначения по умолчанию для отправки сообщений об ошибках (STDERR) и приема ввода (STDIN). Таблица 2-2 дает обзор всех трех. 37

Таблица 2-2 Обзор стандартных входов, выходов и ошибок Название STDIN STDOUT STDERR

Место назначения по умолчанию Компьютерная клавиатура Компьютерный монитор Компьютерный монитор

Использование при перенаправлении )

1

2>

2

Итак, если вы запустите команду, эта команда будет ожидать ввода с клавиатуры и обычно отправляет свой вывод на монитор вашего компьютера, не делая различия между нормальным выводом и ошибками. Однако некоторые команды запускаются в фоновом режиме, а не из текущего сеанса терминала, поэтому у этих команд нет сеанса монитора или консоли для отправки вывода, и они не слушают ввод с клавиатуры, чтобы принять свой стандартный ввод. Вот здесь и пригодится перенаправление. Перенаправление также полезно, если вы хотите работать с вводом из альтернативного расположения, например файл. Программы, запускаемые из командной строки, понятия не имеют, что они читают или что пишут. Они просто читают то, что ядро Linux называет файловым дескриптором 0, если они хотят читать из стандартного ввода, и они записывают в файловый дескриптор номер 1 для отображения вывода без ошибок (также известного как «стандартный вывод» (standard output)) и в файловый дескриптор 2, если у них есть сообщения об ошибках, которые нужно вывести. По умолчанию эти файловые дескрипторы связаны с клавиатурой и экраном. Если вы используете символы перенаправления, такие как и |, оболочка shell соединяет файловые дескрипторы с файлами или другими командами. Давайте сначала посмотрим на < и >. Позже мы обсудим pipe (символ |). В таблице 2-3 показаны наиболее распространенные символы перенаправления, которые используются в оболочке Bash. Таблица 2-3 Общие редиректоры Bash Перенаправление

Объяснение

> (то же, что и 1>)

Перенаправляет STDOUT. Если перенаправление выполняется в файл, текущее содержимое этот файл перезаписывается.

>> (то же, что и 1 >>)

Перенаправляет STDOUT. Если вывод записывается в файл, вывод добавляется к этому файлу.

2>

Перенаправляет STDERR.

2> & 1

Перенаправляет STDERR в то же место назначения, что и STDOUT. Обратите внимание, что это должно использоваться в сочетании с обычным перенаправлением вывода, как в ls whuhiu> errout 2> & 1.

/dev/null. Эта команда показывает на экране сообщение «нет такого файла или каталога». Вы видите это сообщение, потому что это не STDOUT, а скорее сообщение об ошибке, записанное в STDERR. 5. Введите ls ilwehgi 2> /dev/null. Теперь вы больше не увидите сообщение об ошибке. 6. Введите ls ilwehgi Documents 2> /dev/null. Это показывает имя папки Documents (только в том случае если файл с таким именем существует в вашем каталоге можно предварительно выполнить команду >Documents для его создания) в вашем домашнем каталоге, скрывая сообщение об ошибке. 7. Введите ls ilwehgi Documents 2> /dev/null> output. В этой команде вы по-прежнему пишете сообщение об ошибке в /dev/null при отправке STDOUT в файл с выходным именем, который будет создан в вашем домашнем каталоге. 8. Введите cat output, чтобы отобразить содержимое этого файла. 9. Введите echo hello> output. Это перезаписывает содержимое выходного файла. 10. Введите ls >> output. Это добавляет результат команды ls в выходной файл с именем output. 11. Введите ls -R /. На мониторе компьютера отображается длинный список файлов и папок. (Вы можете нажать Ctrl-C, чтобы остановить [или подождать некоторое время]). 12. Тип ls -R | less. Это показывает тот же результат, но на страницах команды less, где вы можете прокручивать вверх и вниз с помощью клавиш со стрелками на клавиатуре. 13. Введите q, чтобы закрыть меньше. Это также завершит программу ls. 14. Введите ls> /dev/tty1. Это дает сообщение об ошибке, потому что вы выполняете команду как обычный пользователь, а обычные пользователи не могут напрямую обращаться к 39

файлам устройства (если вы не вошли в систему на tty1). Только пользователь root имеет разрешение на запись в файлы устройства напрямую. История (history) Удобная функция оболочки Bash - это история ввода команд Bash. По умолчанию Bash настроен на сохранение последних 1000 команд, использованных пользователем (если сеанс оболочки никогда не закрывается, точное число может значительно увеличиться). Когда сеанс оболочки закрывается, история этого сеанса обновляется в файле истории введёных команд. Имя этого файла - .bash_ history, и он создается в домашнем каталоге пользователя, запустившего конкретный сеанс оболочки. Обратите внимание, что файл истории закрывается только при закрытии сеанса оболочки; до этого момента все команды в истории сохраняются в памяти. Функция history позволяет легко повторять сложные команды. Есть несколько способов работы с функцией истории ввода команд: ▪ ▪

▪ ▪

Введите history, чтобы отобразить список всех команд в истории Bash. Нажмите Ctrl-r, чтобы открыть подсказку, из которой вы можете выполнить обратный поиск в командах, которые вы использовали ранее. Просто введите строку, и Bash посмотрит назад в истории команд любую команду, содержащую эту строку в качестве имени команды или одного из ее аргументов. Снова нажмите Ctrl-r, чтобы повторить последний поиск в обратном направлении. Введите !number, чтобы выполнить команду с определенным номером из истории. Введите !Sometext, чтобы выполнить последнюю команду, начинающуюся с sometext. Обратите внимание, что это потенциально опасная команда, потому что найденная команда выполняется немедленно!

В некоторых случаях может потребоваться стереть историю команд в Bash. Это полезно, например, если вы случайно ввели пароль открытым текстом. Если это произойдет, вы можете ввести history -c, чтобы очистить текущую историю. Команды из этого сеанса не будут записаны в файл истории при выходе из текущего сеанса. Если вы хотите удалить всю историю Bash, введите history -w сразу после использования history -c. Упражнение 2-3 проведет вас через некоторые особенности истории команд в Bash Упражнение 2-3 Работа с историей команд 1. Убедитесь, что вы открыли оболочку как пользователь student. 2. Введите историю, чтобы получить обзор команд, которые вы использовали ранее. 3. Введите несколько команд, например, следующие: a. ls b. pwd c. cat /etc/hosts d. ls -l Цель - немного заполнить историю команда. 4. Откройте второй терминал на своем сервере, щелкнув правой кнопкой мыши графический рабочий стол и выбрав пункт меню «Открыть в терминале». 5. Введите history во второго окне терминала. Обратите внимание, что вы не видите команды, которые вы только что набрали в предыдущем терминале. Это потому, что файл истории еще не обновлен. 6. В первом сеансе терминала нажмите Ctrl-r. В открывшейся подсказке введите ls. Вы увидите последнюю использованную команду ls. Снова нажмите Ctrl-r. Теперь вы увидите, 40

что видно предыдущая команда и выделена предыдущая команда ls. Нажмите Enter, чтобы выполнить его. 7. Введите history | grep cat. Команда grep ищет в выводе истории любые команды, содержащие текст cat. Обратите внимание на номер одной из команд cat, которые вы использовали ранее. 8. Введите !nn, где nn заменяется числом, записанным на шаге 7. Вы увидите, что повторяется последняя команда cat. 9. Закройте этот терминал, набрав exit. 10. В оставшемся окне терминала введите history -c. Это стирает всю историю, которая в данный момент находится в памяти. Закройте и этот сеанс терминала. 11. Откройте новый сеанс терминала и введите history. Это может быть немного неожиданно, но вы все равно увидите список команд. Это потому, что history -c очищает историю в памяти, но не удаляет файл .bash_history в вашем домашнем каталоге. Функция оболочки Bash Shell завершение команды Еще одна полезная функция оболочки Bash - авто завершение в командной строке. Эта функция помогает вам найти нужную команду, а также работает с переменными и именами файлов. Если вы установили программный пакет bash-сompletion, он также работает для некоторых более сложных команд. Авто завершение Bash полезно при работе с командами. Просто введите начало команды и нажмите клавишу TAB на клавиатуре компьютера. Если есть только один вариант завершения, Bash выполнит команду автоматически за вас. Если есть несколько вариантов, вам нужно нажать Tab еще раз, чтобы просмотреть все доступные варианты. В упражнении 2-4 вы узнаете, как работать с этими замечательными функциями. Использование Функция оболочки Bash Shell завершение команды 1. Из пользовательской оболочки введите gd и нажмите Tab. Вы увидите, что ничего не происходит. 2. Снова нажмите Tab. Оболочка Bash теперь показывает краткий список всех команд, начинающихся с буквы gd. 3. Чтобы дать Bash понять, что вы хотите, введите i (чтобы на этом этапе в приглашении отображалась команда gdi). Снова нажмите Tab. Теперь Bash знает, что вы хотите, и предлагает для выбора вам команду gdisk. Нажмите Enter, чтобы закрыть только что открывшуюся подсказку. 4. Используйте cd /etc для перехода в каталог /etc. 5. Введите cat pas и нажмите Tab. Поскольку существует только один файл, который начинается с pas, Bash знает, что делать, и автоматически дополняет имя файла. Нажмите Enter, чтобы выполнить команду. Изменение текстовых файлов с помощью редактора vim Управление Linux часто означает работу с текстовыми файлами. Большинство вещей, которые настраиваются в Linux, настраиваются через текстовые файлы. Для выполнения административных задач часто требуется изменить содержимое файла конфигурации с помощью текстового редактора. За прошедшие годы для Linux было создано множество текстовых редакторов. Однако действительно важен один редактор, и это vi. Даже если некоторые другие текстовые редакторы проще в использовании, vi - единственный текстовый редактор, который всегда доступен. Вот почему как администратор Linux вам нужно знать, как работать с текстовым редактором vi. Одна из распространенных альтернатив - vim или «vi улучшенный»; это полностью переписанный vi с 41

множеством улучшений, упрощающих работу с текстовым редактором vi, таких, как подсветка синтаксиса для многих файлов конфигурации, что упрощает распознавание допущенных вами опечаток. Все, что вы узнаете в этом разделе о vim, работает и с vi. Важной концепцией при работе с vim является то, что он использует разные режимы. Два из них особенно важны: командный режим и режим ввода. Эти режимы часто вызывают путаницу, потому что в командном режиме вы можете просто ввести команду и не можете изменить содержимое текстового файла. Чтобы изменить содержимое текстового файла, вам нужно перейти в режим ввода. Проблема при работе с vim - это огромное количество доступных команд. Некоторые даже создали шпаргалки по vim, в которых перечислены все доступные команды. Не используйте их. Вместо этого сосредоточьтесь на минимальном количестве действительно важных команд. В таблице 2-4 перечислены наиболее важные команды текстового редактора vim. Используйте их (и только эти), и вы хорошо сдадите экзамен RHCSA. СОВЕТ Не пытайтесь работать с максимально возможным количеством команд при работе с vim. Просто используйте минимальный набор команд и используйте их часто. Вы увидите; что привыкнешь к этим командам и запоминаешь их для экзамена. Также вам может понравиться команда vimtutor. (Для его установки используйте yum install vim-еnhanced.) Эта команда открывает руководство по vim, в котором вы можете выполнить несколько полезных дополнительных упражнений.

Таблица 2-4 Основных команд текстового редактора vim Команда vim Esc i, a o

Объяснение Переключает из режима ввода в командный режим. Нажмите эту клавишу перед вводом любой команды. Переключает из командного режима в режим ввода в (i) или после (a) текущей позиции курсора. Открывает новую строку под текущей позицией курсора и переходит в режим ввода.

: wq

Записывает текущий файл и завершает работу.

: q!

Выходит из файла без внесения изменений. ! заставляет команду делать свою работу. Добавляйте символ ! если вы действительно знаете, что делаете.

: w filename

Записывает текущий файл с новым именем filename.

dd

Удаляет текущую строку.

yy

Копирует текущую строку.

P

Вставляет текущий выбор.

v u Ctrl-r

Переход в визуальный режим, в котором можно выделить блок текста с помощью клавиш стрелки. Используйте d, чтобы вырезать выделение, или y, чтобы скопировать его. Отменяет последнюю команду. Повторяйте столько раз, сколько необходимо. Повторяет последнюю отмену. 42

gg

Переход к первой строке документа.

G

Переход к последней строке в документе.

/text

Ищет текст от текущей позиции курсора вперед.

?text

Ищет текст от текущей позиции курсора назад.

^

Переход к первой позиции в текущей строке.

$

Переход к последней позиции в текущей строке.

!ls

Добавляет вывод ls (или любой другой команды) в текущий файл.

:%s/old/new/g

Заменяет все найденные слова правой части (old) на указанное новое (new) в левой части команды.

Обратите внимание, что вы знаете самые важные команды для работы с vim. Упражнение 2–5 дает вам возможность проверить их. Упражнение 2-5 Практика c редактором vim 1. Введите vim ~/testfile. Это запускает vim и открывает для редактирования файл с именем testfile в ~, который представляет ваш текущий домашний каталог. 2. Введите i, чтобы войти в режим ввода, а затем введите следующий текст: корова овца бык курица змея рыба кислород 3. Нажмите Esc, чтобы вернуться в командный режим, и введите :w, чтобы записать файл с тем же именем файла. 4. Введите :3, чтобы перейти к строке номер 3. 5. Введите dd, чтобы удалить эту строку. 6. Введите dd еще раз, чтобы удалить еще одну строку. 7. Введите u, чтобы отменить последнее удаление. 8. Введите o, чтобы открыть новую строку. 9. Введите еще текст в текущую позицию курсора: дерево ферма 10. Нажмите Esc, чтобы вернуться в командный режим. 11. Введите :%s/бык/БЫК/g. 12. Введите: wq, чтобы записать файл и выйти. Если по какой-то причине это не сработает, использование: wq!.

Понимание окружающей среды Shell 43

Когда вы работаете из оболочки (shell), создается среда, гарантирующая, что все, что происходит, происходит правильно. Эта среда состоит из переменных, которые определяют пользовательскую среду, таких как переменная $PATH, описанная ранее. В этом разделе вы получите краткий обзор среды shell и ее создания. Понимание переменных Среда shell Linux состоит из множества переменных. Переменные - это фиксированные имена, которым можно присвоить динамические значения. Примером переменной является $LANG, которая в моей оболочке установлено значение en_US.UTF-8. Это значение (которое может отличаться в вашей системе) гарантирует, что я могу работать на английском языке, используя общие настройки для английского языка (подумайте, как отображаются дата и время). Преимущество скриптов и программ для работы с переменными состоит в том, что программа должна использовать только имя переменной, не интересуясь конкретным значением, присвоенное переменной. Поскольку у разных пользователей разные потребности, переменные, устанавливаемые в пользовательской среде, будут разными. Чтобы получить обзор текущих переменных, определенные в среде оболочки, введите команду env, которая отобразит переменные среды. В примере 2-1 показаны некоторые строки вывода этой команды. Пример 2-1 Отображение текущей среды

Как видно из примера 2-1, чтобы определить переменную, вы вводите имя переменной, за которым следует знак равенства (=) и значение, присвоенное конкретной переменной. Чтобы прочитать значение переменной, вы можете использовать команду echo (среди прочего), за которой следует имя переменной, как в echo $PATH, которая считывает текущее значение переменной $PATH и печатает его в STDOUT. На данный момент вам не нужно больше знать о переменных. Вы можете прочитать о более сложном использовании переменных в главе 19, «Введение в сценарии оболочки Bash». Распознавание файлов конфигурации среды Когда пользователь входит в систему, для него автоматически создается среда. Это происходит на основе четырех разных файлов конфигурации, в которых можно указать некоторый код сценария и где переменные могут быть определены для использования одним конкретным пользователем: 44

▪ ▪ ▪ ▪

/etc/profile: это общий файл, который обрабатывается всеми пользователями при входе в систему. /etc/bashrc: этот файл обрабатывается при запуске подоболочки. ~/.bash_profile: в этом файле могут быть определены пользовательские переменные оболочки входа в систему. ~/.bashrc: в этом пользовательском файле могут быть определены переменные подоболочки.

Как вы видели, в этих файлах делается различие между shell входа и подоболочкой. Оболочка (shell) входа - это первая оболочка, которая открывается для пользователя после входа в систему. Из оболочки входа пользователь может запускать сценарии, которые запускают подоболочку этой оболочки входа. Bash позволяет создавать разные среды в оболочке входа и в подоболочке, но, чтобы убедиться, что одни и те же настройки используются во всех оболочках, рекомендуется также включить настройки подоболочки в оболочку входа. Использование /etc/motd и /etc/issue Для отображения сообщений во время входа в систему Bash использует файлы /etc/motd и /etc/issue. Сообщения в /etc/motd отображаются после того, как пользователь успешно вошел в систему. (Обратите внимание, что пользователи в графической среде не видят его содержимое после графического входа в систему.) Использование /etc/motd может быть удобным способом для системных администраторов, например, информировать пользователей о проблеме или политике безопасности. Другой способ отправить информацию пользователям – использовать файл /etc/issue. Содержимое этого файла отображается до того, как пользователь войдет в систему. Это отличный способ указать конкретные инструкции для входа в систему для пользователей, которые еще не вошли в систему. В упражнении 2-6 вы можете просмотреть темы, которые обсуждались в этом разделе. Упражнение 2-6 Управление окружающей средой оболочки (shell) 1. Откройте shell, в которой вы являетесь пользователем. 2. Введите echo $LANG, чтобы отобразить содержимое переменной, которая задает системные настройки клавиатуры и языка. 3. Введите ls --help. Вы увидите, что справка о команде ls отображается в текущих языковых настройках вашего компьютера. 4. Введите LANG=es_ES.UTF-8. Это временно устанавливает для языковой переменной испанский. 5. Снова введите ls --help. Вы увидите, что теперь текст справки ls отображается на испанском языке. 6. Введите exit, чтобы закрыть окно терминала. Поскольку вы не изменяли содержимое ни одного из ранее упомянутых файлов, при открытии новой оболочки будет использоваться исходное значение переменной LANG. 7. Снова откройте оболочку как пользователь. 8. Проверьте текущее значение переменной LANG, набрав echo $ LANG или printenv LANG 9. Введите vim .bashrc, чтобы открыть файл конфигурации .bashrc. 10. В этом файле добавьте строку COLOR=red, чтобы установить переменную с именем COLOR и присвоить ей значение red. Обратите внимание, что эта переменная на самом деле ничего не меняет в вашей системе; он просто устанавливает переменную. 11. Закройте оболочку пользователя и откройте новую оболочку пользователя. 45

12. Убедитесь, что переменная COLOR установлена, используя echo $COLOR. Поскольку файл .bashrc включен в процедуру входа в систему, переменная устанавливается после входа в систему.

Поиск помощи В средней системе Linux доступны сотни команд - слишком много, чтобы запомнить их все, поэтому использование ресурсов справки на вашем компьютере так важно. Команда man - самый важный ресурс для получения справки о синтаксисе и использовании команд. Кроме того, вы можете отобразить компактный список параметров команды, command --help. Использование --help Самый быстрый способ получить обзор того, как использовать команду, - это запустить команду с параметром --help. При использовании этой опции почти все команды будут отображать сводку использования. Список параметров, который показан таким образом, используется в основном, когда у вас уже есть общее представление о том, как использовать команду и вам нужен быстрый обзор параметров, доступных с командой - он не дает подробной информации, которая поможет пользователям кто еще не знает команду. СОВЕТ При использовании параметра --help почти все команды предоставляют краткий обзор справки. Некоторые команды не учитывают эту опцию и считают ее ошибочной. К счастью, эти команды будут настолько удобными, что будут отображать сообщение об ошибке, отображающие допустимые параметры с командой, что фактически означает, что вы все равно получите то, что вам нужно. Использование команды man (manual) При использовании командной строки Linux вы в какой-то момент обратитесь к страницам руководства. Команда man - это то, что делает возможной работу из командной строки. Если вы не знаете, как используется команда, справочная страница этой команды предоставит ценную информацию. В этом разделе рассказывается о нескольких важных моментов о man. Начнем с того, что наиболее важные части справочной страницы в целом находятся внизу справочной страницы. Здесь вы найдете два важных раздела: во многих случаях есть примеры; если нет примеров, всегда есть раздел «См. также» (“See Also”). Темы, которые вы здесь найдете, представляют собой связанные справочные страницы, что полезно, если вы просто не попали на нужную справочную страницу. Чтобы добраться до конца страницы руководства, как можно быстрее, используйте команду G. Вы также можете ввести /example, чтобы найти на странице руководства любые примеры. На рис. 2-1 показано, как может выглядеть конец страницы руководства.

РИСУНОК 2-1 Образец содержания страницы man

46

Поиск нужных страниц man Чтобы найти информацию на страницах руководства, если у вас новая установка вам может понадобиться выполнить поиск в базе данных командой mandb, только после этого можно используя команды apropos или man -k. Если база данных актуальна, получить доступ к необходимой информации очень просто. Просто введите man -k, а затем ключевое слово, которое вы хотите найти. Эта команда просматривает сводку всех страниц руководства, которые хранятся в базе данных mandb. В примере 2-2 показан частичный результат этой команды. Пример 2-2 Поиск man-страниц с помощью man -k

47

Основываясь на информации, которую дает вам man -k, вы, вероятно, сможете определить справочную страницу, к которой вам нужно получить доступ, чтобы делать то, что вы хотите выполнить. Однако имейте в виду, что man -k не идеален; он ищет только краткую сводку по каждой установленной команде. Если вашего ключевого слова нет в сводке, вы ничего не найдете и получите сообщение об ошибке «ничего подходящего» (“nothing appropriate”). СОВЕТ Вместо использования man -k вы можете использовать команду apropos, которая эквивалентна man -k. При использовании команды man -k для поиска конкретной информации на страницах руководства вы иногда можете получить массу информации. Если это произойдет, немного отфильтровать результаты может помочь команда grep. Но если вы хотите это сделать, важно знать, что вы ищете. Страницы руководства разделены на разные разделы. Наиболее актуальные разделы для системных администраторов: ▪ ▪ ▪

1: исполняемые программы или команды оболочки 5: Форматы файлов и соглашения 8: Команды системного администрирования

Есть также разделы, в которых подробно рассказывается о вашей системе Linux, например, о системных вызовах и вызовах библиотек. При использовании man -k вы получите результаты из всех этих разделов. Чтобы ограничить отображаемые результаты, имеет смысл использовать grep, чтобы отображать только те разделы, которые имеют отношение к тому, что вам нужно. Итак, если вы ищете файл конфигурации, имеющий отношение к паролям, используйте команду man -k password | grep 5, или если вы ищете команду, которую администратор будет использовать для создания разделов, используйте команду man -k partition | grep 8. Еще одна полезная опция man -f. Команда man -f отображает краткое описание элемента, найденное в базе данных mandb. Это может помочь вам при принятии решения, содержит ли эта справочная страница информацию, которую вы ищете. Обновление mandb Как упоминалось ранее, при использовании команды man -k выполняется обращение к базе данных mandb. Эта база данных создается автоматически с помощью запланированного задания cron. Иногда вы можете искать что-то, что, очевидно, должно быть задокументировано, но все, что вы получаете, - это сообщение «ничего подходящего» (“nothing appropriate.). Если это произойдет, вам может потребоваться обновить базу данных mandb. Сделать это просто: запустите команду mandb от имени пользователя root без каких-либо аргументов. Он увидит, были ли установлены новые страницы руководства, и соответственно обновит базу данных mandb. СОВЕТ Не пытайтесь запомнить все команды, необходимые для выполнения определенных задач. Вместо этого запомните, как найти эти команды, и найдите, какую справочную страницу следует прочитать, чтобы получить дополнительную информацию о команде. В упражнении 2-7 вы увидите, как это работает. Предположим, вы ищете команду, используя man -k, но все, что вы получаете, это сообщение «ничего подходящего», и вы не помните, как это исправить. В упражнении 2-7 показано, что вы можете сделать в таких случаях.

48

Упражнение 2-7. Использование man -k 1. Поскольку man - k не дает ожидаемого результата, имеет смысл поискать на странице руководства команду man для получения дополнительной информации о man -k. Введите man man, чтобы открыть справочную страницу man. Оказавшись на странице руководства, введите /-k, чтобы найти описание параметра -k. Введите n несколько раз, пока не дойдете до строки с описанием опции. Вы увидите, что man -k эквивалентно apropos и что вы можете прочитать справочную страницу apropos для получения более подробной информации. Итак, введите q, чтобы закрыть эту страницу руководства. 2. Наберите man apropos и прочтите первые абзацы описания. Вы увидите, что база данных, которую искал apropos, обновляется программой mandb. 3. Введите man mandb. Эта страница руководства объясняет, как запустить mandb для обновления базы данных mandb. По мере чтения все, что вам нужно сделать, это набрать mandb, который сделает всю работу за вас. 4. Введите mandb, чтобы обновить базу данных mandb. Обратите внимание, что вы не увидите много добавляемых страниц руководства, если база данных mandb уже была достаточно точной. Использование команды info Помимо информации, которую вы найдете на страницах руководства, другая система предоставляет помощь по использованию команд. Это информационная система. Большинство команд задокументировано на страницах руководства, но некоторые команды имеют основную документацию в информационной системе, и на странице руководства отображается только краткое описание использования. Если это так, в разделе «См. Также» на странице руководства по этой команде будет сказано, что «Полный документация для… поддерживается как руководство в формате Texinfo ». Затем вы можете прочитать информационную страницу, используя команду pinfo или info. Обе команды работают, но в pinfo специальные элементы, такие как пункты меню, четко обозначены, поэтому использовать pinfo проще. При работе с информацией смотрите на верхнюю строку программы просмотра. Это показывает текущую позицию в информационном документе. Особенно интересны индикаторы «Вверх», «Далее» и «Назад», которые рассказывают, как ориентироваться. Информационные страницы организованы как веб-страницы, что означает, что они организованы иерархически. Чтобы просмотреть эту иерархию, введите n, чтобы перейти на следующую страницу, p, чтобы перейти на предыдущую страницу, или u, чтобы перейти вверх по иерархии. На информационной странице вы также найдете меню. Каждый пункт, отмеченный звездочкой (*), является пунктом меню. Используйте клавиши со стрелками для выбора определенного пункта меню. Это опустит вас на один уровень. Чтобы снова подняться, введите u. Это вернет вас к исходной начальной точке в иерархии pinfo. На рис. 2-2 показано, как выглядит информационная страница. В упражнении 2-8 показан пример такой команды, и в этом упражнении вы узнаете, как получить информацию с информационной страницы. Упражнение 2-8 Использование информации 1. Введите man ls. После открытия страницы введите G, чтобы перейти в конец страницы руководства и просмотреть раздел «См. Также». Он сообщает вам, что полная документация по ls поддерживается в виде руководства в формате Texinfo. Закройте страницу руководства, нажав q. 49

2. Введите команду pinfo coreutils 'ls invocation'. Это показывает информацию об использовании ls на странице pinfo. Прочтите его и нажмите q, когда закончите. РИСУНОК 2-2. Получение дополнительной информации об использовании команд с помощью pinfo

Использование файлов документации /usr/share/doc Третий источник информации - это файлы, которые иногда копируются в каталог /usr/share/doc. Это происходит, в частности, для сервисов и более крупных систем это немного сложнее. Обычно вы не найдете много информации о такой команде, как ls, но некоторые cлужбы предоставляют полезную информацию в /usr/share/doc. Некоторые службы хранят в этом каталоге очень полезную информацию, например, rsyslog, bind, Kerberos и OpenSSL. Для некоторых сервисов включены даже файлы примеров. Одним из примеров таких сервисов является VDO, который более подробно рассматривается в главе 15 «Управление расширенным хранилищем».

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

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во введении, у вас есть несколько вариантов подготовки к экзамену: лабораторные работы в конце главы; таблицы в Приложение B; Глава 26, «Заключительная подготовка»; и практические экзамены.

50

Просмотрите все ключевые темы

Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 2-5 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 2-5 Ключевые темы главы 2 Элемент ключевой темы

Описание

Страница

Таблица 2-4

Основные команды vim

42

Список

Значимые разделы в man

49

Заполните таблицы и списки для памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем вебсайте) или, по крайней мере, раздел этой главы, и заполните таблицы и памятки. Приложение C, «Ключ ответов к таблицам памяти», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: shell, bash, internal command, external command, $PATH, variable, STDIN, STDOUT, STDERR, file descriptor, pipe, redirect, device files, environment, login shell, subshell (оболочка, bash, внутренняя команда, внешняя команда, $ PATH, переменная, STDIN, STDOUT, STDERR, дескриптор файла, конвейер, перенаправление, файлы устройства, среда, оболочка входа, подоболочка)

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Что такое переменная? 2. Какая команда позволяет найти правильную страницу руководства на основе использования ключевых слов? 3. Какой файл вам нужно изменить, если вы хотите, чтобы переменная задавалась для каждой запускаемой оболочки? 4. Анализируя, как использовать команду, вы читаете, что документация поддерживается системой Techinfo. Как можно прочитать информацию? 5. Как называется файл, в котором Bash хранит свою историю? 6. Какая команда позволяет обновлять базу данных, содержащую ключевые слова man? 7. Как вы можете отменить последнюю модификацию, которую вы применили в vim? 8. Что вы можете добавить к команде, чтобы убедиться, что она не выводит сообщение об ошибке, при условии, что вам не важна информация, содержащаяся в сообщениях об ошибках? 9. Как вы читаете текущее содержимое переменной $PATH? 10. Как повторить последнюю использованную команду, содержащую строку dog где-нибудь в команде? 51

Лабораторная работа в конце главы Теперь вы узнали о некоторых из наиболее важных базовых навыков, которыми должен обладать администратор Linux. В этом разделе вы примените эти навыки, выполнив лабораторную работу в конце главы. Лабораторная работа 2.1 1. Измените среду оболочки (shell environment) так, чтобы для каждой запущенной подоболочки (subshell) устанавливалась переменная. Имя переменной должно быть COLOR, а значение должно быть red. Убедитесь, что он работает. 2. Используйте соответствующие инструменты, чтобы найти команду, с помощью которой можно установить системное время на 1 минуту вперед. 3. В своем домашнем каталоге введите команду ls -al wergihl * и убедитесь, что ошибки, а также обычный вывод перенаправляются в файл с именем /tmp/lsoutput.

52

Глава 3 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Работа с иерархией файловой системы Управление файлами Использование ссылок Работа с архивами и сжатыми файлами

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪ ▪

Создавать, удалять, копировать и перемещать файлы и каталоги. Архивировать, сжимать, распаковывать и распаковывать файлы с помощью tar, star, gzip и bzip2. Создавайте жесткие и символические ссылки.

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

Основные инструменты управления файлами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 3-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 3 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Работа с иерархией файловой системы

1–4

Управление файлами

5–7

Использование ссылок

8

Работа с архивами и сжатыми файлами

10

1. В каком каталоге вы ожидаете найти ненужные программные файлы? a. /etc b. /boot 53

c. /home d. /usr 2. В каком каталоге вы ожидаете найти файлы журналов? a. b. c. d.

mount mount -a df -hT du –h

3. Какие из следующих каталогов обычно не монтируются на собственном выделенном устройстве? a. b. c. d.

/etc /boot /home /usr

4. Какая из следующих команд даст наиболее точный обзор смонтированных дисковых устройств (без отображения дополнительной информации о смонтированных системных устройствах)? a. b. c. d.

mount mount -a df -hT du –h

5. Какая команда позволяет отображать все файлы в текущем каталоге, чтобы самые новые файлы указывались последними? a. b. c. d.

ls -lRt ls -lrt ls -alrt ls –alr

6. Какая команда позволяет копировать как скрытые, так и обычные файлы из /home/$ USER в текущий каталог? a. b. c. d.

cp -a /home/$USER . cp -a /home/$USER/* . cp -a /home/$USER/. . cp -a home/$USER. .

7. Какая команда позволяет вам переименовать файл myfile в mynewfile? a. b. c. d.

mv myfile mynewfile rm myfile mynewfile rn myfile mynewfile ren myfile mynewfile

8. Какое утверждение о жестких ссылках не соответствует действительности? a. Невозможно создать жесткие ссылки на каталоги. b. Жесткие ссылки не могут ссылаться на файлы на других устройствах. 54

c. Inode хранит счетчик жестких ссылок. d. Если исходная жесткая ссылка удалена, все остальные жесткие ссылки станут недействительными. 9. Какая команда создает символическую ссылку на каталог /home в каталоге /tmp? a. b. c. d.

ln /tmp /home ln /home /tmp ln -s /home /tmp ln -s /tmp /home

10. Какая опция tar позволяет добавить один файл в архив tar? a. b. c. d.

-a -A -r –u

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

Определение иерархии файловой системы Файловая система в большинстве систем Linux организована аналогичным образом. Структура файловой системы Linux определена в Стандарте иерархии файловой системы (Filesystem Hierarchy Standard (FHS)), и эта иерархия файловой системы описана в man 7. В таблице 3-2 приведен обзор наиболее важных каталогов, которые вы встретите в системе Red Hat Enterprise Linux (RHEL), как указано в FHS.

Таблица 3-2 Обзор FHS Каталог

Назначение

/

Корневой каталог. Здесь начинается дерево файловой системы.

/boot

Содержит все файлы и каталоги, необходимые для загрузки ядра Linux.

/dev

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

/etc

Содержит файлы конфигурации, которые используются программами и службами на вашем сервере. Этот каталог важен во время загрузки.

55

/home /media, /mnt /opt /proc

Используется для домашних каталогов локальных пользователей. Содержат каталоги, которые используются для монтирования устройств в дереве файловой системы. Используется для дополнительных пакетов, которые могут быть установлены на вашем сервере. Используется файловой системой proc. Это структура файловой системы, которая дает доступ к информации ядра.

/root

Домашний каталог пользователя root.

/run

Содержит информацию о процессе и пользователя, созданную с момента последней загрузки.

/srv

Может использоваться для данных такими службами, как NFS, FTP и HTTP.

/sys /tmp /usr /var

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

Понимание монтирования (подключения) Для понимания организации файловой системы Linux важна концепция монтирования. Файловая система Linux представлена в виде одной иерархии с корневым каталогом (/) в качестве отправной точки. Эта иерархия может быть распределена по различным устройствам и даже компьютерным системам, которые смонтированы в корневом каталоге. В процессе монтирования устройство подключается к определенному каталогу, так что после успешного монтирования этот каталог предоставляет доступ к содержимому устройства. Монтирование устройств позволяет гибко организовать файловую систему Linux. Хранение всех файлов в одной файловой системе имеет несколько недостатков, что дает несколько веских причин для работы с несколькими точками монтирования: ▪ ▪



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

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

56

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







/boot: Этот каталог часто монтируется на отдельном устройстве, так как он требует существенной информации, необходимой для загрузки компьютера. Так как корневой каталог (/) часто находится на логическом томе Logical Volume Manager (LVM), с которого Linux не может загрузиться по умолчанию, ядро и связанные с ним файлы необходимо хранить отдельно на специальном устройстве /boot. /var: этот каталог часто находится на выделенном устройстве, потому что он увеличивается в размее динамически и неконтролируемым образом (например, из-за файлов журнала, которые записываются в /var/log). Установив его на специальное устройство, вы можете убедиться, что он не заполнит всю память на вашем сервере. /home: этот каталог часто находится на выделенном устройстве из соображений безопасности. Поместив его на выделенное устройство, его можно смонтировать с определенными параметрами, такими как noexec и nodev, для повышения безопасности сервера. При переустановке операционной системы лучше иметь домашние каталоги в отдельной файловой системе. При размещении на отдельной файловой системе домашние каталоги при необходимости могут пережить переустановку системы. /usr: Этот каталог содержит только файлы операционной системы, к которым обычным пользователям не требуется права записи. Размещение этого каталога на выделенном устройстве позволяет администраторам настроить его как монтирование только для чтения.

Помимо этих каталогов, вы можете найти серверы, на которых есть другие каталоги, которые также подключены к выделенным разделам или томам. В конце концов, решение о том, какие каталоги получат свои выделенные устройства, остается на усмотрение администратора. Чтобы получить обзор всех устройств и их точек монтирования, вы можете использовать разные команды: Команда mount дает обзор всех подключенных устройств. Чтобы получить эту информацию, читается файл /proc/mounts, в котором ядро хранит информацию обо всех текущих монтированиях. Он также показывает интерфейсы ядра, что может привести к отображению длинного списка подключенных устройств. В примере 3-1 показан пример вывода этой команды. Пример 3-1 Частичный вывод команды mount

57





Команда df -Th была разработана для отображения доступного дискового пространства на подключенных устройствах; вывод включает в себя большинство системных монтирований. Поскольку команда будет проверять все смонтированные файловые системы, это удобно для получения обзора текущих смонтированных систем. Параметр -h суммирует вывод команды в удобочитаемом виде, а параметр -T показывает, какой тип файловой системы используется при различных присоединение. Команда findmnt показывает подключения и отношения, существующие между различными монтированиями. Поскольку вывод команды mount немного перегружен, вам может понравиться вывод findmnt. В примере 3-2 показан пример вывода этой команды. Обратите внимание, что из-за ограничений ширины на странице книги выходные данные, относящиеся к столбцу OPTIONS, отображаются в левой части страницы. (при переводе для ясности вставлены рисунки)

Пример 3-2 Пример вывода данных команды findmnt

58

В упражнении 3-1 вы используете разные команды, чтобы получить обзор установленных в данный момент устройств. Упражнение 3-1 Обзор под монтированных устройств 1. Войдите в систему как обычный пользователь и введите mount. Обратите внимание, что вывод команды довольно ошеломляющий. Однако если вы внимательно прочитаете, вы увидите несколько каталогов из структуры каталогов Linux и их соответствующие точки монтирования. 2. Теперь введите df -hT. Обратите внимание, что отображается намного меньше устройств. Пример вывода этой команды показан далее в Примере 3-3. Пример 3-3 df -hT Пример вывода (при переводе вставлен скрин)

Теперь, когда вы ввели команды mount и df, давайте внимательнее посмотрим на вывод команды df -hT в примере 3-3. Вывод df отображается в семи столбцах: ▪

▪ ▪ ▪ ▪ ▪ ▪

Файловая система(Filesystem): имя файла устройства, который взаимодействует с используемым дисковым устройством. Реальные устройства в выводе начинаются с /dev (который относится к каталогу, который используется для хранения файлов устройств). Вы также можете увидеть пару устройств tmpfs. Это устройства ядра, которые используются для создания временной файловой системы в ОЗУ. Тип(Type): тип использованной файловой системы. Размер(Size): размер установленного устройства. Используется(Used): объем дискового пространства, которое используется устройством. Доступно(Avail): количество неиспользуемого дискового пространства. Использовано%( Use): процент устройства, которое в настоящее время используется. Подмонтированый на (Mounted on): каталог, в котором в настоящее время смонтировано устройство.

Обратите внимание, что при использовании команды df размеры указываются в килобайтах. Параметр -m отобразит их в мегобайтах, а использование -h отобразит удобочитаемый формат в KiB, MiB, GiB, TiB или PiB.

Управление файлами

59

Как администратор, вы должны иметь возможность выполнять общие задачи по управлению файлами. Эти задачи включают следующее: ▪ ▪ ▪ ▪ ▪ ▪ ▪

Работа с подстановочными знаками (wildcards) Управление каталогами и работа с ними Работа с абсолютными и относительными путями Список файлов и каталогов Копирование файлов и каталогов Перемещение файлов и каталогов Удаление файлов и каталогов

В следующих подразделах объясняется, как выполнять эти задачи. Работа с подстановочными знаками При работе с файлами использование подстановочных знаков может значительно облегчить вашу работу. Подстановочный знак - это функция оболочки, которая помогает вам легко ссылаться на несколько файлов. Таблица 3-3 дает обзор подстановочных символов.

Таблица 3-3 Обзор подстановочных знаков (Wildcard) Подстановочный знак

Использовать

*

Относится к неограниченному количеству любых символов. ls*, например, показывает все файлы в текущем каталоге (кроме тех, имя которых начинается с точки).

?

Используется для обозначения одного конкретного символа, которым может быть любой символ. ls c?t будет соответствовать cat, а также cut.

[auo]

Относится к одному символу, который может быть выбран из диапазона, указанного в квадратных скобках. ls c[auo]t будет соответствовать cat, cut, и cot..

Управление каталогами и работа с ними Для организации файлов Linux работает с каталогами (также называемыми папками). Вы уже читали о некоторых каталогах по умолчанию, определенных FHS. Когда пользователи начинают создавать файлы и хранить их на сервере, имеет смысл также предоставить структуру каталогов. Как администратор, вы должны иметь возможность перемещаться по структуре каталогов. В упражнении 3-2 вы попрактикуетесь в работе с каталогами. Упражнение 3-2 Работа с каталогами 1. Откройте оболочку как обычный пользователь. Введите cd. Далее введите pwd, что расшифровывается как print working directory (вывести имя текущего каталога). Вы

60

2.

3.

4.

5. 6.

7.

8.

увидите, что в данный момент находитесь в своем домашнем каталоге, то есть /home/ Введите touch file1. Эта команда создает на вашем сервере пустой файл с именем file1. Поскольку вы в настоящее время находитесь в своем домашнем каталоге, вы можете создать любой файл или каталог, который вы посчитаете необходимым. Введите cd /. Данная команда изменяет текущий каталог на корневую (/) директорию. Введите touch file2. Вы увидите сообщение «В разрешении отказано (permission denied)». Обычные пользователи могут создавать файлы только в тех каталогах, в которых у них есть необходимые для этого разрешения. Введите cd /tmp. Выполнение команды приведет вас в каталог /tmp, где все пользователи имеют права на запись. Снова введите touch file2. Вы увидите, что вы можете создавать разные элементы в каталоге /tmp (если еще нет файла с именим file2, который принадлежит другому пользователю). Введите cd без аргументов. Эта команда возвращает вас в ваш домашний каталог. Введите mkdir files. Это создает каталог с именами files в текущем каталоге. Команда mkdir использует имя каталога, который должен быть создан в качестве от носительного имени; оно относится к позиции, в которой вы в данный момент находитесь. Введите mkdir /home/$USER/files. В этой команде вы используете переменную $USER, которая замениться вашим текущим именем пользователя. Полный аргумент mkdir - это абсолютное имя файла для файлов каталога, которые вы пытаетесь создать. Поскольку этот каталог уже существует, вы получите сообщение об ошибке «файл существует (file exists)». Введите rmdir files, чтобы удалить только что созданные файлы каталога. Команда rmdir позволяет удалять каталоги, но работает только в том случае, если каталог пуст, не содержит файлов.

Работа с абсолютными и относительными путями В предыдущем разделе вы работали с командами cd и mkdir. Вы использовали эти команды для просмотра структуры каталогов. Вы также работали с относительным именем файла и абсолютным именем файла.

Абсолютное имя файла (absolute filename) или абсолютный путь (absolute pathname) - это полный путь к файлу или каталогу, с которым вы хотите работать. Этот путь начинается с корневого каталога, за которым следуют все подкаталоги вплоть до фактического имени файла. Независимо от того, какой у вас текущий каталог, всегда будут работать абсолютные имена файлов. Примером абсолютного имени файла является /home/lisa/file1.

Относительное имя файла относится к текущему каталогу, как показано с помощью команды pwd. Он содержит только те элементы, которые необходимы для получения из текущего каталога до нужного вам элемента. Предположим, что ваш текущий каталог - /home (как показано командой pwd). Когда вы ссылаетесь на относительное имя файла lisa/file1, вы имеете в виду абсолютное имя файла /home/lisa/file1. При работе с относительными именами файлов иногда полезно подняться на один уровень иерархии. Представьте, что вы вошли в систему как root и хотите скопировать файл /home/lisa/file1 в каталог /home/lara. Для этого подойдут несколько решений:

61



Используйте cp /home/lisa/file1 /home/lara. Поскольку в этой команде вы используете абсолютные пути, эта команда будет работать всегда. Убедитесь, что ваш текущий каталог /home, и используйте cp lisa/file1 lara. Обратите внимание, что как исходный файл, так и файл назначения упоминаются как относительные имена файлов и по этой причине не начинаются с символа /. Если текущий каталог установлен в /home/lisa, вы также можете использовать cp file1 ../lara. В этой команде в имени целевого файла используется (..), что означает переход на один уровень выше. После (..) следует /lara, поэтому полное имя целевого файла будет интерпретировано как «подняться на один уровень» (так что вы окажетесь в /home), а оттуда найдите подкаталог /lara.

▪ ▪

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

В главе 2, «Использование основных инструментов», вы узнали, как можно использовать завершение Bash с помощью клавиши Tab для выполнения команд. Использование авто дополнения Bash значительно упрощает работу с длинными командами. Авто завершение Bash работает и с именами файлов. Если у вас длинное имя файла, например my-long-file-name, попробуйте ввести my- и нажмите клавишу TAB. Если в текущем каталоге только один файл имеет имя, начинающееся с my-, имя файла будет автоматически добавлено. Если есть другие файлы, имена которых начинаются с my-, вам нужно дважды нажать клавишу TAB, чтобы увидеть список всех доступных имен файлов. Список файлов и каталогов При работе с файлами и каталогами полезно отображать содержимое текущего каталога. Для этого вы можете использовать команду ls. Если использовать команду без аргументов, ls показывает содержимое текущего каталога. Некоторые распространенные аргументы облегчают работу с ls. Таблица 3-4 дает их обзор.

Таблица 3-4 Общие параметры командной строки ls Команда

Использование

ls -l

Показывает длинный список, который включает информацию о свойствах файла, таких как дата создания и разрешения.

ls -a

Показывает все файлы, включая скрытые.

ls -lrt

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

ls -d

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

ls -R

Показывает содержимое текущего каталога в дополнение ко всем его подкаталогам; то есть он рекурсивно спускается по всем подкаталогам. 62

СОВЕТ Скрытый файл в Linux - это файл, имя которого начинается с точки. Выполните следующую команду: touch .hidden. Затем введите ls. Вы не увидите созданный файл. Затем введите ls -a. Теперь вы сможете его увидеть. При использовании ls и ls -l вы увидите, что файлы имеют разную цветовую градацию. Разные цвета, используемые для разных типов файлов, позволяют легче различать разные типы файлов. Однако не зацикливайтесь на них слишком сильно, потому что цвета, являются результатом настройки переменной, которая может отличаться в других оболочках Linux или на других серверах Linux. Копирование файлов Чтобы упорядочить файлы на своем сервере, вы часто будете копировать файлы. В этом вам поможет команда cp. Копирование одного файла несложно: просто используйте команду с указанием необходимых аргументов cp /path/to/file /path/to/destination. Для примера, что бы скопировать файл /etc/hosts в каталог /tmp, используйте cp /etc/hosts /tmp. В результате файл hosts записывается в каталог /tmp. СОВЕТ Если вы копируете файл в каталог, но целевой каталог не существует, будет создан файл с именем предполагаемого целевого каталога. Во многих случаях это не лучшее решение, и было бы лучше просто получить сообщение об ошибке. Вы можете сделать это, поместив / после имени каталога, поэтому используйте cp /etc/hosts/tmp/, а не cp /etc/hosts/tmp. С помощью команды cp вы можете скопировать весь подкаталог с его содержимым и всем, что находится под ним. Для этого используйте параметр -R, что означает рекурсивный. (Вы также увидите параметр -R со многими другими командами Linux.) Например, чтобы скопировать каталог /etc и всё, что находится в нем, в каталог /tmp, вы должны использовать команду cp -R /etc/sound. При использовании команды cp необходимо учитывать разрешения и другие свойства файлов. Без дополнительных опций вы рискуете, что эти свойства не будут скопированы. Если вы хотите убедиться, что сохраняете текущие разрешения, используйте параметр -a, который позволяет cp работать в режиме архива. Эта опция гарантирует, что разрешения и все другие свойства файла будут сохранены во время копирования. Итак, чтобы скопировать точное состояние вашего домашнего каталога и всего, что внутри него, в каталог /tmp, используйте cp -a ~ /tmp. Особый случай при работе с командой cp - это скрытые файлы. По умолчанию скрытые файлы не копируются. Есть три решения для копирования скрытых файлов: ▪ ▪ ▪

cp /somedir/.* /tmp Копирует все файлы, имена которых начинаются с точки (то есть скрытые файлы), в /tmp. Он выдает сообщение об ошибке для каталогов, имя которых начинается с точки в /somedir, потому что параметр -R не использовался. cp -a /somedir/ . Это копирует весь каталог /somedir, включая его содержимое, в текущий каталог. Итак, в результате подкаталог somedir будет быть создан в текущем каталоге. cp -a / somedir/ .. Будут скопированы все файлы, обычные и скрытые, в текущий каталог (обратите внимание на пробел между двумя точками в конце этой команды).

Перемещение файлов 63

Чтобы переместить файлы, вы используете команду mv. Эта команда удаляет файл из его текущего местоположения и помещает его в новое местоположение. Вы также можете использовать его для переименования файла (что, по сути, есть не что иное, как копирование и удаление исходного файла). Давайте посмотрим на несколько примеров: ▪ ▪ ▪

mv myfile /tmp: перемещает файл myfile из текущего каталога в / tmp. mkdir somefiles; mv somefiles /tmp: сначала создает каталог с именем somefiles, а затем перемещает созданный каталог в /tmp. Обратите внимание, что это также работает, если каталог не пустой и содержит файлы. mv myfile mynewfile: переименовывает файл myfile в новый файл с именем mynewfile.

Удаление файлов Последняя распространенная задача администрирования файлов - это удаление файлов. Чтобы удалить файлы или каталоги, вы используете команду rm. При выполнении команды применительно к одному имени файла, удалиться файл с указанным именем. Вы также можете использовать команду применительно к каталогам, содержащих файлы. Для этого включите параметр -r, который снова означает рекурсивный. ПРИМЕЧАНИЕ. Многие команды имеют параметр, который задаёт рекурсивное поведение. В некоторых командах вы используете опцию -R, а в других командах вы используете опцию -r. Это сбивает с толку, но так оно и есть.

В RHEL 8, если вы используете команду rm как root, команда запрашивает подтверждение для удаления. Это потому, что в /root/.bashrc rm определяется как alias rm -i. Если вам это не нравится, вы можете использовать параметр -f или удалить alias из /root/.bashrc. Убедитесь, что вы знаете, что делаете, когда используете эту опцию, потому что после ее использования нет пути назад, кроме восстановления из бэкапа! В упражнении 3-3 вы работаете с обычными утилитами управления файлами. ПРИМЕЧАНИЕ. В этом упражнении точки важны и используются как часть команд. Чтобы избежать путаницы, если обычно точка используется для обозначения конца предложения, в этом упражнении мы не использовали ее, если она следует сразу за командой.

Упражнение 3-3 Работа с файлами На рис. 3-1 представлен обзор структуры каталогов, с которой вы работаете в этом упражнении. РИСУНОК 3-1 Обзор примерной структуры каталогов

64

1. Откройте shell как обычный пользователь. 2. Введите pwd. Вы должны быть в каталоге /home/$USER (примечание переводчика: для примера /home/alex (где alex) имя пользовательского каталога). 3. Введите mkdir newfiles oldfiles. Наберите команду ls Вы увидите два только что созданных каталога. 4. Введите touch newfiles/.hidden и touch newfiles/unhidden. Это создает два файла в каталоге newfiles. 5. Введите cd oldfiles. 6. Введите ls -al Здесь показаны только два элемента: (.), Который относится к текущему каталогу; и (..), который относится к элементу выше (родительский каталог). 7. 7. Введите ls -al ../newfiles. В этой команде вы используете относительный путь для ссылки на содержимое каталога /home/$USER/newfiles. 8. Используйте команду cp -a ../newfiles/ . (обратите внимание на пробел между / и . в конце команды). 9. Введите ls -a Вы видите, что вы создали подкаталог newfiles в каталоге oldfiles. 10. Убедитесь, что вы по-прежнему находитесь в /home/$USER/oldfiles, и введите rm -rf newfiles. 11. Теперь используйте команду cp -a ../newfiles/* .. (обратите внимание на пробел между * и ..). Введите ls -al, чтобы увидеть, что скопировано сейчас. Вы увидите, что скрытый файл не был скопирован. 12. Чтобы убедиться, что вы копируете не только обычные, но и скрытые файлы, используйте cp -a ../newfiles/ .. 13. Убедитесь, что на этот раз команда сработала, используя ls -al. Вы заметите, что скрытые файлы, как и обычные файлы, были успешно скопированы.

Использование ссылок Ссылки в Linux похожи на псевдонимы, назначаемые файлу. Есть символические ссылки и есть жесткие ссылки. Чтобы понять ссылку, вам нужно немного узнать о том, как файловая система Linux использует inodes для администрирования файловой системы.

Объяснение жестких ссылок

65

Linux хранит административные данные о файлах в индексных дескрипторах. Inode используется для хранения всех административных данных о файлах. Каждый файл в Linux имеет индексный дескриптор, и в нем хранится важная информация о файле: ▪ Блок данных, в котором хранится содержимое файла. ▪ Дата создания, доступа и изменения ▪ Разрешения ▪ Владельцы файлов В индексном дескрипторе не хранится только одна важная информация: имя файла. Имена хранятся в каталоге, и каждое имя файла знает, к какому inode оно должно обратиться для доступа к дополнительной информации о файле. Интересно знать, что индексный дескриптор не знает, какое имя он имеет; он просто знает, сколько имен связано с индексный дескриптор. Эти имена называются жесткими ссылками. Когда вы создаете файл, вы даете ему имя. По сути, это имя жесткая ссылка. В файловой системе Linux можно создать несколько жестких ссылок на файл. Это может быть полезно, поскольку позволяет получить доступ к файлу из нескольких разных мест. Однако к жестким ссылкам применяются некоторые ограничения: ▪ ▪ ▪

Все жесткие ссылки должны существовать на одном устройстве (разделе, логическом томе и т.д.). Вы не можете создавать жесткие ссылки на каталоги. Когда последние имя (жесткая ссылка) файла удаляется, доступ к данным файла также удаляется.

Хорошая вещь о жестких ссылках заключается в том, что между первой жесткой ссылкой и второй жесткой ссылкой нет разницы. Они обе являются просто жесткими ссылками, и если первая жесткая ссылка, которая когда-либо существовала для файла, была удалена, это не повлияет на другие жесткие ссылки, которые все еще существуют. Операционная система Linux использует ссылки во многих местах, чтобы сделать файлы более доступными. Понимание символических ссылок Символьная ссылка (также называемая мягкая ссылка) не связывает непосредственно индексный дескриптор, а к имени файла. Это делает символические ссылки более гибкими, но также имеет некоторые недостатки. Преимущество символических ссылок в том, что они могут ссылаться на файлы на других устройствах, а также на каталоги. Главный недостаток заключается в том, что если исходный файл удаляется, символическая ссылка становится недействительной и больше не работает. Рисунок 3-2 дает схематический обзор того, как inodes (индексный дескриптор), жесткие ссылки и символические ссылки связаны друг с другом.

РИСУНОК 3-2 Обзор ссылок и индексов

66

Создание ссылок Используйте команду ln для создания ссылок. Команда использует тот же порядок параметров, что и cp и mv; сначала вы упоминаете имя источника, а затем имя назначения. Если вы хотите создать символическую ссылку, вы используете параметр -s, а затем указываете исходный и целевой файл или каталог. Однако действует одно важное ограничение: чтобы иметь возможность создавать жесткие ссылки, вы должны быть владельцем элемента, на который хотите создать ссылку. Это относительно новое ограничение безопасности, введенное в RHEL 7. Таблица 3-5 показывает несколько примеров.

Таблица 3-5 Примеры использования команды ln Команда

Объяснение

ln /etc/hosts .

Создает ссылку на файл /etc/hosts в текущем каталоге

ln -s /etc/hosts .

Создает символическую ссылку на файл /etc/hosts в текущем каталоге

ln -s /home /tmp

Создает символическую ссылку на каталог /home в каталоге /tmp

Команда ls покажет, является ли файл ссылкой: В выводе команды ls -l, если файл является символической ссылкой, то первым символом будет l. Если файл является символической ссылкой, вывод ls -l показывает имя элемента, на который он ссылается, после имени файла. Если файл является жесткой ссылкой, ls -l показывает счетчик жестких ссылок. В выходных данных в примере 3-4 это номер 3, который стоит прямо перед root root для файла hosts. Пример 3-4. Отображение свойств ссылки с помощью ls –l

67

ПРИМЕЧАНИЕ В примере 3-4 используется команда \ls -l, а не ls -l. Команда ls по умолчанию является псевдонимом, который заботится об использовании разных цветов при отображении команды ls; \ перед командой означает, что псевдоним (alias) не используется.

Удаление ссылок Удаление ссылок может быть опасным. Чтобы понять, почему, давайте рассмотрим следующую процедуру. 1. Создайте в домашнем каталоге каталог с именем test: mkdir ~/test. 2. Скопируйте все файлы, имена которых начинаются с a, b, c, d или e, из /etc в этот каталог: cp /etc/[a-e]* ~/test. 3. Убедитесь, что вы находитесь в своем домашнем каталоге, используя cd без аргументов. 4. Введите ln -s test link. 5. Введите rm link. Это удаляет ссылку. (Не используйте -r или -f для удаления ссылок, даже если они являются подкаталогами.) 6. Введите ls -l. Вы увидите, что символическая ссылка была удалена. 7. Давай сделаем это снова. Введите ln -s test link, чтобы создать ссылку снова. 8. Введите rm -rf link/ (это то, что вы получите, используя авто завершение командной строки Bash). 9. Введите ls. Вы увидите, что ссылка на каталог все еще существует. 10. Введите ls test/ . Вы увидите, что каталог test теперь пуст. В упражнении 3-4 вы узнаете, как работать с символическими и жесткими ссылками. Упражнение 3-4 Работа с символическими и жесткими ссылками 1. Откройте оболочку (shell) как обычный (не root) пользователь. 2. В домашнем каталоге введите ln /etc/passwd .. (убедитесь, что команда заканчивается точкой!) Эта команда выдает ошибку «операция запрещена», потому что вы не являетесь владельцем /etc/passwd. 3. Введите ln -s /etc/passwd .. (снова убедитесь, что команда заканчивается точкой!) Это работает; вам не обязательно быть владельцем, чтобы создать символическую ссылку. 4. Введите ln -s /etc/hosts (на этот раз без точки в конце команды). Вы заметите, что эта команда тоже работает. Если цель не указана, ссылка создается в текущем каталоге. 5. Введите touch newfile и создайте жесткую ссылку на этот файл с помощью ln newfile connectedfile. 6. Введите ls -l и обратите внимание на счетчик ссылок для нового и связанного файлов, который в настоящее время установлен на 2. 7. Введите ln -s newfile symlinkfile, чтобы создать символическую ссылку на новый файл. 8. Введите rm newfile. 9. Введите cat symlinkfile. Вы получите сообщение об ошибке «Нет такого файла или каталога», потому что исходный файл не может быть найден. 10. Введите cat connectedfile. Это не создает проблем. 11. Введите ls -l и посмотрите, как отображается файл символической ссылки. Также посмотрите связанный файл, в котором теперь счетчик ссылок установлен на 1. 12. Введите ln connectedfile newfile. 13. Введите ls -l еще раз. Вы увидите, что исходная ситуация восстановлена.

68

Работа с архивами и сжатыми файлами Управление архивами с помощью tar Утилита Tape ARchiver (tar) используется для архивирования файлов. Хотя изначально tar был разработан для потоковой передачи файлов на резервную ленту, в настоящее время tar используется в основном для записи файлов в файл архива. На экзамене RHCSA вы должны уметь выполнять четыре важных задачи с tar: ▪ ▪ ▪ ▪

Создать архив Список содержимого архива Распаковать архив Сжимать и распаковывать архивы

Создание архивов с помощью команды tar Чтобы создать архив, вы используете команду tar -cf archivename.tar /files-you-wanttoarchive. Если вы хотите увидеть, что происходит, также используйте параметр -v. Чтобы поместить файлы в архив, вам нужны, как минимум права на чтение файла и разрешения на выполнение в каталоге, в котором находится файл. Используйте tar -cvf /root/homes.tar /home в качестве пользователя root, чтобы записать содержимое /home каталог и все, что ниже, в файл homes.tar в каталоге /root. Обратите внимание на используемые параметры; порядок в этих вариантах важен. Первоначально tar не использовал тире (-) перед опциями. Современные реализации tar используют тире, как и все другие программы Linux, но они по-прежнему допускают старое использование без тире для обратной совместимости. Для полного обзора актуальных опции используемые, см. Таблицу 3-6. При управлении архивами с помощью tar также можно добавить файл к существующему архиву или обновить архив. Чтобы добавить файл в архив, используйте параметры -r. Используйте, например, tar -rvf /root/homes.tar /etc/hosts, чтобы добавить файл /etc/hosts в архив. Чтобы обновить существующий файл архива, вы можете использовать параметр -u. Итак, используйте tar -uvf /root/homes.tar /home для записи новых версий всех файлов в /home в архив. Мониторинг и извлечение файлов tar Перед извлечением файла полезно знать, что можно ожидать. Чтобы узнать, можно использовать параметр -t. Введите, например, tar -tvf /root/homes.tar, чтобы увидеть содержимое архива tar. СОВЕТ Рекомендуется создавать архивные файлы с расширением, например .tar или .tgz, чтобы их можно было легко распознать, но не все это делают. Если вы думаете, что файл представляет собой tarархив, но не уверены, используйте команду file. Например, если вы введете file somefile, команда file проанализирует его содержимое и покажет в командной строке, какой это тип файла. Чтобы извлечь содержимое архива, используйте tar -xvf /archivename. Даная команда извлекает архив в текущий каталог. Это означает, что, если вы находитесь в /root при вводе tar 69

xvf /root/homes.tar, и файл содержит каталог /home, после распаковки у вас появится новый каталог /root/home, содержащий все файлы. Возможно, это не то, чего вы хотели достичь. Есть два решения, чтобы поместить извлеченное содержимое туда, где вы хотите его получить: ▪ ▪

Перед извлечением файла архива перейдите в каталог, в который вы хотите извлечь файл. Используйте параметр -C /targetdir, чтобы указать целевой каталог, в который вы хотите распаковать файл. Если вы хотите поместить содержимое файла /root/homes.tar, например, в каталог /tmp, вы можете использовать tar -xvf homes.tar -C /tmp.

ПРИМЕЧАНИЕ. В целях RHCSA упоминается, что вам также необходимо знать, как работать со star. Утилита star была разработана для поддержки архивации атрибутов файлов, отличных от заданных по умолчанию, таких как списки управления доступом (см. Глава 7, «Управление разрешениями») или контекст файла SELinux (см. Глава 22, «Управление SELinux»). В своем текущем выпуске tar также предлагает эту функциональность, поэтому нет реальной необходимости использовать star. Помимо извлечения всего файла архива, из архива также можно извлечь один файл. Для этого используйте tar -xvf /archivename.tar file-you-want-to-extract (файл-который-вы-хотитеизвлечь). Если ваш архив etc.tar содержит файл /etc/hosts, который вы хотите извлечь, например, выполните tar -xvf /root/etc.tar etc/hosts. Использование сжатия Многие файлы содержат много избыточности. Программы сжатия позволяют уменьшить объем дискового пространства для файлов за счет устранения этой избыточности. Если нет избыточности, вы не выиграете от сжатия. Во всех примерах команды tar, которые вы видели до сих пор, ни один байт не был сжат. Изначально после создания архива его нужно было сжать отдельной утилитой сжатия, такой как gzip или bzip2. После создания home.tar вы можете сжать его с помощью gzip home.tar. gzip заменяет home.tar его сжатой версией home.tar.gz, которая занимает значительно меньше места. В качестве альтернативы использованию gzip вы можете использовать утилиту bzip2. Первоначально в bzip2 использовался более эффективный алгоритм шифрования, что приводило к уменьшению размеров файлов, но в настоящее время почти нет разницы в размере файла между результатом bzip2 и результатом gzip. Чтобы распаковать файлы, сжатые с помощью gzip или bzip2, вы можете использовать утилиты gunzip и bunzip2; вы работаете с некоторыми примерами этой команды в упражнении 35.

Таблица 3-6 Обзор опций tar Вариант

Назначение

c

Создает архив.

v

Показывает подробный вывод во время работы tar. 70

t

Показывает содержимое архива.

z

Сжимает/распаковывает архив при его создании с помощью gzip.

j

Сжимает/распаковывает архив с помощью bzip2.

x

Извлекает архив.

u

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

C

Изменяет рабочий каталог перед выполнением команды.

r

Добавляет файлы в архив.

Упражнение 3-5 Использование tar 1. Откройте shell как root на своем сервере. После входа в систему домашний каталог пользователя root станет текущим каталогом, поэтому все относительные имена файлов, используемые в этом упражнении, относятся к /root/. 2. Введите tar -cvf etc.tar /etc, чтобы заархивировать содержимое каталога /etc. 3. Введите file etc.tar и прочтите информацию, предоставленную командой. Это должно выглядеть так: [root @ server1 ~] # file etc.tar tar: tar-архив POSIX (GNU) 4. Введите gzip etc.tar. 5. Введите tar tvf etc.tar.gz. Обратите внимание, что команда tar не имеет проблем с чтением из сжатого файла gzip. Также обратите внимание, что содержимое архива состоит из всех относительных имен файлов. 6. Введите tar xvf etc.tar.gz etc/hosts. 7. Введите ls -R. Обратите внимание, что в текущем каталоге был создан подкаталог etc. В этом подкаталоге восстановлен файл hosts. 8. Введите gunzip etc.tar.gz. Данная команда распаковывает сжатый файл, но ничего не меняет в отношении команды tar. 9. Введите tar xvf etc.tar -C /tmp etc/passwd. Это извлечет файл паролей в каталог /tmp. 10. Введите tar cjvf homes.tar /home. Это создает сжатый архив домашнего каталога в домашний каталог пользователя root. 11. Введите rm -f *gz*tar, чтобы удалить все файлы, полученные в результате упражнений в этой главе, из домашнего каталога /root. Резюме В этой главе вы узнали, как работать с основными инструментами управления файлами. Вы узнали, как по умолчанию организована структура каталогов Linux, и вы узнали, какие типы файлов ожидать в каких каталогах. Вы также узнали, как ориентироваться в структуре каталогов и работать с файлами.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во Введении, у вас есть несколько вариантов подготовки к экзамену: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы 71

Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 3-7 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 3-7 Ключевые темы главы 3 Элемент ключевой темы

Описание

Страница

Таблица 3-2

Обзор FHS

55

Таблица 3-3

Обзор подстановочных знаков

60

Пункт

Определение абсолютного имени файла

61

Пункт

Определение относительного имени файла

61

Таблица 3-4

ls общие параметры командной строки

62

Пункт

Определение inode

65

Таблица 3-5

ln примеры использования

67

Таблица 3-6

Обзор опций tar

70

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем вебсайте) или, по крайней мере, раздел этой главы и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверьте свою работу.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: Стандарт иерархии файловой системы (FHS), каталог, монтирование, устройство, папка, корневой каталог, путь, жесткая ссылка, символическая ссылка, абсолютное имя файла, относительное имя файла, inode, tar, gzip, сжатие, архивирование, bzip2, star.

Обзорные вопросы Следующие далее вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. В какой каталог вы бы пошли, чтобы найти файлы конфигурации? 2. Какая команда позволяет отобразить список содержимого текущего каталога, причем самые новые файлы будут перечислены первыми? 3. Какая команда позволяет переименовать файл myfile в yourfile? 72

4. Какая команда позволяет стереть всю структуру каталогов, включая все ее содержимое? 5. Как создать ссылку на каталог /tmp в вашем домашнем каталоге? 6. Как бы вы скопировали все файлы, имена которых начинаются с a, b или c, из каталога /etc в текущий каталог? 7. Какая команда позволяет создать ссылку на каталог /etc в вашем домашнем каталоге? 8. Как можно безопасно удалить символическую ссылку на каталог? 9. Как создать сжатый архив каталогов /etc и /home и записать этот архив в /tmp/etchome.tgz? 10. Как бы вы извлекли файл /etc/passwd из /tmp/etchome.tgz, который вы создали на предыдущем шаге?

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

Лабораторная работа 3.1 1. Войдите в систему как пользователь root. В домашнем каталоге root создайте один архивный файл, содержащий содержимое каталога /home и каталога /etc. Используйте имя /root/essentials.tar для файла архива. 2. Скопируйте этот архив в каталог /tmp. Также создайте жесткую ссылку на этот файл в каталоге /. 3. Переименуйте файл /essentials.tar в /archive.tar. 4. Создайте символическую ссылку в домашнем каталоге пользователя root, которая ссылается на /archive.tar. Используйте имя link.tar для символической ссылки. 5. Удалите файл /archive.tar и посмотрите, что случилось с символической ссылкой. Удалите также символическую ссылку. 6. Сожмите файл /root/essentials.tar.

73

Глава 4 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Использование Общих Инструментов, связанных с Текстовыми Файлами Учебник по использованию регулярных выражений Использование утилиты grep для анализа текста Работа с другими полезными утилитами обработки текста

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪

Используйте grep и регулярные выражения для анализа текста. Создание и редактирование текстовых файлов.

С первых дней существования UNIX работа с текстовыми файлами была важным навыком администратора. Даже в современных версиях Linux, таких как Red Hat Enterprise Linux 8, работа с текстовыми файлами по-прежнему является важным умением. Применяя правильные инструменты, вы легко найдете нужную информацию. Эта глава посвящена этим инструментам. Убедитесь, что вы хорошо освоили их, потому что хорошее знание инструментов работы с текстом, действительно облегчит вашу деятельность в качестве администратора Linux. В то же время данный навык увеличит ваши шансы на сдачу экзамена RHCSA.

Работа с текстовыми файлами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 4-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 4 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Использование инструментов, связанных с общими текстовыми файлами

1–5

Учебник по использованию регулярных выражений

6-8

Использование grep для анализа текста

10

Работа с другими полезными утилитами обработки текста

9

1. Какая команда была разработана для отображения только первых десяти строк в текстовом файле? a. head 74

b. top c. first d. cat 2. Какая команда позволяет подсчитать количество слов в текстовом файле? a. b. c. d.

count list ls -l wc

3. Какую клавишу на клавиатуре вы используете в less, чтобы перейти к последней строке текущий текстовый файл? a. b. c. d.

End Page Down q G

4. Какая опция отсутствует (…) в следующей команде, предполагая, что вы хотите отфильтровать первое поле из файла / etc / passwd, и предполагая, что символ, который используется в качестве разделителя полей, является :? cut ... : -f 1 /etc/passwd a. -d b. -c c. -t d. –x 5. Какая опция отсутствует (…), если вы хотите отсортировать третий столбец вывод команды ps aux? ps aux | sort ... a. -k3 b. -s3 c. -k f 3 d. -f 3 6. Какая из следующих команд будет отображать только строки в файле? /etc/passwd которые начинаются с текста anna? a. grep anna /etc/passwd b. grep -v anna /etc/passwd c. grep $anna /etc/passwd d. grep ^anna /etc/passwd 7. Какое регулярное выражение вы используете, чтобы предыдущий символ стал необязательным? a. ? b. . c. * 75

d. & 8. Какое регулярное выражение используется как подстановочный знак для обозначения любого отдельного символа? a. b. c. d.

? . * &

9. Какая команда печатает четвертое поле строки в файле /etc/passwd, если текст user встречается в этой строке? a. b. c. d.

awk '/user/ { print $4 }' /etc/passwd awk -d : '/user/ { print $4 }' /etc/passwd awk -F : '/user/ $4' /etc/passwd awk -F : '/user/ { print $4 }' /etc/passwd

10. Какую опцию вы бы использовали с grep, чтобы отображать только строки, не содержащие использованного регулярного выражения? a. b. c. d.

-x -v -u –q

Основные Темы Использование Общих Инструментов, связанных с Текстовыми Файлами Прежде чем мы начнем говорить о наилучшем способе поиска текстовых файлов, содержащих определенный текст, давайте посмотрим, как можно эффективно отображать текстовые файлы. В Табл. 4-2 представлен обзор некоторых общих команд, часто используемых для этой цели.

Таблица 4-2 Основные инструменты для управления содержимым текстовых файлов Команда

Объяснение

less

Открывает текстовый файл на пейджере, что позволяет легко читать

cat

Выводит содержимое текстового файла на экран

head

Показывает первые десять строк текстового файла

tail

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

cut

76

sort

Сортирует содержимое текстового файла

wc

Подсчитывает количество строк, слов и символов в файле

Помимо использования этих команд в текстовом файле, они также могут оказаться очень полезными при использовании переправление ((|) pipe) вывода команды. Вы можете использовать команду less /etc/passwd, например, чтобы посмотреть содержимое файла /etc/passwd используя утилиту less, но вы также можете использовать команду ps aux | less, который отправляет вывод команды ps aux на вход утилиты less для удобства просмотра страниц вывода предыдущей команды. Делаем больше с помощью команды less Во многих случаях, как администратору Linux, вам нужно будет читать содержимое текстовых файлов. Утилита less предлагает удобный способ сделать это. Чтобы открыть содержимое текстового файла в less, просто введите less, а затем имя файла, который вы хотите просмотреть, например, less /etc/passwd. Для перемещения по страницам вывода команды less, используйте клавиши Page Up и Page Down на клавиатуре. Просмотрено достаточно? Теперь вы можете нажать q, чтобы выйти из less. Также очень полезно то, что вы можете легко искать конкретное содержимое в less использованием слеш с шаблоном текста например, /sometext для прямого поиска и ?sometext для обратного поиска. Повторите последний поиск, используя n. Если вы думаете, что это звучит знакомо, так и должно быть. Вы видели подобное поведение у vim и man. Это потому, что все эти команды основаны на одном и том же коде. ПРИМЕЧАНИЕ. Когда-то был разработан less, потому что он предлагал больше возможностей, чем классический инструмент UNIX more, который был разработан для просмотра содержимого файлов постранично. Итак, идея заключалась в том, чтобы делать больше с меньшими затратами. Разработчикам more это не понравилось, поэтому они расширили возможности команды more. В результате и тот, и другой предлагают много похожих функций, и какой инструмент вы используете, больше не имеет большого значения. Однако есть одно важное отличие: утилита more завершает свою работу, если достигается конец файла. Чтобы предотвратить такое поведение, вы можете начать more с параметром –p. В упражнении 4-1 вы примените некоторые базовые навыки работы с содержимым файла и выводом команд. Упражнение 4-1 Применение неосновных навыков 1. В терминале введите less /etc/passwd. Команда откроет для просмотра файл /etc/passwd в утилите less. 2. Нажмите G, чтобы перейти к последней строке файла. 3. Введите /root, чтобы найти по заданному шаблону текст. Вы увидите, что все вхождения слова root будут выделены. 4. Нажмите q, чтобы выйти из программы less. 5. Введите ps aux | less. Это отправит вывод команды ps aux (которая показывает список всех процессов) в less. Просмотрите список. 6. Нажмите q, чтобы выйти из less. 77

Отображение содержимого файла с помощью команды cat Утилита less полезна для просмотра длинных текстовых файлов. Если текстовый файл не большой, вам, вероятно, лучше использовать cat. Этот инструмент просто выгружает содержимое текстового файла на терминал, с которого он был запущен. Это удобно, в случае небольшого текстового файла. Однако, если текстовый файл длинный, вы увидите, что все содержимое промелькнёт на экране, отобразятся только последние строки, которые поместиться на экране терминала. Использовать cat очень просто. Введите cat, а затем имя файла, который хотите просмотреть. Например, используйте cat /etc/passwd, чтобы посмотреть содержимое этого файла на экране вашего компьютера. СОВЕТ Утилита cat выводит содержимое файла на экран от начала до конца, что означает, что для длинного файла вы будете видеть только последние строки файла. Если вас интересуют первые строки, вы можете использовать утилиту tac, которая дает обратный результат cat.

Отображение первых или последних строк файла используя команды head и tail Если текстовый файл содержит много информации, может быть полезно немного отфильтровать вывод. Для этого вы можете использовать утилиты head и tail. При использовании заголовка в текстовом файле по умолчанию отображаются первые десять строк этого файла. При использовании tail в текстовом файле по умолчанию отображаются последние десять строк. Вы можете настроить количество отображаемых строк, добавив -n, за которым следует число, которое вы хотите видеть. Итак, tail -n 5 /etc/passwd показывает последние пять строк файла /etc/passwd. Еще одна полезная опция, которую вы можете использовать с tail, -f. Эта опция начинается с отображения последних десяти строк указанного вами файла, но обновляет отображение по мере добавления новых строк в файл. Это удобно для мониторинга файлов журналов. Команда tail -f /var/log/messages (которую нужно запускать от имени пользователя root) - это обычная команда для отображения в реальном времени сообщений, записанных в основной файл журнала /var/log/messages. Чтобы закрыть этот экран, нажмите Ctrl-C. Комбинируя tail и haed, вы тоже можете делать умные вещи. Предположим, например, что вы хотите увидеть строку номер 11 файла /etc/passwd. Для этого используйте head -n 11 /etc/passwd | tail -n 1. Команда перед вертикальной чертой показывает первые 11 строк файла. Результат отправляется в конвейер, и результат предыдущей команды используется tail -n 1, что приводит к отображению только строки с номером 11. В упражнении 4-2 вы применяете некоторые базовые операции head и tail для получения желаемых результатов. Упражнение 4-2 Использование основных операций head и tail 1. Введите tail -f /var/log/messages. Вы увидите последние отображаемые строки /var/log/messages. Файл не закрывается автоматически. 2. Нажмите Ctrl-C, чтобы выйти из предыдущей команды. 3. Введите head -n 5 /etc/passwd, чтобы отобразить первые пять строк в /etc/passwd. 4. Введите tail -n 2 /etc/passwd, чтобы отобразить последние две строки /etc/passwd. 78

5. Введите head -n 5 /etc/passwd | tail -n 1, чтобы отобразить только строку номер 5 файла /etc/passwd. Фильтрация определенных столбцов командой cut При работе с текстовыми файлами может быть полезно отфильтровать определенные поля. Представьте, что вам нужно увидеть список всех пользователей в файле /etc/passwd. В этом файле определены несколько полей, первое из которых содержит имена пользователей. Чтобы отфильтровать конкретное поле, полезна команда cut. Для этого используйте параметр -d, чтобы указать разделитель полей, за которым следует -f с номером конкретного поля, которое вы хотите отфильтровать. Итак, полная команда cut -d: -f 1 /etc/passwd, если вы хотите отфильтровать первое поле файла /etc/passwd. Вы можете увидеть результат в Примере 4-1. Пример 4-1. Фильтрация определенных полей с помощью cut

Сортировка содержимого файла и вывода с сортировкой Еще одна очень полезная команда для текстовых файлов - sort. Как вы, наверное, догадались, эта команда сортирует текст. Если вы наберете sort /etc/passwd, например, содержимое файла /etc/passwd будет отсортировано в байтовом порядке. Вы также можете использовать команду sort для вывода команды cut, например, cut -f 1 -d: /etc/passwd | sort, который сортирует содержимое первого столбца в файле /etc/passwd. По умолчанию команда sort сортирует в байтовом порядке. Обратите внимание, что это похоже на алфавитный порядок, но это не так, поскольку все заглавные буквы отображаются перед строчными. Так что Zoo будет указан перед apple. В некоторых случаях это неудобно, потому что контент, который требует сортировки, может быть числовым или в другом формате. Команда sort предлагает различные параметры, помогающие сортировать конкретные типы данных. Введите, например, cut -f 2 -d: /etc/passwd | sort -n, чтобы отсортировать второе поле файла /etc/passwd в числовом порядке. Также может быть полезно сортировать в обратном порядке; если вы используете команду du -h | sort -rn, вы получите список файлов, отсортированных с самым большим файлом в этом каталоге, указанным первым. Вы также можете использовать команду сортировки и указать, какой столбец вы хотите отсортировать. Для этого используйте, например, sort -k3 –t : /etc/passwd, который использует разделитель полей: для сортировки третьего столбца файла /etc/passwd. Вам также может понравиться возможность сортировки по определенному столбцу файла или выходных данных команды. Примером является команда ps aux, которая дает обзор наиболее загруженных процессов на сервере Linux. (Пример 4-2 показывает частичный вывод этой команды.) 79

Пример 4-2 Использование ps aux для поиска наиболее загруженных процессов на сервере Linux

Чтобы отсортировать вывод этой команды непосредственно в третьем столбце, используйте команду ps aux | sort -k3. Подсчет строк, слов и символов с помощью wc При работе с текстовыми файлами иногда получается большой объем вывода. Прежде чем решить, какой подход к обработке большого количества вывода лучше всего работает в конкретном случае, вы можете получить представление о количестве текста, с которым вы имеете дело. В этом случае полезна команда wc. На выходе эта команда дает три разных результата: количество строк, количество слов и количество символов. Рассмотрим, например, команду ps aux. При выполнении от имени пользователя root эта команда дает список всех процессов, запущенных на сервере. Одно из решений, позволяющих подсчитать точное количество процессов, - направить вывод ps aux через wc, ps aux | wc. Вы можете увидеть результат вывода команды в примере 4-3, который показывает, что общее количество строк равно 90 и что в выходных данных команды 1045 слов и 7 583 символа. Пример 4-3 Подсчет количества строк, слов и символов с помощью wc [root@localhost ~]# ps aux | wc 90 1045 7583

Учебник по использованию регулярных выражений Работа с текстовыми файлами - важный навык для администратора Linux. Вы должны знать не только, как создавать и изменять существующие текстовые файлы, но и как найти текстовый файл, содержащий определенный текст. Иногда будет ясно, какой именно текст вы ищете. В других случаях может и не быть. Например, вы ищете color или colour? Оба написания могут дать совпадение. Это лишь один из

80

примеров того, почему использование гибких шаблонов при поиске текста может оказаться полезным. Гибкие шаблоны известны в Linux, как регулярные выражения. Чтобы лучше понять регулярные выражения, давайте рассмотрим пример текстового файла, показанный в примере 4-4. Этот файл содержит последние шесть строк из файла /etc/passwd. (Этот файл используется для хранения учетных записей Linux; дополнительные сведения см. В главе 6 «Управление пользователями и группами».) Пример 4-4 Пример строк из /etc/passwd

Теперь предположим, что вы ищете пользователя anna. В этом случае вы можете использовать общий синтаксический анализатор регулярных выражений (general regular expression parser grep) grep для поиска этой конкретной строки в файле /etc/passwd с помощью команды grep anna /etc/passwd. В примере 4-5 показаны результаты этой команды, и, как видите, показано слишком много результатов. Пример 4-5 Пример того, почему вам нужно знать регулярные выражения

Регулярное выражение - это шаблон поиска, который позволяет вам искать конкретный текст расширенным и гибким способом.

Использование Якорей в строке В Примере 4-5 предположим, что вы хотите указать, что ищете строки, начинающиеся с текста anna. Тип регулярного выражения, указывающего, где в строке вывода ожидается результат, называется якорем строки (line anchor). Чтобы отображать только строки, начинающиеся с искомого текста, вы можете использовать регулярное выражение ^ (в данном случае, чтобы указать, что вы ищете только те строки, в которых анна находится в начале строки; см. Пример 4-6). Пример 4-6 Поиск линий, начинающихся с определенного шаблона [root@localhost ~]# grep ^anna /etc/passwd anna:x:1000:1000::/home/anna:/bin/bash 81

annabel:x:1002:1002::/home/annabel:/bin/bash Еще одно регулярное выражение, которое относится к положению определенного текста в определенной строке, - это $, которое означает, что строка заканчивается некоторым текстом. Например, команда grep ash$ /etc/passwd показывает все строки в файле /etc/passwd, которые заканчиваются текстом ash. Эта команда показывает все учетные записи, которые имеют shell и могут входить в систему (см. Главу 6 для более подробной информации). Использование экранирования в регулярных выражениях Хотя это и не обязательно, при использовании регулярных выражений рекомендуется использовать экранирование, чтобы предотвратить интерпретацию регулярных выражений shell. Когда вводится командная строка, оболочка Bash анализирует командную строку в поисках любых специальных символов, таких как *, $ и ?. Затем он интерпретирует эти символы. Дело в том, что регулярные выражения также используют некоторые из этих символов, и чтобы оболочка Bash не интерпретировала их, вам следует использовать экранирование для их правильного применения в регулярных выражениях. Во многих случаях в использовании экранирования нет необходимости; в некоторых случаях регулярное выражение не выполняется без экранирования. Чтобы этого никогда не происходило, рекомендуется заключить регулярное выражение в кавычки. Итак, вместо того, чтобы вводить grep ^anna /etc/passwd, лучше использовать grep '^anna'/etc/passwd, даже если в этом случае работают оба примера. Использование символ подстановки и квантификаторов В некоторых случаях вы можете знать, какой текст ищете, но не знаете, как написан конкретный текст. Или вы можете просто использовать одно регулярное выражение для сопоставления разных шаблонов. В этих случаях пригодятся подстановочные знаки и множители. Начнем с регулярного выражения точки (.). Точка используется, как подстановочный знак для поиска одного конкретного символа. Итак, регулярное выражение r.t будет соответствовать строкам rat, rot и rut. В некоторых случаях вам может потребоваться более конкретная информация о персонажах, которых вы ищете. В этом случае вы можете указать диапазон символов, который вам нужен. Например, регулярное выражение r[aou]t соответствует строкам rat, rot и rut. Еще одно полезное регулярное выражение - квантификатор (*). Означает «ноль или более» предыдущих символов. Полезность квантификатора (*) вы увидите в примерах в конце этого раздела. Если вы точно знаете, сколько из предыдущих символов вы ищете, вы можете указать число, как в re\{2\}d, которое будет соответствовать reed, но не red. Последнее регулярное выражение, о котором полезно знать, - это (?), Означает «ноль или один» из предыдущих символов. В Таблице 4-3 представлен обзор наиболее важных регулярных выражений.

Таблица 4-3 Наиболее важные регулярные выражения Регулярное выражение

Использование

82

^text

Соответствует строке, которая начинается с указанного текста.

text$

Соответствует строке, которая заканчивается указанным текстом.

.

Подстановочный знак. (Соответствует любому одиночному символу.)

[abc]

Соответствует a, b или c.

*

Соответствует предыдущему символу от нуля до бесконечного числа.

\{2\}

Соответствует ровно двум предыдущим символам. Соответствует минимум одному и максимум трем предыдущим символам. Соответствует нулю или одному из предыдущих символов. Это делает предыдущий символ необязательным, который в этом примере будет соответствовать как color, так и colour.

\{1,3\} colou?r

Давайте рассмотрим пример регулярного выражения, взятого из man-страницы semanagefcontext и относящегося к управлению SELinux (см. Главу 22, «Управление SELinux»). Строка примера содержит следующее регулярное выражение: "/web(/.*)?" В этом регулярном выражении упоминается текст /web. За этой текстовой строкой может следовать регулярное выражение (/.*)?, которое означает ноль или единицу (/.*), что фактически означает, что за ним может следовать ничто или (/.*). Символ (/.*) относится к косой черте, за которой может следовать неограниченное количество символов. Иначе говоря, регулярное выражение относится к тексту /web, за которым могут следовать или не следовать какие-либо символы.

Использование grep для анализа текста Лучшей утилитой для работы с регулярными выражениями является grep, что означает «общий синтаксический анализатор регулярных выражений (general regular expression parser)». Довольно много примеров, которые вы уже видели, были основаны на команде grep. У команды grep есть несколько полезных опций, которые делают ее еще более эффективной. В Табл. 4-4 описаны некоторые наиболее полезных из них.

Таблица 4-4 Наиболее полезные параметры grep Опции

Назначение

-i

Нечувствительный к регистру. Соответствует прописным и строчным буквам.

-v

Показывает только строки, не содержащие регулярного выражения.



Ищет файлы в текущем каталоге и во всех подкаталогах.

-e

Ищет строки, соответствующие более чем одному регулярному выражению.

-A

Показывает строк после соответствующего регулярного выражения.

83

-B

Показывает выражением.

строк

перед

соответствующим

регулярным

В упражнении 4-3 вы проработаете несколько примеров с использованием этих параметров grep. Упражнение 4-3. Использование общих параметров grep 1. Введите grep '^#' /etc/sysconfig/sshd. Используя указанное регулярное выражение, утилита grep выведет на экран все строки из файла /etc/sysconfig/sshd которые начинаются со знака комментария # (т.е. текст, начинающийся с символа # является комментариями не влияющие на выполнения конфигурационного файла). 2. Чтобы просмотреть действительно важные строки конфигурации, введите grep -v '^#' /etc/sysconfig/sshd. Это показывает только строки, которые не начинаются с символа #. 3. Введите grep -v '^#' /etc/sysconfig/sshd -B 5. Данная команда показывает строки, которые не начинаются со знака #, но кроме того отобразит пять строк, которые находятся непосредственно перед каждой из этих строк, что полезно, потому что в предыдущих строках вы обычно найдете комментарии о том, как использовать определенные параметры. Однако вы также увидите, что отображается много пустых строк. 4. Введите grep -v -e '^#' -e '^$' /etc/sysconfig/sshd. Данный вариант регулярного выражения исключает все пустые строки и строки, начинающиеся с символа #.

Работа с другими полезными утилитами обработки текста Утилита grep – довольно мощная утилита, позволяющая работать с регулярными выражениями. Однако это не единственная утилита. Существуют еще более мощные утилиты, такие как awk и sed, обе из которых чрезвычайно богаты и заслуживают отдельной книги. Утилиты были разработаны в то время, когда к компьютерам обычно не подключались экраны, и по этой причине они хорошо справляются с обработкой текстовых файлов с помощью сценариев. Как администратору Linux в двадцать первом веке вам больше не нужно быть специалистом по использованию этих утилит. Однако имеет смысл знать, как выполнять некоторые общие задачи с их помощью. Наиболее полезные варианты использования приведены в следующих примерах. Эта команда показывает четвертую строку из /etc/passwd: awk -F : '{ print $4 }' /etc/passwd Это можно сделать и с помощью утилиты cut, но утилита awk более успешно распознает поля, которые используются при выводе команд файлов. Суть в том, что, если cut не работает, вам следует попробовать служебную программу awk. Вы также можете использовать служебную программу awk для выполнения задач, для которых вы могли использовать grep. Рассмотрим следующий пример: awk -F : '/user/ { print $4 }' /etc/passwd Команда ищет текст user в файле /etc/passwd и печатает четвертое поле при любой совпадающей строке. В этом примере " потоковый редактор" sed используется для печати пятой строки из файла /etc/passwd: sed -n 5p /etc/passwd 84

Утилита sed - очень мощная утилита для фильтрации текста из текстовых файлов (например, grep), но ее преимущество состоит в том, что она также позволяет применять модификации к текстовым файлам, как показано в следующем примере: sed -i s/old-text/new-text/g ~/myfile В этом примере утилита sed используется для поиска текста old-text в ~/myfile и замены всех вхождений текстом new-text. Обратите внимание, что поведение sed по умолчанию заключается в записи вывода в STDOUT, но опция -i записывает результат непосредственно в файл. Убедитесь, что вы знаете, что делаете, прежде чем использовать эту команду, потому что может быть сложно отменить изменения файла, примененные таким образом. Вам понравится следующий пример, если у вас когда-либо была утилита, содержащая определенную строку в файле, которая была ошибочной: sed -i -e '2d' ~/myfile С помощью этой команды вы можете удалить строку на основе определенного номера строки. Вы также можете сделать более сложные ссылки на номера строк. Используйте, например, sed -i -e '2d; 20,25d' ~/myfile, чтобы удалить строки 2 и 20–25 в файле ~/myfile. СОВЕТ Не зацикливайтесь на awk и sed. Это замечательные утилиты, но многие вещи, которые можно выполнить с их помощью, можно сделать и с помощью других инструментов. Инструменты awk и sed очень богаты, и вы можете легко потеряться в них, если попытаетесь копнуть слишком глубоко.

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

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во Введении, у вас есть несколько вариантов подготовки к экзамену: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 4-5 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 4-5 Ключевые темы главы 4 85

Элемент ключевой темы

Описание

Страница

Абзац

Основные инструменты для управления текстовых файлов Определение регулярных выражений

Таблица 4-3

Самые полезные регулярные выражения

82

Таблица 4-4

Самые полезные параметры grep

83

Таблица 4-2

содержимым

76 81

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел этой главы и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: регулярное выражение, пейджер, экранирование, подстановочный знак, квантификатор, привязка якорь. (regular expression, pager, escaping, wildcard, multiplier, line anchor)

Обзорные вопросы 1. Какая команда позволяет вам увидеть результаты команды ps aux таким образом, чтобы вы могли легко просматривать результаты вверх и вниз? 2. Какая команда позволяет вам показать последние пять строк из файла ~/samplefile? 3. Какую команду вы используете, если хотите узнать, сколько слов находится в файле ~/samplefile? 4. После открытия вывода команды с помощью tail -f ~/mylogfile, как перестать показывать вывод? 5. Какую опцию grep вы используете, чтобы исключить все строки, начинающиеся с символа # или a ;? 6. Какое регулярное выражение вы используете для сопоставления одного или нескольких предшествующих символов? 7. Какая команда grep позволяет видеть в файле text, а также TEXT? 8. Какая команда grep позволяет отображать все строки, начинающиеся с PATH, а также пять строк непосредственно перед этой строкой? 9. Какую команду sed вы используете для отображения строки 9 из файла ~/samplefile? 10. Какая команда позволяет заменить слово «user» словом «users» в файле ~/samplefile?

Лабораторная работа в конце главы В этой лабораторной работе в конце главы вы будете работать с некоторыми из наиболее важных утилит для обработки текста.

86

Лабораторная работа 4.1. 1. Опишите два способа показать строку 5 из файла /etc/passwd. 2. Как бы вы нашли на своем сервере все текстовые файлы, содержащие текущий IP-адрес? Вам нужно для этого регулярное выражение? 3. Вы только что использовали команду sed, которая заменяет все вхождения текста Administrator на root. Вашим администраторам Windows это не очень нравится. Как вернуться? 4. Предполагая, что пятая строка команды ps aux содержит информацию об использовании памяти, как бы вы обработали вывод этой команды, чтобы первым в списке результатов показать процесс с наибольшим использованием памяти? 5. Какая команда позволяет фильтровать шестой столбец вывода ps aux? 6. Как удалить шестую строку из файла ~/myfile?

87

Глава 5 В этой главе рассматриваются следующие темы: ▪ ▪

Работа на локальных консолях Использование SSH и Сопутствующие Утилит

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪ ▪ ▪ ▪

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

Вы уже узнали, как войти в Linux из графической среды. В этой главе вы узнаете о некоторых других методах доступа к оболочке Linux и начала работы. Вы узнаете, как работать с локальными консолями и с Secure Shell (SSH) для подключения к Linux. Вы также узнаете, как выполнять некоторые основные задачи из этих сред.

Подключение к Red Hat Enterprise Linux 8 Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 4-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 5 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Работа в локальных консолях

1–6

Использование SSH и связанных утилит

7 - 10

1. Какой термин подходит для описания здесь? «Используется для обозначения физического экрана, на который вы в данный момент смотрите как пользователь» a. b. c. d.

Terminal Console Shell Interface

2. Какой термин подходит для описания здесь? «Среда, в которой используется оболочка, в которой пользователи могут вводить свои команды» 88

a. b. c. d.

Terminal Console Shell Interface

3. Какой термин подходит для описания здесь? «Среда, предлагающая командную строку, в которой пользователи вводят команды, которые они хотят использовать» a. b. c. d.

Terminal Console Shell Interface

4. 4. Какой файл устройства связан с виртуальной консолью, которая открывается после нажатия комбинации клавиш Alt-F6?

5.

a. /dev/console6 b. /dev/tty6 c. /dev/vty6 d. /dev/pts/6 e. Какой из следующих методов откроет псевдотерминальное устройство? (Выберите два.) a. Войдите в систему, используя сеанс SSH b. Нажмите Alt-F2, чтобы открыть новый неграфический вход c. Щелкните правой кнопкой мыши графический рабочий стол и выберите Открыть в терминале. d. Введите свой логин и пароль на неграфической консоли

Иногда для выполнения задачи может потребоваться перезагрузка сервера. Что из перечисленного обычно не входит в их число? a. Для восстановления после серьезных проблем, таких как зависания сервера и паника ядра b. Чтобы применить обновления ядра c. Чтобы применить изменения к модулям ядра, которые используются в настоящее время и поэтому не могут быть легко перезагружены d. Чтобы применить изменения к конфигурации сети 7. Что из следующего верно относительно удаленного доступа к серверам Linux из среды Windows? a. Откройте терминал оболочки в Windows и введите ssh для удаленного доступа к серверам Linux. Команда ssh доступна по умолчанию в операционной системе Windows. b. Настройте удаленный доступ в Windows, если вы хотите получить доступ к серверам Linux, на которых запущен процесс sshd. c. Установите программу PuTTY в Windows для доступа к службам sshd в Linux из Windows. d. Вы не можете получить удаленный доступ к машинам Linux из Windows. 8. Как называется файл, в котором хранятся отпечатки открытых ключей серверов SSH, к которым вы подключались в прошлом? 6.

89

a. b. c. d.

/etc/ssh/remote_hosts /etc/ssh/known_hosts ~/.ssh/remote_hosts ~/.ssh/known_hosts

9. Чтобы разрешить использование графических приложений в сеансе SSH, вы можете установить параметр в файле /etc/ssh/ssh_config. Использование этого параметра избавляет от необходимости использовать параметр командной строки -X при каждом запуске сеанса SSH. Какой из следующих параметров следует использовать? a. b. c. d.

Host * TunnelX11 yes ForwardX11 yes Xclient yes

10. Какое из следующих утверждений об аутентификации SSH на основе ключей верно? a. После создания пары ключей вам необходимо скопировать закрытый ключ на удаленный сервер. b. Используйте scp, чтобы скопировать открытый ключ на удаленный сервер. c. Используйте ssh-copy-id, чтобы скопировать открытый ключ на удаленный сервер. d. Используйте ssh-keygen на сервере, чтобы сгенерировать пару ключей, соответствующую ключам клиента.

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

Прежде чем мы углубимся в детали, имеет смысл выделить разницу между словами «консоль» и «терминал». В этой книге я придерживаюсь общепринятого представления о консоли как о среде, на которую смотрит пользователь. Это означает, что консоль - это в основном то, что вы видите, когда смотрите на экран компьютера. Терминал - это среда, которая открывается на консоли и предоставляет доступ к текстовой оболочке shell, которая является средой командной строки, которая может использоваться для ввода команд. Терминал можно предлагать через окно при использовании графической консоли, но его также можно открыть как единственное, что вы видите в текстовой консоли. Это означает, что в текстовой среде слова консоль и терминал более или менее эквивалентны. В графической среде - нет. Подумайте об этом так: вы можете открыть несколько терминалов на одной консоли, но вы не можете открыть несколько консолей в одном терминале. Вход в локальную консоль 90

Грубо говоря, есть два способа заявить о себе серверу Linux. Иногда вы просто сидите за консолью Linux и интерактивно входите в систему из появившейся подсказки входа. В остальных случаях устанавливается удаленное соединение. Вторая часть этой главы посвящена входу в систему из удаленного сеанса; в этой части вы узнаете, как работать с локальной консоли. Если сервер Linux загружается в графической среде (так называемая графическая targets), вы видите приглашение входа в систему, в котором можно ввести имя пользователя и поле для ввода пароля. Однако многие серверы Linux вообще не используют графическую среду, а просто представляют собой текстовую консоль, как показано на рис. 5-1. РИСУНОК 5-1 Вход в систему из текстовой консоли

Чтобы войти в систему из текстовой консоли, вам необходимо знать, какую учетную запись пользователя вы должны использовать. Пользователь root всегда доступен, но использование этой учетной записи для работы часто не является хорошей идеей; у пользователя root нет ограничений для доступа к системе, и поэтому он может нанести большой ущерб. Маленькая ошибка может иметь огромное влияние. Как правило, лучше войти в систему как один из локально определенных пользователей, и для этого есть множество причин, в том числе следующие: ▪ ▪ ▪





Это затруднит совершение критических ошибок. Во многих случаях вам все равно не потребуются права root. Если вы разрешаете доступ только обычным пользователям, но не root, это заставит злоумышленника угадать три разных вещи: имя этого конкретного пользователя, пароль этого пользователя и пароль root. Если вам все равно нужен root-доступ, вы можете использовать команду su из локальной пользовательской среды, чтобы открыть корневую оболочку. Это открывает только одну корневую оболочку, в то время как вы по-прежнему будете обычным пользователем во всех других частях текущего сеанса. Используйте sudo для настройки определенных административных задач только для определенных пользователей. См. Главу 6 «Управление пользователями и группами» для получения дополнительной информации.

Переключение между терминалами в графической среде При работе в графической среде относительно легко открыть несколько различных рабочих сред, например, разные окна терминала, в которых вы можете работать из оболочки. В верхней левой части графического интерфейса нажмите «Действия (Activities)» и на появившейся панели поиска введите term, который представляет собой значок для открытия терминала. Поскольку терминалы открываются как под оболочка (subshell), вам не нужно повторно входить в каждый терминал, и вы получите доступ с той же учетной записью, которая изначально использовалась для входа в графическую среду (см. Рисунок 5-2). Удобно работать в графической среде. Как администратор, вы можете открыть несколько окон терминала, и в каждом окне терминала вы можете использовать команду su -, чтобы открыть 91

оболочку, в которой вы можете работать с другим идентификатором пользователя. Это позволяет вам легко тестировать функции и сразу видеть результаты этих тестов. Упражнение 5-1 проведет вас через распространенный сценарий, в котором вы можете это сделать, и увидите, как может быть удобно тестировать вещи из одного окна терминала, а мониторинг из другого окна терминала. РИСУНОК 5-2. Использование различных окон терминала из графической среды

Упражнение 5-1 Одновременная работа из нескольких окон терминала 1. Запустите компьютер и убедитесь, что вы вошли в систему как пользователь без полномочий root из графического окна входа в систему. У вас должен быть локальный пользователь с именем student и паролем password, который вы можете использовать для этой цели. 2. Щелкните Действия (Activities) и введите термин (term). Затем щелкните значок терминала, чтобы открыть новое окно терминала. 3. Повторите шаг 2, чтобы одновременно были открыты два окна терминала. 4. В одном из окон терминала введите команду su - и введите пароль пользователя root. Затем введите tail -f /var/log/secure. Это открывает трассировку в файле /var/log/secure, где вы можете отслеживать события безопасности в реальном времени. 5. В других окнах терминала введите su -. При запросе пароля вы обычно вводите пароль для пользователя root. Введите неверный пароль. 6. Теперь посмотрите на терминал, где все еще открыта трассировка на /var/log/secure. Вы увидите, что в этот файл было записано сообщение об ошибке. 7. Нажмите Ctrl-C, чтобы закрыть сеанс tail -f для файла /var/log/secure.

Работа с несколькими терминалами в неграфической среде В предыдущем разделе вы узнали, как работать с несколькими терминалами в графической среде. Это относительно просто, потому что вам нужно открыть новое окно терминала. В неграфической среде доступен только один интерфейс терминала, что немного затрудняет работу в различных средах пользовательской оболочки. Чтобы предложить вариант, который делает возможной работу с нескольких консолей на одном сервере, Linux использует концепцию виртуального терминала (virtual terminal). Эта функция позволяет одновременно открывать шесть разных окон терминала с одной консоли и использовать последовательности клавиш для перехода между ними. Чтобы открыть эти окна терминала, вы можете использовать последовательности клавиш от Alt-F1 до Alt-F6. Доступны следующие виртуальные консоли: ▪ ▪ ▪

F1: дает доступ к графическому входу в GNOME Display Manager (GDM). F2: обеспечивает доступ к текущей графической консоли. F3: возвращает доступ к текущему графическому сеансу. 92



F4 – F6: дает доступ к неграфическим консолям.

НАКОНЕЧНИК Удобную альтернативу использованию комбинаций клавиш Alt-Function предлагает команда chvt. Эта команда позволяет переключаться в другую виртуальную среду прямо из текущей среды. Если вы сейчас находитесь в графической консоли, откройте терминал и введите chvt 4. Это приведет вас к приглашению входа в систему на виртуальном терминале 3. Вернитесь в графическую среду с помощью команды chvt 3 или используйте chvt 1, чтобы вернуться к графическому приглашению для входа в систему. Из этих виртуальных консолей первая используется как консоль по умолчанию. Она широко известна как виртуальная консоль tty1 (virtual console tty1), и у нее есть соответствующий файл устройства в каталоге /dev с именем /dev/tty1. Другие виртуальные консоли также имеют соответствующие файлы устройств, которые пронумерованы с /dev/tty1 по /dev/tty6. При работе в графической среде также можно открывать различные виртуальные консоли. Поскольку комбинации между клавишей Alt и функциональными клавишами обычно уже имеют значение в графической среде, вам необходимо вместо этого использовать Ctrl-Altфункциональную клавишу. Поэтому не используйте Alt-F4 для открытия /dev/tty4 из графической среды, а используйте Ctrl-Alt-F4. Чтобы вернуться в графическую консоль, вы можете использовать комбинацию клавиш Alt-F3. Последовательности клавиш Alt-F6 и Ctrl-AltF6 по сути одинаковы. Также важно использовать клавишу Ctrl при переходе от графического интерфейса пользователя к текстовой среде. Чтобы вернуться из текстовой среды в среду графического интерфейса пользователя, использование клавиши Ctrl необязательно. ПРИМЕЧАНИЕ. Когда-то давно использовались большие центральные компьютеры, к которым были подключены немые оконечные устройства. Эти тупые терминальные устройства состояли из подключенного к нему монитора и клавиатуры. С каждого из этих немых терминальных устройств можно было запустить консольный сеанс с операционной системой. К современному серверу Linux не подключены тупые терминалы. Они были заменены виртуальными терминалами, как описано в предыдущем разделе. Понимание псевдотерминальных устройств Каждый терминал, используемый в среде Linux, имеет связанный с ним файл устройства. Вы только что узнали, что терминалы, запущенные в неграфической среде, обычно упоминаются через устройства /dev/tty1 - /dev/tty6. Для окон терминала, которые запускаются из графической среды, запускаются псевдотерминалы. Эти псевдотерминалы обозначаются номерами в каталоге /dev/pts. Итак, первое окно терминала, которое запускается из графической среды, отображается как /dev/pts/1, второе окно терминала отображается как /dev/pts/2 и так далее. В упражнении 5-2 вы узнаете, как работать с этими псевдотерминалами, и увидите, какой пользователь на каком псевдотерминале активен.

Упражнение 5-2 Работа с псевдотерминалами

93

1. Войдите в графическую консоль, используя учетную запись пользователя без полномочий root. 2. Откройте окно терминала. 3. В окне терминала введите w. Это даст обзор всех пользователей, которые в настоящее время вошли в систему. Обратите внимание на столбец, в котором упоминается tty, на котором находятся пользователи, в котором вы видите pts/0, который относится к окну терминала. 4. Откройте другое окно графического терминала. Наберите su - чтобы стать root. 5. Введите w, чтобы еще раз отобразить обзор всех пользователей, которые в настоящее время вошли в систему. Обратите внимание, что корневой терминал также отображается как принадлежащий пользователю без полномочий root. На этом этапе вы знаете, как работать с консолью, терминалами, виртуальными терминалами и псевдотерминалами. В разделе «Использование SSH и связанных с ним утилит» далее в этой главе вы используете SSH для открытия сеансов терминала на вашем сервере. Эти сеансы также отображаются как псевдотерминалы. Загрузка, перезагрузка и выключение систем Как администратору Linux-сервера вам иногда приходится перезагружать Linux-сервер. Перезагрузка сервера не всегда является обязательным требованием, но она может значительно облегчить вашу работу, поскольку обеспечит повторное выполнение всех процессов и задач, которые выполнялись на вашем сервере прочитать их конфигурации и правильно инициализировать. СОВЕТ. Перезагрузка сервера Linux - важная задача на экзамене RHCSA. Все, что вы настроили, должно продолжать работать после перезагрузки сервера. Поэтому не забудьте перезагрузиться хотя бы один раз во время экзамена, а также после внесения критических изменений в конфигурацию сервера. Если ваш сервер больше не может перезагружаться после внесения критических изменений в его конфигурацию, по крайней мере, вы знаете, где искать, чтобы исправить проблемы. Для администратора, который действительно очень хорошо знает Linux, перезагрузка сервера возникает редко. Опытные администраторы часто могут активировать правильный параметр, чтобы заставить процесс перечитать свои конфигурации. Однако есть некоторые сценарии, в которых даже опытным администраторам Linux приходится перезагружаться:

▪ ▪ ▪

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

Когда сервер перезагружается, все запущенные процессы должны быть должным образом завершены. Если сервер просто остановлен путем выдергивания вилки кабеля питания, как правило, теряется много данных. Это связано с тем, что процессы, которые записали данные, 94

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

systemctl reboot или reboot systemctl halt или halt systemctl poweroff или poweroff

При остановке машины вы можете использовать команду systemctl halt или systemctl poweroff. Разница между этими двумя командами заключается в том, что команда systemctl poweroff обращается к системе управления питанием на машине, чтобы выключить ее. Этого часто не происходит при использовании systemctl halt. ПРИМЕЧАНИЕ Использование только что описанных методов обычно приводит к перезагрузке или остановке вашего компьютера. В некоторых случаях эти команды могут не работать. Если это так, есть возможность аварийного сброса. Использование этой опции может оказаться полезным, если машина физически недоступна. Чтобы принудительно выполнить перезагрузку компьютера, от имени пользователя root вы можете ввести echo b> /proc/sysrqtrigger. Эта команда немедленно перезагружает машину, ничего не сохраняя. Обратите внимание, что эту команду следует использовать, только если нет другого выбора! Использование SSH и сопутствующие утилиты В предыдущих разделах этой главы вы узнали, как получить доступ к терминалу, если у вас есть прямой доступ к консоли сервера. Многие администраторы работают с серверами, которые физически недоступны. Для управления этими серверами обычно используется Secure Shell (SSH). В этом разделе вы узнаете, как работать с SSH. В современных дистрибутивах Linux Secure Shell является обычным методом получения доступа к другим машинам по сети. В SSH криптография используется для обеспечения уверенности в том, что вы подключаетесь к предполагаемому серверу. Кроме того, при передаче трафик шифруется. Доступ к удаленным системам с помощью SSH Чтобы получить доступ к серверу с помощью SSH, необходимы два компонента. На удаленном сервере, к которому вы хотите получить доступ, служба sshd должна работать и предлагать услуги на порту 22, и она не должна блокироваться брандмауэром. После установки Red Hat Enterprise Linux автоматически запускает процесс sshd, и по умолчанию он не блокируется брандмауэром. Если порт SSH открыт, вы можете получить к нему доступ с помощью команды ssh из командной строки. Команда ssh по умолчанию пытается связаться с процессом sshd на порту 22 95

сервера. Если вы настроили процесс sshd для предоставления своих услуг на другом порту, используйте ssh -p с указанием номера порта, к которому вы хотите подключиться. Команда ssh доступна во всех дистрибутивах Linux, а также на компьютерах Apple Mac, где ее можно запустить с терминала Mac. Если у вас есть версия Windows, в которой нет подсистемы Windows для Linux, команда ssh не является встроенной частью операционной системы Windows. Если вы хотите получить доступ к серверам Linux через SSH с компьютера Windows, вам необходимо установить SSH-клиент, например, PuTTY, в Windows. С помощью PuTTY можно устанавливать различные типы удаленных сеансов с машинами Linux. Также доступны альтернативные клиенты SSH для Windows, такие как MobaXterm, KiTTY, mRemoteNG, Bitvise и Xshell. Доступ к другой машине Linux с терминала Linux относительно прост. Просто введите ssh, а затем имя другой машины Linux. После подключения вам будет предложено ввести пароль, если используется конфигурация по умолчанию. Это пароль учетной записи пользователя с тем же именем, что и у вашей текущей учетной записи, но которая должна существовать на удаленном компьютере. При удаленном подключении к серверу Linux клиент SSH пытается сделать это в качестве учетной записи пользователя, под которой вы в настоящее время вошли в систему на локальном компьютере. Если вы хотите подключиться с использованием другой учетной записи пользователя, вы можете указать имя этого пользователя в командной строке в формате user @ server. Если, например, вы хотите установить сеанс SSH в качестве пользователя root на удаленный сервер, введите ssh root@remoteserver. Альтернативный способ указать учетную запись пользователя - использовать параметр -l username. Итак, ssh remoteserver -l root также попытается установить root сессию с удаленным сервером. В упражнении 5-3 вы узнаете, как войти на удаленный сервер с помощью SSH. Упражнение 5-3 Использование SSH для входа на удаленный сервер В этом упражнении предполагается, что удаленный сервер доступен и доступен. В этом упражнении server1 используется в качестве локального сервера, а server2 - это удаленный сервер, на котором должен быть запущен процесс sshd. Если вы не можете получить доступ к удаленному серверу для выполнения шагов в упражнении, вы можете в качестве альтернативы заменить server2 на localhost. Очевидно, что при этом вы не войдете в систему на удаленном сервере, но вы все равно будете использовать команду ssh для подключения к процессу sshd, и вы получите полноценный опыт работы с ssh. 1. Откройте корневую оболочку на server2. Введите systemctl status sshd. Это должно показать вам, что процесс sshd в настоящее время запущен. 2. Чтобы избежать проблем, связанных с брандмауэром, введите systemctl stop firewalld. 3. Введите ip addr | grep 'inet '. (Обратите внимание на пробел между inet и закрывающей кавычкой.) Обратите внимание на адрес IPv4, который в настоящее время использует ваш сервер. В оставшейся части этого упражнения предполагается, что server2 использует IPадрес 192.168.4.220. Замените этот адрес на адрес, который вы здесь нашли. 4. Откройте оболочку shell от имени непривилегированного пользователя на server1. 5. На server1 введите ssh 192.168.4.220 -l root. Это подключается к процессу sshd на server2 и открывает shell для пользователя root. 6. Перед тем, как вам будет предложено ввести пароль, вы увидите сообщение о том, что подлинность хоста 192.168.4.220 не может быть установлена (см. Пример 5-1). Это сообщение отображается, потому что хост, к которому вы подключаетесь, еще не известен

96

на вашем текущем хосте, что может представлять угрозу безопасности. Введите да (yes), чтобы продолжить. 7. При появлении запроса введите пароль root. После его ввода вы теперь вошли на server2. 8. Введите w. Обратите внимание, что только что открытый сеанс SSH отображается как еще один сеанс псевдотерминала, но вы увидите исходный IP-адрес в столбце FROM. 9. Введите exit, чтобы закрыть сеанс SSH. Пример 5-1 Сообщение безопасности, отображаемое при первом входе на удаленный сервер [root@server1 ~]# ssh 192.168.4.220 -l root The authenticity of host '192.168.4.220 ()' can't be established. ECDSA key fingerprint is 35:64:36:f8:ac:4f:8a:94:aa:6e:4b:85:ed:76:0a:eb. Are you sure you want to continue connecting (yes/no)?

ПРИМЕЧАНИЕ. В некоторых случаях использование ssh для доступа к серверу будет медленным. Если вы хотите знать, почему, используйте параметр -v с командой ssh. Это запустит SSH в подробном режиме и покажет все отдельные компоненты, с которыми осуществляется связь. Таким образом, вы можете понять, почему ваш сервер работает медленно. Сообщение безопасности отображается в Примере 5-1, потому что с удаленным сервером никогда ранее не связывались, и поэтому нет способа проверить идентичность удаленного сервера. После подключения к удаленному серверу отпечаток открытого ключа сохраняется в файле ~/.ssh/known_hosts. В следующий раз, когда вы подключаетесь к тому же серверу, этот отпечаток пальца проверяется с помощью ключа шифрования, который был отправлен удаленным сервером для инициализации контакта. Если отпечаток пальца совпадает, вы больше не увидите это сообщение. В некоторых случаях отпечаток ключа удаленного хоста не совпадает с отпечатком ключа, который хранится локально. Это потенциально опасная ситуация. Вместо того, чтобы быть подключенным к намеченному серверу, вы можете быть подключены к серверу злоумышленника. Однако это также происходит, если вы подключаетесь к IP-адресу, к которому вы были подключены раньше, но теперь он используется другим сервером. В этом случае вам просто нужно удалить отпечаток ключа из файла ~/.ssh/known_hosts на клиентском компьютере. Вы можете легко это сделать, используя sed. Например, используйте команду sed -i -e '25d' ~/.ssh/known_hosts, чтобы удалить строку 25 из файла known_hosts (при условии, что это строка, содержащая ошибочный ключ). Использование графических приложений в среде SSH По умолчанию из сеанса SSH нельзя запускать графические приложения. Это из-за безопасности; удаленный хост не может отображать экраны на вашем компьютере без специального разрешения на это. Для запуска графических приложений через соединение SSH есть два требования: ▪ ▪

На клиентском компьютере должен быть запущен X-сервер. X-сервер - это программный компонент, который создает графические экраны. Удаленному хосту должно быть разрешено отображать экраны на локальном компьютере. 97

Самый простой способ разрешить удаленному хосту отображать графические экраны на вашем компьютере - это добавить параметр -Y к команде ssh. Итак, используйте ssh -Y linda@server2, если вы хотите подключиться как linda к server2, а также иметь возможность запускать графические приложения. Как вы заметили, команда ssh дает вам несколько вариантов. Таблица 5-2 показывает некоторые из наиболее распространенных доступных опций.

Таблица 5-2 Общие параметры ssh Опция

Назначение

-v

Подробный; соединения

подробно

показывает,

что

происходит

при

установлении

-Y

Включает поддержку графических приложений

-p

Используется для подключения к службе SSH, которая не прослушивает порт по умолчанию 22.

Как администратор, вы также можете создать общесистемную конфигурацию, которая позволяет использовать X-пересылку, которая запускает графические приложения через сеанс SSH. От имени пользователя root откройте файл конфигурации /etc/ssh/ssh_config и убедитесь, что он включает следующую строку: ForwardX11 yes В следующий раз, когда вы воспользуетесь командой ssh, перенаправление X будет доступно по умолчанию. Безопасная передача файлов между системами Если на хосте запущена служба sshd, эту службу также можно использовать для безопасной передачи файлов между системами. Для этого вы можете использовать команду scp, если вы хотите, чтобы файл был скопирован, или rsync, если вы хотите синхронизировать файл. Кроме того, команда sftp является частью решения SSH и позволяет пользователям использовать синтаксис командной строки FTP для передачи файлов с помощью sshd. Использование scp для безопасного копирования файлов Команда scp похожа на команду cp, которая используется для копирования локальных файлов, но также включает параметр, позволяющий работать с удаленными хостами. Вы можете использовать scp для копирования файлов и подкаталогов на удаленные узлы и обратно, а также подкаталогов. Чтобы скопировать, например, файл /etc/hosts в каталог /tmp на сервере server2, используя текущую учетную запись пользователя, используйте следующую команду: scp /etc/hosts server2:/tmp 98

Если вы хотите подключиться к server2 как пользователь root, чтобы скопировать файл /etc/passwd в свой домашний каталог, используйте следующую команду: scp root@server2:/etc/passwd ~ Вы также можете использовать scp для копирования всей структуры подкаталогов. Для этого используйте команду scp -r, как в следующей команде: scp -r server2:/etc/ /tmp Обратите внимание, что команду scp также можно настроить для подключения к порту SSH, отличному от стандартного. Это немного сбивает с толку, но, чтобы сделать это с помощью команды scp, вам понадобится параметр -P, за которым следует номер порта, к которому вы хотите подключиться. Обратите внимание, что ssh использует -p (нижний регистр) для указания порта, к которому необходимо подключиться; команда scp использует заглавную букву -P. Использование sftp для безопасной передачи файлов Команда sftp предоставляет альтернативу безопасной передаче файлов. В то время как команда scp предоставляет интерфейс, очень похожий на команду cp, команда sftp предоставляет интерфейс, подобный FTP. Поскольку даже современные FTP-серверы по-прежнему передают пароли и другие конфиденциальные данные без использования шифрования, sftp следует рассматривать, как альтернативу. При работе с sftp вы открываете сеанс FTP-клиента с удаленным сервером, где единственное требование к удаленному серверу – запущенный процесс sshd. В сеансе FTPклиента вы используете типичные параметры FTP-клиента, например, put, чтобы загрузить файл или get, чтобы загрузить файл. Обратите внимание, что при работе с sftp важен локальный каталог, даже если после открытия сеанса FTP вы видите только удаленный каталог на сервере. При загрузке файла с помощью команды get файл будет сохранен в текущем локальном каталоге, а при загрузке файла с помощью команды put файл будет найден в локальном каталоге. Упражнение 5-4 дает вам пошаговую инструкцию по использованию команд sftp и rsync, которые обсуждаются ниже. Использование rsync для синхронизации файлов Команда rsync использует SSH для синхронизации файлов между удаленным и локальным каталогами. Преимущество синхронизации файлов заключается в том, что необходимо учитывать только различия. Так, например, если вы синхронизируете файл размером 100 МиБ, в котором с момента предыдущей синхронизации изменились только несколько блоков, будут синхронизированы только измененные блоки. Этот подход также известен как дельтасинхронизация. При использовании команды rsync доступны несколько параметров. В Таблице 5-3 представлен обзор. Таблица 5-3 Общие параметры rsync 99

Опция

Назначение

-r

Синхронизирует все дерево каталогов

-l

Также синхронизирует символические ссылки

-p

Сохраняет символические ссылки

-n

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



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



Использует режим архивации, а также синхронизирует ACL

-X

Также синхронизирует контекст SELinux

Упражнение 5-4 Использование SSH для входа на удаленный сервер 1. В терминале введите sftp student@server2. Это дает вам доступ к приглашению SFTP, которое открывается на server2. 2. Введите ls. Вы увидите файлы в текущем рабочем каталоге на удаленном сервере. 3. Введите pwd. Это показывает текущий каталог на удаленном сервере. 4. Введите lpwd. Это показывает ваш локальный текущий каталог. 5. Введите lcd /tmp. Это изменяет локальный текущий каталог на /tmp. 6. Теперь введите get, где - это имя любого файла в удаленном текущем каталоге. Этот файл будет загружен в локальный каталог /tmp. 7. Введите exit, чтобы закрыть сеанс SFTP. 8. Введите rsync -a server2:/etc/ /tmp. Это синхронизирует содержимое удаленного каталога /etc в локальном каталоге /tmp. 9. Введите ls -d /tmp/etc, чтобы убедиться, что удаленный каталог был синхронизирован. Настройка аутентификации на основе ключей для SSH Если в Интернете используется SSH, не рекомендуется разрешать вход по паролю. Чтобы сделать SSH немного более безопасным, он всегда сначала будет проверять, возможен ли вход с использованием открытых/закрытых ключей. Только если это невозможно, используется пароль для входа. Единственное, что вам нужно сделать, чтобы включить вход на основе ключей, - это создать пару ключей; все остальное уже организовано по умолчанию. При использовании аутентификации на основе открытого/закрытого ключей пользователь, который хочет подключиться к серверу, генерирует пару открытого/закрытого ключей. Закрытый ключ должен храниться в секрете и никогда не будет распространяться. Открытый ключ хранится в домашнем каталоге целевого пользователя на сервере SSH в файле .ssh/authorized_keys. При аутентификации с использованием пар ключей пользователь генерирует хеш, полученный из закрытого ключа. Хэш отправляется на сервер, и, если на сервере оказывается, что он соответствует публичному ключу, который хранится на сервере, пользователь аутентифицируется. Использовать парольные фразы или нет? При создании пары открытого/закрытого ключей вам будет предложено ввести кодовую фразу. Если вы хотите максимальную безопасность, вам следует ввести кодовую фразу. Вам 100

предлагается ввести эту парольную фразу каждый раз, когда вы используете закрытый ключ для аутентификации на удаленном хосте. Это очень безопасно, но не очень удобно. Чтобы создать конфигурацию, которая обеспечивает максимальное удобство, вы можете просто дважды нажать клавишу Enter, чтобы подтвердить, что вы не хотите устанавливать парольную фразу. Это типичная конфигурация, которая используется для аутентификации между серверами в доверенной среде, где в любом случае внешний доступ невозможен. Чтобы создать пару ключей, используйте команду ssh-keygen. Затем используется команда ssh-copy-id для копирования открытого ключа на целевой сервер. В упражнении 5-5 вы создаете пару открытого и закрытого ключей для входа на хост server2. (Если удаленный хост недоступен, вы можете использовать localhost в качестве альтернативы для проверки процедуры.) Упражнение 5-5 Подключение к удаленному серверу с общедоступными (public)/частными (private) ключами 1. На server1 откройте корневую оболочку. 2. Введите ssh-keygen. Когда вас спросят, хотите ли вы использовать парольную фразу, нажмите Enter, чтобы использовать настройку без парольной фразы. 3. Когда вас попросят указать имя файла, в котором будет храниться (закрытый) ключ, примите имя файла по умолчанию ~/.ssh/id_rsa. 4. Когда вас попросят ввести кодовую фразу, дважды нажмите Enter. 5. Закрытый (private) ключ теперь записан в файл ~/.ssh/id_rsa, а открытый (public) ключ записан в файл ~/.ssh/id_rsa.pub. 6. Используйте ssh-copy-id server2, чтобы скопировать на server2 открытый ключ, который вы только что создали. Затем вас в последний раз спросят пароль на удаленном сервере. 7. После копирования открытого ключа убедитесь, что его действительно можно использовать для аутентификации. Для этого введите ssh server2. Теперь вы должны пройти аутентификацию, не вводя пароль для учетной записи удаленного пользователя. После копирования открытого ключа на удаленный хост он будет записан в файл ~/.ssh/authorized_keys на этом хосте. Обратите внимание, что, если несколько пользователей используют ключи для входа в систему с этой конкретной учетной записью, файл authorized_keys может содержать много открытых ключей. Никогда не перезаписывайте его, потому что это приведет к стиранию всех ключей, используемых другими пользователями! Использование команды screen Вам не обязательно знать о команде screen для экзамена RHCSA, но вы должны знать о ней для работы, потому что она позволяет вам открывать несколько сеансов терминала, даже если вы не находитесь в графической среде. Команда screen позволяет вам совместно использовать сеанс с другими пользователями, а также подключаться к сеансам удаленного терминала и отключаться от них. Прежде чем вы сможете использовать screen, вам необходимо его установить. Для этого используйте команду yum install -y screen. После установки программы, введите screen, чтобы открыть сеанс экрана. Из сеанса экрана вы можете запустить любую команду, которая вам нравится. Команда screen особенно полезна при использовании из сеанса SSH. Вы можете запустить задачу, которая занимает много времени из сеанса работы с экраном, отсоединиться от нее и присоединиться к ней позже. Команда продолжает работать, даже если вы идете домой и выключаете компьютер. На следующий день вы можете снова легко прикрепиться к экрану, чтобы выполнить задание. Для этого достаточно выполнить простую процедуру: 101

Откройте сеанс SSH. В сеансе SSH введите screen, чтобы открыть сеанс экрана. Запустите любую задачу, которую хотите запустить, и продолжайте ее выполнять. Используйте последовательность клавиш Ctrl-A, D, чтобы отключиться от сеанса экрана и выйти из сеанса SSH. 5. Когда вы будете готовы к повторному подключению, снова запустите сеанс SSH. Важно, чтобы вы использовали ту же учетную запись пользователя, которую использовали раньше. 6. Снова подключитесь к сеансу экрана с помощью screen -r. Теперь вы можете удобно завершить работу, которую вы начали с сеанса экрана ранее. 1. 2. 3. 4.

Работая с командой screen, вы работаете в конкретном приложении. Из этого приложения вы можете вводить определенные команды. Чтобы использовать эти специальные экранные команды, начните с нажатия Ctrl-A, ?. Это показывает список всех доступных команд. Каждая команда screen запускается с помощью комбинации клавиш Ctrl-A. Следует запомнить важную команду Ctrl-A, /, которая закроет сессию программы screen. Обязательно удалите сессии screen, которые вам больше не нужны; в противном случае они останутся активными до следующей перезагрузки сервера! Если при попытке присоединиться к сеансу screen вы получаете сообщение о том, что в данный момент выполняется несколько сеансов, вам нужно быть более конкретным. Чтобы узнать, какие сеансы screen выполняются в данный момент, используйте команду screen -ls. В примере 52 вы можете увидеть, как команда screen используется для отображения сеансов, которые в данный момент находятся в отсоединенном состоянии, и как команда screen -r выдает список всех доступных в настоящее время сеансов, из которых вы можете выбрать сеанс screen, к которому вы хотите подключиться, добавив номер сеанса экрана к команде screen -r. Пример 5-2 Правильный выбор сеанса screen

Вы также можете использовать screen для совместной работы с другими пользователями в одном сеансе. Для этого выполните следующие действия: 1. Убедитесь, что оба пользователя используют SSH для подключения к системе, в которой вы хотите работать вместе. Оба пользователя должны использовать одну и ту же учетную запись при использовании SSH для подключения. 2. Один пользователь должен запустить сеанс с помощью команды screen. 3. Второй пользователь может просто подключиться к сеансу с помощью screen -x.

102

Резюме В этой главе вы узнали, как подключиться к Red Hat Enterprise Linux 8. Вы узнали разницу между консолями, терминалами и shells, а также узнали, как настраивать сеансы терминалов локально и удаленно. Вы также узнали, как использовать SSH для подключения к удаленному серверу и как безопасно копировать файлы между серверами. В конце этой главы вы узнали, как использовать утилиту screen для запуска заданий в сеансе, от которого вы можете отсоединиться, а затем повторно подключиться к нему позже.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во введении, у вас есть несколько вариантов подготовки к экзамену: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 5-4 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 5-4 Ключевые темы главы 5 Элемент ключевой темы Абзац

Описание

Страница

Определение слов консоль и терминал

90

Список

Ситуации, которые обычно требуют перезагрузки сервера

94

Таблица 5-2

Общие параметры ssh

98

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: консоль, терминал, tty, оболочка входа, подоболочка, перезагрузка, systemd, вход на основе ключа, открытый ключ, частный ключ (console, terminal, tty, login shell, subshell, reboot, systemd, key-based login, public key, private key) 103

Обзорные вопросы В следующих вопросах используется открытый формат, который поможет вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Что такое console? 2. На сервере, который в настоящее время имеет рабочий графический интерфейс, вы видите текстовое приглашение для входа в систему. Какую последовательность клавиш вы используете, чтобы вернуться к текущей работе с графическим интерфейсом? 3. Какие команды показывают всех пользователей, у которых в настоящий момент открыт сеанс терминала на сервере Linux? 4. На сервере, на котором не работает графический интерфейс, какое имя устройства будет использоваться в первом сеансе SSH, открытом для этого сервера? 5. Какую команду вы бы использовали для получения подробной информации о том, что делает SSH при входе в систему? 6. Как инициировать сеанс SSH с поддержкой графических приложений? 7. Как называется файл конфигурации, который необходимо отредактировать, чтобы изменить настройки клиента SSH? 8. Как скопировать файл /etc/hosts в каталог /tmp на сервере server2, используя имя пользователя lisa? 9. Как называется файл, в котором хранятся открытые ключи для удаленных пользователей, которые хотят войти в систему с помощью аутентификации на основе ключей? 10. Какая команда позволяет сгенерировать пару открытого и закрытого ключей SSH?

Лабораторные работы в конце главы Лабораторные работы в конце главы помогут вам применить на практике то, что вы узнали на протяжении всей главы. Первая лабораторная работа посвящена локальному подключению к RHEL 8, а вторая лабораторная работа - использованию SSH для входа на удаленный сервер.

Лабораторная работа 5.1 1. Войдите в локальную консоль на server1. Убедитесь, что server1 больше не отображает графический интерфейс, а только текстовое приглашение для входа. 2. Войдите в систему из этой среды и активируйте tty6. С tty6 снова включите графический интерфейс и используйте правильную последовательность клавиш, чтобы перейти к графическому интерфейсу.

Лабораторная работа 5.2 1. Настройте аутентификацию на основе SSH. С server2 используйте SSH для подключения к server1. 2. Убедитесь, что графические приложения поддерживаются через сеанс SSH. Также настройте аутентификацию на основе ключей, чтобы не вводить пароль при подключении к удаленному серверу.

104

Глава 6 В этой главе рассматриваются следующие темы: ▪ ▪ ▪

Различные типы пользователей Создание и управление учетными записями пользователей Создание и управление групповыми учетными записями

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪ ▪ ▪

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

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

Управление пользователями и группами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 6-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 6 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Различные типы пользователей

1-2

Создание и управление учетными записями пользователей

3-6

Создание и управление групповыми учетными записями

7 - 10

1. Какое утверждение о привилегированных пользователях (root) верно? a. Привилегированный пользователь - это пользователь, имеющий доступ к системе Linux. b. Привилегированный пользователь без прав доступа вообще ничего не может делать. c. Привилегированные пользователи никоим образом не ограничены. 105

d. На каждом сервере при установке сервера должен быть вручную создан хотя бы один привилегированный пользователь. 2. При установке сервера RHEL 8 по умолчанию, членом какой группы обычно должен быть пользователь, чтобы иметь возможность использовать sudo для выполнения всех команд администрирования? a. b. c. d.

admin root sys wheel

3. Пользователи могут запускать задачи с правами суперпользователя разными способами. Что из перечисленного не входит в их число? a. b. c. d.

sudo runas su PolicyKit

4. Что из следующего используется для хранения хэша зашифрованного пароля пользователя? a. b. c. d.

/etc/passwd /etc/shadow /etc/users /etc/secure

5. Какой файл конфигурации следует изменить, чтобы задать расположение по умолчанию для всех домашних каталогов новых пользователей? a. b. c. d.

/etc/login.defaults /etc/login.defs /etc/default/useradd /etc/default/login.defs

6. Какая команда позволяет получить информацию о таких свойствах пароля, как срок действия пароля? a. b. c. d.

chage -l usermod --show passwd -l chage –show

7. Какой из следующих файлов не обрабатывается, когда пользователь запускает оболочку входа в систему? a. /etc/profile b. /etc/.profile c. ~/.bashrc 106

d. ~/.bash_profile 8. Какую утилиту можно использовать для редактирования членства в группе напрямую через соответствующий файл конфигурации? a. b. c. d.

vigr vipw vipasswd usermod

9. Какую команду можно использовать для вывода списка всех групп, в которые входит пользователь? a. b. c. d.

userlist grouplist id groups

10. Что вы можете сделать, чтобы ни один пользователь, за исключением пользователя root, не мог временно войти в систему? a. b. c. d.

Установите shell по умолчанию to /usr/sbin/nologin Установите shell по умолчанию to /bin/false Создайте файл с именем /etc/nologin Создайте файл с именем /etc/nologin.txt

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

Пользователи Linux В Linux есть два способа взглянуть на безопасность системы. Есть привилегированные пользователи, а есть непривилегированные пользователи. По умолчанию привилегированный пользователь - root. Эта учетная запись пользователя даёт полный доступ ко всему на сервере Linux и может работать в системном пространстве без ограничений. Учетная запись пользователя root предназначена для выполнения задач системного администрирования и должна использоваться только для этого. Для всех остальных задач следует использовать учетную запись непривилегированного пользователя. Чтобы получить информацию об учетной записи пользователя, вы можете использовать команду id. При использовании этой команды из командной строки вы можете увидеть подробную информацию о текущем пользователе. Вы также можете использовать его для других учетных

107

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

Выполнение работы как пользователь root Во всех системах Linux по умолчанию используется пользователь root, также известный как суперпользователь. Эта учетная запись используется для управления Linux и не имеет никаких ограничений. Например, Root может создавать другие учетные записи пользователей в системе. Для некоторых задач требуются права root. Для примера: установка программного обеспечения, управление пользователями и создание разделов на дисковых устройствах. Вообще говоря, для всех задач, связанных с прямым доступом к устройствам, требуются права root. Поскольку учетная запись root очень полезна для управления средой Linux, некоторые люди имеют привычку входить в систему напрямую как root. Это не рекомендуется, особенно когда вы входите в графическую среду. Когда вы входите в систему как root в графической среде, все задачи, которые выполняются, также запускаются, как root, что влечет за собой ненужную угрозу безопасности. Поэтому вместо этого вам следует использовать один из следующих альтернативных методов. В Таблице 6-2 представлен обзор этих методов.

Таблица 6-2 Способы запуска задач с повышенными правами Метод

Описание

su

Открывает subshell от имени другого пользователя, с тем преимуществом, что команды выполняются от имени пользователя root только в подоболочке.

sudo

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

PolicyKit Позволяет настроить графические утилиты для работы с правами администратора. Использование команды su Из окна терминала вы можете использовать команду su для запуска subshell, в которой у вас есть другой идентификатор. Например, для выполнения административных задач вы можете войти в систему с обычной учетной записью и ввести su, чтобы открыть root shell. Это дает то преимущество, что привилегии root используются только в оболочке root. Если вы наберете только команду su, подразумевается выполнение пользователя root. Но su можно использовать и для запуска задач от имени другого пользователя. Введите например su linda, , чтобы открыть подоболочку от имени пользователя linda. При использовании su в

108

качестве обычного пользователя вам будет предложено ввести пароль, и после его ввода вы получите учетные данные целевого пользователя: [linda@localhost ~]$ su Password: [root@localhost linda]# Subshell, которая запускается при использовании su, представляет собой среду, в которой вы можете работать в качестве целевой учетной записи пользователя, но параметры среды для этой учетной записи не были установлены. Если вам нужен полный доступ ко всей среде целевой учетной записи пользователя, вы можете использовать su - для запуска оболочки входа. Если вы запускаете оболочку входа в систему, все сценарии, составляющие пользовательскую среду, обрабатываются, что позволяет вам работать в среде, которая точно такая же, как при входе в систему от имени этого пользователя.

СОВЕТ Использование su - лучше, чем использование su. Когда используется (-) запускается оболочка входа в систему; без (-) некоторые переменные могут быть установлены неправильно. Так что лучше использовать su - немедленно.

Sudo Если пользователю без полномочий root необходимо выполнить конкретную задачу системного администрирования, пользователю не нужен root-доступ; вместо этого системный администратор может настроить sudo, чтобы дать этому пользователю права администратора для выполнения определенной задачи. Затем пользователь выполняет задачу, запустив команду с помощью sudo (и введя свой пароль при появлении запроса). Таким образом, вместо использования таких команд, как useradd в качестве пользователя root, вы можете использовать обычную учетную запись пользователя и ввести sudo useradd. Это определенно более безопасно, потому что вы сможете действовать так, как будто у вас есть права администратора, только при выполнении этой конкретной команды. При создании пользователя Linux во время процесса установки вы можете предоставить конкретному пользователю права администратора. Если вы это выберете, пользователь сможет использовать все команды администратора с помощью sudo. Также можно настроить привилегии sudo после установки, сделав пользователя членом группы wheel. Чтобы сделать это, используйте эту простую двухэтапную процедуру: 1. Сделайте учетную запись пользователя членом группы wheel с помощью usermod -aG wheel user. 2. Введите visudo и убедитесь, что указана строка % wheel ALL=(ALL) ALL. Помимо этого метода, который предоставляет пользователю доступ ко всем административным командам, вы можете использовать visudo для редактирования файла конфигурации sudoers и предоставления пользователю доступа только к определенным командам. Например, если вы включите в этот файл строку linda ALL=/usr/bin/useradd, /usr/bin/passwd, это позволит пользователю linda запускать только команды useradd и passwd с административными привилегиями. 109

PolicyKit Большинство программ администрирования с графическим пользовательским интерфейсом используют PolicyKit для аутентификации в качестве пользователя root. Если к такому приложению обращается обычный пользователь, не входящий в группу wheel, ему будет предложено пройти аутентификацию. Если пользователь, который является членом группы wheel, открывает приложение PolicyKit, ему нужно будет ввести свой собственный пароль. Для экзамена RHCSA вам не обязательно знать детали PolicyKit. Если вам интересно, вы можете взглянуть на справочные страницы команд pkexec и polkit для получения более подробной информации. В упражнении 6-1 вы попрактикуетесь в переключении учетных записей пользователей. Упражнение 6-1 Смена учетных записей пользователей 1. Войдите в свою систему как непривилегированный пользователь и откройте терминал. 2. Введите whoami, чтобы узнать, какую учетную запись вы используете в настоящее время. Также введите id и обратите внимание, что вы получите более подробную информацию о ваших текущих учетных данных при использовании id. 3. Введите su. При запросе пароля введите пароль root. Введите id еще раз. Вы видите, что в настоящее время вы являетесь пользователем root. 4. Введите visudo и убедитесь, что строка %wheel ALL=(ALL) ALL есть и не закомментирована. 5. Введите useradd -G wheel laura, чтобы создать пользователя laura, который является членом группы wheel. 6. Введите id laura, чтобы убедиться, что пользователь laura добавлен в группу wheel. 7. Установите пароль для пользователя laura, набрав passwd laura. Дважды введите пароль password. 8. Выйдите из системы и войдите как laura. 9. Введите sudo useradd lori. Введите пароль, когда его спросят. Обратите внимание, что был создан пользователь lori. Управление учетными записями пользователей Теперь, когда вы знаете, как выполнять задачи как пользователь с административными правами или обычный пользователь, пора научиться управлять учетными записями пользователей в Linux. В этом разделе вы узнаете, о чем идет речь. Системные учетные записи и обычные учетные записи Типичная среда Linux имеет два типа учетных записей пользователей. Существуют обычные учетные записи пользователей для людей, которым необходимо работать на сервере и которым нужен ограниченный доступ к ресурсам на этом сервере. Даныне учетные записи пользователей обычно имеют пароль, который используется для аутентификации пользователя в системе. Существуют также системные учетные записи, которые используются службами, которые предлагает сервер. Оба типа учетных записей пользователей имеют общие свойства, которые хранятся в файлах /etc/passwd и /etc/shadow.. В примере 6-2 показана часть содержимого файла /etc/passwd. Пример 6-2 Частичное содержимое файла конфигурации пользователя /etc/passwd

110

ПРИМЕЧАНИЕ На многих серверах Linux почти нет учетных записей пользователей, которые используются людьми. Многие серверы Linux установлены для запуска определенной службы, и, если люди взаимодействуют с этой службой, они будут аутентифицироваться внутри службы. Как видно из примера 6-2, для определения учетной записи пользователя в /etc/passwd используются разные поля. Поля отделяются друг от друга двоеточием. Ниже приводится сводка этих полей с кратким описанием их назначения.











Username: это уникальное имя пользователя. Имена пользователей важны, чтобы сопоставить пользователя с его паролем, который хранится отдельно в /etc/shadow (см. Следующий пункт). В Linux в имени пользователя не должно быть пробелов, и, как правило, рекомендуется указывать имена пользователей строчными буквами. Password: раньше второе поле /etc/passwd использовалось для хранения хешированного пароля пользователя. Поскольку файл /etc/passwd доступен для чтения всем пользователям, это представляет угрозу безопасности, и по этой причине в текущих системах Linux хешированные пароли хранятся в /etc/shadow (обсуждается в следующем разделе). UID: у каждого пользователя есть уникальный идентификатор пользователя (UID). Это числовой идентификатор. Именно UID действительно определяет, что может делать пользователь. Когда для пользователя установлены разрешения, UID (а не имя пользователя) сохраняется в метаданных файла. UID c значением 0 зарезервирован для root, неограниченной учетной записи пользователя. Более низкие UID (обычно до 999) используются для системных учетных записей, а более высокие UID (от 1000 по умолчанию) зарезервированы для людей, которым необходимо подключить каталогу на сервере. Диапазон UID, которые используются для создания учетных записей обычных пользователей, задается в /etc/login.defs. GID: в Linux каждый пользователь является членом как минимум одной группы. Эта группа называется основной группой, и эта группа играет центральную роль в управлении разрешениями, как обсуждается далее в этой главе. Пользователи могут быть членами дополнительных групп, которые администрируются в файле /etc/groups. Comment field: поле «Комментарий», как вы можете догадаться, используется для добавления комментариев для учетных записей пользователей. Это поле необязательно, но его можно использовать для описания того, для чего создается учетная запись пользователя. Некоторые утилиты, такие как устаревшая утилита finger, можно использовать для получения информации из этого поля. Это поле также называют полем GECOS, что означает комплексную операционную систему General Electric и имело конкретную цель 111





для определения рабочих мест в начале 1970-х годов, когда General Electric все еще была важным производителем серверов. Directory: это начальный каталог, в который помещается пользователь после входа в систему, также называемый домашним каталогом (home directory). Если учетная запись пользователя используется человеком, именно здесь человек будет хранить свои личные файлы и программы. Для системной учетной записи пользователя это среда, в которой служба может хранить файлы, необходимые ей во время работы. Shell: это программа, которая запускается после успешного подключения пользователя к серверу. Для большинства пользователей это будет /bin/bash, оболочка Linux по умолчанию. Для учетных записей системных пользователей это обычно оболочка типа /sbin/nologin. Команда /sbin/nologin - это особая команда, которая молча запрещает доступ пользователям (чтобы гарантировать, что если злоумышленник случайно войдет на сервер, он не сможет получить доступ к оболочке). При желании вы можете создать файл /etc/nologin.txt, и в этом случае только root сможет войти в систему, но другие пользователи будут видеть содержимое этого файла, когда их вход в систему запрещен.

Часть свойств пользователя хранится в /etc/passwd, о чем только что говорилось. Другая часть конфигурации свойств пользователя хранится в файле /etc/shadow. Настройки в этом файле используются для установки свойств пароля. Только пользователь root и процессы, запущенные с правами root, имеют доступ к /etc/shadow. В примере 6-3 показан пример содержимого /etc/shadow. Пример 6-3 Пример содержимого из /etc/shadow

Следующие поля включены в /etc/shadow ▪ ▪

▪ ▪

Login name: обратите внимание, что /etc/shadow не содержит UID, а содержит только имена пользователей. Это открывает возможность для нескольких пользователей использовать один и тот же UID, но разные пароли (что, кстати, не рекомендуется). Encrypted password: это поле содержит все, что необходимо для безопасного хранения пароля. Если поле пустое, пароль не установлен и пользователь не может войти в систему. Если поле начинается с восклицательного знака, вход для этой учетной записи в настоящее время отключен. Days since Jan. 1, 1970, that the password was last changed: Многие вещи в Linux относятся к этой дате, которая в Linux считается началом времен. Его еще называют эпохой. Days before password may be changed: это поле позволяет системным администраторам использовать более строгую политику паролей, при которой невозможно вернуться к исходному паролю сразу после его смены. Обычно для этого поля установлено значение 0.

112

▪ ▪







Days after which password must be changed: в этом поле указывается максимальный срок действия паролей. Обратите внимание, что в последней строке примера 6-3 установлено значение 99 999 (около 274 лет), что является значением по умолчанию. Days before password is to expire that user is warned: это поле используется для предупреждения пользователя о предстоящей принудительной смене пароля. Обратите внимание, что в последней строке примера 6-3 он установлен на 7 дней, что является значением по умолчанию (даже если срок действия пароля установлен на 99 999 дней). Days after password expires that account is disabled: используйте это поле, чтобы принудительно изменить пароль. После истечения срока действия пароля пользователь больше не может войти в систему. После того, как учетная запись достигает максимального срока действия, она блокируется. В этом поле предусмотрен льготный период, в течение которого пользователь может изменить свой пароль, но только во время входа в систему. Это поле задается в днях и по умолчанию не установлено. Days since Jan. 1, 1970, that account is disabled: администратор может установить в этом поле отключение учетной записи в определенный день. Как правило, это лучший подход, чем удаление учетной записи, так как все связанные свойства и файлы учетной записи будут сохранены, но учетная запись больше не может использоваться для аутентификации на вашем сервере. Обратите внимание, что это поле не имеет значения по умолчанию. A reserved field, which was once added “for future use”: это поле было зарезервировано давным-давно; он, вероятно, никогда не будет использоваться.

Большинством свойств пароля можно управлять с помощью команд passwd или chage, которые обсуждаются далее в этой главе. Создание пользователей Есть много решений для создания пользователей на сервере Linux. Для начала вы можете редактировать содержимое файлов конфигурации /etc/passwd и /etc/shadow прямо в редакторе, используя команду vipw (с риском сделать ошибку, которая может сделать вход в систему невозможным для кого-либо). Другой вариант – использовать утилиту useradd, которую вы должны использовать для создания пользователей. Чтобы удалить пользователей, вы можете использовать команду userdel. Чтобы удалить пользователя и всю пользовательскую среду используйте userdel -r. Изменение файлов конфигурации Для создания учетной записи пользователя путем изменения файлов конфигурации требуется добавить одну строку в /etc/passwd, а другую строку в /etc/shadow, в которой определяется учетная запись пользователя и все ее свойства. Однако этот метод создания пользователей не рекомендуется. Если вы сделаете ошибку, вы можете нарушить целостность файла и сделать вход в систему совершенно невозможным для всех. Кроме того, вы можете столкнуться с проблемами блокировки, если один администратор пытается изменить содержимое файла напрямую, в то время как другой администратор хочет внести изменение с помощью какоголибо инструмента. Если вы настаиваете на непосредственном изменении файлов конфигурации, вам следует использовать vipw. Эта команда открывает интерфейс редактора ваших файлов конфигурации и, что более важно, устанавливает соответствующие блокировки файлов конфигурации для предотвращения повреждения. Однако программа не проверяет синтаксис, поэтому убедитесь, что вы знаете, что делаете, потому что даже одна опечатка может серьезно испортить ваш сервер. Если вы хотите использовать этот инструмент для изменения файла /etc/shadow, используйте vipw -s. Для редактирования содержимого файла /etc/group, в котором определены группы, существует аналогичная команда с именем vigr.

113

ПРИМЕЧАНИЕ. Приятно знать, что vipw и vigr существуют, но лучше не использовать эти утилиты или чтолибо еще, открывающее файлы конфигурации пользователя и группы напрямую. Вместо этого используйте такие инструменты, как useradd и groupmod.

Использование useradd Утилита useradd, вероятно, является наиболее распространенным инструментом в Linux для управления пользователями. Он позволяет добавлять учетную запись пользователя из командной строки, используя множество её параметров. Используйте, например, команду useradd -m -u 1201 -G sales,ops linda, чтобы создать пользователя linda, который является членом вторичных групп sales и ops с UID 1201, а также добавить домашний каталог к учетной записи пользователя. (Дополнительные группы описаны в разделе «Общие сведения о группах Linux» далее в этой главе.) Домашние каталоги У всех обычных пользователей будет домашний каталог. Для людей домашний каталог — это каталог, в котором можно хранить личные файлы. Для системных учетных записей домашний каталог часто содержит рабочую среду для учетной записи службы. Как администратор, вы, как правило, не будете изменять настройки, связанные с домашним каталогом, для системных учетных записей, поскольку они создаются автоматически из сценариев после установки RPM при установке соответствующих пакетов программного обеспечения. Если у вас есть люди, которым нужны учетные записи пользователей, вы, вероятно, захотите управлять содержимым домашнего каталога. При создании домашних каталогов (что происходит по умолчанию при создании пользователей) содержимое «скелетного» каталога копируется в домашний каталог пользователя. Скелетный каталог - /etc/skel, он содержит файлы, которые копируются в домашний каталог пользователя в момент создания этого каталога. Эти файлы также получат соответствующие разрешения, чтобы новый пользователь мог использовать их и получать к ним доступ. По умолчанию каталог /etc/skel содержит в основном файлы конфигурации, которые определяют, как настроена пользовательская среда. Если в вашей среде есть определенные файлы которые должны присутствовать в домашних каталогах всех пользователей, вы позаботитесь об этом, добавив файлы в каталог /etc/skel. Управление свойствами пользователя Для изменения свойств пользователя применяются те же правила, что и для создания учетных записей пользователей. Вы можете работать непосредственно в файлах конфигурации с помощью vipw или использовать инструменты командной строки. Последняя утилита командной строки для изменения свойств пользователя - это usermod. Её можно использовать для установки всех свойств пользователей, хранящихся в /etc/passwd и /etc/shadow, а также некоторых дополнительных задач, таких как управление членством в группах. Есть только одна задача, с которой утилита не справляется: установка паролей. Хотя в usermod есть опция -p, которая говорит вам «использовать зашифрованный пароль для нового пароля», 114

утлита ожидает, что вы выполните шифрование пароля перед добавлением учетной записи пользователя. Это не делает его особенно полезным. Если вы, как root хотите изменить пароль пользователя, вы должны использовать команду passwd. Файлы конфигурации для параметров управления пользователями по умолчанию При работе с такими инструментами, как useradd, принимаются некоторые значения по умолчанию. Эти значения устанавливаются в двух файлах конфигурации: /etc/login.defs и /etc/default/useradd. В примере 6.4 показано содержимое файла /etc/default/useradd. Пример 6-4 useradd, Значения по умолчанию в /etc/default/useradd

Как показано в Примере 6-4, файл /etc/default/useradd содержит некоторые значения по умолчанию, которые применяются при использовании useradd. В файле /etc/login.defs устанавливаются различные переменные, связанные с входом в систему. Этот файл используется разными командами и связан с настройкой соответствующей среды для новых пользователей. Далее список некоторых из наиболее важных свойств, которые можно установить из /etc/login.defs:

▪ ▪ ▪ ▪ ▪

MOTD_FILE: определяет файл, который используется в качестве файла «сообщения дня (message of the day)». В этот файл вы можете включить сообщения, которые будут отображаться после успешного входа пользователя на сервер. ENV_PATH: определяет переменную $PATH - список каталогов, в которых следует искать исполняемые файлы после входа в систему. PASS_MAX_DAYS, PASS_MIN_DAYS и PASS_WARN_AGE: определяет свойства истечения срока действия пароля по умолчанию при создании новых пользователей. UID_MIN: первый UID, который будет использоваться при создании новых пользователей. CREATE_HOME: указывает, следует ли создавать домашний каталог для новых пользователей.

Управление свойствами пароля Вы узнали о свойствах пароля, которые можно установить в /etc/shadow. Вы можете использовать две команды, чтобы изменить эти свойства для пользователей: chage и passwd. Команды довольно просты, если вы знаете, для чего используются различные параметры. Например, команда passwd -n 30 -w 3 -x 90 linda устанавливает для пароля пользователя linda 115

минимальный период использования 30 дней и истечение срока действия через 90 дней, при этом предупреждение генерируется за 3 дня до истечения срока. Многие задачи, которые могут быть выполнены с помощью passwd, также могут быть выполнены с помощью chage. Например, используйте chage -E 2020-12-31 bob, чтобы срок действия учетной записи пользователя bob истек 31 декабря 2020 г. Чтобы увидеть текущие настройки управления паролями, используйте chage -l (см. Пример 6-5). Команда chage также имеет интерактивный режим; например, если вы наберете chage anna, команда запросит все свойства пароля, которые вы хотите установить в интерактивном режиме. Пример 6-5 Отображение информации об истечении срока действия пароля с помощью chage -l

Создание пользовательской среды Когда пользователь входит в систему, создается среда. Среда состоит из некоторых переменных, которые определяют, как работает пользователь. Например, одной из таких переменных является $PATH, которая определяет список каталогов, в которых следует производить поиск, когда пользователь вводит команду. Для создания пользовательской среды играют роль несколько файлов:

▪ ▪ ▪ ▪

/etc/profile: используется для настроек по умолчанию для всех пользователей при запуске оболочки входа. /etc/bashrc: используется для определения значений по умолчанию для всех пользователей при запуске подоболочки. ~/.profile: особые настройки для одного пользователя, применяемые при запуске оболочки входа. ~/.bashrc: особые настройки для одного пользователя, применяемые при запуске подоболочки (subshell).

При входе в систему файлы читаются в этом порядке, и применяются переменные и другие настройки, определенные в этих файлах. Если переменная или параметр встречается более чем в одном файле, побеждает последний. В упражнении 6-2 вы применяете общие решения для создания учетных записей пользователей. Упражнение 6-2 Создание учетных записей пользователей 1. Введите vim /etc/login.defs, чтобы открыть файл конфигурации /etc/login.defs и изменить несколько параметров, прежде чем вы начнете создавать пользователей. Найдите параметр CREATE_HOME и убедитесь, что для него установлено значение «yes». 116

2. Используйте cd /etc/skel, чтобы перейти в каталог /etc/skel. Введите mkdir Pictures и mkdir Documents, чтобы добавить два каталога по умолчанию во все домашние каталоги пользователей. Также измените содержимое файла .bashrc, включив в него строкуexport EDITOR=/usr/bin/vim, которая устанавливает редактор по умолчанию для инструментов, для которых необходимо изменять текстовые файлы. 3. Введите useradd linda, чтобы создать учетную запись для пользователя linda. Затем введите id linda, чтобы убедиться, что linda является членом группы с именем linda и никак иначе. Также убедитесь, что в домашнем каталоге пользователя linda были созданы каталоги Pictures и Documents. 4. Используйте passwd linda, чтобы установить пароль для только, что созданного пользователя. Используйте пароль password. 5. Введите passwd -n 30 -w 3 -x 90 linda, чтобы изменить свойства пароля. Срок действия пароля истекает через 90 дней (-x 90). За три дня до истечения срока действия пользователь получит предупреждение (-w 3), и пароль необходимо использовать не менее 30 дней, прежде чем (-n 30) его можно будет изменить. 6. Создайте еще несколько пользователей: lisa, lori и bob, используя вместо i в lucy, lori, bob; do useradd $i; done. 7. Используйте команду grep lori /etc/passwd /etc/shadow /etc/group. Утилита grep покажет пользователья lori, созданного во всех трех важных файлах, и подтверждает, что они были настроены правильно. Создание и управление групповыми учетными записями Каждый пользователь Linux должен быть членом хотя бы одной группы. В этом разделе вы узнаете, как управлять настройками учетных записей групп Linux. Понимание групп Linux Пользователи Linux могут быть членами двух разных групп. Во-первых, это первичная группа. Каждый пользователь должен быть членом основной группы, и существует только одна основная группа. При создании файлов основная группа становится владельцем группы этих файлов. (Право собственности на файл подробно обсуждается в главе 7, «Управление разрешениями».) Пользователи также могут получить доступ ко всем файлам, к которым имеет доступ их основная группа. Членство пользователя в основной группе определяется в /etc/passwd; сама группа хранится в файле конфигурации /etc/group. Помимо обязательной основной группы, пользователи также могут быть членами одной или нескольких дополнительных групп. Пользователь может быть членом дополнительной группы в дополнение к основной группе. Вторичные группы важны для доступа к файлам. Если группа, членом которой является пользователь, имеет доступ к определенным файлам, пользователь также получит доступ к этим файлам. Работа со вторичными группами важна, особенно в средах, где Linux используется в качестве файлового сервера, чтобы люди, работающие в разных отделах, могли обмениваться файлами друг с другом. Вы также видели, как членство в вторичной группе можно использовать для предоставления пользователю административных прав с помощью sudo, сделав пользователя членом колеса группы.

Создание групп

117

Как и в случае с созданием пользователей, существуют также различные варианты создания групп. Файлы конфигурации группы можно изменить напрямую с помощью vigr или утилиты командной строки groupadd. Создание групп с помощью vigr С помощью команды vigr вы открываете интерфейс редактора непосредственно в файле конфигурации /etc/group. В этом файле группы определены в четырех полях для каждой группы (см. Пример 6-6). Пример 6-6 Пример содержания /etc/group

В /etc/group используются следующие поля: ▪ ▪

▪ ▪

Group name: как следует из названия поля, оно содержит имя группы. Group password: если возможно, это поле содержит групповой пароль, функция, которая почти не используется. Групповой пароль может использоваться пользователями, которые хотят присоединиться к группе на временной основе, чтобы разрешить доступ к файлам, к которым группа имеет доступ. Если используется групповой пароль, он сохраняется в файле /etc/gshadow, поскольку этот файл доступен только для root. Group ID: это поле содержит уникальный числовой идентификационный номер группы. Members: здесь вы найдете имена пользователей, которые входят в эту группу как в дополнительную группу. Обратите внимание, что в этом поле не отображаются пользователи, которые являются членами этой группы в качестве их основной группы.

Как уже упоминалось, в дополнение к /etc/group существует файл /etc/gshadow. Этот файл обычно не используется для хранения паролей групп (потому что вряд ли кто-нибудь еще их использует), но у него есть интересная функция. В третьем поле этого файла вы можете указать администраторов. Это разделенный запятыми список пользователей, которые могут изменять пароли для членов группы, которые перечислены в четвертом поле этого файла. Обратите внимание, что указывать здесь членов группы необязательно, но если это сделано, имена членов группы должны совпадать с именами членов группы в /etc/group. Использование groupadd для создания групп Еще один метод создания новых групп - использование команды groupadd. Эта команда проста в использовании. Просто введите groupadd и укажите имя группы, которую вы хотите добавить. Есть несколько дополнительных опций; единственное важное значение -g, которое позволяет указать идентификатор группы при создании группы. Управление свойствами группы

118

Для управления свойствами группы доступна утилита groupmod. Вы можете использовать эту команду для изменения имени или идентификатора группы, но она не позволяет вам добавлять членов группы. Для этого вы используете usermod. Как обсуждалось ранее, usermod -aG добавит пользователей в новые группы, которые будут использоваться в качестве их вторичной группы. Поскольку у группы не так много свойств, довольно часто свойства группы управляются непосредственно в файле /etc/group с помощью команды vigr. В упражнении 6-3 вы создаете две группы и добавляете пользователей в качестве членов в эти группы. СОВЕТ Поскольку членство пользователя в группе определяется в двух разных местах, может быть сложно определить, в какие именно группы входит пользователь. Удобная команда для проверки - groupmems. Используйте, например, команду groupmems -g sales -l, чтобы узнать, какие пользователи являются участниками группы sales. Команда показывает пользователей, которые являются членами этой группы, как назначение вторичной группы, но также пользователей, которые являются членами этой группы, как назначение основной группы. Упражнение 6-3 Работа с группами 1. Введите groupadd sales, а затем groupadd account, чтобы добавить группы с именами sales и account. 2. Используйте usermod, чтобы добавить пользователей linda и laura в группу sales, а lori и bob - в учетную запись группы продаж: usermod -aG sales linda usermod -aG sales laura usermod -aG account lori usermod -aG account bob linux:~ # id linda 3. Введите id linda, чтобы убедиться, что пользователь linda правильно добавлена в группу sales. В результатах этой команды вы видите, что linda назначена в группу с именем linda. Это ее основная группа, обозначенная параметром gid. Параметр групп показывает все группы, в которых она в настоящее время состоит, включая первичную группу, а также вторичные групповые продажи, в которые она только что была назначена. uid=1000(linda) gid=1000(linda) groups=1000(linda),1001(sales) Резюме В этой главе вы узнали, как создавать пользователей и группы. Вы узнали, какие файлы конфигурации используются для хранения пользователей и групп, и вы узнали, какие свойства используются в этих файлах. Вы также узнали, какие утилиты доступны для управления учетными записями пользователей и групп. Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» во введении, у вас есть несколько вариантов для подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены. Просмотрите все ключевые темы 119

Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 6-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 6-3 Ключевые темы главы 6 Элемент ключевой темы Раздел Таблица 6-2 Список Список Список Список

Описание

Страница

Пользователи Linux

107

Способы запуска задач с повышенными правами Описание полей учетной записи пользователя в /etc/passwd Описание полей свойств пароля в /etc/shadow Важные свойства, которые можно установить из /etc/login.defs Файлы, которые играют роль в создании пользовательской среды

108 111 112 115 116

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: user, password, GECOS, group, primary group, secondary group, privileged user, unprivileged user, root

Обзорные вопросы В следующих вопросах используется открытый формат, который поможет вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. Какой UID у пользователя root? В каком конфигурационном файле определяется sudo? Какую команду следует использовать для изменения конфигурации sudo? Какие два файла можно использовать для определения настроек, которые будут использоваться при создании пользователей? 5. Сколько групп вы можете создать в /etc/passwd? 6. Если вы хотите предоставить пользователю доступ ко всем командам администратора через sudo, в какую группу вы должны сделать этого пользователя членом? 7. Какую команду следует использовать для изменения файла /etc/group вручную? 1. 2. 3. 4.

120

8. Какие две команды вы можете использовать для изменения информации о пароле пользователя? 9. Как называется файл, в котором хранятся пароли пользователей? 10. Как называется файл, в котором хранятся групповые учетные записи?

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

Создайте две группы: sales и account. Создайте пользователей bob, betty, bill и beatrix. Убедитесь, что их основная группа настроена на частную группу с именем пользователя. Сделайте bob и betty участниками группы sales, а bill и beatrix - членами групп account. Установите политику паролей, которая требует от пользователей смены пароля каждые 90 дней.

121

Глава 7 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪ ▪ ▪

Управление правами владения на файлы Управление основными разрешениями Управление расширенными разрешениями Управление списками ACL Установка разрешений по умолчанию с помощью umask Работа с расширенными пользователем атрибутами

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪ ▪ ▪

Список, установка и изменение стандартных разрешений ugo/rwx Создание и настройка каталогов set-GID для совместной работы Создание списков контроля доступа и управление ими. Диагностировать и устранять проблемы с правами доступа к файлам.

Для доступа к файлам в Linux используются разрешения. Эти разрешения назначаются трем объектам: владельцу файла (owner), владельцу группы (group owner) и другим (others) объектам (то есть всем остальным). В этой главе вы узнаете, как применять разрешения. Глава начинается с обзора основных разделов, после чего обсуждаются специальные разрешения и списки управления доступом (ACL). В конце этой главы рассматривается установка разрешений по умолчанию через umask, а также управление расширенными пользователем атрибутами.

Управление пользователями и группами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 7-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 7 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Управление правами владения на файлы

Вопросы 1-3

Управление основными разрешениями

4

Управление расширенными разрешениями

5

Управление списками ACL

6-8

Установка разрешений по умолчанию с помощью umask

9

Работа с расширенными пользователем атрибутами

10

1. Пользователь должен работать в сессии, где все новые файлы, которые он создает, будут принадлежать группе sales, пока сессия не будет закрыта. Какая команда сделает это? 122

a. b. c. d.

chgrp sales setgid sales newgrp sales setgroup sales

2. Какая команда позволяет найти все файлы в системе, принадлежащие пользователю linda? a. b. c. d.

find / -user linda find / -uid linda ls -l | grep linda ls -R | find linda

3. Какая команда не устанавливает групповое владение для групповых продаж для файла myfile? a. b. c. d.

chgrp sales myfile chown .sales myfile chgrp myfile sales chown :sales myfile

4. Какая команда будет использоваться, чтобы разрешить права на чтение и запись для пользователей и владельцев групп и вообще никаких разрешений для других? a. b. c. d.

chown 007 filename chmod 077 filename chmod 660 filename chmod 770 filename

5. Какая команда позволяет установить разрешение SGID для каталога? a. b. c. d.

chmod u+s /dir chmod g-s /dir chmod g+s /dir chmod 1770 /dir

6. Вы пытаетесь использовать команду setfacl для установки ACL в каталоге /data, но получаете сообщение «операция не поддерживается (operation not supported)». Что из следующего является наиболее вероятным объяснением? a. b. c. d.

Команда setfacl не установлена на вашем компьютере. Вы делаете ошибку при вводе команды. Пользователь или группа, которым вы хотите предоставить ACL, не существует. В файловой системе отсутствует поддержка ACL.

7. Какая команда предоставляет разрешения rw для группы sales для всех новых файлов, которые будут созданы в каталоге /data и во всех его подкаталогах? a. setfacl -m d:g:sales:rw /data 123

b. setfacl -m d:g:sales:rwx /data c. setfacl -R -m g:sales:rwx /data d. setfacl -R -m g:sales:rw /data 8. Какая команда позволяет вам убедиться, что у других нет доступа к каким-либо новым файлам, которые будут созданы в каталоге /data, при условии, что вы хотите, чтобы у других были права на чтение для всех остальных файлов? a. b. c. d.

setfacl -m d:o::- /data setfacl -m o::- /data umask 027 /data umask 027

9. Какие из следующих настроек umask соответствуют следующим требованиям: ▪ Предоставляет все разрешения владельцу файла. ▪ Предоставляет права на чтение группе-владельцу файла. ▪ Не предоставляет никаких разрешений другим лицам. a. b. c. d.

740 750 027 047

10. Какая команда позволяет вам проверить все атрибуты, которые в настоящее время установлены в myfile. a. b. c. d.

ls --attr myfile getattr myfile lsattr myfile listattr myfile

Основные темы Управление правами доступа к файлам Прежде чем мы обсудим разрешения, вам необходимо понять роль владельца файлов и каталогов. Владение файлами и каталогами жизненно важно для работы с правами доступа к файлам. В этом разделе вы сначала узнаете, как увидеть право собственности. Затем вы узнаете, как изменить право собственности пользователя и группы на файлы и каталоги. Отображение прав собственности. В Linux у каждого файла и каждого каталога есть два владельца: права самого пользователя (user) а также права на владением группы (group) этого пользователя. Кроме того, существует сущность «другие (others)», которая также считается сущностью, определяющей права пользователя. Вместе, пользователь, группа и другие владельцы (ugo) отображаются при выводе списка разрешений с помощью команды ls -l. Права владением устанавливаются при создании файла или каталога. При создании пользователь, который создает файл, становится владельцем (user) файла, а основная группа этого 124

пользователя становится владельцем группы (group). Чтобы определить, есть ли у вас как пользователь права доступа к файлу или каталогу, shell проверяет право собственности. Это происходит в следующем порядке: 1. Оболочка проверяет, являетесь ли вы как пользователь владельцем файла, к которому хотите получить доступ, который также называется пользователем файла. Если вы являетесь пользователем, вы получаете разрешения, установленные для пользователя, и оболочка больше не ищет. 2. Оболочка проверяет, получили ли вы какие-либо права через назначенные пользователем ACL. Если это так, то эти разрешения назначаются, и shell не смотрит дальше. 3. Если вы не являетесь владельцем файла, и не получили разрешений от ACL, шелл проверяет, являетесь ли вы членом группы, имеющей права на файл, которая также называется группой файла. Если вы являетесь членом группы, вы получаете доступ к файлу с разрешениями группы, и оболочка больше не ищет. 4. Если вы зашли так далеко, оболочка проверяет, получили ли вы какие-либо разрешения через групповой ACL. Если это так, эти разрешения применяются, и оболочка больше не ищет. Если вы являетесь членом нескольких групп, получивших разрешения через списки ACL, все эти разрешения будут применяться. 5. Если вы не являетесь ни владельцем файла, ни являетесь членом группы и не получили разрешений через ACL, вы получаете разрешения объекта «другие (others)». Чтобы увидеть текущие назначения прав владельцев файла, используйте команду ls -l. Данная команда показывает права как пользователя так и владельца группы. В Примере 7-1 вы можете увидеть настройки прав для каталогов в каталоге /home. Пример 7-1 Отображение текущего владельца файла

Используя команду ls, вы можете отобразить права собственности на файлы в заданном каталоге. Иногда может быть полезно получить список всех файлов в системе, владельцем которых является данный пользователь или группа. Для этого вы можете использовать команду find. Для этой цели можно использовать аргумент команды -user. Например, следующая команда показывает все файлы, владельцем которых является пользователь linda: find / -user linda Вы также можете использовать команду find для поиска файлов, владельцем которых является определенная группа. Например, следующая команда ищет все файлы, принадлежащие группе пользователей: find / -group users 125

Изменение прав владения пользователя Чтобы применить соответствующие разрешения, первое, что нужно учитывать, - это право владения на файл или каталог. Для этого вы можете использовать команду chown. Синтаксис этой команды понять несложно: chown who what Например, следующая команда меняет владельца учетной записи файла на пользователя linda: chown linda account У команды chown есть несколько параметров, одна из которых особенно полезна: -R. Вы можете догадаться, что он делает, потому что эта опция доступна и для многих других команд. Он позволяет вам рекурсивно устанавливать права владение, текущим каталогом и всем, что ниже. Следующая команда меняет владельца каталога /home и всего, что в нём находится, на пользователя linda: chown -R linda /home/linda Изменение владельца группы На самом деле есть два способа изменить принадлежность группы. Вы можете сделать это с помощью команды chown, но есть также специальная команда с именем chgrp, которая предназначена для этой работы. Если вы хотите использовать команду chown, используйте (.) или (:) перед названием группы. Следующая команда изменяет владельца группы каталога /home/account на владельца группы account: chown .account /home/account Вы можете использовать chown для изменения владельца пользователя и/или группы несколькими способами, обзор которых приводится ниже: ▪ ▪

chown lisa myfile устанавливает пользователя lisa как владельца myfile chown lisa.sales myfile устанавливает пользователя lisa как владельца пользователя, а группу sales как владельца группы myfile ▪ chown lisa: sales myfile устанавливает пользователя lisa как владельца файла myfile, а группу sales как владельца группы файла myfile ▪ chown .sales myfile устанавливает группу siles как владельца файла myfile без изменения владельца файла. ▪ chown: sales myfile устанавливает группу siles как владельца файла myfile без изменения владельца файла. Вы также можете использовать команду chgrp, чтобы изменить владельца группы. Рассмотрим следующий пример, в котором вы можете использовать chgrp для установки права владения на группу для каталога /home/account для учетной записи группы: 126

chgrp account /home/account Как и в случае с командой chown, вы можете использовать опцию -R с chgrp, чтобы рекурсивно изменять принадлежность группы. Понимание прав владения установленных по умолчанию Вы могли заметить, что когда пользователь создает файл, применяется право владения по умолчанию. Пользователь, создавший файл, автоматически становится владельцем файла, а основная группа этого пользователя автоматически становится владельцем группы. Обычно это группа, которая указана в файле /etc/passwd как основная группа пользователя. Однако если пользователь является членом нескольких групп, он может изменить действующую первичную группу, чтобы новые файлы получили новую первичную группу в качестве владельца группы. Чтобы показать текущую действующую первичную группу, пользователь может использовать команду groups: [root@server1 ~]# groups lisa lisa : lisa account sales Если текущий пользователь linda хочет изменить действующую первичную группу, она может использовать команду newgrp, за которой следует имя группы, которую она хочет установить в качестве новой действующей первичной группы. Эта группа будет продолжать использоваться как эффективная первичная группа, пока пользователь не использует команду выхода или не выйдет из системы. В примере 7.2 показано, как пользователь linda использует эту команду для того, что бы сделать группу sales своей основной группой. Пример 7-2 Использование newgrp для изменения действующей основной группы [lisa@server1 ~]$ groups lisa account sales [lisa@server1 ~]$ newgrp sales [lisa@server1 ~]$ groups sales lisa account [lisa@server1 ~]$ touch file1 [lisa@server1 ~]$ ls -l total 0 -rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1 После изменения действующей основной группы все новые файлы, создаваемые пользователем, получат эту группу в качестве владельца группы. Чтобы вернуться к исходным настройкам основной группы, используйте команду exit. Чтобы использовать команду newgrp, пользователь должен быть членом этой группы. В качестве альтернативы можно установить групповой пароль для группы с помощью команды gpasswd, но обычно данная команда используется редко. Если пользователь использует команду newgrp, но не является членом целевой группы, шелл запрашивает пароль группы. После ввода правильного пароля группы будет установлена новая действующая первичная группа. Управление основными правами на файл 127

Система разрешений Linux была изобретена в 1970-х годах. Поскольку в те годы потребности в вычислениях были ограничены, созданная базовая система разрешений также была довольно ограниченной. Эта базовая система разрешений использует три разрешения, которые могут применяться к файлам и каталогам. В этом разделе вы узнаете, как работает система и как изменить эти разрешения. Общие сведения о разрешениях на чтение (Read), запись (Write) и выполнение (Execute) Три основных разрешения позволяют пользователям читать, писать и выполнять файлы. Эффект от этих разрешений отличается при применении к файлам или каталогам. Если применяется к файлу, разрешение на чтение дает право открыть файл для чтения. Таким образом, вы можете читать его содержимое, но это также означает, что ваш компьютер может открыть файл, чтобы что-то с ним сделать. Программному файлу, который обеспечивает доступ к библиотеке, требуется, например, доступ для чтения к этой библиотеке. Из этого следует, что разрешение на чтение - это самое основное разрешение, необходимое для работы с файлами. Применительно к каталогу, read позволяет вывести список содержимого каталога. Вы должны знать, что это разрешение также не позволяет вам читать файлы в каталоге. Система разрешений Linux не знает наследования, и единственный способ прочитать файл - это использовать разрешения на чтение для этого файла. Однако чтобы открыть файл для чтения, удобно иметь права на чтение для каталога, потому что в противном случае вы бы не увидели файл. Обратите внимание, что без разрешения на чтение в каталоге вы все равно можете открыть файл, если знаете, что файл с таким именем существует. Это не очень удобно и по этой причине обычно не используется. Как вы, наверное, догадались, разрешение на запись, если оно применяется к файлу, позволяет вам писать в файл. Иначе говоря, read позволяет изменять содержимое существующих файлов. Однако он не позволяет создавать или удалять новые файлы. Для этого вам необходимо разрешение на запись в каталог, в котором вы хотите создать файл. Чтобы изменить разрешения для файла, вам не нужны разрешения для файла; вам просто нужно быть владельцем файла или пользователем root. В каталогах это разрешение также позволяет создавать и удалять новые подкаталоги. Разрешение на выполнение - это то, что вам нужно для выполнения файла. Кроме того, вам потребуется разрешение на выполнение в каталоге, если вы хотите что-либо сделать в этом каталоге. Это никогда не будет установлен по умолчанию, что делает Linux почти полностью защищенным от вирусов. Только тот, у кого есть право владения на каталог, может применить разрешение на выполнение. В то время как наличие разрешения на выполнение для файлов означает, что вам разрешено запускать программный файл, если оно применяется к каталогу, это означает, что вам разрешено использовать команду cd для перехода в этот каталог. Это означает, что выполнение (execute) является важным разрешением для каталогов, и вы увидите, что оно обычно применяется как разрешение по умолчанию для каталогов. Без него невозможно перейти в этот каталог! Таблица 72 суммирует использование основных разрешений.

Таблица 7-2 Использование разрешений на чтение, запись и выполнение Разрешение

Применяется к файлам

128

Применяется к каталогам

Читать (Read)

Открыть файл

Список содержимого каталога

Написать (Write)

Изменить содержимое файла

Создавать и удалять файлы

Выполнить (Execute)

Запустить программный файл

Перейти в каталог

Применение разрешений на чтение, запись и выполнение Чтобы применить разрешения, вы используете команду chmod. При использовании chmod вы можете установить разрешения для пользователя, группы и других. Вы можете использовать эту команду в двух режимах: относительном и абсолютном. В абсолютном режиме для установки основных разрешений используются три цифры. Три цифры относятся к пользователю, группе и другим пользователям соответственно. В Табл. 7-3 представлен обзор разрешений и их числовое представление.

Таблица 7-3 Числовое представление разрешений Разрешение

Числовое представление

Читать (Read)

4

Написать (Write)

2

Выполнить (Execute)

1

При настройке разрешений рассчитайте то значение, которое вам нужно. Если вы хотите настроить чтение, запись и выполнение для пользователя, чтение и выполнение для группы, а также чтение и выполнение для других в файле /somefile, например, вы используете следующую команду chmod: chmod 755 /somefile Когда вы используете chmod таким образом, все текущие разрешения заменяются установленными вами. Если вы хотите изменить разрешения относительно текущих разрешений, вы можете использовать chmod в относительном режиме. При использовании chmod в относительном режиме вы работаете с тремя индикаторами, чтобы указать, что вы хотите сделать: ▪ ▪ ▪

Сначала вы указываете, для кого хотите изменить разрешения. Для этого вы можете выбирать между пользователем (u), группой (g) и другими (o). Затем вы используете оператор для добавления или удаления разрешений из текущего режима или для их абсолютной установки. В конце вы используете r, w и x, чтобы указать, какие разрешения вы хотите установить.

`При изменении разрешений в относительном режиме вы можете опустить часть «для кого», чтобы добавить или удалить разрешение для всех объектов. Например, следующее добавляет разрешение на выполнение для всех пользователей: chmod +x somefile 129

При работе в относительном режиме вы также можете использовать более сложные команды. Например, следующая команда добавляет разрешение на запись владельцам группы (group) и удаляет чтение для владельцев другие (others): chmod g+w,o-r somefile В упражнении 7-1 вы узнаете, как работать с основными разрешениями, создав структуру каталогов для групп, которые вы создали ранее. Вы также назначаете правильные разрешения этим каталогам. СОВЕТ При использовании chmod -R o + rx /data вы устанавливаете разрешение на выполнение для всех каталогов, а также для файлов в каталоге /data. Чтобы установить разрешение на выполнение только для каталогов, а не для файлов, используйте chmod -R o + rX /data. Символ X в верхнем регистре гарантирует, что файлы не получат разрешения на выполнение, если файл уже не установил разрешение на выполнение для некоторых объектов. Это делает X более интеллектуальным способом работы с разрешениями на выполнение; это позволит избежать установки этого разрешения для файлов, где оно не требуется.

Упражнение 7-1 Управление основными разрешениями 1. Из шелл root введите mkdir -p /data/sales /data/account. 2. Перед установкой разрешений измените владельцев этих каталогов с помощью chown linda.sales /data/sales и chown linda.account /data/account. 3. Установите разрешения, чтобы позволить владельцам пользователей и групп записывать файлы в эти каталоги и запретить доступ всем остальным: chmod 770 /data/sales, а затем chmod 770 /data/account. 4. Используйте su - laura, чтобы стать пользователем laura, и перейдите в каталог /data/account. Используйте touch emptyfile, чтобы создать файл в этом каталоге. Это работает? 5. Все еще как пользователь laura, выполните cd /data/sales и touch emptyfile, чтобы создать файл в этом каталоге. Это работает?

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

это обычно означает, что использование программы ограничено. Однако в некоторых случаях пользователю требуются особые разрешения только для выполнения определенной задачи. Рассмотрим, например, ситуацию, когда пользователю необходимо изменить свой пароль. Для этого пользователю необходимо записать свой новый пароль в файл /etc/shadow. Этот файл, однако, не доступен для записи для пользователей, у которых нет прав root: [root@hnl ~]# ls -l /etc/shadow ----------. 1 root root 1184 Apr 30 16:54 /etc/shadow Разрешение SUID предлагает решение этой проблемы. В утилите /usr/bin/passwd это разрешение применяется по умолчанию. Это означает, что при смене пароля пользователь временно получает права root, что позволяет ему записывать в файл /etc/shadow. Вы можете увидеть разрешение SUID выполнив ls -l, в выводе вы увидите символ s в том месте, где обычно вы ожидаете увидеть x для прав пользователя: [root@hnl ~]# ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd Разрешение SUID может показаться полезным (и в некоторых случаях так оно и есть), но в то же время данное решение потенциально опасно. При неправильном применении вы можете случайно лишить root-права доступа. Поэтому я рекомендую использовать его с особой осторожностью, а еще лучше: не используйте его вообще. Большинству администраторов его никогда не придется использовать; вы увидите его только в некоторых файлах, для которых операционной системе требуется установить его по умолчанию. Второе специальное разрешение - это набор идентификаторов групп (SGID). Это разрешение имеет два эффекта. Если применяется к исполняемому файлу, он дает пользователю, который запускает файл, разрешения группы-владельца этого файла. Итак, SGID может выполнять более или менее то же самое, что и SUID. Однако для этой цели SGID почти не используется. Как и в случае с разрешением SUID, SGID применяется к некоторым системным файлам по умолчанию. При применении к каталогу SGID может быть полезен, потому что вы можете использовать его для установки группового владения по умолчанию для файлов и подкаталогов, созданных в этом каталоге. По умолчанию, когда пользователь создает файл, его действующая основная группа устанавливается как владелец группы для этого файла. Это не всегда очень полезно, особенно потому, что в Red Hat Enterprise Linux пользователи имеют в качестве основной группы группу с тем же именем, что и у пользователя, и единственным членом которой является пользователь. Таким образом, по умолчанию файлы, создаваемые пользователем, будут совместно использоваться другими пользователями. Представьте себе ситуацию, когда пользователи linda и lori работают в бухгалтерии и оба являются членами группы account. По умолчанию эти пользователи являются членами своей, частной группы, единственными членами которой они являются. Оба пользователя, однако, также являются членами группы account, которая для них являются второстепенной группой. Ситуация по умолчанию такова, что, когда один из этих пользователей создает файл, основная группа пользователя становится владельцем. Так что по умолчанию linda не может получить доступ к файлам, созданным lori, и наоборот. Однако, если вы создаете общий каталог группы (скажем, /groups/account) и убедитесь, что к этому каталогу применено разрешение SGID и что учетная запись группы установлена как владелец группы для этого каталога, все файлы, созданные в этом каталоге и все его подкаталоги также получают учетную запись группы в 131

качестве владельца группы по умолчанию. По этой причине разрешение SGID является очень полезным разрешением для общих групповых каталогов. Разрешение SGID отображается в выводе ls -l как s в том месте, где вы обычно находите разрешение на выполнение для группы: [root@hnl data]# ls -ld account drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account Третья часть специальных разрешений - sticky bit. Это разрешение полезно для защиты файлов от случайного удаления в среде, где несколько пользователей имеют разрешения на запись в один и тот же каталог. Если применяется липкий бит (sticky bit), пользователь может удалить файл, только если он является пользователем-владельцем файла или каталога, содержащего файл. По этой причине оно применяется как разрешение по умолчанию для каталога /tmp, а также может быть полезно для общих групповых каталогов. Без липкого бита, если пользователь может создавать файлы в каталоге, он также может удалять файлы из этого каталога. В среде общей группы это может раздражать. Представьте себе пользователей linda и lori, которые оба имеют права на запись в каталог /data/account и получают эти разрешения из-за своего членства в группе account. Следовательно, linda может удалять файлы, созданные lori, и наоборот. Когда вы применяете липкий бит, пользователь может удалять файлы, только если выполняется одно из следующих условий: ▪ ▪

Пользователь является владельцем файла. Пользователь является владельцем каталога, в котором существует файл.

При использовании ls -l вы можете увидеть липкий бит как t в позиции, где вы обычно видите разрешение на выполнение для других(others): [root@hnl data]# ls -ld account/ drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/ СОВЕТ. Убедитесь, что вы знаете, как управлять этими расширенными разрешениями. В целях RHCSA специально упоминается, что вам необходимо иметь возможность использовать набор GID для создания общего каталога группы.

Применение расширенных разрешений Чтобы применить SUID, SGID и липкий бит, вы можете использовать команду chmod. SUID имеет числовое значение 4, SGID имеет числовое значение 2, а липкий бит имеет числовое значение 1. Если вы хотите применить эти разрешения, вам необходимо добавить четырехзначный аргумент в chmod, первая цифра которого относится к специальным разрешениям. Следующая строка, например, добавит разрешение SGID для каталога и установит rwx для пользователя и rx для группы и других:

132

chmod 2755 /somedir Это довольно непрактично, если вам нужно посмотреть текущие разрешения, которые установлены перед работой с chmod в абсолютном режиме. (Если вы этого не сделаете, вы рискуете перезаписать разрешения.) Поэтому я рекомендую работать в относительном режиме, если вам нужно применить какие-либо из специальных разрешений: ▪ ▪ ▪

Для SUID используйте chmod u +s. Для SGID используйте chmod g +s. Для липкого бита (sticky bit) используйте chmod +t, за которым следует имя файла или каталога, для которого вы хотите установить разрешения.

Таблица 7-4 суммирует все, что важно знать об управлении специальными разрешениями.

Таблица 7-4 Работа с SUID, SGID и Sticky Bit Разрешение SUID

SGID

Sticky bit

Числовое Относительное В файлах значение значение 4 u+s Пользователь запускает файл с разрешениями владельца файла. 2 g+s Пользователь запускает файл с разрешениями владельца группы. 1

+t

Нет смысла.

В каталогах Нет смысла.

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

В упражнении 7-2 вы используете специальные разрешения, чтобы облегчить членам группы совместный доступ к файлам в общем каталоге группы. Вы назначаете ID группы и sticky bit и видите, что после их установки добавляются функции, которые упрощают совместную работу членов группы. Упражнение 7-2 Работа со специальными разрешениями 1. Откройте терминал, в котором вы являетесь пользователем linda. 2. Используйте cd /data/sales, чтобы перейти в каталог sales. Выполните touch linda1 и touch linda2, чтобы создать два файла, владельцем которых является linda. 3. Введите exit, чтобы вернуться в корневую оболочку, а затем используйте su - laura, чтобы переключить текущую идентификацию пользователя на пользователя laura, который также является членом группы sales. 4. Снова используйте cd /data/sales, находясь в этом каталоге выполните ls -l. Вы увидите два файла, которые были созданы пользователем linda и принадлежат группе linda. Используйте rm -f linda*. Это удалит оба файла.

133

5. Используйте команды touch laura1 laura2 для создания двух файлов, принадлежащих пользователю laura. 6. Используйте su - для повышения ваших текущих разрешений до пользователя root. 7. Используйте chmod g +s, o +t /data/sales, чтобы установить бит идентификатора группы, а также sticky bit в общем каталоге группы. 8. Используйте su - linda и введите cd /data/sales. Сначала используйте touch linda3 linda4. Теперь вы должны увидеть, что два созданных вами файла принадлежат группе sales, которая является владельцем группы каталога /data/sales. 9. Используйте команду rm -rd laura*. Обычно липкий бит мешает вам сделать это, но поскольку Линда является владельцем каталога, содержащего файлы, вам все равно разрешено это сделать!

Управление ACL (Access Control Lists) Расширенные разрешения, которые обсуждались в предыдущем разделе, добавляют полезные функции к способу работы Linux с разрешениями, но эта функция не позволяет вам предоставлять разрешения более чем одному пользователю или одной группе в одном файле. Списки контроля доступа (ACL) действительно предлагают эту функцию. Кроме того, они позволяют администраторам устанавливать разрешения по умолчанию сложным образом. Понимание ACL Хотя подсистема ACL расширяет возможности вашего сервера, есть один недостаток: не все утилиты поддерживают ее. Таким образом, вы можете потерять настройки ACL при копировании или перемещении файлов, а ваше программное обеспечение для резервного копирования не сможет выполнить резервное копирование настроек ACL. Предыдущие версии утилиты tar не поддерживали работу со списками ACL, поэтому была представлена утилита star. Вам больше не понадобится эта утилита, потому что текущие версии tar поддерживают работу с ACL. Однако star все еще указана в задачах экзамена. Примечание переводчика: man star можно посмотреть https://linux.die.net/man/1/star СОВЕТ Вы также можете использовать getfacl для создания резервной копии списков ACL, которые можно восстановить с помощью команды setfacl. Чтобы создать резервную копию, используйте getfacl -R /directory> file.acls. Чтобы восстановить настройки из файла резервной копии, используйте setfacl --restore=file.acl. Однако отсутствие поддержки со стороны некоторых инструментов не должно быть проблемой. ACL часто применяются к каталогам в качестве структурной меры, а не к отдельным файлам. Следовательно, у вас не будет много списков ACL, а будет лишь несколько, применяемых в умных местах файловой системы. Следовательно, относительно легко восстановить исходные ACL, с которыми вы работали, даже если ваше программное обеспечение резервного копирования не поддерживает их. Подготовка файловой системы для списков ACL

134

Перед началом работы со списками ACL вам, возможно, придется подготовить файловую систему для ACL. Поскольку метаданные файловой системы должны быть расширены, поддержка ACL по умолчанию в файловой системе есть не всегда. Если при настройке списков ACL для файловой системы вы получаете сообщение «операция не поддерживается (operation not supported)», ваша файловая система, вероятно, не поддерживает ACL. Чтобы исправить это, вам нужно добавить опцию монтирования (mount) acl в файле /etc/fstab, чтобы файловая система по умолчанию была смонтирована с такой поддержкой. Прочтите главу 14, «Управление хранилищем», чтобы получить дополнительную информацию о файле /etc/fstab и параметрах, которые вы можете использовать в этом файле. Изменение и просмотр настроек ACL с помощью setfacl и getfacl Чтобы установить ACL, вы используете команду setfacl. Чтобы увидеть текущие настройки ACL, воспользуйтесь командой getfacl. Команда ls -l не показывает существующие списки ACL; он просто показывает + после списка разрешений, что указывает на то, что списки ACL также применяются к файлу. Перед настройкой списков ACL всегда рекомендуется отображать текущие настройки ACL с помощью getfacl. В примере 7.3 вы можете увидеть текущие разрешения, как показано с помощью ls -l, а также как показано с помощью getfacl. Если вы присмотритесь, вы увидите, что отображаемая информация в точности такая же. Пример 7-3 Проверка разрешений с помощью ls -l и getfacl

В результате выполнения команды getfacl в примере 7-3 вы можете увидеть, что разрешения показаны для трех разных сущностей: пользователя, группы и других. Теперь давайте добавим ACL, чтобы предоставить права на чтение и выполнение для группы sales. Для этого следует использовать команду setfacl -m g:sales:rx /dir. В этой команде -m указывает, что текущие настройки ACL необходимо изменить. После этого g:sales:rx сообщает команде, что нужно настроить ACL на чтение и выполнение (rx) для группы (g) sales. В примере 7-4 вы можете увидеть, как выглядит команда, а также вывод команды getfacl после изменения текущих настроек ACL. Пример 7-4 Изменение групповых ACL с помощью setfacl [root@server1 /]# setfacl -m g:sales:rx /dir [root@server1 /]# getfacl /dir getfacl: Removing leading '/' from absolute path names # file: dir 135

# owner: root # group: root user::rwx group::r-x group:sales:r-x mask::r-x other::r-x Теперь, когда вы понимаете, как установить групповой ACL, легко понять ACL для пользователей и других. Например, команда setfacl -m u:linda:rwx /data дает пользователю linda права доступа к каталогу /data, не делая ее владельцем и не изменяя текущее назначение владельца. Команда setfacl имеет множество возможностей и опций. Одна опция особенно важна: опция -R. Если используется, опция применяет ACL ко всем файлам и подкаталогам, которые в настоящее время существуют в каталоге, в котором вы установили ACL. Рекомендуется всегда использовать эту опцию при изменении списков ACL для существующих каталогов. ACL также позволяют лишать пользователей разрешений. Например, setfacl -m u:anna:/tmp/myfile отнимет все разрешения для пользователя anna. Это также перезапишет все разрешения, которые пользователь мог получить через другие объекты. Работа со списками ACL по умолчанию Одним из преимуществ использования ACL является то, что вы можете давать разрешения более чем одному пользователю или группе в каталоге. Еще одно преимущество состоит в том, что вы можете включить наследование, работая со списками ACL по умолчанию. Устанавливая ACL по умолчанию, вы определяете разрешения, которые будут установлены для всех новых элементов, создаваемых в каталоге. Однако имейте в виду, что ACL по умолчанию не изменяет разрешения для существующих файлов и подкаталогов. Чтобы изменить их, вам также нужно добавить обычный ACL! СОВЕТ Это важно знать. Если вы хотите использовать ACL для настройки доступа нескольких пользователей или групп к одному и тому же каталогу, вам необходимо установить ACL дважды. Сначала используйте setfacl -R -m для изменения списков ACL для текущих файлов. Затем используйте setfacl -m d: чтобы позаботиться обо всех новых элементах, которые также будут созданы.

Чтобы установить ACL по умолчанию, просто добавьте параметр d после параметра -m. (Порядок имеет значение!) Итак, используйте setfacl -m d: g:sales:rx /data, если вы хотите, чтобы у группы sales были права на чтение и выполнение для всего, что когда-либо будет создано в каталоге /data. При использовании ACL по умолчанию также может быть полезно установить ACL для других объектов. Обычно это не имеет особого смысла, потому что вы также можете изменить разрешения для других с помощью chmod. Однако с помощью chmod вы не можете указать разрешения, которые должны быть предоставлены другим для каждого нового файла, который когда-либо будет создан. Если вы хотите, чтобы другие не получали разрешений на все, что создано в /data, например, используйте setfacl -m d:o::- /data. 136

В упражнении 7-3 вы узнаете, как применять расширенные разрешения и списки ACL, работая с каталогами /data/account и /data/sales, которые вы создали ранее. В предыдущих упражнениях вы убедились, что у группы sales есть разрешения на /data/sales, а у группы account есть разрешения на /data/account. До сих пор у вас не было возможности обновить схемы, как вы это делаете в этом упражнении. Сначала необходимо убедиться, что группа account получает разрешения на чтение в каталоге /data/sales, а группа sales получает разрешения на чтение в каталоге /data/account. Затем вы устанавливаете списки управления доступом по умолчанию, чтобы убедиться, что для всех новых файлов разрешения правильно установлены для всех новых элементов. СОВЕТ ACL и обычные разрешения не всегда очень хорошо интегрированы. Проблемы могут возникнуть, если вы применили к каталогу списки управления доступом по умолчанию, после чего элементы были добавлены в этот каталог, а затем вы попытаетесь изменить обычные разрешения. Изменения, которые применяются к обычным разрешениям, не будут хорошо отражены в обзоре ACL. Чтобы избежать проблем, сначала установите обычные разрешения, после чего вы установите ACL по умолчанию (а после этого постарайтесь не изменять их снова).

Упражнение 7-3 Управление расширенными разрешениями с помощью списков контроля доступа 1. Откройте root терминал. 2. Используйте setfacl -m g:account:rx /data/sales, чтобы предоставить группе account разрешения на чтение в каталоге /data/sales, и используйте setfacl -mg:sales:rx /data/account, чтобы предоставить группе sales права на чтение для каталог /data/account. 3. Используйте getfacl /data/, чтобы убедиться, что разрешения были установлены так, как вы намеревались. 4. Используйте setfacl -m d:g:account:rx, g:sales:rwx /data/sales, чтобы установить ACL по умолчанию для каталога sales. 5. Добавьте ACL по умолчанию для каталога /data/account с помощью setfacl -m d:g:sales:rx, g:account:rwx /data/account. 6. Убедитесь, что настройки ACL действуют, добавив новый файл в /data/sales. Используйте touch /data/sales/newfile и используйте getfacl /data/sales/newfile, чтобы проверить текущие назначения разрешений.

Установка разрешений по умолчанию с помощью umask В предыдущем разделе о списках ACL вы узнали, как работать со списками ACL по умолчанию. Если вы не используете списки управления доступом, существует параметр оболочки, определяющий разрешения по умолчанию, которые вы получите: umask. В этом разделе вы узнаете, как изменить разрешения по умолчанию с помощью umask. Вы, наверное, заметили, что при создании нового файла устанавливаются некоторые разрешения по умолчанию. Эти разрешения определяются настройкой umask. Этот параметр оболочки применяется ко всем пользователям при входе в систему. В настройке umask используется числовое значение, которое вычитается из максимальных разрешений, которые могут быть автоматически установлены для файла; максимальное значение для файлов - 666, а для каталогов - 777. Однако к этому правилу применяются некоторые исключения. Вы можете найти полный обзор настроек umask в Таблице 7-5.

137

Таблица 7-5 Значения umask и их результат Значение

Применяется к файлам

Применяется к каталогам

0

Чтение и Запись

Все

1

Чтение и Запись

Чтение и Запись

2

Читать

Чтение и Запись

3

Читать

Чтение

4

Запись

Чтение и Запись

5

Запись

Запись

6

Ничего

Выполнить

7

Ничего

Ничего

Простой способ увидеть, как работает настройка umask, заключается в следующем: Начните с разрешений по умолчанию для файла, установленных на 666, и вычтите umask, чтобы получить действующие разрешения. Для каталога начните с разрешений по умолчанию, равных 777, и вычтите umask, чтобы получить действующие разрешения. Есть два способа изменить настройку umask: для всех пользователей и для отдельных пользователей. Если вы хотите установить umask для всех пользователей, вы должны убедиться, что настройка umask учитывается при запуске файлов окружения оболочки, как указано в /etc/profile. Правильный подход - создать сценарий оболочки с именем umask.sh в каталоге /etc/profile.d и указать umask, который вы хотите использовать в этом сценарии shell. Если в этом файле изменена маска umask, она применяется ко всем пользователям после входа на ваш сервер. Альтернативой настройке umask с помощью /etc/profile и связанных файлов, где он применяется ко всем пользователям, входящим в систему, является изменение настроек umask в файле с именем .profile, который создается в домашнем каталоге индивидуального пользователя. Настройки, примененные в этом файле, применяются только для отдельного пользователя; следовательно, это хороший метод, если вам нужна большая детализация. Мне лично нравится эта функция для изменения umask по умолчанию для пользователя root umask будет 027, тогда как обычные пользователи работают с umask по умолчанию 022. Работа с расширенными пользователем атрибутами Когда вы работаете с разрешениями, всегда существует связь между объектом пользователя или группы и разрешениями, которые эти объекты пользователя или группы имеют в отношении файла или каталога. Альтернативный метод защиты файлов на сервере Linux - работа с атрибутами. Атрибуты выполняют свою работу независимо от пользователя, который обращается к файлу. Как и в случае с ACL, для атрибутов файлов может потребоваться включить параметр монтирования user_xattr. Если вы получаете сообщение «операция не поддерживается» при работе с расширенными пользователем атрибутами, не забудьте установить эту опцию монтирования в файле /etc/fstab.

138

Многие атрибуты задокументированы. Некоторые атрибуты доступны, но еще не реализованы. Не используйте их; они ничего не приносят. Ниже приведены наиболее полезные атрибуты, которые вы можете применить: ▪

▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪ ▪

A Этот атрибут гарантирует, что время доступа к файлу не будет изменено. Обычно каждый раз, когда файл открывается, время доступа к файлу должно быть записано в метаданные файла. Это отрицательно сказывается на производительности; поэтому для файлов, к которым осуществляется регулярный доступ, можно использовать атрибут A для отключения этой функции. a Этот атрибут позволяет добавлять файл, но не удалять его. c Если вы используете файловую систему, в которой поддерживается сжатие на уровне тома, этот атрибут файла гарантирует, что файл будет сжат при первом включении механизма сжатия. D Этот атрибут гарантирует, что изменения файлов записываются на диск немедленно, а не сначала в кэш. Это полезный атрибут для важных файлов базы данных, позволяющий убедиться, что они не теряются между файловым кешем и жестким диском. d Этот атрибут гарантирует, что файл не будет скопирован в резервные копии, где используется утилита dump. I Этот атрибут включает индексацию для каталога, в котором он включен. Это обеспечивает более быстрый доступ к файлам для примитивных файловых систем, таких как Ext3, которые не используют базу данных B-tree для быстрого доступа к файлам. i Этот атрибут делает файл неизменяемым. Таким образом, в файл нельзя вносить никаких изменений, что полезно для файлов, которым требуется дополнительная защита. j Этот атрибут гарантирует, что в файловой системе Ext3 файл сначала записывается в журнал, а только после этого - в блоки данных на жестком диске. s Этот атрибут перезаписывает блоки, в которых файл был сохранен, нулями после удаления файла. Это гарантирует, что восстановление файла после удаления невозможно. u Этот атрибут сохраняет информацию о восстановлении удаления. Это позволяет разработать утилиту, которая работает с этой информацией для восстановления удаленных файлов.

ПРИМЕЧАНИЕ. Несмотря на то, что существует довольно много атрибутов, которые можно использовать, имейте в виду, что большинство атрибутов являются скорее экспериментальными и могут использоваться только в том случае, если используется приложение, которое может работать с данным атрибутом. Например, не имеет смысла применять атрибут u, если не разработано приложение, которое может использовать этот атрибут для восстановления удаленных файлов. Если вы хотите применить атрибуты, вы можете использовать команду chattr. Например, используйте chattr +s somefile, чтобы применить атрибуты к файлу с именем somefile. Если нужно удалить атрибут используйте chattr -s somefile. Чтобы получить обзор всех атрибутов, которые применяются в настоящее время, используйте команду lsattr.

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

139

пользователем атрибуты для применения дополнительного уровня безопасности файловой системы.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 7-6 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 7-6 Ключевые темы главы 7 Элемент ключевой темы

Описание

Страница

Таблица 7-2

Использование основных разрешений

128

Таблица 7-3

Числовое представление разрешений

129

Таблица 7-4

Обзор специальных разрешений

133

Таблица 7-5

Обзор umask

138

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы. Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: владение, разрешения, список контроля доступа, наследование, атрибут (ownership, permissions, access control list, inheritance, attribute)

Обзорные вопросы В следующих вопросах используется открытый формат, который поможет вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Как вы используете chown, чтобы установить владельца группы для файла? 2. Какая команда находит все файлы, принадлежащие определенному пользователю? 140

3. Как бы вы применили разрешения на чтение, запись и выполнение ко всем файлам в /data для пользователей и владельцев групп, не устанавливая разрешений для других? 4. Какая команда позволяет вам в режиме относительных разрешений добавить разрешение на выполнение для файла, который вы хотите сделать исполняемым? 5. Какая команда позволяет гарантировать, что групповое владение всеми новыми файлами, которые будут созданы в каталоге, будет принадлежать владельцу группы этого каталога? 6. Вы хотите убедиться, что пользователи могут удалять только файлы, владельцем которых они являются, или файлы, находящиеся в каталоге, владельцем которого они являются. Какая команда сделает это за вас? 7. Какая команда добавляет ACL, который предоставляет членам группы sales права на чтение всех существующих файлов в текущем каталоге? 8. Что вам нужно сделать, чтобы члены группы sales получили разрешения на чтение всех файлов в текущем каталоге и всех его подкаталогах, а также всех файлов, которые будут созданы в этом каталоге в будущем? 9. Какую маску нужно установить, если вы никогда не хотите, чтобы группа «othere» получали какие-либо разрешения на новые файлы? 10. Какая команда гарантирует, что никто не сможет случайно удалить мой файл?

Лабораторная работа в конце главы В главе 6 «Управление пользователями и группами» вы создали несколько пользователей и группы. Эти пользователи и группы необходимы для выполнения упражнений в этой лабораторной работе.

Лабораторная работа 7.1. 1. Настройте общую групповую среду. Создайте два каталога: /data/account и /data/sales. Сделайте группу sales владельцем каталога sales, а группу - владельцем учетной записи каталога. 2. Настройте разрешения так, чтобы владелец user (который должен быть root) и владелец группы имели полный доступ к каталогу. Другим объектам не должно быть назначено никаких разрешений. Также убедитесь, что «othere» не получат разрешений на вновь созданные файлы и каталоги во всей структуре /data. 3. Создайте конфигурацию, которая позволяет членам группы sales читать файлы в каталоге /data/account. Также убедитесь, что члены группы account имеют права на чтение в каталоге /data/sales. 4. Убедитесь, что все новые файлы в обоих каталогах наследуют владельца группы соответствующего каталога. Это означает, что все файлы, которые будут созданы в /data/sales, будут принадлежать группе sales, а все файлы в /data/account будут принадлежать группе account. 5. Убедитесь, что пользователям разрешено удалять только те файлы, владельцами которых они являются.

141

Глава 8 В этой главе рассматриваются следующие темы: ▪ ▪ ▪

Основы сетевых технологий Управление сетевыми адресами и интерфейсами Проверка конфигурации сети

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪

Настроить адреса IPv4 и IPv6 Настроить разрешение имени хоста

Сеть - одна из важнейших составляющих современного сервера. В RHEL 8 сетью управляет служба NetworkManager, а с выпуском RHEL 7 были представлены некоторые совершенно новые инструменты, помогающие управлять сетями. Если вы уже работали с сетью на RHEL 6 и старше, вы заметите, что работа с сетью сильно изменилась и что некоторые подходы, которые использовались по умолчанию в более ранних версиях, больше не будут работать.

Управление пользователями и группами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 8-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 8 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Основы сетевых технологий

Вопросы 1-2

Управление сетевыми адресами и интерфейсами

3

Проверка конфигурации сети

4

Настройка конфигурации сети с помощью nmtui и nmcli

5-8

Настройка имени хоста и разрешения имен

9 - 10

1. Какие из следующих IP-адресов принадлежат одной сети? I. II. III. IV.

192.168.4.17/26 192.168.4.94/26 192.168.4.97/26 192.168.4.120/26 a. I и II b. II и III c. III и IV 142

d. II, III и IV 2. Что из перечисленного не является частным IP-адресом? a. b. c. d.

10.10.10.10 169.254.11.23 172.19.18.17 192.168.192.192

3. Что из следующего будет именем сетевого интерфейса по умолчанию в системе RHEL 8? a. b. c. d.

p6p1 eth0 eno1677783 e0

4. Какая команда показывает рекомендуемый способ отображения информации о сетевом интерфейсе, а также его IP-конфигурации? a. b. c. d.

ifconfig -all ipconfig ip link show ip addr show

5. Какое утверждение о NetworkManager не соответствует действительности? a. Можно безопасно отключить NetworkManager и вместо этого работать с сетевой службой. b. NetworkManager управляет сетевыми соединениями, которые применяются к сетевым интерфейсам. c. NetworkManager имеет текстовый пользовательский интерфейс с именем nmtui. d. NetworkManager - это служба по умолчанию для управления сетью в RHEL 8. 6. На какой странице руководства содержатся отличные примеры использования nmcli? a. b. c. d.

nmcli nmcli-examples nm-config nm-tools

7. Какое из перечисленного является названием текстового пользовательского интерфейса для определения свойств сетевого подключения? a. b. c. d.

system-config-network system-config-networkmanager nmtui nmcli

8. Какая из следующих команд показывает правильный синтаксис для установки фиксированного IP-адреса для подключения с помощью nmcli? 143

a. nmcli con add con-name "static" ifname eth0 autoconnect no type ethernet ipv4 10.0.0.10/24 gw4 10.0.0.1 b. nmcli con add con-name "static" ifname eth0 autoconnect no type ethernet ipv4 10.0.0.10/24 gwv4 10.0.0.1 c. nmcli con add con-name "static" ifname eth0 type ethernet ipv4 10.0.0.10/24 gw4 10.0.0.1 d. nmcli con add con-name "static" ifname eth0 autoconnect no type ethernet ip4 10.0.0.10/24 gw4 10.0.0.1 9. Что из перечисленного не является рекомендуемым способом указания используемых DNS-серверов? a. b. c. d.

Отредактируйте /etc/resolv.conf. Задайте параметры DNS в /etc/sysconfig/network-scripts/ifcfg- . Задайте имена DNS-серверов с помощью nmcli. Используйте nmtui, чтобы установить имена DNS-серверов.

10. В каком файле конфигурации вы бы задали имя хоста? a. b. c. d.

/etc/sysconfig/network /etc/sysconfig/hostname /etc/hostname /etc/defaults/hostname

Основные темы Основы сетевых технологий Чтобы настроить сеть на сервере, вашему серверу нужен уникальный адрес в сети. Для этого используются IP-адреса (Интернет-протокол). В настоящее время актуальны две версии IPадресов:

▪ ▪

Адреса IPv4: они основаны на 32-битных адресах и имеют четыре октета, разделенных точками, например 192.168.10.100 Адреса IPv6: они основаны на 128-битных адресах и записываются в восьми группах шестнадцатеричных чисел по 16 бит в каждой, разделенных двоеточиями. Адрес IPv6 может выглядеть, как fe80:badb:abe01:45bc:34ad:1313:6723:8798.

В этой главе вы узнаете, как работать с адресами IPv4. Адреса IPv6 описаны только кратко. IP-адреса Первоначально IP-адреса назначались компьютерам и маршрутизаторам. В настоящее время многие другие устройства также нуждаются в IP-адресах для связи, например смартфоны, промышленное оборудование и почти все другие устройства, подключенные к Интернету. В этой

144

главе для всех подобных устройствах используется слово «узел». Иногда вы также встретите слово «хост». Хост - это обычно сервер, предоставляющий услуги в сети. Чтобы компьютеры могли обмениваться данными друг с другом, каждый IP-адрес принадлежит определенной сети, а для связи с компьютерами в другой сети используется маршрутизатор. Маршрутизатор - это машина (часто для этой цели создано специальное оборудование), которая соединяет сети друг с другом. Для связи в Интернете каждому компьютеру нужен уникальный IP-адрес во всем мире. Этих адресов мало; теоретический максимум - четыре миллиарда IP-адресов, и этого недостаточно, чтобы предоставить каждому устройству на планете IP-адрес. IPv6 - окончательное решение этой проблемы, потому что в IPv6 можно создать очень большое количество IP-адресов. Однако, поскольку многие сети все еще работают с IPv4, существует другое решение: адреса частной сети. Адреса частной сети - это адреса, которые используются только во внутренних сетях. Для этой цели зарезервированы некоторые конкретные IP-адреса сети:

▪ ▪ ▪

10.0.0.0/8 (a single Class A network) 172.16.0.0/12 (16 Class B networks) 192.168.0.0/16 (256 Class C networks)

Когда используются частные адреса, узлы, которые их используют, не могут напрямую получить доступ к Интернету, а узлы из Интернета не могут легко получить к ним доступ. Поскольку это не очень удобно, преобразование сетевых адресов ((Network Address Translation) NAT) обычно используется на маршрутизаторе, который соединяет частную сеть с Интернетом. В NAT узлы используют частный IP-адрес, но при доступе к Интернету этот частный IP-адрес заменяется IP-адресом маршрутизатора NAT. Следовательно, узлы в Интернете думают, что они обмениваются данными с маршрутизатором NAT, а не с отдельными узлами. Маршрутизатор NAT, в свою очередь, использует таблицы для отслеживания всех соединений, которые в настоящее время существуют для хостов в сети. Основываясь на этой таблице, NAT-маршрутизатор помогает компьютерам с частным IP-адресом подключаться к узлам в Интернете. Использование NAT очень распространено; он встроен в большинство маршрутизаторов, которые используются в домашних сетях и сетях малого бизнеса для подключения компьютеров и других устройств в этих сетях к Интернету. Адреса IPv6 Давайте посмотрим на действующий IPv6-адрес, например 02fb:0000:0000:0000:90ff:fe23:8998:1234. В этом адресе вы можете видеть, что встречается длинный диапазон нулей. Чтобы сделать адреса IPv6 более удобочитаемыми, вы можете заменить один диапазон нулей на ::. Кроме того, если адрес IPv6 начинается с нуля в начале, его можно опустить. Таким образом, ранее упомянутый адрес IPv6 можно переписать как 2fb::90ff:fe23:8998:1234. Сетевые маски Чтобы узнать, к какой сети принадлежит компьютер, для каждого IP-адреса используется маска подсети. Маска подсети определяет, какая часть сетевого адреса указывает на сеть, а какая - на узел. Маски подсети могут быть записаны в нотации бесклассовой меж доменной 145

маршрутизации (CIDR), которая указывает количество битов в маске подсети, или в классической записи, и они всегда должны быть указаны с сетевым адресом. Для примера 192.168.10.100/24 (нотация CIDR), которая указывает, что используется 24-битный сетевой адрес, и 192.168.10.100/255.255.255.0 (классическая нотация), что означает то же самое. Часто в сетевых масках используется несколько байтов. В примере с использованием 192.168.10.100/24 первые три байта (часть 192.168.10) образуют сетевую часть, а последний байт (число 100) - часть хоста в этой сети. Говоря о сетевых адресах, вы также используете 4-байтовое число, в котором адрес узла установлен на 0. Итак, в примере 192.168.10.100/24 сетевой адрес - 192.168.10.0. В сетях IPv4 также всегда есть широковещательный адрес. Это адрес, который можно использовать для адресации всех узлов в сети. В широковещательном адресе все биты узла установлены в 1, что составляет десятичное число 255, если упоминается весь байт. Итак, в примере адреса 192.168.10.100/24 широковещательный адрес 192.168.10.255. Двоичная запись Поскольку количество адресов IPv4 ограничено, в современных сетях IPv4 используются сетевые маски переменной длины. Маски сети, например 212.209.113.33/27. В маске подсети переменной длины только часть байта используется для адресации узлов, а другая часть используется для адресации сети. В маске подсети /27 первые 3 бита последнего байта используются для адресации сети, а последние 5 бит используются для адресации узлов. Это станет яснее, если вы запишете адрес в двоичной системе счисления: IP address: 212.209.113.33 = 11010100.11010001.00001010.00100001 Subnet mask: /27 = 11111111.11111111.11111111.11100000 Применяя маску подсети к IP-адресу, вы можете видеть, что первые 3 бита IP-адреса принадлежат сети, поэтому сеть - 00100000. И если вы используете двоичный калькулятор, вы можете увидеть, что это соответствует десятичному значению IP-адреса 32. Использование маски подсети /27 позволяет создавать несколько сетей. Таблица 8-2 дает обзор преобразования.

Таблица 8-2 Обзор двоично-десятичного преобразования Двоичное значение

Десятичное значение

00000000

0

00100000

32

01000000

64

01100000

96

10000000

128

146

10100000

160

11000000

192

11100000

224

Итак, на основе этой информации, если вы снова рассмотрите IP-адрес 212.209.113.33/27, вы увидите, что он принадлежит сети 212.209.113.32/27, и что в этой сети широковещательный адрес (который имеет узловую часть IP-адрес установлен на все единицы) 212.209.113.63; следовательно, с маской подсети /27 в каждой сети может быть адресовано 30 узлов. Вы получите 32 IP-адреса, но 2 из них - это сетевой и широковещательный адреса, которые нельзя использовать в качестве IP-адреса хоста. СОВЕТ К ЭКЗАМЕНАМ Вам не нужно производить такого рода вычисления на экзамене RHCSA, но это помогает понять, как работает IP-адресация в сети. MAC-адреса IP-адреса это адреса, которые позволяют узлам связываться с любым другим узлом в Интернете. Однако это не единственные используемые адреса. Каждая сетевая карта также имеет 12-байтовый MAC-адрес. MAC-адреса предназначены для использования в локальной сети (то есть в локальной физической сети или локальной WLAN, до первого обнаруженного маршрутизатора); они не могут использоваться для связи между узлами, находящимися в разных сетях. Однако MAC-адреса важны, потому что они помогают компьютерам найти конкретную сетевую карту, которой принадлежит IP-адрес. Примером MAC-адреса является 00:0c:29:7d:9b:17. Обратите внимание, что каждый MACадрес состоит из двух частей. Первые 6 байтов это идентификатор поставщика, а вторые 6 байтов это уникальный идентификатор узла. Идентификаторы поставщиков зарегистрированы, и, используя зарегистрированные идентификаторы поставщиков, можно выделить уникальные MAC-адреса. Протокол и порты В предыдущем разделе вы узнали, как использовать IP-адреса для идентификации отдельных узлов. На этих узлах вы обычно будете запускать службы, такие как веб-сервер или FTP-сервер. Для идентификации этих сервисов используются адреса портов. У каждой службы есть определенный адрес порта, например порт 80 для протокола передачи гипертекста (HTTP) или порт 22 для сервера Secure Shell (SSH), а при сетевой связи отправитель и получатель используют адреса портов. Таким образом, существует адрес порта назначения, а также адрес порта источника, участвующие в сетевых коммуникациях. Поскольку не все службы адресуются одинаково, между IP-адресом и адресом порта используется определенный протокол, например протокол управления передачей (Transfer Control Protocol (TCP)), протокол пользовательских дейтаграмм (User Datagram Protocol (UDP)) или протокол управляющих сообщений Интернета (Internet Control Message Protocol (ICMP)). Каждый протокол имеет определенные свойства: TCP обычно используется, когда сетевая связь должна быть надежной и должна быть гарантирована доставка; UDP используется, когда он должен быть быстрым и гарантированная доставка не нужна.

147

Управление сетевыми адресами и интерфейсами Как администратору сервера Linux вам необходимо управлять сетевыми адресами и сетевыми интерфейсами. Сетевые адреса можно назначить двумя способами:

▪ ▪

Фиксированные IP-адреса: полезно для серверов, которые всегда должны быть доступны по одному и тому же IP-адресу. Динамически назначаемые IP-адреса: полезно для устройств конечных пользователей и для экземпляров в облачной среде. Для динамического назначения IP-адресов обычно используется сервер протокола динамической конфигурации хоста (DHCP).

Долгое время сетевые карты в Linux имели имена по умолчанию, такие как eth0, eth1 и eth2. Это наименование было присвоено исходя из порядка обнаружения сетевой карты. Итак, eth0 была первой обнаруженной сетевой картой, eth1 - второй и так далее. Это хорошо работало в среде, где узел имеет только одну или две сетевые карты. Однако, если у узла есть несколько сетевых карт, которые необходимо динамически добавлять и удалять, этот подход не работает так хорошо, потому что очень сложно определить, какая физическая сетевая карта использует какое имя. В RHEL 8 имена по умолчанию для сетевых карт основаны на микропрограммном обеспечении, топологии устройства и типах устройств. Это приводит к именам сетевых карт, которые всегда состоят из следующих частей: ▪ ▪

▪ ▪

Интерфейсы Ethernet начинаются с en, интерфейсы WLAN начинаются с wl, а интерфейсы WWAN начинаются с ww. Следующая часть имени представляет тип адаптера. Символ o - используется для встроенной платы, s - для слота горячей замены, а p - для расположения PCI. Администраторы также могут использовать x для создания имени устройства на основе MAC-адреса сетевой карты. Затем следует число, которое используется для обозначения индекса, идентификатора или порта. Если фиксированное имя не может быть определено, используются традиционные имена, такие как eth0.

На основе этой информации можно использовать такие имена устройств, как eno16777734, что означает встроенное устройство Ethernet с его уникальным порядковым номером. Помимо этого наименования устройств по умолчанию, сетевым картам также можно давать имена на основе имени устройства BIOS. В этой схеме именования можно использовать такие имена, как em1 (встроенная сетевая карта 1) или p4p1 (это слот PCI 4, порт 1). Чтобы использовать такое именование, необходимо установить пакет biosdevname.

Проверка конфигурации сети Прежде чем вы сможете узнать, как установить сетевую информацию, вы должны знать, как проверить текущую сетевую информацию. В этом разделе вы узнаете, как это сделать, и узнаете, как проверить следующие сетевые элементы: ▪

IP-адрес и маска подсети 148

▪ ▪

Маршрутизация Наличие портов и сервисов

Проверка конфигурации сетевого адреса Чтобы проверить конфигурацию сетевого адреса, вам необходимо использовать утилиту ip. Утилита ip это современная утилита, которая может учитывать недавно представленные расширенные сетевые функции. С помощью утилиты ip можно отслеживать многие аспекты сети: ▪ ▪ ▪

Используйте ip addr для настройки и мониторинга сетевых адресов. Используйте ip route для настройки и отслеживания информации о маршрутизации. Используйте ip link для настройки и отслеживания состояния сетевого соединения.

Помимо этих элементов, утилита ip может управлять многими другими аспектами сети, но вам не нужно знать о них для экзамена RHCSA. ПРЕДУПРЕЖДЕНИЕ В более ранних версиях Linux и некоторых других UNIX-подобных операционных системах утилита ifconfig использовалась и используется для проверки конфигурации сети. Не используйте эту утилиту в современных дистрибутивах Linux. Поскольку Linux стал важным игроком в облачных вычислениях, сети претерпели значительные изменения, чтобы соответствовать требованиям облачных вычислений, и в сети Linux было добавлено много новых функций. С помощью утилиты ifconfig вы не можете управлять этими концепциями или проверять их. Даже если ifconfig по-прежнему является инструментом по умолчанию в некоторых операционных системах (например, в Apple OS X), вы никогда не должны больше использовать его в Linux!

Чтобы показать текущие сетевые настройки, вы можете использовать команду ip addr show (которая может быть сокращена до ip a s или даже ip a). Команда ip относительно умна и не всегда требует, чтобы вы вводили полную опцию. Результат команды ip addr show показан в примере 81. Пример 8-1 Мониторинг текущей конфигурации сети с помощью команды ip addr show

149

В результате этой команды вы увидите список всех сетевых интерфейсов на вашем компьютере. Обычно вы видите, как минимум два интерфейса, но в определенных конфигурациях интерфейсов может быть намного больше. В примере 8-1 показаны два интерфейса: интерфейс обратной связи lo и встроенная карта Ethernet ens33. Интерфейс обратной связи используется для связи между процессами. Некоторые процессы используют протокол IP для внутренней связи. По этой причине вы всегда найдете интерфейс обратной петли, а IP-адрес интерфейса обратной связи всегда установлен на 127.0.0.1. Важная часть вывода команды относится к встроенной карте Ethernet. Команда показывает следующие элементы о своем текущем состоянии: ▪ ▪ ▪



Текущее состояние: наиболее важной частью этой строки является текст о состояние (state) UP, которое показывает, что эта сетевая карта в настоящее время включена и доступна. Конфигурация MAC-адреса: это уникальный MAC-адрес, который устанавливается для каждой сетевой карты. Вы можете увидеть сам MAC-адрес (00:0c:29:50:9e:c9), а также соответствующий широковещательный адрес. Конфигурация IPv4: в этой строке отображается текущий установленный IP-адрес, а также используемая маска подсети. Вы можете увидеть и широковещательный адрес, который используется для этой конфигурации сети. Обратите внимание, что на некоторых интерфейсах вы можете найти несколько адресов IPv4. Конфигурация IPv6: в этой строке отображается текущий адрес IPv6 и его конфигурация. Даже если вы ничего не настроили, каждый интерфейс автоматически получает IPv6-адрес, который можно использовать только для связи в локальной сети.

Если вас просто интересует состояние соединения сетевых интерфейсов, вы можете использовать команду ip link show. Эта команда (вывод которой вы можете увидеть в примере 82) повторяет информацию о состоянии связи команды ip addr show. Если вы добавите параметр s, вы также сможете увидеть текущую статистику ссылок, которая дает информацию о переданных и полученных пакетах, а также обзор ошибок, которые произошли во время передачи пакетов. Пример 8-2 Вывод команды ip link show

150

В случае, если команда ip link show показывает текущее состояние соединнения, как неработающее, вы можете временно восстановить его снова, используя ip link set, за которым следуют dev devicename и up (например, ip link set dev ens33 up). В упражнении 8-1 вы узнаете, как управлять сетью и контролировать ее с помощью утилиты ip и других утилит. Упражнение 8-1 Проверка конфигурации сети

1. Откройте root shell. 2. Введите ip -s link. В выводе команды отображаются все существующие сетевые подключения, а также статистика о количестве отправленных пакетов и связанные сообщения об ошибках. 3. Введите ip addr show. Вы увидите текущие назначения адресов для сетевых интерфейсов на вашем сервере.

Проверка маршрутизации

Один из важных аспектов сети является маршрутизация. В каждой сети, которая должна связываться с узлами в других сетях, требуется маршрутизация. В каждой сети есть, по крайней мере, установленный маршрутизатор по умолчанию (также называемый шлюзом по умолчанию), и вы можете увидеть, какой маршрутизатор используется в качестве маршрутизатора по умолчанию, используя команду ip route show (см. Пример 8-3). Вы всегда должны выполнять одну быструю проверку, чтобы убедиться, что ваш маршрутизатор настроен правильно: маршрутизатор по умолчанию всегда должен находиться в той же сети, что и локальный IP-адрес, который использует ваша сетевая карта. Example 8-3 Вывод команды ip route show

В примере 8-3 самая важная частью является первая строка. Она показывает, что маршрут по умолчанию проходит через («via») IP-адрес 192.168.4.2, а также показывает, что сетевой интерфейс ens33 должен использоваться для адресации этого IP-адреса. Строка показывает, что этот маршрут по умолчанию был назначен DHCP-сервером. Метрика используется в случае, если к одному месту назначения доступно несколько маршрутов. В этом случае будет использоваться маршрут с наименьшей метрикой. Это важно для маршрутизаторов, но на компьютерах, которые не являются маршрутизаторами, метрика не имеет значения. 151

Далее вы можете увидеть линии, которые определяют локальные подключенные сети. При загрузке запись также добавляется для каждой локальной сети, и в этом примере это относится к сетям 192.168.4.0 и 192.168.122.0. Эти маршруты генерируются автоматически и не нуждаются в управлении. Проверка доступности портов и сервисов Сетевые проблемы могут быть связаны с локальным IP-адресом и настройками маршрутизатора, но также могут быть связаны с сетевыми портами, которые недоступны на вашем сервере или на удаленном сервере. Чтобы проверить доступность портов на вашем сервере, вы можете использовать команду netstat или новую команду ss, которая обеспечивает ту же функциональность. В упражнении 8-2 показано, как проверить настройки сети. Набрав ss -lt, вы увидите все прослушивающие TCP-порты в локальной системе (см. Пример 8-4). Пример 8-4 Использование ss -lt для отображения всех прослушивающих портов в локальной системе

Обратите внимание, где порт прослушивает. Некоторые порты прослушивают только адрес обратной связи IPv4 127.0.0.1 или адрес обратной связи IPv6 :: 1, что означает, что они доступны только локально и не могут быть доступны с внешних компьютеров. Другие порты прослушивают *, что означает все адреса IPv4, или ::: *, который представляет все порты на всех адресах IPv6. Упражнение 8-2 Проверка сетевых настроек 1. Откройте root shell на вашем сервере и введите ip addr show. Вывод команды показывает текущую конфигурацию сети. Обратите внимание на используемый IPv4-адрес и используемые имена сетевых устройств; они понадобятся вам позже в этом упражнении. 2. Введите ip route show, чтобы проверить конфигурацию маршрутизации. 3. Если ваш компьютер подключен к Интернету, вы можете использовать команду ping, чтобы убедиться, что соединение с Интернетом работает правильно. Введите например 152

4. 5. 6.

7.

ping -c 4 8.8.8.8, чтобы отправить четыре пакета на IP-адрес 8.8.8.8. Если ваше Интернетсоединение установлено и работает, вы должны получить ответы «echo reply». Введите ip addr add 10.0.0.10/24 dev . Это временно установит новый IP-адрес. Введите ip addr show. Вы увидите только что установленный IP-адрес в дополнение к IPадресу, который уже использовался. Введите ifconfig. Обратите внимание, что вы не видите только что установленный IP-адрес (и нет параметров с командой ifconfig, которые позволили бы вам его увидеть). Это один из примеров того, почему вам больше не следует использовать команду ifconfig. Введите ss -tul. Теперь вы увидите список всех портов UDP и TCP, которые прослушиваются на вашем сервере.

Настройка конфигурации сети с помощью nmtui и nmcli Как упоминалось ранее в этой главе, сетевое взаимодействие в RHEL 8 управляется службой NetworkManager. Вы можете использовать команду systemctl status NetworkManager, чтобы проверить его текущий статус. Когда открывается NetworkManager, он читает сценарии конфигурации сетевой карты, которые находятся в /etc/sysconfig/network-scripts и имеют имя, которое начинается с ifcfg и сопровождается именем сетевой карты. При работе с конфигурацией сети в RHEL 8 вы должны знать разницу между устройством и соединением: ▪ ▪

Устройство — это сетевая карта. Подключение — это конфигурация, которая используется на устройстве.

В RHEL 8 вы можете создать несколько подключений для устройства. Это имеет смысл, например, на мобильных компьютерах, чтобы различать настройки, используемые для подключения к домашней сети, и настройки, которые используются для подключения к корпоративной сети. Переключение между подключениями на устройствах - обычное дело на компьютерах конечных пользователей, но не на серверах. Для управления сетевыми соединениями, которые вы хотите назначить устройствам, вы используете команду nmtui или команду nmcli. СОВЕТ К ЭКЗАМЕНАМ Red Hat хочет, чтобы вы знали, как работать с nmcli. Однако эта команда не очень проста в использовании, и, в конце концов, на экзамене вам нужно будет настроить сетевое устройство с соответствующими настройками. По этой причине на экзамене RHCSA совершенно нормально использовать команду текстового пользовательского интерфейса nmtui; с этой командой вы значительно упростите задачу.

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

153

могут изменять конфигурацию сети. Чтобы проверить свои текущие разрешения, используйте команду nmcli gen permissions, как показано на рисунке 8-1. Настройка сети с помощью nmcli Ранее в этой главе вы узнали, как использовать ip для проверки конфигурации сети. Вы также применили команду ip addr add для временной установки IP-адреса в сетевом интерфейсе. Однако все, что вы делаете с помощью команды ip, будет временно до первой перезагрузки. Если вы хотите, чтобы ваша конфигурация была постоянной, используйте команду nmtui или nmcli. РИСУНОК 8-1. Проверка текущих разрешений на изменение конфигурации сети.

Хорошее начало - использовать nmcli для отображения всех подключений. Это показывает активные и неактивные соединения. Вы можете легко увидеть разницу, потому что неактивные соединения в настоящее время не назначены устройству (см. Пример 8-5). Пример 8-5 Отображение текущего состояния подключения

Найдя имя подключения, вы можете использовать nmcli con show, за которым следует имя подключения, чтобы увидеть все его свойства. Обратите внимание, что эта команда показывает множество свойств. В примере 8-6 показан результат выполнения этой команды. Пример 8-6 Отображение свойств соединения

154

155

156

157

Чтобы узнать, что именно делают эти настройки, выполните команду man 5 nm-settings. Вы также можете использовать nmcli, чтобы показать обзор настроенных в настоящее время устройств и состояния этих устройств. Введите, например, команду nmcli dev status, чтобы показать список всех устройств, и nmcli dev show , чтобы показать настройки для определенного устройства. СОВЕТ Использование nmcli может показаться трудным. Это не так, потому что утилита предлагает отличные функции завершения командной строки - просто убедитесь, что пакет bash-completion установлен. Попробуйте, набрав nmcli, но не нажимайте Enter! Вместо этого дважды нажмите клавишу Tab - вы увидите все доступные параметры, которые nmcli ожидает в данный момент. Выберите вариант, например подключение, и дважды нажмите клавишу TAB. Такой подход поможет вам составлять длинные команды без необходимости что-либо запоминать!

В упражнении 8-3 вы узнаете, как создавать соединения и переключаться между ними с помощью команды nmcli. Упражнение 8-3 Управление сетевыми подключениями с помощью nmcli В этом упражнении вы создаете новое соединение и будете управлять его статусом. Это соединение необходимо подключить к сетевому устройству. В этом упражнении используется устройство ens33. При необходимости измените его на имя сетевого устройства, используемого на вашем компьютере. 158

1. Создайте новое сетевое соединение, набрав nmcli con add con-name dhcp type ethernet ifname ens33 ipv4.method auto. 2. Создайте соединение с именем static, чтобы определить статический IP-адрес и шлюз: nmcli con add con-name static ifname ens33 autoconnect no type ethernet ip4 10.0.0.10/24 gw4 10.0.0.1 ipv4.method manual. Шлюз может не существовать в вашей конфигурации, но это не имеет значения. 3. Введите nmcli con show, чтобы отобразить соединения, и используйте nmcli con up static, чтобы активировать статическое соединение. Вернитесь к DHCP-соединению, используя nmcli con up dhcp. В этом упражнении вы создали сетевые подключения с помощью nmcli con add. Вы также можете изменить текущие свойства соединения с помощью nmcli con mod. В упражнении 8-4 вы узнаете, как изменить параметры соединения с помощью nmcli. Упражнение 8-4 Изменение параметров подключения с помощью nmcli 1. Убедитесь, что статическое соединение не подключается автоматически при использовании статического соединения nmcli con mod static connection.autoconnect no. 2. Добавьте DNS-сервер к статическому соединению, используя mcli con mod static ipv4.dns 10.0.0.10. Обратите внимание, что при добавлении сетевого подключения вы используете ip4, но при изменении параметров для существующего подключения вы часто вместо этого используете ipv4. Это не опечатка; это просто то, как это работает. 3. Чтобы добавить второй элемент для тех же параметров, используйте знак +. Проверьте это, добавив второй DNS-сервер, используя mcli con mod static +ipv4.dns 8.8.8.8. 4. Используя nmcli con mod, вы также можете изменить такие параметры, как существующий IP-адрес. Попробуйте это, используя nmcli con mod static ipv4.addresses 10.0.0.100/24. 5. А чтобы добавить второй IP-адрес, вы снова используете знак +: nmcli con mod static +ipv4.addresses 10.20.30.40/16. 6. После изменения свойств подключения их необходимо активировать. Для этого вы можете использовать nmcli con up static. Это все, что вам нужно знать о nmcli для экзамена RHCSA. Как вы заметили, nmcli - очень богатая команда. Точный синтаксис этой команды может быть трудно запомнить. К счастью, есть отличная справочная страница с примерами. Введите man nmcli-examples, чтобы открыть справочную страницу; вы заметите, если вы найдете эту страницу руководства, вы сможете делать с помощью nmcli почти все. Также не забывайте использовать авто дополнение при работе с nmcli. Настройка сети с помощью nmtui Если вам не нравится сложный синтаксис командной строки nmcli, вам может понравиться nmtui. Это текстовый пользовательский интерфейс, который позволяет легко создавать сетевые подключения. На рис. 8-2 показано, как выглядит интерфейс nmtui. РИСУНОК 8-2 Интерфейс nmtui

159

Интерфейс nmtui состоит из трех пунктов меню: ▪ ▪ ▪

Редактировать соединение: используйте эту опцию для создания новых или редактирования существующих соединений. Активировать соединение: используйте это, чтобы (повторно) активировать соединение. Установить имя хоста системы: Используйте это, чтобы установить имя хоста вашего компьютера.

▪ Возможность редактирования соединения предлагает почти все функции, которые могут вам понадобиться при работе с сетевыми соединениями. Это, безусловно, позволяет вам делать все, что вам нужно на экзамене RHCSA. Вы можете использовать его для добавления любого типа подключения; поддерживаются не только соединения Ethernet, но и расширенные типы соединений, такие как сетевые мосты и объединенные (teame) сетевые драйверы. Когда вы выбираете опцию Edit a Connection, вы получаете доступ к богатому интерфейсу, который позволяет вам редактировать большинство свойств сетевых подключений. После редактирования соединения его необходимо деактивировать и снова активировать. Это должно работать автоматически, но дело в том, что это не так. СОВЕТ Если вам нравятся инструменты с графическим пользовательским интерфейсом (GUI), вам повезло. Используйте nm-connection-editor вместо nmtui, но будьте готовы к тому, что этот интерфейс предлагает относительно ограниченный набор опций. Он не содержит дополнительных параметров, таких как параметры для создания сетевых интерфейсов группы и управления интерфейсами сетевого моста. Однако он предлагает все необходимое для управления конфигурацией адреса в сетевом соединении. Запустите его с помощью команды nm-connectioneditor или с помощью апплета в графическом интерфейсе GNOME. На рис. 8-3 показано, как выглядит интерфейс этого инструмента по умолчанию.

160

РИСУНОК 8-3 Интерфейс nm-connection-editor

Работа с файлами конфигурации сети Каждое создаваемое вами соединение сохраняется в виде файла конфигурации в каталоге /etc/sysconfig/network-scripts. Имя файлов конфигурации начинается с ifcfg- и сопровождается именем сетевого интерфейса. В примере 8-7 вы можете увидеть, как выглядит такой файл конфигурации. Пример 8-7 Пример файла конфигурации ifcfg

161

Если вам не нравится вносить изменения в конфигурацию сети с помощью nmcli или nmtui, вместо этого вы можете напрямую отредактировать этот файл конфигурации. После внесения изменений в файл конфигурации используйте команду nmcli con up, чтобы активировать новую конфигурацию. СОВЕТ. В одном сетевом соединении можно установить, как фиксированный IP-адрес, так и динамический IP-адрес. Для этого установите для параметра BOOTPROTO в файле конфигурации подключения значение dhcp, а также укажите IP-адрес и префикс сети. Вы также можете сделать это с помощью утилиты nmtui; просто убедитесь, что в nmtui настройка IPv4 установлена на автоматическую (а не на ручную), а также укажите IP-адрес. Я рекомендую вам сделать это в тестовой конфигурации, которую вы используете с этой книгой, потому что она позволяет вам использовать статическую конфигурацию сетевого адреса для внутреннего использования в дополнение к динамической конфигурации, которая позволяет вам получать доступ к Интернету и устанавливать программное обеспечение из репозиториев.

Настройка имени хоста и разрешения имен Для связи с другими хостами используются имена хостов. Вам, как администратору важно знать, как задать имя хоста. Вам также необходимо убедиться, что хосты могут связываться друг с другом на основе имен хостов, настроив разрешение имен хостов. В этом разделе вы узнаете, как это сделать. Имена хостов Поскольку имена хостов используются для доступа к серверам и службам, которые они предлагают, важно знать, как установить имя хоста системы. Имя хоста обычно состоит из разных частей. Это имя хоста и DNS-домен, в котором находится хост. Эти две части вместе составляют полное доменное имя (FQDN), которое выглядит как server1.example.com. Рекомендуется всегда указывать полное доменное имя, а не только имя хоста, поскольку полное доменное имя обеспечивает уникальную идентификацию в Интернете. Есть разные способы изменить имя хоста: ▪ ▪ ▪

Используйте nmtui и выберите опцию «Изменить имя хоста (Change Hostname)». Используйте hostnamectl set-hostname. Отредактируйте содержимое файла конфигурации /etc/hostname.

Чтобы настроить имя хоста с помощью hostnamectl, вы можете использовать такую команду, как hostnamectl set-hostname myhost.example.com. После установки имени хоста вы можете использовать hostnamectl status, чтобы показать текущее имя хоста. В примере 8-8 показан результат этой команды. При использовании hostnamectl status вы видите не только информацию об имени хоста, но также информацию о ядре Linux, типе виртуализации и многом другом. Пример 8-8 Отображение текущей конфигурации имени хоста 162

Кроме того, вы можете установить имя хоста с помощью интерфейса nmtui. На рис. 8-4 показан экран, на котором это можно сделать. РИСУНОК 8-4. Изменение имени хоста с помощью nmtui

Для установки разрешения имени хоста обычно используется DNS. Настройка DNS-сервера не является целью RHCSA, но вам нужно знать, как настроить свой сервер для использования, существующего DNS-сервера для разрешения имени хоста. Помимо DNS, вы можете настроить разрешение имен хостов в файле /etc/hosts. В примере 8-9 показано содержимое файла /etc/hosts. Пример 8-9 /etc/hosts Пример содержания

Все определения имя хоста – IP-адреса, установленные в /etc/hosts, будут применены до использования имени хоста в DNS. Это настроено по умолчанию в строке hosts в /etc/nsswitch.conf, которая по умолчанию выглядит так: hosts: files dns myhostname Создать файл /etc/hosts очень просто; убедитесь, что он содержит как минимум два столбца. В первом столбце указан IP-адрес конкретного хоста, а во втором столбце указано имя хоста. Имя хоста может быть указано как короткое имя (например, server1) или как полное доменное имя. В полное доменное имя включается имя хоста, а также полное DNS-имя, как в server1.example.com. 163

Если у хоста более одного имени, например короткое имя и полное DNS-имя, вы можете указать их оба в /etc/hosts. В этом случае второй столбец должен содержать полное доменное имя, а третий столбец может содержать псевдоним. В примере 8-10 показан пример конфигурации имени хоста. Пример 8-10 Пример конфигурации /etc/hosts

Разрешение DNS-имени Для разрешения имен недостаточно просто использовать файл /etc/hosts, если вы хотите иметь возможность связываться с другими хостами в Интернете. Вам следует использовать DNS. Чтобы указать, какой DNS-сервер следует использовать, укажите DNS-сервер с помощью nmcli или nmtui, как обсуждалось ранее. Конфигурация NetworkManager сохраняет информацию DNS в файле конфигурации для сетевого подключения, который находится в /etc/sysconfig/networkscripts, и оттуда передает конфигурацию в файл /etc/resolv.conf, который используется для разрешение сервера имени DNS. Не редактируйте /etc/resolv.conf напрямую, так как он будет перезаписан при следующем перезапуске NetworkManager. Рекомендуется всегда настраивать как минимум два сервера DNS-имен для связи. Если первый сервер имен не отвечает, осуществляется связь со вторым сервером имен. Чтобы указать, какие серверы имен DNS вы хотите использовать, у вас есть несколько различных вариантов: ▪ ▪ ▪ ▪

Используйте nmtui для настройки серверов имен DNS. На рис. 8-5 показан интерфейс, с помощью которого вы можете это сделать. Задайте параметры DNS1 и DNS2 в файле конфигурации сетевого подключения ifcfg в /etc/sysconfig/network-scripts. Используйте DHCP-сервер, настроенный для выдачи адреса DNS-сервера. Используйте nmcli con mod [+]ipv4.dns .

Обратите внимание, что, если ваш компьютер настроен на получение конфигурации сети от DHCP-сервера, DNS-сервер также настраивается через DHCP-сервер. Если вы не хотите, чтобы это произошло, у вас есть два варианта: ■ Отредактируйте файл конфигурации ifcfg, включив параметр PEERDNS=no. ■ Используйте nmcli con mod ipv4.ignore-auto-dns yes. Чтобы проверить разрешение имени хоста, вы можете использовать команду getent hosts . Эта команда ищет как в /etc/hosts, так и в DNS, чтобы разрешить указанное имя хоста.

164

РИСУНОК 8-5. Настройка DNS-серверов из интерфейса nmtui.

СОВЕТ ДЛЯ ЭКЗАМЕНА Не указывайте DNS-серверы непосредственно в /etc/resolv.conf. Они будут перезаписаны NetworkManager при его (повторном) запуске.

Резюме В этой главе вы узнали, как настроить сеть в RHEL 8. Сначала вы прочитаете, как IPпротокол используется для соединения компьютеров, а затем вы прочитаете, какие методы используются для обеспечения доступности сервисов между хостами. Далее вы прочитаете, как проверить конфигурацию сети с помощью утилиты ip и некоторых связанных утилит. В последней части этой главы вы прочитали, как установить IP-адреса и другую конфигурацию хоста на постоянной основе, используя утилиту nmcli или nmtui.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 8-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. 165

Таблица 8-3 Ключевые темы главы 8 Элемент ключевой темы

Описание

Страница

Список

Краткие описания IPv4 и IPv6

144

Список

Адреса частной сети

145

Таблица 8-2

Обзор двоично-десятичного преобразования

146

Список

Типы IP-адресов

148

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы. Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии:

IP, IPv4, IPv6, protocol, port, subnet mask, DNS, DHCP, connection, interface, FQDN Обзорные вопросы В следующих вопросах используется открытый формат, который поможет вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. Какой сетевой адрес в адресе 213.214.215.99/29? Какая команда показывает только статус связи, а не IP-адрес? Какая служба управляет конфигурацией сети в RHEL 8? Какой файл содержит имя хоста в RHEL 8? Какая команда позволяет вам легко установить имя хоста? Какую команду нужно выполнить после изменения содержимого файлов /etc/sysconfig/ifcfg вручную? 7. Какой файл конфигурации вы можете изменить, чтобы разрешить разрешение имени хоста для определенного IP-адреса? 8. Какая команда показывает текущую конфигурацию маршрутизации? 9. Как проверить текущий статус службы NetworkManager? 10. Какая команда позволяет вам изменить текущий IP-адрес и шлюз по умолчанию в вашем сетевом соединении? 1. 2. 3. 4. 5. 6.

Лабораторная работа в конце главы Для упражнений в последующих главах этой книги рекомендуется иметь тестовую среду, в которой присутствуют как минимум два сервера. Для выполнения упражнений в этой лабораторной работе убедитесь, что у вас установлен второй сервер. 166

Лабораторная работа 8.1 1. Настройте первый сервер для использования FQDN server1.example.com. Настройте второй сервер для использования server2.example.com. 2. На server1.example.com используйте nmtui и настройте свою основную сетевую карту на автоматическое получение IP-адреса через DHCP. Также установите фиксированный IPадрес 192.168.4.210. На server2 установите фиксированный IP-адрес 192.168.4.220. 3. Убедитесь, что с server1 вы можете пинговать server2, и наоборот. 4. Чтобы предоставить вам доступ к серверам в Интернете, убедитесь, что ваш локальный DHCP-сервер предоставляет ip маршрутизатора и DNS-серверы по умолчанию.

167

Глава 9 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Управление пакетами программного обеспечения с помощью YUM Использование yum Управление Package Module Streams Управление пакетами программного обеспечения с помощью RPM

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪

Устанавливать и обновлять пакеты программного обеспечения из Red Hat Network, удаленного репозитория или из локальной файловой системы. Работа с Package Module Streams

Управление пакетами программного обеспечения - важная задача для администратора Red Hat Enterprise Linux. В этой главе вы узнаете, как управлять пакетами программного обеспечения из командной строки с помощью утилиты yum. Вы также узнаете, какую роль репозитории играют в управлении программным обеспечением с помощью YUM. Далее мы рассмотрим работу с Package Module Streams, решением, которое позволяет работать с пакетами конкретной версии, которые вам нужны в вашей среде. В последней части этой главы вы узнаете, как управлять программным обеспечением с помощью команды rpm, которая полезна для запроса новых и установленных пакетов программного обеспечения.

Управление программным обеспечением Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 9-1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 9 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Управление пакетами программного обеспечения с помощью yum Использование yum

Вопросы 1-4 5

Управление Package Module Streams

6-7

Управление пакетами программного обеспечения с помощью rpm

8 - 10

1. Что из перечисленного не является обязательным компонентом в файле .repo, который используется для указания, какие репозитории следует использовать? a. [label] b. name= 168

c. baseurl= d. gpgcheck= 2. Какой источник установки используется в RHEL, если сервер не зарегистрирован в RHN? a. b. c. d.

Используется установочный носитель. Источник установки не используется. Используется базовый репозиторий RHN, без обновлений. У вас есть полный доступ к репозиториям RHN, но программное обеспечение, которое вы используете, не поддерживается.

3. Что из следующего следует использовать в файле .repo для ссылки на репозиторий, который находится в каталоге /repo локальной файловой системы? a. b. c. d.

file=/repo baseurl=file://repo baseurl=file:///repo file=http:///repo

4. Что из следующего является верным о безопасности репозитория на основе GPG? a. Если пакеты в репозитории были подписаны, вам необходимо скопировать ключ GPG в правильное место. b. Подписание пакета GPG является обязательным. c. Подписи пакетов GPG предотвращают изменение пакетов в репозитории. d. Подписание пакетов GPG рекомендуется для интернет-репозиториев, но не требуется для локальных репозиториев, предназначенных только для внутреннего использования. 5. Какая команда позволяет искать в пакете, содержащем файл semanage? a. b. c. d.

yum search semanage yum search all semanage yum provides semanage yum whatprovides */semanage

6. Какой компонент модуля YUM позволяет работать одновременно с разными версиями? a. b. c. d.

Профиль приложения Поток приложений Версия модуля Группа RPM

7. Какая из следующих команд позволяет установить профиль разработки потока приложения PHP 7.1? a. b. c. d.

yum module install php:7.1 devel yum module install php:7.1 --devel yum module install php:7.1/devel yum module install php:7.1@devel 169

8. Какую команду следует использовать для установки файла RPM, загруженного на ваш компьютер? a. b. c. d.

yum install yum localinstall rpm -ivh rpm -Uvh

9. Какая команда позволяет найти пакет RPM, которому принадлежит конкретный файл? a. b. c. d.

rpm -ql /my/file rpm -qlf /my/file rpm -qf /my/file rom -qa /my/file

10. Какая команда позволяет проанализировать, есть ли сценарии в только что загруженном файле пакета RPM? a. b. c. d.

rpm -qs packagename.rpm rpm -qps packagename.rpm rpm -qp --scripts packagename.rpm rpm -q --scripts packagename.rpm

Основные темы Управление пакетами программного обеспечения с помощью yum Утилита по умолчанию, используемая для управления пакетами программного обеспечения в Red Hat Enterprise Linux, - это yum, что означает Yellowdog Updater Modified. Yum разработан для работы с репозиториями, которые являются онлайн-хранилищами доступных программных пакетов. В этом разделе вы узнаете, как создавать и управлять репозиториями, а также как управлять пакетами программного обеспечения на основе содержимого репозиториев. ПРИМЕЧАНИЕ Программное обеспечение в RHEL основано на программном обеспечении Fedora. В версиях Fedora, на которых основан RHEL 8, yum недавно был заменен утилитой dnf. По этой причине ожидалось, что с выпуском RHEL 8 команда yum будет заменена командой dnf. Red Hat решила иначе. В RHEL 8 была представлена новая версия yum, основанная на команде dnf. Вы заметите, что во многих случаях при запросе информации о yum вы будете перенаправлены на dnf-ресурсы. На самом деле вы используете dnf, но Red Hat решила переименовать его в yum. Даже если на самом деле вы используете команду dnf, в этой книге я следую соглашению Red Hat, и по этой причине вы узнаете, как работать с yum. Понимание роли репозиториев Программное обеспечение в Red Hat Enterprise Linux предоставляется в формате RPM (Red Hat Package Manager). Это особый формат, используемый для архивирования пакета, а также предоставления метаданных пакета. 170

Когда вы работаете с программным обеспечением в RHEL, репозитории играют ключевую роль. Работа с репозиториями упрощает поддержание вашего сервера в актуальном состоянии: сопровождающий репозитория публикует обновленные пакеты в репозитории, и в результате всякий раз, когда вы используете команду yum (обсуждается далее в этой главе) для установки программного обеспечения, самая последняя версия программного обеспечения используется автоматически. Еще одно важное преимущество работы с YUM - это способ работы с зависимостями пакетов. В Linux (как и в большинстве других современных операционных систем) программные пакеты имеют зависимости. Это означает, что для установки одного пакета должны присутствовать и другие пакеты. Без использования репозиториев это означало бы, что эти пакеты нужно устанавливать вручную. Система репозитория YUM заботится об автоматическом разрешении этих зависимостей. Если пакет будет установлен, он содержит информацию о необходимых зависимостях. Затем команда yum просматривает репозитории, настроенные в этой системе, для автоматического получения зависимостей. Если все пойдет хорошо, установщик просто увидит короткий список зависимостей, которые будут установлены в качестве зависимости для установки пакета. Если вы используете RHEL с репозиториями, которые предоставляются через Red Hat Network (RHN), нет причин, по которым эта процедура не должна работать, и попытки установить программное обеспечение обычно будут успешными. При установке RHEL 8 он просит вас зарегистрироваться на портале клиентов Red Hat, который предоставляет различные репозитории. После регистрации вы можете устанавливать пакеты программного обеспечения, которые Red Hat автоматически проверяет. Если вы решите установить RHEL без регистрации, он не сможет связаться с репозиториями Red Hat, и вы останетесь без репозиториев вообще. В этом случае вы должны сами указать, какой репозиторий вы хотите использовать. Если вы используете CentOS, вы получаете доступ к репозиториям CentOS, и регистрация не требуется. Обратите внимание, что репозитории зависят от операционной системы. Следовательно, если вы используете RHEL, вам следует использовать только репозитории RHEL. Не пытайтесь, например, добавить репозитории CentOS на сервер RHEL. Если вы хотите предоставить дополнительное программное обеспечение из проекта Fedora серверу RHEL (что по причинам поддержки не рекомендуется), вы можете рассмотреть возможность добавления репозиториев EPEL (Extra Packages for Enterprise Linux). См. Https://fedoraproject.org/wiki/EPEL для получения дополнительной информации. ПРЕДУПРЕЖДЕНИЕ Перед добавлением репозитория EPEL в RHEL убедитесь, что он не нарушает ваш текущий статус поддержки. Пакеты EPEL не управляются Red Hat, и добавление их делает перерыв в поддерживаемых пакетах Red Hat.

Регистрация Red Hat Enterprise Linux для поддержки Red Hat Enterprise Linux - это поддерживаемая операционная система Linux, для которой требуется регистрация. Чтобы зарегистрировать RHEL, вам необходимо действующее право. Это право связано с вашей учетной записью на портале для клиентов Red Had. Вы можете получить разрешение, купив подписку на RHEL или присоединившись к программе Red Hat Developer, которая дает доступ к бесплатной подписке Red Hat Enterprise Developer. Вы можете подписаться на подписку Red Hat Developer на https://developers.redhat.com. 171

После получения действующей подписки на Red Hat Enterprise Linux вы можете использовать инструменты Red Hat Subscription Management (RHSM) для управления своими правами. Управление правами включает четыре основные задачи: ▪ ▪ ▪ ▪

Регистрация: при регистрации подписки вы подключаете ее к своей текущей учетной записи Red Hat. В результате инструмент диспетчера подписок может провести инвентаризацию системы. Если система больше не используется, ее также можно отменить. Подписка: подписка дает системе доступ к обновлениям продуктов Red Hat, на которые ваша подписка имеет право. Кроме того, подписавшись, вы получите доступ к уровню поддержки, связанному с вашим аккаунтом. Включить репозитории: после подписки на систему вы получите доступ к набору репозиториев по умолчанию. Некоторые репозитории по умолчанию отключены, но могут быть включены после подписки вашей системы. Обзор и отслеживание: вы можете просматривать и отслеживать текущие используемые подписки.

Управление подписками Вы можете управлять подписками либо из графического интерфейса GNOME, либо из командной строки. Инструмент диспетчера подписок (subscription-manager) используется для управления подписками из командной строки. Вы можете использовать его следующими способами: ▪ ▪ ▪ ▪ ▪

Зарегистрируйте систему: для регистрации введите команду subscription-manager register. При этом будут запрошено имя вашей учетной записи Red Hat, а также ваш пароль, и после их ввода ваш сервер RHEL будет зарегистрирован. Список доступных подписок: каждая учетная запись имеет доступ к определенным подпискам. Введите subscription-manager list --available, чтобы узнать, на что имеет право ваша учетная запись. Автоматически прикреплять подписку: регистрации сервера недостаточно для получения доступа к репозиториям. Используйте команду subscription-manager attach -auto, чтобы автоматически прикрепить подписку к доступным репозиториям. Получите обзор: чтобы узнать, какие подписки вы используете в настоящее время, введите subscription-manager --consumed. Отмена регистрации: если вы собираетесь деинициализировать систему, используйте subscription-manager unregister. Если у вас есть доступ только к ограниченному количеству зарегистрированных систем, отмена регистрации важна, чтобы гарантировать, что у вас не закончатся доступные лицензии.

После регистрации и присоединения подписки сертификаты полномочий записываются в каталог /etc/pki. В /etc/pki/product хранятся сертификаты, указывающие, какие продукты Red Hat установлены в этой системе. В /etc/pki/consumer хранятся сертификаты, которые идентифицируют учетную запись Red Hat, под которой зарегистрирована система, а каталог /etc/pki/grantlement содержит информацию о подписках, прикрепленных к этой системе. Указание того, какой репозиторий использовать В большинстве случаев после завершения установки вашего сервера он настраивается со списком репозиториев, которые следует использовать. Иногда вам нужно указать серверу, какие репозитории следует использовать: 172

▪ ▪

Вы хотите распространять программные пакеты, отличные от стандартных, через репозитории. Вы устанавливаете Red Hat Enterprise Linux, не регистрируя его в RHN.

Указать серверу, какой репозиторий использовать, несложно, но важно знать, как это делать (в том числе и для экзамена RHCSA).

ВАЖНО! Чтобы узнать, как работать с репозиториями и программными пакетами, не используйте репозитории, которые предоставляются по умолчанию. Поэтому, если вы установили RHEL, не регистрируйтесь с помощью subscription-manager, а если вы установили CentOS, удалите все файлы из /etc/yum.repos.d.

Чтобы указать серверу, какой репозиторий использовать, вам необходимо создать файл с именем, заканчивающимся на .repo, в каталоге /etc/yum.repos.d. В этом файле вам понадобится следующее содержимое: ▪ ▪ ▪

[label] Файл .repo может содержать разные репозитории, каждый раздел начинается с label, которая идентифицирует конкретный репозиторий. name= Используйте это, чтобы указать имя репозитория, который вы хотите использовать. baseurl= Содержит URL-адрес, указывающий на конкретное расположение репозитория. В файлах репозитория, которые предоставляются по умолчанию, вы можете найти несколько репозиториев в одном файле, как в примере 9-1. Это полезно для группировки репозиториев, которые размещенны вместе в одином файле, и часто выполняется в файлах репозитория, которые предоставляются по умолчанию. Если вы создаете такие файлы самостоятельно, вы можете создавать отдельные файлы для каждого репозитория.

В примере 9-1 показан файл репозитория, основанный на репозиториях по умолчанию, установленных в CentOS 8. Пример 9-1 Пример файла репозитория [root@server1 yum.repos.d]# cat CentOS-Base.repo # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # update status of each mirror to pick mirrors that are updated to and # geographically close to the client. You should use this for CentOS updates # unless you are manually picking other mirrors. # 173

# If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead. # # [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch= $basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch= $basearch&repo=updates #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch= $basearch&repo=extras #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch= $basearch&repo=centosplus #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/ $basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 В файле конфигурации репозитория из Примера 9-1 вы можете видеть, что используются некоторые параметры. В Таблице 9-2 приведены эти варианты.

174

Таблица 9-2 Ключевые параметры в файлах .repo

Вариант

Объяснение

[label]

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

name=

Задает имя репозитория.

mirrorlist=

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

baseurl=

Ссылается на базовый URL-адрес, по которому находятся пакеты RPM.

gpgcheck= gpgkey=

Установите значение 1, если необходимо выполнить проверку целостности пакетов GNU Privacy Guard (GPG). Если установлено значение 1, требуется ключ GPG. Задает расположение ключа GPG, который используется для проверки целостности пакета.

При создании файла репозитория параметр baseurl является наиболее важным, поскольку он сообщает вашему серверу, где найти файлы, которые должны быть установлены. Baseurl принимает в качестве аргумента URL-адрес, с которого необходимо установить файлы. Часто это будет URL-адрес HTTP или FTP, но это может быть и файловый URL-адрес. При использовании URL-адреса используются два компонента. Во-первых, URL-адрес определяет используемый протокол и имеет формат protocol://, например, http://, ftp:// или file://. После URL-адреса указывается точное местоположение этого URL-адреса. Это может быть имя веб-сервера или FTP-сервера, включая подкаталог, в котором находятся файлы. Если URL-адрес основан на файле, расположение в файловой системе также начинается с /. Следовательно, для URL-адреса на основе файловой системы в базовом URL-адресе будет три слэша, например, baseurl:///repo, который относится к каталогу /repo в локальной файловой системе. Понимание безопасности репозитория Использование репозиториев позволяет прозрачно устанавливать пакеты программного обеспечения из Интернета. Это удобно, но также связано с риском безопасности. При установке пакетов RPM вы делаете это с правами суперпользователя, и, если в пакете RPM выполняется код сценария (что является обычным явлением), он также выполняется, как root. По этой причине вы хотите убедиться, что можете доверять программным пакетам, которые пытаетесь установить. Вот почему репозитории обычно используют ключи для подписи пакетов. По этой же причине в Red Hat Enterprise Linux рекомендуется использовать репозитории, предоставленные только через RHN. Чтобы защитить пакеты в репозитории, эти пакеты часто подписываются ключом GPG. Это позволяет проверить, были ли пакеты изменены с момента их предоставления владельцем репозитория. Ключ GPG, используемый для подписи пакетов программного обеспечения, обычно также доступен через репозиторий. Пользователи репозитория могут загрузить этот ключ и сохранить его локально, чтобы проверка подписи пакета могла выполняться автоматически каждый раз, когда пакет загружается из репозитория. Если безопасность репозитория скомпрометирована и злоумышленнику удастся взломать сервер репозитория и поместить на него несколько поддельных пакетов, подпись ключа GPG не 175

будет совпадать, и команда yum будет жаловаться при установке новых пакетов. Вот почему настоятельно рекомендуется использовать ключи GPG при использовании Интернетрепозиториев. Если вы используете репозиторий, в котором использовалась подпись пакетов GPG, при первом контакте с этим репозиторием команда rpm предложит загрузить ключ, который использовался для подписи пакета (см. Пример 9-2). Это прозрачная процедура, не требующая дополнительных действий. Ключи GPG, которые использовались для подписи пакетов, по умолчанию устанавливаются в каталог /etc/pki/rpm-gpg. СОВЕТ При использовании внутренних репозиториев риски безопасности не так высоки. По этой причине вам не нужно знать, как работать с пакетами, подписанными GPG, на экзамене.

Пример 9-2 При первом контакте с репозиторием загружается ключ GPG [root@server1 ~]# yum install kernel Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: centos.mirror1.spango.com * extras: mirror.netrouting.net * updates: mirrors.supportex.net Resolving Dependencies --> Running transaction check ---> Package kernel.x86_64 0:4.10.0-229.1.2.el8 will be installed --> Processing Dependency: linux-firmware >= 20190911 for package: kernel-4.10.0-229.1.2.el7.x86_64 --> Running transaction check ---> Package linux-firmware.noarch 0:20140213-0.3.git4164c23.el8 will be updated ---> Package linux-firmware.noarch 0:20140911-0.1.git365e80c.el8 will be an update --> Finished Dependency Resolution Dependencies Resolved ======================================================================= ======================================================================= Package Arch Version Repository Size ======================================================================= Installing: kernel x86_64 3.10.0-229.1.2.el8 updates 31M 176

Updating for dependencies: linux-firmware noarch 20190911-0.1.git365e80c.el8 base 17 M Transaction Summary ======================================================================= Install 1 Package Upgrade (1 Dependent package) Total size: 48 M Is this ok [y/d/N]: y Downloading packages: warning: /var/cache/yum/x86_64/8/base/packages/linux-firmware-201409110.1.git365e80c.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 Importing GPG key 0xF4A80EB5: Userid : "CentOS-8 Key (CentOS 7 Official Signing Key) " Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-8-0.1406.el7.centos.2.3.x86_64 (@anaconda) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-8 Is this ok [y/N]: y Создание собственного репозитория Создание собственного репозитория не является обязательным требованием для экзамена RHCSA, но знание того, как это сделать, полезно, если вы хотите протестировать настройку и работу с репозиториями. Кроме того, при выполнении упражнений из этой книги важно знать, как создавать собственные репозитории, поскольку вы не должны использовать репозитории, доступные в Интернете. Настройка собственного репозитория позволяет вам помещать свои собственные пакеты RPM в каталог и публиковать этот каталог как репозиторий. Также полезно знать, как это сделать, если вы установили RHEL и не подключили его к RHN, а это значит, что у вас вообще не будет никаких репозиториев. Саму процедуру описать нетрудно. Вам необходимо убедиться, что все пакеты RPM доступны в каталоге, который вы хотите использовать в качестве репозитория, и после этого вам нужно использовать команду createrepo для генерации метаданных, которые позволят вам использовать этот каталог в качестве репозитория. В упражнении 9-1 описывается, как создать собственный репозиторий. Упражнение 9-1 Создание собственного репозитория Для выполнения этого упражнения вам потребуется доступ к установочному диску RHEL или CentOS или файлу ISO.

177

1. Вставьте установочный диск в вашу виртуальную машину и убедитесь, что он подключен и доступен. 2. Для создания каталога предназначенного для точки монтирования введите команду mkdir /repo, в папке /repo вы можете смонтировать файл ISO. 3. Добавьте следующую строку в конец файла конфигурации /etc/fstab: /dev/sr0/repo iso9660 defaults 0 0 4. Введите mount -a, а затем - mount | grep sr0. Теперь вы должны увидеть, что оптическое устройство смонтировано в каталоге /repo. На этом этапе каталог /repo можно использовать в качестве репозитория. 5. На данный момент доступны два репозитория в каталоге /repo. Репозиторий BaseOS обеспечивает доступ к базовым пакетам, а репозиторий Application Stream (AppStream) предоставляет доступ к потокам приложений (эти репозитории более подробно описаны в разделе «Управление потоками модулей пакетов» далее в этой главе). Чтобы сделать их доступными, вам нужно добавить два файла в каталог /etc/yum.repos.d. Начните с создания файла BaseOS.repo и дайте ему следующее содержимое: [BaseOS] name=BaseOS baseurl=file:///repo/BaseOS gpgcheck=0 6. Затем добавьте второй файл в директории /etc/yum.repos.d с именим AppStream.repo со следующим содержимым: [AppStream] name=AppStream baseurl=file:///repo/AppStream gpgcheck=0 7. Введите yum repolist, чтобы проверить доступность вновь созданного репозитория. Вывод команды должен показывать имя репозитория myrepo, включая количество пакетов, предлагаемых через этот репозиторий (см. Пример 9-3). Обратите внимание: если вы делаете это в RHEL, вы также увидите сообщение о том, что эта система не зарегистрирована в системе управления подпиской Red Hat. Вы можете игнорировать это сообщение. Пример 9-3 Проверка доступности репозитория с помощью команды yum repolist

178

Использование yum На этом этапе у вас должны быть рабочие репозитории, поэтому пора начать их использовать. Чтобы использовать репозитории, вам понадобится команда yum. Эта команда позволяет вам выполнять несколько задач в репозиториях. В Табл. 9-3 представлен обзор типичных задач yum.

Таблица 9-3 Общие задачи yum

Задача

Объяснение

search

Найдите точное название пакета

[what]provides */name

Выполните глубокий поиск в пакете, чтобы найти определенные файлы в пакете.

info

Предоставьте дополнительную информацию о пакете

install

Установить пакет

remove

Удалить пакет

list [all | installed]

Список всех или установленных пакетов

group list

Список групп пакетов

group install

Установить все пакеты из группы

update

Указанные пакеты обновлений

clean all

Удалить все сохраненные метаданные

Использование yum для поиска пакетов программного обеспечения Чтобы установить пакеты с помощью yum, вам сначала необходимо узнать точное имя пакета. В этом вам поможет команда yum search. Когда вы используете yum search, команда сначала связывается с онлайн-репозиториями (что может занять минуту), после чего загружает самые свежие метаданные репозитория на локальный компьютер. Затем yum search ищет в названиях пакета и строку описании, которую вы искали. В примере 9-4 вы можете увидеть, как выглядит результат после использования yum search user.

Пример 9-4. Пример вывода yum search

179

Поскольку команда yum search просматривает только имя пакета и сводку, она часто не показывает то, что вам нужно. Вам часто нужно искать пакеты, содержащие определенный файл. В этом вам поможет команда yum whatprovides или yum provides. (Между этими двумя командами нет функциональной разницы.) Чтобы было ясно, что вы ищете пакеты, содержащие определенный файл, вам необходимо указать имя файла, как */filename или использовать полный путь к файлу, который вы хотите использовать. Поэтому, если вам нужно найти пакет, содержащий, например, файл semanage, используйте yum whatprovides */semanage. В результате он покажет имя пакета. Попробуйте и сравните результат с результатом команды yum search semanage; вы заметите разницу в полученном результате. Получение дополнительной информации о пакетах Перед установкой пакета рекомендуется получить дополнительную информацию о пакете. Поскольку команда yum была разработана, чтобы быть интуитивно понятной, почти можно догадаться, как это работает. Просто используйте yum info, а затем имя пакета. В примере 9-5 вы видите, как это выглядит для пакета nmap (который, кстати, очень полезный инструмент). Это сетевой сниффер, который позволяет вам находить порты, открытые на других хостах. Просто используйте nmap 192.168.4.100 (где 192.168.4.100 ip включённого хоста), чтобы попробовать, но имейте в виду, что некоторые сетевые администраторы действительно не любят nmap и могут счесть это враждебной атакой.

Пример 9-5 Пример вывода yum info nmap

180

Установка и удаление пакетов программного обеспечения Если после просмотра вывода yum info вы убедились, что пакет соответствует необходимым требованиям, следующим шагом будет его установка. Как в остальном, что вы делаете с yum, нетрудно догадаться, как это сделать: используйте yum install nmap. При таком использовании команда yum запрашивает подтверждение. Если при вводе команды yum install вы уверены в том, что делаете, вы используете параметр -y, который передает «да (yes)» на запрос подтверждения, который обычно выдает yum. Пример 9-6 показывает, как выглядит результат.

Пример 9-6 Установка программного обеспечения с помощью yum 181

В примере 9-6 вы можете видеть, что yum начинает с анализа того, что будет установлено. Как только это станет ясно, вы получаете обзор пакета, который будет установлен, включая его зависимости. Затем в систему устанавливается сам пакет. Чтобы удалить пакеты программного обеспечения с машины, используйте команду yum remove. Эта команда также выполняет анализ зависимостей, что означает, что она удалит не только выбранный пакет, но и все пакеты, которые от него зависят. Иногда это может привести к появлению длинного списка программных пакетов, которые необходимо удалить. Чтобы избежать неприятных сюрпризов, никогда не используйте yum remove с параметром -y, т.е. yum remove -y.

182

ПРИМЕЧАНИЕ. Некоторые пакеты защищены. Следовательно, вы не сможете легко их удалить. Если yum remove встречает защищенные пакеты, он отказывается их удалять.

Отображение списков пакетов При работе с yum вы также можете использовать команду yum list для отображения списков пакетов. При использовании без аргументов yum list показывает список всех доступных программных пакетов, включая репозиторий, из которого они были установлены. Вы видите имена репозиториев, перечисленные в Таблице 9-2, а также репозиторий @anaconda. Если отображается имя репозитория, пакет доступен в этом конкретном репозитории. Если указан @anaconda, пакет уже установлен в этой системе. В примере 9-7 показан частичный вывод команды yum list. Пример 9-7 Частичный вывод команды yum list

Если вы хотите узнать, какие пакеты установлены на вашем сервере, вы можете использовать команду yum list installed. Команда yum list также может оказаться полезной при использовании с именем определенного пакета в качестве аргумента. Например, введите yum list kernel, чтобы показать, какая версия ядра фактически установлена и какая версия доступна в качестве самой последней версии в репозиториях. В примере 9-8 показан результат этой команды. Пример 9-8. Использование имени пакета yum list для получения информации об установленных и доступных версиях

183

Обновление пакетов Одним из основных преимуществ работы с репозиториями yum является то, что репозитории упрощают обновление пакетов. Лицо, поддерживающее репозиторий, несет ответственность за копирование обновленных пакетов в репозитории. Индекс в репозитории всегда содержит текущую версию пакета в репозитории. На локальном компьютере также доступна база данных с текущими версиями используемых пакетов. При использовании команды yum update текущие версии установленных пакетов сравниваются с версиями этих пакетов в репозиториях. Как показано в примере 9-9, yum затем показывает обзор обновляемых пакетов. В этом обзоре введите y, чтобы подтвердить установку обновления. Обратите внимание, что при обновлении пакетов старая версия пакета заменяется более новой версией пакета. Есть одно исключение, которое касается пакета ядра. Даже если вы используете команду yum update kernel, пакет ядра не обновляется, но новое ядро устанавливается рядом со старым ядром, так что при загрузке вы можете выбрать ядро, которое хотите использовать. Это полезно, если новое ядро не работает из-за проблем совместимости оборудования. В этом случае вы можете прервать процесс загрузки GRUB 2 (подробности см. В главе 17 «Управление и понимание процедуры загрузки»), чтобы запустить старое ядро.

Пример 9-9 Использование yum update

184

Работа с группами пакетов yum При управлении определенными службами на компьютере с Linux вам часто требуется несколько разных пакетов. Если, например, вы хотите сделать свою машину хостом виртуализации, вам потребуются пакеты KVM, а также все вспомагательные пакеты, такие как qemu, libvirt и клиентские пакеты. Или при настройке вашего сервера в качестве веб-сервера вам во многих случаях также необходимо установить дополнительные пакеты, такие, как PHP. Чтобы упростить управление определенным функционалом, а не конкретными пакетами, для этого есть возможность работать с группами пакетов. Группа пакетов определяется в репозитории, yum предлагает команды управления группами для работы управления необходимым функционалом. Для обзора всех текущих групп используйте команду yum groups list. В Примере 9-10 показан результат выполнения данной команды. СОВЕТ Имя команды - yum groups, но есть и псевдонимы, которые гарантируют, что и yum group и такие команды, как yum groupinstall, также работают. Итак, вы можете использовать любую из этих команд.

Пример 9-10. Отображение доступных yum групп

185

Обратите внимание, что некоторые группы yum не указаны по умолчанию. Чтобы отобразить их, введите yum groups list hidden. Вы видите, что отображаемый список групп значительно длиннее. Разница в том, что yum groups list показывает группы среды, которые содержат базовые функции. Внутри группы среды могут использоваться разные подгруппы; они отображаются только при использовании команды yum groups list hidden. Чтобы получить информацию о пакетах, доступных в группе, вы используете команду yum groups info. Поскольку имена групп обычно содержат пробелы, не забудьте заключить полное имя группы в кавычки. Итак, введите yum groups info «Basic Web Server», чтобы увидеть, что входит в группу Basic Web Server. Как вы можете видеть в Примере 9-11, эта команда показывает обязательные и необязательные элементы в группе. Пункты могут быть группами и индивидуальными пакетами.

Пример 9-11. Отображение содержимого группы при выполнение команды yum groups info

186

Использование истории yum При работе с YUM все действия регистрируются. Вы можете использовать команду yum history, чтобы получить обзор всех выполненных действий. Из файла истории можно отменить определенные действия; используйте команду yum history undo, за которым следует номер конкретного действия, которое вы хотите отменить. В примере 9-12 вы видите результат выполнения команды yum history, где каждое действие имеет свой собственный ID. Пример 9-12. Отображение прошлых действий с yum с использованием yum history

Как видите, действие № 2 изменило девять пакетов и использовалось для установки пакетов. Чтобы полностью отменить это действие, введите yum history undo 2. В упражнении 9-2 вы примените некоторые из наиболее полезных команд yum для общих задач управления пакетами, как обсуждалось ранее. Упражнение 9-2 Использование yum для управления пакетами 187

1. Введите yum repolist, чтобы отобразить список текущих репозиториев, которые использует ваша система. 2. Введите yum search seinfo. Это не даст результата. 3. Введите yum provides */seinfo. Команда показывает, что пакет setools-console- содержит этот файл. 4. Установите этот пакет с помощью yum install -y setools-console. В зависимости от вашей текущей конфигурации вы можете заметить, что также необходимо установить довольно много зависимостей. 5. Введите yum list setools-console. Вы видите, что пакет указан как установленный. 6. Введите yum history и запишите номер последней использованной вами команды yum. 7. Введите yum history undo (где заменяется числом, которое вы нашли на шаге 6). Данная команда отменяет последнее действие и удаляет только что установленный пакет. 8. Повторите команду yum list setools-console. Теперь пакет отображается как доступный, но не установленный. Управление Package Module Streams В RHEL 8 Red Hat представила Package Module Streams. В предыдущих версиях RHEL было сложно работать с разными версиями пакетов. Например, RHEL 7 всегда предоставлял Python 2.x как версию Python по умолчанию, хотя Python 3.x уже был доступен. Использование другой версии пакетов пользовательского пространства, таких как Python, было очень трудным, так как для предложения Python 3 пришлось добавлять разные репозитории, что, в свою очередь, снова создавало проблемы для пользователей, которые предпочли бы использовать старую версию Python. В RHEL 8 могут предлагаться разные версии одного и того же пакета с помощью Package Module Streams. Кроме того, Package Module Streams позволяют обновлять критически важные приложения чаще, чем обновляется базовая операционная система. Чтобы отделить основные пакеты операционной системы от пакетов пользовательского пространства, RHEL 8 предоставляет два основных репозитория, упомянутых ранее: BaseOS и Application Stream. В BaseOS вы найдете основные пакеты операционной системы, такие, как пакеты RPM. Жизненный цикл этих пакетов сопоставим с жизненным циклом предыдущих версий RHEL. Понимание модулей В репозитории Application Stream предоставляется контент с различными жизненными циклами. Этот контент предоставляется в виде традиционных пакетов RPM, а также в виде модулей. Модуль описывает набор принадлежащих друг другу пакетов RPM. Обычно модули организованы вокруг определенной версии приложения, а в модуле вы найдете пакеты модулей вместе со всеми зависимостями для этой конкретной версии. Каждый модуль может иметь один или несколько потоков приложений. Поток содержит одну конкретную версию, и обновления предоставляются для определенного потока. При работе с модулями, имеющими разные потоки, одновременно может быть включен только один поток. Модули также могут иметь один или несколько профилей. Профиль - это список пакетов, которые устанавливаются вместе для конкретного варианта использования. Вы можете найти, например, минимальный профиль, профиль по умолчанию, профиль сервера, и многое другое. При работе с модулями вы можете выбрать, какой профиль вы хотите использовать. В Таблице 9-4 представлен обзор ключевой терминологии при работе с модулями. Таблица 9-4 Терминология модуля YUM 188

Элемент RPM Module

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

Application stream

Конкретная версия модуля.

Profile

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

Управление модулями Команда yum в RHEL 8 поддерживает работу с модулями с помощью команды yum module. Чтобы узнать, какие модули доступны, вы можете начать с команды yum module list. Вы можете увидеть его образец вывода в Примере 9-13. В списке модулей вы можете увидеть, установлен ли модуль и включен ли конкретный поток. Чтобы вывести список конкретных потоков для модуля, используйте команду yum module list modulename. Например, используйте yum module list perl, чтобы получить подробную информацию о потоках, доступных для модуля Perl, как показано в примере 9-14. После выяснения, какие потоки модулей доступны, следующим шагом будет получение информации о конкретных профилях. Вы можете использовать информацию о модуле yum для получения этой информации. Например, используйте yum module info perl, чтобы получить больше информации о модуле Perl. Это предоставит информацию для профилей, доступных во всех потоках модуля. Чтобы найти информацию о профиле для определенного потока, вы можете указать версию потока в качестве аргумента. Например, используйте yum module info perl: 5.26 (см. Пример 9-15).

Пример 9-13. Отображение модулей командой yum module list

189

190

Пример 9-14. Подробная информация о модулях YUM - yum module list

191

Пример 9-15 Отображение информации о модулях YUM командой yum module list

После нахождения информации о модуле следующим шагом будет включение stream модуля и установка модулей. У каждого модуля есть поток модулей по умолчанию, обеспечивающий доступ к определенной версии. Если эта версия - то, что вам нужно, вам не нужно ничего включать. Если вы хотите работать с другой версией, вам следует начать с включения соответствующего модуля stream. Например, введите yum module enable perl: 5.24, чтобы включить эту конкретную версию. 192

Включение потока модуля перед началом работы с конкретным модулем не является обязательным. Если вы просто используете yum module install для установки пакетов из модуля, будут установлены пакеты из stream модулей по умолчанию. Вы также можете переключаться между версиями потока приложений. Если, например, вы сейчас используете php:7.1 и хотите перейти на php:7.2, вам просто нужно ввести yum module install php:7.2. Это отключит старый поток и включит новый. После этого, чтобы убедиться, что все зависимые пакеты, которых нет в самом модуле, также обновлены, вы должны ввести yum distro-sync, чтобы завершить процедуру. В упражнении 9-3 вы можете попрактиковаться в работе с модулями Yum в RHEL 8. Упражнение 9-3 Работа с модулями 1. Введите yum module list. Вы увидите список всех доступных модулей. 2. Введите yum module provides httd. Это покажет вам, что пакет httpd является частью модуля httpd. Поскольку этот модуль имеет только один поток, мы рассмотрим модуль PHP на следующих этапах этого упражнения. 3. Введите yum module info php, чтобы получить информацию о модуле php. Это дает информацию о потоке приложения PHP по умолчанию. 4. Чтобы исследовать пакеты в потоке приложений для PHP 7.1, введите yum module info -profile 7.1. (Примечание при переводе: данная команда не сработала в CentOS Linux release 8.3.2011, использовал yum module info php –profile для просмотра всех профайлов php, и команду yum module info php:7.2 --profile, для просмотра конкретной версии.) 5. Введите yum module install php:7.1/devel. (Примечание при переводе: данная команда не сработала в CentOS Linux release 8.3.2011, использовал yum module install php:7.2/devel) Это установит PHP из потока приложения PHP 7.1 с использованием профиля разработчика. Обратите внимание, что, установив его из этого конкретного потока, вы также включите поток приложения 7.1. 6. Введите yum module install php:7.2 (Примечание при переводе: данная команда не сработала в CentOS Linux release 8.3.2011, выполнил команду yum module install php:7.3), чтобы переключиться на более новую версию модуля PHP. 7. Чтобы убедиться, что все зависимые пакеты также обновлены, введите yum distro-sync. Управление пакетами программного обеспечения с помощью rpm Когда-то репозиториев не существовало, и команда rpm использовалась для установки файлов пакетов после их загрузки. Это работало, но возникла одна серьезная проблема: ад зависимости. Поскольку пакеты RPM всегда ориентированы на конкретную функциональность, для установки определенного программного обеспечения обычно требовался набор пакетов RPM. Следовательно, часто выдавалось сообщение «отсутствует зависимость», когда пользователи пытались установить пакеты RPM, что означало, что для установки выбранного пакета сначала необходимо было установить другие пакеты. Иногда требовалось установить целую цепочку зависимостей, чтобы наконец получить желаемую функциональность. Это не доставляло радости работе с пакетами RPM. В современных системах RHEL используются репозитории, а пакеты устанавливаются с помощью yum. Команда yum рассматривает все зависимости пакетов и пытается найти их в доступных на данный момент репозиториях. В системе RHEL, настроенной для получения обновлений от RHN, или в системе CentOS, где используются согласованные репозитории, в результате установка пакета в настоящее время проходит без проблем, и команда rpm больше не требуется для установки программного обеспечения. 193

Даже после загрузки файла пакета RPM вам больше не нужно использовать команду rpm -Uvh packagename для его установки (даже если она все еще работает). Гораздо лучшей альтернативой является yum install packagename, которая устанавливает пакет, а также рассматривает репозитории для автоматического разрешения зависимостей. (В более ранних версиях RHEL для этого использовалась команда yum localinstall; в RHEL 8 yum localinstall не рекомендуется.) Это не означает, что команда rpm стала полностью бесполезной. Вы по-прежнему можете использовать его для запроса пакетов RPM. СОВЕТ В вашей системе поддерживаются две базы данных пакетов: база данных YUM и база данных RPM. Когда вы устанавливаете пакеты с помощью yum, сначала обновляется база данных YUM, после чего обновленная информация синхронизируется с базой данных RPM. Если вы устанавливаете пакеты с помощью команды rpm, обновление записывается только в базу данных RPM и не будет обновляться в базе данных YUM, что является важной причиной не использовать команду rpm больше для установки пакетов программного обеспечения.

Общие сведения об именах файлов RPM При непосредственной работе с пакетами RPM имеет смысл понять, как составляется имя файла RPM. Типичное имя файла RPM выглядит, как autofs-5.0.7-40.el7.x86_64.rpm. Это имя состоит из нескольких частей:

▪ ▪ ▪ ▪ ▪

autofs: фактическое имя пакета. 5.0.7: версия пакета. Обычно это соответствует названию пакета, выпущенному создателем пакета. -40: Сабверсия пакета. el7: версия Red Hat, для которой был создан этот пакет. x86_64: платформа (32 или 64 бита), для которой был создан этот пакет.

Запрос базы данных RPM Команда rpm позволяет получить много информации о пакетах. Использование запросов RPM может быть действительно полезным способом узнать, как можно настроить и использовать программное обеспечение. Для начала вы можете использовать команду rpm -qa. Как и yum list installed, это показывает список всего программного обеспечения, установленного на машине. Используйте grep для этой команды, чтобы узнать конкретные имена пакетов. Для выполнения запросов к пакетам RPM вам просто нужно имя, а не информация о версии. Найдя пакет, о котором вы хотите получить дополнительную информацию, вы можете начать с некоторых общих запросов, чтобы узнать, что находится в пакете. В следующих примерах я предполагаю, что вы используете запросы RPM в пакете nmap RPM. Для начала введите rpm qi nmap, чтобы получить описание пакета. Команда выполнит запрос пакета, который уже установлен в вашей системе, и запросит базу данных пакетов, чтобы получить более подробную информацию о нем.

194

Следующим шагом является использование rpm -ql nmap, который показывает список всех файлов в пакете. В некоторых пакетах результатом может быть действительно длинный список имен файлов, который не особенно полезен. Чтобы получить более конкретную информацию, используйте rpm -qd nmap, который показывает всю документацию, доступную для пакета, или rpm -qc nmap, который показывает все файлы конфигурации в пакете. Использование запросов RPM действительно может помочь в поиске более полезной информации о пакетах. Единственное, что вам нужно знать, это имя пакета RPM, которому принадлежит конкретный файл. Чтобы найти это, используйте rpm -qf, за которым следует конкретное имя файла, которое вы ищете. Используйте, например, rpm -qf /bin/ls, чтобы найти имя пакета RPM, из которого поступает команда ls. В следующем упражнении 9-4 вы увидите, насколько полезным может быть использование запросов RPM таким образом. Запрос файлов пакета RPM Запросы RPM по умолчанию осуществляется к базе данных RPM, а то, что вы запрашиваете, - это установленные пакеты RPM. Иногда имеет смысл запросить файл пакета RPM перед его установкой. Для этого вам нужно добавить к запросу опцию -p, потому что без опции -p вы будете запрашивать базу данных, а не файл пакета. Кроме того, при запросе файла пакета вам необходимо указать полное имя файла, включая номер версии и всю другую информацию, которую вы не должны использовать при запросе базы данных RPM. Например, команда rpm -qp --scripts httpd-2.4.6-19.el7.centos.x86_64.rpm запрашивает конкретный файл RPM, чтобы узнать, содержит ли он сценарии. Особого внимания заслуживает параметр запроса --scripts, который запрашивает пакет RPM или файл пакета, чтобы узнать, какие сценарии он содержит (если есть). Этот параметр особенно важен в сочетании с параметром -p, чтобы узнать, содержит ли файл пакета, который вы собираетесь установить, какие-либо сценарии. Когда вы устанавливаете пакеты RPM, вы делаете это, как root. Перед установкой RPMпакета из неизвестного источника необходимо убедиться, что он не включает никаких мошеннических скриптов. В противном случае вы рискуете установить вредоносное ПО на свой компьютер, даже не подозревая об этом. В Табл. 9-5 описаны наиболее важные параметры запросов RPM.

Таблица 9-5 Общие команды запроса RPM Команда rpm -qf rpm -ql rpm -qi rpm -qd rpm -qc

Использование Использует имя файла в качестве аргумента, чтобы найти конкретный пакет RPM файл принадлежит. Использует базу данных RPM для предоставления списка файлов в пакете RPM. Использует базу данных RPM для предоставления информации о пакете (эквивалентно yum info). Использует базу данных RPM для отображения всей документации, доступной в пакете. Использует базу данных RPM для отображения всех файлов конфигурации, доступных в пакете.

195

rpm -q --scripts

rpm -qp < pkg > rpm -qR rpm -V rpm -Va rpm -qa

Использует базу данных RPM для отображения сценариев, используемых в пакете. Это особенно полезно в сочетании с опцией -p. Параметр -p используется со всеми ранее перечисленными параметрами для запроса отдельных файлов пакетов RPM вместо базы данных пакетов RPM. Использование этой опции перед установкой поможет вам узнать, что на самом деле находится в пакете, прежде чем он будет установлен. Показывает зависимости для конкретного пакета. Показывает, какие части определенного пакета были изменены с момента установки. Проверяет все установленные пакеты и показывает, какие части пакета были изменены с момента установки. Это простой и удобный способ проверки целостности пакета. Список всех пакетов, установленных на этом сервере.

Использование команды repoquery Хотя rpm -qp предоставляет полезные инструменты для запроса пакетов перед установкой, с этой командой есть небольшая проблема: она работает только с файлами пакетов RPM и не может запрашивать файлы непосредственно из репозиториев. Если вы хотите запрашивать пакеты из репозиториев до их установки, вам потребуется команда repoquery. Этот двоичный файл не устанавливается по умолчанию, поэтому обязательно установите RPM-пакет yum-utils, чтобы использовать его. Команда repoquery очень похожа на команду rpm -q и использует множество аналогичных параметров. Отсутствует только одна важная опция: --script. Простое решение - убедиться, что вы используете только доверенные репозитории, чтобы предотвратить установку программного обеспечения, содержащего опасный код сценария. Если вам нужно тщательно проанализировать, что делает пакет RPM при его установке, вы можете загрузить его на свой компьютер, что позволит вам использовать команду rpm -qp --scripts для пакета. Чтобы загрузить пакет из репозитория в локальный каталог, вы можете использовать команду yumdownloader, которая поступает из пакета yum-utils. Теперь, когда вы узнали все о параметрах запросов RPM, вы можете попрактиковать эти недавно приобретенные навыки в упражнении 9-4, чтобы получить больше информации о программном обеспечении, установленном в вашей системе RHEL. Упражнение 9-4 Использование запросов RPM 1. Введите which dnsmasq. Эта команда дает полный путь к команде dnsmasq. 2. Введите rpm -qf $ (which dnsmasq). Это сделает запрос файла RPM по результату команды which dnsmasq; вы узнаете больше об этой технике в главе 19 «Введение в сценарии оболочки Bash». 3. Теперь, когда вы знаете, что двоичный файл dnsmasq поступает из пакета dnsmasq, используйте команду rpm -qi dnsmasq, чтобы отобразить дополнительную информацию о пакете. 4. Информация, отображаемая с помощью rpm -qi, полезна, но не дает подробностей, необходимых для начала работы с программным обеспечением в пакете. Используйте команду rpm -ql dnsmasq, чтобы отобразить список всех файлов в пакете. 5. Используйте команду rpm -qd dnsmasq, чтобы просмотреть доступную документацию. Обратите внимание, что эта команда показывает, что существует страница руководства, но 196

есть также файл doc.html и файл setup.html в каталоге /usr/share/doc/dnsmasq-version. Откройте эти файлы в своем браузере, чтобы получить дополнительную информацию об использовании dnsmasq. 6. Введите rpm -qc dnsmasq, чтобы увидеть, какие файлы конфигурации используются dnsmasq. 7. После установки это не имеет особого смысла, но всегда полезно знать, какие сценарии выполняются при установке пакета. Используйте rpm -q --scripts dnsmasq, чтобы показать код сценария, который может быть выполнен из этого RPM. СОВЕТ Работа с запросами RPM - чрезвычайно ценный навык на экзамене RHCSA. Если вы знаете, как обрабатывать запросы, вы можете найти все соответствующие файлы конфигурации и документацию.

Резюме В этой главе вы узнали, как работать с программным обеспечением в Red Hat Enterprise Linux. Вы узнали, как использовать yum для управления пакетами программного обеспечения, поступающими из репозиториев. Вы также узнали, как использовать команду rpm для выполнения запросов к пакетам в вашей системе. Убедитесь, что вы хорошо владеете этими необходимыми навыками; они являются ключом к выполнению задач в Red Hat Enterprise Linux.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 9-6 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 9-6 Ключевые темы главы 9 Элемент ключевой темы

Описание

Страница

Абзац

Описание как создать репозиторий

173

Таблица 9-3

Общие задачи yum

179

Список

Компоненты имени пакета RPM

194

Таблица 9-5

Общие команды запросов RPM

195

197

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: YUM, repository, dependency, package, Red Hat Network (RHN), package groups, dependency hell, RPM, module, application stream, application profile

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. У вас есть каталог, содержащий коллекцию пакетов RPM, и вы хотите сделать этот каталог репозиторием. Какая команда позволяет вам это сделать? 2. Что должно быть в файле репозитория, чтобы указывать на репозиторий на http://server.example.com/repo? 3. Вы только что настроили новый репозиторий для использования на вашем компьютере RHEL. Какая команда позволяет вам проверить, действительно ли репозиторий доступен? 4. Какая команда позволяет выполнять поиск в RPM-пакете, содержащем файл useradd? 5. Какие две команды вам нужно использовать, чтобы показать имя группы yum, которая содержит инструменты безопасности, и показать, что находится в этой группе? 6. Какую команду вы используете, чтобы гарантировать, что все связанные с PHP пакеты будут установлены с использованием более старой версии 5.1, фактически еще ничего не устанавливая? 7. Вы хотите убедиться, что загруженный вами RPM-пакет не содержит опасного кода сценария. Какая команда позволяет вам это сделать? 8. Какая команда открывает всю документацию в пакете RPM? 9. Какая команда показывает пакет RPM, из которого взят файл? 10. Какая команда позволяет запрашивать программное обеспечение из репозитория?

Лабораторные работы в конце главы В этих лабораторных занятиях в конце главы вы воспользуетесь некоторыми из основных навыков управления пакетами RHEL. Все задания можно делать на одном сервере. Лабораторная работа 9.1 1. Скопируйте некоторые файлы RPM с установочного диска в каталог /myrepo. Сделайте этот каталог репозиторием и убедитесь, что ваш сервер использует этот репозиторий. 2. Перечислите репозитории, которые в настоящее время используются на вашем сервере. 198

3. Найдите пакет, который содержит сервер имен DNS только для кэша. Не устанавливайте пока. 4. Выполните подробный запрос пакета, чтобы перед установкой вы знали, какие файлы он содержит, какие у него зависимости и где найти документацию и конфигурацию. 5. Проверьте, содержит ли пакет RPM скрипты. Вы можете скачать его, но пока не можете установить; вы хотите знать, какие сценарии находятся в пакете, прежде чем его устанавливать, верно? 6. Установите пакет, который вы нашли на шаге 3. 7. Отмените установку. Лабораторная работа 9.2 1. Узнайте, какие потоки приложений доступны для модуля Perl. 2. Установите Perl из последней потоковой версии приложения, используя минимальный вариант установки. 3. Перейти на более раннюю версию, чтобы с этого момента использовалась предыдущая версия приложения Perl. 4. Убедитесь, что все зависимые пакеты в вашей системе также переведены на более раннюю версию.

199

Глава 10 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪ ▪

Введение в управление процессами Управление заданиями Shell Использование общих инструментов командной строки для управления процессами Использование top для управления процессами Использование настройки для оптимизации производительности

В этой главе рассматриваются следующие цели экзамена RHCSA: ▪ ▪

Выявление процессов, интенсивно использующих ЦП/память, и завершение процессов Настроить планирование процессов

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

Управление процессами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 10 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 9 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Введение в управление процессами

Вопросы 1

Управление заданиями Shell Использование общих инструментов командной строки для управления процессами Использование top для управления процессами Использование настройки для оптимизации производительности 1. Что из следующего обычно не считается типом процесса? (Выберите два.) a. A shell job 200

2-3 4-8 9 10

b. A cron job c. A daemon d. A thread

2. Что из перечисленного можно использовать для перемещения задания в фоновый режим? a. b. c. d.

Нажмите & Нажмите Ctrl-Z, а затем введите bg. Нажмите Ctrl-D и затем введите bg. Нажмите Ctrl-Z, а затем &

3. Какая комбинация клавиш позволяет отменить текущее задание интерактивной оболочки? a. b. c. d.

Ctrl-C Ctrl-D Ctrl-Z Ctrl-Break

4. Какие из следующих утверждений о потоках верны? (Выберите два.) a. b. c. d.

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

5. Какая из следующих команд наиболее подходит, если вам нужна подробная информация о команде и о том, как она была запущена? a. b. c. d.

ps ef ps aux ps ps fax

6. Из следующих nice значений, которое повысит приоритет выбранного процесса? a. b. c. d.

100 20 -19 -100

7. Что из следующего показывает правильный синтаксис для изменения приоритета для текущего процесса с PID 1234? a. b. c. d.

nice -n 5 1234 renice 5 1234 renice 5 -p 1234 nice 5 -p 1234

201

8. Какие из следующих команд нельзя использовать для отправки сигналов процессам? a. b. c. d.

kill mkill pkill killallх

9. Какую из следующих команд вы бы использовали сверху, чтобы изменить приоритет процесса? a. b. c. d.

r n c k

10. Какая из следующих команд установит текущий профиль производительности на энергосбережение? a. b. c. d.

tuneadm profile set powersave tuned-adm profile powersave tuneadm profile --set powersave tuned-adm profile --set powersave

Основные темы Введение в управление процессами

Для всего, что происходит на сервере Linux, запускается процесс. По этой причине управление процессами является одним из ключевых навыков, которым должен овладеть администратор. Чтобы сделать это эффективно, важно знать, с каким типом процесса вы имеете дело. Можно выделить три основных типа процессов: ▪

▪ ▪

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

Когда процесс запущен, он может использовать несколько потоков. Поток - это задача, запускаемая процессом, которую может обслуживать выделенный ЦП. Оболочка Linux не предлагает инструментов для управления отдельными потоками. Об управлении потоками следует позаботиться изнутри команды.

202

Для эффективного управления процессом крайне важно знать, с каким типом процесса вы имеете дело. Задания оболочки требуют иного подхода, чем процессы, которые автоматически запускаются при загрузке компьютера. Управление заданиями Shell Когда пользователь вводит команду, запускается задание оболочки Shell. Если никаких конкретных мер не было предпринято, задание запускается как процесс переднего плана, занимая терминал, с которого оно ыло запущено, до тех пор, пока не завершит свою работу. Как администратор Linux, вам необходимо знать, как запускать задания оболочки на переднем плане или в фоновом режиме и что вы можете делать для управления заданиями оболочки. Выполнение заданий на переднем и заднем плане По умолчанию любая выполняемая команда запускается, как приоритетное задание. Это означает, что вы не можете ничего делать на терминале, с которого была запущена команда, пока она не будет выполнена. Для многих команд это не имеет большого значения, потому что для выполнения команды часто требуется некоторое время, после чего она возвращает доступ к оболочке, из которой она была запущена. Иногда может оказаться полезным запускать команды в фоновом режиме. Это имеет смысл для процессов, которые не требуют взаимодействия с пользователем и требуют значительного времени для завершения. Процесс, который требует взаимодействия с пользователем, не сможет получить это при работе в фоновом режиме, и по этой причине обычно останавливается при перемещении в фоновый режим. Вы можете использовать два разных подхода для запуска процесса в фоновом режиме. Если вы знаете, что выполнение задания займет много времени, вы можете начать его с символа &. Это немедленно запускает работу в фоновом режиме, чтобы освободить место для других задач, которые можно запустить из командной строки. Чтобы переместить последнее задание, которое было запущено в фоновом режиме, обратно как задание переднего плана, используйте команду fg. Эта команда немедленно и без дополнительных вопросов возвращает последнее задание на передний план. Если несколько заданий в настоящее время выполняются в фоновом режиме, вы можете переместить объект обратно на передний план, добавив его идентификатор задания, как показано командой jobs. Иногда может начаться работа, которая занимает (намного) больше времени, чем предполагалось. Если это произойдет, вы можете использовать сочетание клавишь Ctrl-Z, чтобы временно остановить задание. Данное действие не удаляет задание из памяти; оно просто приостанавливает работу, чтобы ею можно было управлять. После паузы вы можете продолжить его, как фоновое задание с помощью команды bg. Альтернативная последовательность клавиш, которую вы можете использовать для управления заданиями оболочки, - это Ctrl-C. Она останавливает текущее задание и удаляет его из памяти. Связанная комбинация клавиш - Ctrl-D, которая отправляет символ конца файла (EOF) в текущее задание. В результате задание перестает ждать дальнейшего ввода и может завершить то, что в настоящее время делает. Результат нажатия Ctrl-D иногда похож на результат нажатия CtrlC, но есть разница. Когда используется Ctrl-C, задание просто отменяется, и ничего не закрывается должным образом. При использовании Ctrl-D задание перестает ждать дальнейшего ввода и затем завершается, что часто бывает именно тем, что необходимо для правильного завершения. Управление заданиями Shell 203

При перемещении заданий между передним планом и фоном может быть полезно, иметь обзор всех текущих заданий. Чтобы получить такой обзор, используйте команду jobs. Как вы можете видеть в Таблице 10-2, эта команда дает обзор всех заданий, выполняемых в настоящее время, как фоновое задание, включая номер задания, назначенный заданию при запуске в фоновом режиме. Эти номера заданий можно использовать в качестве аргумента команд fg и bg для выполнения задач управления заданиями. В упражнении 10-1 вы узнаете, как выполнять стандартные задачи управления заданиями из оболочки.

Таблица 10-2 Обзор управления заданиями Команда

Использование

& (используется в Немедленно запускает команду в фоновом режиме. конце командная строка) Ctrl-Z Временно останавливает задание, чтобы им можно было управлять. Например, его можно переместить на задний план. Ctrl-D Посылает текущему заданию символ конца файла (EOF), чтобы указать, что ему следует прекратить ожидание дальнейшего ввода. Ctrl-C Может использоваться для отмены текущего интерактивного задания. bg Продолжает работу, которая была только что заморожена, используя CtrlZ в фоновом режиме. fg Возвращает на передний план последнее задание, которое было переведено в фоновый режим. jobs Показывает, какие задания в данный момент выполняются из этой оболочки. Отображает номера заданий, которые можно использовать в качестве аргумента для команд bg и fg. Упражнение 10-1 Управление заданиями 1. Откройте shell как root и введите следующие команды: sleep 3600 & dd if=/dev/zero of=/dev/null & sleep 7200 2. Поскольку вы запустили последнюю команду без & после команды, вам нужно подождать 2 часа, прежде чем вы снова получите управление оболочкой. Нажмите Ctrl-Z, чтобы остановить команду. 3. Введите jobs. Вы увидите три задания, которые только что начали. Первые два из них находятся в состоянии "Выполняется", а последнее задание в настоящее время находится в состоянии "Остановлено". 4. Введите bg 3, чтобы продолжить выполнение задания 3 в фоновом режиме. Обратите внимание: поскольку оно было запущено как последнее задание, вам не нужно было добавлять число 3. 5. Наберите fg 1, чтобы переместить задание 1 на передний план. 204

6. Нажмите Ctrl-C, чтобы отменить задание номер 1, и введите задания, чтобы подтвердить, что оно больше не выполнено. 7. Используйте тот же подход для отмены заданий 2 и 3. 8. Откройте второй терминал на своем сервере. 9. На втором терминале введите dd if =/dev/zeroof=/dev/null &. 10. Введите exit, чтобы закрыть второй терминал. 11. В другом терминале выполните команду top. Вы увидите, что задание dd все еще выполняется. Из команды top используйте k, чтобы убить (kill) задание dd. ПРИМЕЧАНИЕ В этом разделе вы узнали, как управлять интерактивными заданиями оболочки. Обратите внимание, что все эти задания также являются процессами. Как пользователь, запустивший задание, вы также можете управлять им. В следующем разделе вы узнаете, как использовать управление процессами для управления заданиями, запущенными другими пользователями.

Управление отношениями между Parent-Child Когда процесс запускается из оболочки, он становится дочерним процессом этой оболочки. В управлении процессами очень важны отношения родитель-потомок между процессами. Родитель нужен для управления потомком. По этой причине все процессы, запущенные из оболочки, завершаются при остановке этой оболочки. Это также предлагает простой способ завершить процессы, которые больше не нужны. Процессы, запущенные в фоновом режиме, не будут уничтожены, когда будет уничтожена родительская оболочка, из которой они были запущены. Чтобы завершить эти процессы, вам нужно использовать команду kill, как описано далее в этой главе. ПРИМЕЧАНИЕ. В более ранних версиях оболочки Bash фоновые процессы также прекращались при завершении работы оболочки, из которой они были запущены. Чтобы предотвратить это, процесс можно запустить с помощью команды nohup перед ним. Использование nohup для этой цели больше не требуется в RHEL 8. Если родительский процесс убит, а дочерний процесс все еще активен, дочерний процесс вместо этого становится потомком systemd.

Использование общих инструментов командной строки для управления процессами На сервере Linux обычно выполняется множество процессов. На среднем сервере или настольном компьютере часто бывает более 100 активных процессов. При таком большом количестве активных процессов все может пойти не так. Если это произойдет, полезно знать, как можно остановить неинтерактивные процессы или как можно отрегулировать приоритет этих процессов, чтобы сделать больше системных ресурсов доступными для других процессов. Понимание процессов и потоков В Linux задачи обычно запускаются, как процессы. Один процесс может запускать несколько рабочих потоков. Работа с потоками имеет смысл, потому что, если процесс очень 205

загружен, потоки могут обрабатываться разными ЦП или ядрами ЦП, доступными в машине. Как администратор Linux вы не можете управлять отдельными потоками; однако вы можете управлять процессами. Именно программист многопоточного приложения должен определять, как потоки связаны друг с другом. Прежде чем говорить о различных способах управления процессами, полезно знать, что существует два разных типа фоновых процессов: потоки ядра и процессы-демоны. Потоки ядра являются частью ядра Linux, и каждый из них запускается со своим собственным идентификационным номером процесса (PID). При управлении процессами легко распознать процессы ядра, потому что их имя заключено в квадратные скобки. В примере 10-1 показан список нескольких процессов как результат выполнения команды ps aux | head (обсуждается далее в этой главе), в которой вы можете увидеть пару потоков ядра. Как администратору важно знать, что потоками ядра нельзя управлять. Вы не можете изменить их приоритет; их невозможно убить, кроме как вывести из строя всю машину. Пример 10-1 Отображение потоков ядра с помощью ps aux

Использование ps для получения информации о процессе Самая распространенная команда для просмотра запущенных в данный момент процессов - это ps. При использовании без аргументов команда ps показывает только те процессы, которые были запущены текущим пользователем. Вы можете использовать множество различных опций для отображения различных свойств процесса. Если вам нужно краткое описание активных процессов, используйте ps aux (как вы видели в примере 10-1). Если вы ищете не только имя процесса, но и точную команду, которая использовалась для запуска процесса, используйте ps -ef (см. Пример 10-2). Также существуют альтернативные способы использования ps, такие как команда ps fax, которая показывает иерархические отношения между родительскими и дочерними процессами (см. Пример 10-3). Пример 10-2. Использование ps -ef для просмотра точной команды, используемой для запуска процессов

206

ПРИМЕЧАНИЕ. Для многих команд параметры должны начинаться с дефиса. Для некоторых команд это не так, и использование дефиса необязательно. Команда ps является одной из таких команд по историческим причинам. В старые времена UNIX было два основных варианта: вариант System V, в котором использование дефисов перед параметрами было обязательным, и вариант BSD, в котором использование дефисов было необязательным. Команда ps основана на обоих вариантах, и по этой причине некоторые параметры не должны начинаться с дефиса.

Пример 10-3. Использование ps fax для отображения Parent-Child отношений между процессами

207

Важной частью информации, которую нужно получить из команды ps, является PID. Для работы многих задач требуется PID, поэтому такая команда, как ps aux | grep dd, который покажет детали процесса о dd, включая его PID, довольно распространен. Альтернативный способ получить тот же результат - использовать команду pgrep. Используйте pgrep dd, чтобы получить список всех PID, имя которых содержит строку «dd». Настройка приоритета процесса с помощью nice Когда процессы Linux запускаются, они запускаются с определенным приоритетом. По умолчанию все обычные процессы равны и запускаются с одинаковым приоритетом, который равен 20, как показывают такие утилиты, как top. В некоторых случаях полезно изменить приоритет по умолчанию, который был назначен процессу при его запуске. Вы можете сделать это 208

с помощью команд nice и renice. Используйте nice, если хотите запустить процесс с измененным приоритетом. Используйте renice, чтобы изменить приоритет текущего активного процесса. В качестве альтернативы вы можете использовать команду r из верхней утилиты, чтобы изменить приоритет текущего запущенного процесса. Изменение приоритета процесса может иметь смысл в двух разных сценариях. Предположим, например, что вы собираетесь запустить задание резервного копирования, которое не обязательно должно заканчиваться быстро. Как правило, задания резервного копирования являются довольно ресурсоемкими, поэтому вы можете захотеть запустить задание резервного копирования так, чтобы не слишком раздражать других пользователей, снизив его приоритет. Другой пример: вы собираетесь начать очень важную расчетную работу. Чтобы гарантировать, что он обрабатывается как можно быстрее, вы можете придать ему повышенный приоритет, отнимая процессорное время у других процессов. В более ранних версиях Linux было опасно слишком сильно повышать приоритет одного задания из-за риска того, что другие процессы (включая жизненно важные процессы ядра) могут быть полностью заблокированы. В текущих ядрах Linux этот риск сведен к минимуму по следующим причинам: ▪



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

При использовании nice или renice для настройки приоритета процесса вы можете выбрать значения в диапазоне от –20 до 19. По умолчанию для процесса «правильность (niceness)» установлено значение 0 (что приводит к значению приоритета 20). Применяя отрицательную niceness, вы увеличиваете приоритет. Используйте положительную niceness, чтобы уменьшить приоритет. Рекомендуется не использовать сразу конечные значения. Вместо этого используйте приращение 5 и посмотрите, как это повлияет на приложение. СОВЕТ Не устанавливайте приоритет процесса на –20; он рискует заблокировать обслуживание других процессов.

Давайте посмотрим на примеры использования nice и renice. Команда nice -n 5 dd if=/dev/zero of=/dev/null & starts запускает бесконечную работу с интенсивным вводом-выводом, но с настроенной аккуратностью (niceness), так что остается место и для других процессов. Чтобы настроить niceness выполняемого в данный момент процесса, вам потребуется PID этого процесса. Следующие две команды показывают, как ps aux используется для нахождения PID задания dd из предыдущего примера. Затем вы увидите, как команда renice используется для изменения niceness этой команды: 1. Используйте ps aux | grep dd, чтобы найти PID только что запущенной команды dd. PID находится во втором столбце вывода команды. 209

2. Используйте renice -n 10 -p 1234 (предполагая, что 1234 - это только, что найденный вами PID). Обратите внимание, что обычные пользователи могут только уменьшить приоритет запущенного процесса. Вы должны быть root, чтобы дать процессам повышенный приоритет. Отправка сигналов процессам с помощью kill, killall и pkill Прежде чем начать думать об использовании команды kill или об отправке других сигналов процессам, полезно знать, что процессы Linux имеют иерархические отношения. У каждого процесса есть родительский процесс, и пока он существует, родительский процесс отвечает за созданные им дочерние процессы. В более старых версиях Linux убийство родительского процесса также привело бы к уничтожению всех его дочерних процессов. В RHEL 8, если вы убиваете родительский процесс, все его дочерние процессы становятся дочерними по отношению к процессу systemd. Ядро Linux позволяет отправлять много сигналов процессам. Используйте man 7 signals для полного обзора всех доступных сигналов. Три из этих сигналов работают для всех процессов:

▪ ▪ ▪

Сигнал SIGTERM (15) используется для запроса остановки процесса. Сигнал SIGKILL (9) используется для принудительной остановки процесса. Сигнал SIGHUP (1) используется для завершения процесса. В результате процесс перечитает свои файлы конфигурации, что делает этот сигнал полезным для использования после внесения изменений в файл конфигурации процесса.

Чтобы отправить сигнал процессу, вы используете команду kill. Чаще всего используется необходимость остановить процесс, что можно сделать с помощью команды kill, за которой следует PID процесса. Это посылает процессу сигнал SIGTERM, который обычно заставляет процесс прекращать свою деятельность и закрывать все открытые файлы. Иногда команда kill не работает, потому что процесс, который вы хотите убить, может ее игнорировать. В этом случае вы можете использовать kill -9, чтобы послать процессу сигнал SIGKILL. Поскольку сигнал SIGKILL нельзя игнорировать, он заставляет процесс останавливаться, но вы также рискуете потерять данные при использовании этой команды. В общем, использовать kill -9 - плохая идея: ▪ ▪

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

СОВЕТ Используйте kill -l, чтобы показать список доступных сигналов, которые можно использовать с командой kill.

Есть несколько команд, связанных с kill: killall и pkill. Команду pkill немного проще использовать, потому что она принимает в качестве аргумента имя, а не PID процесса. Вы можете 210

использовать команду killall, если необходимо одновременно убить несколько процессов, использующих одно и то же имя. Использование killall было особенно распространено, когда среды Linux были многопроцессорными, а не многопоточными. В многопроцессорной среде, где сервер запускает несколько команд, все с одним и тем же именем, непросто остановить эти команды одну за другой на основе их индивидуального PID. Использование killall позволяет вам завершить все эти процессы одновременно. В многопоточной среде желание использовать killall меньше. Поскольку часто есть только один процесс, который генерирует несколько потоков, все эти потоки в любом случае завершаются путем остановки процесса, который их запустил. Однако вы все равно можете использовать killall для завершения множества процессов с тем же именем, которые были запущены на вашем сервере. В упражнении 10-2 вы попрактикуетесь в использовании утилит ps, nice, kill и связанных с ними для управления процессами. Упражнение 10-2 Управление процессами из командной строки 1. Запустите шел от пользователя root. В этой оболочке введите dd if=/dev/zero of=/dev/null &. Повторите эту команду три раза. 2. Введите ps aux | grep dd. Вывод команды показывает все строки, в которых есть буквы dd; вы увидите больше, чем просто процессы dd, но это не имеет особого значения. Только что запущенные процессы отображаются последними. 3. Используйте PID одного из процессов dd, чтобы настроить niceness, используя renice -n 5 . Обратите внимание, что используя команду top вы не можете легко получить обзор процессов и их текущего приоритета. 4. Введите ps fax | grep -B5 dd. Параметр -B5 показывает совпадающие строки, включая пять строк до этого. Поскольку ps fax показывает иерархические отношения между процессами, вы также должны найти оболочку и ее PID, из которой были запущены все процессы dd. 5. Найдите PID shell, из которой были запущены процессы dd, и введите kill -9 , заменив на PID только что найденного shell. Поскольку процессы dd были запущены, как фоновые процессы, они не уничтожаются при уничтожении их родительской оболочки. Вместо этого они были перемещены вверх и теперь являются дочерними по отношению к процессу systemd. Использование top для управления процессами Удобный инструмент для управления процессами – команда top. Для общих задач управления процессами отлично подходит top, потому что дает обзор наиболее активных в настоящее время процессов (отсюда и название top). Это позволяет легко находить процессы, которые могут потребовать внимания. Используя top вы также можете выполнять стандартные задачи управления процессами, такие как настройка текущего приоритета процесса и уничтожение процессов. На рис. 10-1 показан интерфейс, который появляется при запуске top.

РИСУНОК 10-1 Использование top упрощает управление процессами

211

Среди информации, которую вы можете легко получить используя утилиту top, есть состояние процесса. В Таблице 10-3 представлен обзор различных состояний процесса, которые вы можете наблюдать.

Таблица 10-3 Обзор состояний процессов Linux Состояние

Значение

Running (R)

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

Sleeping (S)

Процесс ожидает завершения события.

Uninterruptable sleep (D)

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

Stopped (T)

Zombie (Z)

Теперь, когда вы знаете, как использовать команды kill и nice из командной строки, использовать те же функции top стало еще проще. Выполняя команду top введите k; top затем запрашивает PID процесса, которому вы хотите отправить сигнал. По умолчанию выбирается самый активный процесс. После того, как вы введете PID, top спросит, какой сигнал вы хотите отправить. По умолчанию используется сигнал 15 для SIGTERM. Однако если вы хотите немного

212

настоять на своем, вы можете ввести 9 для выполнения SIGKILL. Теперь нажмите Enter, чтобы завершить процесс. Чтобы выполнить renice с запущенным процессом в top, введите r. Сначала вам будет предложено ввести PID процесса, которомы вы хотите поменять приоритет выполнения. После ввода PID вам будет предложено ввести значение nice, которое вы хотите использовать. Введите положительное значение, чтобы уменьшить приоритет процесса, или отрицательное значение, чтобы увеличить приоритет процесса. Еще один важный параметр, который вы можете получить используя команду top, - это средняя нагрузка. Средняя загрузка выражается как количество процессов, находящихся в рабочем состоянии (R) или в состоянии блокировки (D). Процессы находятся в рабочем состоянии, если они в данный момент запущены или ожидают обслуживания. Процессы находятся в состоянии блокировки, если они ожидают ввода-вывода. Средняя нагрузка отображается за последние 1, 5 и 15 минут, и вы можете увидеть текущие значения в правом верхнем углу верхнего экрана. В качестве альтернативы вы можете использовать команду uptime, чтобы показать текущую статистику средней нагрузки (см. Пример 10-4). Пример 10-4 Использование uptime для получения информации о средней нагрузке

Как показывает практика, средняя загрузка не должна превышать количество ядер ЦП в вашей системе. Вы можете узнать количество ядер ЦП в вашей системе с помощью команды lscpu. Если средняя загрузка за более длительный период больше, чем количество процессоров в вашей системе, у вас могут быть проблемы с производительностью. В упражнении 10-3 вы исследуете статистику средней нагрузки и узнаете, как управлять средней нагрузкой. Упражнение 10-3 Управление средней нагрузкой 1. Откройте root оболочку. В этой оболочке введите dd dd if=/dev/zero of=/dev/null &. Повторите эту команду три раза. 2. Введите top и посмотрите текущую среднюю нагрузку. Через несколько секунд нажмите q, чтобы выйти из top. 3. В командной строке введите uptime время безотказной работы. Вы должны увидеть числа, показывающие, что средняя нагрузка медленно увеличивается. 4. Введите lscpu и найдите количество процессоров. Также ищите параметр ядер на какждый ЦП, чтобы можно было рассчитать общее количество ядер ЦП. 5. Используйте killall dd, чтобы убить все процессы dd. Использование tuned для оптимизации производительности Чтобы с самого начала предложить наилучшую производительность, RHEL 8 поставляется с tuned. Он предлагает демон, который отслеживает активность системы и предоставляет некоторые профили. В профилях администратор может автоматически настроить систему для обеспечения максимальной задержки, пропускной способности или энергопотребления.

213

В зависимости от свойств установленной системы профиль tuned выбирается автоматически при установке, а после установки можно вручную изменить текущий профиль. Администраторы также могут изменять настройки в настроенном профиле tuned. В Табл. 10-4 представлен обзор профилей по умолчанию. Таблица 10-4 Обзор профиля tuned Профиль balanced desktop latency-performance network-latency network-throughput

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

powersave

Настраивает на максимальное энергосбережение

throughputperformance

Настраивается на максимальную пропускную способность

virtual-guest

Оптимизирует Linux для работы в качестве виртуальной машины

virtual-host

Оптимизирует Linux для использования в качестве узла KVM

Создавать собственные профили относительно легко. Также при установке определенных пакетов могут быть добавлены профили. Таким образом, вы можете обнаружить, что на вашем сервере существуют некоторые дополнительные профили производительности. Для управления профилем производительности предоставляется команда tuned-adm. Утилита общается с настроенным демоном, поэтому, прежде чем вы сможете его использовать, запустите systemctl enable --now tuned, чтобы запустить настроенный профиль. Затем используйте tuned-adm, чтобы узнать, какой профиль выбран в данный момент. Для обзора профилей, доступных на вашем сервере, введите tuned-adm list. Чтобы выбрать другой профиль, введите tuned-adm profile profile-name. Сервис tuned также может порекомендовать настроенный профиль для вашей системы: используйте tuned-adm recommend. В упражнении 104 вы можете попрактиковаться в работе с tuned. Упражнение 10-4. 1. Используйте yum -y install tuned, чтобы убедиться, что tuned установлен. (Вероятно, уже есть.) 2. Введите systemctl status tuned, чтобы проверить, работает ли настроенный в данный момент. Если это не так, используйте systemctl enable --now tuned. 3. Введите tuned-adm active, чтобы увидеть, какой профиль используется в настоящее время. 4. Введите uned-adm recommend, чтобы увидеть, какой настроенный профиль рекомендуется.

214

5. Чтобы выбрать и активировать профиль hroughput-performance, введите tuned-adm profile throughput-performance.

Резюме Управление процессами - обычная задача системного администратора Linux. В этой главе вы узнали, как искать определенные процессы и как изменять их приоритет с помощью nice и kill. Вы также узнали, как использовать Tuned для выбора профиля производительности, который лучше всего соответствует рабочей нагрузке вашего сервера.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 10-5 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 10-5 Ключевые темы главы 10 Элемент ключевой темы

Описание

Страница

Таблица 10-2

Обзор управления заданиями

204

Список

Обзор основных сигналов

210

Таблица 10-3

Обзор состояний процессов Linux

212

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: job, process, background, foreground, nice, kill, signal, PID, thread, tuned, profile, zombie

Обзорные вопросы 215

Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Какая команда дает обзор всех текущих заданий оболочки? 2. Как остановить текущее задание оболочки, чтобы продолжить его выполнение в фоновом режиме? 3. Какую комбинацию клавиш можно использовать для отмены текущего задания оболочки? 4. Пользователь просит вас отменить одно из запущенных им заданий. Вы не можете получить доступ к оболочке, из которой в настоящее время работает пользователь. Что вы можете сделать, чтобы все равно отменить его работу? 5. Какую команду вы бы использовали, чтобы показать родительско-дочерние отношения между процессами? 6. Какая команда позволяет вам изменить приоритет PID 1234 на более высокий? 7. В вашей системе в настоящее время запущено 20 процессов dd. Как проще всего их всех остановить? 8. Какая команда позволяет остановить команду с именем mycommand? 9. Какую команду вы используете в top, чтобы убить процесс? 10. Что требуется для выбора профиля производительности, который лучше всего соответствует потребностям вашей системы?

Лабораторные работы в конце главы В этих лабораторных занятиях в конце главы вы воспользуетесь некоторыми из основных навыков управления пакетами RHEL. Все задания можно делать на одном сервере. Лабораторная работа 10.1 1. Выполните команду dd if=/dev/zero of=/dev/null три раза в качестве фонового задания. 2. Увеличьте приоритет одной из этих команд, используя значение nice -5. Снова измените приоритет того же процесса, но на этот раз используйте значение -15. Обратите внимание на разницу. 3. Завершите все процессы dd, которые вы только что запустили. 4. Убедитесь, что tuned установлен и активен, и задайте профиль пропускной способности.

216

Глава 11 В этой главе рассматриваются следующие темы: ▪ ▪

Понимание Systemd Управление юнитами через Systemd

В этой главе рассматривается следующая цель экзамена RHCSA: ▪

Запуск и остановка служб, и настройка служб для автоматического запуска при загрузке.

В этой главе вы узнаете о Systemd, который является менеджером системы и служб, используемым в RHEL 8. Вы прочитаете обо всем, что может делать Systemd, и когда у вас будет хорошее общее представление, вы узнаете, как для работы с сервисами Systemd. Systemd также участвует в загрузке вашей системы в желаемом состоянии, которое называется target. Эта тема рассматривается в главе 17 «Управление и понимание процедуры загрузки».

Управление процессами Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 10 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 11 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Понимание Systemd

1-5

Управление юнитами через Systemd

6 - 10

1. Какая команда показывает все файлы служебных модулей в вашей системе, которые в настоящее время загружено? a. b. c. d.

systemctl --type = service systemctl --type = service --all systemctl --list-services systemctl --show-units | grep services 217

2. Какое утверждение о Systemd не соответствует действительности? a. b. c. d.

Вы можете создавать запросы с помощью команды systemctl enable. target, к которой относится конкретное желание, не зависит от связанные желания. Желания всегда администрируются в /usr/lib/systemd/system каталог. Каждая служба знает, к какой цели следует добавить ее пожелания.

3. Как лучше всего избежать конфликтов между несовместимыми устройствами? a. Ничего; файлы модулей определили для себя, с какими модулями они не совместимы. b. Отключите службу с помощью systemctl disable. c. Unmask службу с помощью systemctl unmask. d. Mask службу с помощью systemctl mask. 4. Что из перечисленного не является действительным статусом для служб Systemd? a. b. c. d.

Running(active) Running(exited) Running(waiting) Running(dead)

5. Какое из следующих утверждений не относится к socket units? a. socket units требует service unit с тем же именем. b. socket units могут прослушивать порты и активировать службы только когда активируется порт. c. socket units не могут содержать имя связанного двоичного файла, который должен быть запущен. d. socket units могут реагировать на активность пути. 6. Что из перечисленного не является допустимым типом устройства Systemd? a. b. c. d.

service udev mount socket

7. Вы хотите узнать, какие другие units Systemd зависят от конкретного units. Какую команду вы бы использовали? a. b. c. d.

systemd list-dependencies --reverse systemctl list-dependencies --reverse systemctl status my.unit --show-deps systemd status my.unit --show-deps -r

8. Как изменить редактор по умолчанию, который использует Systemd, на vim? a. export EDITOR=vim 218

b. export SYSTEMD_EDITOR=vim c. export EDITOR=/bin/vim d. export SYSTEMD_EDITOR=/bin/vim 9. Какое из следующих ключевых слов следует использовать для определения зависимости Systemd, если вы хотите гарантировать, что процедура загрузки не завершится неудачно в случае сбоя зависимости? a. b. c. d.

Required Requisite Before Wants

10. Что из перечисленного не является допустимой командой при работе с юнитами в systemctl? a. b. c. d.

systemctl unit start systemctl status -l unit systemctl mask unit systemctl disable unit

Основные темы Понимание Systemd Systemd - это часть Red Hat Enterprise Linux 8, которая отвечает за запуск не только служб, но и множества других элементов. В этой главе вы узнаете, как организован Systemd и какие элементы запускаются из Systemd. Чтобы описать это в общем виде, Systemd System и Service Manager используются для запуска компонентов. Которые называются юнитами. Юниты могут быть разными. Один из самых важных типов юнитов - это служба. Как правило, службы - это процессы, которые обеспечивают определенные функции и разрешают подключения от внешних клиентов, таких как служба SSH, веб-служба Apache и многие другие. Помимо сервисов, существуют и другие типы юнитов, такие как socket, mount и target. Чтобы отобразить список доступных модулей, введите systemctl -t help (см. Пример 11-1).

Пример 11-1 Типы юнитов в Systemd [root@server1 ~]# systemctl -t help Available unit types: service socket target device mount 219

automount swap timer path slice scope Понимание местоположения юнитов Systemd Основное преимущество работы с Systemd по сравнению с предыдущими методами, которые Red Hat использовал для управления службами, состоит в том, что он предоставляет единый интерфейс для запуска юнитов. Этот интерфейс определен в юнит файле. Файлы юнитов могут находиться в трех местах: ▪





/usr/lib/systemd/system содержит файлы юнитов по умолчанию, которые были установлены из пакетов RPM. Вы никогда не должны редактировать эти файлы напрямую. /etc/systemd/system содержит файлы настраиваемых юнитов. Он также может содержать файлы, которые были написаны администратором или сгенерированы командой systemctl edit. /run/systemd/system содержит файлы юнитов, которые были созданы автоматически.

Если файл юнита существует более чем в одном из этих расположений, юниты в каталоге /run имеют наивысший приоритет и перезапишут любые настройки, определенные где-либо еще. Юниты в /etc/systemd/system имеют второй по приоритету, а юниты в /usr/lib/systemd/system идут последними. Понимание Systemd Service Units Вероятно, наиболее важным типом юнит является service unit. Он используется для запуска процессов. Вы можете запустить любой тип процесса, используя service unit, включая процессы и команды демонов. В примере 11-2 приведен пример файла service unit vsftpd.service для службы Very Secure FTP. Пример 11-2 Пример файла Service Unit [Unit] Description=Vsftpd ftp daemon After=network.target [Service] Type=forking ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf [Install] WantedBy=multi-user.target 220

Из этого примера юнит-файла видно, что юнит-файлы относительно легко понять. Любой файл служебных юнитов Systemd состоит из следующих трех разделов (вы найдете разные разделы в других типах файлов модулей): ▪





[Unit] Описывает юнит и определяет зависимости. Этот раздел также содержит важный оператор After и, необязательно, оператор Before. Эти утверждения определяют зависимости между разными юнитами, и они относятся к возможностям этого юнита. Оператор Before указывает, что этот юнит должен быть запущен раньше указанного юнита. Оператор After указывает, что этот юнит следует запускать после указанного юнита. [Service] Описывает, как запускать и останавливать службу и запрашивать установку состояния. Обычно вы можете ожидать строку ExecStart, которая указывает, как запустить юнит, или строку ExecStop, которая указывает, как остановить юнит. Обратите внимание на параметр «Type», который используется для указания способа запуска процесса. Тип forking обычно используется процессами-демонами, но вы также можете использовать другие типы, например oneshot, который запускает любую команду из модуля Systemd. См. Man 5 systemd.service для более подробной информации. [Install] Указывает, в какой цели (target) необходимо запустить данное устройство. Раздел «Общие сведения о целевых единицах Systemd (Understanding Systemd Target Units)» чуть позже в этой главе объясняет, как работать с целевыми (targets) юнитами.

Понимание Systemd Mount Units Mount Units указывает, как файловая система может быть смонтирована в определенном каталоге. В примере 11-3 показан пример файла монтирования юнит, tmp.mount. Пример 11-3 Пример файла Mount Unit

221

В файле юнита tmp.mount в Примере 11-3 показаны некоторые интересные дополнительные параметры конфигурации в разделах: ▪ [Unit] Оператор Conflicts используется для перечисления единиц, которые нельзя использовать вместе с этим устройством. Используйте это для взаимоисключающих единиц. ▪ [Mount] Определяет, где именно должно быть выполнено монтирование. Вы узнаете аргументы, которые обычно используются в любой команде mount. Общие сведения о Systemd Socket Units Другой тип юнит, на который интересно взглянуть, - это Socket. Сокет создает метод взаимодействия приложений друг с другом. Сокет может быть определен как файл, но также как порт, на котором Systemd будет прослушивать входящие соединения. Таким образом, служба не должна работать непрерывно, вместо этого она будет запускаться только в том случае, если соединение входит в указанный сокет. Каждому сокету нужен соответствующий служебный файл. Пример 11-4 показывает, как выглядит файл cockpit.socket; обратите внимание, что для этого файла требуется служебный файл с именем cockpit.service. Пример 11-4 Пример файла юнит сокета

Важным параметром в примере 11-4 является ListenStream. Этот параметр определяет TCP-порт, который Systemd должен прослушивать для входящих подключений. Сокеты также могут быть созданы для портов UDP, и в этом случае вы должны использовать ListenDatagram вместо ListenStream.

Понимание юнитов target Systemd Файлы юнит используются для создания необходимых функций на вашем сервере. Чтобы можно было загружать их в правильном порядке и в нужный момент, используется особый тип 222

юнита: юнит target. Простое определение целевого (target) юнит - это «группа юнитов». Некоторые target используются для определения состояния, в котором должен быть запущен сервер. Таким образом, файлы target юнит сопоставимы с уровнями выполнения, используемыми в более ранних версиях RHEL. Другие юниты target - это просто группа служб, которая упрощает управление не только отдельными юнитами, но и всеми юнитами, которые необходимы для получения определенных функций. Printer.target является примером такого юнит target; вы можете использовать его для легкого запуска или остановки всех устройств, необходимых для обеспечения функциональности печати. Сами по себе юниты target могут зависеть от других юнитов. Эти зависимости определены в файле юнита target. Примером такого отношения зависимости является basic.target. Этот target определяет все юниты, которые всегда должны запускаться. Вы можете использовать команду systemctl list-dependencies для обзора любых существующих зависимостей. В примере 11-5 показано определение файла юнита target multi-user.target, который определяет нормальное рабочее состояние сервера RHEL. Пример 11-5 Пример файла юнит target

Вы можете видеть, что в самом файле юнит target содержания не много. Он просто определяет, что ему требуется, а с какими службами и целями (targets) он не может сосуществовать. Он также определяет порядок загрузки с помощью оператора After в разделе [Unit]. Файл target не содержит информации о юнитах, которые должны быть включены; это определено в разделе [Install] различных файлов юнитов. Когда администраторы используют команду systemctl enable, чтобы обеспечить автоматический запуск юнит при загрузке, считается, что раздел [Install] этого модуля определяет, к какому target следует добавить юнит. При добавлении юнита к target, внутренняя символическая ссылка создается в целевом каталоге в /etc/systemd/system. Если, например, вы включили автоматический запуск службы vsftpd, вы обнаружите, что была добавлена символическая ссылка /etc/systemd/system/multiuser.target/wants/vsftpd.service, указывающая на юнит в /usr/lib/systemd/system/vsftpd.service и, таким образом, обеспечивает автоматический запуск юнита. В терминологии Systemd эта символическая ссылка называется «want (хотеть, желать)», потому что она определяет, что target хочет запустить при обработке. Управление юнитами через Systemd

223

Управление текущим состоянием модулей Systemd - важная задача администратора RHEL. Управление юнитами означает не только управление их текущим состоянием, но и изменение параметров, используемых разными юнитами. Как администратор, управление юнитами Systemd начинается с запуска и остановка юнитов. Для этого вы используете команду systemctl. В упражнении 11-1 вы запускаете, останавливаете и управляете юнитами. После того, как вы настроили устройство таким образом, чтобы его можно было запустить без проблем, вам необходимо убедиться, что он автоматически перезагружается при перезагрузке. Вы делаете это путем включения или отключения юнит. СОВЕТ Команда systemctl имеет большое количество параметров, которые на первый взгляд могут показаться слишком сложными, но это не так страшно, как кажется. Просто убедитесь, что пакет bash-completion установлен, и используйте завершение с помощью табуляции в команде systemctl, которая обеспечивает легкий доступ ко всем доступным параметрам.

Упражнение 11-1. Управление юнитами с помощью команды systemctl (Примечание при переводе. Для выполненя упр. Пришлось ВРЕМЕННО до изучения соответствующей темы отключить selinux. В файле /etc/sysconfig/selinux поменять значение SELINUX= enforcing на SELINUX=disabled и выполнить reboot системы) 1. Введите yum -y install vsftpd, чтобы установить службу Very Secure FTP. 2. Введите systemctl start vsftpd, чтобы активировать FTP-сервер на вашем компьютере. 3. Введите systemctl status vsftpd. Вы получите результат, как показано в примере 11-6, где вы можете видеть, что служба vsftpd в настоящее время работает. Вы также можете увидеть в строке Loaded, что служба в настоящее время отключена (disabled), что означает, что она не будет активирована при перезапуске системы. Предустановка поставщика также отображается как disabled, что означает, что по умолчанию после установки это устройство не будет автоматически включено. 4. Введите systemctl enable vsftpd. Это создает символическую ссылку в каталоге /etc/systemd/system/multi-user.target.wants для многопользовательского файла tartget, чтобы обеспечить автоматический запуск службы после перезапуска. 5. Снова введите systemctl status vsftpd. Теперь вы увидите, что файл модуля изменился с отключенного на включенный (disabled to enabled).

Пример 11-6 Запрос текущего статуса юнит с помощью systemctl status

224

При запросе текущего состояния юнита Systemd, как в примере 11-6, вы можете увидеть различные виды информации о нем. В Табл. 11-2 показаны различные виды информации, которую вы можете получить о файлах юнит при использовании команды systemctl status. Таблица 11-2 Обзор статуса Systemd

Статус

Описание

Loaded

Файл юнит был обработан, и объект активен.

Active(running)

Юнит работает с одним или несколькими активными процессами.

Active(exited)

Юнит успешно завершил разовый запуск.

Active(waiting)

Юнит работает и ожидает события.

Inactive(dead)

Юнит не работает.

Enabled

Юнит будет запущен во время загрузки.

Disabled

Юнит не запускается во время загрузки.

Static

Юнит не может быть включен, но может быть запущен другим юнитом автоматически.

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

Таблица 11-3 Обзор команды systemctl Команда

Описание

225

systemctl --type=service

Показывает только юниты сервисов

Показывает все активные служебные юниты (тот же результат, что и предыдущая команда) ystemctl list-units --type=service -- Показывает неактивные сервисные юниты, а также all активные сервисные юниты systemctl list-units --type=service

systemctl --failed --type=service

Показывает все сервисы, которые вышли из строя

systemctl status -l your.service

Показывает подробную информацию о статусе сервисов

Управление зависимостями В общем, есть два способа управлять зависимостями Systemd: ▪ ▪

Типы юнитов, такие как сокет и путь, напрямую связаны с сервисным юнитом. Доступ к любому из этих типов юнитов автоматически активирует тип службы. Зависимости могут быть определены внутри юнита с помощью таких ключевых слов, как Requires, Requisite, After и Before.

Как администратор, вы можете запросить список зависимостей юнитов. Введите systemctl list-dependencies, а затем имя юнита, чтобы узнать, какие у него зависимости, и добавьте параметр --reverse, чтобы узнать, какие модули являются зависимыми от этого модуля. В примере 11-7 показан пример этой команды. Пример 11-7 Отображение зависимостей юнитов vsftpd.service

226

Чтобы обеспечить точное управление зависимостями, в разделе [Unit] юнита можно использовать разные ключевые слова: ▪ ▪ ▪ ▪ ▪

Requires: если этот юнит загружается, перечисленные здесь юниты также загружаются. Если один из юнитов будет деактивирован, этот юнит также будет деактивирован. Requisite: если указанный здесь юнит еще не загружен, этот юнит выйдет из строя. Wants: это устройство хочет загрузить перечисленные здесь юниты, но не откажется, если какой-либо из перечисленных юнитов выйдет из строя. Before: этот юнит запускается раньше юнита, указанного в параметре " Before ". After: этот юнит запускается после юнита, указанного в значение «After».

В следующем упражнении 11-2 вы узнаете, как использовать эти параметры для управления отношениями зависимости юнитов. Параметры управления юнитом При работе с юнит-файлами Systemd вы рискуете получить множество опций. Каждый файл юнита можно настроить с различными параметрами. Чтобы выяснить, какие параметры доступны для конкретного устройства, используйте команду systemctl show. Например, команда systemctl show sshd показывает все параметры Systemd, которые можно настроить в модуле sshd.service, включая их текущие значения по умолчанию. В примере 11-8 показан результат выполнения этой команды. Пример 11-8 Отображение доступных параметров с помощью systemctl show

227

При изменении файлов юнитов для применения опций необходимо убедиться, что изменения записаны в /etc/systemd/system, где должны быть созданы пользовательские файлы юнитов. Рекомендуемый способ сделать это - использовать команду systemctl edit. Команда создает подкаталог в /etc/systemd/system для службы, которую вы редактируете; например, если вы выполните systemctl edit sshd.service, вы получаете каталог с именем /etc/systemd/systemd/sshd.service.d, в котором создается файл с именем override.conf. Все настройки, применяемые в этом файле, заменяют все существующие настройки в служебном файле в /usr/lib/systemd/system. В упражнении 11-2 вы узнаете, как применять изменения к юнитам Systemd. Альтернативный (но определенно не рекомендуемый) способ внесения изменений в файлы юнитов - скопировать файл юнита по умолчанию из /usr/lib/systemd/system в /etc/systemd/system и внести свои настройки в файле юнита. По крайней мере, такой подход гарантирует, что ваши изменения не будут потеряны после обновления файла юнита по умолчанию. СОВЕТ По умолчанию Systemd использует редактор nano. Это нравится не всем (в том числе и мне). Если вы хотите использовать vim вместо nano, отредактируйте файл /root/.profile, включив в него следующую строку: SYSTEMD_EDITOR="/bin/vim". После повторного входа в систему vim будет использоваться как редактор по умолчанию.

Упражнение 11-2 Изменение конфигурации устройства 1. Введите yum install httpd, чтобы установить пакет веб-сервера Apache. 228

2. Введите systemctl cat httpd.service, чтобы показать текущую конфигурацию юнит файла, запускающего веб-сервер Apache. 3. Введите systemctl show httpd.service, чтобы получить обзор доступных параметров конфигурации для этого юнит файла. 4. Введите systemctl edit httpd.service, чтобы изменить конфигурацию по умолчанию, и убедитесь, что в разделе [Unit] есть строки Restart=always и RestartSec=5s. 5. Введите systemctl daemon-reload, чтобы система Systemd приняла новую конфигурацию. 6. Введите systemctl restart httpd, чтобы перезапустить службу httpd. 7. Введите systemctl status httpd и повторите через 5 секунд. Вы заметите, что процесс httpd автоматически перезапускается.

Резюме В этой главе вы узнали, как работать с Systemd. Вы прочитали, как управлять состоянием службы Systemd и как изменять различные параметры в Systemd. В следующей главе вы узнаете, как планировать задачи с помощью cron и сервисов.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 11-4 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 11-4 Ключевые темы главы 11 Элемент ключевой темы

Описание

Страница

Пример 11-1

Типы юнитов в Systemd

219

Список

Три раздела юнит файла Systemd

221

Секция

Понимание Systemd Target Units

222

Упражнение 11-1

Управление юнитами c помощью команды systemctl

224

Таблица 11-3

Обзор команды systemctl

225

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. 229

Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: unit, wants, target, Systemd, dependencies

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Что такое юнит? 2. Какую команду следует использовать, чтобы показать все загруженные в данный момент сервисные юниты? 3. Как вы создаете want в юните? 4. Как изменить редактор по умолчанию для systemctl? 5. В каком каталоге находятся пользовательские файлы юнит Systemd? 6. Что вы должны включить, чтобы файл юнит автоматически загружал другой файл юнит? 7. Какая команда покажет доступные параметры конфигурации для юнита httpd.service? 8. Какая команда показывает все зависимости для конкретного юнита? 9. Что значит, если systemctl status показывает, что модуль dead? 10. Как создать файл переопределения Systemd?

Лабораторные работы в конце главы В этих лабораторных занятиях в конце главы вы воспользуетесь некоторыми из основных навыков управления пакетами RHEL. Все задания можно делать на одном сервере. Лабораторная работа 11.1 1. Установите службы vsftpd и httpd. 2. Установите редактор vim по умолчанию для systemctl. 3. Отредактируйте файл юнита httpd.service так, чтобы запуск httpd всегда запускал автоматически vsftpd. Отредактируйте службу httpd так, чтобы после сбоя она автоматически запускалась снова через 10 секунд.

230

Глава 12 В этой главе рассматриваются следующие темы: ▪ ▪

Настройка Cron для автоматизации повторяющихся задач Настройка At для планирования будущих задач

В этой главе рассматривается следующая цель экзамена RHCSA: ▪

Планирование задач с помощью at и cron.

На сервере Linux важно, чтобы определенные задачи выполнялись в определенное время. Это можно сделать с помощью служб At и Cron, которые можно настроить для выполнения задач в будущем. Служба At предназначена для однократного выполнения будущих задач, а служба Cron предназначена для повторяющихся регулярных задач. В этой главе вы узнаете, как настроить и то, и другое.

Планирование задач Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 12 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 12 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Настройка cron для автоматизации повторяющихся задач

1-8

Настройка at для планирования будущих задач

9 - 10

1. Какая из следующих команд позволяет проверить текущий статус службы crond? a. b. c. d.

service crond status systemctl status crond /usr/sbin/crond --status chkconfig crond –show

231

2. Что из следующего будет запускать задачу cron в воскресенье в 11 часов утра? a. b. c. d.

* 11 7 * * 0 11 * 7 * 0 11 * * 7 11 0 * 7 *

3. Что из следующего запускает задание каждые пять минут с понедельника по пятницу? a. b. c. d.

*/5 * * * 1-5 */5 * 1-5 * * 0/5 * * * 1-5 0/5 * 1-5 * *

4. Как создать задание cron для конкретного пользователя? a. Войдите в систему как этот пользователь и введите crontab -e, чтобы открыть редактор cron. b. Откройте файл crontab в домашнем каталоге пользователя и добавьте то, что вы хотите выполнить. c. От имени пользователя root введите crontab -e username. d. От имени пользователя root введите crontab -u username -e. 5. Какой каталог в основном используется файлами cron, которые устанавливаются автоматически через RPM? Какое из утверждений о безопасности cron верно? a. b. c. d.

/etc/crond.d /etc/cron.d /var/cron /var/spool/cron

6. Что из перечисленного не рекомендуется для указания заданий, которые должны выполняться с помощью cron? a. b. c. d.

Изменить /etc/crontab. Поместите задания в отдельные скрипты в /etc/cron.d. Используйте crontab -e для создания пользовательских заданий cron. Поместите задания в /etc/cron.{hourly|daily|weekly|monthly} для автоматического выполнения.

7. Какая служба выполняет задания cron в /etc/cron.hourly, cron.daily, cron.weekly и cron.monthly? a. b. c. d.

cron crontab atd anacron

8. Какое из утверждений о безопасности cron верно?

232

a. По умолчанию всем пользователям разрешено планировать задачи через cron, потому что в файле /etc/cron.allow есть ключевое слово all. b. Если файл cron.deny существует, необходимо также создать файл cron.allow и перечислить пользователей, которым разрешено планировать задачи через cron. c. Для каждого пользователя должна существовать соответствующая запись либо в файле cron.allow, либо в файле cron.deny. d. Если файл cron.allow существует, пользователь должен быть указан в нем, чтобы иметь возможность планировать задания через cron. 9. После ввода команд в shell at, какая команда позволяет закрыть оболочку at? a. b. c. d.

Ctrl-V Ctrl-D exit :wq

10. Какая команда позволяет видеть текущие задания, запланированные для выполнения? a. b. c. d.

atrm atls atq at

Основные темы Настройка Cron для автоматизации повторяющихся задач В системе Linux некоторые задачи необходимо автоматизировать, чтобы они выполнялись на регулярной основе. Можно было бы настроить каждый процесс с помощью специфического для процесса решения для обработки повторяющихся задач, но это было бы неэффективно. Вот почему в Linux служба cron используется как универсальная служба для автоматического запуска процессов в определенное время. ПРИМЕЧАНИЕ В RHEL 8 задачи также можно планировать с помощью таймера Systemd. Однако, поскольку таймеры Systemd не включены в задачи экзамена RHCSA, они не рассматриваются в этой главе.

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

233

Служба crond запускается по умолчанию в каждой системе RHEL. Сервис необходим, поскольку некоторые системные задачи выполняются через crond. Примером этого является, служба logrotate, которая очищает файлы журналов и запускается на регулярной основе, так же многие другие важные процессы обслуживания также запускаются автоматически через cron. Управлять самой службой crond просто: она не требует особого администрирования. Если другие службы необходимо перезагрузить или перезапустить, чтобы активировать изменения в их конфигурации, то crond в этом не нуждается. Демон crond активизируется каждую минуту проверяя свою конфигурацию, чтобы узнать, нужно ли что-нибудь запускать. Чтобы отслеживать текущий статус службы cron, вы можете использовать команду systemctl status crond -l. В примере 12-1 показан результат этой команды. Пример 12-1 Мониторинг текущего состояния службы crond

Наиболее важная часть вывода команды systemctl status crond находится в начале, что указывает на то, что служба cron загружена и включена. Тот факт, что служба включена, означает, что она будет автоматически запускаться при перезапуске этой службы. Последняя часть вывода команды показывает информацию о текущем состоянии. Через службу journald команда systemctl может узнать, что на самом деле происходит со службой crond. Понимание определения полей времени при конфигурирование Cron

234

При планировании сервисов через Cron вам нужно указать, когда именно сервисы должны быть запущены. В конфигурации crontab (которая более подробно объясняется в следующем разделе) вы используете строку времени, чтобы указать, когда следует запускать задачи. В Табл. 12-2 показаны используемые поля времени и даты (в указанном порядке).

Таблица 12-2 Поля времени и даты cron Поле

Значения

Минута (minute)

0–59

Час (hour)

0–23

день месяца (day of month) 1–31 Месяц (month)

1–12 (или имена, которых лучше избегать)

день недели (day of week)

0–7 (воскресенье - 0 или 7, или имена [которых лучше избегать])

В любом из этих полей вы можете использовать * в качестве подстановочного знака для ссылки на любое значение. Допускаются диапазоны чисел, а также списки и шаблоны. Некоторые примеры перечислены ниже:

▪ ▪ ▪ ▪

*11 * * * Каждую минуту с 11:00 до 11:59 (возможно, не то, что вы хотите) 0 11 * * 1-5 Ежедневно в 11:00 только по будням 0 7-18 * * 1-5 Каждый час в начале часа с 7:00 до 18:00. на неделе 0 * / 2 2 12 5 Каждые 2 часа в час 2 декабря и каждую пятницу в декабре

СОВЕТ Не нужно все это запоминать; man 5 crontab показывает все возможные конструкции.

Управление файлами конфигурации Cron Основным файлом конфигурации для cron является /etc/crontab, но вы не будете изменять этот файл напрямую. Тем не менее, он дает вам удобный обзор различных характеристик времени, которые можно использовать в cron. Он также устанавливает переменные среды, которые используются командами, выполняемыми через cron (см. Пример 12-2). Чтобы внести изменения в задания Cron, есть другие места, где должны быть указаны задания cron. Вместо изменения /etc/crontab используются разные файлы конфигурации Cron:



Файлы Cron в /etc/cron.d 235

▪ ▪

Скрипты в /etc/cron.hourly, cron.daily, cron.weekly и cron.monthly Пользовательские файлы, созданные с помощью crontab -e

В этом разделе вы получите обзор этих мест. Пример 12-2 Пример содержимого /etc/crontab

ПРИМЕЧАНИЕ. Если вы хотите поэкспериментировать с тем, как работает Cron, вы должны выделить достаточно времени для выполнения задания. Служба crond считывает свою конфигурацию каждую минуту, после чего можно запланировать выполнение новых заданий на следующую минуту. Итак, если вы хотите, чтобы ваша работа выполнялась как можно быстрее, оставьте безопасный запас в 3 минуты между моментом сохранения конфигурации cron и временем выполнения.

Для планирования задания Cron можно запускать для определенных пользователей. Чтобы создать задание cron для конкретного пользователя, введите crontab -e после входа в систему как пользователь или как root введите crontab -e -u username. Когда вы используете crontab -e, редактор vi открывается и создает временный файл. После редактирования конфигурации cron временный файл перемещается в его окончательное расположение в каталоге /var/spool/cron. В этом каталоге для каждого пользователя создается файл. Эти файлы нельзя редактировать напрямую! Когда файл сохраняется с помощью crontab e, он активируется автоматически. В то время как в первые дни RHEL файл /etc/crontab изменялся напрямую, в RHEL 8 вы этого больше не делаете. Если вы хотите добавить задания cron, которые не привязаны к определенной учетной записи пользователя (и которые по этой причине по умолчанию будут выполняться от имени пользователя root, если не указано иное), вы добавляете их в каталог /etc/cron.d. Просто поместите файл в этот каталог (точное имя не имеет значения) и убедитесь, что он соответствует синтаксису типичного задания cron. В Примере 12-3 вы можете увидеть пример файла конфигурации cron /etc/cron.d/unbound-anchor (который был вставлен в каталог /etc/cron.d после установки несвязанной системы доменных имен [DNS] сервер).

236

Пример файла содержит три элемента. Во-первых, это индикация времени, команда которой начинается в 3:10 утра первого числа каждого месяца. Затем конфигурация указывает, что команда должна быть запущена как несвязанный пользователь. В последней части есть фактическая команда, которую нужно запустить с некоторыми аргументами, специфичными для команды и указывающими, как эту команду следует использовать. Пример 12-3 Пример задания cron в /etc/cron.d

▪ ▪ ▪ ▪

Последний способ запланировать задания Cron - через следующие каталоги: /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly

В этих каталогах обычно находятся сценарии (а не файлы, отвечающие требованиям синтаксиса crontab), которые помещаются туда из файлов пакетов RPM. При открытии этих сценариев обратите внимание, что информация о времени, когда команда должна быть выполнена, не включена. Это потому, что точное время исполнения не имеет особого значения. Единственное, что имеет значение, это то, что задание запускается раз в час, день, неделю или месяц. Понимание назначения anacron Чтобы обеспечить регулярное выполнение задания, Cron использует службу anacron. Служба заботится о запуске ежечасных, ежедневных, еженедельных и ежемесячных заданий cron, независимо от того, в какое точное время. Чтобы определить, как это должно быть сделано, anacron использует файл /etc/anacrontab. В примере 12-4 показано содержимое файла /etc/anacrontab, который используется для указания того, как должны выполняться задания в anacron. Пример 12-4 Конфигурация anacrontab

237

В /etc/anacrontab выполняемые задания указываются в строках, содержащих четыре поля, как показано в примере 12-4. В первом поле указывается частота выполнения задания, выраженная в днях. Второе поле указывает, как долго anacron ждет перед выполнением задания, за которым следует третье поле, содержащее идентификатор задания. Четвертое поле указывает команду, которую нужно выполнить. СОВЕТ. Хотя полезно знать, как работает anacron, обычно это не та служба, которая настраивается напрямую. Необходимость настройки служб через anacron устраняется файлами /etc/cron.hourly, cron.daily, cron.weekly и cron.monthly.

ПРИМЕЧАНИЕ. Получить обзор фактически запланированных к выполнению заданий cron непросто. Не существует единой команды, которая показывала бы все запланированные на данный момент задания cron. Команда crontab -l выводит список заданий cron, но только для текущей учетной записи пользователя.

Управление безопасностью Cron По умолчанию все пользователи могут входить в задания Cron. Можно ограничить пользователя, которому разрешено планировать задания Cron, используя файлы конфигурации /etc/cron.allow и /etc/cron.deny. Если файл cron.allow существует, в нем должен быть указан пользователь, чтобы ему было разрешено использовать Cron. Если файл /etc/cron.deny существует, пользователь не должен быть указан в нем, чтобы ему было разрешено настраивать задания Cron. Оба файла не должны существовать в одной системе одновременно. Только root может использовать Cron, если ни один файл не существует. В упражнении 12-1 вы применяете некоторые основы cron и планируете задания cron с использованием различных механизмов. Упражнение 12-1. Выполнение запланированных задач с помощью cron 1. Откройте shell как root. Введите cat /etc/crontab, чтобы получить представление о содержимом файла конфигурации /etc/crontab. 2. Введите crontab -e. Это открывает интерфейс редактора, который по умолчанию используется vi. Добавьте следующую строку: 0 2 * * 1-5 logger message from root 3. Используйте команду vi: wq! Что бы закрыть сеанс редактирования и записать изменения. 4. Введите cd /etc/cron.hourly, что бы перейти в указанную директорию. В этом каталоге создайте файл сценария с именем eachhour, который содержит следующую строку: logger This message is written at $(date)

238

5. Выполните chmod +x eachhour, чтобы сделать скрипт исполняемым; если вы не сделаете его исполняемым, он не будет работать. 6. Войдите в каталог /etc/crond.d и в этом каталоге создавайте файл с именем eachhour. Поместите в файл следующее содержимое: 11 * * * * root logger This message is written from /etc/cron.d 7. Сохраните изменения в файле конфигурации и перейдите к следующему разделу. (Для оптимального эффекта выполните шаг 8 через пару часов.) 8. Через пару часов введите grep written /var/log/messages и прочтите сообщения, чтобы проверить правильность работы cron. Настройка at для планирования будущих задач В то время как cron используется для планирования заданий, которые необходимо выполнять на регулярной основе, служба atd доступна для служб, которые необходимо выполнить только один раз. В RHEL 8 служба atd доступна по умолчанию, поэтому все, что нужно сделать, это запланировать задания. Чтобы запустить задание через службу atd, вы должны использовать команду at с указанием времени, когда задание должно быть выполнено. Это может быть определенное время, например, 14:00, но также может быть указание времени, например, во время чая или в полдень. После того, как вы введете это, откроется оболочка at. В этой оболочке вы можете ввести несколько команд, которые будут выполнены в указанное время. После ввода команд нажмите Ctrl-D, чтобы выйти из оболочки at. После планирования заданий с помощью at вы можете использовать команду atq (q для очереди), чтобы получить обзор всех заданий, запланированных на данный момент. Также возможно удаление задание at из запланированных работ. Для этого используйте команду atrm, за которой (необязательно) укажите номер задания, которое вы хотите удалить. В упражнении 122 вы узнаете, как работать с at, чтобы запланировать выполнение заданий в определенное время. СОВЕТ Команда batch работает так же, как и команда at, но немного сложнее. При использовании batch вы можете указать, что задание запускается только тогда, когда это позволяют параметры производительности системы. Обычно это происходит при загрузке системы ниже 0,8. Это значение немного мало в современных многопроцессорных системах, поэтому значение нагрузки можно указать вручную при запуске atd с помощью параметра командной строки -l. Используйте, например, atd -l 3.0, чтобы убедиться, что batch задание не запускается, когда загрузка системы превышает 3.0.

Упражнение 12-2 Планирование заданий с помощью at 1. Введите systemctl status atd. В строке, которая начинается с Loaded:, эта команда должна показать вам, что служба в настоящее время загружена и включена, что означает, что она готова начать получать задания. 2. Введите в 15:00 (или замените на любое время, близкое к тому времени, когда вы работаете над этим упражнением). 239

3. Введите logger message from at. Нажмите Ctrl-D, чтобы закрыть оболочку at. 4. Введите atq, чтобы убедиться, что задание действительно запланировано.

Резюме В этой главе вы узнали, как планировать задания для выполнения в будущем. Вы также узнали, как настроить cron для многократного выполнения заданий в определенное время. Вы узнали, что существуют разные методы, чтобы сообщить cron, когда должно быть выполнено задание. Кроме того, вы узнали о службе anacron, которая используется для проверки того, что задания в каталогах /etc/cron.{hourly|daily|weekly|monthly} действительно выполняются, даже если система временно недоступна. В конце этой главы вы узнали, как использовать службу atd для планирования однократного выполнения задач.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 12-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 12-3 Ключевые темы главы 12 Элемент ключевой темы

Описание

Страница

Таблица 12-2

Определение времени crontab

235

Список

Примеры определения времени crontab

235

Секция

Способы ввода информации crontab

235

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: cron, anacron, at 240

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Где вы настраиваете задание cron, которое нужно выполнять раз в 2 недели? 2. Как указать время выполнения задания cron, которое должно выполняться дважды в месяц, 1 и 15 числа месяца в 14:00? 3. Как указать время выполнения cron для задания, которое должно выполняться каждые 2 минуты каждый день? 4. Как вы определяете работу, которую нужно выполнять 19 сентября и каждый четверг сентября? 5. Какие три действительных индикатора дня вы можете использовать, чтобы указать, что задание cron должно выполняться в воскресенье? 6. Какая команда позволяет запланировать задание cron для пользователя Lisa? 7. Как указать, что пользователю boris никогда не разрешается планировать задания через cron? 8. Вам необходимо убедиться, что задание выполняется каждый день, даже если сервер во время выполнения временно недоступен. Как вы делаете это? 9. Какая служба должна быть запущена для планирования заданий? 10. Какая команда позволяет узнать, запланированы ли для выполнения какие-либо текущие задания?

Лабораторная работа в конце главы В этой лабораторной работе в конце главы вы будете планировать выполнение работы через at и заданиями cron. Лабораторная работа 12.1 1. Создайте задание cron, которое будет выполнять обновление всего программного обеспечения на вашем компьютере каждый вечер в 23:00. 2. Запланируйте перезагрузку компьютера в 3 часа утра завтра.

241

Глава 13 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Понимание назначения системного журнала Настройка rsyslogd Ротация файлов журналов Работа с journald

В этой главе рассматривается следующая цель экзамена RHCSA: ▪ ▪

Нахождение и интерпретирование файлов системных логов и журналов. Сохраняйте системные журналы.

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

Планирование задач Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 13 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 13 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Понимание системного журнала

1-3

Настройка rsyslogd

4-7

Ротация лог файлов

8

Работа с journald

9 - 10

242

1. Какое из следующих утверждений о journald не соответствует действительности? a. journald регистрирует сообщения ядра. b. journald записывает в журнал, который по умолчанию не сохраняется между загрузками. c. journald - это замена rsyslogd. d. Для чтения файлов из журнала используется команда journalctl. 2. Какой журнал вы бы прочитали, чтобы найти сообщения, связанные с ошибкой аутентификацией? a. b. c. d.

/var/log/messages /var/log/lastlog /var/log/audit/audit.log /var/log/secure

3. Какой журнал вы бы прочитали, чтобы найти информацию, относящуюся к событиям SELinux? a. b. c. d.

/var/log/messages /var/log/lastlog /var/log/audit/audit.log /var/log/secure

4. Как называется файл конфигурации rsyslogd? a. b. c. d.

/etc/rsyslog.conf /etc/sysconfig/rsyslogd.conf /etc/sysconfig/rsyslog.conf /etc/rsyslog.d/rsyslogd.conf

5. Вам необходимо изменить поведение при запуске службы rsyslogd. Что из следующего описывает рекомендуемый подход к этому? a. Включите параметр запуска в основной файл конфигурации rsyslog. b. Создайте файл оснастки в каталоге /etc/rsyslog.d и укажите там необходимые параметры. c. Измените файл модуля Systemd в /usr/lib/systemd/system, чтобы включить требуемый параметр запуска. d. Используйте строку SYSLOGD_OPTIONS в файле /etc/sysconfig/rsyslog и укажите здесь параметр запуска. 6. Какой из следующих пунктов назначения в файле rsyslog.conf относится к определенному модулю rsyslogd? a. -/var/log/maillog b. /var/log/messages c. :omusrmsg:* 243

d. * 7. Какое средство является лучшим решением, если вы хотите настроить веб-сервер Apache для регистрации сообщений через rsyslog? a. daemon b. apache c. syslog d. local0-7 8. Вы хотите увеличить размер файла журнала до 10 МБ. Где вы это настраиваете? a. b. c. d.

Создайте файл в /etc/logrotate.d и укажите максимальный размер в этом файле. Установите максимальный размер в задание cron logrotate. Настройте место назначения с опцией максимального размера. Этого нельзя сделать.

9. В каком каталоге хранится журнал? a. b. c. d.

/var/log/journal /var/run/journal /run/log /run/log/journal

10. Что нужно сделать, чтобы журнал journald был постоянным? a. Создайте каталог /var/log/journal, установите соответствующие разрешения и перезагрузите компьютер. b. Откройте /etc/sysconfig/journal и установите для параметра PERSISTENT значение yes. c. Откройте файл /etc/systemd/journald.conf и установите PERSISTENT значение yes. d. Создайте файл /var/log/journal и установите соответствующие разрешения.

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

▪ ▪

Direct write (Прямая запись): некоторые службы записывают информацию журнала непосредственно в файлы журнала - даже некоторые важные службы, такие как веб-сервер Apache и файловый сервер Samba. rsyslogd: rsyslogd - это расширение syslogd, службы, которая заботится об управлении централизованными файлами журналов. Syslogd существует уже давно. journald: с появлением Systemd также была представлена служба журнала journald systemdjournald. Эта служба тесно интегрирована с Systemd, что позволяет 244

администраторам читать подробную информацию из журнала, отслеживая статус службы с помощью команды systemctl status. Понимание роли rsyslogd и journald

В RHEL 8 journald (который реализуется демоном systemd-journald) предоставляет расширенную систему управления журналами. journald собирает сообщения от ядра, всей процедуры загрузки и служб и записывает эти сообщения в журнал событий. Этот журнал событий хранится в двоичном формате, и его можно запросить с помощью команды journalctl. Команда journalctl позволяет получить доступ к подробным сведениям о сообщениях, которые регистрируются, поскольку она является интегрированной частью Systemd и, как таковая, принимает все сообщения, которые были сгенерированы модулями Systemd.

Поскольку журнал, который ведется с помощью journald, не сохраняется между перезагрузками, сообщения также пересылаются в службу rsyslogd, которая записывает сообщения в разные файлы в каталоге /var/log. rsyslogd также предлагает функции, которых нет в journald, такие как централизованное ведение журнала и фильтрация сообщений с помощью модулей. Доступны многочисленные модули для улучшения ведения журнала rsyslog, такие как модули вывода, позволяющие администраторам сохранять сообщения в базе данных. В текущем состоянии RHEL 8 journald не заменяет rsyslog; это просто еще один способ регистрации информации. Journald тесно интегрирован с Systemd; поэтому он регистрирует все, что делает ваш сервер. Rsyslogd добавляет к нему несколько сервисов. В частности, он заботится о записи информации журнала в определенные файлы (которая будет сохраняться между перезагрузками) и позволяет настраивать удаленное ведение журнала и серверы журналов. Помимо rsyslogd и systemd-journald существует служба auditd. Эта услуга обеспечивает аудит, подробное отслеживание того, что делают определенные услуги, процессы или пользователи. Настройка аудита выходит за рамки экзамена RHCSA, но вы заметите, что SELinux, например, записывает подробные сообщения в службу auditd. Чтобы получить больше информации о том, что происходит на машине, на которой запущен RHEL, администраторы должны использовать три подхода:

Пример 13-1 Использование systemctl status для отображения соответствующей информации журнала

245

▪ ▪ ▪

Следите за файлами в /var/log, которые записывает rsyslogd. Используйте команду journalctl, чтобы получить более подробную информацию из журнала. Используйте команду systemctl status , чтобы получить краткий обзор последних значимых событий, которые были зарегистрированы модулями Systemd через journald. Эта команда показывает состояние служб, а также последние пару строк, которые были записаны в журнал. В примере 13-1 показан пример, в котором эта команда четко указывает, что пошло не так при запуске службы.

Чтение файлов журнала Помимо сообщений, которые записываются с помощью journald в журнал и которые можно прочитать с помощью команды journalctl, в системе Linux вы также найдете различные файлы журналов в каталоге /var/log. Большинство файлов в этом каталоге управляется rsyslogd, но некоторые файлы создаются непосредственно определенными службами. Вы можете прочитать эти файлы с помощью утилиты, например less. Точное количество файлов в каталоге /var/log будет меняться в зависимости от конфигурации сервера и служб, запущенных на этом сервере. Однако некоторые файлы действительно существуют в большинстве случаев, и как администратор вы должны знать, какие это файлы и какое содержимое можно ожидать в этих файлах. В Табл. 13-2 представлен обзор некоторых стандартных файлов, созданных в этом каталоге.

Таблица 13-2 Обзор файлов системного журналирования

246

Лог-файл /var/log/messages /var/log/dmesg

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

/var/log/boot.log

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

/var/log/audit/audit.log

Содержит сообщения аудита. SELinux записывает в этот файл.

/var/log/maillog

Поищите здесь сообщения, относящиеся к почте.

/var/log/secure

/var/log/samba /var/log/sssd /var/log/cups /var/log/httpd/

Предоставляет файлы журнала для службы Samba. Обратите внимание, что Samba по умолчанию не управляется через rsyslog, а записывается непосредственно в каталог /var/log. Содержит сообщения, написанные службой sssd, которая играет важную роль в процессе аутентификации. Содержит сообщения журнала, созданные службой печати CUPS. Каталог, содержащий файлы журнала, записанные веб-сервером Apache. Обратите внимание, что Apache записывает сообщения в эти файлы напрямую, а не через rsyslog.

Понимание содержимого файла журнала Как администратор, вы должны иметь возможность интерпретировать содержимое файлов журнала. Например, в примере 13-2 показано частичное содержимое файла /var/log/messages.

Пример 13-2 /var/log/messages Образец Содержания

247

Как вы можете видеть в Примере 13-2, каждая записываемая строка имеет определенные элементы: ▪ ▪ ▪ ▪

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

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

248

Мониторинг файла журнала в реальном времени Когда вы настраиваете службы в Linux, может быть полезно видеть в реальном времени, что происходит. Вы можете, например, открыть два терминальных сеанса одновременно. За один сеанс терминала вы настраиваете и тестируете службу. В другом сеансе терминала вы в реальном времени видите, что происходит. Команда tail -f показывает в реальном времени, какие строки добавляются в файл журнала. В упражнении 13-1 в следующем разделе показан небольшой пример использования tail -f. При мониторинге файла журнала с помощью tail -f трассировка остается открытой, пока вы не нажмете Ctrl-C, чтобы закрыть ее. Использование команды logger Большинство служб записывают информацию в файлы журнала самостоятельно или через rsyslogd. Команда logger позволяет пользователям писать сообщения в rsyslog из командной строки или сценария. Использовать эту команду просто. Введите logger, а затем сообщение, которое вы хотите записать в журналы. Таким образом, утилита logger предлагает удобное решение для записи сообщений из скриптов. Это позволяет вам записывать сценарий в системный журнал, если что-то пойдет не так. При использовании logger вы также можете указать приоритет и возможность входа в систему. Команда logger -p kern.err hello записывает hello в файл kern.err, например, используя приоритет ошибки (обсуждается далее в этой главе). Эта опция позволяет вам проверить работу определенных средств rsyslog. В упражнении 13-1 вы используете tail -f для отслеживания файла журнала в реальном времени и используете средство ведения журнала для записи сообщений журнала в файл журнала. Упражнение 13-1 Использование реального мониторинга лог файла и команды logger 1. Откройте шелл как root. 2. В оболочке root введите tail -f /var/log/messages. 3. Откройте второе окно терминала. В этом окне терминала введите su - student, чтобы открыть подоболочку от имени пользователя student. 4. Наберите su - чтобы открыть shell root, и введите неправильный пароль. 5. Обратите внимание, что в /var/log/messages ничего не отображается. Это потому, что здесь не записываются ошибки, связанные с входом в систему. 6. В командной строке пользователя student введите logger hello. Вы увидите сообщение, появляющееся в файле /var/log/messages в реальном времени. 7. В терминале, где выполняется команда tail -f нажмите Ctrl-C, чтобы остановить отслеживание файла сообщений. 8. Введите tail -20 /var/log/secure. Вывод команды показывает последние 20 строк в файле /var/log/secure, которые покажут в том числе сообщения, которые ранее были сгенерированы ошибками su- password. Настройка rsyslogd Чтобы убедиться, что информация, которую необходимо регистрировать, записывается в то место, где вы хотите ее найти, вы можете настроить службу rsyslogd через файл

249

/etc/rsyslog.conf. В этом файле вы найдете различные разделы, которые позволяют вам указать, где и как должна быть записана информация. Общие сведения о файлах конфигурации rsyslogd Как и многие другие службы в RHEL 8, конфигурация для rsyslogd не определяется только в одном файле конфигурации. Файл /etc/rsyslog.conf - это центральное место, где настраивается rsyslogd. Из этого файла включается содержимое каталога /etc/rsyslog.d. Этот каталог можно заполнить, установив пакеты RPM на сервере. При поиске конкретной конфигурации журнала обязательно учитывайте также и содержимое этого каталога. Если при запуске службы rsyslogd необходимо передать определенные параметры, вы можете сделать это с помощью файла /etc/sysconfig/rsyslog. Этот файл по умолчанию содержит одну строку, которая читает SYSLOGD_OPTIONS="". В этой строке вы можете указать параметры запуска rsyslogd. Переменная SYSLOGD_OPTIONS включена в файл конфигурации Systemd, запускающий rsyslogd. Теоретически вы также можете изменить параметры запуска в этом файле, но это не рекомендуется. (См. Главу 17, «Управление и понимание процедуры загрузки», для получения дополнительных сведений о конфигурации Systemd.) Понимание разделов rsyslog.conf Файл rsyslog.conf используется для указания того, что должно регистрироваться и где это должно регистрироваться. Для этого вы найдете разные разделы в файле rsyslog.conf: ▪ ▪



#### MODULES ####: rsyslogd является модульным. Модули включены для улучшения поддерживаемых функций в rsyslogd. #### GLOBAL DIRECTIVES ####: Этот раздел используется для определения глобальных параметров, таких как место, где записываются вспомогательные файлы, или формат метки времени по умолчанию. #### RULES ####: это самая важная часть файла rsyslog.conf. Он содержит правила, которые определяют, какая информация должна регистрироваться в какое место назначения.

Общие сведения об объектах, приоритетах и местах назначения журналов Чтобы указать, какая информация должна регистрироваться в какое место назначения, rsyslogd использует объекты, приоритеты и места назначения (Facilities, Priorities, and Log Destinations): Объекты определяет категорию регистрируемой информации. rsyslogd использует фиксированный список возможностей, который не может быть расширен. Это связано с обратной совместимостью с устаревшей службой системного журнала. Приоритет используется для определения серьезности сообщения, которое необходимо зарегистрировать. При указании приоритета по умолчанию регистрируются все сообщения с этим приоритетом и всеми более высокими приоритетами. Пункт назначения определяет, куда должно быть записано сообщение. Типичными местами назначения являются файлы, но модули rsyslog также могут использоваться в качестве места назначения, чтобы обеспечить дальнейшую обработку с помощью модуля rsyslogd. 250

В примере 13-3 показан пример раздела RULES в rsyslog.

В Примере 13-3 вы можете увидеть, как разные средства и приоритеты используются для определения мест, где информация может быть записана. Доступные возможности и приоритеты фиксированы и не могут быть добавлены. Таблица 13-3 показывает, какие средства доступны, а Таблица 13-4 показывает список всех приоритетов. При указании места назначения часто используется файл. Если имя файла начинается с дефиса (как в -/var/log/maillog), сообщения журнала не будут немедленно зафиксированы в файле, а вместо этого будут буферизированы, чтобы сделать запись более эффективной. Для вывода также можно использовать файлы устройств, например /dev/console. Если это устройство используется, сообщения в реальном времени записываются на консоль. На современных серверах это часто не имеет смысла, потому что администраторы часто входят в систему удаленно и не видят, что происходит на консоли сервера.

Таблица 13-3 Объекты rsyslogd

Объект auth/authpriv

Использование Сообщения, относящиеся к аутентификации. 251

cron

Сообщения, генерируемые службой crond.

daemon

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

kern

Сообщения ядра.

lpr

Сообщения, созданные с помощью устаревшей системы печати lpd.

mail

Сообщения, связанные с электронной почтой.

mark

Специальное средство, которое можно использовать для периодической записи маркера.

news

Сообщения, генерируемые новостной системой NNTP.

security

То же, что и auth/authpriv. Больше не должно использоваться.

syslog

Сообщения, генерируемые системой системного журнала.

user

Сообщения, созданные в пользовательском пространстве.

uucp

Сообщения, создаваемые устаревшей системой UUCP.

local0-7

Сообщения, генерируемые службами, настроенными любыми средствами от local0 до local7.

Объекты системного журнала были определены в 1980-х годах, и для гарантии обратной совместимости нельзя добавлять новые объекты. В результате все еще существуют некоторые объекты, которые в основном больше не служат, а некоторые услуги, ставшие актуальными на более позднем этапе, не имеют собственных средств. В качестве решения можно использовать два конкретных типа объектов. Объект демон - это универсальное средство, которое может использовать любой демон. Кроме того, можно использовать средства от local0 до local7. Если есть службы, не имеющие собственного средства rsyslogd, которым в любом случае необходимо записывать в определенный файл журнала, эти службы можно настроить для использования любых средств от local0 до local7. Затем вам необходимо настроить службы для использования этих объектов. Процедура, которой вы следуете, зависит от используемой вами службы. Затем вам нужно добавить правило в файл rsyslog.conf для отправки сообщений, поступающих через этот объект, в конкретный файл журнала. Чтобы определить, какие типы сообщений следует регистрировать, в строках rsyslog.conf можно использовать разную степень серьезности. Эти уровни серьезности являются приоритетами системного журнала. В Табл. 13-4 представлен обзор доступных приоритетов в порядке возрастания.

Таблица 13-4 Приоритеты rsyslogd

Приоритет

Описание

debug

Сообщения отладки, которые дадут как можно больше информации о работе службы.

info

Информационные сообщения о нормальной работе сервиса.

notice

Информационные сообщения об элементах, которые могут стать проблемой позже. 252

warning / warn

Что-то работающие неоптимально, но реальной ошибки пока нет.

err /error

Произошла некритическая ошибка.

crit

Произошла критическая ошибка.

alert

Используется, когда доступность услуги скоро будет прекращена.

emerg/panic

Сообщение создается, когда доступность услуги прекращается.

Когда используется определенный приоритет, все сообщения с этим приоритетом и выше регистрируются в соответствии со спецификациями, используемыми в этом конкретном правиле. Если вам нужно детально настроить ведение журнала, где сообщения с разными приоритетами отправляются в разные файлы, вы можете указать приоритет со знаком равенства (=) перед ним, как в следующей строке, которая будет записывать все cron сообщения только с приоритетом отладки в конкретный файл с именем /var/log/cron.debug. Знак (-) перед строкой указывает на запись в буфер, чтобы информация регистрировалась более эффективно. cron.=debug -/var/log/cron.debug СОВЕТ Нет необходимости заучивать наизусть названия возможностей и приоритетов rsyslogd. Все они перечислены в файле man 5 rsyslog.conf. На экзамене у вас есть доступ к страницам руководства, поэтому эта информация будет легко доступна.

В упражнении 13-2 показано, как изменить rsyslog.conf. Вы настраиваете службу Apache для регистрации сообщений через системный журнал и создаете правило, которое записывает сообщения отладки в определенный файл журнала. Упражнение 13-2. Изменение правил rsyslog.conf 1. По умолчанию служба Apache не регистрируется через rsyslog, но ведет собственный журнал. Вы собираетесь это изменить. Для начала введите yum install -y httpd, чтобы установить службу Apache. 2. После установки службы Apache откройте его файл конфигурации /etc/http/conf/httpd.conf и добавьте в него следующую строку: ErrorLog syslog:local1 3. Введите systemctl restart httpd. 4. Создайте строку в файле rsyslog.conf, которая будет отправлять все сообщения, которые он получает для объекта local1 (которое теперь используется службой httpd), в файл /var/log/httpd-error.log. Для этого включите следующую строку: local1.error /var/log/httpd-error.log 5. Скажите rsyslogd перезагрузить его конфигурацию, используя команду systemctl restart rsyslog. 253

6. Все сообщения об ошибках Apache теперь будут записываться в файл httpd-error.log. 7. В браузере Firefox или другом перейдите по адресу http:// localhost. Поскольку страницы index.html еще нет, она будет записана в журнал ошибок. 8. Создайте файл объекта, который также записывает сообщения отладки в определенный файл. Для этого введите echo "*.debug /var/log/messages-debug">/etc/rsyslog.d/debug.conf. 9. Снова перезапустите rsyslogd с помощью команды systemctl restart rsyslog. 10. Используйте команду tail -f /var/log/messages-debug, чтобы открыть отслеживание только что созданного файла. 11. Введите logger -p daemon.debug «Daemon Debug Message». Вы увидите прохождение отладочного сообщения. 12. Нажмите Ctrl-C, чтобы закрыть файл журнала отладки. Ротация файлов журнала Чтобы сообщения системного журнала не заполнили вашу систему полностью, с файлами журналов можно выполнять ротацию. Это означает, что при достижении определенного заданного порога старый файл журнала закрывается и открывается новый файл. Утилита logrotate периодически запускается через службу crond, чтобы заботиться о ротации файлов журналов. При ротации файла журнала старый файл журнала обычно копируется в файл, в котором указана дата ротации. Итак, если ротация /var/log/messages проводится 8 июня 2019 г., имя файла ротации будет /var/log/messages-20190608. По умолчанию в системе хранятся четыре старых файла журнала. Файлы старше этого периода автоматически удаляются из системы. ПРЕДУПРЕЖДЕНИЕ. Ротационные файлы журналов нигде не хранятся; они просто ушли. Если политика вашей компании требует, чтобы вы могли получить доступ к информации о событиях, произошедших более пяти недель назад, например, вам следует либо создать резервную копию файлов журналов, либо настроить централизованный сервер журналов, на котором logrotate хранит обновленные сообщения в течение значительно более длительного периода.

Настройки по умолчанию для ротации журналов хранятся в файле /etc/logrotate.conf (см. Пример 13-4).

Пример 13-4 /etc/logrotate.conf Образец содержимого

254

Наиболее важные настройки, используемые в этом конфигурационном файле, говорят logrotate о необходимости еженедельной ротации файлов и сохранения четырех старых версий файла. Вы можете получить дополнительную информацию о других параметрах в этом файле с помощью команды man logrotate. Если для определенных файлов требуются определенные настройки, вы можете создать файл конфигурации для этого файла в каталоге /etc/logrotate.d. Настройки для этого конкретного файла перезаписывают настройки по умолчанию в /etc/logrotate.conf. Вы обнаружите, что в этом каталоге уже существуют разные файлы, чтобы позаботиться о некоторых файлах конфигурации. Работа с journald Сервис systemd-journald сохраняет сообщения журнала в журнале, двоичном файле, который временно хранится в файле /run/log/journal. Этот файл можно просмотреть с помощью команды journalctl. Использование journalctl для поиска событий Самый простой способ использовать journalctl - просто ввести команду. Вывод показывает, что последние события были записаны в журнал с момента последнего запуска вашего сервера. Результат этой команды отображается через утилиту less, и по умолчанию вы увидите начало журнала. Поскольку журнал ведется с момента загрузки вашего сервера, здесь отображаются сообщения журнала, связанные с загрузкой. Если вы хотите увидеть последние сообщения, которые были зарегистрированы, вы можете использовать journalctl -f, вывод которой показывает последние строки сообщений, в которые автоматически добавляются новые строки журнала. Вы также можете ввести journalctl и использовать G (в верхнем регистре), чтобы перейти в конец

255

журнала. Также обратите внимание, что параметры поиска (/) и (?) работают в выводе journalctl. В примере 13-5 показан частичный вывод результата выполнения этой команды. Пример 13-5 Просмотр информации журнала, созданной journald

Что делает journalctl гибкой командой, так это то, что его множество параметров фильтрации позволяют вам показать именно то, что вам нужно. В упражнении 13-3 показаны некоторые из наиболее интересных вариантов. Упражнение 13-3. Изучение journalctl 1. Введите journalctl. Вы увидите содержимое журнала с момента последнего запуска вашего сервера, начиная с начала журнала. Содержимое файла отображается через утилиту less, поэтому вы можете использовать обычные команды less для просмотра файла. 2. Введите q, чтобы выйти из пейджера. Теперь введите journalctl --no-pager. Это показывает содержимое журнала без использования утилиты less. 3. Введите journalctl -f. Это открывает режим просмотра в реальном времени journalctl, который позволяет вам видеть новые сообщения, которые прокручиваются в реальном времени. Нажмите Ctrl-C, чтобы прервать вывод информации. 4. Введите journalctl и дважды нажмите клавишу TAB. Здесь показаны конкретные параметры, которые можно использовать для фильтрации. Введите, например, 256

journalctl_UID=1000, чтобы показать сообщения, которые были зарегистрированы для вашей учетной записи пользователя. 5. Введите journalctl -n 20. Параметр -n 20 отображает последние 20 строк журнала (как и tail -n 20). 6. Введите journalctl -p err. Эта команда показывает только ошибки. 7. Если вы хотите просмотреть сообщения журнала, написанные за определенный период времени, вы можете использовать команды --since и --until. Обе опции принимают параметр времени в формате YYYY-MM-DD hh:mm:ss (ГГГГ-ММ-ДД чч: мм: сс). Кроме того, вы можете использовать yesterday, today, and tomorrow (вчера, сегодня и завтра) в качестве параметров. Итак, введите journalctl --since yesterday, чтобы отобразить все сообщения, написанные со вчерашнего дня. 8. journalctl также позволяет комбинировать различные варианты. Итак, если вы хотите отобразить все сообщения с приоритетом err, которые были написаны со вчерашнего дня, используйте ournalctl --since yesterday -p err. 9. Если вам нужно как можно больше подробностей, используйте journalctl -o verbose. Здесь показаны различные варианты, которые используются при записи в журнал (см. Пример 13-6). Все эти параметры можно использовать, чтобы указать команде journalctl, какую конкретную информацию вы ищете. Введите, например, journalctl _SYSTEMD_UNIT=sshd.service, чтобы отобразить дополнительную информацию о модуле sshd Systemd. 10. Введите journalctl --dmesg. Это показывает только сообщения, относящиеся к ядру. Не многие люди используют эту команду, поскольку команда dmesg дает точно такой же результат. Пример 13-6 Отображение подробной информации журнала с помощью journalctl -o verbose

257

В предыдущем упражнении вы ввели journalctl -o verbose, чтобы отобразить подробный вывод. В примере 13-6 показан пример подробного вывода. Как видите, это предоставляет подробную информацию для всех элементов, которые были зарегистрированы, включая PID, идентификатор связанной учетной записи пользователя и группы, связанную команду и многое другое. Эта подробная информация может помочь вам в отладке конкретных юнитов Systemd. Сохранение журнала Systemd По умолчанию журнал хранится в файле /run/log/journal. Весь каталог /run используется только для информации о текущем состоянии процесса, что означает, что журнал очищается при перезагрузке системы. Чтобы журнал сохранялся постоянным между перезагрузками системы, вы должны убедиться, что существует каталог /var/log/journal. Для постоянного хранения журнала необходимо установить параметр Storage=auto в /etc/systemd/journal.conf. Этот параметр может иметь разные значения: ▪ ▪ ▪ ▪

Storage=auto. Журнал будет записан на диск, если существует каталог /var/log/journal. Storage=volatile. Журнал будет храниться только в каталоге /run/log/journal. Storage=persistent. Журнал будет храниться на диске в каталоге /var/log/journal. Этот каталог будет создан автоматически, если его не существует. Storage=none Данные не будут сохраняться, но перенаправление на другие цели, такие как буфер журнала ядра или системный журнал, будет работать.

Даже когда журнал записывается в постоянный файл в /var/log/journal, это не означает, что журнал хранится вечно. Журнал имеет встроенную ротацию, которая будет использоваться ежемесячно. Кроме того, максимальный размер журнала ограничен 10% от размера файловой системы, в которой он находится, и он перестанет увеличиваться, если менее 15% файловой системы все еще остается свободным. В этом случае самые старые сообщения из журнала автоматически удаляются, чтобы освободить место для новых сообщений. Чтобы изменить эти настройки, вы можете изменить файл /etc/systemd/journald.conf, как показано в Примере 13-7 (вместе с другими параметрами, которые вы можете установить). Пример 13-7. Установка параметров journald через /etc/systemd/journald.conf 258

Сделать journald постоянным нетрудно. В упражнении 13-4 показано, как действовать дальше.

Упражнение 13-4. Как сделать journald постоянным 1. Откройте shell как root и введите mkdir /var/log/journal. 2. Прежде чем journald сможет записать журнал в этот каталог, вы должны установить владельца. Введите chown root: systemd-journal /var/log/journal, а затем chmod 2755 /var/log/journal. 3. Затем вы можете либо перезагрузить систему (перезапуска службы systemd-journald недостаточно), либо использовать команду killall -USR1 systemd-journald. 4. Журнал Systemd теперь сохраняется после перезагрузки. Если вы хотите увидеть сообщения журнала с момента последней перезагрузки, используйте journalctl -b.

Резюме В этой главе вы узнали, как настроить логирование в журналы. Вы прочитали, как службы rsyslogd и journald используются в RHEL 8 для хранения информации журнала, и узнали, как управлять журналами, которые ведутся этими службами. Вы также узнали, как настроить ротацию журналов и сделать журнал постоянным.

259

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 13-5 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 13-5 Ключевые темы главы 13 Элемент ключевой темы

Описание

Страница

Параграф

объяснение journald

245

Параграф

объяснение rsyslogd

245

Таблица 13-2

Обзор файлов системного журнала

246

Таблица 13-3

Объекты rsyslogd

251

Таблица 13-4

Приоритеты rsyslogd

252

Упражнение 13-4

Делаем журнал journald постоянным

259

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: journald, journalctl, rsyslogd, facility, priority, destination, log rotation

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Какой файл используется для настройки rsyslogd? 260

2. Какой файл конфигурации содержит сообщения, относящиеся к аутентификации? 3. Если вы ничего не настраиваете, сколько времени займет ротация файлов журнала? 4. Какая команда позволяет вам записывать сообщение из командной строки в средство пользователя, используя приоритет уведомления? 5. Какую строку вы бы добавили для записи всех сообщений с приоритетом info в файл /var/log/messages.info? 6. Какой файл конфигурации позволяет разрешить журналу расти сверх ограничений размера по умолчанию? 7. Какая команда позволяет просматривать новые сообщения в журнале, прокручивая их в режиме реального времени? 8. Какая команда позволяет просмотреть все сообщения журнала, написанные для PID 1 с 9:00 до 15:00? 9. Какая команда позволяет просматривать сообщения журнала с момента последней перезагрузки в системе, в которой был настроен постоянный журнал? 10. Какая процедура позволяет сделать журнал журнала постоянным?

Лабораторная работа в конце главы Теперь вы узнали, как работать с регистрацией в Red Hat Enterprise Linux 8, и знаете, как настроить rsyslogd и journald. Теперь вы можете выполнить лабораторную работу в конце главы, чтобы закрепить эти недавно приобретенные навыки.

Лабораторная работа 13.1 1. Настройте журнал, чтобы он был постоянным при перезагрузке системы. 2. Создайте файл конфигурации, который записывает все сообщения с приоритетом информации в файл /var/log/messages.info. 3. Настройте logrotate для хранения десяти старых версий файлов журнала.

261

Глава 14 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪

Общие сведения о разделах MBR и GPT Управление разделами и файловыми системами Понимание назначения системного журнала Монтирование файловых систем

В этой главе рассматривается следующая цель экзамена RHCSA: ▪ ▪ ▪ ▪

Список, создание, удаление разделов на дисках MBR и GPT. Настроить системы для монтирования файловых систем при загрузке универсальным уникальный идентификатор ID (UUID) или метки (label). Добавить новые разделы и логические тома и swop системы. Создавать, монтировать, размонтировать и использовать файловые системы vfat, ext4 и xfs.

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

Планирование задач Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 14 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 14 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Общие сведения о разделах MBR и GPT

1-2

Управление разделами и файловыми системами

3-6

Монтирование файловых систем

7-10

262

1. Что из следующего не является преимуществом использования таблицы разделов GUID перед таблицей разделов MBR? a. Время доступа к каталогу быстрее. b. Всего раздел может адресовать 8 ZiB. c. При использовании разделов GUID резервная копия таблицы разделов создается автоматически. d. Всего может быть до 128 разделов. 2. Вы хотите создать раздел размером 10245 байт. Какого размера она должна быть? a. b. c. d.

1 PB 1 PiB 1 EB 1 EiB

3. Какой тип раздела обычно используется для создания раздела Linux? a. b. c. d.

81 82 83 8e

4. Какое имя дискового устройства по умолчанию вы ожидаете увидеть в виртуальных машинах KVM? a. b. c. d.

/dev/sda /dev/hda /dev/sda /dev/xsda

5. Какое из следующих утверждений неверно? a. Никогда не используйте gdisk на диске MBR. b. fdisk также предлагает поддержку для управления разделами GPT. c. В зависимости от ваших потребностей вы можете создать разделы MBR и GPT на одном диске. d. Если ваш сервер загружается из EFI, вы должны использовать разделы GPT. 6. Какая из следующих файловых систем используется в RHEL8 по умолчанию? a. b. c. d.

Ext4 XFS btrfs Ext3

7. Какая команда позволяет вам найти текущие UUID, установленные для файловых систем на вашем сервере? a. mount 263

b. df -h c. lsblk d. blkid 8. Что бы вы поместили в столбец устройства /etc/fstab, чтобы смонтировать файловую систему на основе ее уникального идентификатора 42f419c4-633f-4ed7-b161-519a4dadd3da? a. b. c. d.

42f419c4-633f-4ed7-b161-519a4dadd3da /dev/42f419c4-633f-4ed7-b161-519a4dadd3da ID=42f419c4-633f-4ed7-b161-519a4dadd3da UUID=42f419c4-633f-4ed7-b161-519a4dadd3da

9. В какой из следующих строк /etc/fstab будет выполняться проверка файловой системы в файловой системе, но только после того, как корневая файловая система была успешно проверена? a. b. c. d.

/dev/sda1 /data xfs defaults 1 1 /dev/sda1 /data xfs defaults 1 2 /dev/sda1 /data xfs defaults 1 1 /dev/sda1 /data xfs defaults 0 2

10. Какую опцию монтирования вы бы использовали в /etc/fstab, чтобы указать, что файловую систему можно монтировать только после того, как сеть станет доступной? a. b. c. d.

network netdev _network Netdev

Основные темы

Общие сведения о разделах MBR и GPT Чтобы использовать жесткий диск, на нем должны быть разделы. Некоторые операционные системы устанавливают все в один раздел, в то время как другие операционные системы, такие как Linux, обычно имеют несколько разделов на одном жестком диске. Использование более одного раздела в системе имеет смысл по нескольким причинам: ▪ ▪ ▪ ▪

Легче различать разные типы данных. Для повышения безопасности или производительности можно использовать определенные параметры монтирования. Проще создать стратегию резервного копирования, при которой выполняется резервное копирование только соответствующих частей ОС. Если один раздел случайно полностью заполнится, другие разделы по-прежнему можно будет использовать, и ваша система может не сразу выйти из строя. 264

ПРИМЕЧАНИЕ Вместо использования нескольких разных разделов вы также можете использовать разные логические тома LVM. Управление логическими томами рассматривается в главе 15 «Управление расширенным хранилищем».

В RHEL 8 доступны две разные схемы разделения. Прежде чем создавать свой первый раздел, вы должны понять эти схемы и уметь определить, какая схема лучше всего работает в конкретной среде. Понимание схемы разбиения MBR Когда в начале 1980-х был изобретен персональный компьютер, требовалась система для определения структуры жесткого диска. Эта система стала известна, как Главная загрузочная запись (MBR). Во время загрузки компьютера базовая система ввода-вывода (BIOS) загружает «код MBR» в оперативную память. MBR содержит все, что необходимо для запуска компьютера, включая загрузчик и таблицу разделов. Когда в начале 80-х годов прошлого века жесткие диски впервые появились на ПК, пользователи могли использовать разные операционные системы. Некоторые из них включали MS-DOS/PC-DOS, PC/IX (UNIX IBM для ПК 8086), CPM86 и MPM86. Диск для этого будет разбит на разделы, чтобы каждая установленная операционная система получила его часть. Один из разделов станет активным, что означает, что код в загрузочном секторе MBR будет читать первый сектор активного раздела и запускать код. Затем код загрузит остальную часть ОС. Это объясняет, почему четырех разделов было сочтено «достаточно». Некоторые операционные системы (такие как SCO Xenix и SCO Unix) будут иметь другой уровень разделов в выделенном разделе UNIX (в случае SCO, называемый divisions) со своей собственной программой разделов (SCO: divvy) MBR была определена как первые 512 байтов на жестком диске компьютера, а в MBR присутствовал загрузчик операционной системы (например, GRUB 2; см. Главу 17, «Управление и понимание процедуры загрузки»), а также таблица разделов. Размер, который использовался для таблицы разделов, был относительно небольшим, всего 64 байта, в результате чего в MBR можно было создать не более четырех разделов. Поскольку данные о размере раздела хранились в 32битных значениях и использовался размер сектора по умолчанию 512 байт, максимальный размер, который мог использоваться разделом, был ограничен до 2 ТиБ (вряд ли это было проблемой в начале 1980-х). В MBR можно было создать всего четыре раздела. Поскольку многим операционным системам ПК требовалось более четырех разделов, было найдено решение, выходящее за эти рамки. В MBR один раздел может быть создан как расширенный, в отличие от других разделов, которые были созданы как основные. Внутри расширенного раздела можно создать несколько логических разделов, чтобы получить в общей сложности 15 разделов, к которым может обращаться ядро Linux. Понимание необходимости разбиения GPT на разделы

265

Жесткие диски современных компьютеров стали слишком большими, чтобы их можно было адресовать с помощью разделов MBR. Это одна из основных причин, по которой потребовалась новая схема разбиения. Схема разделения представляет собой таблицу разделов GUID Partition Table (GPT). На компьютерах, которые используют новый Unified Extensible Firmware Interface (UEFI) в качестве замены старой системы BIOS, разделы GPT являются единственным способом адресации дисков. Кроме того, старые компьютерные системы, использующие BIOS вместо UEFI, могут быть настроены с разделами GUID, что необходимо, если необходимо адресовать диск размером более 2 ТиБ. Использование GUID дает множество преимуществ: ▪ ▪ ▪ ▪

▪ ▪

Максимальный размер раздела составляет 8 зебибайт (ZiB), что составляет 1024 × 1024 × 1024 × 1024 гибибайтов. В GPT можно создать до 128 разделов. Лимита в 2 ТиБ больше нет. Поскольку пространство, доступное для хранения разделов, намного превышает 64 байта, которые использовались в MBR, больше нет необходимости различать первичный, расширенный и логический разделы. GPT использует 128-битный глобальный уникальный идентификатор (GUID) для идентификации разделов. Резервная копия таблицы разделов GUID создается по умолчанию в конце диска, что устраняет единственную точку отказа, которая существует в таблицах разделов MBR.

Понимание единиц измерения хранения Для хранени, используются разные единицы измерения. В некоторых случаях используются такие единицы, как мегабайт (МБ). В других случаях используются такие единицы, как мебибайт (MiB). Разница между ними в том, что мегабайт кратен 1000, а мебибайт кратен 1024. В компьютерах имеет смысл говорить о числах, кратных 1024, потому что именно так компьютеры обращаются к элементам. Однако путаница возникла, когда производители оборудования давно начали ссылаться на мегабайты, а не на мебибайты. На заре компьютерных технологий разница не была такой уж важной. Разница между килобайтом (КБ) и кибибайтом (КиБ) составляет всего 24 байта. Чем больше растут числа, тем больше становится разница. Гигабайт, например, равен 1000 × 1000 × 1000 байтов, то есть 1000000000 байтов, тогда как гибибайт составляет 1024 × 1024 × 1024 байта, что в сумме составляет 1 073 741 824 байта, что на 70 МБ больше, чем 1 ГБ. В текущих дистрибутивах Linux двоичные числа (MiB, а не MB) стали стандартом, но мы понимаем, что некоторые утилиты по-прежнему измеряют в MB, а не в MiB. В Таблице 14-2 вы можете увидеть обзор используемых значений. Раньше КБ, МБ и т. Д. Использовались как в десятичной, так и в двоичной форме; иногда их даже смешивали. Например, скорость линии 1 Мбит/с составляет один миллион бит в секунду. Некогда знаменитая дискета «1,44 МБ» имела размер 1440 000 байт (80 дорожек × 2 головки × 9 секторов × 512-байтовые сектора), создавая смешанное значение МБ: 1,44 × (десятичный K) × (двоичный K).

266

Таблица 14-2 Характеристики размера диска

Управление разделами и файловыми системами Как обсуждалось в предыдущем разделе, в RHEL 8 можно использовать два разных типа разделов. Для соответствия различным типам разделов существуют также две разные утилиты создание разделов. Утилита fdisk существует уже давно и используется для создания разделов MBR. Утилита gdisk используется для создания разделов GPT. В этом разделе вы узнаете, как использовать обе утилиты. Помимо утилит fdisk и gdisk, существуют и другие утилиты для разбиения на разделы, из которых parted, вероятно, является наиболее важной. Некоторым она нравится, поскольку она относительно проста в использовании, но в то же время данная утилита скрывает некоторые из более продвинутых функций. По этой причине в этой главе основное внимание уделяется работе с fdisk и gdisk, а parted лишь кратко рассматривается. Для разделов MBR и GPT вам необходимо указать имя дискового устройства в качестве аргумента. В Табл. 14-3 показаны наиболее распространенные имена дисковых устройств, с которыми вы работаете в RHEL 8.

Таблица 14-3 Общие типы дисковых устройств Устройство /dev/sda

/dev/nvme0n1

/dev/hda /dev/sda /dev/xvda

Имя Описание Жесткий диск, использующий драйвер SCSI. Используется для дисковых устройств SCSI и SATA. Часто встречается на физических серверах, но также и на виртуальных машинах VMware. Первый жесткий диск с интерфейсом NVM Express (NVMe). NVMe - это метод серверного уровня для работы с продвинутыми SSD-устройствами. Обратите внимание, что в конце имени устройства первый диск в этом случае обозначается как n1 вместо a (как и для других типов). Тип (устаревшего) дискового устройства IDE. Вы редко встретите этот тип устройства на современных компьютерах. Диск в виртуальной машине KVM, использующей драйвер диска virtio. Это обычный тип дискового устройства для виртуальных машин KVM. Диск на виртуальной машине Xen, использующий драйвер виртуального диска Xen. Вы видите это при установке RHEL в качестве виртуальной машины в 267

виртуализации Xen. RHEL 8 нельзя использовать в качестве гипервизора Xen, но вы можете увидеть виртуальные машины RHEL 8 поверх гипервизора Xen, использующие эти типы дисков. Как видно из Таблицы 14-3, почти все имена дисковых устройств заканчиваются на букву a. Это потому, что это первый диск, который был найден на вашем сервере. Например, второй SCSI-диск будет иметь имя /dev/sdb. Если на сервере установлено много дисков, у вас может быть до /dev/sdzи даже больше. После /dev/sdz ядро продолжает создавать устройства с такими именами, как /dev/sdaa и /dev/sdab. Создание разделов MBR с помощью fdisk Чтобы создать раздел MBR-диска, вы должны применить многоэтапную процедуру, как показано в упражнении 14-1. Упражнение 14-1 Создание разделов MBR с помощью fdisk Это упражнение было написано для использования установки RHEL/CentOS, которая содержит неразмеченное дисковое пространство. Если у вас нет такой установки, вы можете использовать второе дисковое устройство в своей демонстрационной среде. Это может быть виртуальный диск, добавляемый через вашу программу виртуализации, или USB-накопитель, если вы работаете над физической установкой. В этом случае убедитесь, что имена устройств в этом упражнении заменены именами устройств, соответствующими вашему оборудованию. СОВЕТ В лабораторной работе в конце главы вам придется снова создать разделы. Будет намного проще, если на этом этапе вы сможете начать с чистой установки. Следующие два шага помогут вам легко вернуться к системе, в которой вы еще не создали никаких разделов.

1. Введите dd if=/dev/sda of=/root/diskfile bs=1M count=1. (Если ваш диск - /dev/vda, а не /dev/sda, измените имя диска соответствующим образом.) Использование этой команды позволяет вам создать резервную копию первого мегабайта необработанных блоков и записать ее в файл /root/diskfile. Этот файл позволяет вам легко вернуться к ситуации, которая существовала в начале этого упражнения, поскольку команда создает резервную копию MBR и всех соответствующих метаданных на диске. 2. Введите cp /etc/fstab /root/fstab, чтобы также сделать резервную копию файла /etc/fstab. 3. Откройте корневую оболочку и выполните команду fdisk. Эта команда должна в качестве аргумента указать имя дискового устройства, на котором вы хотите создать раздел. В этом упражнении используется /dev/sda. При необходимости измените это в соответствии с вашим оборудованием.

268

4. Прежде чем что-либо делать, рекомендуется проверить, сколько у вас свободного места на диске. Нажмите p, чтобы увидеть обзор текущего распределения диска:

В выходных данных этой команды, в частности, ищите общее количество секторов и последний сектор, который используется в данный момент. Если последний раздел не заканчивается на последнем секторе, у вас есть доступное пространство для создания нового раздела. 5. Введите n, чтобы добавить новый раздел:

6. Предполагая, что у вас есть разделы /dev/sda1 и /dev/sda2 и ничего больше, нажмите p, чтобы создать первичный раздел. Примите предложенный номер раздела, который должен быть /dev/sda3. 7. Укажите первый сектор на диске, с которого будет начинаться новый раздел. По умолчанию предлагается первый доступный сектор, поэтому нажмите Enter для подтверждения. 8. Укажите последний сектор, на котором будет заканчиваться раздел. По умолчанию предлагается последний доступный сектор на диске. Если вы используете это, после этого упражнения у вас не останется места на диске для создания дополнительных разделов или логических томов, поэтому вам следует использовать еще один последний сектор. Чтобы использовать еще один последний сектор, вы можете выполнить одно из следующих действий:

269

▪ ▪ ▪ ▪

Введите номер последнего сектора, который вы хотите использовать. Введите +number, чтобы создать раздел размером определенное количество секторов. Введите +number(K,M,G), чтобы указать размер, который вы хотите назначить для раздела, в KiB, MiB или GiB. Введите +1G, чтобы сделать этот раздел размером 1 ГиБ.

После того, как вы войдете в конечную границу раздела, fdisk покажет подтверждение. 9. На этом этапе вы можете определить тип раздела. По умолчанию используется тип раздела Linux. Если вы хотите, чтобы раздел был любого другого типа, используйте t, чтобы изменить его. В этом упражнении нет необходимости изменять тип раздела. Общие типы разделов включают следующее: ▪ ▪ ▪

82: подкачка Linux 83: Linux 8e: Linux LVM

(Примечание при переводе, что бы увидеть все возможные варианты типов разделов нажмите l) 10. Если вас устраивают изменения, нажмите w, чтобы записать их на диск и выйти из fdisk. Если вы создали раздел на диске, который уже используется, теперь вы можете увидеть следующее сообщение:

11. Это сообщение указывает, что раздел был успешно добавлен в таблицу разделов, но не удалось обновить таблицу разделов ядра в памяти. Вы можете увидеть это, сравнив вывод fdisk -l /dev/sda с выводом cat /proc/partitions, который показывает таблицу разделов ядра.

270

12. Введите partprobe /dev/sda, чтобы записать изменения в таблицу разделов ядра. Теперь раздел добавлен, и вы можете создать на нем файловую систему, как описано в разделе «Создание файловых систем». ПРИМЕЧАНИЕ. Сообщение «Не удалось перечитать таблицу разделов с ошибкой 16», только если вы добавляете разделы на диск, на котором уже есть несколько смонтированных разделов. Если вы работаете с новым диском, на котором нет подключенных разделов, вы не увидите эту ошибку, и вам не придется использовать команду partprobe. Использование расширенных и логических разделов в MBR В предыдущей процедуре вы узнали, как добавить основной раздел. Если три раздела уже созданы, остается место для еще одного основного раздела, после чего таблица разделов полностью заполняется. Если вы хотите выйти за пределы четырех разделов на MBR-диске, вам необходимо создать расширенный раздел. После этого вы можете создавать логические разделы внутри расширенного раздела. Использование логических разделов позволяет выйти за рамки ограничения в четыре раздела в MBR; но есть и недостаток. Все логические разделы существуют внутри расширенного раздела. Если что-то пойдет не так с расширенным разделом, у вас также есть проблема со всеми существующими в нем логическими разделами. Если вам нужно более четырех отдельных единиц распределения диска, возможно, вам лучше использовать LVM вместо логических разделов. В упражнении 14-2 вы узнаете, как работать с расширенными и логическими разделами. ПРИМЕЧАНИЕ. Расширенный раздел используется только для создания логических разделов. Вы не можете создавать файловые системы непосредственно на расширенном разделе!

Упражнение 14-2 Создание логических разделов 1. В shell root введите fdisk /dev/sda, чтобы открыть интерфейс fdisk. 2. Чтобы создать логический раздел, когда fdisk спросит, какой тип раздела вы хотите создать, введите e.

3. Если расширенный раздел является четвертым разделом, который вы записываете в MBR, он также будет последним разделом, который можно добавить в MBR. По этой причине он должен заполнить остальной жесткий диск вашего компьютера. Нажмите Enter, чтобы принять первый сектор по умолчанию, и снова нажмите Enter, когда fdisk запросит последний сектор. Обратите внимание, что этот расширенный раздел должен использовать остальную часть оставшегося дискового пространства, потому что все дисковое 271

пространство, не включенное в этот раздел, не может быть выделено на более позднем этапе.

4. Теперь, когда расширенный раздел создан, вы можете создать в нем логический раздел. Попрежнему находясь в интерфейсе fdisk, снова нажмите n. Утилита сообщит, что сейчас используются все первичные разделы, и по умолчанию предложит добавить логический раздел с номером раздела 5.

5. Нажмите Enter, чтобы принять первый сектор по умолчанию. Когда вас спросят о последнем секторе, введите +100M (или любой другой размер, который вы хотите использовать).

6. Теперь, когда логический раздел создан, введите w, чтобы записать изменения на диск, и выйдите из fdisk. Для завершения процедуры введите partprobe, чтобы обновить таблицу разделов ядра. Теперь новый раздел готов к использованию. СОВЕТ Утилита fdisk записывает изменения на диск, только когда вы вводите w, то есть команду записи fdisk. Если вы сделали ошибку и хотите выйти, нажмите q, чтобы выйти без сохранения изменений.

В упражнении 14-2 вы использовали команду partprobe, чтобы передать изменения из таблицы разделов в таблицу разделов ядра. Обычно это хорошо работает, но в некоторых случаях - нет. Если в любой момент вы получаете сообщение об ошибке при использовании partprobe, просто перезагрузите компьютер, используя команду reboot. Если разделы не были правильно записаны в вашу систему, вы действительно не хотите продолжать изменять разделы и управлять ими, потому что вы рискуете создать серьезные проблемы на своем сервере. 272

Создание разделов GPT с помощью gdisk Если на диске настроена таблица разделов GUID (GPT) или это новый диск, который еще ничего не содержит и имеет размер, превышающий 2 ТиБ, вам необходимо использовать утилиту gdisk для создания разделов GUID. У этой утилиты много общего с fdisk, но есть и некоторые отличия. Следующая процедура показывает, как создать разделы в gdisk. ПРЕДУПРЕЖДЕНИЕ! Никогда не используйте gdisk на диске, отформатированном с помощью fdisk и уже содержащем разделы fdisk. gdisk обнаружит наличие MBR и преобразует его в GPT (см. следующий листинг кода). После этого ваш компьютер, скорее всего, не сможет загрузиться! [root@localhost ~]# gdisk /dev/sda GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: MBR only BSD: not present APM: not present GPT: not present *********************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by typing 'q' if you don't want to convert your MBR partitions to GPT format! *********************************************************************** Command (? for help): Чтобы избавить вас от лишних хлопот, я проверил, что он делает то, что написано. После преобразования MBR в GPT ваш компьютер больше не запуститься.

В упражнении 14-3 показано, как создавать разделы с помощью gdisk. Упражнение 14-3 Создание разделов GPT с помощью gdisk Чтобы применить процедуру в этом упражнении, вам понадобится новое дисковое устройство. Не используйте диск, содержащий данные, которые вы хотите сохранить, потому что это упражнение удалит на нем все данные. Если вы выполняете это упражнение на виртуальной машине, вы можете добавить новый диск с помощью программного обеспечения виртуализации. Если вы работаете на физической машине, вы можете использовать флэш-накопитель USB в качестве дискового устройства для этого упражнения. Обратите внимание, что это упражнение отлично работает на компьютере, который запускается из BIOS, а не из EFI; все, что вам нужно, это выделенное дисковое устройство.

273

1. Чтобы создать раздел с помощью gdisk, введите gdisk /dev/sdb. (Замените /dev/sdb на точное имя устройства, используемое на вашем компьютере.) Gdisk попытается определить текущую структуру диска и, если ничего не обнаружит, создаст таблицу разделов GPT и связанную структуру диска.

2. Введите n, чтобы войти в новый раздел. Вы можете выбрать любой номер раздела от 1 до 128, но будет разумно принять предложенный номер раздела по умолчанию.

3. Теперь вам предлагается войти в первый сектор. По умолчанию будет использоваться первый сектор, доступный на диске, но вы также можете указать смещение. Это не имеет смысла, поэтому просто нажмите Enter, чтобы принять первый предложенный сектор по умолчанию.

4. При запросе последнего сектора по умолчанию предлагается последний сектор, доступный на диске (который создает раздел, заполняющий весь жесткий диск). Вы можете указать другой последний сектор или указать размер диска, используя +, размер и KMGTP. Итак, чтобы создать раздел на диске размером 100 МБ, используйте + 100 МБ.

5. Теперь вас попросят указать тип раздела. Если вы ничего не сделаете, будет выбран тип раздела 8300, который является типом раздела файловой системы Linux. Доступны и другие варианты. Вы можете нажать l, чтобы отобразить список доступных типов разделов.

274

Соответствующие типы разделов следующие: ▪ ▪ ▪

8200: подкачка Linux 8300: файловая система Linux 8e00: Linux LVM

Обратите внимание, что это те же типы разделов, что и те, которые используются в MBR, с двумя нулями, добавленными к идентификаторам. Вы также можете просто нажать Enter, чтобы принять тип раздела по умолчанию 8300. 6. Раздел создан (но еще не записан на диск). Нажмите p, чтобы отобразить обзор, который позволит вам убедиться, что это действительно то, что вы хотите использовать.

275

7. Если вас устраивает текущее разбиение на разделы, нажмите w, чтобы записать изменения на диск и зафиксировать. Это дает предупреждение, после которого новая таблица разделов записывается в таблицу разделов GUID.

8. Если на этом этапе вы получите сообщение об ошибке, указывающее, что таблица разделов уже используется, введите partprobe, чтобы обновить таблицу разделов ядра. Создание разделов GPT с помощью утилиты parted Как упоминалось ранее, помимо fdisk и gdisk, для создания разделов можно использовать утилиту parted. Поскольку он не поддерживает расширенные функции, я сосредоточился на fdisk и gdisk, но я хотел бы дать вам краткий обзор работы с parted. Чтобы использовать parted, вам нужно знать, что у него есть интерактивная оболочка, в которой вы можете работать с различными параметрами. Упражнение 14-4 проведет вас через процедуру создания разделов с помощью parted. Упражнение 14-4 Создание разделов с помощью parted Для работы с этой процедурой вам понадобится новый диск. В этом упражнении предполагается, что новое имя диска - /dev/sdc. Из шелл root введите parted /dev/sdc. Это открывает интерактивную оболочку parted. Введите help, чтобы получить обзор доступных команд. Введите print. Вы увидите сообщение о нераспознанной метке диска. Введите mklabel и нажмите Enter. parted теперь запросит тип метки диска. Дважды нажмите клавишу TAB, чтобы просмотреть список доступных типов меток дисков. В списке выберите gpt и нажмите Enter. 5. Введите mkpart. Утилита запрашивает имя раздела. Введите part1 (название раздела не имеет значения). 1. 2. 3. 4.

276

6. Теперь утилита запрашивает тип файловой системы. Это очень запутанный вариант, потому что он предполагает, что вы устанавливаете здесь тип файловой системы, но это не так. Кроме того, при использовании авто завершения Tab вы увидите список файловых систем, которые вы, вероятно, никогда раньше не использовали. Фактически, вы можете просто нажать Enter, чтобы принять вариант ext2 по умолчанию, поскольку этот параметр в любом случае не используется, но я предлагаю использовать тип файловой системы, близкий к тому, что вы собираетесь использовать в разделе. Поэтому введите xfs и нажмите Enter, чтобы продолжить. 7. Теперь вам будет предложено указать начальное местоположение. Вы можете указать начальное положение как количество блоков или смещение от начала устройства. Обратите внимание, что вы можете ввести 1M, чтобы указать начало раздела с 1 мегабайт, или введите 1 MiB, чтобы он начинался с 1 MiB. Это сбивает с толку, поэтому убедитесь, что вы указали здесь подходящее значение. На этом этапе введите 1 МБ и нажмите Enter. 8. Введите 1GiB, чтобы указать конец раздела. После этого введите print, чтобы распечатать текущую таблицу разделов, и введите quit, чтобы выйти из утилиты и зафиксировать изменения. Создание файловых систем На этом этапе вы знаете, как создавать разделы. Сам по себе раздел не очень полезен. Он станет полезным только в том случае, если вы решите что-то с ним сделать. Это часто означает, что вам нужно поставить поверх него файловую систему. В этом разделе вы узнаете, как это сделать. В RHEL 8 могут использоваться различные файловые системы. Таблица 14-4 дает обзор наиболее распространенных файловых систем.

Таблица 14-4 Обзор файловой системы

Файловая система XFS Ext4 Ext3 Ext2 BtrFS NTFS

VFAT

Описание Файловая система по умолчанию в RHEL 8. Файловая система по умолчанию в предыдущих версиях RHEL; все еще доступен и поддерживается в RHEL 8. Предыдущая версия Ext4. В RHEL 8 больше нет необходимости использовать Ext3. Очень простая файловая система, разработанная в начале 1990-х годов. Больше нет необходимости использовать эту файловую систему в RHEL8. Относительно новая файловая система, не поддерживаемая в RHEL 8. Файловая система, совместимая с Windows, не поддерживается в RHEL8. Файловая система, совместимая с Windows и Mac и являющаяся функциональным эквивалентом файловой системы FAT32. Полезно для флэш-накопителей USB, которые обмениваются данными с другими компьютерами, но не на жестких дисках сервера.

277

Чтобы отформатировать раздел с помощью одной из поддерживаемых файловых систем, вы можете использовать команду mkfs, используя параметр -t, чтобы указать, какую конкретную файловую систему использовать. В качестве альтернативы можно использовать один из инструментов, специфичных для файловой системы, например mkfs.ext4, для форматирования файловой системы Ext4. ПРИМЕЧАНИЕ Если вы используете mkfs без дополнительных указаний, какую файловую систему вы хотите отформатировать, будет отформатирована файловая система Ext2. Вероятно, это не то, что вы хотите использовать, поэтому не забудьте указать, какую файловую систему вы хотите использовать. Чтобы отформатировать раздел с файловой системой XFS по умолчанию, используйте команду mkfs -t xfs. В примере 14-1 показан результат этой команды. Пример 14-1 Форматирование файловой системы с помощью XFS

В упражнении 14-5 вы узнаете, как создать файловую систему. Упражнение 14-5 Создание файловой системы В упражнении 14-1 вы создали раздел /dev/sda3. В этом упражнении вы отформатируете его в файловой системе XFS. Это упражнение состоит только из одного шага. 1. В шелл root введите mkfs.xfs /dev/sda3.

Изменение свойств файловой системы При работе с файловыми системами также можно управлять некоторыми свойствами. Свойства файловой системы зависят от используемой файловой системы, поэтому вы работаете с разными свойствами и разными инструментами для разных файловых систем. Управление свойствами файловой системы Ext4 Общий инструмент для управления свойствами файловой системы Ext4 - tune2fs. Этот инструмент был разработан давно для файловой системы Ext2 но он также совместим с Ext3 и Ext4. При управлении свойствами файловой системы Ext4 лучше всего начать с tune2fs -l. В 278

примере 14-2 представлены выходные данные этой команды, где показаны различные свойства файловой системы. Пример 14-2. Отображение свойств файловой системы с помощью tune2fs –l

279

Как видите, команда tune2fs -l показывает множество свойств файловой системы. Одно интересное свойство - это метка файловой системы, которая отображается как имя тома файловой системы. Ярлыки используются для установки уникального имени файловой системы, что позволяет монтировать файловую систему согласованным образом, даже если имя основного устройства изменяется. Также интересны функции файловой системы и параметры монтирования по умолчанию. Чтобы изменить любой из параметров файловой системы по умолчанию, команда tune2fs позволяет вам сделать это с другими параметрами. Здесь перечислены некоторые распространенные примеры использования: ▪





Используйте tune2fs -o, чтобы установить параметры монтирования файловой системы по умолчанию. Если задана файловая система, параметр больше не нужно указывать при монтировании через /etc/fstab. Используйте, например, tune2fs -o acl,user_xattr для включения списков управления доступом и расширенных пользователем атрибутов. Используйте ^ перед параметром, чтобы выключить его снова, как в tune2fs -o ^acl,user_xattr. Файловые системы Ext также имеют функции файловой системы, которые могут быть включены по умолчанию. Чтобы включить функцию файловой системы, использовать tune2fs -O с последующей функцией. Чтобы отключить функцию, используйте символ ^ перед названием функции. Используйте tune2fs -L, чтобы установить метку в файловой системе. Как описано в разделе «Монтирование файловых систем» далее в этой главе, вы можете использовать метку файловой системы для монтирования файловой системы на основе ее имени, а не имени устройства. Вместо tune2fs -L это позволяет сделать команда e2label.

Управление свойствами файловой системы XFS Файловая система XFS - это совершенно другая файловая система, и по этой причине также имеет совершенно другой набор инструментов для управления ее свойствами. Он не позволяет вам устанавливать атрибуты файловой системы в метаданных файловой системы. Однако вы можете изменить некоторые свойства XFS с помощью команды xfs_admin, например, используйте xfs_admin -L mylabel, чтобы установить для метки файловой системы значение mylabel. Добавление разделов подкачки (Swap) Вы используете большинство разделов на сервере Linux для обычных файловых систем. В Linux пространство подкачки (Swap) обычно выделяется на дисковом устройстве. Это может быть раздел или логический том LVM (обсуждается в главе 15). В случае возникновения чрезвычайной ситуации вы даже можете использовать файл, чтобы увеличить доступное пространство подкачки. Использование Swap в Linux - удобный способ улучшить использование памяти ядром Linux. Если возникает нехватка физической ОЗУ, страницы памяти, которые не использовались недавно, могут быть перемещены в Swap, что делает больше ОЗУ доступным для программ, которым требуется доступ к страницам памяти. По этой причине большинство серверов Linux настроены с определенным объемом Swap. Однако, если своп начинает интенсивно использоваться, у вас могут возникнуть проблемы, и поэтому использование свопа следует тщательно контролировать. 280

Иногда имеет смысл выделить больше места для свопа. Если возникает нехватка памяти, эту нехватку можно уменьшить, выделив в некоторых случаях больше места Swap. (См. Главу 25, «Настройка служб времени», для получения дополнительной информации об оптимизации производительности системы.) Это выполняется с помощью процедуры, в которой сначала создается раздел с типом раздела подкачки, а затем этот раздел форматируется как раздел подкачки. В упражнении 14-6 описано, как это сделать. Упражнение 14-6 Создание раздела подкачки 1. Введите fdisk /dev/sda, чтобы открыть диск в fdisk. (Используйте gdisk, если вы используете диск с таблицей разделов GUID.) 2. Нажмите n, чтобы добавить новый раздел. Укажите начальные и конечные цилиндры и их размер. 3. Введите t, чтобы изменить тип раздела. Если вы используете fdisk, используйте тип раздела 82. Если вы используете gdisk, используйте тип раздела 8200. 4. Используйте mkswap, чтобы отформатировать раздел как пространство подкачки (swap). Используйте, например, mkswap /dev/sda6, если вы только что создали раздел /dev/sda6. 5. Введите free -m. Вы видите объем пространства подкачки, которое в настоящее время выделено. Сюда не входит пространство подкачки, которое вы только что создали, поскольку его еще нужно активировать. 6. Используйте swapon, чтобы включить недавно выделенное пространство подкачки. Если, например, вы только что создали устройство подкачки на устройстве /dev/sda6, используйте swapon /dev/sda6, чтобы активировать пространство подкачки. 7. Снова введите free -m. Вы видите, что к вашему серверу добавлено новое пространство подкачки. Добавление файлов подкачки Если у вас нет свободного места на диске для создания раздела подкачки, и вам нужно срочно добавить пространство подкачки, вы также можете использовать файл подкачки. С точки зрения производительности это даже не имеет большого значения, если файл подкачки используется вместо устройства подкачки, такого как раздел или логический том, и это может помочь вам своевременно удовлетворить неотложную потребность. Чтобы добавить файл подкачки, вам нужно сначала создать файл. Команда dd if=/dev/zero of=/swapfile bs=1M count=100 добавит 100 блоков размером 1 МиБ с устройства /dev/zero (которое генерирует нули) в файл /swapfile. В результате получается файл размером 100 МБ, который можно настроить как файл подкачки. Для этого вы можете выполнить ту же процедуру, что и для разделов подкачки. Сначала используйте mkswap /swapfile, чтобы пометить файл как файл подкачки, а затем используйте swapon /swapfile для его активации. Монтирование файловых систем Просто создать раздел и поместить на него файловую систему недостаточно, чтобы начать его использовать. Чтобы использовать раздел, его также необходимо смонтировать. Монтируя раздел (или, лучше сказать, файловую систему на нем), вы делаете его содержимое доступным через определенный каталог. Чтобы смонтировать файловую систему, необходима некоторая информация: 281

▪ ▪ ▪



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

Монтирование файловых систем вручную Чтобы вручную смонтировать файловую систему, используется команда mount. Для отключения смонтированной файловой системы используется команда umount. Использовать эти команды относительно просто. Чтобы смонтировать файловую систему, которая находится на /dev/sda5, в каталог /mnt, например, используйте следующую команду: mount /dev/sda5 /mnt Чтобы отключить монтирование, вы можете использовать umount либо с именем устройства, либо с именем точки монтирования, которую вы хотите отключить. Итак, обе следующие команды будут работать: umount /dev/sda5 umount /mnt Использование имен устройств, UUID или меток дисков Для монтирования устройства можно использовать имя устройства, как в команде mount /dev/sda5 /mnt. Если ваш сервер используется в среде, где используется топология динамического хранилища, это не всегда лучший подход. Сегодня у вас может быть устройство хранения /dev/sda5, которое после изменений в топологии хранилища может быть /dev/sdb5 после следующей перезагрузки вашего сервера. Вот почему при установке RHEL 8 по умолчанию вместо имен устройств используются UUID. Каждая файловая система по умолчанию имеет связанный с ней UUID - не только файловые системы, которые используются для хранения файлов, но и специальные файловые системы, такие как файловая система подкачки (swop). Вы можете использовать команду blkid, чтобы получить обзор текущих файловых систем в вашей системе и UUID, который используется этой файловой системой. До того, как использование UUID стало обычным явлением, файловые системы часто настраивались для работы с метками, которые можно было установить с помощью команды e2label или команды xfs_admin -L. Это стало более редким явлением в последних версиях Linux.

282

Если у файловой системы есть метка, команда blkid также покажет ее, как показано в Примере 143.

Пример 14-3 Использование blkid для поиска UUID текущей файловой системы

Чтобы смонтировать файловую систему на основе UUID, вы используете UUID=nnnnn вместо имени устройства. Итак, если вы хотите смонтировать /dev/sda5 из примера 14-3 на основе его UUID, команда будет иметь следующий вид: mount UUID = "42f419c4-633f-4ed7-b161-519a4dadd3da" /mnt Ручная установка устройств с использованием UUID не проста. Однако, если монтирование автоматизировано, как описано в следующем разделе, имеет смысл использовать UUID вместо имен устройств. Чтобы смонтировать файловую систему с помощью метки (label), вы используете команду mount LABEL=labelname. Например, используйте команду mount LABEL=mylabel /mnt, чтобы временно смонтировать файловую систему с именем mylabel в каталог /mnt. Автоматизация монтирования файловой системы с помощью / etc / fstab Обычно вы не хотите монтировать файловые системы вручную. Когда вы будете довольны ими, рекомендуется установить их автоматически. Классический способ сделать это использовать файл /etc/fstab. В примере 14-4 показан пример содержимого этого файла. Пример 14-4 Пример содержимого файла /etc/fstab

283

В файле /etc/fstab все указано для автоматического монтирования файловой системы. Для этого каждая строка имеет шесть полей, как показано в Таблице 14-5.

Таблица 14-5 Поля /etc/fstab Поле Device Mount Point

Описание Устройство, которое необходимо установить. Можно использовать имя устройства, UUID или метку (label). Каталог или интерфейс ядра, в котором необходимо смонтировать устройство.

File System

Тип файловой системы.

Опции mount

Опции mount

Dump Support

Автоматическая проверка

Используйте 1, чтобы включить поддержку резервного копирования с помощью утилиты Dump. Это может быть необходимо для некоторых решений для резервного копирования. Указывает, должна ли файловая система проверяться автоматически при загрузке. Используйте 0, чтобы отключить автоматическую проверку, 1, если это корневая файловая система, и она должна проверяться автоматически, и 2 для всех других файловых систем, которые требуют автоматической проверки при загрузке. В сетевых файловых системах для этого параметра должно быть установлено значение 0.

Основываясь на том, что ранее обсуждалось о команде mount, у вас не должно возникнуть проблем с пониманием полей Device, Mount Point и File System в /etc/fstab. Обратите внимание, что в точке монтирования не все файловые системы используют имя каталога. Некоторые системные устройства, такие как swap, монтируются не в каталоге, а в интерфейсе ядра. Легко распознать, когда используется интерфейс ядра; его имя не начинается с / (и не существует в файловой системе на вашем сервере). Поле «Параметры монтирования (Mount Options)» определяет конкретные параметры монтирования, которые можно использовать. Если никаких конкретных параметров не требуется, в этой строке будет указано просто «по умолчанию (defaults)». Чтобы предложить конкретную функциональность, здесь можно указать большое количество вариантов монтирования. Таблица 14-6 дает обзор некоторых из наиболее распространенных вариантов монтирования.

Таблица 14-6 Общие опции монтирования

Опции auto/ noauto acl

Использование Файловая система [не] будет смонтирована автоматически. Добавлена поддержка списков управления доступом к файловой системе (см. Главу 7, «Управление разрешениями»). 284

user_xattr ro atime / noatime noexec / exec _netdev

Добавляет поддержку расширенных пользователем атрибутов (см. Главу 7). Монтирует файловую систему в режиме только для чтения. Отключает или включает изменение времени доступа. Запрещает или разрешает выполнение программных файлов из файловой системы. Используйте это для монтирования сетевой файловой системы. Это указывает fstab дождаться доступности сети перед монтированием этой файловой системы.

В пятом столбце файла /etc/fstab указана поддержка утилиты dump. Это утилита, разработанная для создания резервных копий файловой системы. Рекомендуется включить эту функцию, указав 1 для всех реальных файловых систем, и выключить ее, указав 0 для всех системных монтирований. Последний столбец указывает, нужно ли проверять целостность файловой системы при загрузке. Поставьте 0, если вы вообще не хотите проверять файловую систему, 1, если это корневая файловая система, которую необходимо проверить перед чем-либо еще, и 2, если это некорневая файловая система, которую необходимо проверить, пока загрузка. В упражнении 14-7 вы узнаете, как монтировать разделы через /etc/fstab, монтируя раздел /dev/sda5 в формате XFS, который вы создали в предыдущих упражнениях. ПРЕДУПРЕЖДЕНИЕ. Если файловая система через /etc/fstab помечена для автоматической проверки файловой системы и что-то препятствует правильной проверке файловой системы, ваша система перестает загружаться и предложит ввести пароль root для входа в режим обслуживания (enter root password to enter maintenance mod). Чтобы этого никогда не происходило, вы можете отключить автоматические проверки при загрузке. См. Главу 18 «Основные навыки устранения неполадок» для получения дополнительной информации о том, как исправить этот конкретный случай.

Упражнение 14-7 Монтирование разделов с помощью /etc/fstab 1. В корневой оболочке root введите blkid. Используйте мышь, чтобы скопировать часть UUID="nnnn" для /dev/sda5. 2. Введите mkdir -p /mounts/data, чтобы создать точку монтирования для этого раздела. UUID="nnnn" /mounts/data xfs defaults 1 2 3. Откройте /etc/fstab в редакторе и добавьте следующую строку: 4. Перед попыткой автоматического монтирования при перезагрузке рекомендуется проверить конфигурацию. Введите mount -a. При этом монтируется все, что указано в /etc/fstab и еще не смонтировано. 5. Введите df -h, чтобы убедиться, что раздел смонтирован правильно.

285

Резюме В этой важной главе вы узнали, как работать с разделами и файловыми системами в RHEL 8. Вы узнали, как создавать разделы для дисков MBR и GPT и как разместить файловую систему поверх раздела. Вы также узнали, как монтировать эти разделы вручную и автоматически через /etc/fstab.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 14-7 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 13-5 Ключевые темы главы 14 Элемент ключевой темы

Описание

Страница

Таблица 14-2

Характеристики размера диска

267

Таблица 14-3

Общие типы дисковых устройств

267

Таблица 14-4

Обзор файлов системного журнала

277

Таблица 14-5

Поля /etc/fstab

284

Таблица 14-6

Общие опции монтирования

284

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: BIOS, MBR, partition, primary partition, extended partition, logical partition, GPT, mount, umount, UUID, label, Ext2, Ext3, Ext4, XFS, BtrFS, VFAT, fstab

286

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 11. Какой инструмент вы используете для создания разделов GUID? 12. Какой инструмент вы используете для создания разделов MBR? 13. Какая файловая система используется по умолчанию в RHEL 8? 14. Как называется файл, который используется для автоматического монтирования разделов при загрузке? 15. Какой вариант монтирования вы используете, если хотите, чтобы файловая система не монтировалась автоматически при загрузке? 16. Какая команда позволяет отформатировать раздел типа 82 в соответствующей файловой системе? 17. Вы только что добавили пару разделов для автоматического монтирования при загрузке. Как вы можете безопасно проверить, будет ли это работать без перезагрузки? 18. Какая файловая система создается, если вы используете команду mkfs без указания файловой системы? 19. Как отформатировать раздел Ext4? 20. Как найти UUID для всех устройств на вашем компьютере?

Лабораторная работа в конце главы В упражнениях, которые вы выполнили в этой главе, вы уже создали разделы. Прежде чем приступить к этой лабораторной работе в конце главы, рекомендуется начать с чистой установки. В упражнении 14-1 вы создали несколько файлов резервных копий. Прежде чем приступить к работе в этой лабораторной работе, восстановите исходную настройку, выполнив следующие два шага: 1. Введите dd if=/dev/diskfile of=/dev/sda. (Используйте of=/dev/vda, если ваше дисковое устройство /dev/vda вместо /dev/sda.) 2. Скопируйте резервную копию файла /etc/fstab, используя cp /root/fstab/etc. Это восстанавливает исходную конфигурацию. Теперь вы готовы приступить к лабораторной работе в конце главы. После успешного завершения этой лабораторной работы повторите эту процедуру. Это позволяет вам работать с чистыми дисками при создании логических томов LVM, как описано в следующей главе.

Лабораторная работа 14.1 1. Добавьте к вашему серверу два раздела. Если возможно, поместите их на основной диск, который используется на вашем сервере. Если это невозможно, используйте второй (виртуальный или USB) диск для добавления этих разделов. Создайте оба раздела размером 100 МБ. Один из этих разделов должен быть настроен как пространство подкачки (swop); другой раздел должен быть отформатирован в файловой системе Ext4. 287

2. Настройте сервер на автоматическое монтирование этих разделов. Смонтируйте раздел Ext4 в /mounts/data и смонтируйте раздел подкачки как пространство подкачки. 3. Перезагрузите сервер и убедитесь, что все правильно смонтировано. В случае возникновения проблем прочтите главу 18 «Основные навыки устранения неполадок», в которой приведены советы по устранению неполадок.

288

Глава 15 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪ ▪

Понимание LVM Создание логических томов LVM Изменение размера логических томов LVM Настройка Stratis Настройка VDO

В этой главе рассматривается следующая цель экзамена RHCSA: ▪ ▪ ▪ ▪ ▪ ▪

Создание и удаление физических томов Назначение физических томов группам томов Создание и удаление логических томов Расширить существующие логические тома Настроить сжатие диска Управление многоуровневым хранилищем.

В главе 14 «Управление хранилищем» вы узнали, как управлять разделами на жестком диске. Создание нескольких разделов на диске полезно, поскольку оно позволяет хранить различные типы данных в отдельных разделах, но не обеспечивает гибкости, которую предлагают передовые решения для хранения данных. В этой главе вы узнаете, как работать с расширенными решениями для хранения, включая Logical Volume Manager (LVM), Stratis и Virtual Data Optimizer (VDO).

Планирование задач Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 15 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 15 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Понимание LVM

1-2

Создание логических томов LVM

3-5 289

Изменение размера логических томов LVM

6

Настройка Stratis

7–8

Настройка VDO

9 - 10

1. Что из перечисленного не является стандартным компонентом LVM-системы? a. b. c. d.

Logical volume File system Volume group Physical volume

2. Что из перечисленного не является функцией LVM? a. b. c. d.

Изменение размера Горячая замена вышедшего из строя диска Копирование при записи Снимки (Snapshots)

3. Какой тип раздела вам нужен на GPT-разделе, чтобы пометить его как тип раздела LVM? a. b. c. d.

83 8e 8300 8e00

4. Какая из следующих команд правильно показывает, как создать логический том, который использует 50% доступного дискового пространства в группе томов? a. b. c. d.

vgadd -n lvdata -l +50%FREE vgdata lvcreate lvdata -l 50%FREE vgdata lvcreate -n lvdata -l 50%FREE vgdata lvadd -n lvdata -l 50% FREE /dev/vgdata

5. Какая команда показывает обзор доступных физических томов (physical volumes) (Выберите два.) a. b. c. d.

pvshow pvdisplay pvs pvlist

6. Какое утверждение об изменении размера логических томов LVM неверно? a. Размер файловой системы Ext4 можно увеличивать и уменьшать. b. Используйте lvextend с параметром -r для автоматического изменения размера файловой системы. c. Размер файловой системы XFS изменить нельзя.

290

d. Чтобы увеличить размер логического тома, вам потребуется выделяемое пространство в группе томов. 7. Какой объем хранилища используется в файловой системе Stratis для хранения метаданных? a. b. c. d.

527 МБ 1 ГиБ 4 МБ 4 ГиБ

8. В какой из следующих строк правильно показано, как монтировать файловую систему Stratis через /etc/fstab? a. b. c. d.

UUID=abcd /stratis xfs defaults 0 0 /dev/stratis/stratis1 /stratis xfs defaults,x-systemd.requires= stratis.service 0 0 UUID=abcd /stratis xfs defaults,x-systemd.requires=stratis.service 0 0 /dev/stratis/stratis1 /stratis xfs defaults 0 0

9. В какой из следующих сред может быть полезно использование VDO? (Выберите все, что подходит.) a. b. c. d.

Виртуализация (Virtualization) Базы данных (Databases) Контейнеры (Containers) Облачное хранилище (Cloud storage)

10. Какой вариант следует использовать при форматировании устройства VDO с файловой системой XFS, чтобы гарантировать, что пустые блоки не удаляются немедленно? a. b. c. d.

-k -K -d –D

Основные темы Понимание LVM На заре серверов Linux, хранение данных осуществлялось путем создания разделов на дисках. Даже если этот подход действительно работает, есть некоторые недостатки, самый важный из которых – не гибкость использования дисков Logical Volume Manage. Вот почему был представлен Диспетчер логических томов (Logical Volume Manage). Несмотря на то, что невозможно динамически увеличивать раздел, на котором заканчивается дисковое пространство, это возможно при работе с LVM. LVM также предлагает множество других преимуществ, о которых вы узнаете из этой главы. Архитектура LVM

291

В архитектуре LVM можно выделить несколько уровней. На самом нижнем уровне используются устройства хранения. Это могут быть любые устройства хранения, такие как полные диски, разделы, логические блоки (LUN) в сети хранения данных (SAN) и все остальное, что возможно в современных топологиях хранения. В этой главе вы узнаете, как использовать разделы в качестве физических томов (physical volumes), что является рекомендуемой практикой. Используя разделы вместо полных дисковых устройств, прочие инструменты могут легко распознать, что некоторое хранилище уже было настроено на блочном устройстве, что снижает вероятность возникновения неправильной конфигурации. Устройства хранения должны быть помечены как физические тома (physical volumes), что делает их пригодными для использования в среде LVM и делает их пригодными для использования другими утилитами, пытающимися получить доступ к логическому тому. Запоминающее устройство, которое является физическим томом, может быть добавлено в группу томов (volume group), которая является абстракцией всего доступного хранилища. «Абстракция» означает, что группа томов не является чем-то фиксированным, но ее размер может быть изменен при необходимости, что позволяет добавить больше места на уровне группы томов, когда томам не хватает места на диске. Идея проста: если у вас заканчивается дисковое пространство на логическом томе, вы берете доступное дисковое пространство из группы томов. А если в группе томов нет доступного дискового пространства, вы просто добавляете его, добавляя физический том. В верхней части группы томов находятся логические тома (logical volumes). Логические тома не работают с дисками напрямую, а получают свое дисковое пространство из доступного дискового пространства в группе томов. Это означает, что логический том может состоять из доступного хранилища из нескольких физических томов, что добавляет важный уровень дополнительной гибкости к конфигурации хранилища. ПРИМЕЧАНИЕ. Рекомендуется избегать того, чтобы логические тома занимали несколько физических томов; если один из физических томов сломается, все файлы в файловой системе LVM станут недоступны.

На рис. 15-1 представлен обзор архитектуры LVM.

292

Фактические файловые системы создаются на логических томах. Поскольку логические тома гибки в отношении размера, это также делает гибкими файловые системы. Если файловой системе не хватает места на диске, относительно легко расширить файловую систему или уменьшить ее, если файловая система позволяет это. Обратите внимание, что для изменения размера файловых систем при изменении размера логических томов файловые системы должны предлагать такую поддержку. Возможности LVM LVM хорош по нескольким причинам. Самая главная причина в том, что LVM предлагает гибкое решение для управления хранилищем. Объемы больше не привязаны к ограничениям физических жестких дисков. Если требуется дополнительное пространство для хранения, группу томов можно легко расширить, добавив новый физический том, чтобы можно было добавить дисковое пространство к логическим томам. Также возможно уменьшить размер логического тома, но только если файловая система, созданная на этом томе, поддерживает функцию уменьшения размера файловой системы. Еще одна важная причина, по которой администраторам нравится использовать LVM, - это поддержка моментальных снимков (snapshots). Моментальный снимок сохраняет текущее состояние логического тома и может использоваться для возврата к предыдущему состоянию или для создания резервной копии файловой системы на логическом томе, если том открыт. Использование моментальных снимков имеет важное значение в стратегиях резервного копирования. Снимки (snapshots) LVM создаются путем копирования административных данных логического тома (метаданных), которые описывают текущее состояние файлов, на том снимка. Пока ничего не меняется, из метаданных снимка LVM адресуются исходные блоки в исходном томе. Когда блоки изменяются, блоки, содержащие предыдущее состояние файла, копируются в том моментального снимка, который по этой причине будет увеличиваться. Использование этого метода гарантирует, что, получив доступ к тому моментального снимка LVM, можно будет получить доступ к точному состоянию файлов, каким они были на момент создания моментального снимка. Поскольку моментальный снимок будет увеличиваться при изменении файлов на исходном томе, при планировании моментальных снимков (snapshots) необходимо убедиться, что на диске доступен достаточный объем дискового пространства. Кроме того, снимки должны быть временными: как только snapshots выполнил свою задачу, его можно удалить. Третье важное преимущество использования логических томов LVM - возможность простой замены вышедшего из строя оборудования. Если жесткий диск выходит из строя, данные могут быть перемещены внутри группы томов (с помощью команды pvmove), отказавший диск затем может быть удален из группы томов, а новый жесткий диск может быть добавлен динамически, без простоя для сам логический том. Создание логических томов LVM Создание логических томов LVM включает создание трех уровней в архитектуре LVM. Сначала вам нужно преобразовать физические устройства, такие как диски или разделы, в физические тома (physical volumes (PV)); потом вам нужно создать группу томов (volume group (VG)) и назначить ей PV. В качестве последнего шага вам нужно создать сам логический том (logical volume (LV)). В этом разделе вы узнаете, что используется для создания этих трех уровней. Существуют разные утилиты для создания логических томов LVM. В этой главе основное внимание уделяется использованию утилит командной строки. Они относительно просты в 293

использовании и доступны во всех средах (независимо от того, используете ли вы графический интерфейс или нет). СОВЕТ Вам совершенно не нужно запоминать команды, описанные в этой главе, для экзамена RHCSA. Все, что вам действительно нужно помнить, это pv, vg и lv. Откройте командную строку, введите pv и дважды нажмите клавишу TAB. Это покажет все команды, начинающиеся с pv, т.е. все команды, которые используются для управления физическими томами. После того, как вы нашли нужную команду, запустите эту команду с параметром --help. Это показывает сводку использования, в которой перечислены все, что вы должны сделать, чтобы создать нужный вам элемент. В примере 15-1 показан пример команды pvcreate --help (которая объясняется в следующем подразделе).

Пример 15-1. Запрос справки по команде pvcreate

294

Создание Physical Volumes Прежде чем вы сможете использовать инструменты LVM для создания физических томов, вам необходимо создать раздел, помеченный как, тип раздела LVM. По сути, это та же процедура, что описана в главе 14, с той лишь разницей, что перед записью изменений на диск вам необходимо изменить тип раздела. В fdisk и gdisk вы можете использовать t из меню, чтобы изменить тип. Если вы используете MBR-диск, тип раздела - 8e. Если вы используете GUID-диск, используйте тип раздела 8e00. Если вы используете parted для создания разделов, вам нужно использовать команду set n lvm on из интерфейса parted (где n - номер раздела, который вы хотите пометить для использования с LVM). После создания раздела и отметки его как, тип раздела LVM вам необходимо использовать команду pvcreate, чтобы пометить раздел, как физический том (physical volume). Команда записывает некоторые метаданные в раздел, что позволяет использовать их в дальнейшем в группе томов (volume group). Вся процедура описана в упражнении 15-1, в котором вы создаете физический том. Также см. Пример 15-2 для обзора этой процедуры. Упражнение 15-1 Создание физического тома (Physical Volume) Для выполнения этого упражнения вам понадобится жесткий диск со свободным (неразмеченным) дисковым пространством. Рекомендуемый способ освободить место на диске добавить новый жесткий диск в среду виртуальной машины. В этом упражнении я использую чистое устройство с именем /dev/sdc для создания раздела. Возможно, вам придется изменить имя устройства в соответствии с вашей конфигурацией. Если у вас нет выделенного жесткого диска для создания этой конфигурации, вы можете подумать о подключении USB-диска к вашей машине. 1. Откройте root оболочку и введите parted /dev/sdc. 2. Введите print. Вывод команды покажет текущий макет таблицы разделов. На этом этапе их не должно быть. 3. Введите mklabel msdos, чтобы задать тип раздела, совместимого с MBR. 4. Введите mkpart, чтобы начать процедуру создания раздела, и введите primary, когда вас спросят о типе раздела. 5. Введите xfs, чтобы указать, что следует использовать файловую систему XFS. При запросе начальной позиции раздела введите 1 МиБ, а когда его спросят о конце, введите 1 ГиБ. 6. Введите set 1 lvm on, чтобы включить в разделе тип раздела LVM. 7. Теперь, когда создан раздел с правильным типом раздела, введите quit, чтобы закрыть интерфейс parted. 8. Теперь, когда раздел создан, вам нужно пометить его, как физический том LVM. Для этого введите pvcreate /dev/sdc1. Теперь вы должны получить следующий вывод: Physical volume “/dev/sdc1” successfully created. 9. Введите pvs, чтобы убедиться, что физический том был успешно создан. Результат может выглядеть, как в примере 15-3. Обратите внимание, что в этом списке уже существует другой физический том; это потому, что RHEL по умолчанию использует LVM для организации хранения. Пример 15-2 Создание раздела LVM в parted

295

Пример 15-3 Проверка состояния физических томов (Physical Volume)

В качестве альтернативы команде pvs, которая показывает сводку физических томов и их атрибутов, вы также можете использовать команду pvdisplay для отображения более подробной информации. В примере 15-4 показан пример вывода этой команды. Если вам нужен очень компактный обзор текущей конфигурации хранилища на вашем сервере, вам также может понравиться команда lsblk. Как показано в примере 15-5, эта команда дает иерархический обзор того, какие диски и разделы используются в каких группах томов LVM и логических томах.

Пример 15-4 Пример вывода команды pvdisplay

296

Пример 15-5 Использование lsblk для краткого обзора текущей конфигурации хранилища

Создание групп томов (Volume Groups) Теперь, когда физический том создан, вы можете назначить его группе томов. Можно добавить физический том к существующей группе томов (что обсуждается позже в этой главе), но сей час вы узнаете, как создать новую группу томов и добавить к ней физический том. Это простая процедура с одной командой. Просто введите vgcreate, затем имя группы томов, которую вы хотите создать, и имя физического устройства, которое вы хотите добавить к ней. Итак, если имя физического тома - /dev/sdc1, полная команда будет иметь вид - vgcreate vgdata /dev/sdc1. Вы совершенно свободны в выборе имени для группы томов. Мне нравится начинать все имена групп томов с vg, что позволяет легко находить группы томов, если их много, но вы можете выбрать все, что захотите. Между предыдущим разделом и предыдущим абзацем вы узнали, как создать группу томов в двухэтапной процедуре, когда вы сначала создаете физический том с помощью команды pvcreate, а затем добавляете группу томов с помощью команды vgcreate. Вы также можете сделать это в одноэтапной процедуре (где использование отдельной команды pvcreate не требуется). 297

Однако, если вы добавляете раздел в группу томов, он должен быть уже помечен как тип раздела LVM. Одноэтапная процедура особенно полезна для добавления всего дискового устройства (которое не нужно маркировать как-либо). Если вы хотите добавить диск /dev/sdc, например, просто введите vgcreate vgdata /dev/sdc, чтобы создать группу томов (Volume Groups) vgdata, содержащую устройство /dev/sdc. Когда вы делаете это для добавления устройства, которое еще не было помечено как физический том, утилита vgcreate автоматически пометит его как физический том. При создании групп томов используется физический размер экстента. Размер физического экстента определяет размер строительных блоков, используемых для создания логических томов. Логический том всегда имеет размер, кратный размеру физического экстента. Если вам нужно создать огромные логические тома, более эффективно использовать большой физический экстент. Если вы ничего не укажете, используется размер экстента по умолчанию 4,00 МиБ. Размер физического экстента всегда указывается кратным 2 МиБ с максимальным размером 128 МиБ. Используйте параметр vgcreate -s, чтобы указать размер физического экстента, который вы хотите использовать. ПРИМЕЧАНИЕ При работе с LVM следует учитывать размер физического экстента. Это размер основных строительных блоков, используемых в конфигурации LVM. При работе с файловой системой ext4 используются логические экстенты. Размеры экстентов LVM никоим образом не связаны с размерами экстентов, используемых в файловых системах.

После создания группы томов вы можете запросить подробные сведения о группе томов, используя команду vgs для краткого обзора или команду vgdisplay для получения дополнительной информации. В примере 15-6 показан пример вывода команды vgdisplay. Пример 15-6 Отображение свойств текущей группы томов

298

Создание логических томов и файловых систем Теперь, когда группа томов создана, вы можете начать создавать из нее логические тома. Эта процедура немного сложнее, чем создание физических томов или групп томов, поскольку необходимо сделать больше вариантов. При создании логического тома необходимо указать имя и размер тома. Размер тома можно указать как абсолютное значение с помощью опции -L. Используйте, например, -L 5G для создания тома LVM размером 5 ГиБ. В качестве альтернативы вы можете использовать относительные размеры с параметром -l, например, используйте -l 50% FREE, чтобы использовать половину всего доступного дискового пространства. Далее вам потребуется указать имя группы томов, которой назначен логический том, и, при желании (но настоятельно рекомендуется), вы можете использовать -n для указания имени логического тома. Например, используйте lvcreate -n lvvol1 -L 100M vgdata, чтобы создать логический том с именем lvvol1 и добавить его в группу томов vgdata. После создания логического тома вы можете использовать утилиту mkfs для создания файловой системы поверх него. Понимание именования устройств LVM Теперь, когда логический том создан, вы можете начать его использовать. Для этого нужно знать название устройства. К именам устройств томов LVM можно обращаться разными способами. Самый простой способ - адресовать устройство как /dev/vgname/lvname. Так, например, если вы создали том с именем lvdata, который получает доступное дисковое пространство из группы томов vgdata, имя устройства будет /dev/vgdata/lvdata, что на самом деле является символической ссылкой на устройство. имя сопоставляется (поясняется далее). Для именования томов LVM играет роль другая система: сопоставитель устройств (device mapper). Устройство сопоставления устройств (device mapper) (сокращенно dm) - это общий интерфейс, который ядро Linux использует для адресации устройств хранения. Устройство сопоставления используется несколькими типами устройств, такими как тома LVM, а также программным RAID и продвинутыми сетевыми устройствами, такими как устройства с несколькими путями. Устройства device mapper генерируются при обнаружении и используют бессмысленные имена, такие как /dev/dm-0 и /dev/dm-1. Чтобы упростить доступ к этим устройствам, устройство device mapper создает символические ссылки в каталоге /dev/mapper, указывающие на эти бессмысленные имена устройств. Символьные ссылки следуют структуре именования /dev/mapper/vgname-lvname. Итак, устройство /dev/vgdata/lvdata также будет называться /dev/mapper/vgdatalvdata. При работе с логическими томами LVM вы можете использовать любое из этих имен устройств. В примере 15-7 показан обзор различных имен устройств LVM, предоставленных средством сопоставления устройств. В упражнении 15-2 вы узнаете, как создать группу томов и логические тома. Пример 15-7 Обзор имени устройства LVM

299

Упражнение 15-2 Создание группы томов и логических томов В упражнении 15-1 вы создали физический том. В этом упражнении вы продолжите работу с этим физическим томом и назначите его группе томов. Затем вы добавляете логический том из этой группы томов. Вы может работать над этим упражнением только после успешного выполнения упражнения 15-1. 1. Откройте root оболочку. Введите pvs, чтобы проверить доступность физических томов на вашем компьютере. Вы должны увидеть физический том /dev/sdc1, который был создан ранее. 2. Введите vgcreate vgdata /dev/sdc1. Это создаст группу томов с назначенным ей физическим томом. 3. Введите vgs, чтобы убедиться, что группа томов создана успешно. Также введите pvs. Обратите внимание, что эта команда теперь показывает имя физических томов с именами группы томов, которым они назначены. 4. Введите lvcreate -n lvdata -l 50% FREE vgdata. Команда создает логический том LVM с именем lvdata, который будет использовать 50% доступного дискового пространства в группе томов vgdata. 5. Введите lvs, чтобы убедиться, что том был добавлен успешно. 6. На этом этапе вы готовы создать файловую систему поверх логического тома. Введите mkfs.ext4 /dev/vgdata/lvdata, чтобы создать файловую систему. 7. Введите mkdir /files, чтобы создать папку, в которой можно смонтировать том. 8. Добавьте следующую строку в конец /etc/fstab: /dev/vgdata/lvdata /files ext4 по умолчанию 0 0 9. Введите mount -a, чтобы убедиться, что монтирование работает, и смонтируйте файловую систему.

В Таблице 15-2 приведены соответствующие команды для создания логических томов.

Команда

Объяснение

pvcreate

Создает физические тома

pvs

Показывает сводку доступных физических томов

pvdisplay

Показывает список физических томов и их свойств

pvremove

Удаляет сигнатуру физического тома с блочного устройства

vgcreate

Создает группы томов

vgs

Показывает сводку доступных групп томов

vgdisplay

Показывает подробный список групп томов и их свойств

vgremove

Удаляет группу томов

lvcreate

Создает логические тома

lvs

Показывает сводку всех доступных логических томов

300

lvdisplay

Показывает подробный список доступных логических томов и их свойств

lvremove

Удаляет логический том

Изменение размера логических томов LVM Одним из основных преимуществ использования LVM является то, что LVM позволяет легко изменять размер, что очень полезно, если в вашей файловой системе заканчивается доступное дисковое пространство. Если используется файловая система XFS, размер тома можно увеличивать, но не уменьшать. Другие файловые системы, такие как Ext4, также поддерживают уменьшение размера файловой системы. Уменьшение файловой системы Ext4 можно выполнить только в автономном режиме, что означает, что вам нужно размонтировать ее, прежде чем вы сможете изменить ее размер. В этом разделе вы узнаете, как увеличить размер логического тома LVM. Чтобы увеличить размер логического тома, вам необходимо иметь доступное дисковое пространство в группе томов, поэтому мы сначала рассмотрим это. Изменение размера групп томов Самая важная особенность гибкости LVM заключается в том, что очень легко изменить размер группы томов и логических томов, которые используют дисковое пространство из групп томов. Команда vgextend используется для добавления хранилища в группу томов, а команда vgreduce используется для удаления физических томов из группы томов (что может привести к некоторым дополнительным сложностям). Для экзамена RHCSA вам необходимо знать, как расширить доступное хранилище в группах томов. Эта процедура относительно проста: 1. Убедитесь, что физический том или устройство доступно для добавления в группу томов. 2. Используйте vgextend для расширения группы томов. Новое дисковое пространство сразу отобразится в группе томов. После расширения группы томов вы можете использовать команду vgs, чтобы убедиться, что физический том был добавлен в группу томов. В примере 15-8 вы можете видеть, что группа vgdata VG содержит два физических тома, как указано в столбце #PV. Пример 15-8 Проверка операций изменения размера VG с помощью команды vgs

Изменение размера логических томов и файловых систем Как группы томов можно расширять с помощью команды vgextend, так и логические тома можно расширять с помощью команды lvextend. Эта команда имеет очень полезную опцию -r, позволяющую одновременно расширять файловые системы на логическом томе; рекомендуется 301

использовать эту опцию, а не альтернативный подход, который отдельно расширяет логические тома и файловые системы поверх логических томов. Большинство операций по изменению размера файловой системы можно выполнить в режиме онлайн, если файловая система становится больше, без необходимости размонтировать файловую систему. Чтобы увеличить размер логического тома, используйте lvextend или lvresize, а затем параметр -r, чтобы изменить размер файловой системы, используемой на нем. Затем укажите желаемый размер тома. Самый простой и интуитивно понятный способ сделать это – использовать опцию -L, за которым следует знак + и количество дискового пространства, которое вы хотите добавить, например, lvresize -L +1G -r /dev/vgdata/lvdata. Альтернативный способ изменить размер логического тома - использовать параметр -l. За этой опцией следует либо количество экстентов, добавленных к логическому тому, либо абсолютный или относительный процент экстентов в группе томов, которые будут использоваться. Вы можете, например, использовать следующие команды для изменения размера логического тома:





▪ ▪

lvresize -r -l 75%VG /dev/vgdata/lvdata Данный вариант команды изменяет размер логического тома таким образом, чтобы он занимал 75% от общего дискового пространства в группе томов. lvresize -r -l +75%VG /dev/vgdata/lvdata Данный вариант команды пытается добавить к логическому тому 75% от общего размера группы томов. (Обратите внимание на разницу с предыдущей командой.) lvresize -r -l +75%FREE /dev/vgdata/lvdata Данный вариант команды добавляет 75% всего свободного дискового пространства к логическому тому. lvresize -r -l 75%FREE /dev/vgdata/lvdata Данный вариант команды изменяет размер логического тома до общего размера, равного 75% от объема свободного дискового пространства. (Обратите внимание на разницу с предыдущей командой.)

Логический экстент (extent) - это логический строительный блок, используемый при создании логических томов, и он отображается на физический экстент, размер которого можно указать при создании группы томов. Все операции изменения размера должны полностью соответствовать логическим размерам. Иногда можно заметить, что размер изменения размера округляется в большую или меньшую сторону до логического размера экстента. Вы также можете указать количество логических экстентов, которые необходимо добавить или удалить напрямую, используя параметр -l с командой lvresize. Как видите, изменение размера логического тома имеет множество вариантов, и вам нужно позаботиться о том, чтобы использовать правильные параметры, потому что легко ошибиться! В упражнении 15-3 вы узнаете, как изменить размер логических томов и файловых систем, используемых поверх них. ПРИМЕЧАНИЕ Размер файловой системы XFS нельзя уменьшить; его можно только увеличить. Если вам нужна файловая система, размер которой можно уменьшить, используйте Ext4, а не XFS.

Упражнение 15-3 Изменение размера логических томов

302

В упражнениях 15-1 и 15-2 вы создали физический том, группу томов и логический том. В этом упражнении вы увеличиваете размер логического тома и файловой системы, используемой поверх него. 1. Введите pvs и vgs, чтобы показать текущую конфигурацию физического тома и группы томов. 2. Используйте parted, чтобы добавить еще один раздел размером 1 ГиБ. Не забудьте пометить этот раздел как LVM-раздел с помощью set lvm on. Я предполагаю, что этот новый раздел - /dev/sdb2 до конца этого упражнения. Замените это имя именем, используемым в вашей конфигурации, если оно другое. 3. Введите vgextend vgdata /dev/sdb2, чтобы расширить vgdata до общего размера устройства /dev/sdb2. 4. Введите vgs, чтобы убедиться, что доступный размер группы томов увеличился. 5. Введите lvs, чтобы проверить текущий размер логического тома lvdata. 6. Введите df -h, чтобы проверить текущий размер файловой системы lvdata. 7. Введите lvextend -r -l +50%FREE /dev/vgdata/lvdata, чтобы расширить lvdata до 50% всего доступного дискового пространства в группе томов. 8. Введите lvs и df -h еще раз, чтобы убедиться, что добавленное дисковое пространство стало доступным. 9. Введите lvreduce -r -L -50M /dev/vgdata/lvdata. Это уменьшает объем lvdata до 50 МБ. Обратите внимание, что при этом том временно отключается, что происходит автоматически. Также обратите внимание, что этот шаг работает, только если вы используете файловую систему Ext4. (XFS нельзя сжать.) Настройка Stratis В RHEL 8 Red Hat добавила два дополнительных типа хранилища: Stratis и VDO. Stratis это так называемая файловая система с управлением томами, в которой представлены расширенные функции хранения, которые не были доступны в предыдущих версиях RHEL: ▪



▪ ▪



Тонкое обеспечение: эта функция позволяет файлу Stratis показывать себя пользователям гораздо большим, чем он есть на самом деле. Это полезно во многих средах, таких как виртуальные рабочие столы, где каждый пользователь может видеть в общей сложности 20 ГиБ доступного хранилища, хотя фактически каждому пользователю предоставляется гораздо меньший объем. Моментальные снимки (Snapshots). Моментальные снимки Stratis позволяют пользователям делать «снимки» текущего состояния файловой системы. Этот снимок позволяет легко вернуться к предыдущему состоянию файловой системы, отменив все внесенные изменения. Уровень кэша: Уровень кэша - это функция хранения Ceph, которая обеспечивает физическое хранение данных ближе к клиенту Ceph, что ускоряет доступ к данным. Программный API. Программный API обеспечивает простую настройку и изменение хранилища с помощью доступа через API. Это особенно интересно в облачных средах, где настройка хранилища непосредственно из облачных приложений чрезвычайно полезна. Мониторинг и восстановление. В то время как старые файловые системы нуждаются в таких инструментах, как fsck, для проверки целостности файловой системы, Stratis имеет встроенные функции для мониторинга состояния файловой системы и восстановления ее при необходимости. 303

Понимание архитектуры Stratis Самый нижний уровень в архитектуре Stratis - это pool. С функциональной точки зрения пул Stratis сопоставим с группой томов LVM. Пул представляет все доступное хранилище и состоит из одного или нескольких устройств хранения, которые в среде Stratis называются blockdev. Эти блочные устройства могут не иметь тонкого выделения на базовом уровне оборудования. Stratis создает каталог /dev/stratis/poolname для каждого пула. Из пула Stratis создаются файловые системы XFS. Обратите внимание, что Stratis работает только с XFS, а файловая система XFS, которую он использует, интегрирована с томом Stratis. При создании файловой системы размер не указывается, и каждая файловая система может увеличиваться до размера всего доступного дискового пространства в пуле. Файловые системы Stratis всегда имеют тонкое выделение ресурсов. Тонкий том автоматически увеличивается по мере добавления данных в файловую систему. Создание Stratis пространства для хранения Создание томов Stratis - это многоэтапный процесс. В этом разделе представлен общий обзор, а затем Упражнение 15-4 в следующем разделе проведет вас через процедуру. Вы начинаете с создания пула. После добавления пула вы можете создавать из него файловые системы. Прежде чем начать, убедитесь, что блочные устройства, которые вы собираетесь использовать в Stratis, имеют минимальный размер 1 ГиБ. Каждая файловая система Stratis занимает минимум 527 МБ дискового пространства, даже если в файловую систему не копировались данные. 1. Установите программное обеспечение Stratis с помощью yum, установив пакеты stratis-cli и stratisd. 2. Запустите и включите user-space daemon, используя systemctl enable --now stratisd. 3. После запуска демона используйте команду stratis pool create, чтобы создать пул, с которым вы хотите работать. Например, используйте stratis pool create mypool /dev/sdd, чтобы создать пул, основанный на блочном устройстве /dev/sdd. Вы можете добавить дополнительные блочные устройства позже, используя stratis pool add-data poolname blockdevname, как в stratis pool add-data mypool /dev/sde. 4. После создания пула добавьте файловую систему с помощью stratis fs create poolname fsname. 5. Чтобы убедиться, что все было успешно создано, используйте команду stratis fs list. 6. После создания файловой системы ее можно смонтировать. Чтобы смонтировать файловую систему Stratis через /etc/fstab, вы должны использовать UUID; использование имени устройства не поддерживается. Кроме того, при монтировании тома Stratis через /etc/fstab включите параметр монтирования s-systemd.requires=stratisd.service, чтобы гарантировать, что Systemd ждет активации этого устройства, пока не будет загружена служба stratisd. Управление Stratis После создания файловой системы Stratis вы можете выполнять несколько различных задач управления. Для начала вы можете динамически расширять пул, используя stratis pool add-data. Кроме того, вам необходимо отслеживать тома Stratis с помощью специальных инструментов 304

Stratis, поскольку традиционные инструменты Linux не могут обрабатывать тома с тонким предоставлением. Доступны следующие команды: ▪ ▪



stratis blockdev: показывает информацию обо всех блочных устройствах, которые используются для Stratis. stratis pool: предоставляет информацию о пулах Stratis. Обратите внимание, в частности, на параметр Physical Used, который не должен слишком приближаться к параметру Physical Size. stratis filesystem: позволяет отслеживать отдельные файловые системы.

Еще одна функция Stratis, с которой вам придется работать, - snapshot. Снимок содержит состояние файловой системы на момент создания snapshot. После создания снимок можно изменить. Также полезно знать, что снимок и его источник не связаны, что позволяет снимку жить дольше, чем файловая система, из которой он был создан. Это принципиально отличается от, например, снимков LVM, которые не могут оставаться в живых, если том, с которым они связаны, удален. В упражнении 15-4 вы настраиваете среду с томами Stratis. Упражнение 15-4 Управление томами Stratis Вам понадобится один выделенный диск размером 5 ГиБ для выполнения шагов в этом упражнении. В этом упражнении в качестве примера используется имя диска /dev/sdd. Замените это имя именем дискового устройства, указанным на вашем оборудовании. 1. Введите yum install stratisd stratis-cli, чтобы установить все необходимые пакеты. 2. Введите systemctl enable --now stratisd, чтобы включить демон Stratis. 3. Введите stratis pool create mypool /dev/sdd, чтобы добавить весь диск /dev/sdd в пул хранения. 4. Введите stratis pool list, чтобы проверить успешное создание пула. 5. Введите stratis fs create mypool stratis1, чтобы создать первую файловую систему Stratis. Обратите внимание, что вам не нужно указывать размер файловой системы. 6. Введите stratis fs list, чтобы проверить создание файловой системы. 7. Введите mkdir /stratis1, чтобы создать точку монтирования для файловой системы Stratis. 8. Введите blkid, чтобы найти UUID тома Stratis. 9. Добавьте следующую строку в /etc/fstab, чтобы включить автоматическое монтирование тома. Обязательно используйте имя UUID, которое используется в вашей системе. UUID=xxx /stratis1. xfs. defaults,x-systemd.requires=stratisd.service 0 0 10. Введите mount -a, чтобы смонтировать том Stratis. Используйте команду mount, чтобы убедиться, что команда выполнилась успешно. 11. Введите cp /etc/[a-f]* /stratis1, чтобы скопировать некоторые файлы на том Stratis. 12. Введите stratis filesystem snapshot mypool stratis1 stratis1-snap, чтобы создать моментальный снимок только что созданного тома. Обратите внимание, что выполнение этой команды может занять до минуты. 13. Введите stratis filesystem list, чтобы получить статистику использования текущей файловой системы. 305

14. Введите rm -f /stratis1/a*, чтобы удалить все файлы, имена которых начинаются с символа a. 15. Введите mount /dev/stratis/mypool/stratis1-snap /mnt и убедитесь, что файлы, имена которых начинаются с a, все еще доступны в каталоге /mnt. Примечание при переводе: У меня вышла ошибка: mount: /mnt: special device /dev/stratis/mypool/stratis1-snap does not exist. Действительно в каталоге /dev указанного устройства не было. Зашёл в каталог cd /stratis/mypool/ где обнаружил линки на устройства lrwxrwxrwx 1 root root 9 Feb 15 17:35 stratis1 -> /dev/dm-7 lrwxrwxrwx 1 root root 9 Feb 15 17:25 stratis1-snap -> /dev/dm-8 Соответственно выполнил mount /dev/dm-8 /mnt, диск смонтировался. Далее автор, завершает упражнение, но у меня законно возник вопрос, а как восстановить удалённые файлы. Гугл рассказал. Взято от сюда https://www.golinuxcloud.com/createstratis-snapshot-file-system-rhel-8/ Применительно к упражнению были выполнены следующие команды: a. Размонтировать диск: # umount /stratis1 b. Удалить исходную файловую систему Stratis: #stratis filesystem destroy mypool stratis1 c. Создайте копию снимка под именем исходной файловой системы: #stratis filesystem snapshot mypool stratis1-snap stratis1 d. Следующим шагом снова смонтировать /stratis1 в моём случае: # mount /dev/dm-7 /stratis1 Или перезагрузить сервер, зайти в /stratis1 и проверить наличие файлов начинающихся на a

16. Перезагрузите сервер. После перезагрузки убедитесь, что том Stratis по-прежнему автоматически смонтирован.

Настройка VDO В предыдущем разделе вы узнали о Stratis. В этом разделе вы узнаете о Virtual Data Optimizer (VDO), решении, которое было разработано для обеспечения функций дедупликации данных. Понимание VDO

306

Virtual Data Optimizer (VDO) - еще одно передовое решение для хранения данных, предлагаемое в RHEL 8. VDO был разработан для уменьшения использования дискового пространства на блочных устройствах за счет применения функций дедупликации. VDO создает тома, реализуя дедупликацию поверх любого типа существующего блочного устройства. Поверх устройства VDO вы должны либо создать файловую систему, либо использовать ее в качестве физического тома в настройке LVM. Основное назначение VDO - дедупликация данных. Он дедуплицирует данные с помощью трех распространенных технологий: ▪ ▪ ▪

Удаление нулевых блоков отфильтровывает блоки данных, содержащие только нули. Дедупликация уменьшает количество избыточных блоков данных. Сжатие происходит, когда модуль ядра kvdo сжимает блоки данных.

VDO особенно полезен в определенных средах. Типичными вариантами использования являются хост-платформы для контейнеров и виртуальных машин, где механизм дедупликации обеспечивает гораздо более эффективное использование дискового хранилища. Обычно для работы в среде такого типа можно использовать логический размер, в десять раз превышающий физический. Еще одна типичная среда, в которой VDO работает хорошо, - это облачное блочное хранилище. Если, например, VDO используется в качестве нижележащего уровня хранения для хранилища Ceph, можно использовать логический размер, в три раза превышающий физический размер. Настройка VDO Чтобы настроить VDO, сначала необходимо убедиться, что базовые блочные устройства имеют минимальный размер 4ГиБ. Далее вам нужно установить пакеты vdo и kmod-vdo. Это гарантирует доступность необходимых модулей ядра. Затем создайте устройство с помощью команды vdo create. При создании устройства вы можете использовать параметр --vdiLogicalSize=, чтобы указать логический размер тома. Например, используйте vdo create --name=vdo1 --device=/dev/sde --vdoLogicalSize=1T, чтобы создать том с логическим размером 1ТиБ. После создания устройства вы можете поместить на него файловую систему XFS, используя mkfs.xfs -K /dev/mapper /vdo1. Параметр -K с mkfs.xfs предотвращает немедленное удаление неиспользуемых блоков в файловой системе, что значительно ускоряет выполнение команды. После создания файловой системы вы можете добавить строку в /etc/fstab для ее автоматического монтирования. Не забудьте включить параметры монтирования systemd.requires=vdo.service,discard, которые запускают загрузку службы vdo systemd. Чтобы убедиться, что все работает правильно, теперь вы можете использовать команду vdostats --humanreadable. СОВЕТ. Запоминание параметров, которые нужно использовать для создания постоянного монтирования VDO, может оказаться сложной задачей. К счастью, в /usr/share/doc/vdo/examples/systemd есть пример файла монтирования Systemd, показанный в Примере 15-9. Просто измените настройки файла монтирования в соответствии с вашими требованиями и скопируйте его в 307

/etc/systemd/system/yourmountpoint.mount. Не забудьте включить его, и он будет автоматически установлен при следующей перезагрузке. Пример 15-9 Пример файла монтируемого модуля Systemd для VDO

В упражнении 15-5 представлены пошаговые инструкции по созданию тома VDO с тонким предоставлением. Упражнение 15-5 Управление хранилищем VDO Для выполнения этого упражнения вам необходимо иметь доступ к блочному устройству размером не менее 5ГиБ. В этом упражнении в качестве примера имени блочного устройства используется /dev/sde. Обязательно замените это имя фактическим именем устройства, которое используется в вашей конфигурации. 1. Введите lsblk, чтобы проверить доступность блочного устройства /dev/sde. 2. Введите yum install -y vdo kmod-kvdo, чтобы установить необходимые пакеты. 3. Введите vdo create --name=vdo1 --device=/dev/sde --vdoLogicalSize=1T, чтобы создать устройство VDO с логическим размером 1ТиБ. 4. Используйте mkfs.xfs -K /dev/mapper/vdo1, чтобы поместить файловую систему XFS поверх устройства. 5. Введите mkdir /vdo1, чтобы создать точку монтирования, в которой устройство VDO может быть автоматически смонтировано. 6. Скопируйте пример файла монтирования Systemd для VDO в /etc/systemd/system, используя cp /usr/share/doc/vdo/examples/systemd/VDO.mount.example /etc/systemd/system/vdo1.mount. 7. Отредактируйте файл, включив в него следующие строки: what = /dev/mapper/vdo1 where = /vdo1

308

8. Введите systemctl enable --now vdo1.mount, чтобы смонтировать новое блочное устройство. 9. Введите vdostats --human-readable, чтобы отслеживать текущую статистику об устройстве VDO. 10. Введите df -h, чтобы проверить логический размер 1 ГиБ. 11. Перезагрузите сервер, чтобы убедиться, что после перезагрузки устройство VDO правильно смонтировано.

Резюме В этой главе вы узнали, как работать с расширенным хранилищем в RHEL 8. Во-первых, вы прочитали, как LVM используется для обеспечения гибкости хранилища. Используя LVM, вы получаете преимущества томов, размер которых можно легко изменять, и логических томов с несколькими устройствами. Затем вы познакомились со Stratis, файловой системой управления томами. Stratis привносит в RHEL 8 функции хранения нового поколения и по умолчанию создает файловые системы с тонким выделением ресурсов. Наконец, вы узнали, как использовать VDO, Virtual Data Optimizer, для реализации дедупликации данных в определенных сценариях.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 15-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 15-3 Ключевые темы главы 15 Элемент ключевой темы

Описание

Страница

Рисунок 15 - 1

Обзор архитектуры LVM

292

Таблица 15 - 2

Основные команд управления LVM

300

Список

Команды LVM lvresize

302

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

309

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: physical volume (PV), volume group (VG), logical volume (LV), device mapper, physical extent, logical extent, snapshot, Stratis, VDO, deduplication, thin allocation

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Какой тип раздела используется в разделе GUID, который необходимо использовать в LVM? 2. Какая команда позволяет создать группу томов с именем vgroup, которая содержит физическое устройство /dev/sdb3 и использует размер физического экстента 4МиБ? 3. Какая команда показывает краткую сводку физических томов в вашей системе, а также группу томов, к которой они принадлежат? 4. Что нужно сделать, чтобы добавить весь жесткий диск /dev/sdd в группу томов vgroup? 5. Какая команда позволяет создать логический том lvvol1 размером 6МБ? 6. Какая команда позволяет добавить 100МБ к логическому тому lvvol1, предполагая, что дисковое пространство доступно в группе томов? 7. При работе со Stratis, какую строку вы бы добавили в /etc/fstab для монтирования тома Stratis? 8. Какую команду вы используете для создания пула Stratis на основе блочного устройства /dev/sdd? 9. Какую команду вы используете для создания устройства VDO с виртуальным размером 1ТиБ? 10. Какой вариант с mkfs.xfs вам нужен для успешного создания файловой системы XFS поверх тома с тонким предоставлением VDO? Лабораторные работы в конце главы Для выполнения следующих лабораторных работ в конце главы вам понадобится выделенное дисковое устройство. Либо используйте USB-накопитель, либо добавьте новый виртуальный диск в виртуальную среду перед запуском. Лабораторная работа 15.1 1. Создайте логический том размером 500 МБ с именем lvgroup. Отформатируйте его в файловой системе XFS и постоянно смонтируйте в /groups. Перезагрузите сервер, чтобы убедиться, что монтирование работает. 2. После перезагрузки добавьте еще 250 МБ к только что созданному тому lvgroup. Убедитесь, что размер файловой системы также изменяется при изменении размера тома. 3. Убедитесь, что расширение тома выполнено успешно.

310

Лабораторная работа 15.2 1. Создайте пул Stratis размером 5ГиБ. В этом пуле создайте две файловые системы Stratis и убедитесь, что они автоматически смонтированы. 2. Добавьте дополнительное блочное устройство в пул Stratis и убедитесь, что размер пула был успешно увеличен. Лабораторная работа 15.3 1. Создайте том VDO с виртуальным размером 1ТиБ. 2. Убедитесь, что том VDO автоматически смонтирован, используя пример файла модуля Systemd. 3. Перезагрузите сервер, чтобы убедиться, что все по-прежнему работает.

311

Глава 16 В этой главе рассматриваются следующие темы: ▪ ▪ ▪

Понимание роли ядра Linux Работа с модулями ядра Обновление ядра Linux

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

Базовое управление ядром Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 16 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 16 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Понимание роли ядра Linux

1-4

Работа с модулями ядра

5-9

Обновление ядра Linux

10

1. Что вызывает повреждение ядра a. Драйвер ядра, недоступный в качестве драйвера с открытым исходным b. кодом c. Драйвер, разработанный для другой операционной системы, но портированный на Linux d. Драйвер, вышедший из строя неподдерживаемый драйвер 2. Как называется команда, отображающая события ядра с момента загрузки? 312

a. b. c. d.

logger dmesg klogd journald

3. Какая команда позволяет узнать текущую версию используемого ядра? a. b. c. d.

uname -r uname -v procinfo -k procinfo –l

4. Какая команда показывает текущую версию RHEL, которую вы используете? a. b. c. d.

uname -r cat /proc/rhel-version cat /etc/redhat-release uname –k

5. Как называется процесс, который помогает ядру правильно инициализировать аппаратные устройства? a. b. c. d.

systemd-udevd hwinit udev udevd

6. Где ваша система находит правила по умолчанию, которые используются для инициализации нового оборудования? a. b. c. d.

/etc/udev/rules.d /usr/lib/udev/rules.d /usr/lib/udev.d/rules /etc/udev.d/rules

7. Какую команду следует использовать для выгрузки модуля ядра, включая все его зависимости? a. b. c. d.

rmmod insmod -r modprobe -r modprobe

8. Какая команда позволяет увидеть, загружены ли соответствующие модули ядра для оборудования на вашем сервере? a. lsmod b. modprobe -l c. lspci -k 313

d. lspci 9. Где указать параметр модуля ядра, чтобы сделать его постоянным? a. b. c. d.

/etc/modules.conf /etc/modprobe.conf /etc/modprobe.d/somefilename /usr/lib/modprobe.d/somefilename

10. Какие утверждения об обновлении ядра не соответствуют действительности? a. Команда yum update kernel установит новое ядро, но не обновит его. b. Команда yum install kernel установит новое ядро и оставит старое ядро. c. Пакет ядра должен быть установлен, как защищенный yum пакет, чтобы гарантировать, что после обновления старое ядро все еще доступно. d. После того, как вы установили новую версию ядра, вы должны запустить команду grub2-mkconfig, чтобы изменить меню загрузки GRUB 2 таким образом, чтобы оно отображало старое ядро и недавно установленное ядро.

Основные темы Понимание роли ядра Linux Ядро Linux - это сердце операционной системы. Это уровень между пользователем, который работает с Linux из среды оболочки, и оборудованием, доступным на компьютере, на котором работает пользователь. Ядро управляет инструкциями ввода-вывода (I/O), которые оно получает от программного обеспечения, и преобразует их в инструкции обработки, которые выполняются центральным процессором и другим оборудованием компьютера. Ядро также выполняет важные задачи операционной системы. Одним из примеров такой задачи является планировщик, который следит за тем, чтобы все процессы, запускаемые в операционной системе, обрабатывались ЦП. Понимание использования потоков ядра и драйверов Задачи операционной системы, которые выполняет ядро, реализуются различными потоками ядра. Потоки ядра легко распознать с помощью такой команды, как ps aux. Имена потоков ядра перечислены в квадратных скобках (см. Пример 16-1). Еще одна важная задача ядра Linux - инициализация оборудования. Чтобы убедиться, что это оборудование можно использовать, ядро Linux использует драйверы. Каждое оборудование содержит определенные функции, и для использования этих функций необходимо загрузить драйвер. Ядро Linux является модульным, и драйверы загружаются в виде модулей ядра, о которых вы узнаете больше позже в этой главе.

Пример 16-1 Вывод списка потоков ядра с помощью ps aux

314

В некоторых случаях доступность драйверов является проблемой, потому что производители оборудования не всегда готовы предоставить драйверы с открытым исходным кодом, которые можно хорошо интегрировать с ядром Linux. Это может привести к тому, что драйвер не будет обеспечивать все функции, предоставляемые оборудованием. Если производитель не желает предоставлять драйверы с открытым исходным кодом, альтернативой является работа с драйверами с закрытым исходным кодом. Хотя это позволяет использовать оборудование в Linux, решение не является идеальным. Поскольку драйвер выполняет привилегированные инструкции в пространстве ядра, плохо работающий драйвер может привести к сбою всего ядра. Если это происходит с драйвером с открытым исходным кодом, сообщество ядра Linux может помочь отладить проблему и убедиться, что проблема устранена. Если это произойдет с драйвером с закрытым исходным кодом, сообщество ядра Linux ничего не сможет сделать. Но проприетарный драйвер может предоставлять доступ к функциям, которые не предоставляются его эквивалентом с открытым исходным кодом. Чтобы упростить проверку того, использует ли ядро драйверы с закрытым исходным кодом, используется концепция «испорченного, запятнанный (при переводе не нашёл адекватного слова, но из дальнейшего контекста суть вполне понятна)» ядра (tainted kernel). «Испорченное» ядро - это ядро, содержащее драйверы с закрытым исходным кодом. Концепция испорченных ядер помогает в устранении неполадок с драйверами. Если ваше ядро RHEL 8 выглядит испорченным, служба поддержки Red Hat может идентифицировать его как испорченное ядро и определить, какой драйвер его испортил. Чтобы решить эту проблему, Red Hat может попросить вас удалить драйвер, который делает его испорченным ядром. Анализируя то, что делает ядро Чтобы помочь проанализировать, что делает ядро, операционные системы Linux предоставляют некоторые инструменты:

315

Утилита dmesg Файловая система /proc Утилита uname Первая утилита, которую следует учитывать, если вам требуется подробная информация об активности ядра, - это dmesg. Эта утилита показывает содержимое кольцевого буфера ядра области памяти, в которой ядро Linux хранит последние сообщения журнала. Альтернативный метод получения доступа к той же информации в кольцевом буфере ядра - это команда journalctl --dmesg, которая эквивалентна journalctl -k. В примере 16-2 вы можете увидеть часть результата команды dmesg. Пример 16-2. Анализ активности ядра с помощью dmesg

В выводе команды dmesg показаны все сообщения, относящиеся к ядру. Каждое сообщение начинается с индикатора времени, который показывает, в какую именно секунду было зарегистрировано событие. Этот индикатор времени относится к запуску ядра, что позволяет точно увидеть, сколько секунд прошло между запуском ядра и конкретным событием. (Обратите внимание, что команды journalctl -k / --dmesg показывают время на часах, а не время, относящееся к запуску ядра.) Этот индикатор времени дает четкое представление о том, что происходило и в какое время это произошло. Еще один ценный источник информации - файловая система /proc. Файловая система /proc является интерфейсом к ядру Linux и содержит файлы с подробной информацией о состоянии того, что происходит на вашем сервере. Многие инструменты, связанные с производительностью, добывают дополнительную информацию в файловой системе /proc. 316

Как администратор, вы обнаружите, что некоторые файлы в /proc очень удобны для чтения и содержат информацию о состоянии процессора, памяти, монтирования и т.д. Взгляните, например, на /proc/meminfo, там вы найдёте подробную информацию о каждом сегменте памяти и о том, что именно происходит в них. Последний полезный источник информации - команда uname. Эта команда предоставляет различную информацию о вашей операционной системе. Введите, например, uname -a для обзора всех соответствующих параметров uname –r, чтобы узнать, какая версия ядра используется в настоящее время. Эта информация также отображается при использовании команды hostnamectl status, которая также показывает полезную дополнительную информацию (см. Пример 16-3). Пример 16-3 Получение дополнительной информации о системе

СОВЕТ В некоторых случаях вам может потребоваться конкретная информация об используемой вами версии RHEL. Чтобы получить эту информацию, выполнить команду cat /etc/redhat-release и просмотрите ее вывод; он сообщит вам, какую версию Red Hat вы используете и какой уровень обновления применяется.

Пример 16-3 Получение дополнительной информации о системе

317

Работа с модулями ядра В старые времена Linux ядра нужно было скомпилировать, чтобы включить все драйверы, которые требовались для поддержки компьютерного оборудования. Другие специфические функции также необходимо было встроить в ядро. С момента выпуска ядра Linux 2.0 в середине 1990-х годов ядра больше не компилируются, а являются модульными. Модульное ядро состоит из относительно небольшого центра ядра и обеспечивает поддержку драйверов через модули, которые загружаются по мере необходимости. Модульные ядра очень эффективны, так как включают только те модули, которые действительно необходимы. СОВЕТ Модуль ядра реализует определенные функции ядра. Модули ядра используются для загрузки драйверов, которые обеспечивают правильную связь с аппаратными устройствами, но не ограничиваются загрузкой только драйверов оборудования. Например, поддержка файловой системы загружается в виде модулей. Другие функции ядра также могут быть загружены в виде модулей.

Понимание инициализации оборудования Загрузка драйверов - это автоматизированный процесс, который выглядит примерно так: 1. Во время загрузки ядро проверяет доступное оборудование. 2. При обнаружении аппаратного компонента процесс systemd-udevd загружает соответствующий драйвер и делает аппаратное устройство доступным. 3. Чтобы решить, как инициализировать устройства, systemd-udevd считывает файлы правил в /usr/lib/udev/rules.d. Это файлы правил, предоставленные системой, которые не следует изменять. 4. После обработки предоставленных системой файлов правил udev systemd-udevd переходит в каталог /etc/udev/rules.d, чтобы прочитать любые настраиваемые правила, если они доступны. 5. В результате необходимые модули ядра загружаются автоматически, а состояние модулей ядра и связанного с ними оборудования записывается в файловую систему sysfs, которая смонтирована в каталоге /sys. Ядро Linux использует эту псевдофайловую систему для отслеживания настроек оборудования. Процесс systemd-udevd - это не одноразовый процесс; он постоянно следит за подключением и отключением нового оборудования. Чтобы получить представление о том, как это работает, от имени пользователя root вы можете ввести команду udevadm monitor. В нем перечислены все события, которые обрабатываются при активации нового оборудования. Например, если вы подключаете USB-устройство, когда эта команда активна, вы можете точно увидеть, что происходит. Нажмите Ctrl-C, чтобы закрыть вывод монитора udevadm. В примере 16-4 показан вывод команды udevadm monitor. В этой команде вы можете увидеть, как функции, предлагаемые оборудованием, автоматически обнаруживаются ядром и systemd-udevd, работающими вместе. Каждый этап проверки оборудования завершается созданием файла в файловой системе /sys. После полной инициализации оборудования вы также можете увидеть, что загружены некоторые модули ядра. 318

ПРИМЕЧАНИЕ. Хотя это полезно знать, инициализация оборудования не включена в текущие цели RHCSA.

Пример 16-4. Вывод команды udevadm monitor.

Управление модулями ядра Модули ядра Linux обычно загружаются автоматически для устройств, которым они нужны, но в редких случаях вам придется загружать соответствующие модули ядра вручную. 319

Несколько команд используются для ручного управления модулями ядра. Таблица 16-2 содержит их обзор. Альтернативный метод загрузки модулей ядра - через каталог /etc/modules-load.d. В этом каталоге вы можете создавать файлы для автоматической загрузки модулей, которые еще не загружаются методом systemd-udevd. Для модулей по умолчанию, которые должны быть всегда загружены, этот каталог имеет аналог в /usr/lib/modules-load.d.

Таблица 16-2 Обзор управления модулем ядра Linux Команда

Использовать

lsmod

Список загруженных в настоящее время модулей ядра

modinfo

Отображает информацию о модуле ядра

modprobe

Загружает модули ядра, включая все их зависимости

modprobe -r

Выгружает модули ядра с учетом зависимостей модулей ядра

Первая команда, которую следует использовать при работе с модулями ядра, - это lsmod. Эта команда перечисляет все модули ядра, которые используются в настоящее время, включая модули, которыми используется этот конкретный модуль. В примере 16-5 показан вывод первых десяти строк команды lsmod. Пример 16-5 Вывод списка загруженных модулей с помощью lsmod

СОВЕТ Многие команды Linux показывают свой вывод в разных столбцах, и не всегда ясно, какой столбец используется для отображения какой информации. Большинство этих команд имеют строку заголовка в первой строке вывода команды. Итак, если в выводе какой-либо команды вы не уверены, что видите, направьте вывод команды (pipe) через head, чтобы увидеть, есть ли файл заголовка, или направьте вывод команды в less, что позволяет вам переходить на страницу до первая строка команды выводится легко.

320

Если вы хотите получить дополнительную информацию о конкретном модуле ядра, вы можете использовать команду modinfo. Это дает полную информацию о конкретных модулях ядра, включая два интересных раздела: псевдоним (alias) и параметры (parms). Псевдоним модуля - это еще одно имя, которое также можно использовать для адресации модуля. Строки parms относятся к параметрам, которые можно установить при загрузке модуля. (в разделе «Управление параметрами модуля ядра» далее в этой главе вы узнаете, как работать с параметрами модуля ядра.) В примере 16-6 показан частичный вывод команды modinfo e1000. Пример 16-6 Отображение информации о модуле с помощью modinfo

321

Чтобы вручную загружать и выгружать модули, вы можете использовать команды modprobe и modprobe -r. В более ранних версиях Linux вы могли использовать команды insmod и rmmod. Их больше не следует использовать, поскольку они не загружают зависимости модулей ядра. В упражнении 16-1 вы узнаете, как управлять модулями ядра с помощью этих команд. Упражнение 16-1 Управление модулями ядра из командной строки 1. Откройте корневую оболочку и введите lsmod | less. Вывод показывает все загруженные в настоящее время модули ядра. 2. Введите modprobe ext4, чтобы загрузить модуль ядра ext4. 3. Убедитесь, что модуль загружен с помощью lsmod | grep ext. Вы можете видеть, что модуль загружен, а также некоторые его зависимости. 4. Введите modinfo ext4, чтобы получить информацию о модуле ядра ext4. Обратите внимание, что у него нет параметров. 5. Введите modprobe -r ext4, чтобы снова выгрузить модуль ядра ext4. 6. Введите modprobe -r xfs, чтобы попытаться выгрузить модуль ядра xfs. Обратите внимание, что вы получаете сообщение об ошибке, потому что модуль ядра в настоящее время используется. Проверка доступности драйверов для аппаратных устройств Пример 16-7 Проверка доступности модуля ядра

322

На современных серверах Linux поддерживается множество аппаратных устройств. Иногда вы можете обнаружить, что некоторые устройства не поддерживаются должным образом, потому что их модули в настоящее время не загружены. Лучший способ узнать, относится ли это к вашему оборудованию, - использовать команду lspci. Если используется без аргументов, он показывает все аппаратные устройства, обнаруженные на шине PCI. Очень полезный аргумент -k, в котором перечислены все модули ядра, используемые для обнаруженных устройств PCI. В примере 16-7 показан пример вывода команды lspci -k. Если вы обнаружите, что были обнаружены устройства PCI, для которых не удалось загрузить модули ядра, вы, вероятно, имеете дело с устройством, которое не поддерживается. Вы можете попробовать найти модуль ядра с закрытым исходным кодом, но вы должны понимать, что это может поставить под угрозу стабильность вашего ядра. Намного лучший подход - перед покупкой конкретного оборудования проконсультироваться с поставщиком оборудования, что Linux полностью поддерживается. Управление параметрами модуля ядра Иногда вам может потребоваться загрузить модули ядра с определенными параметрами. Для этого вам сначала нужно выяснить, какой параметр вы хотите использовать. Если вы нашли параметр, который хотите использовать, вы можете загрузить его вручную, указав имя параметра, а затем значение, которое вы хотите присвоить. Чтобы сделать это автоматизированной процедурой, вы можете создать файл в каталоге /etc/modprobe.d, куда загружается модуль, включая параметр, который вы хотите загрузить. В упражнении 16-2 вы увидите, как это сделать с помощью модуля ядра cdrom. Упражнение 16-2 Загрузка модулей ядра с параметрами 1. Введите lsmod | grep cdrom. Если вы использовали оптический привод на своем компьютере, этот модуль должен быть загружен, и он должен указывать, что он используется модулем sr_mod. 2. Введите modprobe -r cdrom. Это не сработает, потому что модуль используется модулем sr_mod. 3. Введите modprobe -r sr_mod; modprobe -r cdrom. Это должно выгрузить оба модуля, но, скорее всего, произойдет сбой. (Это не сработает, если в настоящее время не установлено оптическое устройство.) 4. Введите umount /dev/sr0, чтобы отключить смонтированную файловую систему cdrom, и снова выполните шаг 3 этого упражнения. 5. Введите modinfo cdrom. Это показывает информацию о модуле cdrom, включая параметры, которые он поддерживает. Одним из них является параметр debug, который поддерживает логическое значение в качестве своего значения. 6. Введите modprobe cdrom debug=1. Это загружает модуль cdrom с включенным параметром отладки. 7. Введите dmesg. Для некоторых модулей ядра информация о загрузке записывается в кольцевой буфер ядра, который можно отобразить с помощью команды dmesg. К сожалению, это не относится к модулю ядра cdrom. 8. Создайте файл с именем /etc/modprobe.d/cdrom.conf и присвойте ему следующее содержимое: options cdrom debug=1 323

Это включает параметр каждый раз при загрузке модуля ядра cdrom.

Обновление ядра Linux Время от времени вам нужно обновлять ядро Linux. При обновлении ядра Linux устанавливается новая версия ядра, которая используется в качестве ядра по умолчанию. Однако старая версия файла ядра по-прежнему будет доступна. Это гарантирует, что ваш компьютер все еще может загружаться, если в новое ядро включены неподдерживаемые функции. Чтобы установить новую версию ядра, вы можете использовать команду yum upgrade kernel. Команда yum install kernel также работает. Обе команды устанавливают новое ядро рядом со старым. Файлы ядра для последних четырех ядер, которые вы установили на свой сервер, будут храниться в каталоге /boot. Загрузчик GRUB 2 автоматически выбирает все ядра, которые он находит в этом каталоге. Это позволяет вам выбрать более старую версию ядра при загрузке, что полезно, если недавно установленное ядро не загружается правильно.

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

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 16-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 16-3 Ключевые темы главы 16 Элемент ключевой темы

Описание

Страница

Список

Обзор инструментов, связанных с ядром

316

Таблица 16-2

Обзор управления модулем ядра

320

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти.

324

Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: kernel, module, dmesg, udev, sysfs, proc, tainted kernel

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. Какая команда показывает текущую версию ядра, используемого на вашем компьютере? Где вы можете найти информацию о текущей версии вашей установки RHEL 8? Какая команда показывает список загруженных в данный момент модулей ядра? Какая команда позволяет узнать параметры модуля ядра? Как выгрузить модуль ядра? Что делать, если при попытке выгрузить модуль ядра появляется сообщение об ошибке? Как узнать, какие параметры модуля ядра поддерживаются? Где вы указываете параметры модуля ядра, которые должны использоваться постоянно? Предполагая, что модуль cdrom имеет параметр debug, который должен быть установлен в 1, чтобы включить режим отладки, какую строку вы бы включили в файл, который будет автоматически загружать этот модуль? 10. Как установить новую версию ядра? 1. 2. 3. 4. 5. 6. 7. 8. 9.

Лабораторная работа в конце главы В лабораторной работе в конце главы вы устанавливаете новую версию ядра и работаете с модулями ядра.

Лабораторная работа 16.1 1. Узнайте, доступна ли новая версия ядра. Если это так, установите его и перезагрузите компьютер, чтобы им можно было пользоваться. 2. Используйте соответствующую команду, чтобы показать последние события, зарегистрированные ядром. 3. Найдите модуль ядра, который используется вашей сетевой картой. Узнайте, есть ли у него варианты. Попробуйте загрузить один из этих параметров модуля ядра вручную; если это удастся, примите необходимые меры для постоянной загрузки этой опции.

325

Глава 17 В этой главе рассматриваются следующие темы: ▪

Управление Systemd Targets ▪ Работа с GRUB В этой главе рассматриваются следующие задачи экзамена RHCSA: ▪ ▪

Настроить системы для автоматической загрузки в определенную target Измените системный загрузчик.

В этой главе вы узнаете, как организована процедура загрузки в Red Hat Enterprise Linux. В первой части этой главы вы узнаете о target Systemd и о том, как их использовать для загрузки вашей системы Linux в определенное состояние. Во второй части этой главы обсуждается GRUB2 и то, как применить изменения к загрузчику GRUB 2. Устранение неисправностей не является темой в этой главе; он рассматривается в главе 18 «Основные навыки устранения неполадок».

Управление и понимание процедуры загрузки Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 17 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 17 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Работа с Systemd

1-7

Работа с GRUB 2

8 - 10

1. Что из следующего является наиболее эффективным способом определения потребности системы? a. b. c. d.

Используйте команду systemctl enable. Задайте в файле unit [Service] нужное значение. Создайте символическую ссылку в каталоге ls. Создайте символическую ссылку в каталоге устройства, wont в каталоге /etc/system/system. 326

2. Какой target считается нормальным для запуска серверов? a. b. c. d.

graphical.target server.target multi-user.target default.target

3. Что из перечисленного не является примером системного target? a. b. c. d.

rescue.target restart.target multi-user.target graphical.target

4. Где вы определяете, с какaким target следует запускать unit, если он включен? a. b. c. d.

Файл unit в target Каталог wonts Файл systemctl.conf Раздел [Install] в файле unit

5. Чтобы позволить targets быть изолированными, вам нужно конкретное утверждение в файле unit target. Что из следующего описывает это утверждение? a. b. c. d.

AllowIsolate Isolate SetIsolate Isolated

6. Администратор хочет изменить текущий multi-user.target на rescue.target. Что из следующего следует сделать? a. Используйте systemctl, что бы изолировать rescue.target b. Используйте systemctl start rescue.target c. Перезагрузите систему и в приглашении загрузки GRUB укажите, что должен быть запущен rescue.target. d. Используйте systemctl enable rescue.target –now 7. Какому уровню запуска System V соответствует multi-user.target? a. b. c. d.

2 3 4 5

8. Как называется файл, в котором следует применить изменения к конфигурации GRUB 2? a. /boot/grub/menu.lst b. /boot/grub2/grub.cfg 327

c. /etc/sysconfig/grub d. /etc/default/grub 9. После внесения изменений в конфигурацию GRUB 2 вам необходимо записать эти изменения. Какая из следующих команд сделает это за вас? a. b. c. d.

grub2 -o /boot/grub/grub.cfg grub2-mkconfig > /boot/grub2/grub.cfg grub2 > /boot/grub2/grub.cfg grub2-install > /boot/grub2/grub.cfg

10. Как называется файл конфигурации GRUB2, созданный в системе UEFI? 11. а. /boot/efi/redhat/grub.cfg 12. б. /boot/efi/EFI/redhat/grub.cfg 13. c. /boot/EFI/grub.cfg 14. d. /boot/EFI/efi/grub.cfg

Основные темы Управление целями Systemd Systemd - это служба в Red Hat Enterprise Linux 8, которая отвечает за запуск различных вариантов загрузки операционной системы. Systemd выходит далеко за рамки запуска служб; разные элементы также запускаются из Systemd. В главе 11 «Работа с Systemd» вы узнали об основах Systemd; в этой главе рассматривается, как targets Systemd используются для загрузки вашей системы в определенное состояние. Понимание target Systemd Target Systemd - это просто группа юнитов, которые должны быть вместе. Некоторые тагеты являются только этим и ничем другим, тогда как другие тагеты могут использоваться для определения состояния, в котором система загружается, потому что у этих тагтов есть одно специфическое свойство, которого нет у обычных targets: они могут быть изолированы. Изолируемые тагеты содержат все, что необходимо системе для загрузки или изменения ее текущего состояния. При загрузке можно использовать четыре target: ▪

▪ ▪



emergency.target: в этом target запускается только минимальное количество юнитов, которого достаточно, чтобы исправить вашу систему, если она не загружается. При этом, вы обнаружите, что операционная система загрузиться с минимальным набором возможностей, так как некоторые важные юниты еще не запущены. rescue.target: этот target запускает все юниты, необходимые для получения полностью работоспособной системы Linux. Однако он не запускает второстепенные службы. multi-user.target: этот target часто используется как target по умолчанию, с которой запускается система. При этом запускается всё, что необходимо для полной функциональности системы, и обычно используется на серверах. graphical.target: эта цель также широко используется. Он запускает все модули, необходимые для полной функциональности, а также графический интерфейс. 328

Работа с целями Работа с target может показаться сложной, но это не так. Он сводится к трем общим задачам: ▪ ▪ ▪

Добавление юнитов для автоматического запуска Установка target по умолчанию Запуск tartget, отличного от заданного по умолчанию, для входа в режим устранения неполадок.

В главе 11 вы узнали, как использовать команды systemctl enable и systemctl disable для добавления служб или удаления служб из target. В этой главе вы узнаете, как установить target по умолчанию и как запустить target не по умолчанию, чтобы войти в режим устранения неполадок. Но сначала мы более подробно рассмотрим работу target под «капотом».

Понимание юнитов в target В target есть некоторая конфигурация. Эта конфигурация состоит из двух частей: ▪ ▪

Файл юнит target Каталог «wonts», содержащий ссылки на все файлы юнитов, которые необходимо загрузить при загрузке определенного target.

Сами по себе target могут иметь зависимости от других target, которые определены в файле целевого объекта. В примере 17-1 показано определение файла multi-user.target, который определяет нормальное рабочее состояние сервера RHEL. Пример 17-1 Файл multi-user.target

329

Вы можете видеть, что в самом файле юнит target не очень много содержимого. Он просто определяет, что ему требуется, а с какими службами и target он не может сосуществовать. Он также определяет порядок загрузки с помощью оператора After в разделе [Unit]. Target файл не содержит никакой информации о юнитах, которые должны быть включены; данная информация находится в отдельных файлах юнита и wants (объяснено в следующем разделе «Понимание Wants»). Target Systemd немного похожи на уровни запуска, используемые в предыдущих версиях RHEL, но target - это нечто большее. Targets - это группа юнитов, и есть несколько разных target. Некоторые target, такие как multi-user.target и graphical.target, определяют конкретное состояние, в которое система должна войти. Другие target просто объединяют группу юнитов вместе, например, nfs.target и printer.target. Эти target включены из других target, таких как multiuser.target или graphical.target. Понимание Wants Чтобы понять концепцию «want», просто необходимо понять глагол «хочу» в английском языке, например «Я хочу печенье». Wants в Systemd определяет, какие юниты Systemd хочет при запуске определенного target. Wants создаются, когда юниты Systemd включены с помощью systemctl enable, и это происходит путем создания символической ссылки в каталоге /etc/systemd/system. В этом каталоге вы найдете подкаталог для каждого target, содержащий запросы в виде символических ссылок на определенные службы, которые должны быть запущены.

Управление Targets Systemd Как администратор, вы должны убедиться, что необходимые службы запускаются при загрузке вашего сервера. Для этого используйте команды systemctl enable и systemctl disable. Вам не нужно думать о конкретной target, в которой должна быть запущена служба. Через раздел [Install] в файле юнит сервиса, юниты службы сами знают, в каких target они должны быть запущены, и автоматически создается запрос к этому target, когда служба включена. Следующая процедура проведет вас по этапам включения службы: 1. Введите systemctl status vsftpd. Если служба еще не была включена, в строке «Загружено» будет показано, что она отключена: [root@server202 ~]# systemctl status vsftpd vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled) Active: inactive (dead) 2. Введите ls /etc/systemd/system/multi-user.target.wants. Вы увидите символические ссылки, которые запускают различные службы на вашем компьютере. Вы также можете видеть, что ссылка vsftpd.service не существует. 3. Введите systemctl enable vsftpd. Команда показывает, что она создает символическую ссылку для файла /usr/lib/systemd/system/vsftpd.service в каталоге

330

/etc/systemd/system/multi-user.target.wants. Итак, в основном, когда вы включаете юнит файл Systemd, в фоновом режиме создается символическая ссылка. СОВЕТ На экзамене RHCSA вы, вероятно, настроите несколько служб. Рекомендуется прочитать вопросы экзамена, определить службы, которые необходимо включить, и включить их все сразу, чтобы убедиться, что они запускаются автоматически при перезапуске. Благодаря этому вы не будете настолько сосредоточены на настройке службы, что полностью забудете ее включить.

Изоляция Targets Как уже говорилось, на машинах Systemd есть несколько Targets. Вы также знаете, что Targets - это совокупность юнитов. Некоторые из этих Targets играют особую роль, так как их можно изолировать. Это также Targets, которые вы можете установить в качестве Target для достижения после запуска системы. Изолируя Targets, вы запускаете эту target со всеми ее зависимостями. Только Targets, для которых включена опция изоляции, могут быть изолированы. Мы рассмотрим команду systemctl isolate позже в этом разделе. Прежде чем сделать это, давайте взглянем на Targets по умолчанию на вашем компьютере. Чтобы получить список всех загруженных целей, введите systemctl --type=target. Вы увидите список всех активных targets. Если на вашем сервере работает графическая среда, она также будет включать все зависимости, необходимые для установки graphical.target. Однако в этом списке показаны только активные targets, а не все targets. Введите systemctl --type=target -all для обзора всех targets, существующих на вашем компьютере. Теперь вы также увидите неактивные target (см. Пример 17-2). Пример 17-2 Отображение системных targets

331

Некоторые из targets в вашей системе играют важную роль, поскольку их можно запустить (изолировать) для определения состояния, в котором запускается ваш сервер. Это также targets, которые можно установить в качестве targets по умолчанию. Эти targets также примерно соответствуют уровням выполнения, используемым в более ранних версиях RHEL. Следующие targets соответствуют уровням: poweroff.target rescue.target multi-user.target

runlevel 0 runlevel 1 runlevel 3 332

graphical.target reboot.target

runlevel 5 runlevel 6

Если вы посмотрите на содержимое каждого target, вы также увидите, что они содержат строку AllowIsolate=yes. Это означает, что вы можете переключить текущее состояние вашего компьютера на любую из этих target с помощью команды systemctl isolate. В упражнении 17-1 показано, как это сделать.

Упражнение 17-1. 1. Из оболочки root перейдите в каталог /usr/lib/systemd/system. Введите grep Isolate *.target. Вывод команды показывает список всех target, допускающих изоляцию. 2. Введите systemctl isolate rescue.target. Команда переключит ваш компьютер на rescue.target. Вам необходимо ввести пароль root на консоли вашего сервера для входа в систему. 3. Введите systemctl isolate reboot.target. В результате перезагрузится ваш компьютер. Установка target по умолчанию Установка target по умолчанию - это простая процедура, которую можно выполнить из командной строки. Введите systemctl get-default, чтобы увидеть текущий target по умолчанию, и используйте systemctl set-default, чтобы изменить target по умолчанию. Чтобы установить graphical.target в качестве target по умолчанию, вам необходимо убедиться, что установлены необходимые пакеты. Если это не так, вы можете использовать команду yum group list, чтобы отобразить список всех групп пакетов RPM. Применяются обе группы пакетов «server with gui» и «GNOME Desktop». Используйте yum group install «server with gui», чтобы установить все пакеты GUI на сервере, если их ещё нет. Работа с GRUB 2 Загрузчик GRUB 2 - это одна из первых вещей, которая должна хорошо работать для загрузки сервера Linux. Как администратору, вам иногда может потребоваться внести изменения в конфигурацию загрузчика GRUB 2. В этом разделе объясняется, как это сделать. Процедура загрузки RHEL 8 более подробно обсуждается в главе 18, где рассматриваются вопросы устранения неполадок. Понимание GRUB 2 Загрузчик GRUB 2 гарантирует, что вы сможете загрузить Linux. GRUB 2 устанавливается в загрузочный сектор жесткого диска вашего сервера и настроен для загрузки ядра Linux и initramfs:



Ядро - это сердце операционной системы, позволяющее пользователям взаимодействовать с оборудованием, установленным на сервере. 333



initramfs содержит драйверы, необходимые для запуска вашего сервера. Он содержит мини-файловую систему, которая монтируется во время загрузки. В нем находятся модули ядра, которые необходимы во время остальной части процесса загрузки (например, модули LVM и модули SCSI для доступа к дискам, которые не поддерживаются по умолчанию).

Обычно GRUB 2 работает нормально и не требует особого обслуживания. Однако в некоторых случаях вам может потребоваться изменить его конфигурацию. Для примения изменения к конфигурации GRUB 2, отправной точкой является файл /etc/default/grub, в котором есть параметры, указывающие GRUB, что делать и как это делать. В примере 17-3 показано содержимое этого файла после установки RHEL 8 с настройками по умолчанию.

Пример 17-3. Содержимое файла /etc/default/grub

Как видите, файл /etc/default/grub не содержит много информации. Самая важная часть, которую он настраивает, - это параметр GRUB_CMDLINE_LINUX. Эта строка содержит аргументы загрузки для ядра на вашем сервере. СОВЕТ Для экзамена RHCSA убедитесь, что вы понимаете содержимое файла /etc/default/grub. В любом случае, это самая важная часть конфигурации GRUB 2.

Помимо конфигурации в /etc/default/grub, есть несколько файлов конфигурации в /etc/grub.d. В этих файлах вы найдете довольно сложный код оболочки, который сообщает GRUB, что и как загружать. Обычно вам не нужно изменять эти файлы. Вам также не нужно ничего изменять, если вы хотите иметь возможность выбирать из разных ядер при загрузке. GRUB 2 автоматически подбирает новые ядра и автоматически добавляет их в меню загрузки, поэтому ничего не нужно добавлять вручную. Общие сведения о файлах конфигурации GRUB 2 На основе файлов конфигурации, упомянутых ранее, создается основной файл конфигурации. Если ваша система является системой BIOS, имя файла - /boot/grub2/grub.cf. В системе UEFI файл записывается в /boot/efi/EFI/redhat. После внесения изменений в 334

конфигурацию GRUB 2 вам потребуется повторно создать соответствующий файл конфигурации, поэтому вам следует знать имя файла, применимого к архитектуре вашей системы. Не редактируйте его, так как этот файл создается автоматически. Изменение параметров загрузки GRUB 2 по умолчанию Чтобы применить изменения к загрузчику GRUB 2, файл /etc/default/grub является вашей точкой входа. Самая важная строка в этом файле - GRUB_CMDLINE_LINUX, которая определяет, как должно быть запущено ядро Linux. В этой строке вы можете применить постоянные исправления к конфигурации GRUB 2. Некоторые вероятные кандидаты на удаление - это параметры rhgb и quiet. Эти параметры указывают ядру скрывать весь вывод во время загрузки. Это хорошо, чтобы скрыть запутанные сообщения для конечных пользователей, но, если вы являетесь администратором сервера, вы, вероятно, просто захотите удалить эти параметры. СОВЕТ На экзамене вы хотите сразу узнать, если что-то не получается. Для этого рекомендуется удалить параметры rhgb и quiet загрузки. Без них вам не придется гадать, почему вашему серверу требуется много времени после перезапуска; вы просто сможешь увидеть.

Еще один интересный параметр - GRUB_TIMEOUT. Это определяет количество времени, в течение которого ваш сервер ожидает доступа к меню загрузки GRUB 2, прежде чем он продолжит автоматическую загрузку. Если ваш сервер работает на физическом оборудовании, которое требует много времени для прохождения проверок BIOS, может быть интересно немного увеличить это время. При работе с GRUB 2 вам нужно немного знать об аргументах загрузки ядра. Их много, и большинство из них вы никогда не будете использовать, но хорошо знать, где их можно найти. Введите man 7 bootparam, чтобы открыть страницу руководства, содержащую прекрасное описание всех параметров загрузки, которые вы можете использовать при запуске ядра. Чтобы записать измененную конфигурацию в соответствующие файлы, вы используете команду grub2-mkconfig и перенаправляете ее вывод в соответствующий файл конфигурации. В системе BIOS команда будет grub2-mkconfig -o /boot/grub2/grub.cfg, а в системе UEFI команда имеет вид grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg. В упражнении 17-2 вы узнаете, как вносить изменения в конфигурацию GRUB 2 и записывать их в файл конфигурации /boot/grub2/grub.cfg. СОВЕТ. Вы должны знать, как применять изменения к конфигурации GRUB, но вы также должны знать, что конфигурация GRUB 2 по умолчанию работает нормально, как и почти для всех компьютеров.

Упражнение 17-2 Применение модификаций к GRUB 2

335

1. Откройте файл /etc/default/grub в редакторе и удалите параметры rhgb и quiet из строки GRUB_CMDLINE_LINUX. 2. Из того же файла установите для параметра GRUB_TIMEOUT значение 10 секунд. Сохраните изменения в файле и закройте редактор. 3. В командной строке введите grub2-mkconfig> /boot/grub2/grub.cfg, чтобы записать изменения в GRUB 2. (Обратите внимание, что вместо использования перенаправления > для записи изменений в файл grub.cfg вы можете использовать параметр -o. Оба метода дают одинаковый результат.) 4. Перезагрузитесь и убедитесь, что во время загрузки вы видите прокручивающиеся загрузочные сообщения.

Резюме В этой главе вы узнали, как Systemd и GRUB 2 используются для приведения вашего сервера в желаемое состояние в конце процедуры загрузки. Вы также узнали, как организован Systemd и как можно настроить автоматический запуск модулей с использованием targets. Наконец, вы прочитали, как применить изменения к загрузчику GRUB 2 по умолчанию. В следующей главе вы узнаете, как устранить неполадки при загрузке и исправить некоторые общие проблемы.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 17-2 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 17-2 Ключевые темы главы 17

Элемент ключевой темы

Описание

Страница

Раздел

Понимание юнитов targets

329

Раздел

Управление targets Systemd

330

Упражнение 17-1

Isolating targets

333

Список

Объяснение роли ядра и initramfs

333

Пример 17-3

Содержание файла /etc/default/grub

334

Упражнение 17-2

Применение модификаций к GRUB 2

335

336

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: unit, wants, target, Systemd, dependencies, initramfs, kernel, boot loader, GRUB

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Что такое unit? 2. Какая команда позволяет убедиться, что юнит сервиса больше не имеет права на автоматический запуск при загрузке системы? 3. Какой файл конфигурации следует изменить, чтобы применить общие изменения к GRUB 2? 4. Какую команду следует использовать, чтобы показать все загруженные в данный момент служебные юниты? 5. Как вы создаете wont для сервиса? 6. Как переключить текущую операционную target на rescue.target? 7. Почему может случиться так, что вы получите сообщение о том, что targets не может быть изолирована? 8. Вы хотите завершить работу службы Systemd, но прежде чем это сделать, вы хотите узнать, какие другие модули имеют зависимости от этой службы. Какую команду вы бы использовали? 9. Как называется файл конфигурации GRUB 2, в котором вы вносите изменения в GRUB 2? 10. Какую команду следует запустить после внесения изменений в конфигурацию GRUB 2?

Лабораторная работа в конце главы В лабораторной работе в конце главы вы устанавливаете новую версию ядра и работаете с модулями ядра.

Лабораторная работа 17.1 1. Установите targets по умолчанию на multi-user.target. 2. Перезагрузитесь, чтобы убедиться, что все работает должным образом.

337

Лабораторная работа 17.2 1. Измените конфигурацию загрузки GRUB 2 так, чтобы при запуске вы видели загрузочные сообщения.

338

Глава 18 В этой главе рассматриваются следующие темы: ▪ ▪ ▪ ▪ ▪

Понимание процедуры загрузки RHEL 8 Передача аргументов загрузки ядра Использование аварийного диска Устранение распространенных проблем Восстановление доступа к виртуальной машине

В этой главе рассматриваются следующие задачи экзамена RHCSA:

▪ ▪

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

В главе 17 «Управление и понимание процедуры загрузки» вы узнали, как загружается сервер RHEL 8 и какую роль в этом процессе играют загрузчик GRUB 2 и Systemd. В этой главе вы узнаете, что можно делать при возникновении типичных проблем при загрузке сервера. Здесь так же описываются общие подходы, которые помогают исправить некоторые из наиболее распространенных проблем, которые могут возникнуть при загрузке. Убедитесь, что вы хорошо усвоили темы, обсуждаемые в этой главе; однажды они могут спасти вашу (профессиональную) жизнь!

Основные навыки устранения неполадок Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 18 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 18 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Понимание процедуры загрузки RHEL 8

Вопросы 1

Передача аргументов загрузки ядра

2-6

Использование аварийного (Rescue) диска

7

Устранение распространенных проблем

8-9

339

Восстановление доступа к виртуальной машине 10 1. Что из перечисленного является первым при загрузке Red Hat Enterprise Linux 8? a. b. c. d.

Systemd Kernel GRUB 2 Initramfs

2. Вы только что ввели аргумент ядра в приглашении загрузки GRUB 2. Нажатие какой клавиши (клавиш) позволяет начать с загрузку с указанными аргументами? a. b. c. d.

ZZ Ctrl-X Esc Enter

3. Ваш initramfs кажется неисправным и не может инициализировать тома LVM на вашем диске. В каком файле конфигурации следует проверить используемые параметры? a. b. c. d.

/etc/dracut.d/dracut.conf /etc/dracut.conf /etc/sysconfig/dracut /etc/mkinitrd.conf

4. Вы не знаете пароля root и вы хотите его сбросить. Какой аргумент ядра предлагает рекомендуемый способ его сброса? a. b. c. d.

init=/bin/bash init=/bin/sh systemd.unit=emergency.target rd.break

5. Вы хотите точно видеть, что происходит при загрузке системы. Какие два варианта загрузки следует удалить из приглашения загрузки GRUB 2? (Выберите два.) a. b. c. d.

rhgb logo quiet silent

6. Вы хотите войти в режим минимального устранения неполадок, в котором загружается как можно меньше сервисов. Какой аргумент загрузки следует использовать? a. b. c. d.

systemd.unit=break.target systemd.unit=emergency.target systemd.unit=rescue.target 1

7. Какую из следующих ситуаций можно решить только с помощью аварийного диска? 340

a. b. c. d.

Ядро перестает загружаться. Initramfs перестает загружаться. Вы не получаете приглашение загрузки GRUB 2. Вам будет предложено ввести пароль root для режима обслуживания.

8. Вы вошли в режим устранения неполадок, и доступ к диску доступен только для чтения. Что вы должны сделать? a. Перезапустите режим устранения неполадок и передайте ядру параметр загрузки rw. b. Используйте аргумент загрузки rd.break, чтобы вручную запустить режим initramfs. c. Используйте mount -o remount, rw /. d. Используйте mount /. 9. Ваш сервер показывает мигающий курсор только во время загрузки. Меню GRUB 2 недоступно. Каков первый шаг к устранению этой проблемы? a. b. c. d.

С аварийного диска попробуйте вариант «Загрузка с локального диска». Запустите среду восстановления (rescue) и переустановите GRUB. Запустите среду восстановления (rescue) и заново создайте initramfs. Используйте загрузочный аргумент rd.break.

10. При восстановлении доступа к виртуальной машине необходимо сделать доступными устройства хранения в файле образа. Какая из следующих команд сделает это, если имя файла image - /home/user/lab1.img? a. b. c. d.

partx -ax /home/user/lab1.img kpartx -ax /home/user/lab1.img kpartx -av /home/user/lab1.img partx -av /home/user/lab1.img.

Основные темы Понимание процедуры загрузки RHEL 8

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

1. Выполнение POST: устройство включено. Из микропрограммы системы, которая может быть современным универсальным расширенным интерфейсом микропрограмм (UEFI) или классической базовой системой ввода-вывода (BIOS), выполняется самотестирование

341

2. 3. 4.

5.

6.

7.

8.

при включении (POST), и оборудование, необходимое для запуска система инициализирована. Выбор загрузочного устройства. Загрузочное устройство находится в загрузочной прошивке UEFI или в BIOS. Загрузка загрузчика: С загрузочного устройства находится загрузчик. В RHEL это обычно GRUB 2. Загрузка ядра: загрузчик может отображать меню загрузки для пользователя или может быть настроен на автоматический запуск операционной системы по умолчанию. Для загрузки Linux ядро загружается вместе с initramfs. Initramfs содержит модули ядра для всего оборудования, необходимого для загрузки, а также начальные сценарии, необходимые для перехода к следующему этапу загрузки. В RHEL 8 initramfs содержит полную операционную систему (которая может использоваться для устранения неполадок). Запуск /sbin/init: после загрузки ядра в память загружаются первые процессы, но все ещё из initramfs. Это процесс /sbin/init, который в RHEL связан с Systemd. Также загружается демон udev, который позаботится о дальнейшей инициализации оборудования. Все это попрежнему происходит из образа initramfs. Обработка initrd.target: процесс Systemd выполняет все юниты из initrd.target, который подготавливает минимальную операционную среду, в которой корневая файловая система на диске монтируется в каталог /sysroot. На данный момент загружено достаточно, чтобы перейти к установке системы, которая была записана на жесткий диск. Переключение на корневую файловую систему: система переключается на корневую файловую систему, которая находится на диске, и на этом этапе также может загрузить процесс Systemd с диска. Запуск target по умолчанию: Systemd ищет target по умолчанию для выполнения и запускает все ее модули. В этом процессе отображается экран входа в систему, и пользователь может пройти аутентификацию. Обратите внимание, что запрос на вход в систему может быть запрошен до того, как все файлы модулей Systemd будут успешно загружены. Таким образом, появление приглашения на вход не обязательно означает, что ваш сервер уже полностью готов к работе.

На каждом из перечисленных этапов могут возникнуть проблемы из-за неправильной конфигурации или других проблем. Таблица 18-2 показывает, где сконфигурирована конкретная фаза и что вы можете сделать для устранения неполадок, если что-то пойдет не так. СОВЕТ Устранение неполадок всегда было частью экзамена RHCSA. Если вы столкнулись с проблемой, убедитесь, что вы можете определить, на каком этапе процедуры загрузки она возникает и что вы можете сделать, чтобы ее исправить.

Таблица 18-2 Обзор конфигурации этапа загрузки и устранения неполадок

Фаза загрузки

Настройка

342

Исправляем это

Конфигурация оборудования (F2, Заменить оборудование. Esc, F10 или другая клавиша). Конфигурация BIOS/UEFI или Замените оборудование или меню загрузки оборудования. воспользуйтесь аварийной системой. Загрузка загрузчика grub2-install и редактируем Запрос загрузки GRUB и /etc/defaults/grub. редактирование в /etc/defaults/grub, за которым следует выполнить команду grub2-mkconfig. Загрузка ядра Изменяет конфигурацию GRUB и Запрос загрузки GRUB и /etc/dracut.conf. редактирование в /etc/defaults/grub, за которым следует выполнить команду grub2-mkconfig. Запускается /sbin/init Формируемый в initramfs. init= kernel аргумент загрузки ядра, аргумент загрузки ядра rd.break. Обработка initrd.target Формируемый в initramfs. Обычно не требуется. Переключитесь на Правки в файл /etc/fstab. Правки в файл /etc/fstab. корневую файловую систему Запуск target по Использование systemctl set- Запустите rescue.target как умолчанию default для создания аргумент загрузки ядра символической ссылки /etc/systemd/system/default.target POST (Power-On SelfTest) Выбор загрузочного устройства

В следующем разделе вы узнаете, как применять различные методы устранения неполадок, описанные в этой таблице. Передача аргументов загрузки ядра Если ваш сервер не загружается нормально, приглашение загрузки GRUB предлагает удобный способ остановить процедуру загрузки и передать определенные параметры ядру во время загрузки. В этом разделе вы узнаете, как получить доступ к приглашению загрузки и как передать определенные аргументы загрузки ядру во время загрузки. Доступ к запросу загрузки Когда ваш сервер загружается, вы на короткое время видите меню GRUB 2. Смотрите быстро, потому что это продлится всего несколько секунд. В этом меню загрузки вы можете ввести e, чтобы войти в режим, в котором вы можете редактировать команды, или c, чтобы войти в полную командную строку GRUB, как показано на рисунке 18-1. Чтобы передать параметры загрузки в стартовое ядро, используйте e.

РИСУНОК 18-1. Вход в запрос загрузки GRUB 343

После передачи e в меню загрузки GRUB вы увидите интерфейс, показанный на рисунке 18-2. В этом интерфейсе прокрутите вниз, чтобы найти раздел, который начинается с linux ($ root)/vmlinuz, за которым следует множество аргументов. Это строка, которая сообщает GRUB, как запустить ядро, и по умолчанию она выглядит так: linux ($root)/vmlinuz-4.18.0-80.el8.x86_64 root=/dev/mapper/rhel-root ro crash kernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/ root rd.lvm.lv=rhel/swap rhgb quiet РИСУНОК 18-2. Ввод аргументов загрузки в строке, начинающейся с Linux

Для начала рекомендуется удалить из этой строки части rhgb и quiet; эти аргументы скрывают загрузочные сообщения для вас, и обычно вы хотите видеть, что происходит во время загрузки. В следующем разделе вы узнаете о некоторых параметрах устранения неполадок, которые можно ввести из приглашения загрузки GRUB. После ввода параметров загрузки, которые вы хотите использовать, нажмите Ctrl-X, чтобы запустить ядро с этими параметрами. Обратите внимание, что эти параметры используются только 344

один раз и не являются постоянными. Чтобы сделать их постоянными, вы должны изменить содержимое файла конфигурации /etc/default/grub и использовать grub2-mkconfig -o /boot/grub2/grub.cfg для применения модификации. (См. Главу 17 для получения более подробной информации об этой процедуре.) Запуск target для устранения неполадок Если вы столкнулись с проблемами при загрузке сервера, у вас есть несколько вариантов, которые вы можете ввести в приглашении загрузки GRUB:









rd.break: останавливает процедуру загрузки на этапе initramfs. Эта опция полезна, если у вас нет пароля root. Полная процедура восстановления утерянного пароля root следует далее в этой главе. init=/bin/sh or init=/bin/bash: указывает, что оболочка должна быть запущена сразу после загрузки ядра и initrd. Это полезный вариант, но не лучший, потому что в некоторых случаях вы потеряете доступ к консоли или упустите другие функции. systemd.unit=emergency.target: переходит в режим, в котором загружается минимальное количество модулей Systemd. Требуется пароль root. Чтобы увидеть, что загружено только очень ограниченное количество файлов модулей, вы моете ввести команду systemctl listunits. systemd.unit=rescue.target: запускает еще несколько модулей Systemd, чтобы вы перешли в более полный рабочий режим. Требуется пароль root. Чтобы увидеть, что загружено только очень ограниченное количество файлов модулей, вы можете ввести команду systemctl list-units.

В упражнении 18-1 вы узнаете, как войти в режим rescue.target. Другие перечисленные здесь режимы обсуждаются в следующих разделах. Упражнение 18-1. Изучение целей для поиска и устранения неисправностей. 1. (Пере) запустите компьютер. Когда появится меню GRUB, выберите первую строку в меню и нажмите e. 2. Прокрутите вниз до строки, которая начинается с linux $(root)/vmlinuz. В конце этой строки введите systemd.unit=rescue.target. Также удалите из этой строки параметры rhgb quit. 3. Когда вам будет предложено ввести пароль root, сделайте это. 4. Введите systemctl list-units. Это показывает все юнит файлы, которые в настоящее время загружены. Вы можете видеть, что загружена основная системная среда. 5. Введите systemctl show-environment. Это показывает текущие переменные среды оболочки. 6. Введите systemctl reboot, чтобы перезагрузить компьютер. 7. Когда появится меню GRUB, нажмите e еще раз, чтобы войти в режим редактора. В конце строки, загружающей ядро, введите systemd.unit=emergency.target. 8. При появлении запроса введите пароль root для входа в систему. 9. После успешного входа в систему введите systemctl list-units. Обратите внимание, что количество загружаемых юнит файлов сокращено до минимума. 345

Использование аварийного (Rescue) диска Если вам повезет, когда вы столкнетесь с проблемой, вы все равно сможете загрузиться с жесткого диска. Если вам повезет чуть меньше, вы просто увидите мигающий курсор на системе, которая вообще не загружается. Если это произойдет, вам понадобится аварийный диск. Образ восстановления по умолчанию для Red Hat Enterprise Linux находится на установочном диске. При загрузке с установочного диска вы увидите пункт меню «Устранение неполадок» (Troubleshooting). Выберите этот элемент, чтобы получить доступ к параметрам, необходимым для ремонта вашей машины. Восстановление доступа к системе с помощью аварийного диска После выбора параметра Устранение неполадок вам будут представлены следующие параметры, как показано на Рисунке 18-3: РИСУНОК 18-3. Запуск с аварийного диска









Установить Red Hat Enterprise Linux 8 в базовом графическом режиме (Install Red Hat Enterprise Linux 8 in Basic Graphics Mode:): этот вариант переустанавливает вашу машину. Не используйте его, если вы не хотите устранить ситуацию, когда обычная установка не работает и вам нужен базовый графический режим. Обычно вам никогда не нужно использовать эту опцию для устранения неполадок при установке. Спасение системы Red Hat Enterprise Linux (Rescue a Red Hat Enterprise Linux System): это наиболее гибкая система спасения. В упражнении 18-2 вы можете изучить это подробно. Это должен быть первый вариант выбора при использовании аварийного диска. Запустить тест памяти (Boot from Local Drive): запустите эту опцию, если вы обнаружите ошибки памяти. Это позволяет вам отмечать неисправные микросхемы памяти, чтобы ваша машина могла нормально загружаться. Загрузка с локального диска. Если вы не можете загрузиться из GRUB на жестком диске, сначала попробуйте этот вариант. Он предлагает загрузчик, который пытается установить 346

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

После запуска системы аварийного восстановления обычно требуется разрешить полный доступ к установке на диске. Обычно аварийный диск обнаруживает вашу установку и монтирует ее в каталог /mnt/sysimage. Чтобы исправить доступ к файлам конфигурации и их местоположениям по умолчанию, поскольку они должны быть доступны на диске, используйте команду chroot /mnt/sysimage, чтобы сделать содержимое этого каталога вашей реальной рабочей средой. Если вы не используете эту команду chroot, многие утилиты не будут работать, потому что если они записывают в конфигурационный файл, то это будет та версия, которая существует на диске только для чтения. Использование команды chroot гарантирует, что все ссылки на пути к файлам конфигурации верны. В упражнении 18-2 вы узнаете, как использовать параметр «Спасение системы Red Hat Enterprise Linux» для устранения неполадок в системе, которая больше не загружается. Упражнение 18-2 Использование функции спасения 1. Перезагрузите сервер с установочного диска. Выберите пункт меню «Устранение неполадок». 2. В меню «Устранение неполадок» выберите «Спасение системы Red Hat Enterprise Linux». Вам будет предложено нажать Enter, чтобы начать установку. Не волнуйтесь: эта опция не перезаписывает вашу текущую конфигурацию; он просто загружает спасательную систему. 3. Система восстановления теперь предлагает вам попытаться найти установленную систему Linux и смонтировать ее в /mnt/sysimage. Нажмите 1, чтобы принять вариант «Продолжить» (см. Рисунок 18-4). РИСУНОК 18-4. Спасательная система ищет установленный образ системы и подключает его за вас.

347

4. Если была найдена допустимая установка Red Hat, появится сообщение о том, что ваша система смонтирована в /mnt/sysimage. На этом этапе вы можете дважды нажать Enter, чтобы получить доступ к спасательной оболочке. 5. Ваша установка Linux на этом этапе доступна через каталог /mnt/sysimage. Введите chroot /mnt/sysimage. На этом этапе у вас есть доступ к корневой файловой системе и все инструменты, необходимые для восстановления доступа к вашей системе. 6. Введите команду exit и reboot, чтобы перезагрузить компьютер в обычном режиме.

Переустановка GRUB с помощью аварийного диска Одна из распространенных причин, по которой вам может потребоваться запустить аварийный диск, - это поломка загрузчика GRUB 2. Если это произойдет, вам может потребоваться переустановить его. После восстановления доступа к серверу с помощью аварийного диска переустановка GRUB 2 несложна и состоит из двух шагов: ▪ ▪

Убедитесь, что вы сделали содержимое каталога /mnt/sysimage доступным для вашей текущей рабочей среды, используя chroot, как описано ранее. Используйте команду grub2-install, за которой следует имя устройства, на котором вы хотите переустановить GRUB 2. Итак, на виртуальной машине KVM используйте команду grub2-install /dev/vda, а на физическом сервере или виртуальная машина VMware или Virtual Box, это grub2-install /dev/sda.

Повторное создание Initramfs с помощью аварийного диска Иногда образ initramfs также может быть поврежден. В этом случае вы не сможете загрузить свой сервер в нормальный рабочий режим. Чтобы восстановить образ initramfs после загрузки в среду восстановления, вы можете использовать команду dracut. Если используется без аргументов, эта команда создает новую initramfs для загруженного в данный момент ядра. В качестве альтернативы вы можете использовать команду dracut с несколькими параметрами, чтобы создать initramfs для определенных сред ядра. Существует также файл конфигурации с именем /etc/dracut.conf, который вы можете использовать для включения определенных параметров при повторном создании initramfs. Конфигурация dracut разбросана по разным локациям: ▪ ▪ ▪

/usr/lib/dracut/dracut.conf.d/*.conf содержит файлы конфигурации системы по умолчанию. /etc/dracut.conf.d содержит пользовательские файлы конфигурации dracut. /etc/dracut.conf используется как главный файл конфигурации.

В примере 18-1 показан пример файла конфигурации dracut.conf по умолчанию. Пример 18-1 /etc/dracut.conf Содержимое по умолчанию

348

349

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

Исправление общих проблем В одной небольшой главе, подобной этой, невозможно рассмотреть все возможные проблемы, с которыми можно столкнуться при работе с Linux. Однако есть некоторые проблемы, которые возникают чаще, чем другие. В этом разделе вы узнаете о некоторых наиболее распространенных проблемах. Переустановка GRUB 2 Код загрузчика не исчезает просто так, но иногда может случиться так, что загрузочный код GRUB 2 будет поврежден. В этом случае вам лучше знать, как переустановить GRUB 2. Точный подход зависит от того, находится ли ваш сервер в загруженном состоянии. Если это так, переустановить GRUB 2 довольно просто. Просто введите grub2-install, а затем имя устройства, на которое вы хотите его установить. У команды есть много разных опций для точной настройки того, что именно будет установлено, но они, вероятно, вам не понадобятся, потому что по умолчанию команда устанавливает все, что вам нужно, чтобы ваша система снова стала загрузочной. Переустановка GRUB 2 становится немного сложнее, если ваш компьютер не загружается. Если это произойдет, вам сначала нужно запустить аварийную систему и восстановить доступ к вашему серверу из аварийной системы. (См. В упражнении 18-2 точную процедуру, как это сделать.) После монтирования файловых систем вашего сервера в /mnt/sysimage и использования chroot /mnt/sysimage, чтобы сделать смонтированный образ системы корневым образом, переустановка выполняется так же просто, как описано ранее: выполните команду grub2-install, чтобы установить GRUB 2 на желаемое установочное устройство. Итак, если вы находитесь на виртуальной машине KVM, запустите grub2-install /dev/vda, а если вы находитесь на физическом диске, запустите grub2-install /dev/sda. Исправляем Initramfs В редких случаях может случиться так, что initramfs будет поврежден. Если вы внимательно проанализируете процедуру загрузки, вы узнаете, что у вас проблемы с initramfs, потому что вы никогда не увидите, как корневая файловая система монтируется в корневом каталоге, и не увидите, как начинают работать какие-либо Systemd устройства. Если вы подозреваете, что у вас проблема с initramfs, это не страшно так как initramfs легко востановить. Чтобы воссоздать его со всеми настройками по умолчанию (что в большинстве случаев нормально), вы можете просто запустить команду dracut --force. (Без --force команда откажется перезаписать ваши существующие initramfs.) При запуске команды dracut вы можете использовать файл конфигурации /etc/dracut.conf, чтобы указать, что именно записывается в initramfs. В этом файле конфигурации вы можете увидеть такие параметры, как lvmconf="no", которые можно использовать для включения или 350

выключения определенных функций. Используйте эти параметры, чтобы убедиться, что у вас есть все необходимые функции в initramfs. Восстановление после проблем с файловой системой Если вы неправильно сконфигурируете монтируемые файловые системы, процедура загрузки может просто закончиться сообщением «Дайте пароль root для обслуживания (Give root password for maintenance)». Это сообщение, в частности, генерируется командой fsck, которая пытается проверить целостность файловых систем в /etc/fstab во время загрузки. Если fsck не работает, требуется ручное вмешательство, которое может привести к появлению этого сообщения во время загрузки. Убедитесь, что вы знаете, что делать в таком случае! СОВЕТ Убедитесь, что вы хорошо усвоили эту тему. Темы, связанные с файловой системой, имеют большой вес в целях RHCSA, и вполне вероятно, что вам потребуется создать разделы и/или логические тома и поместить их в /etc/fstab для автоматического монтирования. Это также увеличивает вероятность того, что что-то пойдет не так, и если это произойдет на экзамене, вам лучше убедиться, что вы знаете, как это исправить!

Если упоминается устройство, которое не существует, или если есть ошибка в UUID, который используется, например, для монтирования устройства, Systemd сначала ждет, чтобы увидеть, вернется ли устройство само. Если этого не происходит, появляется сообщение «Дайте пароль root для обслуживания» (см. Рис. 18-5). Если это произойдет, вы обязательно должны сначала ввести пароль root. Затем вы можете ввести journalctl -xb, как предлагается, чтобы увидеть, записываются ли в журнал соответствующие сообщения, содержащие информацию о том, что пошло не так. Если проблема связана с файловой системой, введите mount -o remount, rw /, чтобы убедиться, что корневая файловая система смонтирована для чтения/записи (read/writ), проанализируйте, что не так в файле /etc/fstab, и исправьте это. РИСУНОК 18-5. Если вы это видите, у вас обычно проблема с файлом /etc/fstab.

351

Сброс пароля root Обычный сценарий для администратора Linux – пропал или забыли пароль root. Если это произойдет, вам необходимо его сбросить. Единственный способ сделать это - загрузиться в минимальном режиме, который позволяет вам входить в систему без ввода пароля. Для этого выполните следующие действия:

1. При загрузке системы нажмите e, когда отображается меню загрузки GRUB 2. 2. Введите rd.break в качестве аргумента загрузки в строку, загружающую ядро, и нажмите Ctrl-X для загрузки с этой опцией. 3. Теперь вы будете сброшены в конце этапа загрузки, на котором загружается initramfs, непосредственно перед монтированием корневой файловой системы в каталог /. 4. Введите mount -o remount,rw /sysroot, чтобы получить доступ для чтения/записи к образу системы. 5. На этом этапе сделайте содержимое каталога /sysimage вашим новым корневым каталогом, набрав chroot /sysroot. 6. Теперь вы можете ввести пароль и установить новый пароль для пользователя root. 7. Поскольку на ранней стадии загрузки SELinux еще не был активирован, тип контекста в /etc/shadow будет перепутан. Если вы перезагрузитесь в этот момент, никто не сможет войти в систему. Поэтому вы должны убедиться, что тип контекста установлен правильно. Для этого на этом этапе вы должны загрузить политику SELinux с помощью load_policy i. Дополнительную информацию о SELinux вы найдете в главе 22 «Управление SELinux». 8. Теперь вы можете вручную установить правильный тип контекста в /etc/shadow. Для этого введите chcon -t shadow_t /etc/shadow. 9. Перезагрузитесь. Теперь вы можете войти в систему с измененным паролем для пользователя root. ПРИМЕЧАНИЕ. В предыдущей процедуре вы прочитали, как использовать команды load_policy -i и chcon для исправления меток в файле /etc/shadow. Альтернативный (и более простой) метод - создать файл с именем /.autorelabel, который заставит SELinux восстанавливать метки, установленные для всей файловой системы.

Восстановление доступа к виртуальной машине Особым случаем устранения неполадок является ситуация с виртуальной машиной. Если у вас возникла проблема с виртуальной машиной, и вы не можете получить к ней доступ с помощью Virtual Machine Manager или консоли virsh, вы также не сможете подключиться к ней с помощью SSH. Однако вариант все же есть. Описанная здесь методика немного продвинута, но поскольку она может когда-нибудь помочь вам восстановить доступ к виртуальной машине, которая в противном случае была бы потеряна, о ней стоит знать. СОВЕТ. 352

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

1. Для начала откройте корневую оболочку на хосте KVM. В этом файле хоста убедитесь, что виртуальная машина остановлена с помощью команды virsh destroy vmname. (Используйте имя виртуальной машины, указанное в команде virsh list.) 2. Найдите файл образа диска. Обычно он хранится в каталоге /var/lib/libvirt/images. Если вы не можете найти его там, используйте virsh dumpxml vmname | grep "source file =", чтобы найти имя исходного файла: [[root@lab ~]# virsh dumpxml sander-vm1 | grep "source file="

3. Теперь, когда вы знаете имя файла образа виртуальной машины, вы можете подключить его к среде хоста с помощью команды kpartx -a. Эта команда анализирует структуру диска на виртуальной машине и создает устройства хранения, которые позволяют монтировать устройства на виртуальной машине в файловой системе хоста: [root@lab ~]# kpartx -av /home/sander/lab1.img add map loop0p1 (253:5): 0 1024000 linear /dev/loop0 2048 add map loop0p2 (253:6): 0 7362560 linear /dev/loop0 1026048 4. Команда kpartx создала устройства, которые позволяют вам получить доступ к двум разделам виртуальной машины. Если это типичная установка RHEL 8, первый раздел - это раздел /boot, а второй раздел обычно используется для логических томов LVM. Вы можете легко смонтировать раздел /boot с помощью mount /dev/mapper/loop0p1/mnt. 5. Чтобы получить доступ к логическим томам, которые существуют во втором разделе виртуальной машины, используйте команду pvscan: [root@lab mapper]# pvscan /dev/mapper/loop0p2 PV /dev/sda3 VG centos lvm2 [48.83 GiB / 0 free] PV /dev/sda4 VG centos lvm2 [50.00 GiB / 20.00 GiB free] PV /dev/sda5 VG vglvm lvm2 [347.32 GiB / 329.32 GiB free] PV /dev/mapper/loop0p2 VG centosvm lvm2 [3.51 GiB / 0 free] Total: 4 [449.65 GiB] / in use: 4 [449.65 GiB] / in no VG: 0 [0 ] 6. Теперь вы активировали настройку LVM на виртуальной машине. Если вы введете команду lvs, вы также должны увидеть список логических томов, но в активном состоянии. Чтобы активировать их, используйте команду vgchange для группы томов, которая была найдена в файле образа диска виртуальной машины. Итак, для этого экзамена вы набираете vgchange -a y centosvm, чтобы активировать все логические тома. После этого вы можете смонтировать их, чтобы получить прямой доступ ко всем файлам в файловой системе виртуальной машины и исправить все проблемы, которые препятствовали нормальной загрузке виртуальной машины. 353

ПРЕДУПРЕЖДЕНИЕ. Эта процедура работает хорошо, если на виртуальной машине не используется, то же имя группы томов LVM, что и на хост-машине. Обычно это не так, потому что имя VG по умолчанию совпадает с именем хоста (и обычно вы хотите, чтобы имена хостов были уникальными). Однако, если имена VG не уникальны, вы рискуете перепутать их и работать не с тем логическим томом.

7. После того, как вы устранили все проблемы на виртуальной машине, сначала необходимо размонтировать все смонтированные файловые системы. Затем вам необходимо удалить файлы устройств, созданные на основе содержимого файла образа виртуальной машины, с помощью команды kpartx -dv /home/sander/lab1.img (обязательно используйте имя файла образа, который фактически используется на вашем компьютере.)

Резюме В этой главе вы узнали, как устранить неполадки, связанные с процедурой загрузки Red Hat Enterprise Linux 8. Вы узнали в общих чертах, что происходит при загрузке сервера и в какие конкретные моменты вы можете вмешаться, чтобы исправить что-то, что идет не так. Вы также узнали, что делать в некоторых конкретных случаях. Убедитесь, что вы хорошо знаете эти процедуры; вы наверняка встретите их на экзамене.

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 18-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 18-3 Ключевые темы главы 18 Элемент ключевой темы Список Таблица 18- 2 Список

Описание Сводка фаз, обработанных при загрузке Обзор конфигурации фазы загрузки и устранения неполадок Сводка соответствующих параметров загрузки GRUB 2 для устранения неполадок 354

Страница 341 342 345

Список

Сброс пароля root

352

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: target, GRUB, initramfs, dracut

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 11. Какую клавишу нужно нажать, чтобы войти в режим редактора меню загрузки GRUB? 12. Во время запуска процедура загрузки не завершается, и вместо этого сервер запрашивает пароль root. Что может быть причиной этого? 13. Вы хотите войти в режим устранения неполадок, но не знаете пароль root. Какой аргумент вы бы передали ядру, чтобы перейти в режим, обеспечивающий доступ к большей части функций машины? 14. Вы запускаете свой сервер, но ничего не происходит. Вы просто видите мигающий курсор и все. Каков первый шаг к устранению этой проблемы? 15. Вы хотите узнать, какие устройства доступны в конкретной среде устранения неполадок. Какую команду вы бы использовали? 16. Вы хотите начать устранение неполадок, связанных с утерянным паролем root. Какой аргумент вы бы передали загрузчику GRUB 2? 17. Из оболочки, которую вы запустили для устранения неполадок, связанных с утерянным паролем для пользователя root, вы хотите загрузить политику SELinux. Какая команда позволяет вам это делать? 18. Что вам нужно сделать, чтобы убедиться, что метки SELinux установлены правильно, при устранении неполадок с паролем root? 19. Вы применили изменения к загрузчику GRUB 2 и хотите их сохранить. Как ты это делаешь? 20. Вы знаете, пароль root на машине, на которой хотите войти в режим минимального устранения неполадок. Какой аргумент загрузки GRUB 2 вы бы использовали?

Лабораторная работа в конце главы В лабораторной работе 18.1 показано, как устранять некоторые распространенные проблемы.

355

Лабораторная работа 18.1 1. Перезагрузите сервер и измените пароль root в соответствующем режиме устранения неполадок. 2. В /etc/fstab измените одно из имен устройств, чтобы при следующей перезагрузке файловую систему на нем нельзя было смонтировать. Перезагрузите и устраните возникшую проблему. 3. Воспользуйтесь аварийным диском, чтобы перевести сервер в режим полного устранения неполадок с аварийного диска. 4. Заново создайте initramfs.

356

Глава 19 В этой главе рассматриваются следующие темы: ▪ ▪

Понимание основных элементов сценариев оболочки Использование переменных и ввода ▪ Использование условных циклов Создание сценариев оболочки - это наука сама по себе. В этой главе вы не узнаете обо всех тонкостях, связанных с этой наукой. Вместо этого вы узнаете, как применять основные элементы сценария оболочки, что позволяет вам написать простой сценарий оболочки и проанализировать, что происходит в сценарии оболочки.

Введение в сценарии оболочки Bash Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 19 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 19 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Понимание основных элементов сценариев оболочки

1-2

Использование переменных и ввода

3-5

Использование условных циклов

6 - 10

1. С какой строки должен начинаться каждый сценарий оболочки Bash? a. b. c. d.

/bin/bash #!/bin/bash !#/bin/bash !/bin/bash

2. Какова цель команды exit 0, которую можно использовать в конце сценарий? a. Он сообщает родительской оболочке, что сценарий может быть выполнен без каких-либо проблем. b. Это гарантирует, что сценарий может быть остановлен должным образом.

357

c. Это требуется только в том случае, если цикл for был использован для закрытия структуры цикла for. d. Он используется для завершения условной структуры в скрипте. 3. Как остановить сценарий, чтобы пользователь мог вводить данные? a. b. c. d.

pause break read stop

4. В какой строке хранится значение первого аргумента, предоставленного при запуске скрипта в переменной NAME? a. b. c. d.

NAME = $1 $1 = NAME NAME = $@ NAME=$1

5. Как лучше всего различать разные аргументы, переданные в сценарий оболочки?

a. b. c. d.

$? $# $* $@

6. Что используется для закрытия цикла if?

a. b. c. d.

end exit stop fi

7. Чего не хватает в следующем скрипте на позиции точек? if [ -f $1 ] then echo "$1 is a file" ..... [ -d $1 ] then echo "$1 is a directory" else echo "I do not know what \$1 is" fi

358

a. b. c. d.

else if elif or

8. Чего не хватает в следующем скрипте на позиции точек? for (( counter=100; counter>1; counter-- )); ....... echo $counter done exit 0 a. b. c. d.

in do run start

9. Какая команда используется для отправки сообщения с темой «ошибка» пользователю root, если что-то не работает в скрипте?

a. b. c. d.

mail error root mail -s error root mail -s error root . mail -s error root < .

10. В операторе case рекомендуется включить строку, которая применяется ко всем остальным ситуациям. Что из следующего подойдет? a. *) b. * c. else d. or

Основные темы Понимание основных элементов сценариев оболочки По сути, сценарий оболочки - это список последовательно выполняемых команд с некоторой дополнительной логикой сценариев, которая позволяет выполнять код только при определенных условиях. Чтобы понять сложные сценарии оболочки, рекомендуется начать с примера очень простого сценария, показанного в Примере 19-1.

Пример 19-1 Пример базового скрипта

359

Этот базовый сценарий содержит несколько элементов, которые следует использовать во всех сценариях. Для начала - shebang. Это строка #!/bin/bash. Когда сценарий запускается из родительской среды оболочки, он открывает подоболочку. В этой подоболочке выполняются разные команды. Эти команды можно интерпретировать любым способом, и чтобы было понятно, как их следует интерпретировать, используется команда shebang. В этом случае shebang дает понять, что сценарий является сценарием оболочки Bash. Также могут быть указаны другие оболочки. Например, если ваш скрипт содержит код Perl, shebang должен быть #!/usr/bin/perl. Хорошая практика - начинать сценарий с shebang; если он не указан, код сценария будет выполняться оболочкой, которая также используется в родительской оболочке. Поскольку ваши сценарии также могут выполняться, например, пользователями оболочки ksh, использование shebang для вызова /bin/bash в качестве подоболочке важно во избежание путаницы. Сразу после shebang, есть часть, которая объясняет, о чем сценарий. В каждый сценарий рекомендуется включать несколько строк комментариев. В коротком сценарии часто очевидно, что он делает. Если сценарий становится длиннее и по мере того, как все больше людей участвует в написании и поддержке сценария, становится менее ясно, в чём конечная цель выполнения скрипта. Чтобы этого избежать, убедитесь, что вы добавили строки комментариев, начинающиеся с символа #. Включите их не только в начало сценария, но и в начало каждого раздела сценария. Комментарии наверняка будут полезны, если вы прочитаете свой сценарий несколько месяцев спустя и не помните, что именно вы пытались сделать при его создании. Вы также можете использовать комментарии внутри строк. Независимо от того, в какой позиции используется #, все от # до конца строки является текстом комментария. Далее следует тело сценария. В примере 19-1 тело представляет собой простой сценарий, содержащий несколько последовательно выполняемых команд. Тело может расти по мере развития сценария. В конце сценария я включил оператор exit 0. Оператор exit сообщает родительской оболочке, был ли сценарий успешным. 0 означает, что завершение было успешно, а все остальное означает, что скрипт обнаружил проблему. Статус выхода последней команды в скрипте - это статус выхода самого скрипта, если только команда выхода не используется в конце скрипта. Но хорошо знать, что вы можете работать с exit, чтобы сообщить родительской оболочке, как все прошло. Чтобы запросить статус выхода последней команды из родительской оболочки, используйте команду echo $?. Это может быть полезно для определения того, не сработало ли чтото и почему. После написания скрипта убедитесь, что он может быть выполнен. Наиболее распространенный способ сделать это - применить к нему разрешение на выполнение. Итак, если имя скрипта hello, используйте команду chmod +x hello, чтобы сделать его исполняемым. Сценарий также может быть выполнен, например, как аргумент команды bash. Используйте bash hello для запуска сценария hello. Если сценарий запускается как аргумент команды bash, не обязательно, чтобы он был исполняемым.

360

В основном вы можете хранить скрипт где угодно, но если вы собираетесь хранить его в месте, которое не включено в переменную $PATH, вам нужно выполнить его с ./ перед именем скрипта. Итак, если просто набрать имя скрипта hello этого будет недостаточно для его запуска; введите ./hello, чтобы запустить его. Обратите внимание, что это также необходимо, если вы хотите запустить сценарий из текущего каталога, потому что в Linux текущий каталог не включен в переменную $PATH. Или поместите его в стандартный каталог, который включен в переменную $PATH, например в каталог /usr/local/bin. В упражнении 19-1 вы напишете простой сценарий оболочки. Упражнение 19-1 Написание простого сценария оболочки 1. Используйте vim для создания сценария с именем hello в вашем домашнем каталоге. 2. Придайте этому сценарию содержимое, которое вы видите в примере 19-1, и закройте его. 3. Используйте ./hello, чтобы попробовать выполнить его. Вы получаете сообщение об ошибке «В разрешении отказано (permission denied)». 4. Введите chmod + x hello и попробуйте запустить его снова. Вы видите, что теперь скрипт выполниться. Использование переменных и ввода Сценарии Linux Bash - это гораздо больше, чем просто список последовательно выполняемых команд. Одна из приятных особенностей скриптов - то, что они могут работать с переменными и вводом, чтобы сделать скрипт гибким. В этом разделе вы узнаете, как работать с переменными и вводом. Использование позиционных параметров При запуске скрипта можно использовать аргументы. Аргумент - это все, что вы ставите за командой скрипта при ее запуске. Чтобы сделать сценарий более гибким, можно использовать аргументы. Возьмем, к примеру, команду useradd lisa. В этом примере используется команда useradd, а аргумент lisa который указывает, что нужно сделать. В данном случае необходимо создать пользователя с именем lisa. В этом примере lisa является аргументом команды useradd. В сценарии первый аргумент упоминается как $1, второй аргумент упоминается как $2 и так далее. Пример сценария в Примере 19-2 показывает, как можно использовать аргумент. Продолжайте и попробуйте, используя любые аргументы, которые вы хотите применить. (Примечание при переводе: после создание скрипта предполагается, что выполняться он будет следующим образом при имени скрипта test.sh ввод будет выглядеть, как ./test.sh 2 17 3 где перечисленные значения будут аргументами для выполнения скрипта. То же относиться для следующего примера.) Пример 19-2 Пример сценария, использования аргументов #!/bin/bash # run this script with a few arguments echo The first argument is $1 echo The second argument is $2 361

echo The third argument is $3 Если вы попытались запустить образец кода из примера 19-2, вы могли заметить, что его содержимое несовершенно. Если вы используете три аргумента при использовании скрипта, он будет работать отлично. Если вы используете только два аргумента, третье эхо выводится без значения для $3. Если вы используете четыре аргумента, четвертое значение (которое будет храниться в $4) никогда не используется. Итак, если вы хотите использовать аргументы, вам лучше использовать более гибкий подход. В примере 19-3 показан пример сценария, в котором используется более гибкий подход. Пример 19-3 Гибкое использование аргументов #!/bin/bash # run this script with a few arguments echo you have entered $# arguments for i in "$@"; do echo $i done exit 0 В примере 19-3 представлены два новых элемента, относящихся к аргументам: ▪ ▪

$# - счетчик, показывающий, сколько аргументов было использовано при запуске сценарий. $@ относится ко всем аргументам, которые использовались при запуске сценария.

Чтобы оценить аргументы, которые использовались при запуске этого сценария, можно использовать условный цикл for. В условных циклах for команды выполняются, пока выполняется условие. В этом сценарии условие для i указано в «$@», что означает «для каждого аргумента». Каждый раз, когда сценарий проходит цикл, значение переменной $@ присваивается переменной $i. Итак, пока есть аргументы, выполняется тело скрипта. Тело цикла for всегда начинается с do и закрывается с помощью done, а между этими двумя перечисляются команды, которые необходимо выполнить. Итак, пример сценария в Примере 19-3 будет использовать echo для отображения значения каждого аргумента и остановится, когда аргументы станут недоступны. В упражнении 19-2 вы можете попробовать это сами, написав сценарий, работающий с позиционными параметрами. Упражнение 19-2 Работа с позиционными параметрами 1. Откройте редактор, создайте сценарий с именем ex192a и скопируйте содержимое из примера 19-2 в этот сценарий. 2. Сохраните сценарий и сделайте его исполняемым. 3. Запустите команду ./ex192a a b c. Вы видите, что повторяются три строки. 4. Запустите команду ./ex192a a b c d e f. Вы видите, что все еще повторяются три строки. 5. Откройте редактор для создания сценария ex192 и скопируйте содержимое из примера 193 в этот сценарий. 362

6. Сохраните сценарий и сделайте его исполняемым. 7. Запустите команду ./ex192 a b c. Вы видите, что повторяются три строки. 8. Запустите команду ./ex192 без аргументов. Вы видите, что это ничего не перекликается. Работа с переменными

Переменная - это метка, которая используется для обозначения определенного места в памяти, содержащего определенное значение. Переменные можно определять статически с помощью NAME=value(значение) или назначаться динамически. Есть два решения для динамического определения переменной:

▪ ▪

Используйте read в сценарии, чтобы спросить пользователя, который запускает сценарий, для ввода. Используйте подстановку команд, чтобы использовать результат команды и присвоить его переменной. Например, команда date +% d-% m-% y показывает текущую дату в формате день-месяц-год. Чтобы присвоить это переменной в скрипте, вы можете использовать TODAY=$ (date +% d-% m-% y). При подстановке команд вам просто нужно заключить в круглые скобки команду, результат которой вы хотите использовать, со знаком доллара перед открывающими скобками. В качестве альтернативы этому обозначению можно использовать обратные кавычки. Таким образом, команда TODAY=`date +% d-% m-% y` будет делать то же самое.

В предыдущем разделе о позиционных параметрах вы узнали, как предоставить аргументы при запуске скрипта. В некоторых случаях может быть более эффективным запросить информацию, когда вы обнаружите, что чего-то существенного не хватает. Сценарий в примере 19-4 показывает, как это сделать с помощью read. Пример 19-4 Пример сценария, использующего команду read #!/bin/bash if [ -z $1 ]; then echo enter a name read NAME else NAME=$1 fi echo you have entered the text $NAME exit 0 В примере 19.4 оператор if ... then ... else ... fi используется для проверки существования аргумента $1. Это делается с помощью команды test, которую можно записать двумя способами: test или [...]. В примере 19-4 выполняется строка if [-z $1], чтобы проверить, истинна ли проверка -z $1. -z test проверяет, не существует ли $1. В противном случае строка if [-z $1] проверяет, пуст 363

ли $1; если да, это означает, что при запуске этого скрипта не было предоставлено никаких аргументов. В этом случае выполняются команды после оператора then. Обратите внимание, что при написании тестовой команды с квадратными скобками необходимо включать один пробел после открывающей скобки и один пробел перед закрывающей скобкой; без этих пробелов команда работать не будет. Обратите внимание, что оператор then следует сразу за командой test. Это возможно, потому что используется точка с запятой (;). Точка с запятой является разделителем команд и может заменять новую строку в скрипте. В операторе then выполняются две команды: команда echo, отображающая сообщение на экране, и команда read. Команда read останавливает сценарий, чтобы пользовательский ввод мог быть обработан и сохранен в переменной NAME. Итак, строка, прочитанная NAME, помещает весь пользовательский ввод в переменную NAME, которая будет использоваться позже в скрипте. В примере сценария в Примере 19-4 следующая часть вводится оператором else. Команды после оператора else выполняются во всех остальных случаях, что в данном случае означает «если аргумент был предоставлен». В этом случае определяется переменная NAME и ей присваивается текущее значение $1. Обратите внимание, как определяется переменная: сразу после имени переменной стоит знак =, за которым следует $1. Обратите внимание, что вы никогда не должны использовать пробелы при определении переменных. Затем цикл if замыкается с помощью оператора fi. После завершения цикла if вы точно знаете, что переменная NAME определена и имеет значение. Последняя строка сценария считывает значение переменной NAME и отображает это значение в STDOUT с помощью команды echo. Обратите внимание, что для запроса текущего значения переменной используется имя переменной, которому предшествует знак $. В упражнении 19-3 вы можете попрактиковаться в работе с вводом. Упражнение 19-3 Работа с вводом 1. Откройте редактор и создайте сценарий с именем ex193. Введите в этот сценарий содержимое примера 19-4. 2. Запишите сценарий на диск и используйте команду chmod +x ex193, чтобы сделать его исполняемым. 3. Запустите сценарий, используя ./ex193 без дополнительных аргументов. Вы видите, что он запрашивает ввод. 4. Запустите сценарий, используя в качестве аргумента привет. Это будет эхом «вы ввели текст привет» на STDOUT. Использование условных циклов Как вы уже видели, в скрипте можно использовать условные циклы. Эти условные циклы выполняются только в том случае, если выполняется определенное условие. В Bash часто используются следующие условные циклы:

▪ ▪

if… then… else: используется для выполнения кодов, если выполняется определенное условие. for: используется для выполнения команд для диапазона значений. 364

▪ ▪ ▪

while: используется для выполнения кода, пока выполняется определенное условие. until: используется для выполнения кода до тех пор, пока не будет выполнено определенное условие. case: используется для оценки конкретных значений, когда заранее ожидается ограниченное количество значений.

Работа с if… then… else Конструкция if… then… else используется для оценки конкретных условий. Вы уже видели его пример в Примере 19-4. Этот условный цикл часто используется вместе с командой test, которую вы видели в действии ранее, чтобы проверить, существует ли файл. Эта команда также позволяет вам делать многие другие вещи, например, сравнивать файлы, сравнивать целые числа и многое другое. СОВЕТ. Взгляните на справочную страницу команды man test.

Основная конструкция с if, if ... then ... fi, оценивает одно-единственное условие, как в следующем примере: if [ -z $1 ] then echo no value provided fi В примере 19-4 вы видели, как можно оценить два условия, включив else в оператор. В примере 19.5 показано, как можно оценить несколько условий, включив взаимодействие оператора else с оператором if, чтобы он стал elif. Это полезно, если нужно проверить много разных значений. Обратите внимание, что в Примере 19-5 также используется несколько тестовых команд. Пример 19-5 Пример с if… then… else

365

Также обратите внимание на использование в примере 19-5 обратной косой черты (\). Этот символ сообщает оболочке, что он не должен интерпретировать следующий символ, что называется экранированием символа. Использование || и && Вместо написания полных операторов if ... then вы можете использовать логические операторы || и &&. || является логическим ИЛИ и выполнит вторую часть оператора, только если первая часть неверна; && является логическим И и выполнит вторую часть оператора, только если первая часть истинна. Рассмотрим эти два однострочника: [ -z $1 ] && echo no argument provided ping -c 1 10.0.0.20 2>/dev/null || echo node is not available В первом примере выполняется test (с использованием альтернативного синтаксиса тестовой команды), чтобы узнать, пуст ли $1. Если этот test верен (что в основном означает, что тестовая команда завершается с кодом exit 0), выполняется вторая команда. Во втором примере команда ping используется для проверки доступности хоста. Логическое ИЛИ используется в этом примере для вывода текста «узел недоступен (node is not available)» в случае, если команда ping не была успешной. Часто вместо полностью написанных операторов if … then используются конструкции && и ||. В упражнении 19-4 вы можете попрактиковаться в некоторых навыках if… then… else, используя либо if… then… else, либо && и ||. Упражнение 19-4 Использование if ... then ... else В этом упражнении вы работаете над сценарием, который проверяет доступность вебсервера Apache. 1. Запустите редактор и создайте скрипт с именем filechk. 2. Скопируйте содержимое из примера 19-5 в этот сценарий. 3. Выполните с ним несколько тестов, например /filechk /etc/hosts, ./filechck /usr, и ./filechk non-existing-file. Применения для Условное выражение for предоставляет отличное решение для обработки диапазонов данных. В примере 19-6 вы можете увидеть первый пример с помощью for, где диапазон определяется и обрабатывается до тех пор, пока в этом диапазоне есть необработанные значения.

Пример 19-6 Пример с for

366

Условный оператор for всегда начинается с for, за которым следует условие, которое необходимо проверить. Затем идет do, за которым следуют команды, которые необходимо выполнить, если условие истинно, а условный оператор закрывается с помощью done. В примере 19-6 вы можете видеть, что условие - это диапазон чисел, присвоенный переменной COUNTER. Переменная сначала инициализируется значением 100, и, пока значение больше 1, на каждой итерации вычитается 1. Пока условие истинно, значение переменной $COUNTER отображается с помощью команд echo. В примере 19-7 вы можете увидеть одну из моих любимых однострочных строк с for. На этот раз диапазон определяется как серия чисел, начиная со 100 и заканчивая 104. Пример 19-7 Пример однострочника с for for i in {100..104}; do ping -c 1 192.168.4.$i >/dev/null && echo 192.168.4.$i is up; done Обратите внимание, как определяется диапазон: вы указываете первое число, за которым следуют две точки и закрываете последним числом в диапазоне. С for i in каждое из этих чисел присваивается переменной i. Для каждого из этих чисел выполняется команда ping, где опция -c 1 гарантирует, что будет отправлен только один запрос ping. В этой команде ping учитывается не результат, поэтому результат перенаправляется на устройство /dev/null. В зависимости от статуса выхода команды ping выполняется часть, стоящая за &&. Таким образом, если хост может быть достигнут, отображается строка, указывающая, что он активен. Понимание while и until В то время как оператор for, о котором вы только что прочитали, полезен для работы с диапазонами элементов, оператор while полезен, если вы хотите отслеживать что-то вроде доступности процесса. Аналогом while является оператор until, при котором итерация остается открытой до тех пор, пока не будет выполнено определенное условие. В примере 19-8 вы можете увидеть, как while используется для отслеживания активности процесса.

Пример 19-8 Мониторинг процессов с помощью while

367

Сценарий в примере 19-8 состоит из двух частей. Во-первых, это цикл while. Во-вторых, есть все, что нужно выполнить, когда цикл while больше не имеет значения true. Ядром цикла while является команда ps, которая используется при появлении $1. Обратите внимание на использование grep -v grep, которое исключает строки, содержащие команду grep, из результата. Имейте в виду, что команда ps будет включать в себя все запущенные команды, включая команду grep, к которой передается вывод команды ps. Это может привести к ложноположительному совпадению. Результаты команды ps aux перенаправляются в /dev/tty11. Это позволяет читать результаты позже с tty11, если это необходимо, но они не отображаются по умолчанию. После операторов while следуют команды, которые необходимо выполнить, если оператор оценивается как true. В этом случае выполняется команда sleep 5, которая в основном приостанавливает скрипт на 5 секунд. Пока команда while принимает значение true, она продолжает выполняться. Если цикл больше не работает (что в данном случае означает, что процесс больше не доступен), он останавливается, и команды, следующие за циклом while, могут быть выполнены. В строке mail -s “process $1 has stopped” root < ., cообщение отправляется пользователю root с использованием внутреннего почтового обработчика, который по умолчанию работает в RHEL 8. Команда mail принимает в качестве первого аргумента тему, указанную с помощью опции -s. Обратите внимание на < . в конце команды. Обычно при использовании команды mail в интерактивном режиме открывается редактор, в котором можно написать тело сообщения. Этот редактор закрывается строкой, в которой есть только точка. В этой команде точка предоставляется путем перенаправления STDIN. Это позволяет обрабатывать сообщение без каких-либо дополнительных требований к действиям пользователя. Аналогом while является until, которая открывает итерацию, которая длится до тех пор, пока условие не станет истинным. В примере 19.9 до используется для фильтрации вывода команды users на предмет появления $1, которое будет именем пользователя. Пока эта команда не станет истинной, итерация продолжается. Когда имя пользователя было найдено в выводе команды users, итерация закрывается и выполняются команды после цикла until. Пример 19-9 Мониторинг входа пользователя с помощью оператора until #!/bin/bash # until users | grep $1 > /dev/null 368

do echo $1 is not logged in yet sleep 5 done echo $1 has just logged in mail -s "$1 has just logged in" root < . Понимание case Последний из важных итерационных циклов - case. Оператор case используется для оценки ряда ожидаемых значений. Оператор case особенно важен в сценариях запуска Linux, которые в предыдущих версиях RHEL использовались для запуска служб. В операторе case вы определяете каждый конкретный ожидаемый аргумент, за которым следует команда, которую необходимо выполнить, если этот аргумент был использован. В примере 19-10 вы можете увидеть схему оператора case, который использовался в сценариях службы в более ранних версиях RHEL для запуска практически любой службы. Этот оператор работает с $1, который является именем сценария запуска. После имени сценария пользователь может ввести start, stop, restart и так далее. Пример 19-10. Оценка конкретных случаев с помощью оператора case

У оператора case есть несколько особенностей. Для начала, общий синтаксис case item-toevaluate in (объект для оценки). Затем следует список всех возможных значений, которые необходимо оценить. Каждый пункт закрыт значком ). Затем следует список команд, которые необходимо выполнить, если использовался конкретный аргумент. Список команд закрывается двойной точкой с запятой. Эти знаки ;; можно использовать сразу после последней команды и в отдельной строке. Также обратите внимание, что *) относится ко всем другим параметрам, не

369

указанным ранее. Это «всеобъемлющее» заявление. Цикл итерации case закрывается оператором esac. Обратите внимание, что оценки в случае выполняются по порядку. Когда обнаруживается первое совпадение, оператор case больше ничего не оценивает. В рамках оценки могут использоваться шаблоны, похожие на подстановочные знаки. Это видно в оценке *), данный знак соответствует значению любой. Но вы также можете использовать такие оценки, как tart|Start|START), чтобы соответствовать использованию другого регистра. Отладка сценария оболочки Bash Если сценарий не выполняет то, что вы ожидаете, полезно выполнить отладку сценария. Если сценарий не выполняет то, что вы ожидаете, попробуйте запустить в качестве аргумента команды bash -x. Это покажет вам построчно, что пытается сделать скрипт, а также покажет вам конкретные ошибки, если он не работает. В примере 19-11 показан пример использования bash x, где сразу становится ясно, что команда grep не знает, что она должна делать, потому что она пропускает аргумент, над которым нужно работать. Пример 19-11 Использование bash -x для отладки скриптов

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

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 19 - 2 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится.

370

Таблица 19-2 Ключевые темы главы 19

Элемент ключевой темы

Описание

Страница

Раздел

Определение переменной

363

Список

Динамически определяющие переменные

363

Список

Обзор условных циклов

364

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: shebang, parent shell, subshell, variable, iteration, conditional loop, OR, AND

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 21. Каков будет эффект, если скрипт не начинается с shebang? 22. Как проверить, не имеет ли переменная VAR значения? 23. Что бы вы использовали в сценарии для подсчета количества использованных аргументов? 24. Что бы вы использовали для обозначения всех аргументов, которые использовались при запуске сценария? 25. Как вы обрабатываете вводимые пользователем данные в скрипте? 26. Как проще всего проверить, существует ли файл, и выполнить команду echo “file does not exist”, если это не так? 27. Какой тест вы бы провели, чтобы определить, является ли элемент файлом или каталогом? 28. Какую конструкцию вы бы использовали для оценки ряда пунктов? 29. Как закрыть оператор elif в скрипте? 30. В операторе case вы оцениваете диапазон элементов. Для каждого из этих элементов вы выполняете одну или несколько команд. Что вам нужно использовать после последней команды, чтобы закрыть конкретный элемент? 371

Лабораторная работа в конце главы В этой лабораторной работе в конце главы вы примените свои навыки написания сценариев для написания двух простых сценариев.

Лабораторная работа 19.1 1. Напишите сценарий, который работает с аргументами. Если используется аргумент one, сценарий должен создать файл /tmp/one. Если используется аргумент two, сценарий должен отправить сообщение, содержащее тему «two», пользователю root. 2. Напишите сценарий обратного отсчета. В скрипте должен использоваться один аргумент (и не более одного). Этот аргумент указывает количество минут для обратного отсчета. Он должен начинаться с этого количества минут и отсчитывать каждую секунду, записывая текст «осталось nn секунд (“there are nn seconds remaining”)» на каждой итерации. Используйте sleep, чтобы определить секунды. Когда времени больше не останется, сценарий должен повторить echo “time is over” и завершиться.

372

Глава 20 В этой главе рассматриваются следующие темы: ▪ ▪ ▪

Повышение безопасности сервера SSH Использование других полезных опций sshd Настройка аутентификации на основе ключей с использованием парольных фраз.

В этой главе рассматривается следующая цель экзамена RHCSA: ▪ Настроить аутентификацию на основе ключей для SSH Secure Shell (SSH) - одна из самых важных утилит, используемых системными администраторами. В главе 5 «Подключение к Red Hat Enterprise Linux 8» вы узнали, как использовать SSH для подключения к серверу с использованием пароля или аутентификации на основе ключа. В этой главе вы узнаете о некоторых более сложных параметрах конфигурации.

Конфигурирование SSH Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 20 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 20 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем Повышение безопасности сервера SSH

Вопросы 1-5

Другие полезные параметры sshd Настройка аутентификации на основе ключей с использованием парольных фраз

6 – 8, 10 9

1. Что из нижеперечисленного не является распространенным подходом к предотвращению атак методом грубой силы на SSH-серверы?

a. b. c. d.

Отключить пересылку X11 SSH прослушивает порт, отличный от порта по умолчанию Запретить логин по паролю Разрешить только определенным пользователям входить в систему 373

2. Что из перечисленного успешно ограничивает доступ к серверу SSH только для пользователей bob и lisa?

a. b. c. d.

LimitUsers bob,lisa AllowedUsers bob lisa AllowUsers bob lisa AllowedUsers bob,lisa

3. Какую из следующих команд необходимо использовать для предоставления порта 2022, не являющегося портом по умолчанию, с правильной меткой SELinux?

a. b. c. d.

semanage ports -m -t ssh_port_t -p 2022 semanage port -m -t ssh_port_t -p tcp 2022 semanage ports -a -t sshd_port_t -p tcp 2022 semanage port -a -t ssh_port_t -p tcp 2022

4. Какое из следующих описаний подходит для параметра MaxAuthTries?

a. По достижении указанного здесь количества попыток учетная запись будет заблокирована. b. Этот параметр указывает максимальное количество попыток входа в систему. По достижении половины указанного здесь числа регистрируются дополнительные сбои. c. По достижении указанного здесь количества попыток IP-адрес, с которого поступают попытки входа в систему, блокируется. d. Указанное здесь число указывает максимальное количество попыток входа в систему в минуту.

5. Какой файл журнала вы анализируете, чтобы получить информацию о неудачных попытках входа в систему по SSH?

a. b. c. d.

/var/log/auth /var/log/authentication /var/log/messages /var/log/secure

6. Вход по SSH в тестовой среде занимает много времени. Какой из следующих вариантов, скорее всего, может быть причиной проблем со временем подключения?

a. UseLogin 374

b. GSSAPIAuthentication c. UseDNS d. TCPKeepAlive

7. 7. Какой из следующих вариантов не используется для поддержания активности SSHсоединений?

a. b. c. d.

TCPKeepAlive ClientAliveInterval ClientAliveCountMax UseDNS

8. Какой файл на клиентском компьютере SSH нужно добавить, чтобы задать ServerKeepAliveInterval для отдельного пользователя?

a. b. c. d.

~/.ssh/ssh_config ~/.ssh/config /etc/ssh/config /etc/ssh/ssh_config

9. Предполагая, что пара открытых/закрытых ключей, защищенных парольной фразой, уже создана, как вы сконфигурируете свой сеанс так, чтобы вам приходилось вводить парольную фразу только один раз? a. b. c. d.

Скопируйте кодовую фразу в файл ~/.ssh/passphrase. Запустите ssh-add /bin/bash, а затем ssh-agent. Запустите ssh-agent /bin/bash, а затем ssh-add. Это невозможно; вы должны вводить парольную фразу каждый раз при создании соединения.

10. Параметр MaxSessions можно использовать для настройки максимального количества сеансов, которые могут быть открыты одновременно. Какое значение у него по умолчанию? a. b. c. d.

10 25 100 1000

Основные темы Укрепление SSH-сервера 375

SSH - важное и удобное решение, помогающее устанавливать удаленные подключения к серверам. Это так же опасное решение. Если ваш SSH-сервер виден прямо из Интернета, вы можете быть уверены, что рано или поздно злоумышленник попытается подключиться к вашему серверу, намереваясь причинить вред. Атаки по словарю распространены против SSH-сервера. Злоумышленник использует тот факт, что серверы SSH обычно предлагают свои услуги через порт 22 и что каждый сервер Linux имеет учетную запись root. Основываясь на этой информации, злоумышленник может легко попытаться войти в систему как root, просто угадав пароль. Если пароль имеет ограниченную сложность и не были приняты дополнительные меры безопасности, рано или поздно злоумышленник сможет подключиться. К счастью, вы можете предпринять некоторые меры для защиты SSH-серверов от таких атак: ▪ ▪ ▪ ▪

Отключить вход в систему с правами root Отключить вход по паролю Настройте порт не по умолчанию для SSH для прослушивания Разрешить определенным пользователям входить в систему только по SSH.

В следующих подразделах вы узнаете, что нужно для изменения этих параметров. Ограничение доступа пользователя root Самая большая проблема безопасности - тот факт, что на серверах SSH по умолчанию включен вход с правами root. Отключить вход в систему с правами root очень просто; вам просто нужно изменить параметр PermitRootLogin в /etc/ssh/sshd_config и перезагрузить или перезапустить службу. После перезапуска убедитесь, что вы действительно больше не можете войти в систему как root. СОВЕТ Некоторые службы автоматически регистрируют изменения в своих файлах конфигурации. Большинство служб принимают изменения после команды systemctl reload servicename, тогда как другие службы принимают изменения только после команды systemctl restart servicename. Чтобы не тратить время на экзамене, во всех случаях следует использовать systemctl restart servicename. По крайней мере, вы будете уверены, что сервис подхватит новую конфигурацию.

После отключения входа в систему root вы должны указать имя пользователя, которое вы хотите использовать для входа, используя ssh user@servername или ssh -l user servername. Если вы не укажете имя пользователя, оно будет принимать имя текущего пользователя на клиенте, который пытается открыть сеанс SSH. Настройка альтернативных портов Многие проблемы безопасности на серверах Linux начинаются со сканирования портов, выполненного злоумышленником. Сканирование всех 65 535 портов, которые потенциально могут прослушиваться, занимает много времени, но большинство сканирований портов сосредоточено 376

только на известных портах, а SSH-порт 22 всегда находится среди них. Не стоит недооценивать риск сканирования портов. Несколько раз я обнаруживал, что порт SSH, прослушивающий порт 22, был обнаружен в течение часа после установки сервера. Для защиты от сканирования портов вы можете настроить свой SSH-сервер на прослушивание другого порта. По умолчанию sshd_config содержит строку Port 22, которая указывает SSH прослушивать привилегированный порт 22. Чтобы SSH прослушивал другой порт, вы должны изменить порт 22 на что-то другое. Могут использоваться разные порты. Вы можете использовать полностью случайный порт, например 2022, но также может быть удобно настроить SSH для прослушивания порта 443. Порт 443 по умолчанию назначается веб-серверам, использующим Transport Layer Security (TLS) для шифрования. Если пользователи, которые хотят получить доступ к серверу SSH, обычно находятся за прокси-сервером, который разрешает трафик только на порты 80 и 443, может иметь смысл настроить SSH для прослушивания порта 443. Однако вы должны понимать, что при этом порт 443 не может больше использоваться вашим веб-сервером; порт может быть назначен только одной службе за раз! Итак, делайте это только на машине, на которой вы не планируете запускать веб-сервер с поддержкой TLS! СОВЕТ Чтобы избежать блокировки вашего сервера после внесения изменений в порт прослушивания SSH при удаленном подключении, рекомендуется открыть два сеанса для вашего SSH-сервера. Используйте один сеанс для применения изменений и тестирования, а другой сеанс - для сохранения текущего параметра подключения. Активные сеансы не будут отключены после перезапуска сервера SSH (если только вы не перезапустите сервер SSH успешно).

Модификация SELinux для разрешения изменений порта После изменения порта SSH вам также необходимо настроить SELinux, чтобы учесть это изменение. Сетевые порты помечены метками безопасности SELinux, чтобы предотвратить доступ служб к портам, куда они не должны заходить. Чтобы разрешить службе подключаться к порту, отличному от порта по умолчанию, необходимо использовать команду semanage port для изменения метки на целевом порте. Перед этим рекомендуется проверить, есть ли у порта метка. Вы можете сделать это с помощью команды semanage port -l. Если для порта еще не установлена метка защиты, используйте опцию -a, чтобы добавить метку к порту. Если метка безопасности уже установлена, используйте -m для изменения текущей метки безопасности. Используйте, например, команду semanage port -a -t ssh_port_t -p tcp 2022, чтобы пометить порт 2022 для доступа через sshd. Если вы хотите переименовать порт, который уже использовался другой службой, вы должны использовать semanage port -m, чтобы изменить текущее назначение порта. Это необходимо, если, например, вы хотите, чтобы SSH мог связываться с портом 443. Ограничение доступа пользователей Многие параметры sshd можно найти, просто просмотрев файл sshd_config. Один из наиболее интересных вариантов использования - AllowUsers. Эта опция берет разделенный пробелами список всех пользователей, которым будет разрешен вход через SSH. Обратите внимание, что это мощная опция, ограничивающая вход в систему только для этих пользователей. 377

Если пользователю root по-прежнему требуется возможность прямого входа в систему, вы также должны включить root в список разрешенных пользователей. При использовании этого параметра имеет смысл подумать, какому имени пользователя вы хотите разрешить или запретить доступ. При атаке методом brute-force cо сценарием злоумышленники обычно также пробуют использовать общие имена пользователей, такие как admin, Administrator и jsmith. Легко добавить уровень безопасности, выбрав необычное имя пользователя. Обратите внимание на параметр AllowUsers: ▪ ▪ ▪

Параметр AllowUsers по умолчанию не отображается в файле /etc/ssh/sshd_config по умолчанию. Параметр AllowUsers - лучший вариант, чем PermitRootLogin, поскольку он более строг, чем просто запрет на вход root. Если параметр AllowUsers не указывает root, вы все равно можете стать пользователем root, используя su - после подключения в качестве обычного пользователя.

Параметр, который выглядит многообещающим, но вводит в заблуждение, - это MaxAuthTries. Вы можете подумать, что этот параметр блокирует доступ к приглашению на вход по SSH после максимального количества неудачных попыток входа в систему. Такая функциональность оказывается полезной при подключении к локальному серверу (конфигурация которого при необходимости может быть легко изменена), но на SSH-сервере с доступом в Интернет это довольно опасный вариант, позволяющий легко выполнить атаку отказ в обслуживании (denial-of-service) на сервер. Злоумышленнику достаточно будет запустить сценарий, который пытается войти в систему как конкретный пользователь, чтобы заблокировать доступ для этого пользователя на определенное время. Вот почему MaxAuthTries не делает того, что вы могли бы подумать. Он просто начинает регистрацию неудачных попыток входа в систему после половины указанного здесь количества успешных попыток входа. Тем не менее, опция MaxAuthTries полезна. Для анализа событий безопасности, связанных с вашим SSH-сервером, не так интересно знать, когда пользователь случайно набрал неправильный пароль один или два раза. Интересно становится только после нескольких неудачных попыток. Чем выше количество попыток, тем больше вероятность того, что злоумышленник пытается проникнуть внутрь. SSH записывает информацию журнала о неудачных попытках входа в систему AUTHPRIV syslog. По умолчанию это средство настроено на запись информации об ошибках входа в систему в /var/log/secure. В упражнении 20-1 вы применяете общие параметры SSH, которые уже обсуждались. Упражнение 20-1 Настройка параметров безопасности SSH В этом упражнении процесс sshd должен быть настроен на server1. Используйте server2 для проверки доступа к server1. 1. Откройте шел как root на server1 и откройте файл конфигурации sshd /etc/ssh/sshd_config в редакторе. 2. Найдите строку Port и под этой строкой добавьте строку Port 2022. Это сообщает процессу sshd, что он должен связываться с двумя разными портами, что гарантирует, что вы все еще можете открывать сеансы SSH, даже если вы допустили ошибку. 3. Добавьте также строку AllowUsers user в файл конфигурации SSH.

378

4. Сохраните изменения в файле конфигурации и перезапустите sshd, используя systemctl restart sshd. 5. Введите systemctl status -l sshd. Вы увидите ошибку «В разрешении отказано (permission denied)» при попытке SSH подключиться к порту 2022. 6. Введите semanage port -a -t ssh_port_t -p tcp 2022, чтобы применить правильную метку SELinux к порту 2022. 7. Откройте брандмауэр для порта 2022, используя команду firewall-cmd --addport=2022/tcp, а затем firewall-cmd --add-port=2022/tcp --permanent. 8. Снова введите systemctl status -l sshd. Вы увидите, что процесс sshd теперь прослушивает два порта. 9. Попробуйте войти на свой SSH-сервер с другого сервера, используя ssh -p 2022 user@server1. После открытия пользовательской оболочки введите su - для получения root-доступа. Использование других полезных опций sshd Помимо параметров, связанных с безопасностью, есть несколько полезных дополнительных параметров, которые можно использовать для оптимизации производительности SSH. В следующих двух подразделах вы прочитаете о некоторых из наиболее важных из этих возможностей. Параметры сеанса Для начала есть опция GSSAPIAuthentication, для которой в RHEL 8 по умолчанию установлено значение yes (что противоречит тому, что об этом говорится на странице руководства). Этот параметр полезен в среде, где используется проверка подлинности Kerberos. Если у вас нет Kerberos в вашей среде, вы можете также отключить его, потому что включение этой функции замедляет процедуру аутентификации. Следующий интересный вариант - UseDNS. Этот параметр включен по умолчанию и дает серверу SSH указание найти имя удаленного хоста и проверить с помощью DNS, что разрешенное имя хоста для удаленного хоста сопоставляется с тем же IP-адресом. Несмотря на то что у этого варианта есть некоторые преимущества с точки зрения безопасности, а также он значительно снижает производительность. Если клиентские соединения медленные, обязательно установите для него значение «Нет», чтобы полностью отключить проверку имени хоста клиента. Третий параметр, связанный с сеансом, - это MaxSessions. Это определяет максимальное количество сеансов, которые могут быть открыты с одного IP-адреса одновременно. Если вы ожидаете, что несколько пользователей будут использовать один и тот же IP-адрес для входа на ваш SSH-сервер, вам может потребоваться увеличить этот параметр до значения по умолчанию, равного 10. Параметры проверки активности соединения TCP-соединения в целом являются относительно дефицитным ресурсом, поэтому соединения, которые не используются в течение некоторого времени, обычно истекают по таймауту. Вы можете использовать несколько вариантов, чтобы поддерживать неактивные соединения в течение более длительного периода времени.

379

Параметр TCPKeepAlive используется для отслеживания доступности клиента. Использование этой опции (которая включена по умолчанию) гарантирует, что соединение будет разорвано для любого компьютера, который неактивен в течение определенного периода времени. Однако, если используется отдельно, это может привести к ситуации, когда освобождаются и неиспользуемые соединения, поэтому имеет смысл использовать параметр ClientAliveInterval. Этот параметр устанавливает интервал в секундах, по истечении которого сервер отправляет пакет клиенту, если активность не обнаружена. Параметр ClientAliveCountMax указывает, сколько из этих пакетов должно быть отправлено. Если для ClientAliveInterval установлено значение 30, а для ClientAliveCountMax установлено значение 10, например, неактивные соединения поддерживаются в течение примерно 5 минут. Рекомендуется установить это так, чтобы соответствовать количеству времени, в течение которого вы хотите, чтобы неактивные соединения оставались открытыми. Параметры ClientAliveInterval и ClientAliveCountMax можно указать только на сервере. Для этих опций также есть эквиваленты на стороне клиента. Если вы не можете изменить конфигурацию сервера SSH, используйте параметры ServerAliveInterval и ServerAliveCountMax, чтобы инициировать трафик поддержки активности соединения с клиентского компьютера. Эти параметры устанавливаются в файле /etc/ssh/ssh_config, если они должны применяться для всех пользователей на этом компьютере, или в ~/.ssh/config, если они применяются для отдельных пользователей.

В Таблице 20-2 представлен обзор наиболее полезных опций SSH. Таблица 20-2 Наиболее полезные параметры конфигурации sshd Вариант

Использовать

Port

Определяет порт прослушивания TCP.

PermitRootLogin

Указывает, разрешить или запретить вход в систему с правами root.

MaxAuthTries

Задает максимальное количество попыток аутентификации. По достижении половины этого числа сбои регистрируются в системном журнале.

MaxSessions

Указывает максимальное количество сеансов, которые могут быть открыты с одного IP-адреса.

AllowUsers

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

PasswordAuthentication

Указывает, разрешить ли аутентификацию по паролю. По умолчанию эта опция включена.

GSSAPIAuthentication

Указывает, должна ли быть включена аутентификация через GSSAPI. Используется для проверки подлинности на основе Kerberos.

TCPKeepAlive

Указывает, следует ли очищать неактивные TCP-соединения.

380

ClientAliveInterval

Задает интервал в секундах, в течение которого пакеты отправляются клиенту, чтобы выяснить, жив ли клиент.

ClientAliveCountMax

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

UseDNS

Если включено, используется поиск DNS-имен для сопоставления входящих IP-адресов с именами.

ServerAliveInterval

Задает интервал в секундах, в течение которого клиент отправляет пакет на сервер, чтобы поддерживать соединения.

ServerAliveCountMax

Задает максимальное количество пакетов, которые клиент отправляет на сервер, чтобы поддерживать соединения.

Настройка аутентификации на основе ключей с использованием парольных фраз По умолчанию аутентификация по паролю разрешена на серверах RHEL 8 SSH. Если используется пара открытого/закрытого ключей, как описано в главе 5, эта пара ключей используется первой. Если вы хотите разрешить аутентификацию только на основе открытого/закрытого ключа и полностью отключить аутентификацию на основе пароля, установите для параметра PasswordAuthentication значение no. Когда вы используете открытый/закрытый ключи, можно использовать парольную фразу. Использование парольной фразы делает пару ключей более надежной. Мало того, что злоумышленник должен получить доступ к закрытому ключу, но когда он это делает, он также должен знать кодовую фразу для использования ключа. Вот почему для установления соединений клиент/сервер с общедоступными/закрытыми ключами рекомендуется использовать парольные фразы. Без дальнейшей настройки использование парольных фраз означало бы, что пользователи должны вводить парольную фразу каждый раз перед созданием соединения, а это неудобно. Чтобы сделать работу с парольными фразами немного проще, парольную фразу можно кэшировать для сеанса. Для этого вам потребуются команды ssh-agent и ssh-add. Предполагая, что пара открытого/закрытого ключей уже создана, это простая трехэтапная процедура: Шаг 1. Введите ssh-agent /bin/bash, чтобы запустить агент для текущей оболочки (Bash). Шаг 2. Введите ssh-add, чтобы добавить кодовую фразу для закрытого ключа текущего пользователя. Ключ теперь кэширован. Шаг 3. Подключитесь к удаленному серверу. Обратите внимание, что больше нет необходимости вводить кодовую фразу. Эту процедуру необходимо повторить для всех создаваемых новых сеансов.

Резюме В этой главе вы узнали, как настроить SSH-сервер с дополнительными параметрами. Вы также узнали, как установить параметры безопасности для sshd и как установить определенные параметры клиента, которые помогают поддерживать соединения в течение более длительного периода.

381

Задачи подготовки к экзамену Как упоминалось в разделе «Как пользоваться этой книгой» в Введение, у вас есть несколько вариантов подготовки к экзаменам: лабораторные работы в конце главы; таблицы памяти в Приложении B; Глава 26, «Заключительная подготовка»; и практические экзамены.

Просмотрите все ключевые темы Просмотрите наиболее важные темы в главе, отмеченные значком ключевой темы на внешнем поле страницы. В Таблице 18-3 перечислены ссылки на эти ключевые темы и указаны номера страниц, на которых каждый из них находится. Таблица 20 - 3 Ключевые темы главы 20 Элемент ключевой темы Таблица 20 - 2

Описание

Страница

Наиболее полезные параметры конфигурации sshd

380

Заполните таблицы и списки по памяти Распечатайте копию Приложения B, «Таблицы памяти» (можно найти на сопутствующем веб-сайте) или, по крайней мере, раздел для этой главы, и заполните таблицы и списки по памяти. Приложение C, «Таблица ответов на вопросы», включает заполненные таблицы и списки для проверки вашей работы.

Определить ключевые термины Определите следующие ключевые термины из этой главы и проверьте свои ответы в глоссарии: passphrase, connection

Обзорные вопросы Следующие ниже вопросы помогут вам проверить свои знания концепций и терминологии, а также широту ваших знаний. Вы можете найти ответы на эти вопросы в Приложении А. 1. Какие две команды вам нужны, чтобы кэшировать парольную фразу, установленную на вашем закрытом ключе? 2. Вы хотите запретить вход в систему с правами root и разрешить вход на ваш сервер только пользователю lisa. Как бы Вы это сделали? 3. Как настроить SSH-сервер для прослушивания двух разных портов? 4. Как называется главный файл конфигурации SSH? 382

5. При настройке кеша для хранения парольной фразы для вашего ключа, где она будет храниться? 6. Как называется файл, содержащий настройки клиента SSH для всех пользователей? 7. Какой параметр следует использовать, чтобы установить максимальное количество одновременных сеансов SSH равным 10? 8. Как настроить SELinux, чтобы разрешить привязку SSH к порту 2022? 9. Как настроить брандмауэр на SSH-сервере, чтобы разрешить входящие подключения к порту 2022? 10.Какую настройку вы могли бы использовать, если у вас возникают длительные тайм-ауты при попытке установить соединение SSH?

Лабораторная работа в конце главы В этой лабораторной работе в конце главы вы настраиваете SSH для повышения безопасности и оптимизации параметров подключения. Используйте server1 для настройки SSHсервера и используйте server2 в качестве SSH-клиента.

Лабораторная работа 20.1 1. Настройте свой SSH-сервер таким образом, чтобы неактивные сеансы оставались открытыми не менее одного часа. 2. Защитите свой SSH-сервер так, чтобы он слушал только порт 2022 и чтобы только пользователь lisa мог войти в систему. 3. Проверьте настройки с server2. Убедитесь, что брандмауэр и SELinux настроены для поддержки ваших настроек.

383

Глава 21 В этой главе рассматриваются следующие темы: ▪ ▪ ▪

Настройка базового сервера Apache Общие сведения о файлах конфигурации Apache Создание виртуальных хостов Apache.

В этой главе рассматривается следующая цель экзамена RHCSA: ▪

Никакие цели экзамена RHCSA не связаны напрямую с Apache, но для достижения целей, связанных с SELinux, требуются минимальные знания Apache.

Это единственная глава в этой книге, в которой обсуждается тема, которая даже не указана в целях RHCSA. Однако администратору сервера Red Hat важно знать, как обращаться с вебслужбой Apache. В следующих главах вы узнаете, как настроить SELinux и серверы установки. Это темы, которые трудно понять, не зная, как работать с веб-службой Apache. Кроме того, в главе 11 «Работа с Systemd» вы узнали, как работать со службами в среде RHEL 8. Знание того, как настроить общий сервис, такой как веб-сервис Apache, несомненно, поможет в этом. Вот почему в этой главе объясняются основы веб-сервера Apache.

Управление HTTP-сервисами Apache Опрос «Знаю ли я это?» Опрос «Знаю ли я это?» позволяет вам оценить, следует ли вам полностью прочитать эту главу или перейти к разделу «Задачи подготовки к экзамену». Если вы сомневаетесь в своих ответах на эти вопросы или в собственной оценке своих знаний по темам, прочитайте всю главу. В таблице 21 -1 перечислены основные заголовки в этой главе и соответствующие им «Знаю ли я это?» вопросы викторины. Вы можете найти ответы в Приложении A, «Ответы на тесты «Знаю ли я это уже?» и «Контрольные вопросы»». Таблица 21 - 1 «Знаю ли я это уже?» Сопоставление раздела с вопросом Раздел основных тем

Вопросы

Настройка базового сервера Apache

1–4

Понимание файлов конфигурации Apache

5-7

Создание виртуальных хостов Apache

8 - 10

1. Какая команда устанавливает пакеты программного обеспечения, необходимые для настройки веб-сервера Apache? a. yum install httpd 384

b. yum install web-server c. yum install apache d. yum install apache2 2. Как называется главный файл конфигурации Apache? a. b. c. d.

/etc/httpd/conf/httpd.conf /etc/httpd/httpd.conf /etc/apache2/apache.conf /etc/httpd/default-server.conf

3. Какой параметр в файле конфигурации Apache используется для указания того, откуда Apache будет обслуживать свои документы?

a. b. c. d.

ServerRoot ServerDocuments DocumentRoot DocumentIndex

4. Какой параметр в основном файле конфигурации Apache определяет место, где процесс Apache ищет свои файлы конфигурации?

a. b. c. d.

ServerRoot ServerDocuments DocumentRoot DocumentIndex

5. В каком каталоге находится основной файл конфигурации Apache?

a. b. c. d.

/etc/httpd /etc/htttpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d

6. В каком каталоге содержатся файлы конфигурации для различных модулей Apache?

a. b. c. d.

/etc/httpd /etc/htttpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d

385

7. Какой каталог используется для сброса файлов конфигурации, установленных с RPM?

a. b. c. d.

/etc/httpd /etc/htttpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d

8. Какой тип виртуального хоста позволяет запускать несколько виртуальных хостов на одном IP-адресе?

a. b. c. d.

Name-based IP-based Configuration-based Default

9. Какая строка используется для начала определения виртуального хоста, который прослушивает порт 80 всех IP-адресов на текущем сервере?

a. b. c. d.

&1 используется, чтобы указать, что ошибки должны обрабатываться таким же образом. 2. A и C. /etc/profile - это файл, который обрабатывается для всех пользователей, запускающих оболочку входа в систему. Также существует версия для конкретного пользователя с именем ~/.bash_profile. 3. C. В Linux текущий каталог не задан в переменной PATH. 4. D. Канал используется для обработки вывода первой команды и использования его в качестве ввода второй команды. 5. A. Команда history -c удаляет состояние в памяти из файла истории текущей истории. Удалите ~/.bash_history, чтобы убедиться, что вся история удалена. В качестве альтернативы удалению файла .bash_history пользователь может ввести history -c, а затем history -w. 464

6. D. Ctrl-X не является допустимой командой истории. 7. D. Завершение Bash работает для команд, файлов, переменных и других имен, если для этого была добавлена конфигурация (например, имена хостов для команды SSH). 8. A. Вам нужна команда: %s/old/new/g, чтобы заменить все экземпляры old на new.. % означает, что он должен применяться ко всему файлу. s означает замену. Параметр g используется для применения команды не только к первому вхождению в строке (что является поведением по умолчанию), но и ко всем вхождениям в строке. 9. B. Файл /etc/motd содержит сообщения, которые отображаются после входа пользователя в терминальный сеанс. Если вы хотите показать сообщение перед тем, как пользователи войдут в систему, отредактируйте файл /etc/issue. 10. C. Команда man -k использует базу данных для поиска ключевых слов, которые вы ищете. В RHEL 8 эта база данных обновляется с помощью команды mandb. В более старых версиях RHEL (до RHEL 7) вместо этого использовалась команда makewhatis.

Глава 3 1. D. Программные файлы, которые не требуются для загрузки системы, обычно хранятся в подкаталоге ниже каталога /usr. В старых версиях RHEL основные двоичные файлы и системные двоичные файлы хранились в /bin и /sbin, но в современных версиях RHEL эти каталоги представляют собой символические ссылки на /usr/bin и /usr/sbin. 2. C. Каталог /var используется в Linux для хранения файлов, размер которых может неожиданно увеличиваться. 3. A. Каталог /etc/ содержит файлы конфигурации, которые необходимы при загрузке вашего сервера. Размещение /etc на выделенном устройстве сделает ваш сервер не загружаемым. 4. C. Команда df -h показывает смонтированные устройства и объем дискового пространства, используемого в настоящее время на этих устройствах. Параметр -T помогает распознавать реальные файловые системы (в отличие от интерфейсов ядра), поскольку также показывает тип файловой системы. 5. C. Параметр -a показывает скрытые файлы, -l дает длинный список, -t сортирует время модификации, которое по умолчанию показывает сначала самые новые файлы, а -r отменяет сортировку, так что самые новые файлы отображаются последними. 6. C. Чтобы копировать как скрытые, так и обычные файлы, вам необходимо установить расширение. после имени каталога, в котором находятся файлы. Ответ A также копирует скрытые файлы, но создает подкаталог $USER в текущем каталоге. 7. A. Команда mv позволяет перемещать файлы и переименовывать файлы. 8. D. В жестких ссылках нет разницы между первой жесткой ссылкой и последующими жесткими ссылками. 9. C. Параметр -s используется для создания символической ссылки. При создании ссылки сначала необходимо указать источник, а затем указать место назначения. 10. C. Используйте параметр -r, чтобы добавить один файл в архив, созданный с помощью tar.

Глава 4 1. A. Команда head по умолчанию показывает первые десять строк текстового файла. 2. D. Команда wc показывает количество строк, слов и символов в файле. 3. D. При использовании less клавиша G переводит вас в конец текущего файла. 465

4. A. Параметр -d используется для указания разделителя полей, который необходимо использовать для различения различных полей в файлах при использовании вырезания. 5. A. Команда sort может сортировать файлы или вывод команды на основе определенных ключей. Если не указан конкретный ключ, сортировка происходит по полям. Таким образом, опция -k3 сортирует третье поле в выводе команды ps aux. 6. D. При использовании в регулярном выражении знака ^ перед искомым текстом указывает на то, что текст должен быть в начале строки. 7. А.? регулярное выражение используется для обозначения нуля или одного из предыдущих символов. Это делает предыдущий символ необязательным, что может быть полезно. Например, если регулярное выражение является цветным, вы получите совпадение как по цвету, так и по цвету. 8. Б. . символ точка используется как регулярное выражение для обозначения любого отдельного символа. 9. D. Команда awk сначала должна знать, какой разделитель полей следует использовать. Это указывается с помощью опции –F :. Затем ему необходимо указать строку, которую он должен искать, а именно /user/. Чтобы указать, что следует напечатать четвертое поле соответствующего файла, необходимо включить команду { print $4 }. 10. Б. Используйте команду grep -v, чтобы исключить из результатов строки, содержащие регулярное выражение.

Глава 5 1. Б. Консоль - это экран, с которого вы работаете. На консоли терминал запускается как рабочая среда. В терминале работает оболочка для интерпретации вводимых вами команд. 2. A. Консоль - это экран, с которого вы работаете. На консоли терминал запускается как рабочая среда. В терминале работает оболочка для интерпретации вводимых вами команд. 3. C. Консоль - это экран, с которого вы работаете. На консоли терминал запускается как рабочая среда. В терминале работает оболочка для интерпретации вводимых вами команд. 4. B. Шесть виртуальных консолей, доступных в Linux по умолчанию, пронумерованы с /dev/tty1 по /dev/tty6. Устройство /dev/pts/6 используется для обозначения шестого псевдотерминала, который создается открытием шести окон терминала в графической среде. 5. A и C. Псевдотерминальное устройство создается при открытии новых терминалов с помощью SSH или из графического интерфейса. 6. D. Обычно перезагрузка сервера необходима только после внесения изменений в ядро и используемые модули ядра. Изменение конфигурации сети обычно не требует перезагрузки, поскольку можно просто перезапустить сетевую службу. 7. C. Windows не имеет встроенной поддержки SSH. Вам необходимо установить PuTTY или подобное программное обеспечение для удаленного подключения к Linux с помощью SSH. 8. D. Ключевые отпечатки хостов, к которым вы ранее подключались, хранятся в вашем домашнем каталоге в подкаталоге .ssh в файле с именем known_hosts. 9. C. Параметр ForwardX11 в файле /etc/ssh/ssh_config включает поддержку графических приложений через SSH. 10. C. Чтобы инициировать удаленную аутентификацию на основе ключей, вы должны скопировать открытый ключ на удаленный сервер. Самый удобный способ сделать это использовать команду ssh-copy-id.

466

Глава 6 1. C. Привилегированные пользователи противоположны непривилегированным пользователям. Привилегированный пользователь может выполнять задачи в пространстве ядра без дополнительных ограничений. По умолчанию в качестве привилегированного пользователя существует только пользователь root. 2. D. В файле конфигурации sudo все члены группы wheel по умолчанию получают доступ ко всем задачам администратора. 3. B. Команды runas не существует в Linux. 4. Б. Хешированные пароли пользователей хранятся в /etc/shadow. 5. C. Файл /etc/default/useradd считывается для настроек по умолчанию при создании новых учетных записей пользователей. 6. A. Команда chage -l позволяет вам управлять свойствами пароля. 7. Б. Отсутствует файл /etc/.profile. 8. A. Команда vigr создает копию файла /etc/group, чтобы можно было безопасно применить изменения. 9. C и D. Команды id и groups показывают список всех групп, членом которых является пользователь. 10. D. Когда создается файл с именем /etc/nologin.txt, только пользователю root разрешается вход в систему, и никому больше. В этом файле вы можете указать сообщение, которое будет показано пользователям, пытающимся войти в систему.

Глава 7 1. C. Команда newgrp используется для установки действующей первичной группы, которая будет влиять на владение группой по умолчанию для новых файлов до завершения текущего сеанса оболочки. Команда chgrp используется для установки группового владельца существующего файла; chgrp не связан с какой-либо учетной записью пользователя и влияет только на вновь созданные файлы. 2. A. Команда find / -user linda выполняет поиск всех файлов, принадлежащих пользователю linda. Обратите внимание, что find также имеет параметр -uid, который позволяет вам находить файлы на основе определенного параметра UID. Это не позволяет вам искать файлы на основе имени пользователя, но позволяет находить файлы на основе UID конкретного пользователя. 3. C. chgrp myfile sales не устанавливает групповое владение файлом myfile. Порядок в этой команде неправильный; chgrp сначала нужно имя группы, а затем имя владельца, которое необходимо установить. 4. C. При использовании в относительном режиме три цифры используются для указания прав пользователя, группы и других пользователей. Значение 6 используется для чтения и записи. 5. C. Команда chmod g+s /dir добавляет (+) разрешение SGID в /dir. Команда chmod u+s /dir добавляет SUID в каталог, chmod g-s /dir удаляет разрешение SGID, а 1 в chmod 1770 /dir устанавливает липкий бит, а не SGID. 6. D. Поддержка ACL по умолчанию предлагается не во всех файловых системах. Если вы получили сообщение об ошибке «операция не поддерживается», обязательно добавьте параметр монтирования acl и перемонтируйте файловую систему. Обратите внимание, что это не требуется в RHEL 8 XFS, где поддержка ACL установлена по умолчанию. 467

7. B. Хотя оба ответа A и B устанавливают ACL по умолчанию, ответ B лучше, потому что он добавляет x к разрешениям. Без x у членов группы sales не будет возможности войти в каталог с помощью команды cd. 8. A. umask является общесистемной настройкой и не может применяться только к определенным каталогам. Используйте ACL по умолчанию, как показано в ответе A, для выполнения этой задачи. 9. C. В umask 0 в первой позиции дает все разрешения владельцу файла, 2 во второй позиции гарантирует, что члены группы-владельца могут читать файлы, а 7 в третьей позиции забирает все разрешения для других. 10. C. Команда lsattr показывает текущие настройки атрибутов файлов. Команда ls не может отображать атрибуты файлов, а другие перечисленные команды не существуют.

Глава 8 1. D. На основе маски подсети /26 это сети 192.168.4.0, 192.168.4.64, 192.168.4.128 и 192.168.4.192. Это означает, что IP-адреса II, III и IV принадлежат одной сети. 2. B. Сетевой адрес 169.254.0.0 не принадлежит к диапазонам частных адресов, которые составляют 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Адрес 169.254.0.0 из диапазона APIPA. Это диапазон IP-адресов, которые могут быть автоматически назначены клиентом, который пытается связаться с недоступным DHCP-сервер. 3. C. По умолчанию имена сетевых устройств основаны на типе устройства, местоположении и идентификации. Вы найдете устаревшее имя eth0 только в том случае, если драйвер сетевой карты не может раскрыть информацию о ее физическом местонахождении. 4. D. Использование команды ifconfig не рекомендуется; вместо этого используйте команду ip. Команда ip addr show показывает информацию о состоянии интерфейса, а также о текущем назначении IP-адреса. 5. A. Сетевой сервис (network service) больше не существует в RHEL 8. 6. B. Справочная страница по nmcli-examples была создана, чтобы немного упростить работу с длинными командами в nmcli. Обратите внимание, что nmcli также имеет отличные функции завершения командной строки. 7. C. В RHEL 8 nmtui является утилитой по умолчанию для установки и изменения сетевого интерфейса. Обратите внимание, что в RHEL 8 больше нет утилит system-config для настройки сети, которые были доступны в более старых версиях RHEL. 8. D. При добавлении подключения вы используете ip4 и gw4 (без v). 9. A. Вы не должны устанавливать DNS-серверы непосредственно в /etc/resolv.conf, потому что этот файл автоматически записывается службой NetworkManager. 10. C. Имя файла конфигурации, который содержит имя хоста, - /etc/hostname. Вы должны использовать hostnamectl, чтобы изменить его содержимое.

Глава 9 1. D. Строка gpgcheck= указывает, нужно ли проверять целостность пакетов в репозитории с помощью ключа GPG. Хотя это полезно, это не обязательно. 2. B. Если система RHEL не зарегистрирована в RHEL, репозитории недоступны. Это важно понимать для экзамена RHCSA, потому что это означает, что вам нужно подключиться к репозиторию, прежде чем вы сможете что-либо установить. 468

3. C. Используйте baseurl, чтобы указать, какой URL использовать. Если URL-адрес основан на локальной файловой системе, он использует URI file://, за которым следует путь в локальной файловой системе, которым в данном случае является /repo. Это объясняет, почему в baseurl есть три слэша. 4. D. Подписывание пакетов GPG используется для установки контрольной суммы пакетов, чтобы можно было легко распознать измененные пакеты. Основная цель подписывания пакетов - упростить защиту пакетов в Интернет-репозиториях. Для внутренних репозиториев, к которым пользователи Интернета не могут получить доступ, необходимость добавления подписей пакетов GPG менее актуальна. 5. D. Обе команды, которые предоставляет yum, и yum whatprovides, могут использоваться для поиска файлов в определенном пакете. Шаблон файла должен быть указан как */filename или как полный путь, поэтому ответ D является единственно правильным ответом. Без */ перед именем файла вы можете получить совпадение, основанное на описании пакета, а не на имени файла. 6. B. Stream приложения модуля yum позволяет работать одновременно с разными версиями программного обеспечения пользовательского пространства. 7. C. Чтобы установить определенный профиль из потока приложения модуля yum, добавьте имя профиля в версию потока приложения с помощью /. 8. A. Команда yum install устанавливает индивидуально загруженные файлы RPM, ища зависимости пакетов в текущих репозиториях. Это лучше, чем использование rpm -ivh, которое не учитывает репозитории yum. В более ранних версиях RHEL команда yum localinstall использовалась для установки пакетов, которые были загружены в локальную файловую систему, но эта команда теперь устарела. 9. C. Используйте команду rpm -qf, чтобы узнать, из какого RPM-пакета исходит конкретный файл. 10. C. Параметр --scripts проверяет наличие скриптов в пакете RPM. Если вы хотите запросить файл пакета, а не базу данных установленных RPM, вам нужно добавить параметр -p к параметру -q, который используется для выполнения запросов RPM.

Глава 10 1. B и D. Есть два разных типа процессов, каждый из которых требует различного подхода к управлению. Это рабочие оболочки и демоны. Задание cron и поток (thread) являются подразделениями этих общих категорий. 2. B. Команда Ctrl-Z временно приостанавливает текущее задание, после чего команду bg можно использовать для возобновления этого задания в фоновом режиме. 3. A. Команда Ctrl-C отменяет текущее задание. Ctrl-D отправляет символ EOF в текущее задание, что может привести к остановке, если это позволяет правильно завершить задание. Разница с Ctrl-C заключается в том, что задание отменяется независимо от того, что оно делало. Нажатие клавиши Ctrl-Z останавливает задание. 4. A и B. Администратор не может управлять отдельными потоками. Использование потоков делает работу в многопроцессорной среде более эффективной, поскольку один процесс не может выполняться одновременно на нескольких процессорах, если только процесс не использует потоки. 5. A. Команда ps ef показывает все процессы, включая точную команду, которая использовалась для их запуска. 6. C. Чтобы повысить приоритет процесса, вам нужно отрицательное значение nice. -20 - это наименьшее значение, которое можно использовать. 469

7. C. Используйте команду renice, чтобы изменить приоритет запущенных в данный момент процессов. Чтобы сослаться на процесс, который вы хотите переименовать, используйте параметр -p. 8. B. mkill не является текущей командой для отправки сигналов процессам. 9. A. Чтобы изменить приоритет процесса сверху, используйте r для renice. 10. Б. Чтобы установить профиль настроенной производительности, используйте профиль tuned-adm, за которым следует имя профиля, который вы хотите установить.

Глава 11 1. A. Аргумент --type=service показывает только все загруженные в данный момент службы. 2. C. Желания относятся к конкретной системе и по этой причине управляются через /etc/systemd/system (а не /usr/lib/systemd/system). 3. D. Маскирование службы делает невозможным ее включение. 4. D. Running(dead) не является допустимым статусом для служб systemd. Вы видите (dead) для юнитов, которые в настоящее время не активны. 5. D. Юниты сокетов отслеживают активность сокетов, которая может включать доступ к файлу или доступ к сетевому порту. Они не отслеживают активность PATH. Это делает path unit type. 6. B. udev не является допустимым типом юнита systemd. Все остальные. 7. B. Ответы A и B очень похожи, но в ответе A используется неправильная команда. Вы должны использовать команду systemctl, а не команду systemd. 8. D. Переменная SYSTEMD_EDITOR определяет, какой редактор использовать. Вам необходимо указать полный путь к этому редактору. 9. D. Тип зависимости Wants определяет, что требуется конкретный юнит, без жестких требований. 10. A. Неправильный порядок слов. Должен быть systemctl start unit, а не systemctl unit start.

Глава 12 1. B. Команда systemctl в RHEL 8 используется для управления службами. При использовании с параметром status проверяется текущее состояние службы, а также отображаются последние сообщения журнала о службе. Имя проверяемой службы в этом случае crond. 2. C. Поля в cron - это минута, час, день месяца, месяц и день недели. Ответ C соответствует этому шаблону для запуска задачи в седьмой день недели в 11 часов утра. 3. A. Чтобы запустить задание с понедельника по пятницу, вы должны использовать 1-5 в последней части индикатора времени. Индикатор минут */5 будет запускать задание каждые пять минут. 4. A и D. Вы не можете напрямую изменять пользовательские файлы cron, но должны использовать редактор crontab. Этот редактор запускается с помощью команды crontab e. 5. B. Каталог /etc/cron.d используется для хранения файлов cron для отдельных служб, которым необходимо выполнять задачи через cron. Этот каталог в основном заполняется установкой файлов RPM, содержащих задания cron. 6. A. Хотя задания cron, добавленные в /etc/crontab, будут выполняться, файл /etc/crontab считается системным файлом, который не следует изменять напрямую. 470

7. D. anacron - это сервис, который заботится о выполнении заданий на регулярной основе, когда нет необходимости указывать конкретное время. 8. D. По умолчанию файл cron.allow не существует. Если он существует, в нем должен быть указан пользователь, чтобы программировать задания cron. 9. B. Последовательность клавиш Ctrl-D отправляет символ конца файла (EOF) в оболочку at и закрывает его. 10. C. Команда atq запрашивает службу at и предоставляет обзор заданий, запланированных к выполнению в настоящее время.

Глава 13 1. C. journald не является заменой rsyslogd. Это дополнительная служба, которая записывает информацию в журнал. В RHEL 8 они интегрированы для совместной работы, чтобы предоставить вам необходимую информацию для ведения журнала. 2. D. Большинство сообщений записываются в файл /var/log/messages, но сообщения, связанные с аутентификацией, записываются в /var/log/secure. Проверьте содержимое /etc/rsyslog.conf и найдите authpriv, чтобы узнать, что именно происходит с этим средством. 3. C. События SELinux регистрируются службой аудита, которая ведет свой журнал в /var/log/audit/audit.log. 4. A. Файл конфигурации rsyslogd - это /etc/rsyslog.conf. 5. D. Файл /etc/sysconfig/rsyslog - это место по умолчанию для изменения параметров запуска rsyslogd путем редактирования параметра SYSLOGD_OPTIONS. 6. C. Пунктами назначения rsyslogd часто являются файлы. Однако для дальнейшей обработки информацию журнала можно отправить в модуль rsyslogd. В этом случае имя модуля обозначается как, :modulename:. 7. D. Значение оборудования с local0 по local7 могут использоваться для настройки служб, которые по умолчанию не используют rsyslog для отправки сообщений в конкретное место назначения rsyslog, которое необходимо дополнительно настроить в файле rsyslog.conf. 8. A. Сервис logrotate может выполнять ротацию файлов в зависимости от максимального размера файла. Чтобы настроить это, рекомендуется поместить файл в /etc/logrotate.d, содержащий параметры для этого конкретного файла. 9. D. Если systemd-journald настроен для постоянного хранения журнала, журнал хранится в /run/log/journal. Обратите внимание, что по умолчанию журнал systemd не сохраняется постоянно. 10. A. Чтобы сделать журнал journald постоянным, вы должны создать каталог /var/log/journal и установить соответствующие разрешения для этого каталога.

Глава 14 1. A. В GPT больше нет необходимости различать первичный, расширенный и логический разделы; на самом деле это даже невозможно. Использование логических разделов не является преимуществом из-за ограниченного количества основных разделов, доступных на дисках MBR. 2. Б. 1 пебибайт (ПиБ) равен 1024 × 1024 × 1024 × 1024 × 1024 байта. 3. C. Тип раздела 83 обычно используется для создания разделов Linux. 471

4. В. Виртуальные машины KVM используют драйвер virtio для адресации жестких дисков. Этот драйвер создает устройство /dev/vda как первое дисковое устройство. 5. C. На диске может быть только одна таблица разделов. По этой причине невозможно иметь разделы MBR и GPT на одном диске. 6. B. XFS используется как файловая система по умолчанию; разделы могут быть отформатированы с использованием других файловых систем, например, Ext4. 7. D. Команда blkid показывает все файловые системы, их UUID и, если возможно, их метку. 8. D. Чтобы смонтировать файловую систему на основе ее UUID, используйте UUID=nnnn в столбце устройства /etc/fstab. 9. B и D. Чтобы проверить файловую систему при загрузке, но только после того, как корневая файловая система была успешно проверена, поставьте 2 в шестой столбец в /etc/fstab. 10. B. Параметр монтирования _netdev используется для указания того, что файловая система зависит от сети, которая будет присутствовать, прежде чем ее можно будет смонтировать.

Глава 15 1. B. Обычно файловую систему создают поверх логического тома, но это не является обязательным требованием. Например, логический том можно использовать как устройство, которое представлено как дисковое устройство для виртуальной машины. 2. C. Копирование при записи - это функция, предлагаемая современными файловыми системами, такими как Btrfs. Он копирует исходные блоки, которые файл использовал перед созданием нового файла, что позволяет пользователям легко вернуться к предыдущему состоянию файла. Копирование при записи не является функцией LVM. 3. D. На GPT-диске разделы LVM должны иметь тип раздела 8e00. 4. C. Команда lvcreate используется для создания логических томов. Используйте -n имя, чтобы указать имя. Параметр -l 50% FREE назначит 50% доступного дискового пространства, а vgdata - это группа томов, из которой он будет назначен. 5. B и C. Команда pvdisplay используется для отображения подробной информации о физических томах. Команда pvs показывает только сводку основных свойств физического тома. 6. C. Вы можете увеличить размер файловой системы XFS, но не можете его уменьшить. 7. A. Для записи метаданных каждому тому Stratis требуется 527 Мбайт хранилища. 8. C. Вам необходимо монтировать тома Stratis, используя UUID, а не имя устройства. Кроме того, необходимо включить параметр x-systemd.requires=stratisd.service, чтобы гарантировать загрузку stratisd.service до того, как systemd попытается смонтировать том Stratis. 9. A, C, D. Благодаря функциям дедупликации данных VDO очень хорошо работает в средах, где записываются избыточные данные. Особенно это касается облачных хранилищ, контейнеров и виртуализации. 10. B. Параметр -K используется с командой mkfs.xfs, чтобы гарантировать, что пустые блоки данных не удаляются немедленно.

Глава 16

472

1. A. Испорченное ядро вызвано драйверами, которые недоступны как драйверы с открытым исходным кодом. Их использование может повлиять на стабильность операционной системы Linux, поэтому хорошо иметь возможность легко их распознать. 2. B. Утилита dmesg показывает содержимое кольцевого буфера ядра. Это область памяти, в которую ядро Linux записывает информацию, поэтому она дает четкий обзор последних событий ядра. 3. A. Команда uname -r показывает текущую версию ядра. Команда uname -v предоставляет информацию об оборудовании вашего компьютера, а команда procinfo не существует. 4. C. Версия /etc/redhat-release содержит информацию о текущей версии RHEL, которую вы используете, включая уровень обновления. 5. A. В операционной системе на основе systemd, такой как RHEL 8, процесс systemd-udevd заботится об инициализации новых аппаратных устройств. 6. B. Правила инициализации оборудования по умолчанию находятся в каталоге /usr/lib/udev/rules.d; пользовательские правила должны храниться в /etc/udev/rules.d. 7. C. Команда modprobe - единственная команда, которую следует использовать для управления модулями ядра, поскольку она также учитывает зависимости модулей ядра. Используйте modprobe, чтобы загрузить модуль ядра, и modprobe -r, чтобы выгрузить его из памяти. 8. C. Команда lspci -k выводит список устройств, обнаруженных на шине PCI, и поддерживающих модулей ядра, которые были загружены для этих устройств. В качестве альтернативы lspci -v показывает более подробную информацию о загруженных в данный момент модулях. 9. C. Каталог /etc/modprobe.d используется для файлов, которые создают пользовательские конфигурации. В прошлом для этой цели использовались файлы /etc/modules.conf и modprobe.conf. В RHEL 8 параметры модуля ядра передаются через /usr/lib/modprobe.d, если они используются для постоянных параметров, управляемых операционной системой. 10. C и D. Ядра не обновляются; они установлены. Для этого вы можете использовать либо yum update kernel, либо yum install kernel. Нет дополнительных требований, что делает ответы C и D ложны.

Глава 17 1. A. Команда systemctl enable создает потребность для текущего модуля в целевом объекте, который указан в разделе [Install] в файле сервисного юнита. 2. C. Серверы обычно не имеют графического интерфейса и запускают multi-user.target. 3. B. Не существует restart.target. 4. D. Файлы модуля содержат раздел [Install], который используется для указания, в какой цели модуль должен быть запущен. 5. A. Требуемый оператор - AllowIsolate. Все остальные утверждения, упомянутые здесь, недействительны. 6. A. Чтобы переключиться с target с большим количеством файлов юнитов на targert с меньшим количеством файлов юнитов, используйте systemctl isolate. 7. B. multi-user.target примерно соответствует уровню выполнения 3, используемому в среде System V. 8. D. Изменения в GRUB 2 необходимо применять к /etc/default/grub, а не к /boot/grub2/grub.cfg. Файл /boot/grub2/grub.cfg нельзя редактировать напрямую; вам необходимо применить изменения к /etc/default/grub и запустить команду grub2-mkconfig, чтобы записать их в соответствующий файл конфигурации. 473

9. B. Команда grub2-mkconfig позволяет вам повторно создать конфигурацию GRUB 2. Результат по умолчанию отображается на экране. Используйте перенаправление, чтобы записать его в файл. 10. B. Файл /boot/efi/EFI/redhat/grub.cfg используется для хранения загрузчика GRUB 2 в системе UEFI. Глава 18 1. C. Во время процедуры загрузки сначала загружается загрузчик GRUB 2. Отсюда загружается ядро со связанным файлом initramfs. Как только это будет завершено, можно будет загрузить systemd. 2. B. Последовательность клавиш Ctrl-X покидает оболочку GRUB 2 и продолжает загрузку. 3. B. Файл /etc/dracut.conf используется для управления файловой системой initramfs. 4. D. Параметр загрузки rd.break входит в конце фазы initrd. Корневая файловая система еще не смонтирована в /, что упрощает устранение неполадок. 5. A и C. Параметры загрузки rhgb и quiet загрузка делают невозможным просмотр того, что происходит во время загрузки. 6. B. Целевой объект emergency.target systemd предоставляет только корневую оболочку и не более того. Все другие упомянутые параметры также включают загрузку нескольких файлов модулей systemd. 7. C. Если вы не получаете приглашение загрузки GRUB 2, вы не можете выбрать альтернативный механизм запуска. В этой ситуации вам необходимо использовать аварийный диск, чтобы можно было переустановить GRUB. Если ядро или initramfs не могут успешно загрузиться, вам может потребоваться также аварийный диск, но во многих случаях по умолчанию предоставляется альтернативное ядро. 8. C. Команда mount -o remount,rw / option перемонтирует файловую систему / в режиме чтения/записи (read/write). 9. A. Поскольку ошибка возникает до загрузки меню GRUB 2, единственный способ исправить это - использовать аварийный диск. 10. C. Метод rd.break применяется до активации SELinux, который удаляет метку контекста SELinux. Перед перезагрузкой вам нужно будет снова установить этот label. Глава 19. 1. B. Первая строка сценария оболочки Bash содержит shebang, который определяет подоболочку, которая должна использоваться для выполнения кода сценария. 2. A. Оператор exit 0 в конце сценария является необязательным для информирования родительской оболочки об успешном выполнении кода сценария. 3. C. Оператор read останавливает сценарий, что позволяет пользователю вводить данные. Если read используется с именем переменной в качестве аргумента, пользовательский ввод сохраняется в этой переменной. 4. D. Первый аргумент обозначается как $1. Чтобы сохранить $1 в переменной с именем NAME, используйте команду NAME=$1. Убедитесь, что в нем нет пробелов, поэтому ответ A неверен. 5. D. Как $@, так и $* могут использоваться для ссылки на все аргументы, которые были предоставлены при запуске сценария, но $@ является предпочтительным методом, поскольку он позволяет сценарию различать различные индивидуальные аргументы, тогда как $* относится к ко всем предоставленным аргументам как к одному объекту. 474

6. D. Условный цикл, который начинается с if, закрывается с помощью fi. 7. C. Если внутри цикла if открывается новая условная проверка, эта условная проверка запускается с помощью elif. 8. B. После определения условия в цикле for команда do используется для запуска команд, которые необходимо запустить, когда условие истинно. 9. D. Для команды mail необходимо указать тему(subject) с параметром -s. Команда mail обычно ждет, пока в пустой строке не будет введена точка, чтобы начать отправку сообщения. Эту точку можно передать в команду mail, используя перенаправление STDIN, используя /dev/null, чтобы убедиться, что она не выводит сообщение об ошибке. 9. Используйте echo $PATH, чтобы прочитать текущее содержимое переменной $PATH. 10. Нажмите Ctrl-r и введите dog.

Глава 3 1. /etc содержит файлы конфигурации. 2. ls -alt отображает список содержимого текущего каталога, причем самые новые файлы указываются первыми. (-a также показывает файлы, имена которых начинаются с точки.) 3. mv myfile yourfile переименовывает myfile в yourfile. 4. rm -rf /directory стирает всю структуру каталогов, включая все ее содержимое. 5. ln -s / tmp ~ создает в вашем домашнем каталоге ссылку на /tmp. 6. cp /etc/[abc]* . копирует все файлы, имена которых начинаются с a, b или c, из каталога /etc в ваш текущий каталог. 7. ln -s /etc ~ создает в вашем домашнем каталоге ссылку на /etc. 8. Используйте rm symlink, чтобы безопасно удалить символическую ссылку на каталог. Если rm имеет псевдоним rm -i и вы не хотите отвечать да для каждого отдельного файла, используйте вместо этого \rm. 9. tar zcvf /tmp/etchome.tgz /etc /home создает сжатый архив /etc и /home и записывает его в /tmp/etchome.tgz. 10. tar xvf /tmp/etchome.tgz /etc/passwd извлекает /etc/passwd из /tmp/etchome.tgz.

Глава 4 ps aux | less показывает результаты ps aux в удобном для просмотра виде. tail -n 5 ~/samplefile показывает последние пять строк из ~/samplefile. wc ~/samplefile. Вы можете использовать -w, чтобы показать только количество слов. Нажмите Ctrl-C, чтобы прекратить отображение вывода. grep -v -e '^#' -e '^;' filename исключает все строки, начинающиеся с символа # или ;. Использовать? чтобы соответствовать одному или нескольким предыдущим символам. grep -i text file находит в файле как текст, так и TEXT. grep -A5 '^PATH' filename показывает все строки, начинающиеся с PATH, а также предыдущие пять строк. 9. sed -n 9p ~/samplefile показывает строку 9 из ~/samplefile. 10. Команда sed -i 's/user/users/g' ~/samplefile заменяет слово user словом users в ~/samplefile. 1. 2. 3. 4. 5. 6. 7. 8.

Глава 5 479

1. Обычно консоль - это главный экран на сервере Linux. 2. Нажмите Ctrl-Alt-F2, чтобы вернуться из текстового приглашения для входа в систему к текущей работе в графическом интерфейсе. 3. w или who показывает всех пользователей, у которых в данный момент открыт сеанс терминала на сервере Linux. 4. /dev/pts/0 - это имя устройства, которое используется первым сеансом SSH, открытым для сервера, на котором не работает графический интерфейс. 5. ssh -v показывает подробную информацию о том, что делает SSH при входе в систему. 6. ssh -X инициирует сеанс SSH с поддержкой графических приложений. 7. Необходимо отредактировать ~/.ssh/ssh_config, чтобы изменить настройки клиента SSH. 8. scp /etc/hosts lisa@server2:/tmp копирует файл /etc/host в каталог /tmp на сервере server2, используя имя пользователя lisa. 9. ~/.ssh/authorized_keys хранит открытые ключи для удаленных пользователей, которые хотят войти в систему с использованием аутентификации на основе ключей. 10. ssh-keygen генерирует пару, открытого/закрытого ключей SSH.

Глава 6 0 - это UID пользователя root. sudo определен в /etc/sudoers. Используйте visudo для изменения конфигурации sudo. /etc/default/useradd и /etc/login.defs можно использовать для определения настроек, которые будут использоваться при создании пользователей. 5. Нет, потому что группы создаются в /etc/group. 6. Если сделать пользователя членом группы wheel, он получит доступ ко всем командам администратора через sudo. 7. Используйте vigr для изменения файла /etc/group вручную. 8. passwd и chage могут использоваться для изменения информации о пароле пользователя. 9. /etc/shadow хранит пароли пользователей. 10. /etc/group хранит учетные записи групп. 1. 2. 3. 4.

Глава 7 1. chown :groupname filename or chown .groupname filename. Имя группы имя файла устанавливает владельца группы в файл. 2. find / -user username находит все файлы, принадлежащие определенному пользователю. 3. chmod -R 770 /data применяет разрешения на чтение, запись и выполнение ко всем файлам в /data для пользователей и владельцев групп, не устанавливая никаких разрешений для других. 4. В режиме относительных разрешений используйте команду chmod +x file, чтобы добавить разрешение на выполнение для файла, который вы хотите сделать исполняемым. 5. Использование chmod g+s /directory гарантирует, что групповое владение всеми новыми файлами, созданными в каталоге, будет установлено владельцем группы этого каталога.

480

6. chmod +t /directory гарантирует, что пользователи могут удалять только файлы, владельцем которых они являются, или файлы, находящиеся в каталоге, владельцем которого они являются. 7. setfacl -m g:sales:r * добавляет ACL, который предоставляет членам группы sales разрешения на чтение всех существующих файлов в текущем каталоге. 8. Использование команд setfacl -R -m g:sales:rx /dir и setfacl –m d:g:sales:rx /dir гарантирует, что участники отдела продаж получат разрешения на чтение всех файлов в текущем каталоге и всех его подкаталогах, как а также все файлы, созданные в этом каталоге в будущем. 9. Убедитесь, что последняя цифра umask равна 7. 10. chattr +i myfile гарантирует, что никто не сможет случайно удалить myfile.

Глава 8 213.214.215.96 - сетевой адрес в 213.214.215.99/29. Отображение IP-ссылки показывает статус ссылки, а не IP-адрес. NetworkManager управляет конфигурацией сети в RHEL 8. /etc/hostname содержит имя хоста в RHEL 8. hostnamectl позволяет легко установить имя хоста. Запустите nmcli con up после изменения вручную содержимого файлов /etc/sysconfig/ifcfg. Измените /etc/hosts, чтобы разрешить разрешение имени хоста для определенного IPадреса. 8. ip route show показывает текущую конфигурацию маршрутизации. 9. systemctl status NetworkManager проверяет текущий статус службы. 10. nmcli con mod "static" ipv4.addresses "10.0.0.20/24" 10.0.0.100 изменяет текущий IP-адрес и шлюз по умолчанию в вашем сетевом соединении. 1. 2. 3. 4. 5. 6. 7.

Глава 9 1. createrepo позволяет сделать каталог, содержащий коллекцию пакетов RPM, репозиторием. 2. Строка [some-label] name=some-name baseurl=http://server.example.com/repo должна быть в файле репозитория. 3. yum repolist проверяет доступность репозитория. 4. yum provides */useradd позволяет вам искать пакет RPM, содержащий файл useradd. 5. Использование yum group list, за которым следует yum group info "Security Tools" показывает имя и содержимое группы yum, которая содержит инструменты безопасности. 6. Модуль yum module enable php:5.1 гарантирует, что все связанные с PHP пакеты будут установлены с использованием более старой версии 5.1 без фактической установки чеголибо еще. 7. rpm -q --scripts packagename позволяет убедиться, что загруженный пакет RPM не содержит опасного кода сценария. 8. rpm -qd name-of.rpm показывает всю документацию в пакете RPM. 9. rpm -qf /path/to/file показывает, из какого пакета RPM взят файл. 10. repoquery позволяет запрашивать программное обеспечение из репозитория.

481

Глава 10 1. jobs дает обзор всех текущих заданий оболочки. 2. Нажмите Ctrl-Z и введите bg, чтобы остановить текущее задание оболочки и продолжить его выполнение в фоновом режиме. 3. Нажмите Ctrl-C, чтобы отменить текущее задание оболочки. 4. Используйте инструменты управления процессом, такие как ps и kill, чтобы отменить задание. 5. ps fax показывает родительско-дочерние отношения между процессами. 6. Используйте renice -nn -p PID, где nn - значение от –1 до –20. Обратите внимание, что вам нужно быть root, чтобы повысить приоритет процесса. 7. killall dd останавливает все запущенные процессы. 8. pkill mycommand останавливает mycommand. 9. k используется для остановки процесса. 10. tuned служба должна быть запущена, чтобы выбрать профиль производительности.

Глава 11 1. Юнит - это то, что запускается systemd. Существуют различные типы юнитов, такие как services, mounts, sockets и многие другие. 2. Используйте systemctl list-units для отображения всех загруженных в данный момент service units. 3. Вы создаете want для сервисов с помощью команды systemctl enable. 4. Задайте переменную SYSTEMD_EDITOR в /etc/profile, чтобы изменить редактор по умолчанию для systemctl. 5. /etc/systemd/system/ содержит файлы юнит systemd. 6. Включить Requires, чтобы гарантировать, что файл юнита будет автоматически загружаться другой юнит файл. 7. systemctl show httpd показывает доступные параметры конфигурации для юнита httpd.service. 8. systemctl list-dependencies --reverse показывает все зависимости для конкретного юнита. 9. В выводе systemctl status, указывающем на то, что юнит мертв, нет ничего серьезного; это просто означает, что служба в настоящее время не работает. 10. Использование systemctl status для юнита, который вы хотите изменить, создает файл переопределения systemd.

Глава 12 1. Задание cron, которое необходимо выполнять раз в 2 недели, настраивается как конкретный файл cron в /etc/cron.d или привязано к учетной записи пользователя с помощью crontab e -u username. 2. 0 14 1,15 * * указывает время выполнения задания cron, которое необходимо выполнять дважды в месяц, 1 и 15 числа месяца в 14:00.

482

3. */2 * * * * указывает время выполнения cron для задания, которое будет запускаться каждые 2 минуты каждый день. 4. 0 0 19 9 4 указывает задание, которое необходимо выполнить 19 сентября и каждый четверг сентября. 5. sun, 0 и 7 все указывают, что задание cron должно быть выполнено в воскресенье. 6. crontab -e -u lisa позволяет вам запланировать задание cron для пользователя lisa. 7. Создайте файл /etc/cron.deny и убедитесь, что он содержит имя пользователя boris. 8. Укажите задание в /etc/anacrontab и убедитесь, что служба anacron работает. 9. Служба atd должна быть запущена для планирования заданий; используйте systemctl status atd для проверки. 10. Используйте atq, чтобы узнать, запланированы ли для выполнения какие-либо текущие задания at.

Глава 13 1. /etc/rsyslog.conf используется для настройки rsyslogd. 2. /var/log/secure содержит сообщения, относящиеся к аутентификации. 3. Файлы журнала удаляются по умолчанию через пять недель (одна неделя для текущего файла и четыре недели для старых файлов). 4. logger -p user.notice "some text" записывает сообщение из командной строки в средство пользователя, используя приоритет уведомления. 5. Создайте файл в /etc/rsyslog.d. Имя не имеет значения. Дайте ему следующее содержание: *.=info /var/log/messages.info. 6. Вы можете настроить журнал на превышение ограничений размера по умолчанию в /etc/systemd/journald.conf. 7. journalctl -f показывает новые сообщения в прокручиваемом журнале в реальном времени. 8. journalctl _PID=1 --since 9:00:00 --until 15:00:00 показывает все сообщения журнала, которые были написаны для PID 1 с 9:00 до 15:00. 9. В системе, где был настроен постоянный журнал, journalctl -b показывает сообщения журнала с момента последней перезагрузки. 10. Чтобы сделать журнал journald был постоянным, необходимо выполнить следующие четыре команды по порядку: mkdir /var/log/journal; chown root:systemd-journal /var/log/journal; chmod 2755 /var/log/journal; killall -USR1 systemd-journald.

Глава 14 gdisk используется для создания разделов GUID. fdisk используется для создания разделов MBR. XFS - файловая система по умолчанию в RHEL 8. /etc/fstab используется для автоматического монтирования разделов при загрузке. Параметр noauto mount используется для указания, что файловая система не должна монтироваться автоматически при загрузке. 6. mkswap позволяет отформатировать раздел типа 82 с соответствующей файловой системой. 7. mount -a позволяет вам проверить, без перезагрузки, будет ли работать автоматическое монтирование разделов во время загрузки. 1. 2. 3. 4. 5.

483

8. Ext2 создается, если вы используете команду mkfs без указания файловой системы. 9. Используйте mkfs.ext4 или mkfs -t ext4 для форматирования раздела Ext4. 10. Используйте blkid, чтобы найти UUID для всех устройств на вашем компьютере.

Глава 15 1. Тип раздела 8e00 используется в разделе GUID, который необходимо использовать в LVM. 2. vgcreate vggroup -s 4MiB /dev/sdb3 создает указанную группу томов. 3. pvs показывает краткую сводку физических томов в вашей системе, а также группу томов, к которой они принадлежат. 4. Просто введите vgextend vggroup /dev/sdd. Вам не нужно ничего делать на самом дисковом устройстве. 5. Используйте lvcreate -L 6M -n lvvol1 vgname. Обратите внимание, что это работает, только если вы создали группу томов с размером физического экстента 2 МиБ. 6. lvextend -L +100M /dev/vgname/lvvol1 добавляет 100 МБ к логическому тому lvvol1. 7. UUID=xxx /stratis1. Xfs. defaults,x-systemd.requires=stratisd.service 0 0 8. stratis pool create mypool /dev/sdd создает пул Stratis, основанный на блочном устройстве /dev/sdd. 9. vdo create --name=vdo1 --device=/dev/sde --vdoLogicalSize=1T создает устройство VDO с виртуальным размером 1 ТиБ. 10. Используйте параметр -k с mkfs.xfs, чтобы создать файловую систему XFS поверх тома с тонким предоставлением VDO.

Глава 16 uname -r показывает текущую версию ядра на компьютере. Информация о текущей версии вашей установки RHEL 8 находится в /etc/redhat-release. lsmod показывает список загруженных в настоящее время модулей ядра. modinfo modulename отображает параметры модуля ядра. modprobe -r выгружает модуль ядра. Используйте lsmod, чтобы узнать, каким другим модулям ядра в настоящее время нужен этот модуль ядра, и сначала выгрузите эти модули ядра. Обратите внимание, что это не всегда работают, особенно если рассматриваемое оборудование в настоящее время используется. 7. Используйте modinfo, чтобы узнать, какие параметры модуля ядра поддерживаются. 8. Создайте файл в /etc/modprobe.d и включите параметры, используя утверждение options. 9. Включите в файл options cdrom debug=1, которые будут автоматически загружать cdrom модуль. 10. yum upgrade kernel устанавливает новую версию ядра. 1. 2. 3. 4. 5. 6.

Глава 17 1. Юнит - это то, что запускается systemd. Существуют различные типы юнитов, такие как services, mounts, sockets и многие другие. 484

2. Используйте systemctl mask, чтобы убедиться, что target больше не имеет права на автоматический запуск при загрузке системы. 3. Измените /etc/default/grub, чтобы применить общие изменения к GRUB 2. 4. systemctl --type=service показывает все загруженные в данный момент служебные юниты. 5. Создайте want для сервиса с помощью команды systemctl enable для этого сервиса. 6. systemctl isolate rescue.target переключает текущий рабочий tartget на target rescue. 7. Есть два типа tartgets: target, которые могут работать независимо, и target, которые этого не могут. Проверьте файл юнит таргет, чтобы узнать больше об этом и убедиться, что targets изолируется (что означает, что он может работать независимо). 8. systemctl list-dependencies --reverse показывает, какие другие модули имеют зависимости от службы systemd. 9. Примените изменения к GRUB 2 в /etc/default/grub. 10. Запустите grub2-mkconfig > /boot/grub2/grub.cfg после внесения изменений в конфигурацию GRUB 2.

Глава 18 1. Нажмите e, чтобы войти в режим редактора меню загрузки GRUB. 2. Ошибка в /etc/fstab препятствует успешному завершению команды fsck в этой файловой системе. 3. Передайте systemd.unit=rescue.target ядру, чтобы перейти в режим, обеспечивающий доступ к большинству функций машины. 4. Запустите аварийную (rescue) систему. 5. systemctl list-units показывает, какие модули доступны в конкретной среде устранения неполадок. 6. Передайте rd.break загрузчику GRUB 2, чтобы начать поиск и устранение неполадок, связанных с утерянным паролем root. 7. load_policy -i загружает политику SELinux. 8. chcon -t shadow_t /etc/shadow гарантирует, что метки SELinux установлены правильно. 9. grub2-mkconfig -o /boot/grub2/grub.cfg сохраняет изменения, примененные к загрузчику GRUB 2. 10. systemd.unit=emergency.target переходит в режим минимального устранения неполадок.

Глава 19. 1. Сценарий будет интерпретироваться той же оболочкой, что и родительская оболочка. 2. test -z $VAR или [ -z $VAR ] можно использовать, чтобы проверить, не имеет ли переменная VAR значения. 3. Используйте $#, чтобы подсчитать количество использованных аргументов. 4. Используйте $@ для ссылки на все аргументы, которые использовались при запуске сценария. 5. Используйте read SOMEVAR для обработки пользовательского ввода в скрипте. 6. [ -f filename ] || echo file does not exist определяет, существует ли файл, и, если нет, выполняет указанную команду. 7. [ -e filename ] можно использовать, чтобы определить, является ли элемент файлом или каталогом. 485

8. Оператор for обычно используется для оценки ряда элементов. 9. Вы не делаете; это часть оператора if, которая закрывается с помощью fi. 10. Использование ;; после последней команды закрывает конкретный элемент.

Глава 20. 1. Используйте ssh-agent и ssh-add, чтобы кэшировать парольную фразу, установленную на вашем закрытом ключе. 2. Используйте AllowUsers lisa, чтобы запретить вход в систему с правами root и разрешить вход на ваш сервер только пользователю lisa. 3. Дважды укажите строку Port, чтобы настроить SSH-сервер на прослушивание двух разных портов. 4. Основной файл конфигурации SSH - это /etc/ssh/sshd_config. 5. Кодовая фраза будет сохранена в защищенной области памяти. 6. /etc/ssh/ssh_config содержит настройки клиента SSH для всех пользователей. 7. Параметр MaxSessions, который управляет этой функцией, уже имеет значение 10 по умолчанию, поэтому вам не нужно ничего менять. 8. semanage port -a -t ssh_port_t -p tcp 2022 настраивает SELinux, чтобы разрешить привязку SSH к порту 2022. 9. firewall-cmd –add-port 2022/tcp --permanent; firewall-cmd --reload настроить брандмауэр на SSH-сервере, чтобы разрешить входящие подключения к порту 2022. 10. Попробуйте UseDNS. Эта опция, которая активна по умолчанию, использует DNS для получения имени целевого хоста в целях проверки.

Глава 21 1. Группа «Базовый веб-сервер (Basic Web Server)» содержит полезные пакеты Apache. 2. systemctl enable --now httpd автоматически запускает службу httpd при загрузке. 3. /etc/httpd/conf.d - это расположение по умолчанию, куда RPM могут сбрасывать файлы конфигурации подключаемых модулей, которые должны учитываться сервером Apache. 4. curl позволяет тестировать веб-сервер с сервера, не имеющего графического интерфейса. 5. /etc/httpd/conf/httpd.conf - это файл конфигурации Apache по умолчанию. 6. /var/www/html используется в качестве корневого каталога документов Apache по умолчанию. 7. Процесс Apache ищет index.html. 8. Используйте либо systemctl status httpd, либо ps aux | grep http, чтобы проверить, работает ли в данный момент веб-сервер Apache. 9. /etc/httpd/conf.d - предпочтительное место для хранения файлов конфигурации виртуального хоста. 10. ServerRoot по умолчанию установлен в /etc/httpd.

Глава 22 1. setenforce 0 временно переводит SELinux в разрешающий режим. 486

2. getenforce -a или semanage boolean -l предоставляет список всех доступных логических значений. 3. Используйте команду sepolicy manpage, чтобы просмотреть справочную страницу SELinux для конкретной службы. 4. Установите setroubleshoot-server, чтобы получать удобные для чтения сообщения журнала SELinux в журнале аудита. 5. Используйте semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" за которым следует restorecon, чтобы применить тип контекста httpd_sys_content_t к каталогу /web. 6. Никогда! 7. Измените /etc/sysconfig/selinux, чтобы полностью отключить SELinux. 8. SELinux регистрирует все свои сообщения в /var/log/audit/audit.log. 9. /var/log/audit/audit.log показывает, какие типы контекста доступны для службы ftp. 10. Используйте setenforce 0, чтобы временно переключить SELinux в разрешающий режим, и повторите попытку.

Глава 23 1. firewalld должен быть запущен до того, как вы попытаетесь создать конфигурацию брандмауэра с помощью firewall-config. 2. firewall-cmd --add-port=2345/udp добавляет UDP-порт 2345 в конфигурацию межсетевого экрана в зоне по умолчанию. 3. firewall-cmd --list-all-zone перечисляет всю конфигурацию межсетевого экрана во всех зонах. 4. firewall-cmd --remove-service=vnc-server удаляет службу vnc-server из текущей конфигурации межсетевого экрана. 5. --reload активирует новую конфигурацию, добавленную с параметром --permanent. 6. --list-all позволяет проверить, что новая конфигурация была добавлена в текущую зону и теперь активна. 7. firewall-cmd --add-interface=eno1 --zone=public добавляет интерфейс eno1 в публичную зону. 8. Новый интерфейс будет добавлен в зону по умолчанию. 9. firewall-cmd --permanent --add-source=192.168.0.0/24 добавляет исходный IP-адрес 192.168.0.0/24 в зону по умолчанию. 10. firewall-cmd --get-services перечисляет все службы, которые в настоящее время доступны в firewalld.

Глава 24 1. Команде showmount необходимо, чтобы в брандмауэре также были открыты службы mountd и rpc.bind. 2. showmount -e server1 показывает доступные монтирования NFS на server1. Обратите внимание, что команда showmount не проходит через брандмауэр. 3. mount [-t nfs] server1:/share /somewhere монтирует общий ресурс NFS, доступный на server1:/share. 4. smbclient -L показывает подключения SMB на определенном сервере. 5. Перед монтированием SMB необходимо установить cifs-utils на SMB-клиенте. 487

6. mount -t cifs -o guest //server1/data /mnt монтирует общие данные Samba на server1 с гостевым доступом в локальный каталог /mnt. 7. Используйте файл учетных данных, содержащий по крайней мере имя пользователя и пароль, которые необходимо использовать. Укажите все параметры монтирования и используйте creds=/somewhere/credentials.file в столбце параметров монтирования. 8. auto.master - это главный файл конфигурации автомонтирования. 9. autofs реализует автомонтирование. 10. Нет. Вам нужно будет открывать порты на сервере, а не на клиенте.

Глава 25 date -s 16:24 устанавливает системное время на 16:24. hwclock --systohc устанавливает аппаратное время на текущее системное время. date -d '@nnnnnnn' показывает время эпохи в удобочитаемом формате. hwclock --hctosys синхронизирует системные часы с аппаратным временем. chronyd используется для управления временем NTP на RHEL 8. timedatectl set-ntp 1 позволяет использовать время NTP на вашем сервере. /etc/chrony.conf содержит список используемых NTP-серверов. Для вывода списка часовых поясов можно использовать либо timedatectl list-timezones, либо tzselect. 9. timedatectl set-timezone ZONE используется для установки текущего часового пояса. 10. timedatectl set-time TIME используется для установки системного времени. 1. 2. 3. 4. 5. 6. 7. 8.

488

Словарь терминов $PATH Переменная, содержащая список каталогов, в которых выполняется поиск исполняемых файлов, когда пользователь вводит команду. . Текущий каталог. Его значение можно запросить с помощью команды pwd. А absolute filename Полное имя файла, которое начинается с имени корневого каталога, включая все каталоги до текущего файла или каталога. access control list (ACL) В разрешениях Linux - система, позволяющая предоставлять разрешения более чем одному пользователю и более чем одной группе. Списки контроля доступа также позволяют администраторам устанавливать разрешения по умолчанию для определенных каталогов. anacron Служба, обеспечивающая выполнение важных заданий cron, когда сервер не работает в тот момент, когда задание должно выполняться в обычном режиме. Можно считать расширением cron. AND логическая конструкция, которую можно использовать в скриптах. В конструкции AND вторая команда выполняется только после успешного выполнения первой команды. Application profile Набор пакетов, которые могут использоваться для установки определенной версии программного обеспечения в соответствии с определенным профилем установки. Application Stream. Определенная версия модуля yum, которая может быть установлена как таковая. archiving Система, обеспечивающая правильное резервное копирование данных. at Служба, которую можно использовать для планирования будущих заданий для одноразового выполнения. attribute Свойство, которое может быть установлено для файла или каталога и которое будет применяться независимо от того, какой пользователь с правами доступа обращается к файлу. Например, файл с установленным атрибутом immutable (i) не может быть удален даже пользователем root. Однако у пользователя root есть возможность изменить атрибут, что в любом случае позволит пользователю root удалить файл. audit log Главный файл журнала в /var/log/audit/audit.log, который по умолчанию содержит все сообщения, которые регистрируются службой auditd. auditd Служба, которая по умолчанию запускается в Red Hat Enterprise Linux и может быть настроена для регистрации очень подробной информации о том, что происходит в RHEL. 489

Аудит дополняет системное ведение журнала и может использоваться в целях обеспечения соответствия. В RHEL система аудита заботится о регистрации сообщений, связанных с SELinux, что делает ее относительно важной системой. autofs Служба, которая автоматически монтирует файловые системы в момент обращения к определенному каталогу. Эта служба очень полезна для обеспечения автоматического подключения домашних каталогов для пользователей в централизованной системе управления пользователями, которая может быть реализована службой LDAP. automount Процесс, запускаемый службой autofs. См. Autofs для более подробной информации.

B background process. Процесс, который выполняется в системе, но не занимает консоль. Процессы можно запускать в фоновом режиме, добавляя & после команды, запускающей процесс. См. Также процесс переднего плана (foreground process). backup Копия важных данных, которую можно восстановить, если в любой момент исходные данные будут потеряны. Bash Оболочка по умолчанию, которая используется в Red Hat Enterprise Linux. Basic Input Output System (BIOS) Первое программное обеспечение, которое запускается при запуске компьютера на старых IBM-совместимых компьютерах. Настройки в BIOS можно изменить с помощью программы настройки BIOS. См. Также Унифицированный расширяемый интерфейс микропрограмм (UEFI). binary. Схема нумерации, основанная на битовых значениях, которые могут быть включены или выключены. Двоичные числа - это 0 и 1. Поскольку двоичные числа трудно использовать, часто используются десятичные, шестнадцатеричные или восьмеричные числа. BIOS См. Базовая система ввода-вывода. boot loader Программа, которая запускается в первую очередь при запуске компьютера и заботится о загрузке ядра операционной системы и initramfs. BtrFS Файловая система Linux общего назначения, которая, как ожидается, станет файловой системой по умолчанию в Red Hat Enterprise Linux в будущем выпуске.

C cache. Кэш. В управлении памятью - область памяти, в которой хранятся недавно использованные файлы. Кэш - важный механизм для ускорения чтения на серверах. capability Определенная задача, которую можно выполнить в Linux. Пользователь root имеет доступ ко всем capability; обычные пользователи имеют доступ только к ограниченному набору возможностей. CentOS Дистрибутив Linux, в котором используются все пакеты Red Hat, но из всех этих пакетов удален логотип Red Hat, чтобы можно было распространять программное обеспечение бесплатно. CentOS - лучший вариант для практики к экзамену RHCSA, если у вас нет доступа к RHEL.

490

certificate. В криптографии PKI содержит открытый ключ издателя сертификата. Этот открытый ключ подписан сертификатом центра сертификации, что гарантирует его надежность. certificate authority (CA) Общеизвестная организация, которую можно использовать для гарантии надежности сертификатов PKI. Центр сертификации предоставляет сертификат, который можно использовать для подписи сертификатов открытых ключей. Вместо использования общеизвестных организаций, самозаверяющие сертификаты также могут использоваться для внутренних целей. chrony Служба, которая предлагает службы синхронизации времени в Red Hat Enterprise Linux. chroot Среда, в которой часть файловой системы представлена как корень файловой системы. Chroot используется как функция безопасности, которая скрывает часть операционной системы, которая не требуется конкретным службам. CIFS См. Общая файловая система Интернета. cloud Вычислительная платформа, которая позволяет гибко использовать размещенные вычислительные ресурсы. Common Internet File System (CIFS) Стандартизированная версия протокола Microsoft Server Message Block (SMB), который используется для обеспечения доступа к общим принтерам, файлам и каталогам способом, совместимым с серверами и клиентами Windows. CIFS стал де-факто стандартом для обмена файлами в ИТ. compression. Технология, которая используется для уменьшения размера файлов за счет анализа повторяющихся шаблонов и более эффективного их хранения. условный цикл. В сценариях conditional loop - набор команд, который выполняется только при соблюдении определенного условия. connection (in network card configuration) Набор параметров конфигурации сети, связанных с сетевым интерфейсом. connection (in network communication) Сеанс между двумя сторонами, который был инициализирован и будет существовать до момента, когда соединение будет разорвано. console. В Linux - основной терминал, на котором работает пользователь. Это также конкретное устройство с именем /dev/console. context. В SELinux - метка, которая используется для определения атрибутов безопасности пользователей, процессов, портов и каталогов. Эти контексты используются в политике SELinux для определения правил безопасности. context switch Когда ЦП переключается с выполнения одной задачи на выполнение другой задачи. тип контекста. В SELinux - метка, определяющая свойства SELinux пользователей, процессов, портов и процессов.

491

Coordinated Universal Time (UTC) Стандарт времени, который во всем мире одинаков, независимо от того, в каком конкретном часовом поясе находится пользователь. UTC примерно соответствует среднему времени по Гринвичу (GMT). credentials file Файл, который можно использовать для автоматического монтирования файловых систем CIFS из файла /etc/fstab. Файл учетных данных хранится в безопасном месте, например, в домашнем каталоге пользователя root, и содержит имя пользователя и пароль, которые используются для монтирования удаленной файловой системы. cron Служба, которая заботится о повторном запуске служб в определенное время. cryptography Метод, используемый для защиты данных, часто путем преобразования информации в нечитаемое состояние, когда ключи используются для расшифровки зашифрованных данных. Криптография используется не только для защиты файлов во время передачи, но и для защиты процедуры аутентификации.

D deduplication. Технология хранения, которая анализирует данные, которые должны быть сохранены на диске, и удаляет повторяющиеся шаблоны, чтобы обеспечить более эффективное хранение. Используется в VDO. См. Также Virtual Data Optimizer (VDO). default route, который используется по умолчанию для пересылки IP-пакетов к адресату во внешней сети. dependency Как правило, ситуация, когда одному элементу нужен другой элемент. В Linux зависимости возникают на нескольких уровнях. В управлении пакетами RPM зависимость - это программный пакет, который должен присутствовать для установки другого пакета. В systemd зависимость - это модуль systemd, который должен быть загружен перед загрузкой другого модуля. dependency hell Ситуация, когда для установки пакета необходимы другие пакеты, которые сами по себе могут также требовать зависимостей. Проблема dependency hell была решена введением систем на основе репозиториев. destination В rsyslog указывает, куда система регистрации должна отправлять сообщения журнала. Местами назначения часто являются файлы, но они также могут быть модулями ввода, модулями вывода, пользователями или хостами. device Периферийное устройство, подключенное к компьютеру для выполнения определенной задачи. device file Файл, который создается в каталоге /dev и используется для представления устройства и взаимодействия с ним. 492

device mapper Служба, которая используется ядром Linux для связи с устройствами хранения. Устройство сопоставления используется LVM, multipath и другими устройствами, но не обычными жесткими дисками. Файлы устройств, созданные устройством сопоставления устройств, можно найти в каталоге /dev/mapper. directory Папка в файловой системе, которая может использоваться для упорядоченного хранения файлов. disabled mode Режим SELinux, в котором SELinux полностью деактивирован. distribution Версия Linux, которая поставляется с собственной программой установки или готова к использованию. Поскольку Linux представляет собой набор различных инструментов и других компонентов, дистрибутив Linux собирает эти инструменты и другие компоненты, может или не может улучшать их, и распространяет их, чтобы пользователям не приходилось соберите для себя все разные компоненты. dmesg Утилита, которую можно использовать для чтения кольцевого буфера ядра, который содержит сообщения журнала, созданные ядром Linux. dracut Утилита, которая используется для генерации initramfs, важной части операционной системы Linux, которая содержит драйверы и другие важные файлы, необходимые для запуска системы Linux. dynamic route. Сетевой маршрут, управляемый протоколом автоматической маршрутизации.

E enforcing mode Режим SELinux, в котором SELinux полностью работоспособен и применяет все ограничения, которые были настроены для конкретной системы. environment. Набор параметров, которые пользователи или процессы используют для выполнения своей работы. epoch time. В Linux - количество секунд, прошедших с начала эпохи (соответствует полуночи 1 января 1970 г.). Некоторые утилиты записывают время эпохи вместо реального времени. escaping В среде оболочки с использованием специального синтаксиса, чтобы гарантировать, что определенные символы не интерпретируются оболочкой. Экранирование может потребоваться для отображения определенных символов на экране или для гарантии того, что метасимволы регулярного выражения не будут сначала интерпретированы оболочкой bash. export. В NFS относится к каталогу, который используется совместно на сервере NFS, чтобы разрешить доступ другим серверам. 493

Ext2, 3 и 4 Три разные версии файловой системы Ext. До RHEL 6 файловой системой по умолчанию была Ext4. Сейчас это считается неадекватным для современных потребностей в хранении данных, поэтому Ext4 в RHEL 7 был заменен на XFS в качестве файловой системы по умолчанию. extended partition Решение для создания более четырех разделов на MBR-диске. На дисках MBR в таблице разделов может храниться максимум четыре раздела. Чтобы иметь возможность выйти за пределы этого числа, один из четырех разделов может быть создан как расширенный раздел. Внутри расширенного раздела могут быть созданы логические разделы, которые будут работать как обычные разделы, позволяя системным администраторам создавать больше разделов. external command Команда, существующая в виде файла на диске.

F facility. В rsyslogd - источник информации журнала. В rsyslogd определено строго ограниченное количество возможностей. Fedora Бесплатный дистрибутив Linux с открытым исходным кодом, спонсируемый Red Hat. В Fedora представлены и протестированы новые функции. Некоторые из этих функций будут включены в более поздние выпуски Red Hat Enterprise Linux. FHS См. Filesystem Hierarchy Standard. file descriptor Указатель, который используется процессом Linux для ссылки на файлы, используемые процессом. file system Логическая структура, создаваемая на запоминающем устройстве. В файловой системе Linux inodes используются для администрирования файловой системы, а фактические данные записываются в блоки. См. Также inode. Filesystem Hierarchy Standard (FHS) Стандарт, определяющий, какие каталоги Linux должны использоваться для каких целей. Прочтите man 7 hier для получения спецификации FSH. firewall. Решение, которое можно использовать для фильтрации пакетов в сети. Брандмауэры используются, чтобы гарантировать, что только авторизованный трафик может достигнуть системы. Брандмауэр может быть предложен через функциональные возможности Netfilter ядра Linux, но часто также предлагается как устройство в сети. firewalld Современная служба (заменяющая iptables), которая используется в RHEL 7 и RHEL 8 для реализации межсетевого экрана на основе структуры межсетевого экрана ядра Linux.

494

folder Также называемая каталогом, структура в файловой системе, используемая для организации файлов, которые принадлежат друг другу. foreground process Процессы Linux, которые запускаются пользователями, могут запускаться как на переднем плане, так и в фоновом режиме. Если процесс был запущен как процесс переднего плана, никакие другие процессы не могут быть запущены в том же терминале, пока он не завершится или не будет перемещен в фоновый режим. См. Также фоновый процесс. fstab Файл конфигурации, который используется в Linux для автоматического монтирования файловых систем при запуске системы.

G GECOS Поле в файле /etc/passwd, которое можно использовать для хранения личных данных о пользователе в операционной системе Linux. Изначально GECOS означало комплексный операционный супервайзер General Electric. global unique ID (GUID) Идентификационный номер, состоящий из частей, обеспечивающих его глобальную уникальность. GPT См. GUID Partition Table. group Коллекция предметов. В управлении пользователями группы используются для одновременного назначения разрешений нескольким пользователям. В Linux каждый пользователь является членом как минимум одной группы. group owner Группа, которая была установлена как владелец файла или каталога. В Linux у каждого файла и каталога есть владелец пользователя и владелец группы. Групповое владение устанавливается при создании файлов, и, если не указано иное, оно устанавливается для основной группы пользователя, создавшего файл. GRUB См. GRUB 2. GRUB 2 Загрузчик, установленный в большинстве систем, требующих запуска Linux. GRUB 2 предоставляет приглашение загрузки, из которого можно ввести различные параметры загрузки ядра, что полезно, если вам нужно устранить неполадки в процедуре загрузки. GUID См. Глобальный уникальный идентификатор. GUID Partition Table (GPT) Современное решение для хранения разделов на жестком диске, в отличие от старой таблицы разделов MBR. В разделах GUID можно создать всего 128 разделов, и больше нет разницы между первичным, расширенным и логическим разделами.

495

gzip Одна из самых распространенных утилит, которая используется для сжатия и распаковки файлов в Linux.

H hard link Имя, связанное с индексным дескриптором. Inodes используются для хранения файлов Linux. Inode содержит полное администрирование файла, включая блоки, в которых он хранится. Файл, не имеющий хотя бы одной жесткой ссылки, считается удаленным. Чтобы повысить доступность файла, для индексного дескриптора можно создать более одной жесткой ссылки. hardware time Время, предоставляемое аппаратным обеспечением компьютера, обычно это часы BIOS. Когда система Linux загружается, она устанавливает время программного обеспечения на основе аппаратного времени. Поскольку аппаратное время часто неточно, большинство систем Linux используют протокол сетевого времени (NTP) для синхронизации системного времени с надежным источником времени. hexadecimal счисления на основе 16, основанная на группах по 4 байта. Шестнадцатеричные числа начинаются с диапазона от 0 до 9, за которым следуют от A до F. Поскольку шестнадцатеричные числа намного эффективнее в компьютерных технологиях, часто используются шестнадцатеричные числа. В IPv6 IP-адреса записываются в виде шестнадцатеричных чисел. hypervisor. Часть компьютерного программного обеспечения, микропрограмм или оборудования, которое создает и запускает виртуальные машины. В Linux KVM используется как обычное программное обеспечение гипервизора.

I inheritance. В управлении разрешениями относится к ситуации, когда новые файлы, созданные в каталоге, наследуют настройки разрешений из родительского каталога. init Первый процесс, который запускается после загрузки ядра Linux и initramfs. Все остальные процессы запускаются из процесса инициализации. Начиная с RHEL 7, процесс инициализации был заменен на systemd. initramfs Начальная файловая система RAM. Содержит драйверы и другие файлы, необходимые на первых этапах загрузки системы Linux. В Red Hat Enterprise Linux файл initramfs создается во время установки и может быть воссоздан вручную с помощью утилиты dracut.

inode Содержит полное администрирование файла. Каждый файл Linux имеет индексный дескриптор, а индексный дескриптор содержит все свойства файла, но не имя файла.

496

input module. В rsyslog - модуль, позволяющий rsyslog получать сообщения журнала из определенных источников. interface Интерфейс. В сети Linux - набор параметров конфигурации, которые можно активировать для конкретного устройства. Для устройства может существовать несколько конфигураций интерфейса, но одновременно для устройства может быть активен только один интерфейс. internal command Команда, которая является частью оболочки и не существует в виде файла на диске. Internet Protocol (IP) Основной протокол связи, используемый компьютерами для связи. Интернет-протокол существует в двух версиях (IPv4 и IPv6). Помимо адресации узлов, он определяет маршрутизацию, которая позволяет узлам связываться друг с другом. IP См. Интернет-протокол. iptables Старое решение для создания правил брандмауэра в операционной системе Linux. Интерфейс с функцией межсетевого экрана ядра Netfilter Linux и решение по умолчанию для создания программных межсетевых экранов в более ранних версиях RHEL. Начиная с RHEL 7, iptables был заменен на firewalld. IPv4 Версия 4 Интернет-протокола. Он был разработан в 1970-х и представлен в 1981 году. Он позволяет адресовать максимум около 4 миллиардов узлов с помощью 32-битного адресного пространства. Это по-прежнему самая важная используемая версия IP. IPv6 Версия 6 Интернетпротокола. Он был разработан в 1990-х годах для решения проблемы нехватки адресов IPv6. Он использует 128-битное адресное пространство, которое позволяет адресовать 3,4e38 узлов и, следовательно, считается практически неограниченным адресным пространством. iteration. В сценариях оболочки - один раз из многих, когда условный цикл был обработан до тех пор, пока не будет достигнут желаемый результат.

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

497

K kernel Центральный компонент операционной системы. Он управляет запросами ввода-вывода от программного обеспечения и преобразует их в инструкции по обработке данных для оборудования компьютера. kernel ring buffer Кольцевой буфер ядра. Часть памяти, в которой хранятся сообщения, генерируемые ядром. Команда dmesg позволяет вам читать содержимое кольцевого буфера ядра. kernel space Часть памяти, зарезервированная для выполнения привилегированных инструкций. Пространство ядра обычно доступно для ядра операционной системы, расширений ядра и большинства драйверов устройств. Приложения обычно запускаются в пользовательском пространстве, что гарантирует, что неисправное приложение не сможет вывести компьютерную систему из строя. Kernel-based Virtual Machine (KVM) Виртуальная машина на основе ядра (KVM) Модуль ядра Linux, который действует как гипервизор и позволяет запускать виртуальные машины непосредственно поверх ядра Linux. key-based login Вход на основе ключей. В SSH - вход, в котором используются открытые / закрытые ключи для подтверждения личности пользователя, который хочет войти в систему. Вход на основе ключа обычно считается более безопасным, чем вход на основе пароля. kill Команда, которую можно использовать для отправки сигнала процессу Linux. Определено множество сигналов (см. Сигнал man 7), но обычно используются лишь некоторые, включая SIGTERM и SIGKILL, которые оба используются для остановки процессов. KVM См. Виртуальная машина на основе ядра.

L label Имя, которое может быть присвоено файловой системе. Использование меток может быть хорошей идеей, потому что после того, как метка назначена, она никогда не будет изменена, что гарантирует, что файловая система все еще может быть смонтирована, даже если другие параметры, такие как имя устройства, изменились. Однако UUID считаются более безопасными, чем метки, потому что вероятность случайного дублирования метки намного выше, чем вероятность наличия повторяющегося UUID. См. Также универсальный уникальный идентификатор (UUID). line anchor привязка к строке. В регулярных выражениях - символ, указывающий на определенную позицию в строке.

498

Linux Операционная система типа UNIX, состоящая из ядра, первоначально разработанного Линусом Торвальдсом (отсюда и название Linux). Текущая операционная система Linux состоит из ядра и множества инструментов с открытым исходным кодом, которые обеспечивают полную операционную систему. Linux упакован в виде дистрибутива. В настоящее время Red Hat Enterprise Linux является одним из наиболее широко используемых дистрибутивов Linux. log rotation ротация журналов Служба, гарантирующая, что файлы журналов не станут слишком большими. Файлы журналов отслеживаются в соответствии с определенными параметрами, такими как максимальный возраст или размер. Как только этот параметр будет достигнут, файл журнала будет закрыт и будет открыт новый файл журнала. Старые файлы журналов хранятся в течение ограниченного периода времени и будут удалены, часто после всего пару недель. logical extent Строительный блок, который используется в LVM для создания логических томов. Обычно он имеет размер в несколько мегабайт, что соответствует размеру используемых физических экстентов. logical partition Раздел, созданный в расширенном разделе. См. Также расширенный раздел. logical volume. В LVM - объект, на котором создается файловая система. Логические тома часто используются в RHEL, поскольку они предлагают важные преимущества, такие как возможность динамического изменения размера логического тома и файловой системы, на которой он размещен. Logical Volume Manager (LVM) Программа, позволяющая работать с логическими томами. login shell оболочка входа в систему. Оболочка, которая открывается сразу после входа пользователя в систему. LVM См. Диспетчер логических томов.

M masquerading Решение, позволяющее получить доступ к диапазону частных IP-адресов, который не доступен напрямую из внешних сетей, с помощью одного общедоступного IP-адреса, предоставленного на маршрутизаторе. Master Boot Record (MBR) Основная загрузочная запись. В системе BIOS - первые 512 байтов на основном жестком диске. Он содержит загрузчик и таблицу разделов, которые предоставляют доступ к различным разделам на жестком диске этого компьютера. MBR См. Главную загрузочную запись.

499

module. Часть кода оснастки. Модули используются в нескольких системах Linux, таких как ядро, GRUB 2, rsyslog и другие. Компоненты Linux можно легко расширять с помощью модулей, а добавление функций не требует полного переписывания программного обеспечения. module (in YUM) Набор программных пакетов, которыми можно управлять как единым целым и которые могут содержать разные версии программного решения. mount Соединение между устройством и каталогом. Чтобы получить доступ к файлам на определенных устройствах хранения, запоминающее устройство должно быть подключено к каталогу. Это устанавливает указанный каталог в качестве точки доступа к файлам на устройстве хранения. Установки обычно организуются системным администратором и не видны конечным пользователям. multiplier. В регулярных выражениях - символ, указывающий на то, что упоминается кратное предыдущему символу.

N netfilter Часть ядра Linux, реализующая межсетевой экран. netmask См. маску подсети. Network Address Translation (NAT) Трансляция сетевых адресов (NAT) См. Маскирование. Network File System (NFS) Сетевая файловая система (NFS) Распространенное решение UNIX для экспорта физических файловых систем на другие узлы сети. Другие хосты могут монтировать экспортированный каталог NFS в своей локальной файловой системе. network time сетевое время Время, предоставляемое в сети. Network Time Protocol (NTP) Протокол сетевого времени (NTP) Стандарт, который используется для обеспечения надежного времени для серверов в сети. NTP на RHEL 8 реализуется службой chronyd. NFS См. Сетевая файловая система. nftables Служба, управляющая брандмауэром ядра. Это замена старой службы iptables. nice Способ изменения приоритета процессов Linux. Отрицательное значение nice сделает процесс более агрессивным, придав ему более высокий приоритет (что выражается более низким числом приоритета); положительное значение nice сделает процесс менее активным, так что он отдаст приоритет другим процессам.

500

NTP См. Протокол сетевого времени.

О octal. Схема нумерации, в которой используются только числа от 0 до 7. Используется при работе с разрешениями Linux с помощью команд umask или chmod. OR ИЛИ Логическая операция, при которой вторая команда выполняется только в том случае, если первая команда не может быть выполнена. output module. В rsyslog - модуль, который используется для отправки сообщений журнала в определенное место назначения. Модули вывода делают rsyslogd гибким и позволяют использовать места назначения журналов, которые не являются собственными для rsyslog. Ownership владение. В разрешениях файловой системы - основа действующих разрешений, которыми обладает пользователь. Каждому файлу назначен владелец пользователя и владелец группы.

P package Пакет, который используется для распространения программного обеспечения. Пакет обычно содержит сжатый архив файлов и метаданных, который включает инструкции по установке этих файлов. package group Группа пакетов, которые могут быть установлены как таковые с помощью команды yum groups install. package group (in yum) Группа пакетов программного обеспечения, которые можно установить с помощью одной команды. Pager Программа, которая может использоваться для просмотра страницы за страницей по текстовому файлу. Утилита less предоставляет один из самых распространенных пейджеров Linux. parent shell родительская оболочка Среда, из которой запускается сценарий оболочки или программа. Процессы или дочерние скрипты наследуют настройки родительской оболочки. partition. Раздел жесткого диска, на котором может быть создана файловая система для монтирования его в структуру каталогов. Passphrase В основном пароль, но он должен быть длиннее и надежнее пароля.

501

Password Маркер, который используется при аутентификации. Пароль - это секретное слово, которое может быть установлено отдельными пользователями и будет храниться в зашифрованном виде. Path путь Полная ссылка на расположение файла. permissions Атрибуты, которые могут быть установлены для файлов или каталогов, чтобы разрешить пользователям или группам доступ к этим файлам или каталогам. permissive mode Режим SELinux, в котором ничего не блокируется, но все регистрируется в журнале аудита. Этот режим обычно используется для устранения проблем с SELinux. physical extent физический размер Физический строительный блок, который используется при создании физических томов LVM. Обычно размер составляет несколько мегабайт. physical volume физический объем Фундаментальный строительный блок конфигурации LVM. Физический том обычно соответствует разделу или целому диску. PID См. Идентификационный номер процесса. pipe Структура, которая может использоваться для пересылки вывода одной команды для использования в качестве ввода для другой команды. policy См. политику SELinux. Port Номер, который используется процессом для предоставления доступа к процессу через сетевое соединение. port forwarding переадресация портов Метод брандмауэра, при котором трафик, поступающий на определенный порт, перенаправляется на другой порт, который может находиться на том же или другом хосте. Portable Operating System Interface (POSIX) Интерфейс переносимой операционной системы Стандарт, созданный для обеспечения совместимости между операционными системами. Стандарт в основном применяется к UNIX и гарантирует, что различные разновидности Linux и UNIX совместимы друг с другом. portmapper Служба удаленного вызова процедур, которая должна работать в системах, предоставляющих службы RPC. Portmapper использует динамические порты, которые не соответствуют определенным портам TCP или UDP; служба выберет порт UDP или TCP, который будет использоваться, пока процесс активен. При перезапуске есть вероятность, что разные порты используются. Их необходимо сопоставить с фиксированными портами UDP и TCP, чтобы можно было открыть брандмауэр для этих портов. Portmapper по-прежнему используется компонентами службы NFS.

502

POSIX См. Интерфейс переносимой операционной системы. primary group Группа, которая указана в поле членства в группе для пользователя в /etc/passwd. Каждый пользователь Linux является членом основной группы. Кроме того, пользователи могут быть включены во второстепенные группы. primary partition первичный раздел. В MBR - один из максимум четырех разделов, которые могут быть созданы в основной загрузочной записи. См. Также расширенный раздел. priority (in process handling) приоритет (в обработке процесса) Определяет важность процесса. Приоритет процесса выражается числом (которое можно изменить с помощью nice). Процессы с более низким номером приоритета обслуживаются перед процессами с более высоким номером. priority (in rsyslog) приоритет (в rsyslog) Используется для указания серьезности зарегистрированного события. В зависимости от степени серьезности могут быть предприняты определенные действия. private key закрытый ключ. При шифровании с открытым/закрытым ключом - ключ, который используется для генерации зашифрованных данных. privileged user привилегированный пользователь См. root. proc Интерфейс ядра, обеспечивающий доступ к информации о ядре и его настройкам. Этот интерфейс доступен в файловой системе /proc. Process Задача, выполняемая на машине Linux. Грубо говоря, процесс соответствует программе, хотя одна программа может запускать несколько процессов. process identification number (PID) идентификационный номер процесса. Уникальный номер, который используется для идентификации процесса, запущенного в системе Linux. profile В tuned - набор настроек производительности, которые можно легко применить. Protocol Набор правил, который используется в вычислениях, например, в компьютерных сетях, для установления связи между двумя компьютерами. Pseudo Root File System Псевдо-корневая файловая система. В текущем выпуске NFS NFSv4 решение, при котором несколько общих папок экспортируются сервером NFS. Вместо того, чтобы монтировать каждый отдельный общий ресурс, клиент NFS монтирует корневую файловую систему на сервере NFS, что дает доступ ко всем общим ресурсам, на которые клиент имеет право. pseudo root mount. В NFSv4 - монтирование системы корневых каталогов или другого каталога высокого уровня, который не был специально экспортирован сервером NFS, но который дает доступ ко всем экспортированным файловым системам, к которым у клиента есть доступ. 503

public key. В криптографии - ключ, который обычно отправляется сервером клиенту, чтобы клиент мог отправить обратно зашифрованные данные. PV См. Физический объем.

Q queue В управлении процессами, когда процессы ждут, прежде чем они смогут быть выполнены.

R real-time clock Аппаратные часы, установленные на материнской плате компьютера. reboot Процедура остановки компьютера и его повторного запуска. Red Hat Customer Portal Портал для клиентов Red Hat Платформа, которую Red Hat предлагает для предоставления исправлений для клиентов с активной подпиской. Чтобы предоставить эти исправления и обновления, Red Hat Network предоставляет репозитории, необходимые для этой цели. Red Hat Enterprise Linux (RHEL) Название программного обеспечения, на которое Red Hat продает подписки. Он доступен в серверной и настольной версиях. Red Hat Package Manager Имя формата пакета, который используется в RHEL для пакетов программного обеспечения и для программного обеспечения управления пакетами. RPM также стал стандартом для управления пакетами во многих других дистрибутивах Linux. reference clock Часы, которые используются в качестве источника времени в конфигурации времени NTP. Обычно эталонные часы - это высоконадежные часы в Интернете, но они также могут быть внутренними часами на материнской плате компьютера. regular expression регулярное выражение. Шаблон поиска, который позволяет пользователям гибко искать текстовые шаблоны. Не путать с метасимволами оболочки. relative filename относительное имя файла Имя файла, относящееся к каталогу, который не является корневым каталогом. Remote Procedure Calls (RPC) Удаленные вызовы процедур. Метод межпроцессного взаимодействия, который позволяет программе выполнять код в другом адресном пространстве. Удаленные вызовы процедур - это старый протокол, который до сих пор используется в сетевой файловой системе. 504

repository. Источник установки, содержащий устанавливаемые пакеты и индекс, содержащий информацию об устанавливаемых пакетах, чтобы программа установки yum могла сравнивать версию установленных пакетов с версией пакетов, доступных в репозитории. resident memory Страницы памяти, используемые программой. resolver Клиентская часть DNS, содержащая список DNS-серверов, с которыми необходимо связаться для разрешения DNS-запросов. RHEL См. Red Hat Enterprise Linux. rich rules Правила в firewalld, которые позволяют использовать более сложный синтаксис, чтобы можно было определять более сложные правила. root Учетная запись привилегированного пользователя, которая используется для задач системного администрирования. Пользователь root имеет доступ ко всем возможностям, что означает, что разрешения не применяются к пользователю root, а учетная запись пользователя root практически не ограничена. root directory Начальная точка иерархии файловой системы, обозначенная как /. RPC См. «Вызов удаленных процедур». RPM См. Менеджер пакетов Red Hat. RTC См. Часы реального времени. rsyslogd Общий демон, регистрирующий сообщения.

S Samba Имя службы Linux, реализующей протокол SMB. SAN См. Сеть хранения. Scheduler Часть ядра Linux, которая отслеживает очередь выполняемых процессов и распределяет процессорное время для этих процессов.

505

Scientific Linux Дистрибутив Linux, основанный на пакетах Red Hat, из которых удален логотип Red Hat. Очень хороший выбор для людей, которые ищут бесплатную альтернативу Red Hat Enterprise Linux. secondary group вторичная группа. Группа, членом которой является пользователь, но членство в которой не определено в файле /etc/passwd. При создании новых файлов вторичная группа не станет автоматически владельцем этих файлов. Secure Shell (SSH) Решение, которое позволяет пользователям открывать оболочку на удаленном сервере, где безопасность реализована с помощью криптографии с открытым/закрытым ключом. Secure Sockets Layer (SSL) Уровень защищенных. См. Безопасность транспортного уровня (TLS). SELinux Модуль безопасности ядра Linux, обеспечивающий механизм поддержки политик безопасности контроля доступа. SELinux Policy Политика SELinux Набор правил, используемых для определения безопасности SELinux. Server Message Block (SMB) Протокол уровня приложения, который используется для предоставления общего доступа к файлам, принтерам и последовательным портам, который в Linux реализован на сервере Samba. services (в firewalld) Конфигурация настроек брандмауэра, которая используется для разрешения доступа к определенным процессам. services (в systemd) Процессы, которые необходимо запустить для обеспечения определенной функциональности. share Каталог, к которому настроен удаленный доступ с использованием протокола удаленной файловой системы, такого как NFS или CIFS. shebang Используется в сценарии, чтобы указать, какую оболочку следует использовать для выполнения кода в сценарии оболочки. Если shebang не используется, код сценария будет интерпретироваться родительской оболочкой, что в некоторых случаях может привести к ошибкам. Shebang начинается с символа #, за которым следует! и полный путь к оболочке, например #!/bin/bash. shell Среда, из которой могут выполняться команды. Bash - это оболочка по умолчанию в Linux, но существуют и другие оболочки. shell metacharacters метасимволы оболочки. Такие символы, как *,? и [a-z], которые позволяют пользователям гибко ссылаться на символы в именах файлов.

506

signal Инструкция, которая может быть отправлена процессу. Существуют общие сигналы, такие как SIGTERM и SIGKILL, но ядро Linux позволяет использовать всего 32 различных сигнала. Чтобы отправить сигнал процессу, используйте команду kill. SMB См. Блок сообщений сервера. snapshot «фотография» фактического состояния файловой системы. software time программное время См. системное время. source context исходный контекст. В SELinux - контекст процессов или пользователей, инициирующих действие. Контекст в SELinux - это метка, определяющая разрешенные операции. У всего в среде SELinux есть контекст. SSH См. Secure Shell. standard error (STDERR)Расположение по умолчанию, куда программа отправляет сообщения об ошибках. standard input (STDIN) Расположение по умолчанию, откуда программа получает свой ввод. standard output (STDOUT) Расположение по умолчанию, куда программа отправляет свой обычный вывод. static route статический маршрут Маршрут, определяемый вручную администратором сети. STDERR См. Стандартную ошибку. STDIN См. Стандартный ввод. STDOUT См. Стандартный вывод. storage-area network (SAN) Решение, при котором дисковые устройства совместно используются на уровне блоков по сети. Таким образом, они могут использоваться так же, как локальные дисковые устройства в системе Linux. iSCSI и Fibre Channel - распространенные протоколы SAN. Stratis Новая файловая система управления томами в RHEL 8. stratum При синхронизации времени, используется для обозначения расстояния между сервером и авторитетным источником времени в Интернете. subnet mask маска подсети. Логическое подразделение IP-сети.

507

Subshell Оболочка, запускаемая из другой оболочки. Обычно подоболочка запускается при запуске сценария оболочки. symbolic link символическая ссылка. Особый тип файла, который содержит ссылку на другой файл или каталог в виде абсолютного или относительного пути. sysfs Интерфейс ядра, смонтированный в каталоге / sys и используемый для предоставления доступа к параметрам, которые могут использоваться для управления настройками оборудования. system time системное время Время, поддерживаемое операционной системой. Когда система Linux загружается, системное время устанавливается на текущее аппаратное время, и во время работы операционной системы оно часто синхронизируется с помощью протокола сетевого времени (NTP). systemd Диспетчер служб в RHEL 8. systemd - это самый первый процесс, который запускается после загрузки ядра, и он заботится о запуске всех других процессов и служб в системе Linux.

Т tainted kernel Ядро, в которое загружены неподдерживаемые модули ядра. tar Ленточный архиватор; утилита Linux по умолчанию, которая используется для создания и извлечения резервные копии. target. В systemd - набор файлов модулей, которыми можно управлять вместе. target context Контекст SELinux, установленный для целевого объекта, такого как порт, файл или каталог. Terminal Изначально это экран, на котором пользователь вводил команды. В современных системах Linux вместо них можно использовать псевдотерминалы. Псевдотерминал предлагает окно оболочки, из которого пользователи вводят команды, которые необходимо выполнен. thin allocation. В хранилище - подход, который позволяет системе предоставлять пользователю хранилища больше, чем реально доступно за счет использования интеллектуальных технологий для хранения данных, таких как дедупликация. Thread Поток может использоваться как подразделение процесса. Многие процессы являются однопоточными, что означает, что процесс - это, по сути, один объект, который необходимо обслуживать. В многоядерной или многопроцессорной компьютерной системе имеет смысл работать с многопоточными процессами. Таким образом, различные ядра могут использоваться для обработки разных потоков, что позволяет процессу использовать многоядерные или многопоточные среды.

508

time stamp. Идентификатор, который можно использовать в файлах, записях базы данных и других типах данных, чтобы определить, когда было применено последнее изменение. Многие службы используют временные метки. Чтобы обеспечить правильную работу систем с отметками времени, необходимо настроить синхронизацию времени. time synchronization Система, которая гарантирует, что несколько серверов используют одно и то же время. Для выполнения синхронизации времени обычно используют внешний сервер времени, как определено в сетевом протоколе времени (NTP). Timer Тип модуля systemd, который можно использовать в качестве альтернативы заданиям cron и запускать модули в определенное время. TLS См. Безопасность транспортного уровня. Transport Layer Security (TLS) Безопасность транспортного уровня. Криптографический протокол, созданный для обеспечения защищенного обмена данными по компьютерной сети. В TLS используются открытый и закрытый ключи, а сертификаты аутентифицируют контрагента. TLS ранее назывался SSL. TTY Программа, предоставляющая виртуальный терминал в Linux. Каждый терминал попрежнему имеет имя TTY, которое является либо tty1-6 для виртуальных TTY, либо /dev/pts/0-nn для псевдотерминалов. tuned Служба на RHEL, которая позволяет администраторам легко применять настройки производительности с помощью профилей.

U udev Служба, которая работает с ядром Linux для инициализации оборудования. UEFI См. Унифицированный расширяемый интерфейс микропрограмм. umask Восьмеричное значение, определяющее разрешения по умолчанию как свойство оболочки. umount Команда, которая используется для отделения файловой системы от каталога, в котором она смонтирована. Unified Extensible Firmware Interface (UEFI) Замена базовой системы ввода-вывода, используемой на старых IBM-совместимых компьютерах в качестве первой программы, запускаемой при запуске компьютера. UEFI - это слой между операционной системой и микропрограммой компьютера.

509

unit В systemd это элемент, которым управляет systemd. Существуют различные типы юнитов, включая служебные, пути, средства передвижения и целевые юниты. universally unique ID (UUID) Универсальный уникальный идентификатор. Идентификационный номер, состоящий из длинного случайного шестнадцатеричного числа и являющийся глобально уникальным. unprivileged user непривилегированный пользователь. Обычная учетная запись пользователя без полномочий root, к которой применяются ограничения доступа в соответствии с разрешениями. user. Сущность, которая используется в Linux для предоставления доступа к определенным системным ресурсам. Пользователи могут использоваться для представления людей, но многие службы также имеют выделенную учетную запись пользователя, которая позволяет службе работать с конкретными разрешениями, необходимыми для этой службы. user space Область памяти, доступная для прикладного программного обеспечения, запущенного с привилегиями не root. UTC См. Всемирное координированное время. UUID См. Универсальный уникальный идентификатор.

V Value Данные, присвоенные определенному свойству, переменной или записи. Variable Метка, содержащая определенное значение, которое может быть изменено динамически. В сценариях часто используются переменные, чтобы сценарий был гибким. VDO См. Оптимизатор виртуальных данных. VFAT Драйвер ядра Linux, который используется для доступа к файловым системам на основе FAT. FAT - это широко используемая файловая система в среде Windows. Драйвер Linux VFAT позволяет использовать эту файловую систему. VG См. Группу томов. Virtual Data Optimizer (VDO) Оптимизатор виртуальных данных. Новое расширенное решение для хранения данных в RHEL 8, которое сжимает данные с помощью дедупликации и поэтому может использоваться для тонкого распределения томов хранения. virtual host. В веб-сервере Apache - набор параметров конфигурации, используемых для адресации веб-сервера. Что делает его виртуальным хостом, так это то, что одна установка веб-сервера 510

Apache может быть настроена с несколькими виртуальными хостами, что позволяет администраторам запускать несколько веб-сайтов на одном сервере Apache. virtual memory виртуальная память Общий объем адресуемой памяти. Виртуальная память называется виртуальной памятью, потому что она не относится к реально существующей памяти. Его единственная цель - убедиться, что программы Linux могут устанавливать адресный указатель, который является уникальным и не используется другими программами. volume group группа томов. Уровень абстракции, который в Диспетчере логических томов используется для представления всего доступного хранилища, представленного физическими томами, из которых могут быть созданы логические тома.

W want Указание для файла модуля systemd, что он должен запускаться с определенной цели systemd. wildcard подстановочный знак. Символ *, который в среде оболочки относится к неограниченному количеству любых символов. X XFS Высокопроизводительная 64-битная файловая система, созданная SGI в 1993 году и используемая в RHEL 8 как файловая система по умолчанию. Y Yellowdog Update, Modified Полное имя YUM, обработчика метапакетов, который в RHEL 8 используется для установки пакетов из репозиториев yum. Yum See Yellowdog Update, Modified.

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

511

Практический экзамен RHCSA С Общие замечания Вот несколько советов, которые помогут вам начать экзамен в чистой обстановке: ▪ ▪ ▪ ▪ ▪

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

1. Установите виртуальную машину RHEL 8 или CentOS 8, отвечающую следующим требованиям: ▪ ▪ ▪ ▪

2 ГБ оперативной памяти 20 ГБ дискового пространства с разбиением на разделы по умолчанию Один дополнительный диск емкостью 20 ГБ без установленных разделов. Сервер с графическим интерфейсом установки.

2. Создайте пользователя student с паролем password и пользователя root с паролем password. 3. Сконфигурируйте вашу систему для автоматического монтирования ISO установочного диска в каталог /repo. Сконфигурируйте свою систему, чтобы удалить смонтированый ISOв качестве единственного репозитория, который используется для установки. Не регистрируйте свою систему в диспетчере подписок (subscription-manager) и удалите все ссылки на внешние репозитории, которые могут уже существовать. 4. Перезагрузите сервер. Предположим, что вы не знаете пароль root, и используйте соответствующий режим для входа в оболочку root, которая не требует пароля. Установите пароль root на mypassword. 5. Установите значения по умолчанию для новых пользователей. Убедитесь, что любой новый пароль пользователя имеет длину не менее шести символов и должен использоваться не менее трех дней, прежде чем его можно будет сбросить. 6. Создайте пользователей edwin и santos и сделайте их участниками группы sales в качестве дополнительного членства в группе. Кроме того, создайте пользователей serene и alex и сделайте их членами группы account в качестве дополнительной группы. 7. Создайте общие каталоги групп /groups/sales и /groups/account и убедитесь, что группы соответствуют следующим требованиям: ▪ ▪ ▪

Члены группы sales имеют полный доступ к своему каталогу. Члены группы account имеют полный доступ к своему каталогу. Пользователи могут удалять только свои собственные файлы, но alex является генеральным менеджером, поэтому пользователь alex имеет доступ для удаления всех файлов пользователей.

512

8. Создайте группу томов (volume group) размером 4 ГиБ, используя физический экстент размером 2 МиБ. В этой группе томов создайте логический том размером 1 ГиБ с именем myfiles и постоянно подключите его в /myfiles. 9. Создайте группу sysadmins. Сделайте пользователей edwin и santos членами этой группы и убедитесь, что все члены этой группы могут выполнять все административные команды с помощью sudo. 10. Оптимизируйте свой сервер с помощью соответствующего профиля, который оптимизирует пропускную способность. 11. Добавьте к вашей виртуальной машине новый диск размером 10 ГиБ. На этом диске создайте том VDO размером 50 ГиБ и постоянно подключите его. 12. Настройте сервер на синхронизацию времени с serverabc.example.com, где serverabc - это псевдоним myserver.example.com. Обратите внимание, что этот сервер не обязательно должен существовать для выполнения этого упражнения. 13. Настройте веб-сервер на использование нестандартного корневого каталога документов / веб-файлов. В этом каталоге создайте файл index.html с содержимым hello world, а затем проверьте, что он работает.

513

Практический экзамен RHCSA D Общие замечания Вот несколько советов, которые помогут вам начать экзамен в чистой обстановке: ▪ ▪ ▪ ▪ ▪

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

14. Установите виртуальную машину RHEL 8 или CentOS 8, отвечающую следующим требованиям: ▪ ▪ ▪ ▪

2 ГБ оперативной памяти 20 ГБ дискового пространства с разбиением на разделы по умолчанию Один дополнительный диск емкостью 20 ГБ без установленных разделов. Сервер с графическим интерфейсом установки.

15. Создайте пользователя student с паролем password и пользователя root с паролем password. 16. Сконфигурируйте вашу систему для автоматического монтирования ISO установочного диска в каталог /repo. Сконфигурируйте свою систему, чтобы удалить смонтированый ISOв качестве единственного репозитория, который используется для установки. Не регистрируйте свою систему в диспетчере подписок (subscription-manager) и удалите все ссылки на внешние репозитории, которые могут уже существовать. 17. Создайте на втором жестком диске раздел размером 500 МБ и отформатируйте его в файловой системе Ext4. Смонтируйте его постоянно в каталоге /mydata, используя метку mydata. 18. Установите значения по умолчанию для новых пользователей. Пользователь должен получить предупреждение за три дня до истечения срока действия текущего пароля. Кроме того, новые пароли должны иметь максимальный срок действия 120 дней. 19. Создайте пользователей edwin и santos и сделайте их членами группы livingopensource в качестве дополнительного членства в группе. Кроме того, создайте пользователей serene и alex и сделайте их участниками группы operations в качестве вторичной группы. 20. Создайте общие каталоги групп /groups/livingopensource и /groups/operations и убедитесь, что группы соответствуют следующим требованиям: ▪ ▪ ▪ ▪

Члены группы livingopensource имеют полный доступ к своему каталогу. Члены группы operations имеют полный доступ к своему каталогу. Другие пользователи не имеют доступа ни к одному из каталогов. Алекс является генеральным менеджером, поэтому пользователь alex имеет доступ для чтения ко всем файлам в обоих каталогах и разрешения на удаление всех файлов, созданных в обоих каталогах. 514

21. Создайте раздел подкачки размером 1 ГиБ и постоянно подключите его. 22. Найдите все файлы, для которых установлено разрешение SUID, и запишите результат в файл /root/suidfiles. 23. Создайте группу томов LVM размером 1 ГиБ. В этой группе томов создайте том подкачки размером 512 МБ и постоянно подключите его. 24. Добавьте диск емкостью 10 ГиБ к вашей виртуальной машине. На этом диске создайте пул и том Stratis. Используйте для тома имя stratisvol и постоянно монтируйте его в каталоге /stratis. 25. Установите веб-сервер и настройте его на прослушивание порта 8080. 26. Создайте конфигурацию, которая позволяет пользователю edwin запускать все административные команды с помощью sudo.

515

ПРИЛОЖЕНИЕ B Таблицы памяти

Глава 2 Таблица 2-2 Обзор стандартных входов, выходов и ошибок Номер Место назначения по Использование при дескриптора умолчанию перенаправлении файла Компьютерная )

1

2>

2

Таблица 2-3 Общие редиректоры Bash

Перенаправитель

Объяснение

(то же, что и 1>)

Перенаправляет STDOUT. Если перенаправление выполняется в файл, текущее содержимое этого файла перезаписывается.

(то же, что и 1 >>)

Перенаправляет STDOUT. Если вывод записывается в файл, вывод добавляется к этому файлу. Перенаправляет STDERR. Перенаправляет STDERR в то же место назначения, что и STDOUT. Обратите внимание, что это должно использоваться в сочетании с обычным перенаправлением вывода, как в ls whuhiu> errout 2> & 1.

(то же, что и 0

2

Таблица 2-3 Общие редиректоры Bash

Перенаправитель

Объяснение

(то же, что и 1>)

Перенаправляет STDOUT. Если перенаправление выполняется в файл, текущее содержимое этого файла перезаписывается.

(то же, что и 1 >>)

Перенаправляет STDOUT. Если вывод записывается в файл, вывод добавляется к этому файлу.

2>

Перенаправляет STDERR.

2>&1

Перенаправляет STDERR в то же место назначения, что и STDOUT. Обратите внимание, что это должно использоваться в сочетании с обычным перенаправлением вывода, как в ls whuhiu> errout 2> & 1.

(то же, что и 0