Внутреннее устройство Linux

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

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

Author(s): Брайан Уорд
Series: Для профессионалов
Edition: 3
Publisher: Питер
Year: 2022

Language: Russian
Commentary: Vector PDF
Pages: 480
City: СПб.
Tags: Linux; Virtualization; Monitoring; Filesystems; System Administration; Linux Kernel; DNS; Logging; Docker; Memory Management; Network Security; Wireless Networks; Networking; C; Ethernet; Containerization; SSH; Boot Process; Device Drivers; Scheduling; IPv6; UEFI; systemd; Process Management; DHCP; Network Address Translation; Firewalls; TCP; Routing; User Management; CUPS; GRUB; Network Layers; Shell Scripting; bash

Об авторе
О научных редакторах
Благодарности
Предисловие
Для кого эта книга
Требуемый уровень знаний
Как читать книгу
Практический подход
Как устроена эта книга
Новое в третьем издании
Немного о терминологии
От издательства
Глава 1. Общая картина
1.1. Уровни абстракции в системе Linux
1.2. Оборудование: оперативная память
1.3. Ядро
1.3.1. Управление процессами
1.3.2. Управление памятью
1.3.3. Управления драйверами устройств
1.3.4. Системные вызовы и поддержка
1.4. Пользовательское пространство
1.5. Пользователи
1.6. Что дальше?
Глава 2. Основные команды и иерархия каталогов
2.1. Оболочка Bourne Shell (bash): /bin/sh
2.2. Использование оболочки
2.2.1. Окно оболочки
2.2.2. Программа cat
2.2.3. Стандартный поток ввода (stdin) и стандартный поток вывода (stdout)
2.3. Основные команды
2.3.1. Команда ls
2.3.2. Команда cp
2.3.3. Команда mv
2.3.4. Команда touch
2.3.5. Команда rm
2.3.6. Команда echo
2.4. Перемещение по каталогам
2.4.1. Команда cd
2.4.2. Команда mkdir
2.4.3. Команда rmdir
2.4.4. Шаблоны поиска (переменные Wildcards)
2.5. Команды среднего уровня
2.5.1. Команда grep
2.5.2. Команда less
2.5.3. Команда pwd
2.5.4. Команда diff
2.5.5. Команда file
2.5.6. Команды find и locate
2.5.7. Команды head и tail
2.5.8. Команда sort
2.6. Смена пароля и оболочки
2.7. Файлы с точками
2.8. Переменные окружения и оболочки
2.9. Переменная пути PATH
2.10. Специальные символы
2.11. Редактирование в командной строке
2.12. Текстовые редакторы
2.13. Онлайн-поддержка
2.14. Ввод и вывод командной оболочки
2.14.1. Стандартная ошибка
2.14.2. Стандартное перенаправление ввода
2.15. Сообщения об ошибках
2.15.1. Структура сообщений об ошибках в Unix
2.15.2. Распространенные ошибки
2.16. Перечисление процессов и управление ими
2.16.1. Параметры команды ps
2.16.2. Завершение процесса
2.16.3. Управление заданиями
2.16.4. Фоновые процессы
2.17. Режимы файлов и права доступа
2.17.1. Изменение прав доступа
2.17.2. Использование символических ссылок
2.18. Архивирование и сжатие файлов
2.18.1. Утилита gzip
2.18.2. Утилита tar
2.18.3. Сжатые архивы (.tar.gz)
2.18.4. Утилита zcat
2.18.5. Другие утилиты сжатия
2.19. Основная иерархия каталогов Linux
2.19.1. Другие корневые подкаталоги
2.19.2. Каталог /usr
2.19.3. Местонахождение ядра
2.20. Запуск команд от имени суперпользователя
2.20.1. Команда sudo
2.20.2. Файл /etc/sudoers
2.20.3. Журналы sudo
2.21. Что дальше?
Глава 3. Устройства
3.1. Файлы устройств
3.2. Путь к устройству sysfs
3.3. Утилита dd и устройства
3.4. Имена устройств
3.4.1. Жесткие диски: /dev/sd*
3.4.2. Виртуальные диски: /dev/xvd*, /dev/vd*
3.4.3. Устройства долговременной памяти: /dev/nvme*
3.4.4. Подсистема создания виртуальных блочных устройств: /dev/dm-*, /dev/mapper/*
3.4.5. CD- и DVD-приводы: /dev/sr*
3.4.6. Жесткие диски PATA: /dev/hd*
3.4.7. Терминалы: /dev/tty*, /dev/pts/* и /dev/tty
3.4.8. Последовательные порты: /dev/ttyS*, /dev/ttyUSB*, /dev/ttyACM*
3.4.9. Параллельные порты: /dev/lp0 и /dev/lp1
3.4.10. Аудиоустройства: /dev/snd/*, /dev/dsp, /dev/audio и другие
3.4.11. Создание файла устройства
3.5. Менеджер устройств udev
3.5.1. Файловая система devtmpfs
3.5.2. Работа и настройка менеджера udevd
3.5.3. Команда udevadm
3.5.4. Отслеживание устройств
3.6. Подробнее об интерфейсе SCSI и ядре Linux
3.6.1. USB-накопитель и SCSI
3.6.2. Интерфейсы SCSI и ATA
3.6.3. Обобщенные устройства SCSI
3.6.4. Методы множественного доступа к одному устройству
Глава 4. Диски и файловые системы
4.1. Разбиение дисков на разделы
4.1.1. Просмотр таблицы разделов
4.1.2. Редактирование таблиц разделов
4.1.3. Создание таблицы разделов
4.1.4. Геометрия дисков и разделов
4.1.5. Чтение твердотельных дисков
4.2. Файловые системы
4.2.1. Типы файловых систем
4.2.2. Создание файловой системы
4.2.3. Монтирование файловой системы
4.2.4. Идентификатор UUID файловой системы
4.2.5. Буферизация диска, кэширование и файловые системы
4.2.6. Параметры монтирования файловой системы
4.2.7. Повторное монтирование файловой системы
4.2.8. Таблица файловой системы /etc/fstab
4.2.9. Альтернативы файлу /etc/fstab
4.2.10. Емкость файловой системы
4.2.11. Проверка и восстановление файловых систем
4.2.12. Файловые системы специального назначения
4.3. Область подкачки swap
4.3.1. Использование раздела диска в качестве области подкачки
4.3.2. Использование файла в качестве области подкачки
4.3.3. Определение необходимого размера области подкачки
4.4. Менеджер логических томов LVM
4.4.1. Работа с менеджером LVM
4.4.2. Реализация менеджера LVM
4.5. Что дальше? Диски и пользовательское пространство
4.6. Что находится внутри традиционной файловой системы
4.6.1. Сведения о дескрипторе и количество ссылок
4.6.2. Распределение блоков
4.6.3. Работа с файловыми системами в пользовательском пространстве
Глава 5. Загрузка ядра Linux
5.1. Сообщения при загрузке
5.2. Параметры инициализации и загрузки ядра
5.3. Параметры ядра
5.4. Загрузчики
5.4.1. Задачи загрузчика
5.4.2. Обзор загрузчиков
5.5. Введение в загрузчик GRUB
5.5.1. Изучение устройств и разделов с помощью командной строки GRUB
5.5.2. Конфигурация GRUB
5.5.3. Установка GRUB
5.6. Проблемы безопасной загрузки UEFI
5.7. Метод цепной загрузки других операционных систем
5.8. Детали работы загрузчика
5.8.1. Загрузчик MBR
5.8.2. Загрузчик UEFI
5.8.3. Как работает GRUB
Глава 6. Запуск пользовательского пространства
6.1. Основные сведения об init
6.2. Определение системы инициализации
6.3. systemd
6.3.1. Юниты и типы юнитов
6.3.2. Графики загрузки и зависимостей юнитов
6.3.3. Конфигурация systemd
6.3.4. Процесс работы systemd
6.3.6. Зависимости systemd
6.3.7. Запуск по запросу и параллелизация ресурсов в systemd
6.3.8. Вспомогательные компоненты systemd
6.4. Уровни выполнения в System V
6.5. System V init
6.5.1. System V init: последовательность команд при запуске
6.5.2. Ферма ссылок System V init
6.5.3. Команда run-parts
6.5.4. Управление System V init
6.5.5. Совместимость systemd и System V
6.6. Завершение работы системы
6.7. Начальная файловая система оперативной памяти
6.8. Аварийная загрузка системы и однопользовательский режим
6.9. Что дальше?
Глава 7. Настройка системы: журналирование, системное время, пакетные задачи и пользователи
7.1. Ведение системного журнала
7.1.1. Проверка настроек журнала
7.1.2. Поиск и мониторинг журналов
7.1.3. Ротация файлов журнала
7.1.4. Обслуживание журналов journald
7.1.5. Детали системного журналирования
7.2. Структура каталога /etc
7.3. Файлы управления пользователями
7.3.1. Файл /etc/passwd
7.3.2. Особые пользователи
7.3.3. Файл /etc/shadow
7.3.4. Управление пользователями и паролями
7.3.5. Работа с группами пользователей
7.4. Команды getty и login
7.5. Установка времени
7.5.1. Представление времени ядра и часовые пояса
7.5.2. Сетевое время
7.6. Планирование повторяющихся задач с помощью команды cron и юнитов таймера
7.6.1. Установка файлов Crontab
7.6.2. Системные файлы Crontab
7.6.3. Юниты таймера
7.6.4. Утилита cron против юнитов таймера
7.7. Планирование разовых задач с помощью службы at
7.7.1. Аналоги таймера
7.8. Юниты таймера обычных пользователей
7.9. Доступ пользователя
7.9.1. ID пользователей и переключение пользователей
7.9.2. Владельцы процессов, действующий UID, реальный UID и сохраненный UID
7.9.3. Идентификация пользователя, аутентификация и авторизация
7.9.4. Применение библиотек для получения информации о пользователе
7.10. Подключаемые модули аутентификации (PAM)
7.10.1. Конфигурация PAM
7.10.2. Советы по синтаксису конфигурации PAM
7.10.3. Модули PAM и пароли
7.11. Что дальше?
Глава 8. Процессы и использование ресурсов
8.1. Отслеживание процессов
8.2. Поиск открытых файлов с помощью команды lsof
8.2.1. Считывание вывода команды lsof
8.2.2. Использование команды lsof
8.3. Отслеживание выполнения программ и системных вызовов
8.3.1. Команда strace
8.3.2. Команда ltrace
8.4. Потоки
8.4.1. Однопоточные и многопоточные процессы
8.4.2. Просмотр потоков
8.5. Введение в мониторинг ресурсов
8.5.1. Измерение процессорного времени
8.5.2. Настройка приоритетов процесса
8.5.3. Измерение производительности процессора с помощью среднего значения загрузки
8.5.4. Мониторинг состояния памяти
8.5.5. Мониторинг производительности процессора и памяти с помощью команды vmstat
8.5.6. Мониторинг ввода-вывода I/O
8.5.7. Мониторинг каждого процесса с помощью команды pidstat
8.6. Группы управления (cgroups)
8.6.1. Различие между версиями cgroup
8.6.2. Просмотр cgroups
8.6.3. Управление и создание cgroups
8.6.4. Отображение использования ресурсов
8.7. Дополнительно
Глава 9. Сеть и ее конфигурация
9.1. Основы сети
9.2. Пакеты
9.3. Сетевые уровни
9.4. Сетевой уровень
9.4.1. Просмотр IP-адреса
9.4.2. Подсети
9.4.3. Распространенные маски подсети и нотация CIDR
9.5. Маршруты и таблица маршрутизации ядра
9.6. Шлюз по умолчанию
9.7. IPv6-адреса и сети
9.7.1. Просмотр конфигурации IPv6 в системе
9.7.2. Настройка сетей с двумя стеками
9.8. Основные инструменты ICMP и DNS
9.8.1. Команда ping
9.8.2. Служба DNS и команда host
9.9. Физический уровень и сеть Ethernet
9.10. Сетевые интерфейсы ядра
9.11. Введение в настройки сетевого интерфейса
9.11.1. Ручная настройка интерфейсов
9.11.2. Добавление и удаление маршрутов вручную
9.12. Конфигурация сети, активируемая при загрузке
9.13. Проблемы с настройкой сети вручную и при загрузке
9.14. Менеджеры настройки сети
9.14.1. Работа NetworkManager
9.14.2. Взаимодействие с NetworkManager
9.14.3. Настройка NetworkManager
9.15. Разрешения сетевых имен
9.15.1. Файл /etc/hosts
9.15.2. Файл resolv.conf
9.15.3. Кэширование и DNS с нулевой конфигурацией
9.15.4. Файл /etc/nsswitch.conf
9.16. Localhost
9.17. Транспортный уровень: TCP, UDP и службы
9.17.1. TCP-порты и соединения
9.17.2. Протокол UDP
9.18. Возврат к простой локальной сети
9.19. Протокол DHCP
9.19.1. DHCP-клиенты Linux
9.19.2. DHCP-серверы Linux
9.20. Автоматическая настройка сети IPv6
9.21. Настройка Linux в качестве маршрутизатора
9.22. Частные сети (IPv4)
9.23. Преобразование сетевых адресов NAT (маскарадинг IP-адресов)
9.24. Linux и маршрутизаторы
9.25. Брандмауэры
9.25.1. Основы брандмауэров Linux
9.25.2. Настройка правил брандмауэра
9.25.3. Стратегии брандмауэра
9.26. Ethernet, IP, ARP и NDP
9.27. Беспроводная сеть Ethernet
9.27.1. Утилита iw
9.27.2. Безопасность беспроводной сети
9.28. Выводы
Глава 10. Сетевые приложения и службы
10.1. Основы работы служб
10.2. Взглянем глубже
10.3. Сетевые серверы
10.3.1. Служба защищенной оболочки SSH
10.3.2. Сервер sshd
10.3.3. Утилита fail2ban
10.3.4. SSH-клиент
10.4. Сетевые серверы до systemd: inetd/xinetd
10.5. Средства диагностики
10.5.1. Утилита lsof
10.5.2. Утилита tcpdump
10.5.3. Утилита netcat
10.5.4. Сканирование портов
10.6. Удаленный вызов процедур
10.7. Безопасность сети
10.7.1. Типичные уязвимости
10.7.2. Ресурсы безопасности
10.8. Что дальше?
10.9. Сетевые сокеты
10.10. Доменные сокеты Unix
Глава 11. Сценарии оболочки
11.1. Основы сценариев оболочки
11.1.1. Ограничения скриптов оболочки
11.2. Кавычки и литералы
11.2.1. Литералы
11.2.2. Одинарные кавычки
11.2.3. Двойные кавычки
11.2.4. Литерал с одинарными кавычками
11.3. Специальные переменные
11.3.1. Индивидуальные аргументы: $1, $2 и другие
11.3.2. Количество аргументов: $#
11.3.3. Все аргументы: $@
11.3.4. Имя сценария: $0
11.3.5. ID процесса: $$
11.3.6. Код возврата: $?
11.4. Коды возврата
11.5. Условные операторы
11.5.1. Обходной путь для предотвращения ошибки Empty Parameter Lists
11.5.2. Другие команды для проверки условий
11.5.3. Ключевое слово elif
11.5.4. Логические конструкции
11.5.5. Проверка условий
11.5.6. Ключевое слово case
11.6. Циклы
11.6.1. Циклы for
11.6.2. Циклы while
11.7. Подстановка команд
11.8. Управление временными файлами
11.9. Here-документы
11.10. Важные утилиты сценариев оболочки
11.10.1. Утилита basename
11.10.2. Утилита awk
11.10.3. Утилита sed
11.10.4. Утилита xargs
11.10.5. Утилита expr
11.10.6. Утилита exec
11.11. Подоболочки
11.12. Добавление файлов в скрипты
11.13. Чтение пользовательского ввода
11.14. Когда не стоит использовать сценарии оболочки
Глава 12. Передача файлов по сети и доступ к ним
12.1. Быстрое копирование данных
12.2. Утилита rsync
12.2.1. Начало работы c rsync
12.2.2. Создание точной копии структуры каталогов
12.2.3. Добавление косой черты
12.2.4. Исключение файлов и каталогов
12.2.5. Проверка копирования, меры предосторожности и подробный режим
12.2.6. Сжатие данных
12.2.7. Ограничение ширины полосы пропускания
12.2.8. Передача файлов на ваш компьютер
12.2.9. Больше информации о rsync
12.3. Совместное использование файлов
12.3.1. Производительность совместного использования файлов
12.3.2. Безопасность совместного доступа к файлам
12.4. Совместное использование файлов с помощью Samba
12.4.1. Настройка сервера
12.4.2. Контроль доступа к серверу
12.4.3. Пароли
12.4.4. Запуск сервера вручную
12.4.5. Диагностика и файлы журналов
12.4.6. Настройка совместного использования файлов
12.4.7. Домашние каталоги
12.4.8. Совместное применение принтеров
12.4.9. Клиенты сервера Samba
12.5. Клиентская программа SSHFS
12.6. NFS
12.7. Облачное хранилище
12.8. Состояние совместного доступа к файлам в сети
Глава 13. Пользовательское окружение
13.1. Создание файлов запуска
13.2. Изменение файлов запуска
13.3. Элементы файла запуска оболочки
13.3.1. Путь к команде
13.3.2. Путь к странице руководства
13.3.3. Приглашения prompt
13.3.4. Псевдонимы
13.3.5. Маска прав доступа
13.4. Порядок и примеры файлов запуска
13.4.1. Оболочка bash
13.4.2. Оболочка tcsh
13.5. Пользовательские настройки по умолчанию
13.5.1. Параметры оболочки по умолчанию
13.5.2. Текстовый редактор
13.5.3. Пейджер
13.6. Подводные камни в файлах запуска
13.7. Далее о файлах запуска
Глава 14. Краткий обзор рабочего стола Linux. Вывод на печать
14.1. Компоненты рабочего стола
14.1.1. Фреймбуфер
14.1.2. Система X Window
14.1.3. Протокол Wayland
14.1.4. Менеджеры окон
14.1.5. Наборы инструментов
14.1.6. Окружение рабочего стола
14.1.7. Приложения
14.2. Wayland или X?
14.3. Обзор протокола Wayland
14.3.1. Композитный менеджер окон
14.3.2. Библиотека libinput
14.3.3. Совместимость X и Wayland
14.4. Обзор системы X Window
14.4.1. Дисплейные менеджеры
14.4.2. Сетевая прозрачность
14.4.3. Способы исследования X-клиентов
14.4.4. События на сервере (X events)
14.4.5. X-ввод и настройки предпочтений
14.5. Шина D-Bus
14.5.1. Системные и сеансовые экземпляры
14.5.2. Мониторинг сообщений D-Bus
14.6. Печать
14.6.1. Сервер печати CUPS
14.6.2. Фильтры преобразования форматов и печати
14.7. Дополнительно об окружениях рабочего стола
Глава 15. Инструменты разработки
15.1. Компилятор C
15.1.1. Компиляция нескольких исходных файлов
15.1.2. Связывание с библиотеками
15.1.3. Разделяемые библиотеки
15.1.4. Файлы заголовков (Include) и каталоги
15.2. Утилита make
15.2.1. Makefile
15.2.2. Встроенные правила
15.2.3. Финальная сборка программы
15.2.4. Обновление зависимостей
15.2.5. Аргументы и параметры командной строки
15.2.6. Стандартные макросы и переменные
15.2.7. Стандартные цели
15.2.8. Организация файла Makefile
15.3. Программы Lex и Yacc
15.4. Языки сценариев
15.4.1. Язык Python
15.4.2. Язык Perl
15.4.3. Другие языки сценариев
15.5. Язык Java
15.6. А что дальше? Компиляция пакетов
Глава 16. Компиляция программ из исходного кода на языке С
16.1. Системы сборки программ
16.2. Распаковка пакетов с исходным кодом С
16.3. Утилита GNU Autoconf
16.3.1. Пример использования Autoconf
16.3.2. Установка с помощью инструментов создания пакетов
16.3.3. Параметры сценария configure
16.3.4. Переменные окружения
16.3.5. Цели Autoconf
16.3.6. Файлы журналов Autoconf
16.3.7. Утилита pkg-config
16.4. Процесс установки
16.4.1. Места установки
16.5. Применение исправлений
16.6. Устранение ошибок компиляции и установки
16.6.1. Особые ошибки
16.7. Что дальше?
Глава 17. Виртуализация
17.1. Виртуальные машины
17.1.1. Гипервизоры
17.1.2. Оборудование виртуальной машины
17.1.3. Использование виртуальных машин
17.1.4. Недостатки виртуальных машин
17.2. Контейнеры
17.2.1. Docker, Podman и привилегии
17.2.2. Пример использования инструмента Docker
17.2.3. Система LXC
17.2.4. Платформа Kubernetes
17.2.5. Ошибки работы контейнеров
17.3. Виртуализация времени исполнения
Библиография