Как работает Linux.

Брайан Вард

Первая публикация на английском языке: 21 ноября 2014

Доступен профессиональный перевод: издательство Питер

 Восхваление первого издания

 Вступление

 Кто должен читать эту книгу?

 Необходимые навыки

 Как читать эту книгу

 Практический подход

 Как построена эта книга

 Что нового во втором издании?

 Замечания по терминологии

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

 Об авторах

 Содержание

Вводные материалы
Авторские права
Восхваление первого издания
Вступление
Кто должен читать эту книгу?
Необходимые навыки
Как читать эту книгу
Практический подход
Как построена эта книга
Что нового во втором издании?
Замечания по терминологии
Благодарности
Об авторах
Оглавление
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: /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 Опции командной строки
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 Просмотр подробностей индексных дескрипторов
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 System V совместимость systemd
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.8.1 Владелец процесса, эффективный UID, действительный UID и сохраненный UID
7.9 Идентификация и аутентификация пользователей
7.9.1 Использование библиотек для информации о пользователе
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.1.1 Пакеты
9.2 Уровни сетевой среды
9.3 Уровень интернета
9.3.1 Просмотр IP адресов вашего компьютера
9.3.2 Подсети
9.3.3 Общие маски подсети и нотация CIDR
9.4 Маршруты и таблица маршрутизации ядра
9.4.1 Шлюз по умолчанию
9.5 Основные инструменты ICMP и DNS
9.5.1 ping
9.5.2 traceroute
9.5.3 DNS и host
9.6 Физический уровень и Ethernet
9.7 Понимание сетевых интерфейсов ядра
9.8 Введение в настройку сетевых интерфейсов
9.8.1 Добавление и удаление маршрутов вручную
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 Localhost
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 Клиент Linux DHCP
9.16.2 Сервер Linux DHCP
9.17 Настройка Linux в роли маршрутизатора
9.17.1 Обратный канал интернет
9.18 Частные сетевые среды
9.19 Трансляция сетевых адресов (NAT, IP Masquerading)
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.1.1 Более подробное рассмотрение
10.2 Сетевые серверы
10.3 Безопасная оболочка (SSH)
10.3.1 Сервер SSHD
10.3.2 Клиент SSH
10.4 Демоны inetd и xinetd
10.4.1 TCP Wrappers: tcpd, /etc/hosts.allow и /etc/hosts.deny
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 Сокеты межпроцессного взаимодействия (UDS)
10.10.1 Преимущества для разработчиков
10.10.2 Список сокетов межпроцессного взаимодействия
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 Идентификатор процесса: $$
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 Документы "как есть"
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 Настройка сервера
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.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 Инструментарий
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
14.5 D-Bus
14.5.1 Экземпляры системы и сеанса
14.5.2 Отслеживание сообщений D-Bus
14.6 Печать
14.16.1 CUPS
14.6.2 Преобразование форматов и фильтры печати
14.7 Другие темы рабочего стола
15. Инструменты разработки
15.1 Компилятор C
15.1.1 Множественность исходных файлов
15.1.2 Файлы и каталоги заголовков
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.2.1 С чего начать
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.2 Базы данных
17.2.1 Типы баз данных
17.3 Виртуализация
17.4 Распределенные вычисления и вычисления по запросу
17.5 Встроенные системы
17.6 Заключительные замечания
Дополнение А. Библиография, Указатель