Опубликовано

Вышло второе издание книги “Командная строка Linux”

Командная строка Linux, 2 изд. (серия "Профессиональное программирование")

Рассмотрены задачи, которые выполняются из командной строки операционной системы Linux. Объясняется, как попасть в командную строку, работать в консоли, настраивать систему с помощью программ, обладающих только текстовым интерфейсом. Описаны особенности файловой системы Linux, наиболее полезные команды для работы с текстом, сетью и Интернетом, а также команды системного администратора. Особое внимание уделено написанию сценариев автоматизации рутинных задач на языках командных оболочек bash и tcsh. Рассмотрены способы перенаправления ввода-вывода, маски и псевдонимы, различные варианты запуска программ, эффективные приемы использования клавиатуры, примеры сложных команд и другие вопросы.

Во втором издании особое внимание уделено задачам системного администратора – разметке диска, восстановлению загрузчика, в том числе при использовании жестких дисков на основе GPT/UEFI, установке пакетов, мониторингу системы и автоматизации на языках оболочек bash.
Для системных администраторов, программистов и квалифицированных пользователей Linux

Для системных администраторов, программистов и квалифицированных пользователей Linux

Эффективная работа в командной строке Linux

Настоящий линуксоид должен уметь работать в консоли, что требует определенной квалификации пользователя. Рассмотрены задачи, которые выполняются из командной строки Linux. Объясняется, как попасть в командную строку, работать в консоли, настраивать систему с помощью программ, обладающих только текстовым интерфейсом. Описаны особенности файловой системы Linux, наиболее полезные команды для работы с текстом, сетью и  Интернетом, а также команды системного администратора. Особое внимание уделено написанию сценариев автоматизации рутинных задач на языках командных оболочек bash и tcsh. Рассмотрены способы  перенаправления ввода-вывода, маски и псевдонимы, различные варианты запуска программ, эффективные приемы использования клавиатуры, примеры сложных команд и другие вопросы.

  • Работа в консоли
  • Автоматизация на языках оболочек bash и tcsh
  • Особенности файловой системы Linux
  • Управление процессами
  • Команды системного администратора
  • Команды для обработки текста и для работы в сети

Книгу “Командная строка Linux, 2 изд.“.

Глава 1. Командная строка: основы основ………………………………………………. 9

1.1. Переключаемся из графического режима в консоль………………………………………………………….. 9

1.2. Графические (псевдо)-терминалы……………………………………………………………………………………… 12

1.3. Удаленная консоль……………………………………………………………………………………………………………… 14

1.4. Завершение работы из консоли. Команды poweroff, halt, reboot, shutdown………………….. 15

Глава 2. Работаем в консоли………………………………………………………………….. 17

2.1. Ввод команд. Команда man……………………………………………………………………………………………….. 17

2.2. Ввод/вывод и каналы………………………………………………………………………………………………………….. 18

2.3. Шесть полезных команд…………………………………………………………………………………………………….. 20

2.3.1. Команда wc……………………………………………………………………………………………………………………. 20

2.3.2. Команда head………………………………………………………………………………………………………………… 21

2.3.3. Команда cut…………………………………………………………………………………………………………………… 21

2.3.4. Команда grep…………………………………………………………………………………………………………………. 22

2.3.5. Команда sort………………………………………………………………………………………………………………….. 23

2.3.6. Команда uniq…………………………………………………………………………………………………………………. 24

Глава 3. Оболочка bash………………………………………………………………………….. 26

3.1. Маски имен файлов…………………………………………………………………………………………………………….. 26

3.2. Переменные окружения………………………………………………………………………………………………………. 27

3.3. Псевдонимы…………………………………………………………………………………………………………………………. 28

3.4. Изменение приглашения командной строки…………………………………………………………………….. 28

3.5. Еще раз о перенаправлении ввода/вывода………………………………………………………………………. 30

3.6. Пробелы в именах файлов………………………………………………………………………………………………….. 31

3.7. Инициализация переменных………………………………………………………………………………………………. 32

3.8. Просмотр истории команд…………………………………………………………………………………………………. 32

3.9. Вызов предыдущих команд……………………………………………………………………………………………….. 33

3.10. Защита от случайного удаления файла…………………………………………………………………………. 34

3.11. Использование последнего вывода команды…………………………………………………………………. 34

3.12. Редактирование командной строки…………………………………………………………………………………. 34

Глава 4. Файловая система. Команды для работы с файловой системой… 36

4.1. Особенности файловой системы Linux……………………………………………………………………………… 36

4.1.1. Имена файлов в Linux…………………………………………………………………………………………………… 36

4.1.2. Файлы и устройства……………………………………………………………………………………………………… 36

4.1.3. Корневая файловая система и монтирование…………………………………………………………….. 37

4.1.4. Стандартные каталоги Linux………………………………………………………………………………………. 38

4.2. Команды для работы с файлами и каталогами……………………………………………………………….. 39

4.2.1. Работа с файлами………………………………………………………………………………………………………….. 39

4.2.2. Работа с каталогами…………………………………………………………………………………………………….. 42

4.2.3. Удобная навигация по файловой системе…………………………………………………………………… 44

4.3. Команда ln: создание ссылок…………………………………………………………………………………………….. 47

4.4. Команды chmod, chown и chattr…………………………………………………………………………………………. 48

4.4.1. Команда chmod: права доступа к файлам и каталогам…………………………………………….. 48

4.4.2. Команда chown: смена владельца файла…………………………………………………………………… 50

4.4.3. Специальные права доступа: SUID и SGID………………………………………………………………… 50

4.4.4. Команда chattr: атрибуты файла, запрет изменения файла……………………………………… 51

4.5. Монтирование файловых систем………………………………………………………………………………………. 52

4.5.1. Команды mount и umount……………………………………………………………………………………………… 52

4.5.2. Файлы устройств и монтирование………………………………………………………………………………. 54

Жесткие диски………………………………………………………………………………………………………………….. 54

Приводы оптических дисков…………………………………………………………………………………………… 56

Флешки и внешние жесткие диски………………………………………………………………………………….. 56

4.5.3. Опции монтирования файловых систем……………………………………………………………………… 56

4.5.4. Монтирование разделов при загрузке………………………………………………………………………… 58

4.5.5. Подробно о UUID и файле /etc/fstab……………………………………………………………………………. 60

4.5.6. Монтирование флешек…………………………………………………………………………………………………. 62

4.6. Настройка журнала файловой системы ext3/ext4…………………………………………………………… 63

4.7. Файловая система ext4……………………………………………………………………………………………………….. 64

4.7.1. Сравнение ext3 и ext4…………………………………………………………………………………………………… 64

4.7.2. Совместимость с ext3……………………………………………………………………………………………………. 65

4.8. Особые команды…………………………………………………………………………………………………………………. 66

4.8.1. Команда mkfs: создание файловой системы……………………………………………………………….. 66

4.8.2. Команда fsck: проверка и восстановление файловой системы…………………………………. 66

4.8.3. Команда chroot: смена корневой файловой системы………………………………………………… 67

4.8.4. Установка скорости CD/DVD………………………………………………………………………………………. 67

4.8.5. Монтирование каталога к каталогу……………………………………………………………………………. 67

4.8.6. Команды поиска файлов………………………………………………………………………………………………. 67

4.9. Многофункциональная команда dd………………………………………………………………………………….. 69

4.9.1. Копирование файлов с помощью команды dd……………………………………………………………. 69

4.9.2. Разделение файла на несколько частей………………………………………………………………………. 70

4.9.3. Создание резервной копии жесткого диска………………………………………………………………… 71

4.9.4. Создание архива с резервной копией всего жесткого диска…………………………………….. 71

4.9.5. Уничтожение всех данных раздела жесткого диска………………………………………………….. 71

4.10. Команда du………………………………………………………………………………………………………………………… 72

Глава 5. Процессы…………………………………………………………………………………. 73

5.1. Оболочки, команды и программы……………………………………………………………………………………… 73

5.2. Родительский и дочерний процессы………………………………………………………………………………….. 74

5.3. Команды kill, killall, xkill и ps…………………………………………………………………………………………….. 75

5.4. Программы top и htop: кто больше всех расходует процессорное время?……………………. 77

5.5. Команды nice и renice: изменение приоритета процесса………………………………………………… 80

5.6. Команда fuser: кто открыл ресурс?…………………………………………………………………………………… 80

5.7. Команда lsof………………………………………………………………………………………………………………………… 80

5.8. Команды управления сервисами……………………………………………………………………………………….. 81

5.9. Команда journalctl……………………………………………………………………………………………………………… 82

Глава 6. Выполнение команд и установка программ……………………………… 85

6.1. Списки………………………………………………………………………………………………………………………………….. 85

6.1.1. Условные списки…………………………………………………………………………………………………………… 85

6.1.2. Безусловные списки………………………………………………………………………………………………………. 86

6.2. Подстановка………………………………………………………………………………………………………………………… 87

6.2.1. Подстановка команды………………………………………………………………………………………………….. 87

6.2.2. Подстановка процесса………………………………………………………………………………………………….. 88

6.3. Команда как строка……………………………………………………………………………………………………………. 89

6.3.1. Передача команды в виде аргумента………………………………………………………………………….. 89

6.3.2. Перенаправление команды на стандартный ввод bash…………………………………………….. 89

6.4. Удаленное выполнение команды по SSH…………………………………………………………………………. 90

6.5. Фоновое выполнение команд…………………………………………………………………………………………….. 90

6.6. Команда nohup……………………………………………………………………………………………………………………. 92

6.7. Планировщик cron………………………………………………………………………………………………………………. 92

6.8. Установка программ командой apt…………………………………………………………………………………… 94

6.9. Установка программ командой dnf…………………………………………………………………………………… 96

Глава 7. Некоторые полезные команды…………………………………………………. 97

7.1. Команда seq…………………………………………………………………………………………………………………………. 97

7.2. Фигурные скобки…………………………………………………………………………………………………………………. 98

7.3. Команда find……………………………………………………………………………………………………………………….. 98

7.4. Команды zip и unzip……………………………………………………………………………………………………………. 99

7.5. Команда tar……………………………………………………………………………………………………………………….. 100

Глава 8. Команды для работы с текстом………………………………………………. 102

8.1. Команда sort: сортировка файлов…………………………………………………………………………………… 102

8.2. Команда diff: сравнение файлов……………………………………………………………………………………… 102

8.3. Команда diff3: сравнение трех файлов…………………………………………………………………………… 103

8.4. Команда cmp: сравнение двух файлов……………………………………………………………………………. 104

8.5. Команда comm: еще одна команда для сравнения файлов…………………………………………… 104

8.6. Команда column: разбивка текста на столбцы………………………………………………………………. 105

8.7. Команда egrep: расширенный текстовый фильтр………………………………………………………….. 105

8.8. Команда expand: замена символов табуляции пробелами…………………………………………… 106

8.9. Команда fmt……………………………………………………………………………………………………………………….. 107

8.10. Команда fold……………………………………………………………………………………………………………………. 107

8.11. Команда grep: текстовый фильтр………………………………………………………………………………….. 107

8.12. Команды more и less: постраничный вывод…………………………………………………………………. 108

8.13. Команды head и tail: вывод начала и хвоста файла…………………………………………………… 108

8.14. Команда look…………………………………………………………………………………………………………………… 108

8.15. Команда split: разбиение файлов на несколько частей………………………………………………. 108

8.16. Команда unexpand: замена пробелов символами табуляции…………………………………….. 109

8.17. Команды vi, nano, ee, mcedit, pico: текстовые редакторы…………………………………………… 109

8.18. Команда sed: потоковый текстовый редактор……………………………………………………………… 113

8.19. Команда wc: подсчет слов в файле……………………………………………………………………………….. 114

8.20. Команда gpg: шифруем файлы паролем………………………………………………………………………. 114

8.21. Некоторые команды преобразования символов и форматов……………………………………… 116

Глава 9. Эффективное использование клавиатуры………………………………. 117

9.1. Работа с окнами………………………………………………………………………………………………………………… 117

9.2. Доступ к веб-браузерам из командной строки……………………………………………………………….. 119

9.3. Работаем с буфером обмена…………………………………………………………………………………………….. 121

Глава 10. Команды для работы с сетью и Интернетом…………………………. 123

10.1. Команда ifconfig: управление сетевыми интерфейсами……………………………………………… 123

10.2. Команда ip………………………………………………………………………………………………………………………. 125

10.3. Маршрутизация………………………………………………………………………………………………………………. 126

10.3.1. Команда netstat: просмотр таблицы маршрутизации
и другой сетевой информации……………………………………………………………………………………………… 126

10.3.2. Команда route: изменение таблицы маршрутизации……………………………………………. 130

10.4. Команды получения информации об узле……………………………………………………………………. 133

10.4.1. Получение информации о доменном имени……………………………………………………………. 133

10.4.2. Команды host и dig……………………………………………………………………………………………………. 133

10.4.3. Утилита DMitry…………………………………………………………………………………………………………. 135

10.5. Текстовые браузеры……………………………………………………………………………………………………….. 135

10.6. Команда ftp: FTP-клиент………………………………………………………………………………………………… 136

10.7. Команда wget: загрузка файлов…………………………………………………………………………………….. 137

10.8. Команды для диагностики сети…………………………………………………………………………………….. 139

10.9. Команда ssh…………………………………………………………………………………………………………………….. 143

10.10. Сетевой сканер nmap……………………………………………………………………………………………………. 145

10.10.1. Что такое nmap?………………………………………………………………………………………………………. 145

10.10.2. Где мне взять nmap?………………………………………………………………………………………………… 146

10.10.3. Примеры использования nmap………………………………………………………………………………. 146

10.11. Команда systemd-resolve………………………………………………………………………………………………. 148

10.12. Команда netplan……………………………………………………………………………………………………………. 149

10.13. Команда ufw………………………………………………………………………………………………………………….. 150

Глава 11. Команды системного администратора………………………………….. 152

11.1. Программы разметки диска……………………………………………………………………………………………. 152

11.1.1. Программа fdisk………………………………………………………………………………………………………… 152

11.1.2. Программа Parted……………………………………………………………………………………………………… 155

11.1.3. Таблица разделов GPT……………………………………………………………………………………………… 159

11.1.4. Разметка диска на физическом сервере…………………………………………………………………… 160

11.1.5. Добавление диска на виртуальном сервере…………………………………………………………… 161

11.1.6. Расширение существующего диска…………………………………………………………………………. 164

11.1.7. Команды восстановления загрузчика GRUB2……………………………………………………….. 166

Восстановление загрузчика GRUB2 при использовании UEFI…………………………………. 166

Команда boot-repair………………………………………………………………………………………………………. 167

11.2. Информация о системе и пользователях………………………………………………………………………. 167

11.2.1. Команда uptime: информация о работе системы…………………………………………………… 167

11.2.2. Команда users: информация о пользователях………………………………………………………… 168

11.2.3. Команды w, who, ftpwho и whoami: информация о пользователях………………………. 168

11.2.4. Команды last и id………………………………………………………………………………………………………. 169

11.2.5. Мониторинг работы системы………………………………………………………………………………….. 169

11.2.6. Команды uname и lsb_release…………………………………………………………………………………… 172

11.2.7. Команда sensors………………………………………………………………………………………………………… 172

11.3. Команды date и timedatectl…………………………………………………………………………………………….. 173

11.4. Планировщик at………………………………………………………………………………………………………………. 174

11.4.1. Команда at: добавление задания…………………………………………………………………………….. 174

11.4.2. Команды atq и atrm: очередь заданий и удаление задания………………………………….. 175

11.5. Планировщик crond………………………………………………………………………………………………………… 175

11.6. Команды free и df: информация о системных ресурсах………………………………………………. 175

11.7. Команды управления пользователями…………………………………………………………………………. 176

11.8. Получение информации об оборудовании…………………………………………………………………… 176

11.8.1. Команда dmesg………………………………………………………………………………………………………….. 176

11.8.2. Команда lscpu: получение информации о процессоре………………………………………….. 177

11.8.3. Команда lsusb: список USB-устройств……………………………………………………………………. 178

11.8.4. Команда lspci: список PCI-устройств……………………………………………………………………… 178

11.8.5. Команда lshw: получение информации об устройствах……………………………………….. 179

11.8.6. Команда dmidecode…………………………………………………………………………………………………… 179

11.8.7. Команда lsblk…………………………………………………………………………………………………………….. 181

11.8.8. Команда badblocks……………………………………………………………………………………………………. 182

11.9. Команда rsync…………………………………………………………………………………………………………………. 182

Глава 12. Автоматизация рутинных задач с помощью оболочки bash….. 184

12.1. Настройка bash……………………………………………………………………………………………………………….. 184

12.2. Автоматизация задач с помощью сценариев bash………………………………………………………. 185

12.3. Привет, мир!…………………………………………………………………………………………………………………….. 185

12.4. Использование переменных в собственных сценариях………………………………………………. 186

12.5. Передача параметров сценарию…………………………………………………………………………………… 187

12.6. Массивы и bash……………………………………………………………………………………………………………….. 188

12.7. Циклы……………………………………………………………………………………………………………………………….. 188

12.8. Условные операторы……………………………………………………………………………………………………… 189

12.9. Функции…………………………………………………………………………………………………………………………… 191

12.10. Примеры сценариев………………………………………………………………………………………………………. 191

12.10.1. Сценарий мониторинга журнала………………………………………………………………………….. 191

12.10.2. Переименование файлов………………………………………………………………………………………… 192

12.10.3. Преобразование систем счисления……………………………………………………………………….. 192

12.10.4. Проверка прав пользователя…………………………………………………………………………………. 193

12.10.5. Генератор имени временного файла…………………………………………………………………….. 193

12.10.6. Проверка свободного дискового пространства с уведомлением
по электронной почте…………………………………………………………………………………………………………… 194

Глава 13. Примеры полезных решений………………………………………………… 195

13.1. Поиск дубликатов файлов……………………………………………………………………………………………… 195

13.2. Сценарий scanner……………………………………………………………………………………………………………. 196

13.3. Изменение прав доступа к файлам и каталогам………………………………………………………….. 197

13.4. Аварийный перезапуск сервисов…………………………………………………………………………………… 197

13.4.1. Проверка работоспособности веб-сервера…………………………………………………………….. 197

13.4.2. Проверка работоспособности MySQL……………………………………………………………………. 198

13.4.3. Если «падают» процессы…………………………………………………………………………………………. 198

13.5. Поиск битых ссылок с помощью AWK………………………………………………………………………….. 199

13.6. Считаем количество файлов в папке и подпапках………………………………………………………. 200

13.7. Резервное копирование базы данных……………………………………………………………………………. 200

Предметный указатель…………………………………………………………………………. 202

Опубликовано

Вышло 9-е издание “Linux. От новичка к профессионалу.”

Linux. От новичка к профессионалу. 9 изд.

Даны ответы на все вопросы, возникающие при работе с Linux: от установки и настройки этой ОС до настройки сервера на базе Linux. Материал книги максимально охватывает все сферы применения Linux от запуска Windows-игр под управлением Linux до настройки собственного веб-сервера. Также рассмотрены: вход в систему, работа с файловой системой, использование графического интерфейса, установка программного обеспечения, настройка сети и Интернета, работа в Интернете, средства безопасности, резервное копирование, защита от вирусов и другие вопросы. Материал ориентирован на последние версии дистрибутивов Fedora, openSUSE, Ubuntu.

