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

Для профессионалов.

Брайан Уорд "Внутреннее устройство Linux" Питер, 2015 год, 384 стр. (3,01 мб. fb2; 8,99 мб. pdf)

Система Linux - система с открытым исходным кодом. В основном все сборки (ядро + дистрибутивы пакетов) распространяются бесплатно. Некоторые из них, такие как: Linux Mint или Ubuntu - призваны упростить работу в операционной системе - начинающим. А к примеру знаменитый Android, так же построенный на ядре Linux, является лидером на рынке смартфонов и других мобильных гаджетов. занимая при этом лидирующую нишу в их производстве. Еще можно упомянуть Puppy Linux с небольшим объемом дистрибутива и скромными системными требованиями, возможностью работы на самых "древних" компьютерах.

Так нужна ли вам система Linux?

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

Собственно книга адресована профессионалам. Она состоит из семнадцати глав, где автор приводит последовательно информацию начиная от устройства Unix подобных систем и справочника по командам и утилитам, до сборки программного обеспечения, разработки сценариев и использования инструментов разработчика. "Вам не обязательно быть программистом, чтобы читать эту книгу" - пишет автор в книге. Чтобы читать - да! А что бы изучать - желательно знать немного больше чем среднестатистический пользователь компьютера. Просмотрите оглавление книги. Если, это то, что вы искали - вперед, изучайте! Система Linux ждет вас.
ISBN 978-5-496-01952-1

Оглавление книги.

Глава 1. Общая картина 23
1.1. Уровни и слои абстракции в операционной системе Linux 24
1.2. Аппаратные средства: оперативная память 25
1.3. Ядро 26
1.3.1. Управление процессами 27
1.3.2. Управление памятью 28
1.3.3. Драйверы устройств и управление ими 28
1.3.4. Системные вызовы и поддержка 29
1.4. Пространство пользователя 30
1.5. Пользователи 31
1.6. Заглядывая вперед 32

Глава 2. Основные команды и структура каталогов 33
2.1. Оболочка Bourne shell: /bin/sh 33
2.2. Использование оболочки 34
2.2.1. Окно оболочки 34
2.2.2. Команда cat 35
2.2.3. Стандартный ввод и стандартный вывод 35
2.3. Основные команды 36
2.3.1. Команда ls 36
2.3.2. Команда cp 37
2.3.3. Команда mv 37
2.3.4. Команда touch 37
2.3.5. Команда rm 37
2.3.6. Команда echo 38
2.4. Перемещение по каталогам 38
2.4.1. Команда cd 38
2.4.2. Команда mkdir 39
2.4.3. Команда rmdir 39
2.4.4. Универсализация файловых имен (джокерные символы) 39
2.5. Вспомогательные команды 40
2.5.1. Команда grep 40
2.5.2. Команда less 41
2.5.3. Команда pwd 42
2.5.4. Команда diff 42
2.5.5. Команда file 42
2.5.6. Команды find и locate 42
2.5.7. Команды head и tail 43
2.5.8. Команда sort 43
2.6. Изменение вашего пароля и оболочки 43
2.7. Файлы с точкой 44
2.8. Переменные окружения и оболочки 44
2.9. Командный путь 45
2.10. Специальные символы 45
2.11. Редактирование командной строки 46
2.12. Текстовые редакторы 47
2.13. Получение интерактивной справки 48
2.14. Ввод и вывод с помощью оболочки 49
2.14.1. Стандартная ошибка 50
2.14.2. Перенаправление стандартного ввода 51
2.15. Объяснение сообщений об ошибках 51
2.15.1. Структура сообщений об ошибке в Unix 51
2.15.2. Общие ошибки 52
2.16. Получение списка процессов и управление ими 53
2.16.1. Параметры команды ps 54
2.16.2. Завершение процессов 54
2.16.3. Управление заданиями 55
2.16.4. Фоновые процессы 55
2.17. Режимы файлов и права доступа 56
2.17.1. Изменение прав доступа 57
2.17.2. Символические ссылки 59
2.17.3. Создание символических ссылок 59
2.18. Архивирование и сжатие файлов 60
2.18.1. Команда gzip 60
2.18.2. Команда tar 60
2.18.3. Сжатые архивы (.tar.gz) 62
2.18.4. Команда zcat 62
2.18.5. Другие утилиты сжатия 62
2.19. Основные сведения об иерархии каталогов Linux 63
2.19.1. Другие корневые подкаталоги 65
2.19.2. Каталог /usr 65
2.19.3. Местоположение ядра 66
2.20. Запуск команд с правами пользователя superuser 66
2.20.1. Команда sudo 66
2.20.2. Файл /etc/sudoers 66
2.21. Заглядывая вперед 67

