====== Основы администрирования систем Linux ====== * "UNIX в основном простая операционная система, но нужно быть гением, чтобы понять её простоту" (Денис Ритчи) * "Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий" (Козьма Прутков) ===== Программа курса ===== * [[https://www.specialist.ru/course/yun1-b|Linux. Уровень 1. Основы администрирования]] ===== Модуль 0. Подготовка стенда в классе ===== * Узнать свой номер стенда ===== Модуль 1. Введение в операционную систему GNU/Linux ===== * [[https://ru.wikipedia.org/wiki/Bell_Labs|Лаборатории Белла]] * [[https://ru.wikipedia.org/wiki/Space_Travel_(игра)|Space Travel]] * [[https://ru.wikipedia.org/wiki/UNIX|UNIX]] * Список команд 1-й редакции UNIX (1971) ''cat, chdir, chmod, cp, ed, find, mail, mkdir, mkfs, mount, mv, rm, rmdir, wc, who.'' * [[https://ru.wikipedia.org/wiki/UNIX_System_V|UNIX System V]] * [[https://ru.wikipedia.org/wiki/BSD|UNIX BSD]] * [[https://ru.wikipedia.org/wiki/POSIX|POSIX]] * [[https://ru.wikipedia.org/wiki/GNU|GNU]] * [[https://ru.wikipedia.org/wiki/Столлман,_Ричард_Мэттью|Ричард Мэттью Столлман]] * [[https://ru.wikipedia.org/wiki/Таненбаум,_Эндрю|Э́ндрю Стюарт Таненба́ум]] * [[https://ru.wikipedia.org/wiki/Торвальдс,_Линус|Линус Торвальдс]] * [[https://ru.wikipedia.org/wiki/История_Linux|История Linux]] * [[Выбор дистрибутива Linux]] * [[Организация системы UNIX]] ===== Модуль 2. Установка ===== * Обзор вариантов и этапы [[Инсталляция системы Linux]] (**практикум**: название ВМ из названия iso, все "по умолчанию", отключить автоматическую настройку в VBox) * [[Технология VirtualBox]] (**практикум**: экспорт конфигураций, переименование VM, подключение через "Сетевой мост") ===== Модуль 3. Основы работы в командной строке ===== Подключение к UNIX * [[https://ru.wikipedia.org/wiki/Телетайп|Телетайп]] * [[https://ru.wikipedia.org/wiki/Текстовый_терминал|Текстовый_терминал]] * [[https://ru.wikipedia.org/wiki/RS-232|Интерфейс RS-232]] * [[https://ru.wikipedia.org/wiki/Telnet|Telnet]] * [[https://ru.wikipedia.org/wiki/SSH|Протокол SSH]] * [[https://ru.wikipedia.org/wiki/X_Window_System|X Window System]] * [[https://ru.wikipedia.org/wiki/XDM|X Display Manager]] Работа в командной строке * [[https://ru.wikipedia.org/wiki/Интерфейс_командной_строки|Интерфейс командной строки]] * [[https://ru.wikipedia.org/wiki/Bash|Bourne again shell]] * [[https://www.tutorialspoint.com/unix_terminal_online.php|Unix Terminal Online]] * [[https://youtu.be/jAhvVBpx3IM|Видео урок: Как пользователи использовали UNIX :)]] * [[https://youtu.be/7lE8Y8U4M0g|Видео урок: Принцип работы терминала UNIX]] * [[Сервис SSH]] (**практикум**: определяем ip, подключаемся PyTTY, копируем Documents\wallpaper.jpg через WinSCP ) * Интерпретатор bash (**практикум**: горячие клавиши, tab подстановки, копирование/вставка текста, история команд и поиск в ней) * Команды и параметры ([[Структура команд UNIX]]) (**практикум**) * Типы команд (type cd, pwd, exit, history, echo) * Символы подстановки (пример использования: [[Команда chroot]]) * [[Переменные окружения]] и экранирование * [[Перенаправление потоков ввода/вывода]] и конвейеры ([[Команды фильтры]], практика в следующем модуле) ===== Модуль 4. Получение справки ===== * Обзор справочных систем * [[https://ru.wikipedia.org/wiki/Google_(поисковая_система)]] * [[https://ru.wikipedia.org/wiki/Stack_Overflow]] * [[https://ru.wikipedia.org/wiki/Большая_языковая_модель]] * Справочная система man и info * [[Документация UNIX]] (**практикум**: навигация и поиск внутри man документа) * [[Локализация окружения]] для отдельных команд (**практикум**) * Доп задание: найти команду, выводящую список файлов в каталоге /usr/share, отсортированный по размеру ===== Модуль 5. Работа с файлами и текстом в командной строке ===== * [[Структура файловой системы]] (стандарт [[https://ru.wikipedia.org/wiki/FHS|FHS]]) * [[Команды для работы с файловой системой]] (утилиты ls, touch, mkdir, ln, cp, mv, rm, rmdir) * [[Локализация системы#Локализация временной зоны]] (**практикум**) * [[Команда find]] $ cp -r /usr/share/man /tmp/man $ find /tmp/man | wc -l * [[Команды чтения содержимого файлов]] (утилиты cat, tac, head, tail, more, less, grep, sort, wc) * [[Текстовый редактор nano]] (**практикум**) * [[Текстовые редакторы ed, sed, vi, vim]] (**практикум**: замена [[Текстовые редакторы ed, sed, vi, vim#Редактор vi, vim|vim-tiny]] на vim и его настройка) * **Практикум**: [[Настройка командных интерпретаторов]] - добавление alias sudo (для текущего пользователя) и history-search (для всех) ===== Модуль 6. Работа с оборудованием, носителями и сетью ===== * Просмотр общей информации (утилиты lscpu, free, lspci, lsusb, lshw) * [[Анализ оборудования в Linux]] * Именование сетевых плат * Обзор конфигурационных файлов для управления сетью * Диагностика работы сети (утилиты ifconfig, ip, route, netstat, ss, ping, traceroute) * [[Настройка сети в Linux]] * **Практикум**: отключение [[Настройка сети в Linux#Динамическая настройка ip параметров]] и настройка [[Настройка сети в Linux#Файлы конфигурации]] общие и ifupdown * [[Утилиты для тестирования сети]] * Обзор протокола [[Сервис FreeRADIUS#EAP]] для 802.1x * [[Настройка сети в Linux#Использование NetworkManager]] (**практикум**) * [[Инсталяция системы в конфигурации Desktop]] (**практикум**) * Обзор вариантов разметки носителей, файловых систем, именование носителей и разделов * Просмотр информации о носителях и файловых системах (утилиты lsblk, blkid, df, du) * Создание и удаление разделов с помощью fdisk * Создание файловых систем (утилиты mkfs.*) * Монтирование (утилита mount, файл /etc/fstab) * [[Управление файловыми системами в Linux]] (**практикум**) * Можно показать перенос каталога /var на новый раздел с окончательной синхронизацией в однопользовательском режиме с [[Использование загрузчика GRUB]] и [[Пакет RSYNC]] * Можно показать физическое увеличение файла диска VM * [[Управление файловыми системами в Linux#Использование LVM]] (Logical Volume Manager) * Можно показать добавление физичекского диска в том ===== Модуль 7. Процессы ===== * Обзор псевдофайловой системы [[Анализ оборудования в Linux#procfs]] * Просмотр информации (утилиты ps и top) [[Процессы UNIX]] * [[Перенаправление потоков ввода/вывода]] (**практикум**: journalctl -f | grep, cat Ctrl D) * [[Переменные окружения#Управление процессами через переменные окружения]] * **Практикум** https_proxy для [[Утилита wget]] и [[Firefox]] (через встроенный в MobaXTerm X Server) * [[Локализация окружения]] для всей системы (**практикум**) * [[Коды завершения]] (практикум в 13-м модуле) * [[Сигналы]] (**практикум**: Ctrl C, vim и Ctrl Z) ===== Модуль 8. Системы инициализации и управление сервисами ===== * Обзор систем инициализации * Система инициализации systemd * Управление сервисами (утилита systemctl) * [[Управление сервисами в Linux]] (**практикум**: [[Сервис SSH#Аутентификация с использованием ключей ssh|ssh-key]], [[Управление сервисами в Linux#Система загрузки Systemd#|systemd, mysshvpn]]) ===== Модуль 9. Управление ПО ===== * [[https://ru.wikipedia.org/wiki/Исходный_код]] * [[https://ru.wikipedia.org/wiki/Компьютерная_программа]] * [[Установка ПО из исходных текстов]] ([[https://youtu.be/oz3WCD-dDpc|Видео урок]]) * Обзор вариантов управления ПО * Работа с ПО из репозиториев (утилита apt) * [[Управление ПО в Linux]] * **Практикум**: [[Управление ПО в Linux#Использование менеджера пакетов APT]], оптимизация репозитория, установка ПО, на примере почтовой подсистемы ===== Модуль 10. Управление локальными пользователями и группами ===== * Обзор конфигурационных файлов * Управление пользователями (утилиты useradd, usermod, userdel, passwd) * Управление группами (утилиты groupadd, groupmod, groupdel) * [[Управление учетными записями в Linux]] (**практикум**: sudo -i, создать УЗ user1, [[Настройка командных интерпретаторов#bash]] (HISTCONTROL), назначить пароль и ФИО) * Повышение привилегий (утилиты su и [[Пакет sudo]]) (**практикум**: добавить user1 в [[Управление учетными записями в Linux#Управление членством в группах|администраторы]] системы) * **Практикум**: [[Сервис SSH#Аутентификация с использованием ключей ssh]] в MobaXTerm для user1 и [[Настройка командных интерпретаторов#bash]] (TMOUT) для root ===== Модуль 11. Дискреционный контроль доступа ===== * Обзор видов контроля доступа * Владение * Права доступа UNIX * Утилиты chown, chgrp, chmod, umask * Показать пример файлами конфигурации [[Сервис Asterisk]] * [[Система безопасности UNIX]] (**практикум**: эксперименты с /tmp/file1 и УЗ student и user1) * Показать возможные проблемы с безопасностью при [[Команда tar#Создание архива]] и копировании его на удаленную систему в следующем модуле ===== Модуль 12. Архивация и компрессия ===== * [[Команда tar]] * Компрессоры gzip, bzip2, xz * **Практикум**: извление чувствительных данных из архива, по окончании - [[Управление учетными записями в Linux#Блокировка учетной записи]] user1 * **Практикум**: создание скрипта резервного копирования и umask в настройках [[Настройка командных интерпретаторов#bash]] ===== Модуль 13. Выполнение задач по расписанию ===== * [[Планирование выполнения заданий в Linux]] * [[Планирование выполнения заданий в Linux#Systemd timers]] (**практикум**) * **Практикум**: [[Коды завершения#Простая система мониторинга]] как итоговая работа, подсчитать количество unix технологий, использовать [[Сервисы Gateway и routing#Управление таблицей маршрутизации|blackhole]] для тестирования) ===== Модуль 14. Дополнительные материалы ===== * [[Анализ производительности системы]] * [[Регулярные выражения]] * [[Система управления печатью CUPS]] ===== Вопросы для самопроверки ===== - Какие Windows программы могут быть использованы для подключения к UNIX системе по протоколу ssh? - Что определяют аргументы команды/утилиты? - Что определяют ключи/опции команды/утилиты? - Какая команда используется для чтения UNIX документации? - Как осуществляется поиск в UNIX документации? - Что обозначают ключи «a», «l» в команде ls? - Какой командой можно создать файл? - Что означает символы "~", ".", "..", "/" в имени файла? - Что обозначают ключи "h/H", "v", "r/R" во многих командах? - Какие команды используются для анализа занятого места на диске/в каталоге? - Какой командой можно удалить непустой каталог? - Какие команды могут быть использованы для поиска файлов? - Какие команды используются для просмотра содержимого файлов? - Какая программа может быть использована для копирования файлов между UNIX и Windows по протоколу ssh? - Какой ключ команды tail позволяет "в онлайне" наблюдать процесс появления новых записей в файле? - Какая последовательность клавиш позволяет выйти из редактора vi без сохранения изменений? - Какой командой можно найти содержимое в файле по шаблону? - Какой ключ команды sort позволит отсортировать данные по числовому столбцу? - Что обозначают символы "^", "$", ".", "|" в регулярных выражениях? - Что появится на экране в результате последовательности команд: mkdir dir1; cd dir1/; touch echo ls; * - Каким образом можно определить тип файла в UNIX? - Что обозначают ключи "a", "x" в команде ps? - Что такое STDIN, STDOUT, STDERR и какие у них номера? - Что обозначают элементы "<", ">", "2>", "&1", "|" в выражениях shell - Объясните, как работает конструкция :> file1 - Чем отличается команда set от команды env? - Что влияет на выбор языка интерфейса в *NIX программах? - Как посмотреть код завершения процесса и какое он должен иметь значение, если не было ошибок? - Что обозначают элементы "&&", "||", ";", "&" в выражениях shell - Объясните, что происходит при использовании комбинаций "Ctrl C", "Ctrl D", "Ctrl Z"? - Как обрабатываются сигналы "HUP", "INT", "TERM", "KILL", "TSTP" процессами? - Что общего и в чем разница между Linux и UNIX? - Что такое Source-based, Binary based, Rolling release, LTS дистрибутивы? - Назовите этапы загрузки системы - Какие команды позволят определить аппаратные ресурсы системы? - Какие команды помогут определить версию ядра и дистрибутив системы? - Для чего нужны модули ядра? - Для чего служат переменные ядра? - Какие команды используются для управления/диагностики сетевых параметров системы? - Какие команды используются для тестирования настроек DNS? - Какие команды используются для анализа открытых сетевых портов системы? - Что общего между файлами /etc/resolv.conf и /etc/hosts? - Какие варианты управления файлом /etc/resolv.conf могут быть? - В каком виде хранится пароль пользователя в системной базе данных ? - Для чего предназначены команды umask, chmod, chown? - Что определяет маска 640 или -rw-r----- для файла? - Что обозначает бит "x" для файла и каталога - Что обозначает значение атрибута EUID=0 для процесса? - Что обозначает бит "s" для файла, содержащего программу? - Для чего предназначены команды su и sudo? - Какие недостатки установки ПО "вручную" из исходных текстов? - Какие команды используются для установки пакетов в Debian и CentOS? - Какие команды используются для работы с репозиториями ПО Debian и CentOS? - В чем опасность использования сторонних репозиториев с ПО? - Какие проблемы могут возникнуть при обновлении системы до следующего релиза? - Почему вместо rc.local стали применять системы инициализации/загрузки? - Что делает команда init n ? - Какие команды используются для вывода списков управляемых сервисов в системах инициализации SystemV, OpenRC, Systemd, rcNG? - Как включить/отключить автоматический запуск сервиса? - Какова причина наличия типа сообщения в системах syslog? - Что нужно сделать, что бы получать больше отладочной информации о работе сервиса? - Что обозначают ключи "c", "t", "x", "z", "f" в команде tar - Что нужно для использования ssh подключений в сценариях выполняемых периодически? - Как лучше оформить сценарии, выполняющиеся раз в минуту, час, день, неделю, месяц? - Как запрограммировать одноразовый запуск сценария в определенное время? - Перечислите основные ресурсы системы. - Перечислите команды, позволяющие найти критический ресурс. - Как запустить долговременный интерактивный процесс на удаленной системе, что бы можно было отключиться до его окончания? - Что определяет язык интерфейса пользователя в UNIX? - Назовите основные компоненты системы XWindow - Что общего между getty, sshd и xdm? ===== Тест из интернета ===== * [[https://github.com/ostrovok-team/code-challenge/tree/master/devops|DevOps Engineer Challenge]]