В девятом издании все главы актуализированы или написаны заново. Рассмотрено создание мини-серверной, сервера видеонаблюдения и DLNA-сервера. Описаны менеджер виртуальных машин KVM и его веб-интерфейс, настройка сети с помощью Netplan и сервис Steam, позволяющий запускать популярные игры в Linux.

На сайте издательства находятся  дополнительные главы в PDF-файлах.

Для широкого круга пользователей Linux

  • Fedora 33, zRAM
  • Варианты загрузки Linux и управление загрузкой
  • Работа с файловой системой и устройствами в Linux
  • Файловая система Btrfs, UUID накопителей, загрузчик GRUB2
  • Настройка сети, Интернета и популярных серверов Apache, ProFTPD, Samba, BIND и др.
  • Настройка SSL-сертифката, ускорение веб-сервера с помощью Memcached и Google PageSpeed
  • Брандмауэр ufw
  • Выбор VPS/VDS-сервера и его настройка
  • Программные системы хранения данных с резервированием

Книгу “Linux. От новичка к профессионалу. 9 изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 17

Что нового в девятом издании…………………………………………………………………………………………………… 17

Часть I. Выбор и установка дистрибутива…………………………… 19

Глава 1. Выбор дистрибутива………………………………………………………………… 21

1.1. Краткая история Linux……………………………………………………………………………………………………….. 23

1.2. Какой дистрибутив лучше?……………………………………………………………………………………………….. 25

1.2.1. Red Hat и Mandrake/Mandriva/Mageia……………………………………………………………………….. 26

1.2.2. Fedora……………………………………………………………………………………………………………………………… 26

1.2.3. CentOS……………………………………………………………………………………………………………………………. 27

1.2.4. ALT Linux………………………………………………………………………………………………………………………. 28

1.2.5. Debian…………………………………………………………………………………………………………………………….. 28

1.2.6. Ubuntu…………………………………………………………………………………………………………………………….. 28

1.2.7. Slackware………………………………………………………………………………………………………………………… 29

1.2.8. openSUSE……………………………………………………………………………………………………………………….. 30

1.3. На каком дистрибутиве основать сервер?………………………………………………………………………… 30

Глава 2. Особенности установки……………………………………………………………. 32

2.1. Системные требования……………………………………………………………………………………………………….. 32

2.2. Первоначальная загрузка…………………………………………………………………………………………………… 34

2.2.1. POST и загрузчики…………………………………………………………………………………………………………. 34

2.2.2. Ядро Linux и его параметры………………………………………………………………………………………… 34

2.3. Проверка носителей……………………………………………………………………………………………………………. 38

2.4. Изменение таблицы разделов…………………………………………………………………………………………….. 39

2.4.1. Разметка диска в Fedora 39–40…………………………………………………………………………………….. 39

2.4.2. Разметка диска в Ubuntu………………………………………………………………………………………………. 43

2.4.3. Разметка диска в openSUSE………………………………………………………………………………………….. 45

2.4.4. Шифрование файловой системы………………………………………………………………………………….. 47

2.5. Выбор устанавливаемых пакетов программ……………………………………………………………………. 48

2.6. Выбор графической среды…………………………………………………………………………………………………. 49

2.7. Установка пароля root………………………………………………………………………………………………………… 51

2.8. Создание учетных записей пользователей………………………………………………………………………. 52

2.9. Порядок установки операционных систем……………………………………………………………………….. 52

2.10. Установка Linux по сети…………………………………………………………………………………………………… 52

2.10.1. Немного о загрузке и установке по сети…………………………………………………………………… 52

2.10.2. Подготовка загрузочного сервера…………………………………………………………………………….. 53

Установка DHCP-сервера………………………………………………………………………………………………… 53

Настройка TFTP-сервера…………………………………………………………………………………………………. 54

Загрузка установочного образа……………………………………………………………………………………… 54

2.10.3. Настройка клиента……………………………………………………………………………………………………… 55

2.11. Проблемы при установке…………………………………………………………………………………………………. 55

2.11.1. Проблема с APIC…………………………………………………………………………………………………………. 55

2.11.2. Ошибка: kernel panic:VFS: Unable to mount root fs………………………………………………….. 56

2.11.3. Проблемы с некоторыми LCD-мониторами……………………………………………………………… 56

2.11.4. Сообщение Probing EDD и зависание системы………………………………………………………… 56

2.11.5. Установка Linux на HP Mini 2133 (проблема с ACPI)……………………………………………… 56

2.11.6. Проблема с ACPI и неправильная работа подсветки………………………………………………. 57

2.11.7. Проблема с механизмом Enhanced Disk Device (EDD)…………………………………………….. 57

Часть II. Основные сведения о Linux……………………………………… 59

Глава 3. Сразу после установки……………………………………………………………… 61

3.1. Вход в систему и завершение работы……………………………………………………………………………….. 61

3.2. О графическом интерфейсе Linux………………………………………………………………………………………. 64

3.2.1. GNOME и KDE……………………………………………………………………………………………………………….. 64

3.2.2. Установка альтернативного графического интерфейса……………………………………………. 67

3.2.3. Основные элементы интерфейса GNOME…………………………………………………………………… 68

3.3. Изменение параметров графического интерфейса…………………………………………………………… 71

3.3.1. Отключение блокировки экрана………………………………………………………………………………….. 71

3.3.2. Изменение способа переключения языков ввода……………………………………………………….. 75

3.3.3. Изменение фона рабочего стола………………………………………………………………………………….. 76

3.4. «Аварийные» комбинации клавиш, использование клавиши <SysRq>………………………….. 76

3.5. Практические приемы работы с консолью……………………………………………………………………….. 77

3.5.1. Автодополнение командной строки и псевдонимы команд………………………………………. 78

3.5.2. Графические терминалы………………………………………………………………………………………………. 79

3.5.3. Перенаправление ввода/вывода………………………………………………………………………………….. 79

Глава 4. Файловая система Linux…………………………………………………………… 81

4.1. Файловые системы, поддерживаемые Linux…………………………………………………………………….. 81

4.1.1. Выбор файловой системы…………………………………………………………………………………………….. 84

4.1.2. Linux и файловые системы Windows……………………………………………………………………………. 86

4.1.3. Сменные носители………………………………………………………………………………………………………… 87

4.2. Особенности файловых систем Linux……………………………………………………………………………….. 87

4.2.1. Имена файлов в Linux…………………………………………………………………………………………………… 87

4.2.2. Файлы и устройства……………………………………………………………………………………………………… 88

4.2.3. Корневая файловая система и монтирование…………………………………………………………….. 88

4.2.4. Стандартные каталоги Linux………………………………………………………………………………………. 89

4.3. Внутреннее строение файловой системы…………………………………………………………………………. 90

4.4. Команды для работы с файлами и каталогами……………………………………………………………….. 93

4.4.1. Работа с файлами………………………………………………………………………………………………………….. 93

4.4.2. Работа с каталогами…………………………………………………………………………………………………….. 95

4.5. Использование ссылок. Команда ln………………………………………………………………………………….. 97

4.5.1. Жесткие и мягкие ссылки……………………………………………………………………………………………… 97

4.5.2. Создание ссылок…………………………………………………………………………………………………………… 98

4.5.3. Определение ссылок……………………………………………………………………………………………………… 98

4.5.4. Удаление файлов и жесткие ссылки……………………………………………………………………………. 99

4.5.5. Разница между копированием и созданием жесткой ссылки………………………………….. 100

4.6. Права доступа и атрибуты файла. Команды chown, chmod и chattr……………………………. 101

4.6.1. Права доступа к файлам и каталогам………………………………………………………………………. 101

4.6.2. Смена владельца файла……………………………………………………………………………………………… 103

4.6.3. Специальные права доступа (SUID и SGID)…………………………………………………………….. 103

4.6.4. Атрибуты файла. Запрет изменения файла………………………………………………………………. 104

4.6.5. Команды поиска файлов: find, which и locate………………………………………………………….. 105

4.7. Монтирование файловых систем…………………………………………………………………………………….. 106

4.7.1. Команды mount и umount……………………………………………………………………………………………. 106

4.7.2. Файлы устройств и монтирование…………………………………………………………………………….. 107

Жесткие диски………………………………………………………………………………………………………………… 107

Приводы оптических дисков…………………………………………………………………………………………. 109

Флешки и внешние жесткие диски………………………………………………………………………………… 109

4.7.3. Опции монтирования файловых систем……………………………………………………………………. 110

4.7.4. Монтирование разделов при загрузке………………………………………………………………………. 111

4.7.5. Подробно о UUID и файле /etc/fstab…………………………………………………………………………. 113

4.7.6. Монтирование флеш-дисков………………………………………………………………………………………. 116

4.8. Настройка журнала файловой системы ext3/ext4…………………………………………………………. 118

4.9. Файловая система ext4…………………………………………………………………………………………………….. 119

4.9.1. Сравнение ext3 и ext4…………………………………………………………………………………………………. 119

4.9.2. Совместимость с ext3………………………………………………………………………………………………….. 120

4.9.3. Переход на ext4…………………………………………………………………………………………………………… 120

4.10. Программы для разметки диска…………………………………………………………………………………….. 121

4.10.1. Стандартная программа fdisk…………………………………………………………………………………. 121

4.10.2. Графическая программа для разметки диска GParted…………………………………………… 124

4.11. Таблица разделов GPT…………………………………………………………………………………………………… 124

4.12. Несколько слов о CD/DVD-дисках………………………………………………………………………………… 125

4.13. Scalpel — инструмент для восстановления файлов……………………………………………………… 126

4.14. Новшества Fedora 33: zRAM и Btrfs……………………………………………………………………………… 128

Глава 5. Командный интерпретатор bash……………………………………………… 130

5.1. bash: основные сведения………………………………………………………………………………………………….. 130

5.2. Автоматизация задач с помощью bash…………………………………………………………………………… 131

5.3. Привет, мир!………………………………………………………………………………………………………………………. 132

5.4. Использование переменных в собственных сценариях…………………………………………………. 133

5.5. Передача параметров сценарию…………………………………………………………………………………….. 134

5.6. Массивы…………………………………………………………………………………………………………………………….. 134

5.7. Циклы…………………………………………………………………………………………………………………………………. 135

5.8. Условные операторы………………………………………………………………………………………………………… 136

5.9. Мониторинг и перезапуск сервисов Apache и MySQL с помощью bash……………………… 137

Глава 6. Пользователи и группы………………………………………………………….. 140

6.1. Многопользовательская система…………………………………………………………………………………….. 140

6.2. Пользователь root……………………………………………………………………………………………………………… 141

6.2.1. Полномочия пользователя root………………………………………………………………………………….. 141

6.2.2. Временное получение полномочий root……………………………………………………………………. 142

Команда sudo………………………………………………………………………………………………………………….. 142

Команда su……………………………………………………………………………………………………………………… 143

Команды gksudo/gksu и kdesudo/kdesu…………………………………………………………………………. 144

Проблемы с sudo в Ubuntu и Kubuntu…………………………………………………………………………… 144

Ввод серии команд sudo………………………………………………………………………………………………… 144

6.2.3. Переход к традиционной учетной записи root…………………………………………………………. 146

Преимущества и недостатки sudo…………………………………………………………………………………. 146

Традиционная учетная запись root в Ubuntu……………………………………………………………….. 147

6.3. Создание, удаление и модификация пользователей и групп
стандартными средствами………………………………………………………………………………………………. 147

6.3.1. Отдельные пользователи……………………………………………………………………………………………. 147

6.3.2. Группы пользователей……………………………………………………………………………………………….. 150

6.4. Управление пользователями и группами с помощью графических конфигураторов… 151

6.4.1. Конфигураторы в Fedora и Ubuntu……………………………………………………………………………. 151

6.4.2. Графический конфигуратор в openSUSE………………………………………………………………….. 155

Еще о правах root и командах su и sudo применительно к openSUSE……………………….. 157

Конфигуратор Центр безопасности openSUSE………………………………………………………….. 159

6.5. Квотирование……………………………………………………………………………………………………………………. 161

Глава 7. Пакеты и управление пакетами……………………………………………… 165

7.1. Способы установки программного обеспечения в Linux………………………………………………. 165

7.2. Репозитории пакетов………………………………………………………………………………………………………… 167

7.3. Программы для управления пакетами……………………………………………………………………………. 168

7.4. Программа rpm (все Red Hat-совместимые дистрибутивы)………………………………………….. 169

7.5. Программа dnf…………………………………………………………………………………………………………………… 170

7.5.1. Основные команды dnf……………………………………………………………………………………………….. 170

7.5.2. Управление источниками пакетов…………………………………………………………………………….. 172

7.5.3. Установка пакетов через прокси-сервер…………………………………………………………………… 174

7.6. Программы dpkg и apt-get: установка пакетов в Debian/Ubuntu………………………………….. 176

7.6.1. Программа dpkg………………………………………………………………………………………………………….. 176

7.6.2. Программа apt…………………………………………………………………………………………………………….. 177

7.6.3. Установка RPM-пакетов в Debian/Ubuntu………………………………………………………………… 179

7.6.4. Графические менеджеры в Debian/Ubuntu……………………………………………………………….. 179

7.6.5. Волшебная команда update……………………………………………………………………………………….. 181

7.7. Установка пакетов в Slackware………………………………………………………………………………………… 182

7.7.1. Управление пакетами…………………………………………………………………………………………………. 183

Программа установки пакетов installpkg……………………………………………………………………… 184

Программа удаления пакетов removepkg…………………………………………………………………….. 185

Программа обновления пакетов upgradepkg……………………………………………………………….. 186

7.7.2. Нет нужного пакета: вам поможет программа rpm2tgz………………………………………….. 186

7.7.3. Программа slackpkg: установка пакетов из Интернета…………………………………………… 186

7.8. Установка программ в openSUSE……………………………………………………………………………………. 187

7.8.1. Менеджер пакетов zypper…………………………………………………………………………………………… 187

7.8.2. Графический менеджер пакетов openSUSE………………………………………………………………. 190

7.9. Снапы…………………………………………………………………………………………………………………………………. 191

7.9.1. Введение в снапы………………………………………………………………………………………………………… 191

7.9.2. Работа со снапами………………………………………………………………………………………………………. 192

Часть III. Настройка сети и Интернета………………………………… 195

Глава 8. Настройка локальной сети……………………………………………………… 197

8.1. Локальная сеть с использованием технологии Gigabit Ethernet……………………………………. 197

8.2. Файлы конфигурации сети в Linux………………………………………………………………………………….. 200

8.3. Об именах сетевых интерфейсов……………………………………………………………………………………… 202

8.4. Настройка сети c помощью конфигуратора nm-connection-editor……………………………….. 205

8.5. Netplan: настройка сети в современных Ubuntu…………………………………………………………….. 209

8.6. Утилиты для диагностики соединения……………………………………………………………………………. 210

8.7. Для фанатов, или Настройка сети вручную…………………………………………………………………… 214

8.7.1. Конфигурационные файлы в старых версиях Fedora/CentOS………………………………… 214

8.7.2. Команда nmcli — новые версии Fedora…………………………………………………………………….. 217

8.7.3. Конфигурационные файлы openSUSE………………………………………………………………………. 217

8.7.4. Команда hostnamectl: установка имени узла……………………………………………………………. 219

8.7.5. Команда mii-tool…………………………………………………………………………………………………………. 220

8.8. Отключение ожидания сети……………………………………………………………………………………………… 221

8.9. Ошибка Temporary failure resolving error или временная ошибка разрешении имен…… 222

8.10. Еще несколько слов о настройке сети…………………………………………………………………………… 222

Глава 9. Настройка соединения Wi-Fi………………………………………………….. 223

9.1. Настройка беспроводного соединения с помощью NetworkManager………………………….. 223

9.2. Что делать, если сети нет в списке?…………………………………………………………………………………. 229

9.3. Точка доступа Wi-Fi на смартфоне…………………………………………………………………………………. 230

9.4. Выбор оборудования для домашней беспроводной сети……………………………………………… 231

9.4.1. Выбор роутера……………………………………………………………………………………………………………. 232

9.4.2. Усиление сигнала. Mesh-системы……………………………………………………………………………… 243

9.4.3. Некоторые советы по настройке роутера………………………………………………………………… 249

Глава 10. Домашняя серверная, или NAS почти даром…………………………. 250

10.1. Что такое NAS и зачем он нужен…………………………………………………………………………………… 250

10.2. RAID-массивы…………………………………………………………………………………………………………………. 251

10.3. Стоимость NAS……………………………………………………………………………………………………………….. 252

10.4. Домашняя серверная: начало………………………………………………………………………………………… 254

10.5. Что делать с сервером?…………………………………………………………………………………………………… 257

10.6. Домашняя серверная: продолжение……………………………………………………………………………… 258

10.7. Связанные вопросы………………………………………………………………………………………………………… 260

10.7.1. Температурный режим……………………………………………………………………………………………… 260

10.7.2. Экономим на ИБП……………………………………………………………………………………………………… 260

Глава 11. Объединение интернет-каналов……………………………………………. 262

11.1. Цели и средства решения задачи…………………………………………………………………………………… 262

11.2. Простой способ со статической маршрутизацией………………………………………………………. 263

11.3. Сложный способ с гибкой настройкой отказоустойчивости……………………………………… 265

Часть IV. Linux дома и в офисе………………………………………………… 271

Глава 12. Поддержка форматов мультимедиа………………………………………. 273

12.1. Что такое кодеки и почему их нет в Linux?…………………………………………………………………… 273

12.2. Настройка дистрибутива Fedora 38–40……………………………………………………………………….. 274

12.3. Установка кодеков в openSUSE……………………………………………………………………………………… 276

12.4. Установка кодеков в Ubuntu 23.10………………………………………………………………………………… 278

Глава 13. Графическая подсистема………………………………………………………. 281

13.1. Настройка X.Org в современных дистрибутивах…………………………………………………………. 281

13.2. Конфигурационный файл X.Org…………………………………………………………………………………….. 282

13.3. Синтаксис файла xorg.conf…………………………………………………………………………………………….. 284

13.4. Установка/обновление проприетарных драйверов NVIDIA в Fedora 38–41……………. 290

13.5. Команда xrandr……………………………………………………………………………………………………………….. 292

Глава 14. Офисные пакеты………………………………………………………………….. 294

14.1. Выбор офисного пакета…………………………………………………………………………………………………. 294

14.1.1. LibreOffice………………………………………………………………………………………………………………….. 294

14.1.2. Calligra Suite……………………………………………………………………………………………………………….. 296

14.1.3. WPS Office (Kingsoft Office)……………………………………………………………………………………… 297

14.2. Кросс-платформенная совместимость………………………………………………………………………….. 298

14.3. Вкратце об OpenOffice.org……………………………………………………………………………………………… 299

Глава 15. Графический редактор GIMP……………………………………………….. 300

15.1. Начало работы……………………………………………………………………………………………………………….. 300

15.2. Обработка фотографий………………………………………………………………………………………………….. 302

15.2.1. Изменение размера (масштабирование)…………………………………………………………………. 302

15.2.2. Вращение…………………………………………………………………………………………………………………… 304

15.2.3. Кадрирование (обрезка)…………………………………………………………………………………………… 305

15.2.4. Инструмент Размывание-Резкость………………………………………………………………………….. 305

15.3. Работа в GIMP с помощью скриптов…………………………………………………………………………….. 308

