Linux в действии - Дэвид Клинтон - E-Book

Linux в действии E-Book

Дэвид Клинтон

0,0

Beschreibung

Без практики ничему нельзя научиться, и Linux не исключение. Книга «Linux в действии» поможет приобрести навыки защиты файлов, папок и серверов, безопасной установки патчей и приложений, а также управления сетью. В книге описываются 12 реальных проектов, в том числе автоматизация системы резервного копирования и восстановления, настройка личного файлового облака в стиле Dropbox и создание собственного сервера MediaWiki. На интересных примерах вы изучите виртуализацию, аварийное восстановление, обеспечение безопасности, резервное копирование, внедрение DevOps и устранение неполадок системы. Каждая глава заканчивается обзором практических рекомендаций, глоссарием новых терминов и упражнениями.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 484

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Переводчики С. Черников, С. Черников

Дэвид Клинтон

Linux в действии. — СПб.: Питер, 2024.

ISBN 978-5-4461-1199-2

© ООО Издательство "Питер", 2024

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Оглавление

Предисловие
Благодарности
Об этой книге
Кому следует прочитать эту книгу
Структура издания: дорожная карта
О коде
Дистрибутивы Linux
Форум книги
Другие интернет-ресурсы
От издательства
Об авторе
Об иллюстрации на обложке
Глава 1. Добро пожаловать в Linux
1.1. Что отличает Linux от других операционных систем
1.2. Основные сведения
1.3. Получение справки
Резюме
Глава 2. Виртуализация Linux: создание безопасной и простой рабочей среды
2.1. Что такое виртуализация
2.2. Работа с VirtualBox
2.3. Работа с контейнерами Linux (LXC)
Резюме
Глава 3. Удаленное подключение: безопасный доступ к машинам по сети
3.1. Важность шифрования
3.2. Начало работы с OpenSSH
3.3. Вход на удаленный сервер по SSH
3.4. Беспарольный доступ по SSH
3.5. Безопасное копирование файлов с помощью SCP
3.6. Использование удаленных графических программ через соединения SSH
3.7. Управление процессами в Linux
Резюме
Глава 4. Управление архивами: создание резервных копий или копирование целых файловых систем
4.1. Зачем архивировать
4.2. Что архивировать
4.3. Где создавать резервную копию
4.4. Архивирование файлов и файловых систем с помощью инструмента tar
4.5. Архивирование разделов с помощью инструмента dd
4.6. Синхронизация архивов с помощью инструмента rsync
4.7. Вопросы планирования
Резюме
Глава 5. Автоматизированное администрирование: настройка автоматического резервного копирования
5.1. Сценарии с Bash
5.2. Резервное копирование данных в системе AWS S3
5.3. Планирование регулярного резервного копирования с помощью инструмента cron
5.4. Планирование нерегулярного резервного копирования с помощью инструмента anacron
5.5. Планирование регулярного резервного копирования с помощью таймеров systemd
Резюме
Глава 6. Инструменты для критических ситуаций: создание устройства для восстановления системы
6.1. Работа в режиме восстановления
6.2. Создание загрузочного диска восстановления
6.3. Запуск загрузочного диска для работы
6.4. Восстановление пароля: монтирование файловой системы с помощью инструмента chroot
Резюме
Глава 7. Веб-серверы: создание сервера MediaWiki
7.1. Создание сервера LAMP
7.2. Настройка веб-сервера Apache вручную
7.3. Установка базы данных SQL
7.4. Установка PHP
7.5. Установка и настройка MediaWiki
7.6. Установка веб-сервера Apache на CentOS
Резюме
Глава 8. Совместное использование файлов в сети: создание сервера для совместного использования файлов Nextcloud
8.1. Корпоративный файлообменник и Nextcloud
8.2. Установка Nextcloud с помощью моментальных снимков
8.3. Установка Nextcloud вручную
8.4. Администрирование Nextcloud
8.5. Использование AWS S3 в качестве основного хранилища Nextcloud
Резюме
Глава 9. Защита вашего веб-сервера
9.1. Очевидные вещи
9.2. Контролирование доступа к сети
9.3. Шифрование данных при передаче
9.4. Усиление процесса аутентификации
9.5. Аудит системных ресурсов
Резюме
Глава 10. Защита сетевых соединений: создание VPN или DMZ
10.1. Создание туннеля OpenVPN
10.2. Построение сетей, защищенных от вторжений
10.3. Построение виртуальной сети для тестирования инфраструктуры
Резюме
Глава 11. Мониторинг системы: работа с файлами журналов
11.1. Работа с системными журналами
11.2. Управление файлами журналов
11.3. Обработка больших файлов
11.4. Мониторинг с обнаружением вторжений
Резюме
Глава 12. Совместное использование данных в частной сети
12.1. Обмен файлами с помощью протокола сетевого доступа к файловым системам (NFS)
12.2. Обмен файлами с пользователями Windows с помощью Samba
12.3. Совместное использование файлов с помощью символических ссылок
Резюме
Глава 13. Устранение проблем производительности системы
13.1. Проблемы с загрузкой процессора
13.2. Проблемы с памятью
13.3. Проблемы доступности запоминающего устройства
13.4. Проблемы с перегрузкой сети
13.5. Инструменты мониторинга
Резюме
Глава 14. Устранение неполадок в сети
14.1. Понимание адресации TCP/IP
14.2. Установление сетевого подключения
14.3. Устранение неполадок исходящего соединения
14.4. Устранение неполадок при входящем соединении
Резюме
Глава 15. Устранение неполадок с периферийными устройствами
15.1. Идентификация подключенных устройств
15.2. Управление периферийными устройствами с помощью модулей ядра Linux
15.3. Ручное управление параметрами ядра во время загрузки
15.4. Управление принтерами
Резюме
Глава 16. Инструменты DevOps: развертывание серверной среды с использованием Ansible
16.1. Чем полезна оркестровка развертывания
16.2. Ansible: установка и настройка
16.3. Аутентификация
16.4. Сценарии Ansible playbook
Резюме
Заключение
Что вы узнали
Виртуализация
Связь
Шифрование
Сетевое взаимодействие
Управление образами
Системный мониторинг
Что дальше
Ресурсы
Приложение. Обзор команд по главам
Глава 1. Добро пожаловать в Linux
Глава 2. Виртуализация Linux: создание безопасной и простой рабочей среды
Глава 3. Удаленное подключение: безопасный доступ к машинам по сети
Глава 4. Управление архивами: создание резервных копий или копирование целых файловых систем
Глава 5. Автоматизированное администрирование: настройка автоматического резервного копирования
Глава 6. Инструменты для критических ситуаций: создание устройства для восстановления системы
Глава 7. Веб-серверы: создание сервера MediaWiki
Глава 8. Совместное использование файлов в сети: создание сервера для совместного использования файлов Nextcloud
Глава 9. Защита вашего веб-сервера
Глава 10. Защита сетевых соединений: создание VPN или DMZ
Глава 11. Мониторинг системы: работа с файлами журналов
Глава 12. Совместное использование данных в частной сети
Глава 13. Устранение проблем производительности системы
Глава 14. Устранение неполадок в сети
Глава 15. Устранение неполадок с периферийными устройствами
Глава 16. Инструменты DevOps: развертывание серверной среды с использованием Ansible

