ВНУТРЕННЕЕ УСТРОЙСТВО LINUX 3-Е И З Д А Н И Е Б Р А Й А Н У О РД 2022 ББК 32.973.2-018.2 УДК 004.451 У64 Уорд Б. У64 Внутреннее устройство Linux. 3-е изд. — СПб.: Питер, 2022. — 480 с.: ил. — (Се- рия «Для профессионалов»). ISBN 978-5-4461-3946-0 Познакомьтесь со всеми тонкостями работы операционной системы Linux — от системного адми- нистрирования до глубинных механизмов, обеспечивающих низкоуровневый функционал Linux. Эта книга, сразу после выхода ставшая бестселлером Amazon, даст вам базовые знания о работе с ядром Linux и принципах правильной эксплуатации компьютерных сетей, о программировании сценариев оболочки и обращении с языком С. Вы изучите вопросы защиты информации, виртуализацию и многое другое. Книга необходима системным администраторам, программистам, специалистам по защите информации, а также всем, кто изучает или хочет изучить Linux максимально быстро и эффективно. 16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.) ББК 32.973.2-018.2 УДК 004.451 Права на издание получены по соглашению с No Starch Press. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как на- дежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. Издательство не несет ответственности за доступность материалов, ссылки на которые вы можете найти в этой книге. На момент подготовки книги к изданию все ссылки на интернет- ресурсы были действующими. ISBN 978-1718500402 англ. © 2021 by Brian Ward. How Linux Works, 3rd Edition: What Every Superuser Should Know, ISBN 9781718500402, published by No Starch Press Inc. 245 8th Street, San Francisco, California United States 94103. ISBN 978-5-4461-3946-0 © Перевод на русский язык ООО «Прогресс книга», 2022 © Издание на русском языке, оформление ООО «Прогресс книга», 2022 © Серия «Для профессионалов», 2022 Краткое содержание Благодарности ....................................................23 Предисловие ......................................................24 Глава 1. Общая картина ..........................................28 Глава 2. Основные команды и иерархия каталогов .....................39 Глава 3. Устройства ..............................................79 Глава 4. Диски и файловые системы ................................102 Глава 5. Загрузка ядра Linux ......................................156 Глава 6. Запуск пользовательского пространства .....................176 Глава 7. Настройка системы: журналирование, системное время, пакетные задачи и пользователи ...........................208 Глава 8. Процессы и использование ресурсов ........................244 Глава 9. Сеть и ее конфигурация ..................................270 Глава 10. Сетевые приложения и службы .............................320 Глава 11. Сценарии оболочки ......................................344 Глава 12. Передача файлов по сети и доступ к ним .....................368 Глава 13. Пользовательское окружение ..............................390 Глава 14. Краткий обзор рабочего стола Linux. Вывод на печать ..........402 Глава 15. Инструменты разработки .................................419 Глава 16. Компиляция программ из исходного кода на языке С ...........442 Глава 17. Виртуализация ..........................................458 Библиография ....................................................478 Оглавление Об авторе .....................................................22 О научных редакторах ...........................................22 Благодарности ..................................................23 Предисловие ....................................................24 Для кого эта книга ...............................................24 Требуемый уровень знаний ........................................24 Как читать книгу .................................................25 Практический подход ............................................25 Как устроена эта книга ...........................................25 Новое в третьем издании .........................................26 Немного о терминологии .........................................27 От издательства .................................................27 Глава 1. Общая картина............................................28 1.1. Уровни абстракции в системе Linux ..............................29 1.2. Оборудование: оперативная память .............................31 1.3. Ядро ......................................................32 1.3.1. Управление процессами ................................32 1.3.2. Управление памятью ...................................34 1.3.3. Управления драйверами устройств .......................34 1.3.4. Системные вызовы и поддержка .........................35 1.4. Пользовательское пространство ................................36 1.5. Пользователи ...............................................37 1.6. Что дальше? ................................................38 Глава 2. Основные команды и иерархия каталогов ......................39 2.1. Оболочка Bourne Shell (bash): /bin/sh ...........................40 2.2. Использование оболочки .....................................40 Оглавление 7 2.2.1. Окно оболочки .......................................40 2.2.2. Программа cat .......................................41 2.2.3. Стандартный поток ввода (stdin) и стандартный поток вывода (stdout) ........................................42 2.3. Основные команды ..........................................43 2.3.1. Команда ls ...........................................43 2.3.2. Команда cp ..........................................44 2.3.3. Команда mv ..........................................44 2.3.4. Команда touch ........................................44 2.3.5. Команда rm ..........................................44 2.3.6. Команда echo ........................................45 2.4. Перемещение по каталогам ...................................45 2.4.1. Команда cd ..........................................45 2.4.2. Команда mkdir ........................................46 2.4.3. Команда rmdir ........................................46 2.4.4. Шаблоны поиска (переменные Wildcards) .................46 2.5. Команды среднего уровня .....................................47 2.5.1. Команда grep ........................................48 2.5.2. Команда less .........................................48 2.5.3. Команда pwd ........................................49 2.5.4. Команда diff .........................................49 2.5.5. Команда file ..........................................50 2.5.6. Команды find и locate ..................................50 2.5.7. Команды head и tail ....................................50 2.5.8. Команда sort .........................................51 2.6. Смена пароля и оболочки .....................................51 2.7. Файлы с точками ............................................51 2.8. Переменные окружения и оболочки .............................52 2.9. Переменная пути PATH .......................................52 2.10. Специальные символы .......................................53 2.11. Редактирование в командной строке ............................54 2.12. Текстовые редакторы ........................................55 2.13. Онлайн-поддержка .........................................56 2.14. Ввод и вывод командной оболочки .............................58 2.14.1. Стандартная ошибка ..................................59 2.14.2. Стандартное перенаправление ввода ....................59 8 Оглавление 2.15. Сообщения об ошибках ......................................60 2.15.1. Структура сообщений об ошибках в Unix .................60 2.15.2. Распространенные ошибки.............................61 2.16. Перечисление процессов и управление ими .....................62 2.16.1. Параметры команды ps ...............................63 2.16.2. Завершение процесса ................................64 2.16.3. Управление заданиями ................................65 2.16.4. Фоновые процессы ...................................65 2.17. Режимы файлов и права доступа ...............................66 2.17.1. Изменение прав доступа ..............................68 2.17.2. Использование символических ссылок ...................69 2.18. Архивирование и сжатие файлов ..............................71 2.18.1. Утилита gzip .........................................71 2.18.2. Утилита tar ..........................................71 2.18.3. Сжатые архивы (.tar.gz) ...............................72 2.18.4. Утилита zcat .........................................73 2.18.5. Другие утилиты сжатия ................................73 2.19. Основная иерархия каталогов Linux ............................74 2.19.1. Другие корневые подкаталоги ..........................76 2.19.2. Каталог /usr ........................................76 2.19.3. Местонахождение ядра ...............................76 2.20. Запуск команд от имени суперпользователя .....................77 2.20.1. Команда sudo .......................................77 2.20.2. Файл /etc/sudoers ...................................77 2.20.3. Журналы sudo .......................................78 2.21. Что дальше? ...............................................78 Глава 3. Устройства ...............................................79 3.1. Файлы устройств ............................................79 3.2. Путь к устройству sysfs ........................................81 3.3. Утилита dd и устройства ......................................82 3.4. Имена устройств ............................................83 3.4.1. Жесткие диски: /dev/sd* ...............................84 3.4.2. Виртуальные диски: /dev/xvd*, /dev/vd* .................85 3.4.3. Устройства долговременной памяти: /dev/nvme* ...........85 Оглавление 9 3.4.4. Подсистема создания виртуальных блочных устройств: /dev/dm-*, /dev/mapper/* .................................85 3.4.5. CD- и DVD-приводы: /dev/sr* ...........................85 3.4.6. Жесткие диски PATA: /dev/hd* ..........................86 3.4.7. Терминалы: /dev/tty*, /dev/pts/* и /dev/tty ..............86 3.4.8. Последовательные порты: /dev/ttyS*, /dev/ttyUSB*, /dev/ttyACM* ............................................87 3.4.9. Параллельные порты: /dev/lp0 и /dev/lp1 ................88 3.4.10. Аудиоустройства: /dev/snd/*, /dev/dsp, /dev/audio и другие ..................................................88 3.4.11. Создание файла устройства ............................88 3.5. Менеджер устройств udev .....................................89 3.5.1. Файловая система devtmpfs .............................90 3.5.2. Работа и настройка менеджера udevd ....................91 3.5.3. Команда udevadm .....................................93 3.5.4. Отслеживание устройств ...............................94 3.6. Подробнее об интерфейсе SCSI и ядре Linux ......................95 3.6.1. USB-накопитель и SCSI .................................98 3.6.2. Интерфейсы SCSI и ATA ................................99 3.6.3. Обобщенные устройства SCSI ...........................99 3.6.4. Методы множественного доступа к одному устройству ......100 Глава 4. Диски и файловые системы .................................102 4.1. Разбиение дисков на разделы .................................104 4.1.1. Просмотр таблицы разделов ...........................105 4.1.2. Редактирование таблиц разделов .......................108 4.1.3. Создание таблицы разделов ...........................109 4.1.4. Геометрия дисков и разделов ...........................111 4.1.5. Чтение твердотельных дисков ...........................113 4.2. Файловые системы ..........................................114 4.2.1. Типы файловых систем ................................114 4.2.2. Создание файловой системы ...........................116 4.2.3. Монтирование файловой системы ......................117 4.2.4. Идентификатор UUID файловой системы .................119 4.2.5. Буферизация диска, кэширование и файловые системы .....120 4.2.6. Параметры монтирования файловой системы .............120 10 Оглавление 4.2.7. Повторное монтирование файловой системы ..............122 4.2.8. Таблица файловой системы /etc/fstab ...................122 4.2.9. Альтернативы файлу /etc/fstab .........................124 4.2.10. Емкость файловой системы ...........................124 4.2.11. Проверка и восстановление файловых систем ............126 4.2.12. Файловые системы специального назначения .............129 4.3. Область подкачки swap ......................................130 4.3.1. Использование раздела диска в качестве области подкачки ..130 4.3.2. Использование файла в качестве области подкачки ........131 4.3.3. Определение необходимого размера области подкачки ....131 4.4. Менеджер логических томов LVM ..............................132 4.4.1. Работа с менеджером LVM .............................134 4.4.2. Реализация менеджера LVM ............................145 4.5. Что дальше? Диски и пользовательское пространство ..............149 4.6. Что находится внутри традиционной файловой системы ............150 4.6.1. Сведения о дескрипторе и количество ссылок .............152 4.6.2. Распределение блоков ................................154 4.6.3. Работа с файловыми системами в пользовательском пространстве .............................................154 Глава 5. Загрузка ядра Linux .......................................156 5.1. Сообщения при загрузке .....................................157 5.2. Параметры инициализации и загрузки ядра .....................158 5.3. Параметры ядра............................................159 5.4. Загрузчики ................................................160 5.4.1. Задачи загрузчика ...................................161 5.4.2. Обзор загрузчиков ...................................162 5.5. Введение в загрузчик GRUB...................................163 5.5.1. Изучение устройств и разделов с помощью командной строки GRUB .............................................165 5.5.2. Конфигурация GRUB .................................167 5.5.3. Установка GRUB .....................................170 5.6. Проблемы безопасной загрузки UEFI ...........................171 5.7. Метод цепной загрузки других операционных систем ..............172 5.8. Детали работы загрузчика ...................................173 5.8.1. Загрузчик MBR ......................................173