15.4. Windows-версия GIMP…………………………………………………………………………………………………….. 308

Глава 16. Обзор текстовых редакторов кода………………………………………… 310

16.1. Текстовые редакторы vi, nano, pico, ee, mcedit…………………………………………………………….. 310

16.2. Современные редакторы кода……………………………………………………………………………………….. 315

16.2.1. Microsoft Visual Studio Code…………………………………………………………………………………….. 315

16.2.2. Sublime Text: больше не рекомендую……………………………………………………………………… 316

16.2.3. Brackets от Adobe……………………………………………………………………………………………………… 316

Глава 17. Популярные программы для работы с Интернетом………………. 318

17.1. Браузер Firefox………………………………………………………………………………………………………………… 318

17.2. Браузер Chromium………………………………………………………………………………………………………….. 319

17.3. Почтовый клиент…………………………………………………………………………………………………………….. 320

17.4. Skype………………………………………………………………………………………………………………………………… 320

17.5. FTP-клиенты…………………………………………………………………………………………………………………….. 322

17.6. P2P-клиенты…………………………………………………………………………………………………………………….. 324

Глава 18. DLNA-сервер для домашней сети………………………………………….. 327

18.1. Назначение сервера……………………………………………………………………………………………………….. 327

18.2. Установка miniDLNA……………………………………………………………………………………………………… 328

18.3. Обзор альтернативных DLNA-сервисов……………………………………………………………………….. 330

18.3.1. Kodi…………………………………………………………………………………………………………………………….. 330

18.3.2. Plex……………………………………………………………………………………………………………………………… 331

18.3.3. Jellyfin…………………………………………………………………………………………………………………………. 333

Глава 19. Сервис распространения компьютерных игр Steam………………. 334

19.1. Что такое Steam………………………………………………………………………………………………………………. 334

19.2. Установка Steam…………………………………………………………………………………………………………….. 334

19.3. Установка и запуск игры………………………………………………………………………………………………… 336

Часть V. Системные трюки, или Linux изнутри………………… 339

Глава 20. Ядро……………………………………………………………………………………… 341

20.1. Процесс загрузки ядра……………………………………………………………………………………………………. 341

20.2. Параметры ядра……………………………………………………………………………………………………………… 344

20.3. Компиляция ядра в дистрибутиве Ubuntu…………………………………………………………………….. 349

20.3.1. Установка дополнительных пакетов………………………………………………………………………. 349

20.3.2. Загрузка исходных текстов ядра…………………………………………………………………………….. 349

20.3.3. Настройка ядра…………………………………………………………………………………………………………. 350

20.3.4. Компиляция ядра………………………………………………………………………………………………………. 353

20.4. RT-ядро……………………………………………………………………………………………………………………………. 357

20.5. Особенности компиляции ядра в других дистрибутивах Linux…………………………………. 358

Глава 21. Загрузчики Linux………………………………………………………………….. 359

21.1. Основные загрузчики……………………………………………………………………………………………………… 359

21.2. Конфигурационные файлы GRUB и GRUB2………………………………………………………………… 360

21.2.1. Конфигурационный файл GRUB……………………………………………………………………………… 360

21.2.2. Конфигурационный файл GRUB2…………………………………………………………………………… 362

21.3. Команды установки загрузчиков…………………………………………………………………………………… 365

21.4. Установка собственного фона загрузчиков GRUB и GRUB2……………………………………… 366

21.5. Постоянные имена устройств………………………………………………………………………………………… 367

21.6. Восстановление загрузчика GRUB/GRUB2…………………………………………………………………. 367

21.7. Загрузка с ISO-образов…………………………………………………………………………………………………… 368

21.8. Установка пароля загрузчика……………………………………………………………………………………….. 369

21.8.1. Загрузчик GRUB……………………………………………………………………………………………………….. 369

21.8.2. Загрузчик GRUB2……………………………………………………………………………………………………… 371

Глава 22. Системы инициализации……………………………………………………… 374

22.1. Начальная загрузка Linux……………………………………………………………………………………………… 374

22.2. Система инициализации init…………………………………………………………………………………………… 376

22.2.1. Команда init………………………………………………………………………………………………………………. 377

22.2.2. Команда service…………………………………………………………………………………………………………. 378

22.3. Система инициализации systemd………………………………………………………………………………….. 378

22.3.1. Идеальная система инициализации………………………………………………………………………… 378

22.3.2. systemd — основные понятия…………………………………………………………………………………… 380

22.3.3. Основные особенности systemd………………………………………………………………………………. 381

22.3.4. Сравнение init, upstart и systemd……………………………………………………………………………… 382

22.3.5. Немного практики…………………………………………………………………………………………………….. 384

22.3.6. Таймеры…………………………………………………………………………………………………………………….. 387

22.3.7. Команды системного администратора…………………………………………………………………… 389

22.4. Система инициализации Slackware……………………………………………………………………………….. 390

Глава 23. Процессы……………………………………………………………………………… 393

23.1. Аварийное завершение процесса………………………………………………………………………………….. 393

23.2. Программа top: кто больше всех расходует процессорное время?……………………………. 395

23.3. Изменение приоритета процесса…………………………………………………………………………………… 397

23.4. Запуск NodeJs-приложений в фоновом режиме……………………………………………………………. 397

Глава 24. Псевдофайловые системы sysfs и proc…………………………………… 399

24.1. Виртуальная файловая система sysfs…………………………………………………………………………… 399

24.2. Виртуальная файловая система proc……………………………………………………………………………. 400

24.2.1. Информационные файлы………………………………………………………………………………………….. 400

24.2.2. Файлы, позволяющие изменять параметры ядра…………………………………………………… 401

24.2.3. Файлы, изменяющие параметры сети……………………………………………………………………… 402

24.2.4. Файлы, изменяющие параметры виртуальной памяти………………………………………….. 402

24.2.5. Файлы, позволяющие изменить параметры файловых систем…………………………….. 403

24.3. Сохранение произведенных изменений………………………………………………………………………… 403

Глава 25. Команды Linux, о которых нужно знать каждому линуксоиду 404

25.1. Общие команды………………………………………………………………………………………………………………. 404

25.1.1. Команда arch — вывод архитектуры компьютера………………………………………………… 404

25.1.2. Команда clear — очистка экрана……………………………………………………………………………. 404

25.1.3. Команда date…………………………………………………………………………………………………………….. 404

25.1.4. Команда echo…………………………………………………………………………………………………………….. 405

25.1.5. Команда exit — выход из системы………………………………………………………………………….. 405

25.1.6. Команда man — вывод справки………………………………………………………………………………. 405

25.1.7. Команда passwd — изменение пароля……………………………………………………………………. 405

25.1.8. Команда startx — запуск графического интерфейса X.Org…………………………………… 405

25.1.9. Команда uptime — информация о работе системы……………………………………………….. 406

25.1.10. Команда users — информация о пользователях………………………………………………….. 406

25.1.11. Команды w, who и whoami — информация о пользователях………………………………. 406

25.1.12. Команда xf86config — настройка графической подсистемы……………………………… 407

25.2. Команды для работы с текстом…………………………………………………………………………………….. 407

25.2.1. Команды diff и cmp — сравнение файлов……………………………………………………………….. 407

25.2.2. Команды grep и egrep — текстовый фильтр…………………………………………………………… 408

25.2.3. Команды more и less — постраничный вывод………………………………………………………… 409

25.2.4. Команды head и tail — вывод начала и хвоста файла………………………………………….. 409

25.2.5. Команда wc — подсчет слов в файле……………………………………………………………………… 410

25.2.6. Команды vi, nano, pico, ee, mcedit — текстовые редакторы………………………………….. 410

25.2.7. Язык gawk — мощное средство обработки текста………………………………………………… 410

25.3. Команды для работы с Интернетом……………………………………………………………………………… 410

25.3.1. Команда ftp — стандартный FTP-клиент……………………………………………………………….. 410

25.3.2. Команда lynx — текстовый браузер……………………………………………………………………….. 411

25.3.3. Команда mail — чтение почты и отправка сообщений…………………………………………. 412

25.4. Команды системного администратора…………………………………………………………………………. 412

25.4.1. Команды free и df — информация о системных ресурсах…………………………………….. 412

25.4.2. Команда md5sum — вычисление контрольного кода MD5…………………………………… 412

25.4.3. Команды ssh и telnet — удаленный вход в систему………………………………………………. 413

Глава 26. Конфигурационные файлы Linux…………………………………………. 414

26.1. Каталог /etc……………………………………………………………………………………………………………………… 414

26.2. Каталог /etc/NetworkManager………………………………………………………………………………………… 415

26.3. Каталог /etc/abrt……………………………………………………………………………………………………………… 416

26.4. Каталог /etc/alsa……………………………………………………………………………………………………………… 416

26.5. Каталоги /etc/audit и /etc/audisp……………………………………………………………………………………. 416

26.6. Каталог /etc/avahi — файлы конфигурации демона Avahi…………………………………………. 416

26.7. Файлы конфигурации планировщиков задач………………………………………………………………. 417

26.8. Каталог /etc/cups…………………………………………………………………………………………………………….. 417

26.9. Файл /etc/fonts/fonts.conf……………………………………………………………………………………………….. 419

26.10. Каталог /etc/gdm (или /etc/gdm3)………………………………………………………………………………… 420

26.11. Файлы конфигурации популярных сетевых служб…………………………………………………… 420

26.12. Каталог /etc/logrotate.d…………………………………………………………………………………………………. 420

26.13. Каталог /etc/mail…………………………………………………………………………………………………………… 422

26.14. Каталог /etc/ntp…………………………………………………………………………………………………………….. 422

26.15. Каталог /etc/openldap…………………………………………………………………………………………………… 422

26.16. Каталог /etc/openvpn……………………………………………………………………………………………………. 422

26.17. Каталоги /etc/pam.d и /etc/security………………………………………………………………………………. 422

26.18. Каталог /etc/ppp……………………………………………………………………………………………………………. 422

26.19. Каталог /etc/rc.d……………………………………………………………………………………………………………. 423

26.20. Каталог /etc/sane.d……………………………………………………………………………………………………….. 423

26.21. Каталог /etc/selinux………………………………………………………………………………………………………. 423

26.22. Каталог /etc/skel……………………………………………………………………………………………………………. 423

26.23. Каталог /etc/sysconfig…………………………………………………………………………………………………… 424

26.24. Каталог /etc/X11…………………………………………………………………………………………………………… 424

26.25. Конфигурационные файлы dnf……………………………………………………………………………………. 425

26.26. Основные конфигурационные файлы сети…………………………………………………………………. 425

26.27. Остальные конфигурационные файлы каталога /etc………………………………………………… 425

Глава 27. Протоколирование системы………………………………………………….. 427

27.1. Протоколирование по-новому: journalctl……………………………………………………………………… 428

27.1.1. Установка времени……………………………………………………………………………………………………. 428

27.1.2. Просмотр и фильтрация логов…………………………………………………………………………………. 429

Текущая и предыдущие загрузки………………………………………………………………………………….. 429

Фильтр по дате……………………………………………………………………………………………………………….. 430

Фильтр по сервису………………………………………………………………………………………………………….. 431

Фильтр по пути……………………………………………………………………………………………………………….. 431

Фильтр по процессу или пользователю……………………………………………………………………….. 431

Просмотр сообщений ядра……………………………………………………………………………………………. 431

Фильтр по уровню ошибки……………………………………………………………………………………………. 431

27.1.3. Журналы в реальном времени…………………………………………………………………………………. 432

27.1.4. Централизованное хранение логов…………………………………………………………………………. 432

27.2. Демоны syslogd и rsyslogd……………………………………………………………………………………………….. 432

Часть VI. Linux на сервере………………………………………………………….. 437

Глава 28. Обеспечение безопасности сервера……………………………………….. 439

28.1. Защита от «восстановления пароля root»…………………………………………………………………….. 439

28.1.1. Параметр ядра single………………………………………………………………………………………………… 439

28.1.2. Пароль загрузчиков GRUB/GRUB2…………………………………………………………………………. 440

28.1.3. Осторожно: LiveCD…………………………………………………………………………………………………… 441

28.2. Защита от перезагрузки…………………………………………………………………………………………………. 441

28.3. Отключение учетной записи root: нестандартный метод…………………………………………… 443

28.4. Отключение учетной записи root средствами KDM и GDM……………………………………….. 444

28.5. Системы управления доступом……………………………………………………………………………………… 445

Глава 29. Модули аутентификации PAM……………………………………………… 446

29.1. Каталог /etc/pam.d………………………………………………………………………………………………………….. 446

29.2. Дополнительные файлы конфигурации………………………………………………………………………… 447

29.2.1. Содержимое каталога /etc/security………………………………………………………………………….. 447

29.2.2. Файл access.conf: ограничение доступа к системе………………………………………………… 448

29.2.3. Файл limits.conf: ограничение на используемые системные ресурсы………………….. 449

29.2.4. Файл time.conf: регистрация только в рабочее время……………………………………………. 450

29.3. Список PAM-модулей…………………………………………………………………………………………………….. 451

29.4. Борьба с простыми паролями………………………………………………………………………………………… 452

Глава 30. Оптимизация системы. Автоматизация выполнения задач…… 454

30.1. Оптимизация подкачки…………………………………………………………………………………………………… 454

30.2. Создание файла подкачки……………………………………………………………………………………………… 455

30.3. Настройка планировщика ввода/вывода……………………………………………………………………… 456

30.4. Двухканальный режим памяти………………………………………………………………………………………. 457

30.5. Автоматизация выполнения задач………………………………………………………………………………… 457

30.5.1. Планировщик crond…………………………………………………………………………………………………… 457

30.5.2. Планировщик anacron………………………………………………………………………………………………. 459

30.5.3. Разовое выполнение команд — демон atd………………………………………………………………. 460

Глава 31. Маршрутизация. Настройка брандмауэра…………………………….. 461

31.1. Таблица маршрутизации ядра. Установка маршрута по умолчанию………………………. 462

31.2. Изменение таблицы маршрутизации. Команда route………………………………………………….. 465

31.3. Включение IPv4-переадресации, Или превращение компьютера в шлюз…………………. 468

31.4. Настройка брандмауэра………………………………………………………………………………………………… 469

31.4.1. Цепочки и правила……………………………………………………………………………………………………. 470

31.4.2. Брандмауэр iptables………………………………………………………………………………………………….. 472

31.4.3. Шлюз своими руками……………………………………………………………………………………………….. 476

Глава 32. Безопасный удаленный доступ. OpenSSH……………………………… 482

32.1. Протокол SSH………………………………………………………………………………………………………………….. 482

32.2. Использование SSH-клиента………………………………………………………………………………………….. 483

32.3. Настройка SSH-сервера…………………………………………………………………………………………………. 483

Глава 33. Веб-сервер. Связка Apache + PHP + MySQL………………………….. 488

33.1. Самый популярный веб-сервер……………………………………………………………………………………… 488

33.2. Установка веб-сервера и интерпретатора PHP. Выбор версии………………………………….. 488

33.3. Тестирование настроек………………………………………………………………………………………………….. 492

33.4. Файл конфигурации веб-сервера…………………………………………………………………………………… 494

33.4.1. Базовая настройка……………………………………………………………………………………………………. 494

33.4.2. Самые полезные директивы файла конфигурации………………………………………………… 495

33.4.3. Директивы Directory, Limit, Location, Files……………………………………………………………… 497

33.4.4. Работа сервера на нескольких портах……………………………………………………………………. 499

33.4.5. Динамические поддомены……………………………………………………………………………………….. 500

33.5. Управление запуском сервера Apache………………………………………………………………………….. 501

33.6. Оптимизация Apache………………………………………………………………………………………………………. 502

33.7. Пользовательские каталоги…………………………………………………………………………………………… 503

33.8. Установка сервера баз данных MySQL………………………………………………………………………… 504

33.8.1. Установка сервера……………………………………………………………………………………………………. 504

33.8.2. Изменение пароля root и добавление пользователей…………………………………………….. 504

33.8.3. Запуск и останов сервера…………………………………………………………………………………………. 508

33.8.4. Программа phpMyAdmin…………………………………………………………………………………………. 508

33.9. Обеспечение безопасности сайта от вирусов………………………………………………………………. 510

33.9.1. Как вирусы попадают на сайт?……………………………………………………………………………….. 510

33.9.2. Установка прав доступа…………………………………………………………………………………………… 511

33.9.3. Антивирус ClamAV…………………………………………………………………………………………………… 512

33.9.4. Сценарий scanner………………………………………………………………………………………………………. 513

33.10. SSL-сертификат для сайта……………………………………………………………………………………………. 514

33.10.1. Выбор SSL-сертификата………………………………………………………………………………………… 514

Основные типы сертификатов……………………………………………………………………………………….. 514

Какой тип сертификата выбрать?…………………………………………………………………………………. 515

Особенности SSL-сертификатов разных типов……………………………………………………………. 515

Где купить SSL-сертификат?…………………………………………………………………………………………. 517

33.10.2. Конвертирование сертификатов……………………………………………………………………………. 517

33.10.3. Сертификат Let’s Encrypt………………………………………………………………………………………… 519

Установка клиента Let’s Encrypt…………………………………………………………………………………… 519

33.11. Ускорение веб-сервера: PageSpeed и Memcached……………………………………………………… 520

33.11.1. Установка PageSpeed……………………………………………………………………………………………… 521

33.11.2. Установка Memcached…………………………………………………………………………………………… 521

33.12. Протоколирование POST-запросов…………………………………………………………………………….. 522

Глава 34. FTP-сервер……………………………………………………………………………. 524

34.1. Установка FTP-сервера………………………………………………………………………………………………….. 524

34.2. Конфигурационный файл………………………………………………………………………………………………. 525

34.3. Настройка FTP-сервера………………………………………………………………………………………………….. 529

34.4. Оптимизация FTP-сервера……………………………………………………………………………………………… 531

34.5. Программы ftpwho и ftpcount………………………………………………………………………………………… 533

34.6. Несколько слов о защите FTP………………………………………………………………………………………… 534

Глава 35. DNS-сервер……………………………………………………………………………. 535

35.1. Еще раз о том, что такое DNS………………………………………………………………………………………… 535

35.2. Кеширующий сервер DNS………………………………………………………………………………………………. 536

35.3. Полноценный DNS-сервер……………………………………………………………………………………………… 541

35.4. Вторичный DNS-сервер………………………………………………………………………………………………….. 546

35.5. Обновление базы данных корневых серверов……………………………………………………………… 546

Глава 36. Прокси-сервер: Squid и squidGuard……………………………………….. 549

36.1. Зачем нужен прокси-сервер в локальной сети?……………………………………………………………. 549

36.2. Базовая настройка Squid………………………………………………………………………………………………… 549

36.3. Практические примеры…………………………………………………………………………………………………… 551

36.3.1. Управление доступом………………………………………………………………………………………………. 551

36.3.2. Создание «черного списка» адресов……………………………………………………………………….. 552

36.3.3. Отказ от баннеров…………………………………………………………………………………………………….. 552

36.4. Управление прокси-сервером Squid………………………………………………………………………………. 552

36.5. Настройка клиентов……………………………………………………………………………………………………….. 553

36.6. Прозрачный прокси-сервер……………………………………………………………………………………………. 553

36.7. squidGuard — ваше дополнительное «оружие»……………………………………………………………. 554

Глава 37. Почтовый сервер…………………………………………………………………… 558