Предисловие

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

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

Но почему Linux? Потому что на базе Linux функционирует большая часть Интернета, научных организаций и коммерческих предприятий — фактически большинство серверов в мире. Эти серверы нужно готовить, запускать в работу, необходимо обеспечивать их безопасность. Ими должны эффективно управлять умные и хорошо обученные люди. Убежден, что с умом у вас все в порядке, и думаю, что смогу помочь с качественным обучением.

Не уверены, что достаточно знаете о Linux, чтобы начать такой амбициозный проект? Глава 1 быстро заполнит пробелы в знаниях. Прочитав ее, пристегните ремень безопасности и приготовьтесь к серьезному обучению.

Благодарности

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

Фрэнсис Лефковиц, редактор-консультант по аудитории, помогала мне более доходчиво донести материал, неуклонно удерживая меня на правильном пути. Река Хорвас и Джон Гасри кропотливо проверяли все примеры для книги и давали ценные советы. Фрэнсис Буран, литературный редактор, кажется, никогда не бывает полностью довольна текстом, по крайней мере моим. Но грамотность каждого предложения и изящество текста книги в его нынешнем виде явно указывают на качество ее работы.

В роли руководителя проекта Дейрдре Хиам эффективно провела нас до последнего шага, успешно синхронизируя все шестеренки механизма. Каждый из научных редакторов книги оставил важный след — все их ценные наблюдения были тщательно записаны, проанализированы и по возможности учтены. Поэтому большое спасибо Анджело Косто, Кристоферу Филлипсу, Дарио Виктору Дюрану, Флайолу Фредерику, Фостеру Хейнсу, Джорджу Л. Гейнсу, Густаво Патино, Хавьеру Колладо, Йенсу Кристиану Мэдсену, Джонасу Медина де лос Рейесу, Мацею Юрковски, Майеру Патилу, Мохсену Мостафе Джокару и Тиму Кейну.

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

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

Об этой книге

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

Хорошей новостью является то, что основной набор команд Linux применим практически везде, где пересекаются компьютеры и бизнес. Лучшая новость заключается в том, что навыки работы в Linux всегда будут востребованы. Поскольку это зрелая и стабильная операционная система, большинство инструментов, использова­вшихся четверть века назад, по-прежнему эффективны, а большинство инструментов, применяемых сегодня, вероятно, и через четверть века все еще будут востребованы. Другими словами, изучение Linux — это инвестиция на всю жизнь.

Да, вы наверняка заняты и у вас дедлайны. Я не могу обещать вам, что освоить Linux будет так же просто, как научиться завязывать шнурки. Но я могу помочь вам сфокусироваться на главном.

Как я собираюсь сделать это? Я не буду ориентироваться на какие-либо методики обучения. В то время как другие книги, курсы и онлайн-ресурсы организуют свой контент по темам («Хорошо, мальчики и девочки, все достают свои тетрадки и ручки. Сегодня мы поговорим о файловых системах Linux»), я собираюсь использовать для обучения реальные проекты.

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

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

Вы в деле? Я так и думал.

Кому следует прочитать эту книгу

Книга призвана помочь вам приобрести множество навыков администрирования Linux. Возможно, вы разработчик, который хочет более тесно работать с серверной средой, где будут «жить» ваши приложения. Или, может быть, вы хотите попасть в мир администрирования серверов или DevOps. В любом случае эта книга для вас.

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

Структура издания: дорожная карта

Несколько слов о том, как структурирована книга. Каждая глава охватывает один или два практических проекта (за исключением главы 1). Поскольку глава 1 предназначена для заполнения пробелов в ваших базовых знаниях о Linux, она будет отличаться от остальных. Вам не нужны основы? Я абсолютно уверен, что вы почерпнете много интересных новых идей, чтобы использовать их в главе 2.

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

Глава

Область знаний

Инструменты

1. Добро пожаловать в Linux

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

Bash, man

2. Виртуализация Linux: создание безопасной и простой рабочей среды

Виртуализация, файловые системы

VirtualBox, LXC, apt, yum/dnf

3. Удаленное подключение: безопасный доступ к машинам по сети

Безопасность, удаленные подключения

ssh, scp, systemctl, ps, grep

4. Управление архивами: создание резервных копий или копирование целых файловых систем

Разделы и файловые системы, текстовые потоки

tar, dd, redirects, rsync, locate, split, chmod, chown

5. Автоматизированное администрирование: настройка автоматического резервного копирования

Сценарии, управление системными процессами, безопасность

Сценарии, cron, anacron, таймеры systemd

6. Инструменты для критических ситуаций: создание устройства для восстановления системы

Разделы и файловые системы, управление устройствами

parted, GRUB, mount, chroot

7. Веб-серверы: создание сервера MediaWiki

Базы данных, сетевое взаимодействие, управление пакетами

PHP, MySQL (MariaDB), веб-сервер Apache, зависимости пакетов

8. Совместное использование файлов в сети: создание сервера для совместного использования файлов Nextcloud

Управление пакетами, сетевое взаимодействие, безопасность

snapd, файловые системы, шифрование

9. Защита вашего веб-сервера

Сетевое взаимодействие, безопасность, мониторинг системы

Apache, Iptables, /etc/group, SELinux, apt, yum/dnf, chmod, chown, Let’s Encrypt

10. Защита сетевых соединений: создание VPN или DMZ

Сетевое взаимодействие, безопасность

Брандмауэры, ssh, Apache, OpenVPN, sysctl, easy rsa

11. Мониторинг системы: работа с файлами журналов

Мониторинг системы, текстовые потоки, безопасность

grep, sed, journal ctl, rsyslogd, /var/log/, Tripwire

12. Совместное использование данных в частной сети

