Предисловие Кому следует читать книгу Необходимые условия Как читать книгу Практический подход Как устроена эта книга Что нового во втором издании Примечание о терминологии Благодарности От издательства Глава 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: /bin/sh 2.2. Использование оболочки 2.2.1. Окно оболочки 2.2.2. Команда cat 2.2.3. Стандартный ввод и стандартный вывод 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. Универсализация файловых имен (джокерные символы) 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. Командный путь 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.17.3. Создание символических ссылок 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. Запуск команд с правами пользователя superuser 2.20.1. Команда sudo 2.20.2. Файл /etc/sudoers 2.21. Заглядывая вперед Глава 3. Устройства 3.1. Файлы устройств 3.2. Путь устройств sysfs 3.3. Команда dd и устройства 3.4. Сводка имен устройств 3.4.1. Жесткие диски: /dev/sd* 3.4.2. Приводы CD и DVD: /dev/sr* 3.4.3. Жесткие диски PATA: /dev/hd* 3.4.4. Терминалы: /dev/tty*, /dev/pts/* и /dev/tty 3.4.5. Последовательные порты: /dev/ttyS* 3.4.6. Параллельные порты: /dev/lp0 и /dev/lp1 3.4.7. Аудиоустройства: /dev/snd/*, /dev/dsp, /dev/audio и другие 3.4.8. Создание файлов устройств 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. Твердотельные накопители (диски SSD) 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. Область подкачки 4.3.1. Использование раздела диска в качестве области подкачки 4.3.2. Использование файла в качестве области подкачки 4.3.3. Какой объем области подкачки необходим? 4.4. Заглядывая вперед: диски и пространство пользователя 4.5. Внутри традиционной файловой системы 4.5.1. Просмотр деталей дескрипторов inode 4.5.2. Работа с файловыми системами в пространстве пользователя 4.5.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. Уровни запуска команды System V 6.3. Определяем тип команды init 6.4. Команда systemd 6.4.1. Модули и типы модулей 6.4.2. Зависимости команды systemd 6.4.3. Конфигурация команды systemd 6.4.4. Работа команды systemd 6.4.5. Добавление модулей в команду systemd 6.4.6. Отслеживание процессов и синхронизация в команде systemd 6.4.7. Запуск по запросу и распараллеливание ресурсов в команде systemd 6.4.8. Совместимость команды systemd со сценариями System V 6.4.9. Команды, дополняющие systemd 6.5. Команда Upstart 6.5.1. Процедура инициализации команды Upstart 6.5.2. Задания команды Upstart 6.5.3. Конфигурация команды Upstart 6.5.4. Управление командой Upstart 6.5.5. Журналы команды Upstart 6.5.6. Уровни запуска команды Upstart и совместимость со стандартом System V 6.6. Команда System V init 6.6.1. Команда System V init: командная последовательность запуска 6.6.2. Ферма ссылок команды System V init 6.6.3. Утилита run-parts 6.6.4. Управление командой System V init 6.7. Выключение системы 6.8. Начальная файловая система оперативной памяти 6.9. Аварийная загрузка системы и режим одиночного пользователя Глава 7. Конфигурация системы: журнал, системное время, пакетные задания и пользователи 7.1. Структура каталога /etc 7.2. Системный журнал 7.2.1. Системный регистратор 7.2.2. Файлы конфигурации 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. Будущее службы cron 7.7. Планирование единовременных задач с помощью службы at 7.8. Идентификаторы пользователей и переключение между пользователями 7.9. Идентификация и аутентификация пользователей 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.6. Измерение процессорного времени 8.7. Настройка приоритетов процессов 8.8. Средние значения загрузки 8.8.1. Использование команды uptime 8.8.2. Высокие значения загрузки 8.9. Память 8.9.1. Как работает память 8.9.2. Ошибки из-за отсутствия страниц 8.10. Отслеживание производительности процессора и памяти с помощью команды vmstat 8.11. Отслеживание ввода/вывода 8.11.1. Использование команды iostat 8.11.2. Отслеживание использования ввода/вывода каждого процесса с помощью команды iotop 8.12. Отслеживание процессов с помощью команды pidstat 8.13. Дополнительные темы Глава 9. Представление о сети и ее конфигурации 9.1. Основные понятия о сети 9.2. Сетевые уровни 9.3. Интернет-уровень 9.3.1. Просмотр IP-адресов компьютера 9.3.2. Подсети 9.3.3. Распространенные маски подсети и нотация CIDR 9.4. Маршруты и таблица маршрутизации ядра 9.5. Основные инструменты, использующие протокол ICMP и службу DNS 9.5.1. Команда ping 9.5.2. Команда traceroute 9.5.3. Служба DNS и хост 9.6. Физический уровень и сеть Ethernet 9.7. Понятие о сетевых интерфейсах ядра 9.8. Введение в конфигурирование сетевого интерфейса 9.9. Конфигурация сети, активизируемая при загрузке системы 9.10. Проблемы, связанные с конфигурацией сети вручную и при активизации во время загрузки системы 9.11. Менеджеры сетевой конфигурации 9.11.1. Работа менеджера NetworkManager 9.11.2. Взаимодействие с менеджером NetworkManager с помощью интерфейса 9.11.3. Конфигурация менеджера NetworkManager 9.12. Разрешение имени хоста 9.12.1. Файл /etc/hosts 9.12.2. Файл resolv.conf 9.12.3. Кэширование и службы DNS без конфигурирования 9.12.4. Файл /etc/nsswitch.conf 9.13 Локальный хост 9.14. Транспортный уровень: протоколы TCP, UDP и службы 9.14.1. Порты TCP и соединения 9.14.2. Установление TCP-соединений 9.14.3. Номера портов и файл /etc/services 9.14.4. Характеристики протокола TCP 9.14.5. Протокол UDP 9.15. Возвращаемся к простой локальной сети 9.16. Понятие о протоколе DHCP 9.16.1. Клиент DHCP в Linux 9.16.2. Серверы DHCP в Linux 9.17. Настройка Linux в качестве маршрутизатора 9.18. Частные сети 9.19. Преобразование сетевых адресов (маскировка IP-адреса) 9.20. Маршрутизаторы и Linux 9.21. Брандмауэры 9.21.1. Брандмауэр в Linux: основные понятия 9.21.2. Определение правил для брандмауэра 9.21.3. Стратегии для брандмауэров 9.22. Сеть Ethernet, протоколы IP и ARP 9.23. Беспроводная сеть Ethernet 9.23.1. Утилита iw 9.23.2. Безопасность беспроводных сетей 9.24. Резюме Глава 10. Сетевые приложения и службы 10.1. Основные понятия о службах 10.2. Сетевые серверы 10.3. Защищенная оболочка (SSH) 10.3.1. Сервер SSHD 10.3.2. Клиент SSH 10.4. Демоны inetd и xinetd 10.5. Инструменты диагностики 10.5.1. Команда lsof 10.5.2. Команда tcpdump 10.5.3. Команда netcat 10.5.4. Сканирование портов 10.6. Удаленный вызов процедур (RPC) 10.7. Сетевая безопасность 10.7.1. Типичные уязвимости 10.7.2. Онлайн-ресурсы, посвященные безопасности 10.8. Заглядывая вперед 10.9. Сокеты: как процессы взаимодействуют с сетью 10.10. Сокеты домена Unix 10.10.1. Преимущества для разработчиков 10.10.2. Просмотр списка сокетов домена Unix Глава 11. Введение в сценарии оболочки 11.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. Идентификатор процесса: $$ 11.3.6. Код выхода: $? 11.4. Коды выхода 11.5. Условные операторы 11.5.1. Немного о пустом списке параметров 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. Синтаксис heredoc 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. Основы команды 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.4. Совместное использование файлов с помощью пакета Samba 12.4.1. Конфигурирование сервера Samba 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.4.10. Доступ к файлам в качестве клиента 12.5. Клиенты NFS 12.6. Добавочные параметры и ограничения сетевой файловой системы Глава 13. Пользовательское окружение 13.1. Рекомендации по созданию файлов запуска 13.2. Когда изменять файлы запуска 13.3. Элементы файла запуска оболочки 13.3.1. Командный путь 13.3.2. Путь к страницам руководства 13.3.3. Приглашение 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. Переменная PAGER 13.6. Подводные камни в файлах запуска 13.7. Дальнейшие вопросы, связанные с запуском Глава 14. Краткий обзор рабочего стола Linux 14.1. Компоненты рабочего стола 14.1.1. Менеджеры окон 14.1.2. Инструментарий 14.1.3. Окружение рабочего стола 14.1.4. Приложения 14.2. Подробнее о системе X Window 14.2.1. Менеджеры дисплея 14.2.2. Прозрачность сети 14.3. Исследование X-клиентов 14.3.1. X-события 14.3.2. Понятие о X-вводе и настройка предпочтений 14.4. Будущее системы X Window 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. Заголовочные файлы (Include) и каталоги 15.1.3. Связывание с библиотеками 15.1.4. Совместно используемые библиотеки 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. Отладчики 15.4. Инструменты Lex и Yacc 15.5. Языки сценариев 15.5.1. Python 15.5.2. Perl 15.5.3. Другие языки сценариев 15.6. Java 15.7. Заглядывая вперед: компиляция программных пакетов Глава 16. Введение в программное обеспечение для компиляции кода на языке C 16.1. Системы для сборки программного обеспечения 16.2. Распаковка архива с исходным кодом на языке C 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.5. Применение исправлений 16.6. Устранение проблем при компиляции и установке 16.7. Заглядывая вперед Глава 17. Строим на фундаменте 17.1. Веб-серверы и приложения 17.2. Базы данных 17.3. Виртуализация 17.4. Распределенные вычисления и вычисления по запросу 17.5. Встроенные системы 17.6. Заключительные замечания Unlike some operating systems, Linux doesn’t try to hide the important bits from you—it gives you full control of your computer. But to truly master Linux, you need to understand its internals, like how the system boots, how networking works, and what the kernel actually does. In this completely revised second edition of the perennial best seller How Linux Works, author Brian Ward makes the concepts behind Linux internals accessible to anyone curious about the inner workings of the operating system. Inside, you’ll find the kind of knowledge that normally comes from years of experience doing things the hard way. You’ll learn: –How Linux boots, from boot loaders to init implementations (systemd, Upstart, and System V) –How the kernel manages devices, device drivers, and processes –How networking, interfaces, firewalls, and servers work –How development tools work and relate to shared libraries –How to write effective shell scripts You’ll also explore the kernel and examine key system tasks inside user space, including system calls, input and output, and filesystems. With its combination of background, theory, real-world examples, and patient explanations, How Linux Works will teach you what you need to know to solve pesky problems and take control of your operating system. In this completely revised second edition, Brian Ward makes accessible the concepts behind Linux internals to anyone curious about the inner workings of the operating system. Readers will learn: how Linux boots, from boot loaders to init implementations (systemd, Upstart, and System V); how the kernel manages devices, device drivers, and processes; how networking, interfaces, firewalls, and servers work; how development tools work and relate to shared libraries; how to write effective shell scripts. Readers also will explore the kernel and examine key system tasks inside user space, including system calls, input and output, and filesystems. -- Edited summary from book Brief Contents: xix xxiii The Big Picture Basic Commands and Directory Hierarchy Devices Disks and Filesystems System Configuration: Logging, System Time, Batch Jobs, and Users A Closer Look at Processes and Resource Utilization Understanding Your Network and Its Configuration Network Applications and Services Introduction to Shell Scripts Moving Files Across the Network User Environments A Brief Survey of the Linux Desktop Development Tools Introduction to Compiling Software from C Source Code Building on the Basics 351 355 The "hows" and "whys" of How Linux Works: for administrators, programmers, and enthusiasts who want to understand the inner workings of the best operating system. , , (How Linux Works: What Every Superuser Should Know by Brian Ward). Linux, , , Linux. Linux . , , . I wrote this book because I believe you should be able to learn what your computer does.