37.1. Выбор почтового сервера………………………………………………………………………………………………. 558

37.2. Настройка MTA Exim…………………………………………………………………………………………………….. 560

37.3. Настройка аутентификации SMTP……………………………………………………………………………….. 561

37.4. Настройка демона SASL………………………………………………………………………………………………… 562

Глава 38. Сервис Samba……………………………………………………………………….. 563

38.1. Установка Samba……………………………………………………………………………………………………………. 563

38.2. Базовая настройка Samba……………………………………………………………………………………………… 563

38.3. Настройка общих ресурсов…………………………………………………………………………………………… 565

38.4. Просмотр ресурсов Windows-сети…………………………………………………………………………………. 566

38.5. Оптимизация Samba……………………………………………………………………………………………………….. 566

38.6. Samba и Active Directory…………………………………………………………………………………………………. 568

38.7. Samba в качестве контроллера домена………………………………………………………………………… 571

Глава 39. Поддержка RAID………………………………………………………………….. 575

39.1. Аппаратные RAID-массивы…………………………………………………………………………………………… 575

39.2. Программные RAID-массивы………………………………………………………………………………………… 579

39.3. Создание программных массивов…………………………………………………………………………………. 580

39.4. RAID-массив только для данных…………………………………………………………………………………… 581

39.5. Сбой и его имитация……………………………………………………………………………………………………….. 583

Глава 40. Программные системы хранения данных…………………………….. 584

40.1. Аппаратные хранилища с резервированием……………………………………………………………….. 584

40.2. Программные хранилища с резервированием……………………………………………………………… 586

40.3. Распределенная система хранения данных Ceph………………………………………………………… 588

40.3.1. Система Ceph: дополнительная информация………………………………………………………… 589

Глава 41. Средства резервного копирования.
Создание образа системы на LiveUSB…………………………………………………… 590

41.1. Необходимость в «живой» резервной копии………………………………………………………………… 590

41.2. Средства клонирования Linux……………………………………………………………………………………….. 591

41.3. Clonezilla………………………………………………………………………………………………………………………….. 592

41.4. Linux Live…………………………………………………………………………………………………………………………. 599

Глава 42. Шифрование файловой системы…………………………………………… 601

42.1. Шифрование папки…………………………………………………………………………………………………………. 601

42.2. Храним пароль на флешке……………………………………………………………………………………………… 603

Часть VII. Виртуальные серверы……………………………………………… 605

Глава 43. А нужен ли физический сервер?……………………………………………. 607

43.1. Физический или виртуальный?……………………………………………………………………………………… 607

43.1.1. Стоимость физического сервера……………………………………………………………………………… 607

43.1.2. Необходимость в аппаратном сервере…………………………………………………………………… 608

43.1.3. Про VPS, VDS и спекулянтов……………………………………………………………………………………. 609

43.1.4. Стоимость VDS………………………………………………………………………………………………………….. 611

43.1.5. Физический сервер или VDS?…………………………………………………………………………………… 612

43.1.6. Стоимость владения физическим сервером……………………………………………………………. 613

43.1.7. Выводы………………………………………………………………………………………………………………………. 614

43.2. Сразу после покупки виртуального Linux-сервера.
Шесть шагов к безопасности сервера…………………………………………………………………………… 614

43.2.1. Меняем пароль пользователя root…………………………………………………………………………… 615

43.2.2. Создаем обычного пользователя…………………………………………………………………………….. 615

43.2.3. Установка удобного редактора………………………………………………………………………………. 615

43.2.4. Превращаем обычного пользователя в администратора……………………………………… 616

43.2.5. Запрещаем вход как root по SSH……………………………………………………………………………… 617

43.2.6. Настройка брандмауэра………………………………………………………………………………………….. 617

Базовая настройка…………………………………………………………………………………………………………. 617

Создание правил для сервисов……………………………………………………………………………………… 619

Разрешаем IP-адреса……………………………………………………………………………………………………… 619

Запрещаем IP-адреса и службы……………………………………………………………………………………. 620

Удаление/сброс правил…………………………………………………………………………………………………. 620

Глава 44. Менеджер виртуальных машин KVM…………………………………… 621

44.1. Включение аппаратной виртуализации……………………………………………………………………….. 621

44.2. Установка ПО виртуализации……………………………………………………………………………………….. 624

44.3. Создание виртуальной машины……………………………………………………………………………………. 625

44.4. Изменение параметров виртуальной машины……………………………………………………………… 630

Глава 45. Управление виртуальными машинами через веб-интерфейс…. 633

45.1. Установка ПО………………………………………………………………………………………………………………….. 633

45.2. Установка ПО………………………………………………………………………………………………………………….. 634

45.3. Настройка KVM……………………………………………………………………………………………………………… 636

45.4. Панель управления…………………………………………………………………………………………………………. 636

Глава 46. Сервер видеонаблюдения……………………………………………………… 642

46.1. Системные требования…………………………………………………………………………………………………… 642

46.2. Установка ПО………………………………………………………………………………………………………………….. 643

46.3. Подготовка камер……………………………………………………………………………………………………………. 646

46.4. Вход в MotionEye……………………………………………………………………………………………………………. 647

Глава 47. Виртуальные диски на виртуальном сервере………………………… 654

47.1. Добавление еще одного виртуального диска………………………………………………………………. 654

47.2. Расширение существующего диска………………………………………………………………………………. 657

Приложение. Описание файлового архива…………………………………………… 661

Предметный указатель…………………………………………………………………………. 663

Опубликовано

Новинка: “Linux и Go. Эффективное низкоуровневое программирование. 2-е издание”

Linux и Go. Эффективное низкоуровневое программирование. 2-е издание

Книга содержит вводный курс по языку Go для системного программирования, описывает применение Go для реализации конкурентности и параллелизма, рассказывает об интероперабельности между имеющимся кодом на C с новым кодом на Go, а также исследует возможности внедрения Go для повышения производительности различных дистрибутивов. Второе издание содержит описание языка Go в версии 1.2 и описание реализации TinyGo, дополнительно приведены новые примеры использования языка.

Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.

Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.

Материал обновлён в соответствии с новой версией 1.22 языка Go

Ядро операционной системы Linux и множество модулей для различных дистрибутивов написаны на языке C.

Притом, что язык С продолжает развиваться и активно использоваться на практике, в область системного программирования постепенно проникают и более молодые языки, в частности Go. Перед вами – первая фундаментальная книга об использовании Go в Linux. Здесь вы познакомитесь с основами системного программирования, изучите детали взаимодействия между ядром и пользовательским пространством Linux, а также узнаете об интероперабельности между С и Go, о том, в каких аспектах и нюансах Linux язык Go может заменить и уже заменяет язык C. Особое внимание уделено конкурентности, параллелизму и стандарту POSIX. В конце книги для закрепления материала приведены реализации нескольких популярных алгоритмов.

Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.

Не старайся быстро пахать — сажай злаки, которые быстро всходят.
Андрей Рубанов

Листать

Во втором издании:

  • Материал обновлён в соответствии с новой версией 1.22 языка Go
  • Рассмотрена миниатюрная реализация языка TinyGo
  • Дополнительно приведены новые примеры использования языка

 

Книгу “Linux и Go. Эффективное низкоуровневое программирование. 2-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 9

Предназначение и целевая аудитория……………………………………………………………………………………….. 9

Код примеров и замеченные опечатки…………………………………………………………………………………….. 11

Чего нет в этой книге………………………………………………………………………………………………………………….. 13

Соглашения и выделения, принятые в тексте………………………………………………………………………….. 13

Напоминание……………………………………………………………………………………………………………………………… 14

Источники информации…………………………………………………………………………………………………………….. 15

Часть I. Инструментарий языка Go…………………………………………. 17

Глава 1. Предыстория Go………………………………………………………………………. 19

Отцы-основатели о целях и мотивации……………………………………………………………………………………. 19

Применимость: беглый взгляд…………………………………………………………………………………………………… 20

Go, C, C++, Java, Python, Rust …………………………………………………………………………………………………… 21

Управление памятью и истоки ненадежности………………………………………………………………………… 28

Источники информации…………………………………………………………………………………………………………….. 29

Глава 2. Разворачиваем экосистему Go………………………………………………….. 31

Создание среды………………………………………………………………………………………………………………………….. 31

Стандартная инсталляция………………………………………………………………………………………………… 31

Версии среды……………………………………………………………………………………………………………………… 34

Альтернативы…………………………………………………………………………………………………………………….. 35

«Самая последняя» версия………………………………………………………………………………………………… 36

Смена версий………………………………………………………………………………………………………………………. 40

Проверяем: простейшая программа…………………………………………………………………………………………. 42

Простейшее приложение…………………………………………………………………………………………………… 44

Библиотеки статические и динамические………………………………………………………………………… 45

Компиляция или интерпретация?……………………………………………………………………………………… 46

Выбор: GoLang или GCC?…………………………………………………………………………………………………. 47

Инфраструктура GoLang…………………………………………………………………………………………………………… 48

Команды go………………………………………………………………………………………………………………………… 48

Переменные окружения……………………………………………………………………………………………………… 51

Переменная окружения GOPATH…………………………………………………………………………….. 55

Переменная окружения GOTOOLDIR………………………………………………………………………. 56

Переменные окружения GOARCH и GOOS……………………………………………………………… 57

Платформы, переносимость и кросс-компиляция………………………………………………….. 58

Стиль кодирования — автоформатирование: fmt…………………………………………………………… 61

Сборка приложений: build………………………………………………………………………………………………… 62

Сценарии на языке Go: run………………………………………………………………………………………………… 63

Загрузка проектов из сети: get………………………………………………………………………………………….. 64

Репозиторные системы……………………………………………………………………………………………… 64

Установка проектов………………………………………………………………………………………………….. 67

Утилиты GoLang: tool………………………………………………………………………………………………………… 68

Утилиты компиляции…………………………………………………………………………………………………………. 71

Связь с кодом C: cgo………………………………………………………………………………………………………………….. 73

Сторонний и дополнительный инструментарий…………………………………………………………………….. 76

Онлайн-инструмент для изучения Go………………………………………………………………………………. 77

Графический терминал Geany………………………………………………………………………………………….. 78

Интерактивный отладчик Delve………………………………………………………………………………………… 79

Источники информации…………………………………………………………………………………………………………….. 81

Глава 3. Неформально о синтаксисе Go…………………………………………………. 82

Типы данных………………………………………………………………………………………………………………………………. 87

Переменные………………………………………………………………………………………………………………………………… 89

Объявление переменных……………………………………………………………………………………………………. 90

Повторные декларации и переприсвоения………………………………………………………………………. 92

Константы………………………………………………………………………………………………………………………………….. 93

Агрегаты данных……………………………………………………………………………………………………………………….. 95

Массивы и срезы………………………………………………………………………………………………………………… 95

Двумерные массивы и срезы………………………………………………………………………………….. 100

Структуры………………………………………………………………………………………………………………………… 101

Таблицы (хеши)………………………………………………………………………………………………………………… 103

Динамическое создание переменных…………………………………………………………………………………….. 105

Конструкторы и составные литералы……………………………………………………………………………. 106

Операции………………………………………………………………………………………………………………………………….. 107

Функции……………………………………………………………………………………………………………………………………. 110

Вариативные функции…………………………………………………………………………………………………….. 115

Стек процедур завершения……………………………………………………………………………………………… 117

Обобщенные функции……………………………………………………………………………………………………… 118

Функции высших порядков……………………………………………………………………………………………… 119

Встроенные функции……………………………………………………………………………………………………….. 121

Объектно-ориентированное программирование………………………………………………………………….. 123

Методы……………………………………………………………………………………………………………………………… 124

Множество методов………………………………………………………………………………………………… 126

Встраивание и агрегирование……………………………………………………………………………….. 127

Функции как объекты……………………………………………………………………………………………… 129

Интерфейсы………………………………………………………………………………………………………………………. 130

Именование интерфейсов……………………………………………………………………………………….. 133

Контроль интерфейса…………………………………………………………………………………………….. 133

Обработка ошибочных ситуаций…………………………………………………………………………………………… 134

Структура пакетов (библиотек) Go………………………………………………………………………………………… 137

Функция init………………………………………………………………………………………………………………………. 142

Импорт для использования побочных эффектов…………………………………………………………… 143

Некоторые полезные и интересные стандартные пакеты……………………………………………………. 144

Пакет runtime……………………………………………………………………………………………………………………. 144

Форматированный ввод/вывод……………………………………………………………………………………….. 145

Строки и пакет strings……………………………………………………………………………………………………… 146

Строчные литералы…………………………………………………………………………………………………………. 156

Большие числа…………………………………………………………………………………………………………………. 157

Автоматизированное тестирование……………………………………………………………………………….. 158

Источники информации…………………………………………………………………………………………………………… 159

Глава 4. Новости от последних версий…………………………………………………. 160

Модули……………………………………………………………………………………………………………………………………… 160

Дженерики………………………………………………………………………………………………………………………………… 162

Источники информации…………………………………………………………………………………………………………… 167

Глава 5. Альтернативы: TinyGo……………………………………………………………. 168

Источники информации…………………………………………………………………………………………………………… 176

Часть II. Конкурентность и многопроцессорность………. 177

Глава 6. Процессоры в Linux………………………………………………………………… 179

Процессоры, ядра и гипертрейдинг……………………………………………………………………………………….. 182

Загадочная нумерация процессоров……………………………………………………………………………………… 184

Управление процессорами Linux…………………………………………………………………………………………… 187

Аффинити маска……………………………………………………………………………………………………………….. 187

Как происходит диспетчирование в Linux?…………………………………………………………………… 190

Приоритеты nice……………………………………………………………………………………………………… 193

Приоритеты реального времени……………………………………………………………………………. 194

Источники информации…………………………………………………………………………………………………………… 196

Глава 7. Параллелизм и многопроцессорность……………………………………… 197

Эволюция модели параллелизма…………………………………………………………………………………………… 197

Параллельные процессы и fork………………………………………………………………………………………. 197

Потоки ядра и pthread_t POSIX………………………………………………………………………………………. 200

Потоки C++………………………………………………………………………………………………………………. 203

Сопрограммы — модель Go……………………………………………………………………………………………. 206

Параллелизм в Go…………………………………………………………………………………………………… 207

Сопрограммы — как это выглядит?……………………………………………………………………………………….. 208

Возврат значений функцией……………………………………………………………………………………………. 211

Ретроспектива: сопрограммы в C++……………………………………………………………………………….. 212

Каналы……………………………………………………………………………………………………………………………………… 212

Функциональные замыкания в сопрограммах………………………………………………………………………. 218

Примитивы синхронизации…………………………………………………………………………………………………….. 220

Конкурентность и параллельность………………………………………………………………………………………… 226

Источники информации…………………………………………………………………………………………………………… 231

Глава 8. Масштабирование………………………………………………………………….. 232

Планирование активности сопрограмм…………………………………………………………………………………. 232

Испытательный стенд……………………………………………………………………………………………………………… 234

Одноплатные микрокомпьютеры (Single-Board Computers)…………………………………………. 234

Рабочие десктопы…………………………………………………………………………………………………………….. 238

Серверы промышленного класса……………………………………………………………………………………. 239

Масштабирование в реальном мире……………………………………………………………………………………… 240

Первая попытка………………………………………………………………………………………………………………… 241

Второй подход к снаряду………………………………………………………………………………………………… 247

О числе потоков исполнения…………………………………………………………………………………………………… 254

Источники информации…………………………………………………………………………………………………………… 258

Часть III. Некоторые примеры и сравнения……………………….. 261

Глава 9. Осваиваемся в технологии Go………………………………………………… 263

Консольный ввод/вывод………………………………………………………………………………………………………….. 263

Утилита echo……………………………………………………………………………………………………………………………. 267

Итерационное вычисление вещественного корня…………………………………………………………………. 269

Вычисление числа π………………………………………………………………………………………………………………… 271

Вычисления неограниченно высокой точности……………………………………………………………………. 274

Случайная последовательность и ее моменты……………………………………………………………………… 275

Расчет параметров выпуклых 2D-многоугольников…………………………………………………………….. 278

TCP клиент-сервер…………………………………………………………………………………………………………………… 283

Тривиальный веб-сервер…………………………………………………………………………………………………………. 288

Порядок итераций для map: сюрприз…………………………………………………………………………………….. 289

Консольный калькулятор……………………………………………………………………………………………………….. 290

Источники информации…………………………………………………………………………………………………………… 293

Глава 10. Структуры данных, типы и их методы…………………………………. 294

Массивы и срезы……………………………………………………………………………………………………………………… 294

Многомерные срезы и массивы………………………………………………………………………………………………. 299

Функции с множественным возвратом…………………………………………………………………………………… 300

Глава 11. Строки, руны и UNICODE……………………………………………………. 303

Символы, байты и руны………………………………………………………………………………………………………….. 303

Изменение содержимого строк……………………………………………………………………………………………….. 305

Палиндромы…………………………………………………………………………………………………………………………….. 306

Регулярные выражения……………………………………………………………………………………………………………. 311

Источники информации…………………………………………………………………………………………………………… 315

Глава 12. Элементы функционального программирования………………….. 316

Функциональные замыкания………………………………………………………………………………………………….. 316

Карринг…………………………………………………………………………………………………………………………………….. 324

Рекурсия……………………………………………………………………………………………………………………………………. 325

Рекурсия с кешированием……………………………………………………………………………………………….. 326

Чистые функции……………………………………………………………………………………………………………………….. 329

Источники информации…………………………………………………………………………………………………………… 329

Глава 13. Скоростные и другие сравнения языков………………………………. 330

Алгоритмические задачи для сравнения……………………………………………………………………………….. 330

Некоторые известные алгоритмы…………………………………………………………………………………………… 331

Числа Фибоначчи…………………………………………………………………………………………………………….. 332

Пузырьковая сортировка…………………………………………………………………………………………………. 335

Ханойская башня……………………………………………………………………………………………………………… 341

Решето Эратосфена…………………………………………………………………………………………………………. 344

Глава 14. Многопроцессорные параллельные вычисления………………….. 349

Скорость активации параллельных ветвей…………………………………………………………………………… 349

Гонки…………………………………………………………………………………………………………………………………………. 354

Защита критических данных………………………………………………………………………………………….. 358

Неблокирующий ввод с клавиатуры……………………………………………………………………………………… 362

Многопроцессорный брутфорс………………………………………………………………………………………………. 366

Каналы в сопрограммах…………………………………………………………………………………………………………. 372

Таймеры……………………………………………………………………………………………………………………………………. 373

Тикеры………………………………………………………………………………………………………………………………. 375

Когда не нужно злоупотреблять многопроцессорностью…………………………………………………… 376

Источники информации…………………………………………………………………………………………………………… 380

Заключение………………………………………………………………………………………….. 381

Об авторе……………………………………………………………………………………………… 382

 

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор книг по Linux и Unix , в том числе «Расширения ядра Linux. Драйверы и модули» и «Linux и Go. Эффективное низкоуровневое программирование», высоко оцененных профессионалами и широкой читательской аудиторией.

Опубликовано

Новинка: “Администрирование Astra Linux”

Администрирование Astra Linux