Сетевое взаимодействие, разделы, файловые системы

nfs, smb, ln, /etc/fstab

13. Устранение проблем производительности системы

Мониторинг системы, управление системными процессами, сетевое взаимодействие

top, free, nice, nmon, tc, iftop, df, kill, killall, uptime

14. Устранение неполадок в сети

Сетевое взаимодействие

ip, dhclient, dmesg, ping, nmap, traceroute, netstat, netcat(nc)

15. Устранение неполадок с периферийными устройствами

Управление устройствами

lshw, lspci, lsusb, modprobe, CUPS

16. Инструменты DevOps: развертывание серверной среды с использованием Ansible

Сценарии, виртуализация

Ansible, YAML, apt

О коде

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

В некоторых местах первоначальный исходный код переформатирован; мы добавили разрывы строк и изменили отступы так, чтобы наилучшим образом разместить код на странице. Но иногда даже этого было недостаточно, и тогда мы вставили в листинги маркеры переноса строки (➥). Кроме того, комментарии в исходном коде часто удалены из листингов, так как описание кода содержится в тексте главы. Многие листинги снабжены аннотациями к коду, в которых описываются важные понятия.

Дистрибутивы Linux

В настоящее время существуют десятки активно поддерживаемых дистрибутивов Linux. Хотя большинство основных версий Linux являются общими для всех дистрибутивов, всегда будут мелочи, которые будут работать «здесь», но не «там». Из соображений практичности я сосредоточусь в основном на двух дистрибутивах: Ubuntu и CentOS. Почему именно эти два? Потому что каждый представляет целое семейство дистрибутивов. Ubuntu является основой для Debian, Mint, Kali Linux и др., а CentOS совместим с Red Hat Enterprise Linux (RHEL) и Fedora.

Это не значит, что я сбрасываю со счетов другие дистрибутивы, такие как Arch Linux, SUSE и Gentoo. И это также не значит, что изученное в данной книге не поможет вам работать с указанными системами. Но полностью охватить семейства Ubuntu и CentOS означает получить самое полное представление о Linux, которое только возможно при использовании двух дистрибутивов.

Форум книги

Покупка книги «Linux в действии» включает бесплатный доступ к частному веб-форуму, организованному издательством Manning Publications, где можно оставлять комментарии о книге, задавать технические вопросы, а также получать помощь от автора и других пользователей. Чтобы получить доступ к форуму, перейдите на https://forums.manning.com/forums/linux-in-action. Узнать больше о других форумах на сайте издательства Manning и познакомиться с правилами вы сможете на странице https://forums.manning.com/forums/about.

Издательство Manning обязуется предоставить своим читателям место встречи, на которой может состояться содержательный диалог между отдельными читателями и между читателями и автором. Однако со стороны автора отсутствуют какие-либо обязательства уделять форуму внимание в каком-то определенном объеме — его присутствие на форуме остается добровольным (и неоплачиваемым). Мы предлагаем задавать автору неожиданные вопросы, чтобы его интерес не угасал! Форум и архивы предыдущих обсуждений будут доступны на сайте издательства, пока книга находится в печати.

Другие интернет-ресурсы

Зашли в тупик? Поиск в Интернете — ваш лучший друг. В Сети вы найдете множество существующих руководств по Linux и с вами поделятся опытом устранения неполадок. Но вы не должны забывать о сайтах типа StackExchange и, в частности, о ресурсе serverfault.com. Если что-то не ладится с какой-либо конфигурацией системы или не работает сетевое подключение, то высока вероятность того, что кто-то другой уже столкнулся с той же проблемой, спросил об этом на сайте ServerFault и получил ответ. Ответа нет? Тогда сами задайте свой вопрос. Ресурсы LinuxQuestions.org и ubuntuforums.org также могут быть полезны.

А те, кто любит видеообучение, найдут хороший выбор курсов по Linux на сайте Pluralsight.com, в том числе более десятка моих собственных курсов.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Об авторе

 

Дэвид Клинтон — системный администратор, преподаватель и писатель. Он администрировал, писал об этом и создавал учебные материалы для многих важных технических дисциплин, включая системы Linux, облачные вычисления (в частности AWS) и контейнерные технологии, такие как Docker. Он написал книгу Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Многие из его учебных видеокурсов можно найти на сайте Pluralsight.com, а ссылки на другие его книги (по администрированию Linux и виртуализации серверов) доступны по адресу bootstrap-it.com.

Об иллюстрации на обложке

Рисунок на обложке «Linux в действии» подписан как «Внешний вид уроженца Армении в Персии в 1700 году». Эта иллюстрация взята из четырехтомника Томаса Джеффериса A Collection of the Dresses of Different Nations, Ancient and Modern («Коллекция платья разных народов, старинного и современного»), изданного в Лондоне в 1757–1772 годах. На титульном листе утверждается, что это гравюра ручной раскраски с применением гуммиарабика. Томаса Джеффериса (1719–1771) называли географом при короле Георге III. Это английский картограф и ведущий поставщик карт своего времени. Он чертил и печатал карты для правительства и других государственных органов. Занимаясь картографией в разных уголках мира, он проявлял интерес к местным традиционным нарядам, которые впоследствии были блестяще переданы в данной коллекции.

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

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

Глава 1. Добро пожаловать в Linux

В этой главе

• Отличия Linux от других систем.

• Основные сведения.

• Получение справки.

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

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

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

Примечание

Далее вы увидите, что командная строка — это интерфейс, предоставляемый операционной системой (ОС). Он позволяет вводить текстовые команды для управления ОС или запрашивать данные, которыми она управляет.

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

1.1. Что отличает Linux от других операционных систем

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

Linux позволяет реализовывать различные действительно полезные и креативные идеи. Например, вы можете развернуть живой образ Linux на USB-накопитель, запустить с него ПК, внутренний жесткий диск которого поврежден, а затем устранить неполадки и решить основную проблему. (Как это сделать, вы узнаете в главе 6.) Поскольку Linux — настоящая многопользовательская ОС, целые команды пользователей могут одновременно авторизовываться в системе для локальной или удаленной работы, будучи уверенными в конфиденциальности и стабильности системы.

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

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

Таблица 1.1. Некоторые дистрибутивы Linux

Предназначение

Дистрибутив

Безопасность и проверка на проникновение

Kali Linux

Parrot

Частные пользователи

Mint

Elementary OS

Легковесные (старое оборудование, диагностика)

Puppy Linux

LXLE

Администрирование устройств Интернета вещей

Snappy Ubuntu Core

