07 March 2021
Рассмотрены команды Linux, основы работы в командной строке, а также настройка системы с помощью программ, обладающих только текстовым интерфейсом. Работа с системой выполняется только в режиме консоли, что требует определенной квалификации пользователя. Подробно описаны наиболее полезные команды Linux, особенности файловой системы Linux, криптографическая файловая система eCryptfs, система инициализации systemd, загрузчики GRUB и GRUB2, ядро 3.x. С позиции пользователя оценены интерактивные возможности оболочки zsh. Даны практические примеры разработки сценариев на языках оболочек bash и tcsh. Рассмотрено управление пакетами для наиболее актуальных на данный момент дистрибутивов. Для энтузиастов Linux написана отдельная глава о разработке собственного дистрибутива Linux и создании загрузочного LiveCD. Во втором издании полностью переработан материал по созданию собственных RPM-пакетов, настройке сети и Интернета, появилось описание псевдофайловой системы /proc и ряда полезных утилит: chage, pwck, grpck, groupmod, groupdel, sed, dd и др.
Введение | 13 |
Что нового во втором издании? | 16 |
Часть I. Командная строка | 19 |
Глава 1. Введение в командную строку | 21 |
1.1. Вход в систему | 21 |
1.2. Команды poweroff, halt, reboot, shutdown | 24 |
1.3. Как работать в консоли | 24 |
1.4. Графические терминалы | 25 |
Глава 2. Командные интерпретаторы | 27 |
2.1. Файл /etc/shells | 27 |
2.2. Оболочка sh | 28 |
2.3. Оболочка csh | 28 |
2.4. Оболочка ksh | 29 |
2.5. Оболочка bash | 29 |
2.6. Оболочка zsh | 30 |
2.7. Оболочка tcsh | 31 |
2.8. Оболочка ash | 31 |
2.9. Выбор оболочки | 31 |
Глава 3. Базовые команды Linux | 33 |
3.1. О командах Linux | 33 |
3.2. Команда arch: сведения об архитектуре компьютера | 33 |
3.3. Команда banner: текстовый баннер | 34 |
3.4. Команда chsh: изменение командного интерпретатора | 34 |
3.5. Команды cksum и md5sum: вычисление контрольной суммы файла | 35 |
3.6. Команда clear: очистка экрана | 36 |
3.7. Команда date: вывод даты и времени | 36 |
3.8. Команда echo: вывод сообщения | 37 |
3.9. Команда exit: выход из системы | 37 |
3.10. Команда env: установка переменных окружения | 38 |
3.11. Команды man и info: вывод справки | 38 |
3.12. Команда printenv: вывод значения переменной окружения | 38 |
3.13. Команда reset: сброс терминала | 38 |
3.14. Команда sleep: пора спать | 39 |
3.15. Команда startx: запуск графического интерфейса X.Org | 39 |
3.16. Команда tee: перенаправление ввода | 39 |
3.17. Команда true: успешное завершение | 39 |
3.18. Команда yes: возвращает y | 40 |
3.19. Команда uname: название и версия дистрибутива Linux | 40 |
3.20. Конвертирование кодировок, звуковых и графических файлов | 40 |
Глава 4. Файловая система. Команды для работы с файловой системой | 43 |
4.1. Файловые системы, поддерживаемые Linux | 43 |
4.1.1. Выбор файловой системы | 45 |
4.1.2. Linux и файловые системы Windows | 46 |
4.1.3. Сменные носители | 46 |
4.2. Особенности файловой системы Linux | 46 |
4.2.1. Имена файлов в Linux | 46 |
4.2.2. Файлы и устройства | 47 |
4.2.3. Корневая файловая система и монтирование | 48 |
4.2.4. Стандартные каталоги Linux | 49 |
4.3. Команды для работы с файлами и каталогами | 50 |
4.3.1. Работа с файлами | 50 |
4.3.2. Работа с каталогами | 52 |
4.4. Команда ln: создание ссылок | 54 |
4.5. Команды chown, chmod и chattr | 55 |
4.5.1. Команда chmod: права доступа к файлам и каталогам | 55 |
4.5.2. Команда chown: смена владельца файла | 57 |
4.5.3. Специальные права доступа (SUID и SGID) | 57 |
4.5.4. Команда chattr: атрибуты файла, запрет изменения файла | 57 |
4.6. Монтирование файловых систем | 59 |
4.6.1. Команды mount и umount | 59 |
4.6.2. Файлы устройств и монтирование | 60 |
Жесткие диски | 60 |
Приводы оптических дисков | 62 |
Дискеты | 62 |
Флешки и внешние жесткие диски | 62 |
4.6.3. Опции монтирования файловых систем | 63 |
4.6.4. Монтирование разделов при загрузке | 64 |
4.6.5. Подробно о UUID и файле /etc/fstab | 66 |
4.6.6. Монтирование Flash-дисков | 68 |
4.7. Настройка журнала файловой системы ext3 | 69 |
4.8. Файловая система ext4 | 70 |
4.8.1. Сравнение ext3 и ext4 | 70 |
4.8.2. Совместимость с ext3 | 72 |
4.8.3. Переход на ext4 | 72 |
4.9. Особые команды | 73 |
4.9.1. Команда mkfs: создание файловой системы | 73 |
4.9.2. Команда fsck: проверка и восстановление файловой системы | 73 |
4.9.3. Команда chroot: смена корневой файловой системы | 74 |
4.9.4. Установка скорости CD/DVD | 74 |
4.9.5. Монтирование каталога к каталогу | 74 |
4.9.6. Команды поиска файлов | 74 |
4.10. Многофункциональная команда dd | 76 |
4.10.1. Копирование файлов с помощью команды dd | 76 |
4.10.2. Разделение файла на несколько частей | 77 |
4.10.3. Создание резервной копии жесткого диска | 78 |
4.10.4. Создание архива с резервной копией всего жесткого диска | 78 |
4.10.5. Уничтожение всех данных раздела жесткого диска | 78 |
4.11. eCryptfs: краткое руководство для секретного агента | 79 |
Глава 5. Процессы | 82 |
5.1. Команды kill, killall, xkill и ps | 82 |
5.2. Программа top: кто больше всех расходует процессорное время? | 84 |
5.3. Команды nice и renice: изменение приоритета процесса | 86 |
5.4. Перенаправление ввода/вывода | 86 |
5.5. Команда fuser: кто открыл ресурс? | 87 |
Глава 6. Запись CD/DVD из консоли | 88 |
6.1. Команда dd: создание образа диска | 88 |
6.2. Команды cdrecord и dvdrecord: запись образа на болванку | 89 |
6.3. Команды очистки перезаписываемых дисков | 90 |
6.4. Команда mkisofs: создание ISO-образа | 90 |
6.5. Преобразование образов дисков | 91 |
6.6. Создание и монтирование файлов с файловой системой | 91 |
Глава 7. Команды для работы с текстом | 92 |
7.1. Команда cmp: сравнение двух файлов | 92 |
7.2. Команда column: разбивка текста на столбцы | 92 |
7.3. Команда comm: еще одна команда для сравнения файлов | 93 |
7.4. Команда diff: сравнение файлов | 93 |
7.5. Команда diff3: сравнение трех файлов | 94 |
7.6. Команда egrep: расширенный текстовый фильтр | 95 |
7.7. Команда expand: замена символов табуляции пробелами | 96 |
7.8. Команда fmt | 96 |
7.9. Команда fold | 97 |
7.10. Команда grep: текстовый фильтр | 97 |
7.11. Команды more и less: постраничный вывод | 97 |
7.12. Команды head и tail: вывод начала и хвоста файла | 97 |
7.13. Команда look | 98 |
7.14. Команда sort: сортировка файлов | 98 |
7.15. Команда split: разбиение файлов на несколько частей | 98 |
7.16. Команда unexpand: замена пробелов символами табуляции | 99 |
7.17. Команды vi, nano, ee, mcedit, pico: текстовые редакторы | 99 |
7.18. Команда wc: подсчет слов в файле | 103 |
7.19. Некоторые команды преобразования символов и форматов | 104 |
7.20. Команда sed: потоковый текстовый редактор | 104 |
Глава 8. Команды для работы с сетью и Интернетом | 106 |
8.1. Команда ifconfig: управление сетевыми интерфейсами | 106 |
8.2. Маршрутизация | 108 |
8.2.1. Команда netstat: просмотр таблицы маршрутизации | 108 |
8.2.2. Команда route: изменение таблицы маршрутизации | 112 |
8.3. Команда pppoeconf: настройка DSL-соединения | 114 |
8.4. Команда pppconfig: настройка модемного (PPP) соединения | 118 |
8.5. Команда wvdial: настройка PPP-соединения | 119 |
8.6. Текстовые браузеры | 121 |
8.7. Команда ftp: FTP-клиент | 121 |
8.8. Команда wget: загрузка файлов | 122 |
8.9. Команды для диагностики сети | 124 |
8.10. Настройка сети вручную. Конфигурационные файлы | 128 |
8.10.1. Конфигурационные файлы Fedora | 130 |
8.10.2. Конфигурационные файлы openSUSE | 132 |
8.10.3. Конфигурационные файлы Debian/Ubuntu | 134 |
8.11. Команда mii-tool | 134 |
8.12. Сетевой сканер nmap | 135 |
8.12.1. Что такое nmap? | 135 |
8.12.2. Где мне взять nmap? | 136 |
8.12.3. Примеры использования nmap | 136 |
Глава 9. Команды системного администратора | 139 |
9.1. Программы разметки диска | 139 |
9.1.1. Программа fdisk | 139 |
9.1.2. Программа parted | 142 |
9.1.3. Введение в GPT. Утилиты для работы с GPT | 146 |
9.2. Информация о системе и пользователях | 147 |
9.2.1. Команда uptime: информация о работе системы | 147 |
9.2.2. Команда users: информация о пользователях | 147 |
9.2.3. Команды w, who, ftpwho и whoami: информация о пользователях | 148 |
9.2.4. Мониторинг работы системы | 148 |
9.3. Планировщик at | 151 |
9.3.1. Команда at: добавление задания | 151 |
9.3.2. Команды atq и atrm: очередь заданий и удаление задания | 151 |
9.4. Планировщик crond | 151 |
9.5. Планировщик anacron | 153 |
9.6. Команда date: вывод и установка даты и времени | 154 |
9.7. Команды free и df: информация о системных ресурсах | 154 |
9.8. Команда ssh: удаленный вход в систему | 155 |
9.9. Устройства и драйверы | 156 |
9.10. Псевдофайловая система /proc | 159 |
9.10.1. Информационные файлы | 160 |
9.10.2. Файлы, позволяющие изменять параметры ядра | 160 |
9.10.3. Файлы, изменяющие параметры сети | 161 |
9.10.4. Файлы, изменяющие параметры виртуальной памяти | 162 |
9.10.5. Файлы, позволяющие изменить параметры файловых систем | 162 |
9.10.6. Как сохранить изменения | 163 |
Часть II. Операционная система | 165 |
Глава 10. Загрузчики Linux | 167 |
10.1. Основные загрузчики | 167 |
10.2. Конфигурационные файлы GRUB и GRUB2 | 168 |
10.2.1. Конфигурационный файл GRUB | 168 |
10.2.2. Конфигурационный файл GRUB2. Команды grub-mkconfig и update-grub | 171 |
10.3. Команды установки загрузчиков | 175 |
10.4. Установка тайм-аута выбора операционной системы. Редактирование параметров ядра | 175 |
10.5. Установка собственного фона загрузчиков GRUB и GRUB2 | 178 |
10.6. Постоянные имена и GRUB | 179 |
10.7. Восстановление загрузчика GRUB/GRUB2 | 180 |
10.8. Две и более ОС Linux на одном компьютере | 181 |
10.9. Загрузка с ISO-образов | 182 |
10.10. Установка пароля загрузчика | 183 |
10.10.1. Загрузчик GRUB | 183 |
10.10.2. Загрузчик GRUB2 | 185 |
Глава 11. Системы инициализации Linux | 187 |
11.1. Начальная загрузка Linux | 187 |
11.2. Система инициализации init | 189 |
11.2.1. Команда init | 190 |
11.2.2. Команда service | 191 |
11.2.3. Редакторы уровней запуска | 191 |
11.2.4. Параллельная загрузка сервисов, или как сделать старую систему init быстрее | 192 |
11.3. Система инициализации upstart | 193 |
11.3.1. Как работает upstart? | 193 |
11.3.2. Конфигурационные файлы upstart | 194 |
11.4. Система инициализации systemd | 195 |
11.4.1. Идеальная система инициализации | 195 |
11.4.2. Введение в systemd | 196 |
11.4.3. Основные особенности systemd | 198 |
11.4.4. Сравнение init, upstart и systemd | 198 |
11.4.5. Немного практики | 200 |
11.4.6. Команды системного администратора | 203 |
11.5. Система инициализации Slackware | 204 |
Глава 12. Команды управления пользователями | 207 |
12.1. Многопользовательская система | 207 |
12.2. Пользователь root | 208 |
12.2.1. Максимальные полномочия | 208 |
12.2.2. Как работать без root | 208 |
Команда sudo | 209 |
Команда su | 209 |
Проблемы с sudo в Ubuntu и Kubuntu | 210 |
Ввод серии команд sudo | 211 |
12.2.3. Переход к традиционной учетной записи root | 211 |
Преимущества и недостатки sudo | 211 |
Традиционная учетная запись root в Ubuntu | 212 |
Традиционная учетная запись root в Mandriva | 213 |
Вход в качестве root в Fedora | 214 |
12.3. Создание, удаление и модификация пользователей стандартными средствами | 215 |
12.3.1. Команды adduser и passwd | 215 |
12.3.2. Команды usermod и chage | 216 |
12.3.3. Команда userdel | 217 |
12.3.4. Команды pwck и grpck | 218 |
12.3.5. Подробно о создании пользователей | 218 |
12.4. Группы пользователей | 219 |
12.5. Команды квотирования | 219 |
Глава 13. Ядро | 223 |
13.1. Команда dmesg: вывод сообщений ядра | 223 |
13.2. Параметры ядра | 229 |
13.3. Компиляция ядра | 233 |
13.3.1. Установка исходных кодов ядра | 234 |
13.3.2. Настройка ядра | 234 |
13.3.3. Компиляция ядра | 238 |
13.4. RT-ядро | 240 |
13.5. Особенности компиляции ядра в других дистрибутивах Linux | 240 |
Часть III. Программирование и автоматизация в Linux | 243 |
Глава 14. Программирование на языке C. Утилиты для программиста | 245 |
14.1. Команда gcc: компилятор | 245 |
14.2. Команда make: сборка проекта | 247 |
14.3. Команды из пакета binutils | 248 |
14.4. Другие полезные команды | 249 |
14.5. Команда gdb: отладка программ | 249 |
Глава 15. Автоматизация рутинных задач с помощью bash | 252 |
15.1. Настройка bash | 252 |
15.2. Автоматизация задач с помощью bash | 254 |
15.3. Привет, мир! | 255 |
15.4. Использование переменных в собственных сценариях | 255 |
15.5. Передача параметров сценарию | 257 |
15.6. Массивы и bash | 257 |
15.7. Циклы | 258 |
15.8. Условные операторы | 259 |
15.9. Функции | 260 |
15.10. Примеры сценариев | 260 |
15.10.1. Сценарий мониторинга журнала | 260 |
15.10.2. Переименование файлов | 261 |
15.10.3. Преобразование систем счисления | 262 |
15.10.4. Проверка прав пользователя | 262 |
15.10.5. Генератор имени временного файла | 263 |
15.10.6. Проверка свободного дискового пространства с уведомлением по электронной почте | 263 |
Глава 16. Автоматизация задач с помощью tcsh | 264 |
16.1. Использование tcsh | 264 |
16.2. Конфигурационные файлы tcsh | 265 |
16.3. Создание сценариев на tcsh | 266 |
16.3.1. Переменные, массивы и выражения | 266 |
16.3.2. Чтение ввода пользователя | 269 |
16.3.3. Переменные оболочки tcsh | 269 |
16.3.4. Управляющие структуры | 272 |
Условный оператор if | 272 |
Условный оператор if..then..else | 273 |
Оператор foreach | 274 |
Оператор while | 274 |
Оператор switch | 275 |
16.3.5. Встроенные команды tcsh | 276 |
Глава 17. Автоматизация обработки задач средствами gawk | 278 |
17.1. Введение в gawk | 278 |
17.2. Основы языка | 278 |
17.2.1. Образцы и действия | 278 |
17.2.2. Операторы | 279 |
17.2.3. Переменные | 280 |
17.2.4. Ассоциативные массивы | 280 | /tr>
17.2.5. Функции | 280 |
17.2.6. Вывод с помощью printf | 281 |
17.2.7. Управляющие структуры | 282 |
Условный оператор if..else | 282 |
Цикл while | 282 |
Цикл for | 282 |
17.3. Примеры | 283 |
Глава 18. Собственный сервер для PHP-программиста | 286 |
18.1. Зачем нужен сервер PHP-программисту? | 286 |
18.2. Web-сервер | 286 |
18.2.1. Установка Apache и PHP | 286 |
18.2.2. Тестирование настроек Web-сервера | 287 |
18.2.3. Конфигурационные файлы сервера. Команды запуска и останова сервера | 289 |
18.3. Сервер баз данных MySQL | 289 |
18.3.1. Установка сервера | 289 |
18.3.2. Команды управления пользователями MySQL-сервера | 290 |
18.3.3. Команды запуска и останова сервера | 291 |
18.3.4. Программа MySQL Administrator | 291 |
18.4. Быстрая настройка FTP-сервера | 293 |
Часть IV. Управление пакетами | 297 |
Глава 19. Введение в пакеты. Программы rpm и dpkg | 299 |
19.1. Что такое пакет? | 299 |
19.2. Репозитории пакетов | 301 |
19.3. Программы для управления пакетами | 302 |
19.4. Программа rpm для всех дистрибутивов, совместимых с Red Hat | 303 |
19.5. Программа rpmbuild: простая сборка пакетов исходного кода | 304 |
19.6. Программа dpkg: управление DEB-пакетами | 304 |
19.7. Команда alien: установка RPM-пакетов | 306 |
19.8. Создание RPM-пакетов | 307 |
19.8.1. Подготовка окружения | 307 |
19.8.2. Создание файла спецификаций | 308 |
19.8.3. Сборка пакета | 310 |
Глава 20. Управление пакетами в Debian/Ubuntu | 311 |
20.1. Программы для управления пакетами | 311 |
20.2. Программа apt-get | 311 |
20.2.1. Установка пакетов. Источники пакетов | 311 |
20.2.2. Основные команды программы apt-get | 312 |
Обновление источников | 313 |
Удаление и переустановка пакетов | 313 |
Обновление пакета и системы | 314 |
Очистка кэша пакетов | 314 |
Опции программы apt-get/td> | 315 |
Подключение репозитория Medibuntu в Ubuntu | 315 |
Корова в apt-get | 316 |
20.3. Программа aptitude | 316 |
Глава 21. Управление пакетами в Fedora | 317 |
21.1. Использование программы yum | 317 |
21.2. Управление источниками пакетов | 319 |
21.3. Установка пакетов через прокси-сервер | 321 |
21.4. Плагины для программы yum | 321 |
Глава 22. Управление пакетами в openSUSE. Менеджер пакетов zypper | 322 |
Глава 23. Управление пакетами в Slackware | 326 |
23.1. Особенности Slackware | 326 |
23.2. Управление пакетами | 327 |
23.2.1. Команда installpkg: установка пакетов | 328 |
23.2.2. Команда removepkg: удаление пакетов | 329 |
23.2.3. Команда upgradepkg: обновление пакетов | 330 |
23.3. Нет нужного пакета — вам поможет программа rpm2tgz | 330 |
23.4. Программа slackpkg: установка пакетов из Интернета | 330 |
Глава 24. Управление пакетами в Mandriva | 332 |
24.1. Команда urpmi: установка пакетов | 332td> |
24.2. Команда urpme: удаление пакетов | 337 |
24.3. Поиск пакета. Получение информации о пакете | 337 |
Часть V. Средства резервного копирования и дистрибутивостроения | 339 |
Глава 25. Создание дистрибутива | 341 |
25.1. Зачем нужно создавать еще один дистрибутив? | 341 |
25.2. Инструменты для создания дистрибутива | 342 |
25.3. Этапы создания дистрибутива | 343 |
25.4. Процесс создания дистрибутива | 343 |
25.5. Развитие дистрибутива | 346 |
Глава 26. Средства резервного копирования. Создание LiveCD-диска | 347 |
26.1. Необходимость в "живой" резервной копии | 347 |
26.2. Средства клонирования Linux | 348 |
26.3. Clonezilla | 349 |
26.4. Remastersys Backup | 356 |
26.5. Linux Live | 358 |
Заключение | 361 |
Предметный указатель | 363 |