Рассмотрена установка Astra Linux, настройка после установки, процесс загрузки системы, в том числе система инициализации systemd, основы командной строки, настройка сети, беспроводного и проводного соединения с Интернетом, установка ПО, настройка хранилища, работа с файловой системой, настройка  Samba (интеграция с Windows-сетью), Apache (веб-сервер), SSH, VNC (графический удаленный доступ) и других необходимых сетевых служб. Сделан акцент на специфические особенности Astra Linux, а именно, мандатный контроль целостности, мандатное управление доступом, системный киоск, служба каталогов ALD и учет сменных накопителей. Книга написана с учетом запросов системных администраторов, которым поставлена задача перейти с Microsoft Windows на популярный отечественный дистрибутив Astra Linux. При этом специально для читателей, никогда ранее не использовавших Linux, рассмотрены основы работы с Linux.

Для системных администраторов

Осваиваем отечественный дистрибутив Astra Linux

Отечественный дистрибутив Astra Linux, широко внедряется в последнее время с целью замены Microsoft Windows.

Книга ориентирована на системного администратора, который впервые сталкивается с Astra Linux. Она позволит начать работу с Astra Linux даже тем администраторам, которые никогда ранее вообще не работали ни с одним другим дистрибутивом Linux.

В книге рассмотрены установка Astra Linux, настройка после установки, процесс загрузки системы, в том числе система инициализации systemd, основы командной строки, настройка сети, беспроводного и проводного соединения с Интернетом, настройка хранилища, работа с файловой системой, а также настройка самых необходимых сетевых служб – Samba, Apache (веб-сервер), SSH. Сделан акцент на специфические особенности Astra Linux, а именно, мандатный контроль целостности, мандатное управление доступом, системный киоск, служба каталогов ALD и учет сменных накопителей.

  • Переход с Windows на Linux
  • Установка системы
  • Начальные навыки администрирования
  • Настройка и защита сети
  • Установка программ
  • Настройка Samba, Apache, SSH, VNC и других служб
  • Мандатный контроль целостности, мандатное управление доступом
  • Системный киоск, учет сменных накопителей
  • Служба каталогов Astra Linux Directory

Книгу “Администрирование Astra Linux” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Евгений Андреев, инженер-программист и системный администратор. Имеет более чем двадцатилетний опыт работы с операционной системой Linux в самых различных вариантах – от встраиваемых систем до серверов

Опубликовано

Вышла книга”Astra Linux. 30 уроков для начинающих”

Astra Linux. 30 уроков для начинающих

В книге  30 уроков для пользователей, начинающих осваивать популярный отечественный дистрибутив Astra Linux. С позиции пользователя описано решение типичных задач – от установки дистрибутива и настройки  графического интерфейса Fly до простейшего администрирования системы.  Рассмотрены настольные приложения, такие как офисный пакет LibreOffice, графический редактор GIMP, мультимедиа-программы для просмотра видео и воспроизведения музыки. Приведены инструкции по запуску Windows-приложений и установке популярных мессенджеров (Skype, Telegram, Viber) на компьютер. Также затронуты  вопросы, установки ОС на физический и виртуальный компьютер, подключения двух мониторов и других дополнительных устройств. Для закрепления материала даны контрольные вопросы и самостоятельные упражнения.

Для широкого круга пользователей

Осваиваем отечественный дистрибутив Astra Linux

В книге  30 уроков для пользователей, начинающих осваивать популярный отечественный дистрибутив Astra Linux, который широко внедряется в последнее время с целью замены Microsoft Windows. С позиции пользователя описано решение типичных задач – от установки дистрибутива до простейшего администрирования системы. Рассмотрены настольные приложения, такие как офисный пакет LibreOffice, мультимедиа-программы для просмотра видео и воспроизведения музыки. Приведены инструкции по запуску Windows-приложений и установке популярных мессенджеров.  Дополнительно затронуты  вопросы, установки операционной системы на физический и виртуальный компьютер, подключения двух мониторов и других дополнительных устройств. Для закрепления материала даны контрольные вопросы и самостоятельные упражнения.

  • Установка системы
  • Кастомизация графического интерфейса Fly
  • Настройка и защита сети
  • Установка мессенджеров Viber, Telegram, Skype
  • Мультимедиа-программы
  • Офисный пакет LibreOffice
  • Графический редактор GIMP
  • Подключение смартфона к компьютеру (iPhone, Android)
  • Начальные навыки администрирования
  • Работа с устройствами: подключение принтера, жесткого диска и дополнительного монитора

Книгу “Astra Linux. 30 уроков для начинающих” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………… 11

Часть I. Начало работы………………………………………………………………… 13

Урок 1. Установка дистрибутива……………………………………………………………. 15

1.1. Получение дистрибутива…………………………………………………………………………………………………… 15

1.2. Подготовка к установке……………………………………………………………………………………………………… 16

1.2.1. Подготовка к установке на физический компьютер………………………………………………. 16

Создание загрузочной флешки……………………………………………………………………………….. 16

Загрузка дистрибутива с USB-накопителя…………………………………………………………….. 18

1.2.2. Подготовка к установке на виртуальный компьютер……………………………………………. 18

Установка гостевой операционной системы…………………………………………………………. 23

1.3. Выбор типа установки……………………………………………………………………………………………………….. 23

1.4. Выбор способа переключения раскладки клавиатуры…………………………………………………… 25

1.5. Установка имени компьютера……………………………………………………………………………………………. 25

1.6. Создание локального пользователя………………………………………………………………………………….. 26

1.7. Установка часового пояса…………………………………………………………………………………………………. 28

1.8. Разметка жесткого диска……………………………………………………………………………………………………. 29

1.9. Выбор компонентов системы…………………………………………………………………………………………….. 37

1.10. Дополнительные настройки ОС………………………………………………………………………………………. 39

1.11. Установка загрузчика GRUB и завершение установки…………………………………………………. 40

1.12. Выбор уровня защищенности………………………………………………………………………………………….. 42

1.13. Самостоятельные упражнения………………………………………………………………………………………… 46

Урок 2. Интерфейс пользователя, вход в систему и завершение работы…. 47

2.1. Меню загрузчика………………………………………………………………………………………………………………… 47

2.2. Вход в систему…………………………………………………………………………………………………………………….. 49

2.3. Рабочий стол Fly…………………………………………………………………………………………………………………. 50

2.4. Настройка автоматического входа в систему………………………………………………………………….. 52

2.5. Завершение работы…………………………………………………………………………………………………………….. 52

2.6. Контрольные вопросы и самостоятельные упражнения…………………………………………………. 55

Урок 3. Кастомизация интерфейса пользователя……………………………………. 56

3.1. Настройка панели быстрого запуска……………………………………………………………………………….. 56

3.2. Настройка панели задач……………………………………………………………………………………………………. 57

3.2.1. Смена расположения панели задач………………………………………………………………………… 57

3.2.2. Изменение размера панели задач……………………………………………………………………………. 57

3.2.3. Делаем панель задач компактнее……………………………………………………………………………. 59

3.2.4. Автоматическое сокрытие панели задач……………………………………………………………….. 60

3.3. Переключатель рабочих столов………………………………………………………………………………………… 60

3.4. Изменение разрешения рабочего стола……………………………………………………………………………. 62

3.5. Смена обоев…………………………………………………………………………………………………………………………. 63

3.6. Изменение темы оформления……………………………………………………………………………………………… 65

3.7. Изменение параметров блокировки…………………………………………………………………………………… 67

3.8. Панель управления……………………………………………………………………………………………………………… 67

3.8.1. Редактирование главного меню………………………………………………………………………………. 70

3.8.2. Изменение раскладки клавиатуры………………………………………………………………………….. 71

3.8.3. Менеджер устройств………………………………………………………………………………………………… 72

3.8.4. Изменение параметров электропитания…………………………………………………………………. 72

3.9. Контрольные вопросы и самостоятельные упражнения…………………………………………………. 74

Урок 4. Командная строка……………………………………………………………………… 75

4.1. Способы доступа к командной строке……………………………………………………………………………… 75

4.2. Автодополнение командной строки………………………………………………………………………………….. 76

4.3. Получение справки по команде…………………………………………………………………………………………. 77

4.4. Некоторые базовые команды Linux………………………………………………………………………………….. 77

4.4.1. Перенаправление ввода/вывода……………………………………………………………………………… 77

4.4.2. Команда clear — очистка экрана……………………………………………………………………………. 79

4.4.3. Команды free и df — информация о системных ресурсах…………………………………….. 79

4.4.4. Команды w, who и whoami — информация о пользователях………………………………… 80

4.4.5. Команды top и htop — вывод информации о запущенных процессах………………… 80

4.4.6. Команды more и less — постраничный вывод……………………………………………………….. 83

4.5. Самостоятельные упражнения………………………………………………………………………………………….. 83

Часть II. Сеть и Интернет……………………………………………………………… 85

Урок 5. Настройка соединения с Интернетом………………………………………… 87

5.1. Настройка подключения по локальной сети……………………………………………………………………. 87

5.2. Подключаемся по Wi-Fi………………………………………………………………………………………………………. 89

5.3. Используем сторонние DNS……………………………………………………………………………………………….. 91

5.4. Файлы конфигурации сети в Linux……………………………………………………………………………………. 92

5.5. Самостоятельные упражнения………………………………………………………………………………………….. 94

Урок 6. Защита соединения с помощью VPN…………………………………………. 95

6.1. Вкратце о VPN…………………………………………………………………………………………………………………….. 95

6.2. Настройка VPN в Astra Linux…………………………………………………………………………………………….. 96

6.3. Самостоятельные упражнения………………………………………………………………………………………… 102

Урок 7. Конфигурация сети………………………………………………………………….. 103

7.1. Имена сетевых интерфейсов…………………………………………………………………………………………….. 103

7.2. Сервис network-manager: перезапуск сети……………………………………………………………………… 104

7.3. Утилита nm-connection-editor………………………………………………………………………………………….. 105

7.4. Маршрутизация………………………………………………………………………………………………………………… 107

7.4.1. Просмотр таблицы маршрутизации……………………………………………………………………… 108

7.4.2. Изменение таблицы маршрутизации……………………………………………………………………. 109

7.4.3. Сохранение маршрутов после перезапуска системы…………………………………………. 111

7.5. Команды диагностики сети……………………………………………………………………………………………… 112

7.6. Самостоятельные упражнения………………………………………………………………………………………… 114

Урок 8. Настройка брандмауэра…………………………………………………………… 115

8.1. Немного теории: что такое брандмауэр?……………………………………………………………………….. 115

8.2. Базовая настройка UFW…………………………………………………………………………………………………… 117

8.3. Создание правил для сервисов………………………………………………………………………………………… 119

8.4. Разрешаем IP-адреса………………………………………………………………………………………………………… 120

8.5. Запрещаем IP-адреса и службы………………………………………………………………………………………. 120

8.6. Удаление/сброс правил……………………………………………………………………………………………………. 120

8.7. Графический конфигуратор брандмауэра……………………………………………………………………… 121

8.8. Самостоятельные упражнения………………………………………………………………………………………… 123

Часть III. Программы и приложения…………………………………….. 125

Урок 9. Установка программ и приложений…………………………………………. 127

9.1. Способы установки программ в Linux……………………………………………………………………………. 127

9.2. Репозитории пакетов………………………………………………………………………………………………………… 129

9.3. Программы для управления пакетами……………………………………………………………………………. 130

9.3.1. Программа apt………………………………………………………………………………………………………… 130

9.3.2. Графический менеджер пакетов Synaptic…………………………………………………………….. 133

9.4. Снапы…………………………………………………………………………………………………………………………………. 137

9.4.1. Теория……………………………………………………………………………………………………………………… 137

9.4.2. Практика………………………………………………………………………………………………………………….. 138

9.5. Самостоятельные упражнения………………………………………………………………………………………… 142

Урок 10. Приложения для работы с Интернетом…………………………………… 143

10.1. Установка мессенджеров Skype, Viber, Telegram…………………………………………………………. 143

10.1.1. Установка Skype…………………………………………………………………………………………………. 143

10.1.2. Установка мессенджера Viber (альтернативный способ установки пакетов). 147

10.1.3. Установка Telegram……………………………………………………………………………………………. 150

10.2. Веб-браузер Chromium…………………………………………………………………………………………………… 153

10.3. Торрент-клиент……………………………………………………………………………………………………………….. 153

10.4. Нужен ли вам почтовый клиент?…………………………………………………………………………………… 158

10.5. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 158

Урок 11. Офисные приложения……………………………………………………………. 159

11.1. Текстовый процессор……………………………………………………………………………………………………… 159

11.1.1. Создание нового документа………………………………………………………………………………. 159

11.1.2. Открытие и сохранение документов…………………………………………………………………. 161

11.1.3. Ввод, выделение и форматирование текста……………………………………………………… 163

Ввод текста…………………………………………………………………………………………………………. 163

Выделение текста……………………………………………………………………………………………….. 166

Форматирование текста…………………………………………………………………………………….. 166

11.1.4. Дополнительные панели инструментов……………………………………………………………. 167

11.1.5. Работа с буфером обмена………………………………………………………………………………….. 168

11.1.6. Вставка картинок……………………………………………………………………………………………….. 168

11.1.7. Параметры абзаца……………………………………………………………………………………………… 170

11.1.8. Нумерованные и маркированные списки…………………………………………………………. 172

11.1.9. Таблицы………………………………………………………………………………………………………………. 174

11.1.10. Проверка правописания…………………………………………………………………………………… 176

11.1.11. Несколько колонок…………………………………………………………………………………………… 177

11.2. Электронная таблица…………………………………………………………………………………………………….. 178

11.2.1. Ввод данных в ячейки………………………………………………………………………………………… 179

11.2.2. Выделение ячеек…………………………………………………………………………………………………. 181

11.2.3. Адреса ячеек и диапазоны данных…………………………………………………………………… 182

11.2.4. Функции LibreOffice Calc……………………………………………………………………………………. 182

11.2.5. Диаграммы………………………………………………………………………………………………………….. 186

11.3. Создание PDF-документа……………………………………………………………………………………………….. 190

11.4. Самостоятельные упражнения………………………………………………………………………………………. 191

Урок 12. Мультимедиаприложения. Кодеки…………………………………………. 192

12.1. Установленные мультимедиаприложения……………………………………………………………………. 192

12.2. Воспроизведение музыки……………………………………………………………………………………………….. 193

12.2.1. В аудиоплеере Clementine…………………………………………………………………………………. 193

12.2.2. В плеере Qmmp…………………………………………………………………………………………………… 194

12.3. Воспроизведение видео………………………………………………………………………………………………….. 195

12.4. Решение проблем…………………………………………………………………………………………………………….. 196

12.5. Самостоятельные упражнения………………………………………………………………………………………. 197

Урок 13. Просмотр и редактирование фотографий……………………………….. 198

13.1. Утилита Gwenview………………………………………………………………………………………………………….. 198

13.1.1. Изменение размера фото……………………………………………………………………………………. 199

13.1.2. Поворот и отражение фотографии……………………………………………………………………. 201

13.1.3. Кадрирование……………………………………………………………………………………………………… 202

13.1.4. Устранение эффекта красных глаз……………………………………………………………………. 203

13.2. Графический редактор GIMP………………………………………………………………………………………… 204

13.2.1. Загрузка и сохранение изображений………………………………………………………………… 205

13.2.2. Основные инструменты GIMP…………………………………………………………………………… 206

Инструменты выделения……………………………………………………………………………………. 208

Инструменты рисования……………………………………………………………………………………. 216

Инструменты цвета…………………………………………………………………………………………….. 218

Цветовой баланс…………………………………………………………………………………………………. 218

Инструменты преобразования………………………………………………………………………….. 222

Прочие инструменты………………………………………………………………………………………….. 225

13.3. Самостоятельные упражнения………………………………………………………………………………………. 225

Урок 14. Интеграция компьютера со смартфоном………………………………… 226

14.1. Необходимость интеграции…………………………………………………………………………………………… 226

14.2. Интеграция с Android-смартфоном……………………………………………………………………………….. 226

14.2.1. Беспроводной способ…………………………………………………………………………………………. 226

14.2.2. Используем кабель для передачи файлов………………………………………………………… 231

14.3. Интеграция с iPhone………………………………………………………………………………………………………… 232

14.4. Самостоятельные упражнения………………………………………………………………………………………. 236

Урок 15. Проект Wine: запуск Windows-приложений……………………………. 237

15.1. Установка Wine……………………………………………………………………………………………………………….. 238

15.2. Настройка Wine после установки…………………………………………………………………………………. 239

15.3. Установка и запуск Windows-программы…………………………………………………………………….. 240

15.4. Самостоятельные упражнения………………………………………………………………………………………. 243

Часть IV. Файловая система……………………………………………………. 245

Урок 16. Работа с файлами и каталогами…………………………………………….. 247

16.1. Особенности файловой системы Linux…………………………………………………………………………. 247

16.1.1. Имена файлов в Linux…………………………………………………………………………………………. 247

16.1.2. Файлы и устройства…………………………………………………………………………………………… 248

16.1.3. Стандартные каталоги Linux…………………………………………………………………………….. 249

16.2. Команды для работы с файлами и каталогами……………………………………………………………. 249

16.2.1. Работа с файлами……………………………………………………………………………………………….. 249

16.2.2. Работа с каталогами…………………………………………………………………………………………… 251

16.3. Использование ссылок. Команда ln………………………………………………………………………………. 253

16.3.1. Жесткие и мягкие ссылки……………………………………………………………………………………. 253

16.3.2. Создание ссылок…………………………………………………………………………………………………. 254

16.3.3. Определение ссылок…………………………………………………………………………………………… 254

16.3.4. Удаление файлов и жесткие ссылки………………………………………………………………….. 255

16.3.5. Разница между копированием и созданием жесткой ссылки………………………….. 256

16.4. Команды поиска файлов: find, which и locate………………………………………………………………. 256

16.5. Графический файловый менеджер………………………………………………………………………………… 258

16.5.1. Знакомство с программой………………………………………………………………………………….. 258

16.5.2. Копирование файлов и каталогов…………………………………………………………………….. 259

16.5.3. Перемещение файлов и каталогов…………………………………………………………………….. 260

16.5.4. Переименование файлов и каталогов……………………………………………………………….. 261

16.5.5. Создание файлов и каталогов……………………………………………………………………………. 261

16.5.6. Изменение прав доступа к файлам и каталогам………………………………………………. 261

16.5.7. Удаление файлов и каталогов…………………………………………………………………………… 263

16.6. Сжатие и распаковка……………………………………………………………………………………………………… 263

16.7. Самостоятельные упражнения………………………………………………………………………………………. 263

Урок 17. Работа со сменными носителями. Монтирование…………………… 265

17.1. Корневая файловая система………………………………………………………………………………………….. 265

17.2. Монтирование и размонтирование……………………………………………………………………………….. 266

17.3. Файлы устройств и монтирование………………………………………………………………………………… 267

17.3.1. Жесткие диски…………………………………………………………………………………………………….. 267

17.3.2. Приводы оптических дисков……………………………………………………………………………… 268

17.3.3. Флешки и внешние жесткие диски…………………………………………………………………….. 269

17.4. Параметры монтирования файловых систем……………………………………………………………….. 270

17.5. Монтирование разделов при загрузке………………………………………………………………………….. 271

17.6. Идентификаторы UUID…………………………………………………………………………………………………… 273

17.7. Самостоятельные упражнения………………………………………………………………………………………. 275

Урок 18. Особые операции с файловой системой…………………………………. 276

18.1. Монтирование ISO-образа…………………………………………………………………………………………….. 276