Корпоративная серверная система

CentOS (поддерживаемая сообществом открытая версия RHEL)

OpenSUSE (поддерживаемая сообществом версия SUSE)

Облачные вычисления

Amazon Linux (AWS AMI)

Ubuntu Server (AWS AMI)

Универсальное (исключая легковесные)

Ubuntu

Не можете найти дистрибутив, который вам идеально подходит? Создайте свой. Нужна помощь? В Интернете есть большое и активное сообщество: если кто-то еще не решил вашу проблему, то он обязательно будет знать, с чего начать, чтобы ее решить. Я бы сказал, что именно интернет-ресурсы сообщества линуксоидов делают Linux настолько мощным.

1.2. Основные сведения

Прежде чем приступить к реализации коммерческих проектов, которые составляют основную часть книги, нужно убедиться, что мы имеем единую отправную точку. В этой главе рассматриваются основы Linux: стандарт иерархии файловой системы UNIX (включая псевдофайловые системы), навигация (ls, pwd и cd), инструменты управления файлами (cat, less, touch, mkdir, rmdir, rm, cp и mv), некоторые хитрости (например, автозавершение ввода и универсализация файлов), sudo и места, куда обращаться за помощью (man, info и journalctl).

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

Установка Linux

Я не собираюсь тратить время на рассказ о том, как установить Linux на свой ПК. И это не потому, что установка смехотворно проста: иногда она может быть довольно сложной. А скорее потому, что выбранный вами подход зависит от ваших конкретных обстоятельств. Описание одной или даже десятка возможностей ничего не даст, кроме того, что будет раздражать 75 % тех, для кого эти сценарии не сработают.

Нужна помощь с установкой? Прочтите книгу наподобие Learn Linux in a Month of Lunches (Manning, 2016). Возникла конкретная проблема при установке? Потратьте минуту, чтобы набросать краткое, но подробное описание, а затем используйте его для поиска помощи в Интернете. Ищете ноутбук или персональный компьютер с предустановленной ОС Linux? Поищите в Интернете «компьютер с предустановленной Linux». У вас есть неиспользуемый компьютер и USB-накопитель? Ищите «установить Linux с флешки». Предпочитаете установить Linux на виртуальную машину? Мудрый шаг. Не пропустите главу 2.

1.2.1. Файловая система Linux

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

Зачем нам нужен индекс? Цифровое запоминающее устройство, такое как жесткий диск или USB-устройство, физически не делится на части, которые можно использовать в качестве упорядочивающих папок (или каталогов, как их называют в Linux). Один конкретный файл может располагаться на реальном носителе в месте, которое находится на большом расстоянии от другого, почти идентичного файла, созданного с интервалом несколько минут или секунд, при этом все части одного файла могут быть несмежными. Мало того, географическое местоположение файла на диске не обязательно будет оставаться неизменным на протяжении всего времени.

Если вы хотите, чтобы ваши данные хорошо извлекались, вам понадобится какой-то индекс, который может последовательно указывать вам на искомые ресурсы. Файловая система использует такой индекс, чтобы обеспечить организованный набор каталогов и файлов в пределах одного сектора диска, известного как раздел.

 

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

Примечание

Обратите внимание, что на сегодняшний день наиболее часто используемой файловой системой Linux является ext4. Но Linux также может работать с накопителями, отформатированными с применением других файловых систем, таких как FAT32 и NTFS.

Все файлы в разделе диска хранятся в каталогах ниже корневого каталога, который представлен символом / (прямой слеш). Способ расположения этих каталогов в значительной степени определяется стандартом иерархии файловой системы UNIX (FHS). Независимо от того, используете вы дистрибутив Linux, UNIX или даже macOS, вы увидите почти одинаковую базовую разметку. На рис. 1.2 показаны некоторые из наиболее часто используемых каталогов верхнего уровня.

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

 

Рис. 1.2. Общие каталоги верхнего уровня, определенные в UNIX FHS

1.2.2. Начало работы: инструменты навигации в Linux

Здесь вы изучите пять основных и обязательных команд навигации в Linux (ls, pwd, cd, cat и less). Оболочка командной строки не является визуальной средой, поэтому, независимо от того, что вы попытаетесь сделать, для навигации вы будете использовать эти пять инструментов.

Примечание

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

Далее в книге для выполнения примеров мы будем задействовать оболочку командной строки того или иного рода. К сожалению, нет единого способа открыть окно оболочки командной строки, которое будет работать во всех дистрибутивах Linux. Например, местоположение оболочки командной строки в системе меню Ubuntu не обязательно будет совпадать с расположением в Fedora или Mint. А в самом Ubuntu это еще зависит от того, какую версию вы используете.

Сочетание клавиш Ctrl+Alt+T должно работать по крайней мере в большинстве систем, так же как и при просмотре меню приложения, в котором выполняется поиск элемента с именем terminal. По умолчанию, как только ваша оболочка командной строки откроется, вы очутитесь в домашнем каталоге (/home/ваше_имя/).

ls (вывод содержимого каталога)

Нет смысла работать в оболочке командной строки, если вы не видите, что там находится. Вы можете вывести список имен файлов и подкаталогов в текущем каталоге, используя команду ls. Она выводит не только список имен объектов, но и их права доступа к файлам, имя владельца, группу, размер файла и метку времени. При добавлении имени каталога, например /var/, отображается содержимое этого каталога:

$ ls -l /var

total 40

drwxr-xr-x  2 root root   4096 May  3 06:25 backups

drwxr-xr-x 11 root root   4096 Jan 17 21:16 cache

drwxr-xr-x 39 root root   4096 Jan 17 21:16 lib

drwxrwsr-x  2 root staff  4096 Apr 12  2016 local

lrwxrwxrwx  1 root root      9 Aug 12  2016 lock -> /run/lock

drwxrwxr-x  7 root syslog 4096 May  3 06:25 log

drwxrwsr-x  2 root mail   4096 Aug 12  2016 mail

drwxr-xr-x  2 root root   4096 Aug 12  2016 opt

lrwxrwxrwx  1 root root      4 Aug 12  2016 run -> /run

drwxr-xr-x  5 root root   4096 Jan 17 21:16 spool

drwxrwxrwt  2 root root   4096 Nov  7  2016 tmp

drwxr-xr-x  3 root root   4096 Sep 11  2016 www

Если добавить к команде ls аргумент h, будут отображены размеры файлов в удобочитаемом формате, а не так, как предусмотрено по умолчанию (включает в себя множество трудноподсчитываемых цифр). То есть будут выводиться не байты, а килобайты, мегабайты и гигабайты:

 

