====== Основы администрирования систем 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]]