18.2. Создание файловой системы…………………………………………………………………………………………. 277

18.3. Проверка и восстановление файловой системы…………………………………………………………… 277

18.4. Смена корневой файловой системы………………………………………………………………………………. 278

18.5. Ограничение скорости CD/DVD…………………………………………………………………………………….. 278

18.6. Монтирование каталога к каталогу……………………………………………………………………………… 278

18.7. Примеры использования команды dd……………………………………………………………………………. 279

18.7.1. Копирование файлов с помощью dd…………………………………………………………………. 279

18.7.2. Разделение файла на несколько частей……………………………………………………………. 280

18.7.3. Создание резервной копии жесткого диска……………………………………………………… 281

18.7.4. Создание архива с резервной копией всего жесткого диска…………………………… 281

18.7.5. Уничтожение всех данных раздела жесткого диска……………………………………….. 281

18.8. Самостоятельные упражнения………………………………………………………………………………………. 282

Урок 19. Права доступа………………………………………………………………………… 283

19.1. Концепция прав доступа………………………………………………………………………………………………… 283

19.2. Смена владельца файла…………………………………………………………………………………………………. 288

19.3. Групповое изменение прав доступа……………………………………………………………………………… 288

19.4. Специальные права доступа: SUID и SGID………………………………………………………………….. 288

19.5. Атрибуты файла. Запрет изменения файла………………………………………………………………….. 289

19.6. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 290

Урок 20. Управление учетными записями пользователей…………………….. 291

20.1. Пользователь root……………………………………………………………………………………………………………. 291

20.2. Команда sudo………………………………………………………………………………………………………………….. 294

20.3. Команда su………………………………………………………………………………………………………………………. 296

20.4. Создание и удаление пользователей…………………………………………………………………………….. 296

20.5. Группы пользователей…………………………………………………………………………………………………… 298

20.6. Конфигуратор Политика безопасности………………………………………………………………………. 299

20.6.1. Включение ввода пароля для sudo……………………………………………………………………. 305

20.6.2. Блокировка перезагрузки и выключения для пользователей…………………………. 305

20.6.3. Задание глобального счетчика неудачных попыток входа…………………………… 305

20.6.4. Задание сложности пароля……………………………………………………………………………….. 305

20.7. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 306

Урок 21. Шифрование файловой системы……………………………………………. 307

21.1. Шифрование с помощью ECryptfs…………………………………………………………………………………. 307

21.2. Флешка для хранения пароля………………………………………………………………………………………… 310

21.3. Самостоятельные упражнения………………………………………………………………………………………. 311

Часть V. Аппаратные средства………………………………………………… 313

Урок 22. Получение информации о ПК. Псевдофайловые системы………. 315

22.1. Виртуальная файловая система sysfs…………………………………………………………………………… 315

22.2 Виртуальная файловая система proc…………………………………………………………………………….. 319

22.2.1. Информационные файлы……………………………………………………………………………………. 319

22.2.2. Файлы, позволяющие изменять параметры ядра…………………………………………….. 321

22.2.3. Файлы, изменяющие параметры сети……………………………………………………………….. 321

22.2.4. Файлы, изменяющие параметры виртуальной памяти……………………………………. 322

22.2.5. Файлы, позволяющие изменить параметры файловых систем………………………. 322

22.2.6. Сохранение произведенных изменений……………………………………………………………. 323

22.3. Самостоятельные упражнения………………………………………………………………………………………. 323

Урок 23. Подключение принтера………………………………………………………….. 324

23.1. Подключение принтера………………………………………………………………………………………………….. 324

23.2. Печать проверочной страницы……………………………………………………………………………………… 329

23.3. Печать первого документа…………………………………………………………………………………………….. 329

23.4. Установка опций печати………………………………………………………………………………………………… 329

23.5. Самостоятельные упражнения………………………………………………………………………………………. 331

Урок 24. Настройка жесткого диска…………………………………………………….. 332

24.1. Физическое подключение жесткого диска……………………………………………………………………. 332

24.2. Разметка жесткого диска………………………………………………………………………………………………… 333

24.3. Монтирование новых разделов…………………………………………………………………………………….. 337

24.4. Контрольные вопросы и самостоятельные упражнения…………………………………………….. 338

Урок 25. Подключение двух мониторов……………………………………………….. 339

25.1. Физическое подключение двух мониторов к компьютеру………………………………………….. 339

25.2. Настройка системы………………………………………………………………………………………………………… 341

25.3. Контрольные вопросы……………………………………………………………………………………………………. 347

Часть VI. Cистемное администрирование…………………………. 349

Урок 26. Нештатные ситуации…………………………………………………………….. 351

26.1. Разбор нештатной ситуации………………………………………………………………………………………….. 351

26.2. Восстановление пароля root………………………………………………………………………………………….. 354

26.3. Чтение логов……………………………………………………………………………………………………………………. 355

26.3.1. Установка времени……………………………………………………………………………………………… 356

26.3.2. Просмотр и фильтрация логов…………………………………………………………………………… 356

26.3.3. Фильтр по дате……………………………………………………………………………………………………. 356

26.3.4. Фильтр по сервису………………………………………………………………………………………………. 357

26.3.5. Фильтр по пути……………………………………………………………………………………………………. 358

26.3.6. Фильтр по процессу или пользователю……………………………………………………………. 358

26.3.7. Просмотр сообщений ядра………………………………………………………………………………… 358

26.3.8. Фильтр по уровню ошибки………………………………………………………………………………… 358

26.3.9. Журналы в реальном времени…………………………………………………………………………… 359

26.4. Самостоятельные упражнения………………………………………………………………………………………. 359

Урок 27. Процесс загрузки системы……………………………………………………… 360

27.1. Назначение загрузчика………………………………………………………………………………………………….. 360

27.2. Конфигурационный файл GRUB2…………………………………………………………………………………. 361

27.3. Установка пароля загрузчика……………………………………………………………………………………….. 364

27.4. Загрузка с ISO-образов…………………………………………………………………………………………………… 366

27.5. Загрузка Windows……………………………………………………………………………………………………………. 367

27.6. Восстановление загрузчика GRUB/GRUB2…………………………………………………………………. 367

27.7. Запрет загрузки в режиме восстановления. Задание тайм-аута………………………………… 368

27.8. Самостоятельные упражнения………………………………………………………………………………………. 369

Урок 28. Системные службы………………………………………………………………… 370

28.1. Сервисы, службы, демоны……………………………………………………………………………………………… 370

28.2. Терминология systemd……………………………………………………………………………………………………. 372

28.3. Управление службами в Astra Linux……………………………………………………………………………… 373

28.4. Самостоятельные упражнения………………………………………………………………………………………. 375

Урок 29. Выполнение команд по расписанию………………………………………. 376

29.1. Редактирование основной таблицы расписания планировщика……………………………….. 376

29.2. Редактирование пользовательской таблицы расписания…………………………………………… 378

29.3. Добавление собственной записи в таблицу расписания…………………………………………….. 379

29.4. Использование панели управления для редактирования таблицы расписания……….. 381

29.5. Самостоятельные упражнения………………………………………………………………………………………. 383

Урок 30. Автоматизация задач……………………………………………………………… 384

30.1. Настройка оболочки………………………………………………………………………………………………………. 384

30.2. Пример простейшей автоматизации……………………………………………………………………………… 386

30.3. Привет, мир!…………………………………………………………………………………………………………………….. 387

30.4. Использование переменных в собственных сценариях………………………………………………. 388

30.5. Передача параметров сценарию…………………………………………………………………………………… 389

30.6. Массивы и bash……………………………………………………………………………………………………………….. 390

30.7. Циклы……………………………………………………………………………………………………………………………….. 390

30.8. Условные операторы……………………………………………………………………………………………………… 391

30.9. Функции…………………………………………………………………………………………………………………………… 392

30.10. Примеры сценариев………………………………………………………………………………………………………. 393

30.10.1. Сценарий мониторинга журнала………………………………………………………………….. 393

30.10.2. Переименование файлов………………………………………………………………………………… 393

30.10.3. Преобразование систем счисления……………………………………………………………….. 394

30.10.4. Проверка прав пользователя…………………………………………………………………………. 394

30.10.5. Генератор имени временного файла…………………………………………………………….. 395

30.10.6. Проверка свободного дискового пространства с уведомлением по электронной почте            395

30.11. Самостоятельные упражнения……………………………………………………………………………………. 396

Заключение………………………………………………………………………………………….. 397

Предметный указатель…………………………………………………………………………. 398

Евгений Андреев, инженер-программист и системный администратор. Имеет более чем двадцатилетний опыт работы с операционной системой Linux в самых различных вариантах – от встраиваемых систем до серверов

Опубликовано

3-е издание: “Внутреннее устройство Linux”

Внутреннее устройство Linux, 3 изд.

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

В 3-м издании описаны механизмы принудительного разграничения доступа и контроля целостности, уникальные для российского защищенного дистрибутива Astra Linux и операционных систем в целом.  Учтены последние изменения в компонентах ОС и обновлены листинги примеров. Расширена глава про сетевую подсистему, добавлена глава по современным средствам трассировки, измерения нагрузки и мониторинга производительности.

 Для студентов, пользователей, программистов и системных администраторов Linux

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

Совет для начинающих

И напоследок, самый важный совет для начинающих — начните!
Цитата из книги

  • Импортозамещение и российский Linux: все, что вы хотели знать
  • Пользовательское окружение и интерфейс командной строки CLI
  • Файлы, каталоги и файловые системы
  • Процессы и нити, каналы, сокеты и разделяемая память
  • Дискреционное и мандатное разграничение доступа, мандатный контроль целостности и привилегии процессов
  • Сетевая подсистема и службы
  • Графический интерфейс GUI: оконные системы X Window и Wayland
  • Программирование на языке командного интерпретатора
  • Контейнеры и виртуализация
  • От отдельных компонент — к системе: Linux своими руками
  • Нагрузка, производительность, мониторинг и трассировка

Книгу “Внутреннее устройство Linux, 3 изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 9

Импортозамещение и российский Linux: все, что вы хотели знать,
но боялись спросить. 9

Сертифицированные операционные системы.. 10

Другие операционные системы.. 11

Введение. 12

О чем эта книга?. 12

Кому адресована книга. 13

Принятые соглашения и обозначения. 14

Методические рекомендации.. 15

Что должен знать читатель. 16

Совет для начинающих. 19

Глава 1. Архитектура ОС Linux. 20

1.1. Обзор внутреннего устройства. 20

1.2. Внеядерные компоненты: программы и библиотеки.. 22

1.3. Ядерные компоненты: подсистемы управления процессами, памятью, вводом-выводом, файлами   22

1.4. Трассировка системных и библиотечных вызовов. 23

1.5. Интерфейсы прикладного программирования. 25

1.6. В заключение. 26

Глава 2. Пользовательское окружение ОС Linux. 27

2.1. Командный интерфейс. 27

2.2. Виртуальные терминалы.. 29

2.2.1. Псевдотерминалы.. 31

2.3. Управляющие символы.. 33

2.4. Управляющие последовательности.. 40

2.5. Основной синтаксис командной строки.. 43

2.5.1. Опции командной строки.. 45

2.6. Справочные системы.. 46

2.6.1. Система страниц руководства. 46

2.6.2. Справочная система GNU.. 50

2.6.3. Встроенная справка командного интерпретатора. 50

2.7. Пользователи и группы.. 51

2.7.1. Передача полномочий.. 53

2.7.2. Хранилища учетных записей.. 54

2.8. Переменные окружения и конфигурационные dot-файлы.. 55

2.9. В заключение. 62

Глава 3. Подсистема управления файлами и вводом-выводом.. 63

3.1. Файлы и дерево каталогов. 63

3.1.1. Путевые имена файлов. 64

3.2. Типы файлов. 65

3.2.1. Обычные файлы.. 66

3.2.2. Каталоги.. 67

3.2.3. Имена, данные, метаданные и индексные дескрипторы.. 68

3.2.4. Ссылки.. 69

3.2.5. Специальные файлы устройств. 73

3.2.6. Именованные каналы и файловые сокеты.. 76

3.3. Файловые дескрипторы.. 77

3.4. Файловые системы.. 80

3.4.1. Файловые системы и процедура монтирования. 80

3.4.2. Дисковые файловые системы.. 82

3.4.3. Сетевые файловые системы.. 83

3.4.4. Специальные файловые системы.. 85

3.4.5. Внеядерные файловые системы.. 86

3.5. Дискреционное разграничение доступа. 90

3.5.1. Владельцы и режим доступа к файлам.. 91

3.5.2. Базовые права доступа и дополнительные атрибуты.. 92

Режим доступа новых файлов. 94

Семантика режима доступа разных типов файлов. 95

Дополнительные атрибуты.. 97

3.5.3. Списки контроля доступа POSIX. 101

Групповая маска. 103

Права по умолчанию.. 104

3.6. Мандатное (принудительное) разграничение доступа. 105

3.6.1. Модуль принудительного разграничения доступа AppArmor. 107

3.6.2. Модуль принудительного разграничения доступа SELinux. 109

3.6.3. Модуль принудительного разграничения доступа Astra Linux. 114

3.7. Дополнительные свойства файлов. 125

3.7.1. Расширенные атрибуты файлов. 125

3.7.2. Флаги файлов. 127

3.8. В заключение. 128

Глава 4. Управление процессами и памятью.. 129

4.1. Программы и библиотеки.. 129

4.1.1. Ядро Linux. 132

4.2. Процессы и нити.. 135

4.3. Порождение процессов и нитей, запуск программ.. 139

4.3.1. Параллельные многопроцессные программы.. 143

4.3.2. Параллельные многонитевые программы.. 144

4.3.3. Двойственность процессов и нитей Linux. 148

4.4. Дерево процессов. 150

4.5. Атрибуты процесса. 152

4.5.1. Маркеры доступа. 153

4.5.2. Привилегии.. 156

4.5.3. Другие атрибуты.. 160

4.6. Классы и приоритеты процессов. 160

4.6.1. Распределение процессора между процессами.. 160

4.6.2. Распределение устройств ввода-вывода между процессами.. 167

4.7. Память процесса. 176

4.7.1. Виртуальная память. 177

4.7.2. Отображение файлов в память. 179

4.7.3. Потребление памяти.. 183

4.8. Механизм сигналов. 187

4.8.1. Сеансы и группы процессов: управление заданиями.. 192

4.9. Межпроцессное взаимодействие. 195

4.9.1. Неименованные каналы.. 196

4.9.2. Именованные каналы.. 197

4.9.3. Неименованные локальные сокеты.. 198

4.9.4. Именованные локальные сокеты.. 200

4.9.5. Разделяемая память, семафоры и очереди сообщений.. 202

Разделяемая память. 202

Семафоры и очереди сообщений.. 206

4.10. В заключение. 207

Глава 5. Программирование на языке командного интерпретатора. 209

5.1. Интерпретаторы и их сценарии.. 209

5.2. Встроенные и внешние команды.. 211

5.3. Перенаправление потоков ввода-вывода. 212

5.4. Подстановки командного интерпретатора. 218

5.4.1. Подстановки имен файлов. 218

5.4.2. Подстановки параметров. 220

Переменные — именованные параметры.. 220

Позиционные параметры.. 223

Специальные параметры.. 224

5.4.3. Подстановки вывода команд. 225

5.4.4. Подстановки арифметических выражений.. 227

5.5. Экранирование. 230

5.6. Списки команд. 233

5.6.1. Условные списки.. 234

5.6.2. Составные списки: ветвление. 236

5.6.3. Составные списки: циклы.. 241

5.6.4. Функции.. 246

5.7. Сценарии на языке командного интерпретатора. 249

5.8. Инструментальные средства обработки текста. 252

5.8.1. Фильтр строк grep. 253

5.8.2. Фильтр символов и полей cut 255

5.8.3. Процессор текстовых таблиц awk. 256

5.8.4. Потоковый редактор текста sed. 257

5.9. В заключение. 261

Глава 6. Сетевая подсистема. 262

6.1. Сетевые интерфейсы, протоколы и сетевые сокеты.. 262

6.2. Конфигурирование сетевых интерфейсов и протоколов. 266

6.2.1. Ручное конфигурирование. 266

6.2.2. Автоматическое конфигурирование. 268

6.3. Служба имен и DNS/mDNS-резолверы.. 276

6.4. Сетевые службы.. 281

6.4.1. Служба SSH.. 281

6.4.2. Почтовые службы SMTP, POP/IMAP. 289

6.4.3. Служба WWW… 292

6.4.4. Служба FTP. 294

6.4.5. Служба NFS. 296

NFS-клиент. 296

NFS-сервер. 297

6.4.6. Служба SMB/CIFS. 298

Имена NetBIOS. 299

CIFS-клиенты.. 300

6.4.7. Служба каталогов LDAP. 302

Служба имен и пользовательские учетные записи.. 306

6.5. Средства сетевой диагностики.. 307

6.5.1. Анализаторы пакетов tcpdump и tshark. 307

6.5.2. Сетевой сканер nmap. 310

6.5.3. Мониторинг сетевых соединений процессов. 311

6.6. В заключение. 313

Глава 7. Графическая система X Window System… 315

7.1. X-сервер. 315

7.2. X-клиенты и X-протокол. 317

7.3. Оконные менеджеры.. 322

7.3.1. Декорирование на клиентской стороне. 325

7.4. Настольные пользовательские окружения. 327

7.5. Библиотеки интерфейсных элементов. 329

7.6. Расширения Х-протокола. 332

7.6.1. Расширение Composite и композитный менеджер. 334

7.6.2. GLX, DRI и 3D-графика. 336

7.7. Запуск X Window System… 338

7.7.1. Локальный запуск X-клиентов. 338

7.7.2. Дистанционный запуск X-клиентов. 338

7.7.3. Управление X-дисплеями: XDMCP-менеджер и протокол. 341

7.8. Программный интерфейс X Window System… 342

7.8.1. Трассировка X-библиотек и X-протокола. 342

7.8.2. 3D-графика и инфраструктура прямого рендеринга DRI 348

7.9. В заключение. 354

Глава 8. Графическая система Wayland. 356

8.1. Wayland-композитор. 358

8.2. Wayland-клиенты и Wayland-протокол. 359

8.3. Запуск графической среды на основе Wayland. 365

8.4. В заключение. 366

Глава 9. Контейнеры и виртуальные машины.. 367

9.1. Чрутизация. 368

9.2. Пространства имен.. 372

9.3. Контейнеризация: runc и docker. 377

9.4. Группы управления (cgroups). 381

9.5. В заключение. 385

Глава 10. От отдельных компонент — к системе. 386

10.1. Как Linux загружается. 386

10.2. Как обнаруживаются драйверы устройств. 390

10.3. Как запускаются системные службы.. 393

10.4. Linux своими руками.. 402

10.5. В заключение. 411

Глава 11. Нагрузка, производительность, мониторинг и трассировка. 412

11.1. Метрики и инструменты измерения нагрузки и производительности.. 412

11.1.1. Центральный процессор и память. 412

11.1.2. Устройства ввода-вывода. 420

11.2. Мониторинг и трассировка. 424

11.2.1. Трассировка и отладка программ.. 426

11.3. В заключение. 439

Заключение. 440

Список литературы.. 442

Для удовольствия. 442

Начинающим.. 442

Программистам.. 442

Бесстрашным.. 443

Предметный указатель. 444