Примечание

Как правило, вы добавляете аргументы в команды Linux одним из двух способов: вводите дефис, за которым следует одна буква (например, h, которая модифицирует вывод команды ls), или два дефиса, а затем указываете развернутую версию аргумента. В этом примере ls --human-readable генерирует точно такие же выходные данные, что и ls -h. Почти все команды Linux комплектуются полной документацией, которую мы рассмотрим позже в этой главе.

Хотите знать, что находится внутри текущего каталога? Добавление прописной буквы R в качестве аргумента команды ls приводит к отображению подкаталогов с файлами и вложенными подкаталогами, независимо от глубины вложения. Чтобы понять, как можно использовать этот аргумент, и увидеть результат работы, выполните команду ls-R для вывода содержимого папки /etc/:

$ ls -R /etc

pwd (текущий рабочий каталог)

Чаще всего ваше текущее местоположение в файловой системе будет отображаться слева от командной строки. В этом примере я нахожусь в сетевом каталоге, который находится чуть глубже /etc/:

ubuntu@base:/etc/network$

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

$ pwd

/etc/network

cd (смена каталога)

Получив представление о том, где вы находитесь и что доступно в текущем каталоге, вы должны узнать, как сменить свое местоположение. Если вы введете команду cd, оболочка командной строки (обычно это Bash) переместит вас в указанный каталог. Когда вы впервые открываете сеанс командной строки (часто называемый оболочкой), по умолчанию вы попадаете в домашний каталог своей учетной записи. Если вы выполните команду pwd, то, вероятно, увидите нечто подобное:

$ pwd

/home/ваше_имя

Что такое Bash

Bash, вероятно, самая популярная оболочка UNIX. Отлично! Но что такое оболочка? Оболочка командной строки — это любой пользовательский интерфейс, который интерпретирует команды пользователя либо через интерфейс командной строки (CLI),

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

 

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

Теперь вернемся в корневой каталог, введя cd и слеш:

cd /

Запустите команду ls еще раз, чтобы просмотреть содержимое каталога. (Вы увидите каталоги, показанные на рис. 1.2.) Обратите внимание на домашний каталог, из которого вы можете получить доступ к каталогу ваше_имя. Чтобы перейти в любой из перечисленных там подкаталогов, введите cd, а затем имя каталога, который хотите посетить. Поскольку путь, который вы здесь указываете, относится к вашему текущему местоположению, не нужно вводить имя каталога перед слешем. Команда cd.. поднимет вас на один уровень в иерархии каталогов, например из /home/ваше_имя/ в /home/.

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

$ cd/home/ваше_имя

Тем не менее ввод команды cd без каких-либо аргументов вернет вас в домашний каталог текущего вошедшего в систему пользователя.

cat (вывод содержимого файла целиком)

Доступ к содержимому текстовых файлов в оболочке командной строки немного сложнее. Команда cat выводит содержимое файла на экран, где его можно прочитать, но не отредактировать. Это приемлемо для небольших документов, таких как файл fstab в папке /etc/. В следующем примере используется абсолютный путь, чтобы файл можно было открыть независимо от того, где в файловой системе вы находитесь в данный момент.

$ cat /etc/fstab

Примечание

Название cat на самом деле является сокращением слова concatenate — «конкатенация», что обозначает операцию объединения нескольких строк или файлов в один текстовый поток.

Предположим, что файл, который вы хотите прочесть, содержит больше строк, чем помещается на экране. Попробуйте просмотреть файл /etc/group:

cat /etc/group

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

less (вывод содержимого файла по страницам)

Познакомьтесь с less! Эта команда имеет такое название, предположительно, потому, что может отображать меньше (по англ. less), чем полное содержимое файла (или, вероятно, чтобы можно было отличить ее от уже устаревшей команды more). Вы запускаете less, указав рядом имя файла:

less /etc/services

Используя less, вы можете прокручивать содержимое файла вверх и вниз с помощью клавиш со стрелками Page Up, Page Down и Пробел. Когда закончите, нажмите клавишу Q, чтобы закрыть файл.

1.2.3. Начало работы: инструменты управления файлами Linux

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

$ touch myfile

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

$ ls

myfile

$ cat myfile

«Прикосновение» (так переводится название этой команды) к существующему файлу с помощью команды touch обновляет его отметку времени без внесения каких-либо изменений в сам файл. Это может быть полезно, если по какой-то причине вы хотите изменить метаданные, которые выводят различные команды наподобие ls. Это также может быть полезно, если вы хотите, чтобы ваш начальник подумал, что вы усердно работали над файлом данных, который фактически не открывался неделями.

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

Да, я знаю, что многие люди испытывают сильные чувства к тем текстовым редакторам, в которых они привыкли работать. Вы когда-нибудь вежливо намекали пользователю программы Vim, что его почтенный редактор может быть не таким полезным и важным, как раньше? Конечно, нет. Вы бы не смогли физически прочитать эту книгу, если бы сделали что-то подобное.

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

• Если вы предпочитаете работать с документами в графическом интерфейсе, тогда вам пригодится простой текстовый редактор, такой как gedit. В нем доступны различные инструменты подсветки синтаксиса, которые делают верстку кода более продуктивной. Кроме того, вы можете быть уверены, что эта программа не сохранит ничего лишнего: только тот текст, который вы видите.

• В тех случаях, когда вам нужно отредактировать файл в оболочке командной строки, вам поможет консольный редактор, такой как nano (или Pico) с его интуитивно понятным интерфейсом.

• И наконец, есть Vim (или его первоначальная итерация vi). Ах, Vim! Если вы готовы потратить несколько месяцев своей жизни на изучение неинтуитивного интерфейса, то будете вознаграждены повышением производительности. Это так просто.

Примечание

Все свои книги, статьи и документы я писал в gedit. Почему? Мне так нравится.

Почему бы нам не потратить пару минут прямо сейчас и не внести кое-какие изменения в только что созданный документ myfile, используя каждый из трех упомянутых текстовых редакторов? Например:

$ nano myfile

$ vi myfile

Для Vim войдите в режим вставки, нажмите клавишу I, а затем наберите текст. Сохранить свою работу можно так: нажмите клавишу Esc, затем введите w, после чего выйдите, введя q.

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

Каждый объект в файловой системе Linux представлен уникальной коллекцией метаданных, называемой inode. Я полагаю, вы скажете, что это индексный дескриптор файловой системы, о котором говорилось ранее, и он построен на основе метаданных, связанных со всеми индексами на диске. Чтобы вывести на экран больше информации о файле, который вы только что создали с помощью команды touch, включая информацию об inode, можете использовать команду stat:

 