Глава 3. Устройства 68
3.1. Файлы устройств 68
3.2. Путь устройств sysfs 70
3.3. Команда dd и устройства 71
3.4. Сводка имен устройств 72
3.4.1. Жесткие диски: /dev/sd* 72
3.4.2. Приводы CD и DVD: /dev/sr* 73
3.4.3. Жесткие диски PATA: /dev/hd* 74
3.4.4. Терминалы: /dev/tty*, /dev/pts/* и /dev/tty 74
3.4.5. Последовательные порты: /dev/ttyS* 75
3.4.6. Параллельные порты: /dev/lp0 и /dev/lp1 75
3.4.7. Аудиоустройства: /dev/snd/*, /dev/dsp, /dev/audio и другие 76
3.4.8. Создание файлов устройств 76
3.5. Менеджер устройств udev 77
3.5.1. Файловая система devtmpfs 77
3.5.2. Работа и настройка менеджера udevd 78
3.5.3. Команда udevadm 80
3.5.4. Отслеживание устройств 81
3.6. Подробнее: интерфейс SCSI и ядро Linux 82
3.6.1. USB-хранилища и протокол SCSI 85
3.6.2. Интерфейсы SCSI и ATA 86
3.6.3. Обобщенные устройства SCSI 87
3.6.4. Методы коллективного доступа к одному устройству 87

Глава 4. Диски и файловые системы 89
4.1. Разделы дисковых устройств 90
4.1.1. Просмотр таблицы разделов 92
4.1.2. Изменение таблиц разделов 93
4.1.3. Диск и геометрия раздела 94
4.1.4. Твердотельные накопители (диски SSD) 96
4.2. Файловые системы 96
4.2.1. Типы файловых систем 97
4.2.2. Создание файловой системы 98
4.2.3. Монтирование файловой системы 99
4.2.4. Файловая система UUID 100
4.2.5. Буферизация диска, кэширование и файловые системы 101
4.2.6. Параметры монтирования файловой системы 102
4.2.7. Демонтирование файловой системы 103
4.2.8. Таблица файловой системы /etc/fstab 104
4.2.9. Альтернативы таблицы /etc/fstab 105
4.2.10. Мощность файловой системы 106
4.2.11. Проверка и восстановление файловых систем 107
4.2.12. Файловые системы специального назначения 109
4.3. Область подкачки 110
4.3.1. Использование раздела диска в качестве области подкачки 110
4.3.2. Использование файла в качестве области подкачки 111
4.3.3. Какой объем области подкачки необходим 111
4.4. Заглядывая вперед: диски и пространство пользователя 112
4.5. Внутри традиционной файловой системы 113
4.5.1. Просмотр деталей дескрипторов inode 115
4.5.2. Работа с файловыми системами в пространстве пользователя 116
4.5.3. Эволюция файловых систем 117

Глава 5. Как происходит загрузка ядра Linux 118
5.1. Сообщения при запуске 118
5.2. Инициализация ядра и параметры загрузки 120
5.3. Параметры ядра 120
5.4. Загрузчики системы 121
5.4.1. Задачи загрузчика системы 122
5.4.2. Общий обзор загрузчиков системы 123
5.5. Первое знакомство с загрузчиком GRUB 123
5.5.1. Выявление устройств и разделов с помощью командной строки загрузчика GRUB 126
5.5.2. Конфигурация загрузчика GRUB 128
5.5.3. Установка загрузчика GRUB 130
5.6. Проблемы с безопасной загрузкой UEFI 132
5.7. Передача управления загрузчикам других операционных систем 132
5.8. Детали загрузчика системы 133
5.8.1. Загрузка с применением таблицы MBR 133
5.8.2. Загрузка с применением интерфейса UEFI 133
5.8.3. Как работает загрузчик GRUB 134

Глава 6. Как запускается пространство пользователя 136
6.1. Знакомство с командой init 136
6.2. Уровни запуска команды System V 138
6.3. Определяем тип команды init 138
6.4. Команда systemd 139
6.4.1. Модули и типы модулей 139
6.4.2. Зависимости команды systemd 140
6.4.3. Конфигурация команды systemd 142
6.4.4. Работа команды systemd 145
6.4.5. Добавление модулей в команду systemd 147
6.4.6. Отслеживание процессов и синхронизация в команде systemd 148
6.4.7. Запуск по запросу и распараллеливание ресурсов в команде systemd 149
6.4.8. Совместимость команды systemd со сценариями System V 154
6.4.9. Команды, дополняющие systemd 154
6.5. Команда Upstart 155
6.5.1. Процедура инициализации команды Upstart 155
6.5.2. Задания команды Upstart 157
6.5.3. Конфигурация команды Upstart 159
6.5.4. Управление командой Upstart 163
6.5.5. Журналы команды Upstart 163
6.5.6. Уровни запуска команды Upstart и совместимость
со стандартом System V 164
6.6. Команда System V init 165
6.6.1. Команда System V init: командная последовательность запуска 167
6.6.2. Ферма ссылок команды System V init 168
6.6.3. Утилита run-parts 169
6.6.4. Управление командой System V init 169
6.7. Выключение системы 170
6.8. Начальная файловая система оперативной памяти 171
6.9. Аварийная загрузка системы и режим одиночного пользователя 173

Глава 7. Конфигурация системы: журнал, системное время, пакетные задания и пользователи 174
7.1. Структура каталога /etc 174
7.2. Системный журнал 175
7.2.1. Системный регистратор 175
7.2.2. Файлы конфигурации176
7.3. Файлы управления пользователями 178
7.3.1. Файл /etc/passwd 178
7.3.2. Особые пользователи 179
7.3.3. Файл /etc/shadow 180
7.3.4. Управление пользователями и паролями 180
7.3.5. Работа с группами 180
7.4. Команды getty и login 182
7.5. Настройка времени 182
7.5.1. Представление времени в ядре и часовые пояса 183
7.5.2. Сетевое время 184
7.6. Планирование повторяющихся задач с помощью службы cron 184
7.6.1. Установка файлов crontab 185
7.6.2. Системные файлы crontab 186
7.6.3. Будущее службы cron186
7.7. Планирование единовременных задач с помощью службы at 187
7.8. Идентификаторы пользователей и переключение между пользователями 187
7.9. Идентификация и аутентификация пользователей 190
7.10. Стандарт PAM 191
7.10.1. Конфигурация PAM 192
7.10.2. Примечания о стандарте PAM 196
7.10.3. Стандарт PAM и пароли 196
7.11. Заглядывая вперед 197

Глава 8. Подробное рассмотрение процессов и использования ресурсов 198
8.1. Отслеживание процессов 198
8.2. Поиск открытых файлов с помощью команды lsof 199
8.2.1. Чтение результатов вывода команды lsof 199
8.2.2. Использование команды lsof 200
8.3. Отслеживание выполнения команд и системных вызовов 201
8.3.1. Команда strace 201
8.3.2. Команда ltrace 202
8.4. Потоки 203
8.4.1. Однопоточные и многопоточные процессы 203
8.4.2. Просмотр потоков 204
8.5. Введение в отслеживание ресурсов 205
8.6. Измерение процессорного времени 205
8.7. Настройка приоритетов процессов 206
8.8. Средние значения загрузки 207
8.8.1. Использование команды uptime 207
8.8.2. Высокие значения загрузки 208
8.9. Память209
8.9.1. Как работает память 209
8.9.2. Ошибки из-за отсутствия страниц 209
8.10. Отслеживание производительности процессора и памяти с помощью команды vmstat 211
8.11. Отслеживание ввода/вывода 213
8.11.1. Использование команды iostat 213
8.11.2. Отслеживание использования ввода/вывода каждого процесса с помощью команды iotop 214
8.12. Отслеживание процессов с помощью команды pidstat 215
8.13. Дополнительные темы 216

Глава 9. Представление о сети и ее конфигурации 217
9.1. Основные понятия о сети 217
9.2. Сетевые уровни 218
9.3. Интернет-уровень 220
9.3.1. Просмотр IP-адресов компьютера 221
9.3.2. Подсети 222
9.3.3. Распространенные маски подсети и нотация CIDR 222
9.4. Маршруты и таблица маршрутизации ядра 223
9.5. Основные инструменты, использующие протокол ICMP и службу DNS 225
9.5.1. Команда ping 225
9.5.2. Команда traceroute 226
9.5.3. Служба DNS и хост 226
9.6. Физический уровень и сеть Ethernet 227
9.7. Понятие о сетевых интерфейсах ядра 228
9.8. Введение в конфигурирование сетевого интерфейса 228
9.9. Конфигурация сети, активизируемая при загрузке системы 230
9.10. Проблемы, связанные с конфигурацией сети вручную и при активизации во время загрузки системы 230
9.11. Менеджеры сетевой конфигурации 231
9.11.1. Работа менеджера NetworkManager 232
9.11.2. Взаимодействие с менеджером NetworkManager с помощью интерфейса 232
9.11.3. Конфигурация менеджера NetworkManager 233
9.12. Разрешение имени хоста 235
9.12.1. Файл /etc/hosts 235
9.12.2. Файл resolv.conf 236
9.12.3. Кэширование и службы DNS без конфигурирования 236
9.12.4. Файл /etc/nsswitch.conf 237
9.13. Локальный хост 237
9.14. Транспортный уровень: протоколы TCP, UDP и службы 238
9.14.1. Порты TCP и соединения 238
9.14.2. Установление TCP-соединений 239
9.14.3. Номера портов и файл /etc/services 240
9.14.4. Характеристики протокола TCP 240
9.14.5. Протокол UDP 241
9.15. Возвращаемся к простой локальной сети 243
9.16. Понятие о протоколе DHCP 243
9.16.1. Клиент DHCP в Linux 244
9.16.2. Серверы DHCP в Linux 244
9.17. Настройка Linux в качестве маршрутизатора 244
9.18. Частные сети 246
9.19. Преобразование сетевых адресов (маскировка IP-адреса) 247
9.20. Маршрутизаторы и Linux 248
9.21. Брандмауэры 249
9.21.1. Брандмауэр в Linux: основные понятия 250
9.21.2. Определение правил для брандмауэра 251
9.21.3. Стратегии для брандмауэров 253
9.22. Сеть Ethernet, протоколы IP и ARP 254
9.23. Беспроводная сеть Ethernet 256
9.23.1. Утилита iw 257
9.23.2. Безопасность беспроводных сетей 258
9.24. Резюме 258

Глава 10. Сетевые приложения и службы 259
10.1. Основные понятия о службах 259
10.2. Сетевые серверы 262
10.3. Защищенная оболочка (SSH) 262
10.3.1. Сервер SSHD 263
10.3.2. Клиент SSH 266
10.4. Демоны inetd и xinetd 267
10.5. Инструменты диагностики 268
10.5.1. Команда lsof 269
10.5.2. Команда tcpdump 270
10.5.3. Команда netcat 272
10.5.4. Сканирование портов 272
10.6. Удаленный вызов процедур (RPC) 273
10.7. Сетевая безопасность 274
10.7.1. Типичные уязвимости 275
10.7.2. Онлайн-ресурсы, посвященные безопасности 276
10.8. Заглядывая вперед 276
10.9. Сокеты: как процессы взаимодействуют с сетью 277
10.10. Сокеты домена Unix 278
10.10.1. Преимущества для разработчиков 278
10.10.2. Просмотр списка сокетов домена Unix 279

Глава 11. Введение в сценарии оболочки 280
11.1. Основы сценариев оболочки 280
11.2. Кавычки и литералы 281
11.2.1. Литералы 282
11.2.2. Одинарные кавычки 282
11.2.3. Двойные кавычки 283
11.2.4. Передача одинарной кавычки в литерале 283
11.3. Специальные переменные 284
11.3.1. Индивидуальные аргументы: $1, $2284
11.3.2. Количество аргументов: $# 285
11.3.3. Все аргументы: $@ 285
11.3.4. Имя сценария: $0285
11.3.5. Идентификатор процесса: $$ 286
11.3.6. Код выхода: $? 286
11.4. Коды выхода 286
11.5. Условные операторы 287
11.5.1. Немного о пустом списке параметров 288
11.5.2. Использование других команд для проверки условий 288
11.5.3. Ключевое слово elif 288
11.5.4. Логические конструкции && и || 289
11.5.5. Проверка условий 289
11.5.6. Сопоставление строк с помощью конструкции case 292
11.6. Циклы 293
11.6.1. Цикл for 293
11.6.2. Цикл while 293
11.7. Подстановка команд 294
11.8. Управление временным файлом 295
11.9. Синтаксис heredoc296
11.10. Основные утилиты в сценариях оболочки 296
11.10.1. Команда basename 297
11.10.2. Команда awk 297
11.10.3. Команда sed 297
11.10.4. Команда xargs 298
11.10.5. Команда expr 299
11.10.6. Команда exec 299
11.11. Подоболочки 300
11.12. Включение других файлов в сценарии 300
11.13. Чтение пользовательского ввода 301
11.14. Когда (не) использовать сценарии оболочки 301

Глава 12. Передача файлов по сети 302
12.1. Быстрое копирование 302
12.2. Команда rsync 302
12.2.1. Основы команды rsync 303
12.2.2. Создание точной копии структуры каталога 304
12.2.3. Использование завершающей косой черты 305
12.2.4. Исключение файлов и каталогов 306
12.2.5. Целостность переноса, меры предосторожности и подробные режимы 307
12.2.6. Сжатие 308
12.2.7. Ограничение ширины полосы пропускания 308
12.2.8. Перенос файлов на ваш компьютер 308
12.2.9. Дальнейшие темы, относящиеся к команде rsync 308
12.3. Введение в совместное использование файлов 309
12.4. Совместное использование файлов с помощью пакета Samba 309
12.4.1. Конфигурирование сервера Samba 310
12.4.2. Контроль доступа к серверу 311
12.4.3. Пароли 311
12.4.4. Запуск сервера 313
12.4.5. Диагностические файлы и журналы 313
12.4.6. Конфигурирование совместного использования файлов 313
12.4.7. Домашние каталоги 314
12.4.8. Совместное использование принтеров 314
12.4.9. Использование клиента Samba 315
12.4.10. Доступ к файлам в качестве клиента 315
12.5. Клиенты NFS 316
12.6. Добавочные параметры и ограничения сетевой файловой системы 317

Глава 13. Пользовательское окружение 319
13.1. Рекомендации по созданию файлов запуска 319
13.2. Когда изменять файлы запуска 320
13.3. Элементы файла запуска оболочки 320
13.3.1. Командный путь 320
13.3.2. Путь к страницам руководства 321
13.3.3. Приглашение 322
13.3.4. Псевдонимы 322
13.3.5. Маска прав доступа 323
13.4. Порядок следования файлов запуска. Примеры 323
13.4.1. Оболочка bash 323
13.4.2. Оболочка tcsh 326
13.5. Пользовательские настройки по умолчанию 327
13.5.1. Параметры по умолчанию для оболочки 327
13.5.2. Редактор 328
13.5.3. Переменная PAGER 328
13.6. Подводные камни в файлах запуска 328
13.7. Дальнейшие вопросы, связанные с запуском 329

Глава 14. Краткий обзор рабочего стола Linux 330
14.1. Компоненты рабочего стола 330
14.1.1. Менеджеры окон 331
14.1.2. Инструментарий 331
14.1.3. Окружение рабочего стола 332
14.1.4. Приложения 332
14.2. Подробнее о системе X Window 332
14.2.1. Менеджеры дисплея 333
14.2.2. Прозрачность сети 333
14.3. Исследование X-клиентов 334
14.3.1. X-события 334
14.3.2. Понятие о X-вводе и настройка предпочтений 336
14.4. Будущее системы X Window 338
14.5. Шина D-Bus 339
14.5.1. Системный и сеансовый экземпляры 339
14.5.2. Отслеживание сообщений шины D-Bus 340
14.6. Печать 340
14.6.1. Система CUPS 341
14.6.2. Преобразование формата и фильтры печати 341
14.7. Другие темы, относящиеся к рабочему столу 342

Глава 15. Инструменты разработчика 343
15.1. Компилятор C 343
15.1.1. Исходный код в виде нескольких файлов 344
15.1.2. Заголовочные файлы (Include) и каталоги 345
15.1.3. Связывание с библиотеками 347
15.1.4. Совместно используемые библиотеки 348
15.2. Утилита make 352
15.2.1. Пример файл Makefile 353
15.2.2. Встроенные правила 354
15.2.3. Окончательная сборка программы 354
15.2.4. Поддержание актуальных версий файлов 354
15.2.5. Аргументы и параметры командной строки 355
15.2.6. Стандартные макроопределения и переменные 356
15.2.7. Обычные цели 357
15.2.8. Устройство файла Makefile 357
15.3. Отладчики 358
15.4. Инструменты Lex и Yacc 359
15.5. Языки сценариев 360
15.5.1. Python361
15.5.2. Perl 361
15.5.3. Другие языки сценариев 361
15.6. Java 362
15.7. Заглядывая вперед: компиляция программных пакетов 363

Глава 16. Введение в программное обеспечение для компиляции кода на языке C 364
16.1. Системы для сборки программного обеспечения 365
16.2. Распаковка архива с исходным кодом на языке C 365
16.3. Утилита GNU Autoconf 366
16.3.1. Пример работы утилиты Autoconf 367
16.3.2. Установка с помощью инструментов для создания пакетов 368
16.3.3. Параметры сценария configure 369
16.3.4. Переменные окружения 369
16.3.5. Цели утилиты Autoconf 371
16.3.6. Файлы журналов утилиты Autoconf 371
16.3.7. Команда pkg-config 371
16.4. Практика установки 373
16.5. Применение исправлений 374
16.6. Устранение проблем при компиляции и установке 375
16.7. Заглядывая вперед 377

Глава 17. Строим на фундаменте 379
17.1. Веб-серверы и приложения 379
17.2. Базы данных 380
17.3. Виртуализация 381
17.4. Распределенные вычисления и вычисления по запросу 381
17.5. Встроенные системы 382
17.6. Заключительные замечания 383

Скачать книгу бесплатно3,01 мб. fb2 Скачать книгу бесплатно8,99 мб. pdf