Кетов Дмитрий Владимирович, ведущий преподаватель в области операционных систем и сетевых технологий Санкт-Петербургского политехнического университета (СПбПУ) с многолетним стажем, начальник отдела разработки программного обеспечения Санкт-Петербургского филиала АО “Концерн радиостроения «Вега»”. Профессионально занимается теорией построения и практикой разработки операционных систем и системного программного обеспечения.

Опубликовано

Новинка: “Сети Linux. Модели и приложения”

Сети Linux. Модели и приложения

Последовательно разобраны различные стороны сетевой инфраструктуры в Linux: базовые понятия сетей и TCP/IP, программные инструменты управления сетевым трафиком, программирование пользовательских сетевых приложений и драйверов сетевых протоколов для ядра Linux. Также исследованы  сети TOR, Yggdrasil, I2P, адресация IPv6, службы DNS, DHCP, SSH, DNS-системы разрешения имён EmerDNS и Alfis, что позволяет оценить тенденции развития современного Интернета.

Для специалистов по безопасности, сетевых администраторов, программистов

Новейшие сетевые разработки.

Сегодня Linux де-факто является основной операционной системой для обслуживания и защиты компьютерных сетей. Данная книга призвана познакомить читателя с новейшими сетевыми разработками в контексте инструментария Linux.

В первой части книги подробно рассказано о протоколе IPv6, который в настоящее время постепенно приходит на смену протоколу IPv4, доминировавшему на протяжении последних 30 лет.

Следующая часть подробно иллюстрирует, как устанавливать, настраивать и использовать все основные протокольные механизмы и инструменты, обеспечивающие работу Интернета и локальных сетей: DNS, DHCP, SSH.

Последняя часть, самая свежая с хронологической точки зрения, содержит выборочный обзор альтернативных проектов «Интернет завтрашнего дня»: сети TOR, Yggdrasil, I2P, альтернативные DNS-системы разрешения имён EmerDNS и Alfis. Хотя рассмотренные технологии выбраны на вкус автора, но в целом дают весьма полное впечатление о том, как эволюционирует современный Интернет.

Автор этой книги на протяжении свыше 40 лет являлся непосредственным участником разработки проектов из области системотехники и программного обеспечения разного масштаба и разной целевой ориентации. При этом практически все из них в большей или меньшей мере были связаны с сетевыми обменами. Предлагаемый в этой книге материал является обобщением практического опыта автора.

Это книга о том как выживать в эпоху обрушения сети Интернет.
автор книги

Книгу “Сети Linux. Модели и приложения” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие………………………………………………………………………………………………………………………………… 6

Что есть и чего нет в книге?……………………………………………………………………………………………………………… 7

Соглашения и выделения, принятые в тексте…………………………………………………………………………………….. 8

Код примеров и замеченные опечатки……………………………………………………………………………………………….. 8

Источники использованной информации…………………………………………………………………………………………… 8

Об авторе………………………………………………………………………………………………………………………………………… 9

Часть I. Сетевой стек: архитектура………………………………………………………………………………………. 10

RFC……………………………………………………………………………………………………………………………………………….. 10

Принципы сетевого стека………………………………………………………………………………………………………………… 12

Инкапсуляция данных…………………………………………………………………………………………………………….. 13

Cетевой порядок байтов………………………………………………………………………………………………………….. 14

Адреса MAC………………………………………………………………………………………………………………………………….. 15

Разрешение аппаратных адресов………………………………………………………………………………………………. 18

Адреса IP……………………………………………………………………………………………………………………………………….. 19

IPv4……………………………………………………………………………………………………………………………………….. 20

Маски и подсети……………………………………………………………………………………………………………. 20

Широковещательный и групповой обмен……………………………………………………………………….. 22

Частные адреса………………………………………………………………………………………………………………. 23

Частные IPv4 и NAT……………………………………………………………………………………………………… 24

IPv6……………………………………………………………………………………………………………………………………….. 24

Префикс адреса……………………………………………………………………………………………………………… 25

Сокращения записи IPv6………………………………………………………………………………………………… 26

Локальные адреса………………………………………………………………………………………………………….. 28

Синтаксис записи IPv6…………………………………………………………………………………………………… 29

Прогноз………………………………………………………………………………………………………………………… 31

Адресные переменные в программном коде…………………………………………………………………………….. 32

Разрешение адресов и имен……………………………………………………………………………………………………… 34

Разрешение имен в программном коде…………………………………………………………………………… 35

Сетевые интерфейсы………………………………………………………………………………………………………………………. 37

Таблица маршрутизации………………………………………………………………………………………………………….. 44

Управление роутингом………………………………………………………………………………………………….. 46

Алиасные IP-адреса………………………………………………………………………………………………………………… 49

Петлевой интерфейс……………………………………………………………………………………………………………….. 53

Переименование сетевого интерфейса……………………………………………………………………………………… 54

Альтернативные имена………………………………………………………………………………………………….. 56

Порты транспортного уровня………………………………………………………………………………………………………….. 58

Источники использованной информации…………………………………………………………………………………………. 59

Часть II. Протоколы и инструменты прикладного уровня………………………………………………. 61

Инструменты диагностики………………………………………………………………………………………………………………. 61

Инструменты наблюдения………………………………………………………………………………………………………. 63

Инструменты тестирования…………………………………………………………………………………………………….. 67

Сервисы сети и systemd…………………………………………………………………………………………………………………… 69

Протокол SSH……………………………………………………………………………………………………………………………….. 70

Передача файлов по SSH………………………………………………………………………………………………………… 74

SSH и Midnight Commander…………………………………………………………………………………………………….. 75

Графическая сессия в SSH………………………………………………………………………………………………………. 79

SSH в скриптах………………………………………………………………………………………………………………………. 80

Протокол DHCP…………………………………………………………………………………………………………………………….. 81

Разрешение имен: служба DNS……………………………………………………………………………………………………….. 85

Локальный DNS-резолвер bind……………………………………………………………………………………………….. 86

Кеширующий DHCP/DNS-сервер Dnsmasq……………………………………………………………………………… 87

Кеширующий DNS-сервер средствами systemd………………………………………………………………………… 93

Оптимизация используемых серверов DNS…………………………………………………………………………….. 96

Защищенность сети: брандмауэр……………………………………………………………………………………………………. 100

Брандмауэр ufw…………………………………………………………………………………………………………………….. 102

Суперсервер inetd…………………………………………………………………………………………………………………………. 107

Сервер telnet…………………………………………………………………………………………………………………………. 109

Сокетная активация в systemd……………………………………………………………………………………………….. 112

Прокси-серверы……………………………………………………………………………………………………………………………. 118

Прокси сквозь SSH………………………………………………………………………………………………………………. 125

Клиенты прокси……………………………………………………………………………………………………………………. 125

Кто и как использует прокси?………………………………………………………………………………………………… 128

Источники использованной информации……………………………………………………………………………………….. 130

Часть III. Программирование сетевых приложений……………………………………………………….. 131

Общие принципы………………………………………………………………………………………………………………………….. 131

Клиент и сервер…………………………………………………………………………………………………………………….. 132

Сети датаграммные и потоковые……………………………………………………………………………………………. 132

Фазы соединения TCP………………………………………………………………………………………………….. 134

Адаптивные механизмы TCP……………………………………………………………………………………….. 135

Сообщения прикладного уровня в TCP………………………………………………………………………… 136

Присоединенный UDP…………………………………………………………………………………………………. 138

Сетевые сокеты и операции…………………………………………………………………………………………………………… 138

Обменные операции………………………………………………………………………………………………………………. 144

Параметры сокета…………………………………………………………………………………………………………………. 147

Использование сокетного API……………………………………………………………………………………………….. 149

UDP клиент-сервер……………………………………………………………………………………………………… 150

TCP клиент-сервер………………………………………………………………………………………………………. 152

Клиент-сервер в UNIX-домене…………………………………………………………………………………….. 157

Управляющие операции………………………………………………………………………………………………………………… 157

Классы обслуживания сервером……………………………………………………………………………………………………. 158

Последовательный сервер……………………………………………………………………………………………………… 162

Параллельный сервер……………………………………………………………………………………………………………. 162

Предварительное клонирование процесса………………………………………………………………………………. 163

Создание потока по запросу…………………………………………………………………………………………………… 164

Пул потоков…………………………………………………………………………………………………………………………. 165

Последовательный сервер с очередью обслуживания……………………………………………………………… 167

Суперсервер и сокетная активация…………………………………………………………………………………………. 168

Расширенные операции ввода/вывода……………………………………………………………………………………………. 175

Примеры реализации…………………………………………………………………………………………………………….. 176

Неблокируемый ввод/вывод…………………………………………………………………………………………………. 176

Замечания к примерам…………………………………………………………………………………………………. 177

Мультиплексирование ввода/вывода……………………………………………………………………………………… 179

Замечания к примерам…………………………………………………………………………………………………. 182

Ввод/вывод, управляемый сигналом……………………………………………………………………………………… 183

Асинхронный ввод/вывод……………………………………………………………………………………………………… 184

Символьный сокет……………………………………………………………………………………………………………………….. 185

Канальный уровень………………………………………………………………………………………………………………………. 186

Источники использованной информации……………………………………………………………………………………….. 187

Часть IV. Драйверы сетевых устройств в ядре Linux……………………………………………………….. 188

Введение в модули ядра……………………………………………………………………………………………………………….. 189

Сборка модуля……………………………………………………………………………………………………………………… 189

Точки входа и завершения…………………………………………………………………………………………………….. 190

Вывод диагностики модуля…………………………………………………………………………………………………… 191

Загрузка модулей………………………………………………………………………………………………………………….. 192

Параметры загрузки модуля………………………………………………………………………………………… 194

Подсчет ссылок использования……………………………………………………………………………………………… 198

Структуры данных сетевого стека…………………………………………………………………………………………………. 199

Путь пакета сквозь стек протоколов……………………………………………………………………………………………… 200

Прием: традиционный подход……………………………………………………………………………………………….. 200

Прием: высокоскоростной интерфейс…………………………………………………………………………………….. 201

Передача пакетов………………………………………………………………………………………………………………….. 204

Драйверы: сетевой интерфейс………………………………………………………………………………………………………… 205

Статистика интерфейса………………………………………………………………………………………………………….. 211

Виртуальный сетевой интерфейс……………………………………………………………………………………………. 213

Протокол сетевого уровня……………………………………………………………………………………………………………. 218

Еще раз о виртуальном интерфейсе……………………………………………………………………………………….. 224

Протокол транспортного уровня…………………………………………………………………………………………………… 230

Источники использованной информации……………………………………………………………………………………….. 233

Часть V. За границами традиций Интернета……………………………………………………………………. 234

Обсуждение………………………………………………………………………………………………………………………………….. 234

Стек Tor……………………………………………………………………………………………………………………………………….. 236

Tor как прокси для любых служб…………………………………………………………………………………………… 237

Ресурсы onion……………………………………………………………………………………………………………………….. 239

Mesh-сети…………………………………………………………………………………………………………………………………….. 242

Сеть Yggdrasil………………………………………………………………………………………………………………………. 243

Выбор пиров для хоста………………………………………………………………………………………………… 247

Майнинг IPv6-адресов…………………………………………………………………………………………………. 252

Yggdrasil в локальной сети…………………………………………………………………………………………… 259

Короткие адреса…………………………………………………………………………………………………………… 261

Работа в Yggdrasil без установки клиента……………………………………………………………………… 263

Скоростные показатели………………………………………………………………………………………………… 265

Еще одна сеть: I2P………………………………………………………………………………………………………………… 269

Запуск сети………………………………………………………………………………………………………………….. 270

Использование сети……………………………………………………………………………………………………… 272

Доступ к ресурсам извне………………………………………………………………………………………………. 274

Альтернативные DNS…………………………………………………………………………………………………………………… 277

Регистрация домена………………………………………………………………………………………………………………. 277

Блокчейн как регистратор домена………………………………………………………………………………………….. 278

EmerСoin………………………………………………………………………………………………………………………………. 279

OpenNIC……………………………………………………………………………………………………………………… 287

Alfis……………………………………………………………………………………………………………………………………… 289

Доступ к локальным хостам………………………………………………………………………………………………………….. 296

Источники использованной информации……………………………………………………………………………………….. 300

Некоторые краткие итоги…………………………………………………………………………………………………….. 302

Предметный указатель………………………………………………………………………………………………………….. 303

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор книг по Linux и Unix , в том числе «Расширения ядра Linux. Драйверы и модули» и «Linux и Go. Эффективное низкоуровневое программирование», высоко оцененных профессионалами и широкой читательской аудиторией.

Опубликовано

Представляем книгу “Расширения ядра Linux: драйверы и модули”

Расширения ядра Linux: драйверы и модули

Представляем книгу Олега Цилюрика “Расширения ядра Linux: драйверы и модули”. В книге подробно рассмотрено программирование драйверов ядра Linux, исследованы возможности расширяемости ядра при помощи модулей. Основная версия ядра – 5.15. Код примеров отработан и проверен на десятках различных инсталляций Linux, установленных из различных дистрибутивов и разных семейств дистрибутивов: Fedora, CentOS, Debian, Ubuntu, Mint. Уделено внимание архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам устройств, подключаемых по USB. Затронут стандарт POSIX, разобраны API ядра, работа с Raspberry Pi, системные вызовы и подключение разнообразных периферийных устройств.

 

Ядро Linux — шедевр низкоуровневого кода на языке C. Разработка ядра не прекращается уже почти 30 лет, и занимается этим глобальное сообщество энтузиастов и профессионалов. Системные вызовы ядра Linux, тонкости управления памятью или параллельная обработка запросов – все эти темы важны сами по себе и в совокупности, но есть и ещё одна важная тема, до сих пор освещённая на русском языке фрагментарно и неравномерно: программирование драйверов и модулей ядра.

Именно этой теме посвящён фундаментальный труд, впервые публикуемый в качестве отдельной книги. Он зародился в начале 2000-х как материал для корпоративного курса и постоянно обновлялся вплоть до ноября 2022 года – и в данной версии выходит на бумаге. Новейшая версия ядра, учтённая в книге, – 5.15.

В книге подробно разобраны API ядра, системные вызовы, обработка сигналов, взаимодействия с периферийными устройствами и, в частности, с протоколом USB. Уделено внимание процессорным архитектурам x_64, x_86, ARM, а также одноплатному компьютеру Raspberry Pi и драйверам внешних устройств. Рассмотрена конфигурация и загрузка модулей и всевозможные варианты кастомизации ядра, рассмотрен стандарт POSIX.

Книга ориентирована на опытных программистов и системных администраторов, работающих с Linux. Призвана послужить достойным аналогом и дополнением классической работы «Драйверы устройств Linux. 3-е издание» Джонатана Корбетта и соавторов (Corbet J., Rubini A., Kroah-Hartman G. Linux Device Drivers, 3rd Edition).

Хорошая книга не дарит тебе откровение, хорошая книга укрепляет тебя в твоих самостоятельных догадках.
Андрей Рубанов, «Хлорофилия»

Книгу “Расширения ядра Linux: драйверы и модули” можно купить со скидкой в интернет-магазине издательства “БХВ“.

От автора……………………………………………………………………………………………….. 11

Предыстория………………………………………………………………………………………………………………………………. 11

Кому адресована книга?…………………………………………………………………………………………………………… 13

Структура книги………………………………………………………………………………………………………………………… 15

Соглашения, принятые в тексте………………………………………………………………………………………………… 18

Код примеров и замеченные опечатки…………………………………………………………………………………….. 19

Замечания о версиях ядра…………………………………………………………………………………………………………. 22

Обновляемость ядра………………………………………………………………………………………………………………….. 23

Использованные источники информации………………………………………………………………………………… 25

Обновления текущей редакции текста…………………………………………………………………………………….. 25

Глава 1. Модули с высоты птичьего полёта…………………………………………… 27

Linux и GNU………………………………………………………………………………………………………………………………… 27

FAQ                                                                                                                                                                   28

Модуль в иерархии программных систем……………………………………………………………………………….. 29

Наш первый модуль ядра………………………………………………………………………………………………………….. 31

Сборка модуля……………………………………………………………………………………………………………………. 31

Загрузка и исполнение………………………………………………………………………………………………………. 33

Точки входа и завершения………………………………………………………………………………………………… 34

Внутренний формат модуля……………………………………………………………………………………………………… 36

Диагностика модуля………………………………………………………………………………………………………………….. 38

Уровни диагностики в /proc………………………………………………………………………………………………. 42

Представление адресов в Linux………………………………………………………………………………………… 43

Форматы вывода………………………………………………………………………………………………………………… 45

Основные ошибки модуля…………………………………………………………………………………………………………. 48

Обсуждение………………………………………………………………………………………………………………………………… 50

Глава 2. Архитектура и вокруг………………………………………………………………. 53

Ядро: монолитное и микроядро……………………………………………………………………………………………….. 53

Траектория системного вызова………………………………………………………………………………………………… 55

Библиотечный и системный вызов из процесса………………………………………………………………. 56

Под капотом системного вызова………………………………………………………………………………………. 63

Отслеживание системного вызова в процессе…………………………………………………………………. 66

Различия программ пространств ядра и пользователя………………………………………………………….. 67

Интерфейсы модуля…………………………………………………………………………………………………………………… 70

Взаимодействие модуля с уровнем пользователя…………………………………………………………… 70

Взаимодействие модуля с ядром………………………………………………………………………………………. 75

Коды ошибок………………………………………………………………………………………………………………………. 77

Загрузка модулей………………………………………………………………………………………………………………………. 77

Автоматическая загрузка модулей…………………………………………………………………………………… 78

Запрет загрузки (черный список модулей)………………………………………………………………………. 79

Параметры загрузки модуля…………………………………………………………………………………………………….. 80

Конфигурационные параметры ядра………………………………………………………………………………………. 85

Параметры в ядре………………………………………………………………………………………………………………. 85

Параметры в модуле………………………………………………………………………………………………………….. 88

Подсчет ссылок использования………………………………………………………………………………………………… 91

Обсуждение………………………………………………………………………………………………………………………………… 93

Глава 3. Инструментальное окружение………………………………………………….. 95

Основные команды…………………………………………………………………………………………………………………….. 95

Системные файлы………………………………………………………………………………………………………………………. 96

Графика, терминал и текстовая консоль…………………………………………………………………………………. 99

Управление текстовыми консолями……………………………………………………………………………………….. 100

Коротко о компиляторе GCC………………………………………………………………………………………………….. 102

Ассемблер в Linux……………………………………………………………………………………………………………………. 105

Нотация AT&T…………………………………………………………………………………………………………………. 107

Инлайновый ассемблер GCC………………………………………………………………………………………….. 108

Создание среды сборки модулей ядра…………………………………………………………………………………… 110

Работа над кодом…………………………………………………………………………………………………………………….. 114

В деталях о сборке…………………………………………………………………………………………………………………… 117

Переменные периода компиляции………………………………………………………………………………….. 117

Дополнительные параметры периода компиляции………………………………………………………. 118

Версионность ядра в коде модуля………………………………………………………………………………….. 118

Как собрать одновременно несколько модулей?………………………………………………………….. 120

Как собрать модуль и используемые программы к нему?……………………………………………. 120

Пользовательские библиотеки………………………………………………………………………………………… 121

Как собрать модуль из нескольких объектных файлов?………………………………………………. 123