Как видите, результат включает в себя такие данные, как имя файла, атрибуты и метки времени. Но команда также сообщает вам свой идентификационный номер. Важно знать, что при перемещении, копировании или удалении файла/каталога вы на самом деле только изменяете его атрибуты inode, а не идентификатор. Кстати, inode — это объект, используемый системами UNIX для определения местоположения диска и атрибутов файлов в файловой системе (как показано на рис. 1.2). Обычно для каждого файла или каталога существует только один inode.

Предположим, сейчас вы находитесь в своем домашнем каталоге. Почему бы не создать в нем новый каталог, который вы сможете использовать для своих экспериментов? Для этого воспользуйтесь командой mkdir.

$ mkdir myplace

Теперь перейдите в новый каталог и создайте в нем файл:

$ cd myplace

$ touch newfile

$ ls

newfile

Чтобы увидеть, как выполняется удаление объектов, вернитесь обратно в родительский каталог (используя команду cd..) и удалите только что созданный каталог. Как ни странно, предопределенная команда для удаления каталогов rmdir в этом конкретном случае не будет работать. Попробуйте сами:

$ cd ..

$ rmdir myplace

rmdir: failed to remove 'myplace': Directory not empty

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

В первом случае потребуется добавить аргумент --ignore-fail-on-non-empty в команду rmdir, но придется напечатать слишком много букв. Второй подход заключается в том, чтобы вручную поработать с каждым подкаталогом и удалить каждый найденный объект. Иногда этот способ бывает намного хуже первого. В тех случаях, когда вы на 100 % уверены, что в каталоге нет абсолютно ничего, самый быстрый способ — добавить аргумент -r (что означает «рекурсивный») в команду rm:

$ rm -r myplace

Вероятно, сейчас самое время рассказать вам об одном очень важном различии между графическим интерфейсом настольных приложений и оболочкой командной строки: в командной строке нет корзины. Если вы удалите что-либо с помощью команды rm (или rmdir), а затем передумаете, то, по большому счету, у вас не будет возможности вернуть все обратно. Но вспомните о дисковом пространстве, которое вы теперь освободили!

Копирование и перемещение файлов

Следующим шагом создайте несколько файлов и новый каталог:

$ touch file1 file2 file3

$ mkdir newdir

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

$ cp file1 newdir

Кстати, команда cp достаточно «умна», чтобы распознать newdir как каталог, а не как файл. Если бы в текущем местоположении не было каталога с именем newdir, команда cp вместо этого сделала бы новую копию файла file1 с именем newdir. Если вы случайно ошибетесь при вводе команды, то в результате получите новый файл, а не искомый каталог. В любом случае проверьте введенную команду, чтобы убедиться, что все работает так, как предполагалось.

В отличие от cp, команда mv не копирует, а перемещает объект из одного места в другое. Следовательно, если вы переместите файл из вашего домашнего каталога в подкаталог newdir, то в исходном месте файл уже будет недоступен:

$ mv file2 newdir

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

Подстановка имен файлов

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

$ mv* /some/other/directory

Чтобы переместить только файлы с именами, частично совпадающими с указанной последовательностью, попробуйте выполнить следующую команду:

$ mv file* /some/other/directory

Символ * заменяет любое количество символов. Указанная команда перемещает все файлы, имена которых начинаются со слова file, а все остальные оставляет в исходном месте. Если у вас есть файлы с именем file1, file2 и т.д. до file15 и вы хотите переместить только те файлы, имена которых находятся в диапазоне file1 — file9, используйте вместо * знак вопроса (?).

$ mv file?/some/other/directory

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

Удаление файлов

Как вы уже знаете, объекты можно удалить с помощью команды rm. Но имейте в виду, что эти операции практически необратимы. Если вы хотите удалить файл file1 из каталога, выполните следующую команду:

$ rm file1

Подстановочные знаки в именах файлов можно использовать в структуре команды rm так же, как вместе с cp или mv, и с той же эффективностью. Так, например, команда:

$ rm file*

удаляет в текущем каталоге все файлы, имена которых начинаются со слова file. Добавление к команде удаления аргумента -r сделает действие рекурсивным и удалит содержимое всех подкаталогов по указанному пути:

$ rm -r*

На самом деле это очень опасное сочетание. Более того, когда вы работаете с полномочиями администратора, вам также предоставляется власть над всеми системными файлами. Хорошенько подумайте, прежде чем выполнять такие опасные команды, как rm.

1.2.4. Управление с клавиатуры

Я сомневаюсь, что есть люди, которые с большим удовольствием печатают на клавиатуре. И я подозреваю, что большинство из них были бы очень признательны, если бы им сказали, что они могут делать, скажем, на 40 % меньше нажатий клавиш. Далее я расскажу, как при работе на клавиатуре можно сэкономить довольно значительное время.

Вырезание и вставка

Прежде всего, можно копировать и вставлять текст в оболочке командной строки. Стоит сказать, что знакомые вам сочетания клавиш Ctrl+C (копировать) и Ctrl+V (вставить) не будут работать в оболочке Bash. Вместо них используйте сочетания клавиш Shift+Ctrl+C и Shift+Ctrl+V. Вы также можете вырезать и вставлять текст, щелк­нув правой кнопкой мыши и выбрав соответствующую операцию в меню. Поверьте, это может быть очень удобно. Представьте, что вы столкнулись с действительно длинной последовательностью команд из некоего онлайн-источника, которая выглядит примерно так:

$ find ./ -name \*.html -printf '%CD\t%p\n' | grep "09/10/17"

➥ | awk '{print $2}' | xargs -t -i mv {} temp/

Вы хотите набирать все это вручную? Я — нет. Здесь на помощь приходят команды вырезания и вставки.

Автозавершение ввода

Программа Bash отслеживает ваше местоположение и среду и наблюдает за тем, как вы пишете команду. Если вводимые вами символы с учетом файлов и каталогов текущей среды содержат какие-либо подсказки о том, что вы хотите сделать, нажатие клавиши Tab позволит Bash подставить наиболее релевантный вариант в оболочке командной строки. Если вы удовлетворены предложением, нажмите клавишу Enter, и программа автоматически завершит команду.

Приведу один пример. Предположим, вы загрузили архивный файл программного обеспечения с глубокомысленным названием вроде foo-matic-plus_0.9.1-3_amd64.deb. Вы хотите скопировать его в рабочий каталог, где его можно будет извлечь. Для этого нужно набирать такую команду:

$ sudo cp foo-matic-plus_0.9.1-3_amd64.deb /usr/bin/foo-matic/

Но если файл находится в вашем текущем каталоге, где он единственный файл, имя которого начинается с букв foo, то вам нужно всего лишь набрать cpfoo и нажать клавишу Tab. Программа Bash заполнит остальную часть имени файла за вас. Конечно, поскольку Bash не может читать ваши мысли, вам все равно придется набрать хотя бы часть целевого пути, чтобы программа смогла автоматически завершить команду.

Попробуйте сами. С помощью команды touch создайте файл с каким-либо длинным именем, а затем попробуйте удалить или скопировать его, используя автозавершение ввода. Вот что я придумал:

$ touch my-very-silly-filename_66-b.txt

$ rm my-<tab>

1.2.5. Псевдофайловые системы

Обычный файл представляет собой набор данных, к которым можно многократно получать надежный доступ даже после перезагрузки системы. В отличие от такого файла содержимое псевдо- (или виртуального) файла Linux, как и файлов, размещенных в каталогах /sys/ и /proc/, в действительности не существует в привычном смысле слова. Содержимое псевдофайла динамически генерируется самой ОС для представления определенных значений.

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

$ cat /sys/block/sda/size

1937389568

Примечание

Если первое устройство хранения в системе называется /dev/sda, то, как можно догадаться, второе устройство будет называться /dev/sdb, а третье — /dev/sdc. Первоначально аббревиатура sda, вероятно, расшифровывалась как SCSI Device A, но я считаю, что расшифровка Storage Device A (устройство хранения А) лучше подходит. Вы также можете встретить обозначения устройств типа /dev/hda (жесткий диск), /dev/sr0 (дисковод DVD), /dev/cdrom (верно, это дисковод CD-ROM) или даже /dev/fd0 (дисковод для гибких дисков).

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

Не знаете, как у вас обозначен диск? Не проблема. Зная, что Linux организует подключенное хранилище как блочное устройство, вы можете перейти в каталог /sys/block/ и просмотреть его содержимое. Среди содержимого будет каталог с названием sda/. (Помните, что sda расшифровывается как Storage Drive A.) Это первый диск, используемый вашей системой при загрузке:

 

Перейдите в каталог sda/ и выполните команду ls. Среди содержимого вы, вероятно, увидите файлы с такими именами, как sda1, sda2 и sda5. Каждый из них представляет собой один из разделов, созданных в Linux для лучшей организации данных на диске.

$ cd sda

$ ls

alignment_offset  discard_alignment  holders    range      sda3     trace

bdi               events             inflight   removable  size     uevent

capability        events_async       integrity  ro         slaves

dev               events_poll_msecs  power      sda1       stat

device            ext_range          queue      sda2       subsystem

1.2.6. Покажите, кто в доме хозяин: sudo

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

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

 

Примечание

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

На скриншотах из оболочки командной строки в этой книге я использую строку с символом $ в начале для команд, которые не требуют прав администратора, и # вместо $sudo — для тех команд, которым необходимы права. Таким образом, команда без прав администратора будет выглядеть так:

$ ls

А команда с полномочиями sudo будет выглядеть так:

# nano /etc/group

1.3. Получение справки

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

1.3.1. Man-файлы

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

$ man man

Выполнив эту команду на своем компьютере, вы увидите, что в разделе NAME содержится краткое введение, SYNOPSIS предлагает подробный обзор синтаксиса, а DESCRIPTION предоставляет более подробное описание программы, которое обычно включает в себя список аргументов командной строки и флаги. Если вам повезет, вы также найдете несколько полезных примеров.

Иногда man-файлы могут быть довольно объемными, поэтому просмотр документа в поисках одной конкретной детали не всегда практичное решение. По различным причинам сочетание Ctrl+F, нажатие которого запускает локальные операции поиска в более современных приложениях, таких как браузеры и текстовые редакторы, здесь недоступно. Вместо этого нажмите клавишу /: в нижней части экрана откроется поле ввода текста, где вы можете ввести свой поисковый запрос. Если первый выделенный результат не соответствует желаемому, нажмите клавишу N (столько раз, сколько необходимо), чтобы выполнять поиск в документе, пока не найдете то, что ищете.

1.3.2. Команда info

Man-файлы великолепны, но только если вы знаете название команды или программы, которую ищете. Но предположим, что вы забыли название команды. Введите слово info в оболочке командной строки, и вы перенесетесь в среду, которая по стандартам Bash является полностью интерактивной (рис. 1.3):

$ info

 

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

Как видно из рис. 1.3, содержимое структурировано в алфавитном порядке по темам с такими заголовками, как Basics и Compression. Вы можете использовать клавиши ↑ и ↓ для прокрутки содержимого экрана. Когда доберетесь до интересующей вас темы, нажмите клавишу Enter, чтобы перейти на страницу выбранной темы.

Предположим, вы хотите больше узнать о правах доступа к файлам. Прокрутите вниз раздел Basics, пока не доберетесь до пункта File Permissions, и нажмите клавишу Enter. Раздел Menu на этой странице указывает на то, что следующие строки являются ссылками на другие страницы, расположенные ниже. Нажатие клавиши U вернет вас на один уровень вверх, а нажатие клавиши Q приведет к выходу из программы Info.

У меня есть ощущение, что программа Info не так популярна у пользователей, как следовало бы. Надо признать, что у меня самого есть страшная тайна, связанная с Info, — я работал с Linux почти десять лет, прежде чем обратил внимание на эту программу!

По умолчанию программа Info может быть не установлена в некоторых дистрибутивах Linux. Если ввод команды info в оболочке командной строки не приносит результатов, вы можете установить Info (в системах Ubuntu/Debian) с помощью команды sudoaptinstallinfo.

1.3.3. Всемирная паутина

Независимо от того, насколько умными вы себя считаете, я могу заверить вас, что тысячи администраторов Linux с опытом любого уровня сталкивались с однотипными проблемами и решали их. Многие из этих решений были результатом обращения за помощью на форумах интернет-сообществ, например serverfault.com или linuxquestions.org/questions.

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

Фишка заключается в умении искать правильно. Если вы наберете в поисковике мойсерверупал в надежде на лучшее, это, вероятно, не принесет результатов. Очевидно, нужно больше подробностей. Прекрасно. Укажите, какой это сервер: веб-сервер Apache? Появились ли какие-либо сообщения об ошибках в вашем браузере? Произошел ли сбой каких-либо записей в журнале? Вероятно, было бы неплохо это выяснить.