Рекурсивная сборка…………………………………………………………………………………………………………. 125

Подписывание модулей…………………………………………………………………………………………………………… 127

Инсталляция модуля……………………………………………………………………………………………………………….. 130

Нужна ли новая сборка ядра?………………………………………………………………………………………………… 131

Динамическая сборка модулей (DKMS)………………………………………………………………………………… 133

Обсуждение………………………………………………………………………………………………………………………………. 138

Глава 4. Внешние интерфейсы модуля…………………………………………………. 139

Драйверы: интерфейс устройства………………………………………………………………………………………….. 139

Символьные устройства………………………………………………………………………………………………….. 143

Варианты реализации……………………………………………………………………………………………. 145

Ручное создание имени………………………………………………………………………………….. 146

Использование udev……………………………………………………………………………………….. 151

Динамические имена………………………………………………………………………………………. 155

Разнородные (смешанные) устройства………………………………………………………… 159

Управляющие операции устройства…………………………………………………………………….. 162

Множественное открытие устройства………………………………………………………………….. 169

Счетчик ссылок использования модуля……………………………………………………………….. 177

Режимы выполнения операций ввода/вывода……………………………………………………… 180

Неблокирующий ввод/вывод и мультиплексирование……………………………………….. 181

Блочные устройства………………………………………………………………………………………………………… 190

Особенности драйвера блочного устройства………………………………………………………. 193

Обзор примеров реализации………………………………………………………………………………….. 194

Регистрация устройства…………………………………………………………………………………………. 195

Подготовка к регистрации……………………………………………………………………………… 195

Диски с разметкой MBR и GPT……………………………………………………………………… 197

Заполнение структуры…………………………………………………………………………………… 199

Завершение регистрации……………………………………………………………………………….. 201

Таблица операций устройства………………………………………………………………………………. 201

Обмен данными……………………………………………………………………………………………………….. 205

Классика: очередь и обслуживание ядром………………………………………………….. 210

Очередь и обработка запроса в драйвере……………………………………………………. 212

Отказ от очереди…………………………………………………………………………………………….. 214

Пример перманентных данных……………………………………………………………………… 215

Некоторые важные API………………………………………………………………………………….. 215

Результаты тестирования………………………………………………………………………………………. 216

Файловая система FUSE…………………………………………………………………………………………. 221

Интерфейс /proc……………………………………………………………………………………………………………………….. 228

Терминальные значения в /proc и /sys……………………………………………………………………………. 230

Использование /proc………………………………………………………………………………………………………… 231

Специфический механизм procfs……………………………………………………………………………. 232

Варианты реализации чтения……………………………………………………………………….. 240

Запись данных………………………………………………………………………………………………… 244

Общий механизм файловых операций………………………………………………………………….. 245

Интерфейс /sys………………………………………………………………………………………………………………………….. 251

Создание и использование имен в /sys……………………………………………………………………………. 253

Ошибки обменных операций…………………………………………………………………………………………… 261

Сетевые интерфейсы и протоколы…………………………………………………………………………………………. 263

Сетевые инструменты……………………………………………………………………………………………………… 265

Сетевые интерфейсы………………………………………………………………………………………………. 265

Инструменты наблюдения……………………………………………………………………………………… 269

Инструменты интегрального тестирования…………………………………………………………. 276

Структуры данных сетевого стека…………………………………………………………………………………. 278

Драйверы: сетевой интерфейс………………………………………………………………………………………… 279

Создание сетевых интерфейсов…………………………………………………………………………….. 279

Новая схема, и детальнее о ее создании………………………………………………………………. 281

Операции сетевого интерфейса……………………………………………………………………………… 286

Переименование сетевого интерфейса………………………………………………………………….. 291

Путь пакета сквозь стек протоколов………………………………………………………………………………. 293

Прием: традиционный подход………………………………………………………………………………. 293

Прием: высокоскоростной интерфейс…………………………………………………………………… 294

Передача пакетов……………………………………………………………………………………………………. 297

Статистика интерфейса…………………………………………………………………………………………………… 298

Виртуальный сетевой интерфейс……………………………………………………………………………………. 301

Протокол сетевого уровня………………………………………………………………………………………………. 307

Еще раз о виртуальном интерфейсе……………………………………………………………………………….. 314

Протокол транспортного уровня……………………………………………………………………………………. 321

Использование драйверов Windows……………………………………………………………………………….. 323

Обсуждение………………………………………………………………………………………………………………………. 324

Глава 5. Внутренние API ядра………………………………………………………………. 326

Механизмы управления памятью…………………………………………………………………………………………… 326

Карта памяти……………………………………………………………………………………………………………………. 326

Динамическое выделение памяти…………………………………………………………………………………… 330

Распределители памяти…………………………………………………………………………………………………… 334

Слябовый распределитель………………………………………………………………………………………………. 336

Страничное выделение……………………………………………………………………………………………………. 344

Выделение больших буферов…………………………………………………………………………………………. 344

Динамические структуры и управление памятью………………………………………………………… 345

Циклический двусвязный список…………………………………………………………………………… 345

Модуль, использующий динамические структуры……………………………………………… 349

Сложноструктурированные данные…………………………………………………………………….. 351

Еще об инициализации объектов ядра………………………………………………………………….. 351

Служба времени………………………………………………………………………………………………………………………. 352

Информация о времени в ядре…………………………………………………………………………………………. 352

Источник прерываний системного таймера…………………………………………………………. 355

Дополнительные источники информации о времени…………………………………………… 356

Три класса задач во временной области……………………………………………………………………….. 357

Измерения временных интервалов…………………………………………………………………………………. 358

Временные задержки……………………………………………………………………………………………………….. 365

Таймеры ядра…………………………………………………………………………………………………………………… 371

Таймеры высокого разрешения………………………………………………………………………………………. 372

Абсолютное время……………………………………………………………………………………………………………. 375

Часы реального времени (RTC)………………………………………………………………………………………. 376

Время и диспетчеризация в ядре…………………………………………………………………………………….. 381

Параллелизм и синхронизация………………………………………………………………………………………………. 382

Потоки ядра………………………………………………………………………………………………………………………. 385

Создание потока ядра…………………………………………………………………………………………….. 385

Свойства потока……………………………………………………………………………………………………… 387

Новый интерфейс потоков……………………………………………………………………………………… 389

Синхронизация завершения…………………………………………………………………………………… 394

Синхронизация в коде……………………………………………………………………………………………………… 401

Критические секции кода и защищаемые области данных………………………………… 401

Механизмы синхронизации…………………………………………………………………………………… 402

Условные переменные и ожидание завершения…………………………………………………… 402

Атомарные переменные и операции……………………………………………………………………… 405

Битовые атомарные операции………………………………………………………………………. 405

Арифметические атомарные операции………………………………………………………… 406

Локальные переменные процессора……………………………………………………………………… 407

Предыдущая модель………………………………………………………………………………………. 407

Новая модель………………………………………………………………………………………………….. 408

Блокировки………………………………………………………………………………………………………………. 409

Семафоры и мьютексы…………………………………………………………………………………… 410

Спин-блокировки……………………………………………………………………………………………. 415

Блокировки чтения/записи…………………………………………………………………………….. 417

Сериальные (последовательные) блокировки……………………………………………… 420

Мьютексы реального времени………………………………………………………………………. 422

Инверсия и наследование приоритетов………………………………………………………… 422

Множественное блокирование………………………………………………………………………………. 423

Уровень блокирования…………………………………………………………………………………………… 424

Предписание порядка выполнения……………………………………………………………………….. 430

Аннотация ветвлений……………………………………………………………………………………… 430

Барьеры…………………………………………………………………………………………………………… 431

Обработка прерываний…………………………………………………………………………………………………………… 432

Общая модель обработки прерывания…………………………………………………………………………… 433

Наблюдение прерываний в /proc……………………………………………………………………………………. 436

Регистрация обработчика прерывания………………………………………………………………………….. 439

Обработчик прерываний: верхняя половина………………………………………………………………… 442

Управление линиями прерывания…………………………………………………………………………. 444

Пример обработчика прерываний………………………………………………………………………… 444

Отложенная обработка: нижняя половина……………………………………………………………………. 446

Отложенные прерывания: softirq…………………………………………………………………………… 446

Тасклеты………………………………………………………………………………………………………………….. 450

Демон ksoftirqd………………………………………………………………………………………………………… 452

Очереди отложенных действий: workqueue…………………………………………………………. 452

Сравнение и примеры…………………………………………………………………………………………….. 455

Обсуждение………………………………………………………………………………………………………………………. 460

Глава 6. Периферийные устройства в модулях ядра…………………………….. 466

Поддержка шинных устройств в модуле……………………………………………………………………………….. 466

Анализ оборудования……………………………………………………………………………………………………………… 468

Подсистема udev………………………………………………………………………………………………………………. 473

Идентификация модуля……………………………………………………………………………………………………. 477

Ошибки идентификации модуля……………………………………………………………………………………… 479

Устройства на шине PCI…………………………………………………………………………………………………………. 480

Подключение к линии прерывания…………………………………………………………………………………. 491

Отображение памяти……………………………………………………………………………………………………….. 492

DMA…………………………………………………………………………………………………………………………………… 493

Устройства USB……………………………………………………………………………………………………………………….. 499

Некоторые технические детали……………………………………………………………………………………… 499

Поддержка в Linux…………………………………………………………………………………………………………… 501

Пара слов о USB-модемах………………………………………………………………………………………………. 503

Устройства USB в коде модуля………………………………………………………………………………………. 506

Многофункциональные USB-устройства………………………………………………………………………. 514

Устройства в пространстве пользователя…………………………………………………………………………….. 520

Аппаратные порты…………………………………………………………………………………………………………… 521

Особенности доступа………………………………………………………………………………………………………. 526

Проект libusb…………………………………………………………………………………………………………………….. 527

GPIO…………………………………………………………………………………………………………………………………… 536

Глава 7. Расширенные возможности программирования……………………… 543

Операции с файлами данных………………………………………………………………………………………………….. 544

Запуск новых процессов из ядра……………………………………………………………………………………………. 552

Сигналы UNIX………………………………………………………………………………………………………………………….. 554

Вокруг экспорта символов ядра…………………………………………………………………………………………….. 561

Неэкспортируемые символы ядра………………………………………………………………………………….. 564

Использование неэкспортируемых символов……………………………………………………………….. 572

Подмена системных вызовов…………………………………………………………………………………………… 576

Добавление новых системных вызовов………………………………………………………………………….. 584

Скрытый обработчик системного вызова……………………………………………………………………… 591

Динамическая загрузка модулей……………………………………………………………………………………………. 600

…из процесса пользователя…………………………………………………………………………………………….. 601

…из модуля ядра……………………………………………………………………………………………………………….. 609

Подключаемые плагины………………………………………………………………………………………………….. 613

Обсуждение………………………………………………………………………………………………………………………………. 623

Глава 8. Отладка в ядре……………………………………………………………………….. 628

Отладочная печать………………………………………………………………………………………………………………….. 629

Интерактивные отладчики……………………………………………………………………………………………………… 629

Отладка в виртуальной машине…………………………………………………………………………………………….. 632

Отдельные отладочные приемы и трюки………………………………………………………………………………. 635

Модуль, исполняемый как разовая задача……………………………………………………………………. 635

Тестирующий модуль………………………………………………………………………………………………………. 637

Интерфейсы пространства пользователя к модулю……………………………………………………… 640

Комплементарный отладочный модуль………………………………………………………………………… 642

Пишите в файлы протоколов…………………………………………………………………………………………… 645

Некоторые мелкие советы в завершение……………………………………………………………………….. 645

Чаще перезагружайте систему!……………………………………………………………………………… 645

Используйте естественные POSIX-тестеры………………………………………………………….. 646

Тестируйте чтение сериями……………………………………………………………………………………. 646

Заключение………………………………………………………………………………………….. 647

Приложение 1. Краткая справка по утилите make………………………………… 649

Приложение 2. Тесты распределителя памяти………………………………………. 652

Приложение 3. Четыре способа записи в защищенную страницу…………. 666

Описание проблемы………………………………………………………………………………………………………………… 666

Отключение страничной защиты: ассемблер……………………………………………………………………….. 667

Отключение страничной защиты: API ядра………………………………………………………………………….. 668

Снятие защиты со страницы памяти……………………………………………………………………………………… 670

Наложение отображения участка памяти…………………………………………………………………………….. 671

Тест выполнения………………………………………………………………………………………………………………………. 672

Обсуждение………………………………………………………………………………………………………………………………. 674

Позднее дополнение………………………………………………………………………………………………………………… 675

Источники информации……………………………………………………………………….. 677

Предметный указатель…………………………………………………………………………. 681

Об авторе……………………………………………………………………………………………… 685

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор нескольких книг по Linux и Unix, высоко оцененных профессионалами и широкой читательской аудиторией.

Опубликовано

Вышла книга “Linux и Go. Эффективное низкоуровневое программирование”

Linux и Go. Эффективное низкоуровневое программирование

Первая русскоязычная книга об интеграции языка Go в архитектуру ядра Linux. Содержит вводный курс по языку Go для системного программирования, описывает применение Go для реализации конкурентности и параллелизма, рассказывает об интероперабельности между имеющимся кодом на C с новым кодом на Go, а также исследует возможности внедрения Go для повышения производительности различных дистрибутивов.

Книга ориентирована на программистов и системных администраторов, работающих с Linux, будет интересна разработчикам ядра Linux и драйверов устройств.

 

Ядро операционной системы Linux и множество модулей для различных дистрибутивов написаны на языке C. Притом, что язык С продолжает развиваться и активно использоваться на практике, в область системного программирования постепенно проникают и более молодые языки, в частности Go.

Перед вами – первая фундаментальная книга об использовании Go в Linux. Здесь вы познакомитесь с основами системного программирования, изучите детали взаимодействия между ядром и пользовательским пространством Linux, а также узнаете об интероперабельности между С и Go, о том, в каких аспектах и нюансах Linux язык Go может заменить и уже заменяет язык C. Особое внимание уделено конкурентности, параллелизму и стандарту POSIX. В конце книги для закрепления материала приведены реализации нескольких популярных алгоритмов.

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор нескольких книг по Linux и Unix, высоко оцененных профессионалами и широкой читательской аудиторией.

Книгу “Linux и Go. Эффективное низкоуровневое программирование” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие. 7

Предназначение и целевая аудитория. 7

Код примеров и замеченные опечатки. 9

Соглашения и выделения, принятые в тексте. 10

Напоминание. 11

Источники информации. 11

Часть I. Инструментарий языка Go. 13

Глава 1. Предыстория Go. 15

«Отцы-основатели» о целях и мотивации…… 15

Применимость: беглый взгляд. 16

Go, C, C++ и другие…… 17

Источники информации. 22

Глава 2. Разворачиваем экосистему Go. 23

Создание среды. 23

Стандартная инсталляция. 23

Версии среды. 25

Альтернативы. 26

«Самая последняя» версия. 27

Смена версий. 30

Проверяем: простейшая программа. 30

Проверяем на простейшем приложении. 32

Библиотеки статические и динамические. 34

Компиляция или интерпретация. 34

Выбор: GoLang или GCC?. 35

Инфраструктура GoLang. 36

Команды go. 36

Переменные окружения. 39

Платформы, переносимость и кросс-компиляция. 47

Стиль кодирования (автоформатирование — fmt) 49

Сборка приложений (build) 51

Сценарии на языке Go (run) 51

Загрузка проектов из сети (get) 52

Утилиты GoLang (tool) 57

Связь с кодом C (Cgo) 60

Сторонний и дополнительный инструментарий. 63

Источники информации. 65

Глава 3. Неформально о синтаксисе Go. 66

Типы данных. 71

Переменные. 73

Выполнение такого приложения. 74

Повторные декларации и переприсваивания. 76

Константы. 77

Агрегаты данных. 79

Массивы и срезы. 79

Двухмерные массивы и срезы. 84

Структуры. 85

Таблицы (хэши) 87

Динамическое создание переменных. 89

Конструкторы и составные литералы. 90

Операции. 91

Функции. 94

Вариативные функции. 98

Стек процедур завершения. 100

Обобщенные функции. 101

Функции высших порядков. 102

Встроенные функции. 104

Объектно-ориентированное программирование. 106

Методы. 107

Интерфейсы. 113

Обработка ошибочных ситуаций. 117

Структура пакетов (библиотек) Go. 121

Функция init 125

Импорт для использования побочных эффектов. 126

Некоторые полезные и интересные стандартные пакеты. 126

Пакет runtime. 127

Форматированный ввод-вывод. 128

Строки и пакет strings 129

Большие числа. 134

Автоматизированное тестирование. 135

Источники информации. 135

Часть II. Конкурентность и многопроцессорность. 137

Глава 4. Процессоры в Linux. 139

Процессоры, ядра и гипертрэдинг. 142

Загадочная нумерация процессоров. 144

Управление процессорами Linux. 147

Привязка к процессору. 147

Как происходит диспетчирование в Linux. 150

Источники информации. 156

Глава 5. Параллелизм и многопроцессорность. 157

Эволюция модели параллелизма. 157

Параллельные процессы и fork. 157

Потоки ядра и pthread_t POSIX.. 160

Сопрограммы — модель параллелизма Go. 166

Параллелизм в Go. 167

Сопрограммы — как это выглядит. 168

Возврат значений функцией. 171

Ретроспектива: сопрограммы в C++. 172

Каналы. 172

Функциональные замыкания в сопрограммах. 177

Примитивы синхронизации. 179

Конкурентность и параллельность. 185

Источники информации. 190

Глава 6. Масштабирование. 191

Планирование активности сопрограмм. 191

Испытательный стенд. 193

Микрокомпьютеры (Single-Board Computers) 193

Рабочие десктопы. 196

Серверы промышленного класса. 197

Масштабирование в реале. 198

1-я попытка …… 199

2-й подход к снаряду…… 205

О числе потоков исполнения. 213

Источники информации. 217

Часть III. Некоторые примеры и сравнения. 219

Глава 7. Осваиваемся в синтаксисе Go. 221

Утилита echo. 221

Итерационное вычисление вещественного корня. 223

Вычисление числа π. 225

Случайная последовательность и ее моменты. 227

Обсчет параметров 2D выпуклых многоугольников. 230

Тривиальный web-сервер. 235

Источники информации. 236

Глава 8. Структуры данных, типы и их методы.. 237

Массивы и срезы. 237

Многомерные срезы и массивы. 242

Функции с множественным возвратом. 243

Глава 9. Элементы функционального программирования. 246

Функциональные замыкания. 246

Карринг. 253

Рекурсия. 255

Рекурсия с кэшированием. 255

Чистые функции. 257

Источники информации. 257

Глава 10. Скоростные и другие сравнения языков. 258

Алгоритмические задачи для сравнения. 258

Некоторые известные алгоритмы. 259

Числа Фибоначчи. 260

Пузырьковая сортировка. 263

Ханойская башня. 268

Решето Эратосфена. 272

Глава 11. Многопроцессорные параллельные вычисления. 276

Скорость активации параллельных ветвей. 276

Гонки. 281

Защита критических данных. 285

Многопроцессорный брутфорс. 289

Каналы в сопрограммах. 295

Таймеры. 296

Тикеры. 298

Когда не нужно злоупотреблять многопроцессорностью.. 299

Источники информации. 302

Заключение. 303

Об авторе. 304