Получение информации об ошибках из системных журналов

Почти во всех современных дистрибутивах Linux (за исключением Ubuntu 14.04) вы можете получить доступ ко всем системным журналам с помощью команды journalctl:

# journalctl

Выполнив команду journalctl без каких-либо аргументов, вы утонете в потоке данных. Вам нужно будет найти какой-то способ отфильтровать информацию, которую вы ищете. Позвольте мне представить вам ключевое слово grep:

 

В этом примере я использую вертикальную линию (|), которая вводится на американской раскладке клавиатуры нажатием сочетания клавиш Shift+\. Результат выполнения команды journalctl направляется в фильтр grep, выводящий на экран только те строки, которые содержат выражение filename.php. Разумеется, я предполагаю, что на вашем веб-сервере существует файл с именем filename.php. Не то чтобы я никогда так не делал, но обычно я даю своим файлам гораздо более описательные и полезные имена, например stuff.php.

Вы можете использовать grep последовательно, чтобы сузить результаты. Предположим, существует слишком много записей в журнале для filename.php и вы поняли, что вам нужны только те, которые также содержат слово error. Вы можете передать результаты первой операции второй команде grep, отфильтровав по error:

# journalctl | grep filename.php | grep error

Если вы предпочитаете видеть только те строки, в которых нет слова error, добавьте -v (для обращения запроса):

# journalctl | grep filename.php | grep -v error

Поиск в Интернете

Теперь представьте, что вывод, который вы получили из journalctl, включает такой текст:

[Fri Oct 12 02:19:44 2017] [error] [client 54.208.59.72]

➥ Client sent malformed Host header

Это может быть полезно. Нет смысла искать в Интернете дату или этот конкретный IP-адрес, но держу пари: кто-то уже сталкивался с тем, что клиент отправил искаженный заголовок хоста.

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

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

writing scripts -movie

Резюме

• Почти любая консольная операция в Linux будет использовать некоторые или все пять основных инструментов: ls, pwd, cd, cat и less.

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

• Авторизованные пользователи могут указывать ключевое слово sudo, чтобы получить права администратора для отдельных команд.

• Существует много документации и другой справочной информации, доступной в Интернете, а также при использовании man-файлов и программы Info.

Ключевые понятия

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

• Процесс является активным экземпляром работающей программы.

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

• Bash — это пользовательский консольный интерфейс для выполнения системных задач.

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

• Подстановочные знаки применяются для отсылки на несколько файлов с по­мощью одной команды.

• Для автозавершения команд предназначена клавиша Tab.

•Псевдофайловые системы — это каталоги, содержащие файлы с динамическими данными, автоматически генерируемыми в процессе или после загрузки системы.

Рекомендации по безопасности

Старайтесь не работать на своем Linux-компьютере от имени администратора (root-пользователя). Вместо этого задействуйте обычную учетную запись пользователя и, когда вам нужно выполнить задачи администрирования, используйте sudo.

Обзор команд

• ls-lh/var/log перечисляет содержимое каталога и выводит полные, удобные для чтения сведения о папке /var/log/.

• cd возвращает вас в ваш домашний каталог.

• cpfile1newdir копирует файл с именем file1 в каталог с именем newdir.

• mvfile?/some/other/directory/ перемещает в указанное место все файлы, содержащие в имени буквы file и еще один символ.

• rm-r* удаляет все файлы и каталоги в текущем местоположении. Использовать с большой осторожностью!

•mansudo открывает man-файл со сведениями о команде sudo.

Самотестирование

1. Какой из следующих дистрибутивов Linux лучше всего подходит для безопасной работы:

а) OpenSUSE;

б) CentOS;

в) Kali Linux;

г) LXLE?

2. Какой из следующих инструментов позволяет редактировать текст в оболочке командной строки:

а) nano;

б) gedit;

в) touch;

г) LibreOffice?

3. Что делает команда ls с аргументом –l:

а) выводит подробные сведения о файле;

б) выводит информацию в удобочитаемом формате;

в) отображает только имена файлов;

г) отображает подкаталоги рекурсивно?

4. Какая из следующих команд отобразит ваше текущее местоположение в файловой системе:

а) touch;

б) pwd;

в) ls-c;

г) cd?

5. Для чего нужна команда cat/etc/group:

а) отображает содержимое файла /etc/group с возможностью навигации;

б) копирует файл /etc/group в новое указанное место;

в) обновляет значение последнего доступа к файлу /etc/group;

г) выводит содержимое файла /etc/group на экран (с прокруткой содержимого на экране)?

6. Какая из этих команд удалит каталог myfulldirectory, содержащий файлы и подкаталоги:

а) rmdirmyfulldirectory;

б) sudormdirmyfulldirectory;

в) rm-rmyfulldirectory;

г) rmmyfulldirectory?

7. Допустим, что нет каталога с именем mynewfile. Что будет делать команда mvmyfilemynewfile:

а) создаст копию файла myfile с именем mynewfile;

б) создаст пустой каталог с именем mynewfile;

в) создаст пустой каталог с именем mynewfile и переместит в него файл myfile;

г) изменит имя файла myfile на mynewfile?

8. Какая команда из нижеследующих удалит все файлы со словом file и с любым количеством символов в его имени:

а) rmfile*;

б) rmfile?;

в) rfile.;

г) rmfile???

Ответы

1 — в; 2 — а; 3 — а; 4 — б; 5 — г; 6 — в; 7 — г; 8 — а.

Глава 2. Виртуализация Linux: создание безопасной и простой рабочей среды

В этой главе

• Определение правильной технологии виртуализации.

• Использование менеджеров репозитория Linux.

• Создание эффективных сред с использованием VirtualBox.

• Построение контейнеров с помощью LXC.

• Профессиональное управление виртуальными машинами.

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

• Linux абсолютно доминирует в виртуальном пространстве.

• Виртуализация облегчает изучение любой технологии.

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

Нужна свежая, чистая операционная система (ОС), чтобы попробовать что-то новое? Создайте ее за несколько секунд. Сделали ошибку в конфигурации и она заблокировала вам доступ к машине? Нет проблем. Уничтожьте эту конфигурацию и запустите новую. Вы узнаете, как использовать диспетчеры пакетов Linux для загрузки и установки всего необходимого программного обеспечения (например, VirtualBox и LXC) и управления им.

2.1. Что такое виртуализация