commit c7a89ede859c3716f91c2479144801a9b8d4ab13 Author: Сергей Маринкевич Date: Thu Oct 23 14:38:26 2025 +0700 Init diff --git a/quiz.md b/quiz.md new file mode 100644 index 0000000..990f67d --- /dev/null +++ b/quiz.md @@ -0,0 +1,1805 @@ +## 🧱 Основы системы + +### Анкета: Структура файловой системы + +#### 🟢 Уровень 1: Основы + ++ **1. Что такое корневой каталог в Linux и как он обозначается?** + + A) Домашний каталог текущего пользователя, обозначается `~` + + B) Каталог для программ администратора, обозначается `/root` + + C) Главный каталог файловой системы, содержащий всё остальное, обозначается `/` + + D) Каталог с загрузочными файлами ядра, обозначается `/boot` + ++ **2. Для чего в основном используется каталог `/home`?** + + A) Для хранения общесистемных конфигурационных файлов. + + B) Для хранения личных файлов и настроек пользователей. + + C) Для временного хранения файлов удалённых пользователей. + + D) Для хранения файлов веб-сервера. + ++ **3. Каково назначение каталога `/bin`?** + + A) Это "корзина" для удалённых файлов. + + B) В нём хранятся двоичные файлы драйверов устройств. + + C) В нём хранятся все исполняемые файлы системы. + + D) В нём хранятся основные исполняемые файлы, доступные всем пользователям. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **4. В чем ключевое различие между каталогами `/bin` и `/sbin`?** + + A) В `/bin` находятся исполняемые файлы, а в `/sbin` — их исходные коды. + + B) `/bin` содержит команды для всех пользователей, а `/sbin` — команды, требующие прав суперпользователя (администратора). + + C) `/bin` — это реальный каталог, а `/sbin` — символическая ссылка на него. + + D) В `/bin` хранятся 32-битные программы, а в `/sbin` — 64-битные. + ++ **5. Какую роль выполняет каталог `/etc`?** + + A) Хранит исполняемые файлы дополнительных (et cetera) программ. + + B) Используется для временного хранения электронных текстовых документов. + + C) Содержит общесистемные конфигурационные файлы. + + D) Содержит шаблоны для создания домашних каталогов новых пользователей. + ++ **6. Что такое Filesystem Hierarchy Standard (FHS)?** + + A) Утилита для проверки файловой системы на наличие ошибок. + + B) Стандарт, описывающий структуру каталогов и расположение файлов в UNIX-подобных системах. + + C) Модуль ядра, отвечающий за поддержку файловых систем, таких как ext4 и XFS. + + D) Сетевой протокол для организации общего доступа к файлам. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **7. Какова основная функция каталога `/proc`?** + + A) Хранение лог-файлов всех системных процессов. + + B) Хранение предварительно скомпилированного программного кода для ускорения запуска. + + C) Это защищённый каталог для хранения микрокода процессора. + + D) Это виртуальная файловая система, предоставляющая доступ к информации о процессах и параметрах ядра. + ++ **8. Что такое inode (индексный дескриптор)?** + + A) Структура данных, хранящая метаданные файла (права доступа, размер, владелец), но не его имя и содержимое. + + B) Специальный файл, который содержит имя и полный путь к файлу. + + C) Блок на диске, в котором хранится непосредственно содержимое (данные) файла. + + D) Запись в системном журнале об операциях, произведенных с файлом. + ++ **9. Что означает фундаментальная концепция Linux "всё есть файл"?** + + A) Все данные на диске, включая свободное пространство, организованы в виде скрытых файлов. + + B) Все программы в Linux должны быть написаны в виде одного исполняемого файла. + + C) Ресурсы системы, такие как устройства (диски, терминалы), представляются в файловой системе и с ними можно работать как с файлами. + + D) Все пользовательские данные должны храниться исключительно в текстовых файлах для универсальности. + +--- +### Анкета: Права доступа и владение + +#### 🟢 Уровень 1: Основы + ++ **10. Что означают права доступа `rwx` для файла?** + + A) Read, Write, Execute (Чтение, Запись, Исполнение) + + B) Read, Watch, Extract (Чтение, Наблюдение, Извлечение) + + C) Run, Wait, Exit (Запуск, Ожидание, Выход) + + D) Rewrite, Work, eXamine (Перезапись, Работа, Изучение) + ++ **11. Какая команда используется для изменения прав доступа к файлу или каталогу?** + + A) `chown` + + B) `chgrp` + + C) `chmod` + + D) `access` + ++ **12. Для чего предназначена команда `chown`?** + + A) Для изменения прав доступа. + + B) Для изменения владельца и/или группы файла. + + C) Для создания нового владельца в системе. + + D) Для просмотра текущего владельца файла. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **13. Какие права доступа устанавливает команда `chmod 755` для файла?** + + A) `rwxr-xr-x` (владелец может всё, группа и остальные могут читать и исполнять) + + B) `rwxr-xr--` (владелец может всё, группа может читать и исполнять, остальные только читать) + + C) `rwx--x--x` (все могут исполнять, но только владелец может читать и писать) + + D) `rwxrwxrwx` (все могут делать всё) + ++ **14. Что означает SUID-бит (Set User ID), установленный на исполняемый файл?** + + A) Файл может быть запущен только пользователем с указанным ID. + + B) Файл при запуске выполняется с правами владельца файла, а не пользователя, который его запустил. + + C) Любой пользователь может сменить владельца этого файла. + + D) Файл будет автоматически удалён после первого успешного запуска. + ++ **15. Что даёт SGID-бит (Set Group ID), установленный на каталог?** + + A) Только члены группы-владельца могут входить в этот каталог. + + B) Все новые файлы, созданные в этом каталоге, будут наследовать группу каталога. + + C) Запрещает создание подкаталогов внутри. + + D) При входе в каталог первичная группа пользователя временно меняется на группу-владельца каталога. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **16. Каково назначение "sticky bit" (липкого бита), установленного на каталог (например, `/tmp`)?** + + A) Файлы в этом каталоге нельзя изменить после создания. + + B) Каталог нельзя удалить, пока он не пуст. + + C) Удалить файл в этом каталоге может только владелец файла, владелец каталога или root. + + D) Все файлы, перемещенные в этот каталог, "прилипают" к нему и не могут быть перемещены. + ++ **17. Что такое `umask`?** + + A) Команда, которая показывает маску подсети для сетевых интерфейсов. + + B) Маска прав доступа, которая определяет права по умолчанию для вновь создаваемых файлов и каталогов. + + C) Утилита для скрытия (маскировки) файлов от определённых пользователей. + + D) Системный параметр, определяющий максимальное количество файлов, которые может создать пользователь. + ++ **18. В чем отличие прав доступа символической ссылки от прав её цели?** + + A) У символических ссылок всегда полные права (`rwxrwxrwx`). + + B) Права символической ссылки полностью копируются с цели в момент создания. + + C) Права на символическую ссылку не имеют значения; важны только права на файл, на который она указывает. + + D) При изменении прав на цель, права на ссылку автоматически меняются. + +--- +### Анкета: Пользователи и группы + +#### 🟢 Уровень 1: Основы + ++ **19. Кто такой пользователь `root` в Linux?** + + A) Первый созданный в системе пользователь. + + B) Пользователь с ограниченными правами. + + C) Суперпользователь, имеющий полный доступ ко всем файлам и командам. + + D) Системная учётная запись для запуска служб, не требующих прав. + ++ **20. Какая команда используется для добавления нового пользователя в систему?** + + A) `newuser` + + B) `adduser` (или `useradd`) + + C) `personadd` + + D) `mkuser` + ++ **21. В каком файле в основном хранится информация об учётных записях пользователей?** + + A) `/etc/users` + + B) `/etc/config` + + C) `/home/users.list` + + D) `/etc/passwd` + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **22. Что такое первичная и вторичная группа пользователя?** + + A) Первичная — для входа в систему, вторичная — для доступа к сети. + + B) Первичная — группа, с которой создаются файлы по умолчанию; вторичные — предоставляют доп. права доступа. + + C) Первичная группа имеет ID до 1000, вторичные — после 1000. + + D) Пользователь может менять свою вторичную группу, но не первичную. + ++ **23. Для чего используется команда `sudo`?** + + A) Для полного переключения на другого пользователя, включая его окружение. + + B) Для выполнения одной команды с правами другого пользователя (по умолчанию `root`). + + C) Для просмотра списка всех пользователей в системе. + + D) Для установки прав `SUID` на файл. + ++ **24. Как изменить домашний каталог и оболочку (shell) для уже существующего пользователя?** + + A) Отредактировав файл `/etc/passwd` вручную. + + B) С помощью команды `usermod`. + + C) С помощью команды `useredit`. + + D) Необходимо удалить пользователя и создать его заново с новыми параметрами. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **25. Каково назначение оболочки `/sbin/nologin`?** + + A) Это специальная оболочка для удалённого входа, которая не ведёт лог-файлы. + + B) Это оболочка, которая немедленно завершает сессию, эффективно запрещая интерактивный вход. + + C) Оболочка, которая используется по умолчанию, если другая не указана. + + D) Оболочка с повышенным уровнем безопасности. + ++ **26. В чём принципиальное различие между командами `su` и `sudo`?** + + A) `su` требует пароль целевого пользователя, а `sudo` — пароль текущего пользователя. + + B) `sudo` позволяет выполнять только одну команду, а `su` открывает полноценную сессию. + + C) `su` — более старая команда, `sudo` — более новая; функционально они идентичны. + + D) `sudo` позволяет тонко настраивать, какие именно команды может выполнять пользователь. + ++ **27. Что такое UID (User ID) и какое значение имеет UID 0?** + + A) Уникальный идентификатор пользователя; UID 0 зарезервирован для суперпользователя `root`. + + B) Уникальный идентификатор диска; UID 0 обозначает системный раздел. + + C) Индекс пользователя в файле `/etc/passwd`; UID 0 — первая запись. + + D) Приоритет пользователя в системе; UID 0 имеет самый низкий приоритет. + +--- +### Анкета: Kernel/userspace взаимодействие (/proc, /sys) + +#### 🔴 Уровень 3: Эксперт + ++ **28. В чем основное различие между `/proc` и `/sys`?** + + A) `/proc` используется ядром, а `/sys` — системными службами. + + B) `/proc` ориентирован на информацию о процессах, тогда как `/sys` представляет иерархию устройств и драйверов. + + C) Данные в `/proc` можно только читать, а в `/sys` — читать и изменять. + + D) `/proc` — это реальная файловая система на диске, а `/sys` — виртуальная. + ++ **29. Как можно изменить параметр ядра "на лету" (без перезагрузки), используя файловую систему?** + + A) Записав новое значение в соответствующий файл в `/sys/kernel/`. + + B) Записав новое значение в соответствующий файл в `/proc/sys/`. + + C) Изменив конфигурационный файл в `/etc/kernel/` и перезапустив службу ядра. + + D) С помощью специальной команды `kernel_update`, указав параметр и значение. + ++ **30. Что представляет собой `kobject` в контексте `sysfs`?** + + A) Объект ядра, который представляет собой каталог в `/sys`. Вся иерархия `/sys` построена на них. + + B) Бинарный файл в `/sys`, содержащий скомпилированный код драйвера. + + C) Скрипт конфигурации для конкретного объекта ядра. + + D) Блокировка, которая предотвращает одновременный доступ нескольких процессов к одному файлу в `/sys`. + +--- +### Анкета: Работа с устройствами (/dev, udev) + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **31. Какова роль каталога `/dev`?** + + A) В нём содержатся инструменты для разработчиков (development tools). + + B) Он содержит файлы устройств, которые представляют собой интерфейсы к оборудованию. + + C) Это основной каталог для хранения драйверов устройств. + + D) Временный каталог для обмена данными между устройствами. + ++ **32. Какова основная задача службы `udev`?** + + A) Управлять обновлениями (updates) установленных драйверов. + + B) Динамически создавать и удалять файлы устройств в `/dev` при подключении/отключении оборудования. + + C) Проверять подлинность устройств, подключаемых к системе. + + D) Предоставлять универсальный API для доступа к устройствам (Universal Device API). + ++ **33. В чем разница между блочным (block) и символьным (character) устройством?** + + A) Блочные устройства передают данные большими блоками и буферизуются (диски), а символьные — посимвольно (терминал, мышь). + + B) Блочные устройства нельзя удалить из системы, а символьные можно. + + C) Блочные устройства находятся в `/dev/block/`, а символьные — в `/dev/char/`. + + D) Блочные устройства — это физическое оборудование, а символьные — виртуальное. + +#### 🔴 Уровень 3: Эксперт + ++ **34. Что такое правило `udev` и где обычно размещают пользовательские правила?** + + A) Это скрипт, выполняемый при загрузке системы; размещается в `/etc/udev/init.d`. + + B) Это файл конфигурации, описывающий, что делать при появлении устройства; размещается в `/etc/udev/rules.d/`. + + C) Это бинарный файл драйвера; размещается в `/lib/udev/devices/`. + + D) Это настройка ядра, задающая поведение `udev`; размещается в `/proc/sys/dev/`. + ++ **35. Что такое старший (major) и младший (minor) номера файла устройства?** + + A) Старший номер указывает на версию драйвера, младший — на версию прошивки устройства. + + B) Старший номер идентифицирует драйвер устройства, а младший — конкретное устройство, управляемое этим драйвером. + + C) Старший номер — это приоритет устройства, младший — его порт подключения. + + D) Это серийный номер устройства, разделенный на две части. + ++ **36. Каково практическое назначение устройства `/dev/null`?** + + A) Это "черная дыра": всё, что в него записывается, исчезает, а чтение из него сразу возвращает конец файла. + + B) Это временное хранилище, которое очищается при перезагрузке. + + C) Это файл, содержащий список всех неиспользуемых (NULL) устройств. + + D) Это символическая ссылка на корневой каталог, используемая для отладки. + +--- +## 💻 Работа с файлами и текстом + +### Анкета: Работа с файлами и каталогами + +#### 🟢 Уровень 1: Основы + ++ **37. Какая команда используется для вывода содержимого текущего каталога?** + + A) `list` + + B) `dir` + + C) `ls` + + D) `show` + ++ **38. С помощью какой команды можно создать новый каталог с именем `test`?** + + A) `newdir test` + + B) `mkdir test` + + C) `crdir test` + + D) `makedir test` + ++ **39. Какая команда используется для удаления пустого каталога `mydir`?** + + A) `del mydir` + + B) `rm mydir` + + C) `rmdir mydir` + + D) `erase mydir` + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **40. Что делает команда `ln -s /path/to/file link_name`?** + + A) Создаёт жёсткую ссылку на файл. + + B) Создаёт символическую (мягкую) ссылку на файл. + + C) Копирует файл с сохранением метаданных. + + D) Проверяет, существует ли файл. + ++ **41. Какая команда найдёт все файлы с расширением `.log` в текущем каталоге и всех его подкаталогах?** + + A) `grep .log` + + B) `search *.log` + + C) `ls -R *.log` + + D) `find . -name "*.log"` + ++ **42. В чем основное отличие жёсткой ссылки от символической?** + + A) Жёсткая ссылка не может указывать на каталог, а символическая может. + + B) Жёсткая ссылка указывает на тот же inode, что и оригинал; символическая — это файл с путём к оригиналу. + + C) Жёсткую ссылку нельзя удалить, пока существует оригинал. + + D) Символическая ссылка работает быстрее, чем жёсткая. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **43. Что делает команда `find . -type f -exec chmod 644 {} \;`?** + + A) Находит все каталоги и меняет их права на 644. + + B) Находит все файлы и меняет их права на 644, запуская `chmod` для каждого файла отдельно. + + C) Находит все файлы и передаёт их список в `chmod` одной командой. + + D) Ищет файлы с правами 644. + ++ **44. Для чего используется команда `stat`?** + + A) Для вывода статистики использования файловой системы. + + B) Для вывода подробной информации о файле или файловой системе, включая inode, права, временные метки. + + C) Для отображения статуса системных служб. + + D) Для статической компиляции программ. + ++ **45. Как с помощью `find` и `xargs` удалить все файлы, заканчивающиеся на `.tmp`?** + + A) `find . -name "*.tmp" | xargs rm` + + B) `find . -name "*.tmp" -exec rm` + + C) `xargs rm < find . -name "*.tmp"` + + D) `rm $(find . -name "*.tmp")` + +--- +### Анкета: Работа с текстом и потоками (grep, awk, sed, cut, sort, uniq) + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **46. Какая команда выведет все строки из файла `access.log`, содержащие слово "ERROR"?** + + A) `find "ERROR" access.log` + + B) `grep "ERROR" access.log` + + C) `cat access.log | search "ERROR"` + + D) `text "ERROR" < access.log` + ++ **47. Что делает команда `sort file.txt | uniq -c`?** + + A) Сортирует строки в файле и удаляет дубликаты. + + B) Сортирует строки, считает количество каждой уникальной строки и выводит результат. + + C) Считает количество уникальных строк в отсортированном файле. + + D) Удаляет все строки, кроме уникальных. + ++ **48. Как вывести только третье поле из строк файла `data.csv`, где разделителем является запятая?** + + A) `grep -f3 ',' data.csv` + + B) `awk -f3 ',' data.csv` + + C) `cut -d',' -f3 data.csv` + + D) `sed 's/,/ /3' data.csv` + +#### 🔴 Уровень 3: Эксперт + ++ **49. Какая команда `sed` заменит первое вхождение "apple" на "orange" в каждой строке файла `fruits.txt`?** + + A) `sed 's/apple/orange/g' fruits.txt` + + B) `sed 's/apple/orange/' fruits.txt` + + C) `sed 'r/apple/orange/' fruits.txt` + + D) `sed '/apple/orange/' fruits.txt` + ++ **50. Какая команда `awk` напечатает второе поле каждой строки, если первое поле равно "user1"?** + + A) `awk '$1 == "user1" {print $2}'` + + B) `awk '{if $1 = "user1" print $2}'` + + C) `awk 'print $2 where $1 == "user1"'` + + D) `awk '/user1/ {print $2}'` + ++ **51. Что делает `grep -E '^(root|admin)' /etc/passwd`?** + + A) Ищет строки, которые содержат "root" или "admin" в любом месте. + + B) Ищет строки, которые начинаются со слов "root" или "admin", используя расширенные регулярные выражения. + + C) Ищет строки, которые заканчиваются на "root" или "admin". + + D) Ищет файлы с именами `root` или `admin` в каталоге `/etc/passwd`. + +--- +### Анкета: Перенаправления и пайпы + +#### 🟢 Уровень 1: Основы + ++ **52. Что делает оператор `>` в команде `ls > file.txt`?** + + A) Добавляет вывод `ls` в конец `file.txt`. + + B) Считывает ввод для `ls` из `file.txt`. + + C) Перенаправляет стандартный вывод `ls`, перезаписывая `file.txt`. + + D) Сравнивает вывод `ls` с содержимым `file.txt`. + ++ **53. Что означает символ `|` (пайп) в команде `cat file.txt | grep "word"`?** + + A) Выполняет обе команды одновременно. + + B) Передаёт стандартный вывод `cat` на стандартный ввод `grep`. + + C) Выполняет вторую команду только если первая завершилась успешно. + + D) Записывает вывод `cat` во временный файл и передаёт его `grep`. + ++ **54. В чем разница между `>` и `>>`?** + + A) `>` работает с текстовыми файлами, `>>` — с бинарными. + + B) `>` перезаписывает файл, а `>>` добавляет данные в конец файла. + + C) `>` перенаправляет стандартный вывод, `>>` — стандартную ошибку. + + D) Разницы нет, это синонимы. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **55. Что делает конструкция `2> errors.log`?** + + A) Перенаправляет стандартный вывод (дескриптор 2) в файл. + + B) Перенаправляет стандартную ошибку (дескриптор 2) в файл. + + C) Создаёт 2 копии файла `errors.log`. + + D) Добавляет вывод второй запущенной команды в `errors.log`. + ++ **56. Каково назначение команды `tee` в `command | tee file.log`?** + + A) Выводит результат `command` на экран и одновременно записывает его в `file.log`. + + B) Записывает результат `command` только в `file.log`, подавляя вывод на экран. + + C) Фильтрует вывод `command`, оставляя только строки, содержащие `file.log`. + + D) Ставит выполнение `command` на паузу. + ++ **57. Как перенаправить и стандартный вывод, и стандартную ошибку в один файл `all.log`?** + + A) `command > all.log < all.log` + + B) `command > all.log 2> all.log` + + C) `command &> all.log` (или `command > all.log 2>&1`) + + D) `command | all.log` + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **58. Что такое "here document" (heredoc)?** + + A) Встроенный в команду файл документации. + + B) Способ передать многострочный текст на стандартный ввод команды, используя `<<`. + + C) Специальный файл в `/dev`, который дублирует свой ввод на вывод. + + D) Скрипт, который документирует сам себя. + ++ **59. Что делает конструкция `diff <(sort file1) <(sort file2)`?** + + A) Сортирует `file1` и `file2` и сохраняет их во временные файлы перед сравнением. + + B) Сравнивает результат выполнения команд `sort file1` и `sort file2` без создания реальных файлов на диске. + + C) Сравнивает файлы с именами `<(sort file1)` и `<(sort file2)`. + + D) Сравнивает `file1` и `file2`, а затем сортирует результат. + ++ **60. Что означает команда `exec 3> output.log`?** + + A) Выполняет команду `3` и перенаправляет её вывод в `output.log`. + + B) Открывает файл `output.log` для записи под файловым дескриптором 3. + + C) Запускает 3 копии процесса, пишущего в `output.log`. + + D) Копирует содержимое дескриптора 3 в `output.log`. + +--- +### Анкета: Архивация и резервное копирование (tar, gzip, rsync) + +#### 🟢 Уровень 1: Основы + ++ **61. Какая команда создаст архив `archive.tar` из каталога `mydir`?** + + A) `tar -xvf mydir archive.tar` + + B) `tar -cvf archive.tar mydir` + + C) `gzip mydir > archive.tar` + + D) `archive mydir archive.tar` + ++ **62. Как извлечь файлы из архива `archive.tar`?** + + A) `tar -cvf archive.tar` + + B) `unzip archive.tar` + + C) `tar -xvf archive.tar` + + D) `untar archive.tar` + ++ **63. Что делает команда `gzip file.txt`?** + + A) Создаёт архив `file.txt.zip`. + + B) Сжимает `file.txt` и заменяет его на `file.txt.gz`. + + C) Показывает содержимое `file.txt` в сжатом виде. + + D) Архивирует, но не сжимает `file.txt`. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **64. Какая команда создаст сжатый gzip-архив `files.tar.gz` из каталога `files`?** + + A) `tar -cvf files.tar.gz files` + + B) `tar -czvf files.tar.gz files` + + C) `tar -c files | gzip > files.tar.gz` + + D) `gzip -c files > files.tar.gz` + ++ **65. Для чего в основном используется утилита `rsync`?** + + A) Для удалённого выполнения скриптов. + + B) Для асинхронного копирования файлов. + + C) Для эффективной синхронизации файлов и каталогов, в том числе по сети. + + D) Для сжатия файлов в реальном времени. + ++ **66. Какой ключ `tar` используется для сжатия с помощью `bzip2`?** + + A) `-z` + + B) `-b` + + C) `-j` + + D) `-Z` + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **67. Что означает флаг `--delete` в `rsync`?** + + A) Удалять исходные файлы после успешного копирования. + + B) Удалять файлы в месте назначения, которых нет в источнике. + + C) Спрашивать подтверждение перед удалением каждого файла. + + D) Не копировать файлы, помеченные для удаления. + ++ **68. Как создать полную копию диска `/dev/sda` в файл `image.img`?** + + A) `rsync /dev/sda image.img` + + B) `cp /dev/sda image.img` + + C) `dd if=/dev/sda of=image.img` + + D) `tar -cvf image.img /dev/sda` + ++ **69. Какая команда позволит заархивировать удалённый каталог `/var/log` с хоста `server1` в локальный файл `logs.tar`?** + + A) `tar -cvf logs.tar server1:/var/log` + + B) `rsync -avz server1:/var/log logs.tar` + + C) `ssh server1 "tar -c /var/log" > logs.tar` + + D) `scp server1:/var/log/*.log logs.tar` + +--- +### Анкета: Компиляция и сборка программ из исходников + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **70. Каков типичный порядок команд для сборки программы из исходного кода?** + + A) `make` -> `make install` -> `./configure` + + B) `make install` -> `./configure` -> `make` + + C) `./configure` -> `make` -> `make install` + + D) `compile` -> `build` -> `install` + ++ **71. Каково назначение скрипта `configure`?** + + A) Он компилирует исходный код. + + B) Он устанавливает скомпилированную программу в систему. + + C) Он проверяет наличие необходимых библиотек и создаёт `Makefile`. + + D) Он скачивает исходный код программы. + ++ **72. Что делает команда `make install`?** + + A) Скачивает и устанавливает все зависимости. + + B) Компилирует программу. + + C) Копирует скомпилированные файлы в системные каталоги (например, `/usr/local/bin`). + + D) Удаляет временные файлы, созданные во время компиляции. + +#### 🔴 Уровень 3: Эксперт + ++ **73. Для чего используется команда `ldd`?** + + A) Для загрузки драйверов устройств. + + B) Для отображения списка динамических библиотек, от которых зависит исполняемый файл. + + C) Для линковки объектных файлов в исполняемый файл. + + D) Для вывода логов системного загрузчика. + ++ **74. В чем разница между статической и динамической линковкой?** + + A) Статическая линковка происходит при загрузке системы, динамическая — во время работы программы. + + B) При статической линковке код библиотек включается в исполняемый файл; при динамической — загружается во время выполнения. + + C) Статическая линковка используется для скриптов, динамическая — для бинарных файлов. + + D) Статическая линковка быстрее, но создаёт большие файлы; динамическая — медленнее, но файлы меньше. + ++ **75. Какова роль `pkg-config` в процессе сборки?** + + A) Управляет пакетами программ в системе, аналог `apt` или `yum`. + + B) Предоставляет компилятору пути к заголовочным файлам и библиотекам установленных пакетов. + + C) Настраивает конфигурацию ядра для сборки модулей. + + D) Проверяет целостность скачанных пакетов с исходным кодом. + +--- +## ⚙️ Процессы и выполнение + +Продолжаю. + +--- +## ⚙️ Процессы и выполнение + +### Анкета: Работа с процессами + +#### 🟢 Уровень 1: Основы + ++ **76. Какая команда выводит список запущенных в данный момент процессов?** + + A) `list proc` + + B) `ps` + + C) `proc` + + D) `top` + ++ **77. Что такое PID?** + + A) Process Priority (Приоритет процесса). + + B) Parent ID (ID родительского процесса). + + C) Process ID (Уникальный идентификатор процесса). + + D) Program ID (Идентификатор программы). + ++ **78. Какая команда используется для завершения процесса с известным PID?** + + A) `stop` + + B) `exit` + + C) `end` + + D) `kill` + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **79. Что делает команда `kill -9 1234`?** + + A) Вежливо просит процесс с PID 1234 завершиться. + + B) Принудительно и немедленно завершает процесс с PID 1234 (сигнал SIGKILL). + + C) Приостанавливает процесс с PID 1234. + + D) Отправляет процессу с PID 1234 девятое по счёту уведомление. + ++ **80. Какая команда покажет дерево процессов (родительские и дочерние)?** + + A) `ps -tree` + + B) `pstree` (или `ps axjf`) + + C) `ls -proc` + + D) `top -tree` + ++ **81. Что означает "зомби-процесс" (zombie process)?** + + A) Процесс, который потребляет 100% CPU. + + B) Процесс, который завершился, но его запись в таблице процессов всё ещё существует, так как родительский процесс не считал его код завершения. + + C) Процесс, который невозможно завершить командой `kill`. + + D) Скрытый процесс, работающий в фоновом режиме. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **82. Чем отличается "демон" (daemon) от обычного процесса?** + + A) Демон всегда запускается от имени `root`. + + B) Демон — это процесс, работающий в фоновом режиме без привязки к терминалу, обычно для выполнения служебных задач. + + C) Демон нельзя завершить командой `kill`. + + D) Демон не имеет PID. + ++ **83. Для чего используется команда `pgrep`?** + + A) Для поиска PID процесса по его имени или другим атрибутам. + + B) Для приостановки всех процессов, принадлежащих группе. + + C) Для графического отображения дерева процессов. + + D) Для изменения приоритета процесса. + ++ **84. Что такое PPID?** + + A) Primary Process ID (PID основного процесса). + + B) Process Priority ID (ID приоритета процесса). + + C) Parent Process ID (PID родительского процесса). + + D) Process Path ID (ID пути к исполняемому файлу процесса). + +--- +### Анкета: Сигналы и взаимодействие процессов + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **85. Какой сигнал обычно отправляется процессу при нажатии `Ctrl+C` в терминале?** + + A) `SIGKILL` (9) + + B) `SIGTERM` (15) + + C) `SIGHUP` (1) + + D) `SIGINT` (2) + ++ **86. В чем разница между сигналами `SIGTERM` и `SIGKILL`?** + + A) `SIGTERM` — это запрос на завершение, который процесс может проигнорировать; `SIGKILL` — принудительное завершение, которое нельзя перехватить. + + B) `SIGKILL` завершает процесс, а `SIGTERM` — только приостанавливает. + + C) `SIGTERM` используется для системных служб, а `SIGKILL` — для пользовательских приложений. + + D) Разницы нет, это синонимы. + ++ **87. Какой сигнал традиционно используется для того, чтобы демон перечитал свой конфигурационный файл?** + + A) `SIGSTOP` + + B) `SIGCONT` + + C) `SIGHUP` + + D) `SIGUSR1` + +#### 🔴 Уровень 3: Эксперт + ++ **88. Для чего предназначена команда `killall`?** + + A) Для завершения всех процессов в системе. + + B) Для отправки сигнала всем процессам с указанным именем. + + C) Для отправки сигнала всем дочерним процессам текущей оболочки. + + D) Для завершения всех процессов, запущенных текущим пользователем. + ++ **89. Что произойдёт с дочерними процессами, если их родительский процесс завершается?** + + A) Они немедленно завершаются вместе с родителем. + + B) Они становятся "осиротевшими" и "усыновляются" процессом `init` (PID 1) или его аналогом. + + C) Они становятся зомби-процессами. + + D) Они продолжают работать, но больше не могут создавать свои дочерние процессы. + ++ **90. Можно ли перехватить или проигнорировать сигнал `SIGKILL`?** + + A) Да, с помощью системного вызова `signal()`. + + B) Да, если процесс имеет права `root`. + * C) Нет, этот сигнал обрабатывается непосредственно ядром и не может быть перехвачен процессом. + + D) Да, но только если процесс запущен с опцией `--ignore-kill`. + +--- +### Анкета: Сессии, терминалы, pty + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **91. Для чего используется команда `nohup`?** + + A) Для запуска команды с повышенным приоритетом. + + B) Для запуска команды, которая продолжит выполняться даже после закрытия терминала. + + C) Для запуска команды без вывода в консоль. + + D) Для запрета команде использовать сеть. + ++ **92. Что такое `screen` или `tmux`?** + + A) Утилиты для записи видео с экрана. + + B) Утилиты для удалённого управления рабочим столом. + + C) Терминальные мультиплексоры, позволяющие управлять несколькими сессиями терминала в одном окне. + + D) Драйверы для виртуальных дисплеев. + ++ **93. Что представляет собой файл в `/dev/pts/` (например, `/dev/pts/0`)?** + + A) Файл, представляющий псевдотерминал, связанный с сессией SSH или эмулятором терминала. + + B) Файл конфигурации для последовательного порта (COM-порта). + + C) Физический порт на материнской плате. + * D) Драйвер для сенсорного экрана. + +#### 🔴 Уровень 3: Эксперт + ++ **94. В чём разница между сессией (session) и группой процессов (process group)?** + + A) Сессия — это набор групп процессов, обычно связанных с одним терминалом. + + B) Сессия — это синоним группы процессов. + + C) Сессия относится к пользователю, а группа процессов — к программам. + + D) В сессии может быть только один процесс, в группе — много. + ++ **95. Что такое управляющий терминал (controlling terminal) процесса?** + + A) Терминал, на котором отображается вывод процесса. + + B) Терминал, с которого процесс был запущен и который может отправлять ему сигналы (например, `Ctrl+C`). + + C) Терминал, который имеет права на управление этим процессом. + + D) Главный терминал системы (`/dev/tty1`). + ++ **96. Для чего нужен `disown` в `bash`?** + + A) Чтобы передать владение процессом другому пользователю. + + B) Чтобы отвязать запущенный в фоне процесс от текущей сессии shell, предотвращая его завершение при выходе. + + C) Чтобы запретить процессу доступ к файловой системе. + + D) Чтобы удалить процесс из списка `jobs`. + +--- +### Анкета: Переменные окружения и shell + +#### 🟢 Уровень 1: Основы + ++ **97. Какая команда выводит значение переменной окружения `HOME`?** + + A) `print $HOME` + + B) `var HOME` + + C) `show $HOME` + + D) `echo $HOME` + ++ **98. Каково назначение переменной `PATH`?** + + A) Она указывает путь к домашнему каталогу пользователя. + + B) Она содержит список каталогов, в которых оболочка ищет исполняемые файлы. + + C) Она хранит путь к текущему рабочему каталогу. + + D) Она определяет путь для сохранения временных файлов. + ++ **99. Как установить переменную окружения `MYVAR` со значением `hello` для текущей сессии и дочерних процессов?** + + A) `set MYVAR=hello` + + B) `let MYVAR="hello"` + + C) `export MYVAR="hello"` + + D) `env MYVAR="hello"` + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **100. В чем разница между `VAR=value` и `export VAR=value` в `bash`?** + + A) `export` делает переменную доступной только для чтения. + + B) `VAR=value` создаёт локальную переменную оболочки; `export` делает её переменной окружения, видимой в дочерних процессах. + + C) `export` работает только для системных переменных. + * D) Разницы нет, `export` — это устаревший синтаксис. + ++ **101. Какой файл обычно используется для установки переменных окружения для всех пользователей при входе в систему?** + + A) `~/.bashrc` + + B) `/etc/profile` + + C) `~/.profile` + + D) `/etc/environment` + ++ **102. Что такое `PS1`?** + + A) Переменная, определяющая основной системный прокси. + + B) Переменная, управляющая внешним видом приглашения командной строки. + + C) Переменная, указывающая на первый скрипт, запускаемый при старте сессии. + + D) Переменная, хранящая PID текущего процесса оболочки. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **103. Какая команда выполнит `my_command`, временно установив для неё переменную `DEBUG` в `true`?** + + A) `export DEBUG=true && my_command` + + B) `DEBUG=true my_command` + + C) `my_command --env DEBUG=true` + + D) `setenv DEBUG=true; my_command` + ++ **104. Для чего используется команда `env`?** + + A) Для редактирования переменных окружения. + + B) Для вывода списка текущих переменных окружения или запуска команды в изменённом окружении. + + C) Для загрузки переменных окружения из файла. + + D) Для шифрования переменных окружения. + ++ **105. Что произойдет, если выполнить `(cd /tmp && ls)`?** + + A) Текущий каталог навсегда изменится на `/tmp`. + + B) Команды будут выполнены в подоболочке (subshell), поэтому текущий каталог родительской оболочки не изменится. + + C) Команда `ls` будет выполнена в `/tmp`, но сначала будет запрошено подтверждение. + + D) Произойдет ошибка синтаксиса. + +--- +### Анкета: Bash-скрипты + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **106. Что такое "shebang" (шибанг) в скрипте?** + + A) Комментарий с именем автора скрипта. + + B) Последняя строка скрипта, возвращающая код завершения. + + C) Первая строка вида `#!/bin/bash`, указывающая интерпретатор для выполнения скрипта. + + D) Специальная переменная для хранения аргументов командной строки. + ++ **107. Как в bash-скрипте получить первый аргумент, переданный ему при запуске?** + + A) `$ARG1` + + B) `$1` + + C) `%1` + + D) `$$1` + ++ **108. Что проверяет условная конструкция `if [ -f "file.txt" ]`?** + + A) Что `file.txt` существует и является каталогом. + + B) Что `file.txt` существует и является обычным файлом. + + C) Что `file.txt` имеет права на исполнение. + + D) Что `file.txt` не пустой. + +#### 🔴 Уровень 3: Эксперт + ++ **109. Каково назначение `set -e` в начале bash-скрипта?** + + A) Включить режим отладки, печатая каждую команду перед выполнением. + + B) Немедленно завершить выполнение скрипта, если какая-либо команда завершится с ненулевым кодом выхода. + + C) Запретить использование незаданных переменных. + + D) Включить расширенный синтаксис (extended mode). + ++ **110. Что хранится в переменной `$?`?** + + A) PID текущего скрипта. + + B) Количество аргументов, переданных скрипту. + + C) Код возврата (exit code) последней выполненной команды. + + D) Имя самого скрипта. + ++ **111. В чём разница между одинарными (`'`) и двойными (`"`) кавычками в bash?** + + A) Одинарные кавычки используются для строк, двойные — для чисел. + + B) В двойных кавычках происходит подстановка переменных и команд, а в одинарных — нет, текст воспринимается буквально. + + C) Двойные кавычки быстрее обрабатываются. + + D) Разницы нет, они взаимозаменяемы. + +--- +## 🧠 Управление системой + +### Анкета: Управление службами и демонами + +#### 🟢 Уровень 1: Основы + ++ **112. Какая команда используется в современных системах с `systemd` для запуска службы `nginx`?** + + A) `service nginx start` + + B) `/etc/init.d/nginx start` + + C) `systemctl start nginx` + + D) `start nginx` + ++ **113. Как проверить статус службы `sshd` с помощью `systemd`?** + + A) `systemctl status sshd` + + B) `service sshd status` + + C) `check sshd` + * D) `systemctl query sshd` + ++ **114. Как сделать так, чтобы служба `apache2` автоматически запускалась при загрузке системы?** + + A) `systemctl boot apache2` + + B) `systemctl enable apache2` + + C) `systemctl startup apache2` + + D) `systemctl on apache2` + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **115. Что такое "юнит" (unit) в `systemd`?** + + A) Это любой ресурс, которым управляет `systemd` (служба, точка монтирования, устройство и т.д.), описанный в конфигурационном файле. + + B) Это исполняемый файл службы. + + C) Это скрипт инициализации в стиле SysVinit. + + D) Это модуль ядра, необходимый для работы `systemd`. + ++ **116. Где обычно располагаются пользовательские unit-файлы `systemd`?** + + A) `/lib/systemd/system/` + + B) `/usr/share/systemd/` + + C) `/etc/systemd/system/` + + D) `/var/run/systemd/` + ++ **117. Какая команда перезагрузит конфигурацию службы, не перезапуская её полностью (если служба это поддерживает)?** + + A) `systemctl restart` + + B) `systemctl reload` + + C) `systemctl update` + + D) `systemctl refresh` + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **118. Для чего нужен `systemd-analyze`?** + + A) Для анализа логов, собранных `systemd`. + + B) Для анализа производительности и времени загрузки системы и отдельных служб. + + C) Для проверки синтаксиса unit-файлов. + + D) Для анализа зависимостей между юнитами. + ++ **119. Что такое "сокет-активация" (socket activation) в `systemd`?** + + A) Способ активировать сетевой интерфейс при запуске службы. + + B) `systemd` слушает сетевой сокет от имени службы и запускает её только при поступлении первого соединения. + + C) Процесс привязки службы к конкретному IP-адресу и порту. + + D) Механизм защиты сокетов с помощью файрвола. + ++ **120. Как посмотреть все зависимости для юнита `multi-user.target`?** + + A) `systemctl show-deps multi-user.target` + + B) `systemctl depends multi-user.target` + + C) `systemctl list-dependencies multi-user.target` + + D) `systemctl graph multi-user.target` + +--- +### Анкета: Запуск и завершение системы (systemd, targets, runlevels) + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **121. Что пришло на смену "уровням запуска" (runlevels) из SysVinit в `systemd`?** + + A) Цели (targets) + + B) Службы (services) + + C) Режимы (modes) + + D) Состояния (states) + ++ **122. Какая цель (target) в `systemd` соответствует многопользовательскому режиму с поддержкой сети, но без графического интерфейса?** + + A) `graphical.target` + + B) `network.target` + + C) `multi-user.target` + + D) `rescue.target` + ++ **123. Как переключиться в режим восстановления (rescue mode) в работающей системе?** + + A) `systemctl rescue` + + B) `systemctl isolate rescue.target` + + C) `reboot --rescue` + + D) `telinit 1` + +#### 🔴 Уровень 3: Эксперт + ++ **124. Каков первый процесс, который ядро запускает в пользовательском пространстве в большинстве современных дистрибутивов Linux?** + + A) `/sbin/init` (который обычно является ссылкой на `systemd`) + + B) `/bin/bash` + + C) `/etc/rc.local` + + D) `/usr/bin/kdm` + ++ **125. В чем основная идея параллельного запуска служб в `systemd` в отличие от последовательного в SysVinit?** + + A) `systemd` запускает службы на разных ядрах процессора. + + B) `systemd` анализирует зависимости и запускает службы, не зависящие друг от друга, одновременно, ускоряя загрузку. + + C) `systemd` создаёт копии служб и запускает их параллельно. + + D) `systemd` использует предзагрузку служб в память. + ++ **126. Как изменить цель по умолчанию, в которую загружается система?** + + A) Отредактировать файл `/etc/inittab`. + + B) Использовать команду `systemctl set-default graphical.target`. + + C) Изменить параметр ядра `systemd.default_target=graphical.target`. + + D) Создать файл `/etc/systemd/default.target`. + +--- +### Анкета: Планировщики задач (cron, at, systemd timers) + +#### 🟢 Уровень 1: Основы + ++ **127. Какая команда используется для редактирования `crontab` текущего пользователя?** + + A) `cron -e` + + B) `crontab -edit` + + C) `crontab -e` + + D) `edit cron` + ++ **128. Что означает запись `* * * * * command` в `crontab`?** + + A) Выполнять `command` один раз в час. + + B) Выполнять `command` каждую минуту. + + C) Выполнять `command` один раз в день. + + D) Выполнять `command` при каждой загрузке. + ++ **129. Для чего предназначена команда `at`?** + + A) Для выполнения команды в определённое время в будущем, но только один раз. + + B) Для измерения времени выполнения другой команды. + + C) Для повторения команды через заданные интервалы. + + D) Для просмотра запланированных задач. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **130. Как будет интерпретироваться запись `0 3 * * 1 /scripts/backup.sh`?** + + A) Каждый понедельник в 3:00 ночи. + + B) Первого числа каждого месяца в 3:00 ночи. + + C) Каждый день в 1:03 ночи. + + D) Каждый понедельник в полночь и в 3:00. + ++ **131. В чем преимущество использования `systemd timers` по сравнению с `cron`?** + + A) Они имеют более простой синтаксис. + + B) Они интегрированы с `systemd`, что даёт лучшее логирование и управление зависимостями. + + C) Они могут запускать задачи чаще, чем раз в минуту. + + D) Они не требуют прав `root`. + ++ **132. Где находится системный `crontab` и файлы для `cron.d`?** + + A) `/var/cron` + + B) `/etc/crontab` и `/etc/cron.d/` + + C) `/usr/lib/cron/` + + D) `~/.crontab` + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **133. Что такое `anacron`?** + + A) Альтернативный, более современный планировщик, заменяющий `cron`. + + B) Планировщик, который выполняет пропущенные задачи `cron` при включении системы, если она была выключена во время их планового запуска. + * C) Утилита для анализа и отладки `crontab`. + + D) Сетевая версия `cron`. + ++ **134. Как запустить скрипт `/opt/cleanup.sh` в 17:00 сегодня с помощью `at`?** + + A) `at 17:00 < /opt/cleanup.sh` + + B) `echo "/opt/cleanup.sh" | at 17:00` + + C) `at run /opt/cleanup.sh at 17:00` + + D) `at 17:00 -f /opt/cleanup.sh` + ++ **135. Что определяет опция `OnCalendar=` в unit-файле `systemd.timer`?** + + A) Календарь, который нужно использовать для определения даты. + + B) Время и дату для запуска задачи, аналогично синтаксису `crontab`. + + C) Дату, когда таймер должен быть автоматически удалён. + + D) Путь к файлу календаря с событиями. + +--- +### Анкета: Системные журналы и логи + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **136. Какая команда используется для просмотра логов, собранных `systemd-journald`?** + + A) `cat /var/log/syslog` + + B) `logread` + + C) `journalctl` + + D) `dmesg` + ++ **137. Как с помощью `journalctl` посмотреть логи только от службы `sshd`?** + + A) `journalctl | grep sshd` + + B) `journalctl -u sshd` + + C) `journalctl --unit=sshd` + + D) `journalctl /units/sshd` + ++ **138. Для чего используется `logrotate`?** + + A) Для просмотра логов в реальном времени. + + B) Для автоматического управления файлами логов: их ротации, сжатия и удаления. + + C) Для отправки логов на удалённый сервер. + + D) Для шифрования лог-файлов. + +#### 🔴 Уровень 3: Эксперт + ++ **139. Что делает команда `journalctl -f`?** + + A) Форматирует вывод лога в удобном виде. + + B) Показывает только фатальные (fatal) ошибки. + + C) Показывает последние записи в журнале и продолжает выводить новые по мере их поступления (аналог `tail -f`). + + D) Ищет (find) записи по шаблону. + ++ **140. В чем ключевое отличие `journald` от традиционного `syslog`?** + + A) `journald` хранит логи в структурированном бинарном формате, а не в простом тексте. + + B) `journald` не может отправлять логи по сети. + + C) `journald` хранит логи только в оперативной памяти. + + D) `syslog` может собирать логи только от ядра. + ++ **141. Какая команда выведет сообщения ядра, записанные с момента последней загрузки?** + + A) `journalctl -k` (или `dmesg`) + + B) `journalctl --system` + + C) `journalctl -p err` + + D) `cat /var/log/kernel.log` + +--- +### Анкета: Безопасность и аудит + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **142. Какой файл содержит информацию о том, кто, когда и откуда входил в систему?** + + A) `/var/log/auth.log` (или `/var/log/secure`) + + B) `/etc/passwd` + + C) `~/.bash_history` + + D) `/var/log/messages` + ++ **143. Для чего используется команда `last`?** + + A) Для просмотра последнего запущенного процесса. + + B) Для отображения истории последних входов пользователей в систему. + + C) Для просмотра последней строки в лог-файле. + + D) Для поиска последнего измененного файла. + ++ **144. Где по умолчанию логируются попытки использования `sudo`?** + + A) В `~/.sudo_history`. + + B) В `/var/log/sudo.log`. + + C) В системном журнале, обычно в `/var/log/auth.log` или в журнале `systemd`. + + D) Логи `sudo` не ведутся по умолчанию. + +#### 🔴 Уровень 3: Эксперт + ++ **145. Что такое `fail2ban`?** + + A) Утилита для поиска вирусов. + + B) Файрвол, блокирующий все входящие соединения. + + C) Служба, которая анализирует логи и блокирует IP-адреса, с которых производятся подозрительные действия (например, подбор пароля). + + D) Система двухфакторной аутентификации. + ++ **146. Для чего предназначена подсистема `auditd`?** + + A) Для аудита производительности системы. + + B) Для записи подробной информации о событиях, связанных с безопасностью, на уровне системных вызовов. + + C) Для проверки целостности системных файлов. + + D) Для управления пользователями и группами. + ++ **147. Что делает команда `ausearch -k mykey`?** + + A) Ищет в системе ключ шифрования с именем `mykey`. + + B) Ищет в логах аудита события, помеченные ключом `mykey` в правилах `auditd`. + + C) Ищет SSH-ключ `mykey`. + + D) Ищет в логах все события, связанные с нажатием клавиш. + +--- +### Анкета: Управление доступом (sudo, su, capabilities) + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **148. Какая команда позволяет выполнить `apt update` от имени `root`, не входя в его сессию?** + + A) `su "apt update"` + + B) `root apt update` + + C) `sudo apt update` + + D) `runas root apt update` + ++ **149. В чем разница между `su` и `su -`?** + + A) `su -` требует пароль, а `su` нет. + + B) `su` просто меняет пользователя, а `su -` запускает полноценную сессию входа (login shell) с окружением целевого пользователя. + + C) `su` переключает на `root`, а `su -` — на любого другого пользователя. + + D) `su -` — это устаревшая форма команды `su`. + ++ **150. Какой файл используется для настройки прав `sudo`?** + + A) `/etc/sudo.conf` + + B) `/etc/sudoers` + + C) `/etc/passwd` + + D) `~/.sudoers` + +#### 🔴 Уровень 3: Эксперт + ++ **151. Что такое "Linux capabilities"?** + + A) Список возможностей, которые поддерживает текущая версия ядра. + + B) Механизм, который делит всемогущество `root` на отдельные привилегии, которые можно назначать процессам. + + C) Утилита для измерения производительности системы. + + D) Набор плагинов для расширения функциональности `sudo`. + ++ **152. Как разрешить пользователю `user1` выполнять команду `/sbin/reboot` без пароля через `sudo`?** + + A) Добавить в `/etc/sudoers` строку: `user1 ALL=(ALL) /sbin/reboot` + + B) Добавить в `/etc/sudoers` строку: `user1 ALL=(ALL) NOPASSWD: /sbin/reboot` + + C) Добавить `user1` в группу `reboot`. + + D) Установить SUID-бит на `/sbin/reboot` и сделать `user1` его владельцем. + ++ **153. Зачем использовать `visudo` для редактирования `/etc/sudoers`?** + + A) `visudo` предоставляет графический интерфейс. + + B) `visudo` автоматически делает резервные копии. + + C) `visudo` проверяет синтаксис файла перед сохранением, чтобы не заблокировать систему. + + D) `visudo` позволяет редактировать файл без прав `root`. + +--- +## 🌐 Сеть и взаимодействие + +### Анкета: Настройка физических интерфейсов + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **154. Какая современная команда используется для просмотра IP-адресов на всех интерфейсах?** + + A) `ifconfig` + + B) `netstat -i` + + C) `ip addr show` + + D) `ipconfig` + ++ **155. Как временно добавить IP-адрес `192.168.1.100/24` на интерфейс `eth0`?** + + A) `ifconfig eth0 add 192.168.1.100/24` + + B) `ip addr add 192.168.1.100/24 dev eth0` + + C) `net link add 192.168.1.100/24 dev eth0` + + D) `echo "192.168.1.100/24" > /sys/class/net/eth0/address` + ++ **156. Какая команда покажет текущую таблицу маршрутизации?** + + A) `ip route show` (или `route -n`) + + B) `ip forward list` + + C) `netstat -r` + + D) `ip gateway list` + +#### 🔴 Уровень 3: Эксперт + ++ **157. Как изменить MTU (Maximum Transmission Unit) для интерфейса `eth1` на 1492?** + + A) `ip link set mtu 1492 dev eth1` + + B) `ip addr change mtu 1492 dev eth1` + + C) `ifconfig eth1 mtu 1492` + + D) `ethtool -S eth1 mtu 1492` + ++ **158. Что такое `default route` (маршрут по умолчанию)?** + + A) Маршрут к локальной сети. + + B) Маршрут, который используется для пакетов, если для их адреса назначения нет более конкретного маршрута в таблице. + + C) Маршрут к DNS-серверу. + + D) Первый маршрут, добавляемый в таблицу при загрузке. + ++ **159. Какая команда удалит маршрут по умолчанию через шлюз `192.168.1.1`?** + + A) `ip route flush 192.168.1.1` + + B) `ip route del default` + + C) `ip route del 0/0 via 192.168.1.1` + + D) `route del default gw 192.168.1.1` + +--- +### Анкета: Настройка виртуальных интерфейсов + +#### 🔴 Уровень 3: Эксперт + ++ **160. Что такое `bridge` (сетевой мост) в Linux?** + + A) Виртуальный сетевой интерфейс для соединения двух хостов. + + B) Виртуальный коммутатор (switch), который объединяет несколько сетевых интерфейсов в один сегмент L2. + + C) Устройство для преобразования IP-адресов (NAT). + + D) Тип VPN-туннеля. + ++ **161. Для чего используется `bonding` (агрегация каналов)?** + + A) Для объединения нескольких физических интерфейсов в один логический для повышения отказоустойчивости или пропускной способности. + + B) Для привязки IP-адреса к MAC-адресу. + + C) Для создания виртуальных копий одного физического интерфейса. + + D) Для разделения одного физического интерфейса на несколько виртуальных (VLAN). + ++ **162. Что такое пара интерфейсов `veth` (Virtual Ethernet)?** + + A) Два виртуальных интерфейса, подключенных друг к другу как патч-корд, используемые для соединения сетевых пространств имён (network namespaces). + + B) Интерфейс для связи виртуальной машины с хостом. + + C) Виртуальный интерфейс, который отбрасывает весь трафик. + + D) Интерфейс для создания VLAN. + +--- +### Анкета: Управление маршрутизацией + +#### 🔴 Уровень 3: Эксперт + ++ **163. Что такое `policy-based routing`?** + + A) Маршрутизация на основе политик безопасности файрвола. + + B) Маршрутизация пакетов на основе правил, которые могут учитывать не только адрес назначения, но и адрес источника, порт и т.д. + + C) Динамическая маршрутизация с использованием протоколов OSPF или BGP. + + D) Маршрутизация, которая меняется в зависимости от времени суток. + ++ **164. Какая команда используется для управления правилами в `policy-based routing`?** + + A) `ip route` + + B) `ip rule` + + C) `ip policy` + + D) `iptables -t route` + ++ **165. Что делает команда `ip route add 10.0.0.0/8 via 192.168.0.1`?** + + A) Добавляет маршрут по умолчанию. + + B) Добавляет маршрут для сети `10.0.0.0/8` через шлюз `192.168.0.1`. + + C) Добавляет IP-адрес `10.0.0.1` на интерфейс со шлюзом `192.168.0.1`. + + D) Запрещает весь трафик в сеть `10.0.0.0/8`. + +--- +### Анкета: Firewall и фильтрация трафика + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **166. Каковы три основные предопределенные цепочки в таблице `filter` `iptables`?** + + A) `ACCEPT`, `DROP`, `REJECT` + + B) `IN`, `OUT`, `FORWARD` + + C) `INPUT`, `OUTPUT`, `FORWARD` + + D) `PRE_ROUTING`, `POST_ROUTING`, `ROUTING` + ++ **167. В чем разница между `DROP` и `REJECT` в `iptables`?** + + A) `DROP` тихо отбрасывает пакет, `REJECT` отбрасывает и отправляет в ответ сообщение об ошибке (например, `port unreachable`). + + B) `DROP` блокирует, а `REJECT` перенаправляет трафик. + + C) `DROP` используется для TCP, `REJECT` — для UDP. + + D) Разницы нет, это синонимы. + ++ **168. Что такое `firewalld`?** + + A) Старая утилита для управления `iptables`. + + B) Динамический менеджер файрвола с поддержкой "зон" для управления правилами. + + C) Аппаратный файрвол для Linux-серверов. + + D) Утилита для тестирования правил файрвола. + +#### 🔴 Уровень 3: Эксперт + ++ **169. Что такое `nftables`?** + + A) Новая система фильтрации пакетов, пришедшая на смену `iptables`. + + B) Таблица в `iptables` для NAT. + + C) Утилита для создания сетевых туннелей. + + D) База данных для хранения правил файрвола. + ++ **170. Какая цепочка `iptables` обрабатывает пакеты, которые предназначены для самого хоста?** + + A) `PREROUTING` + + B) `POSTROUTING` + + C) `FORWARD` + + D) `INPUT` + ++ **171. Для чего используется `conntrack` (connection tracking)?** + + A) Для отслеживания маршрутов к другим хостам. + + B) Для отслеживания состояния сетевых соединений (например, `NEW`, `ESTABLISHED`, `RELATED`), что позволяет создавать stateful-файрвол. + + C) Для подсчета количества пакетов, проходящих через интерфейс. + + D) Для отслеживания физических подключений к коммутатору. + +--- +### Анкета: Диагностика сети + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **172. Какая команда используется для проверки доступности хоста по IP-адресу или имени, отправляя ICMP-запросы?** + + A) `netstat` + + B) `traceroute` + + C) `ping` + + D) `ss` + ++ **173. Для чего нужна утилита `traceroute` (или `tracepath`)?** + + A) Для отслеживания маршрута (последовательности маршрутизаторов), который проходят пакеты до указанного хоста. + + B) Для измерения скорости сетевого соединения. + + C) Для сканирования открытых портов на хосте. + + D) Для просмотра таблицы маршрутизации. + ++ **174. Какая современная команда пришла на смену `netstat` для просмотра сетевых сокетов?** + + A) `socket` + + B) `ip socket` + + C) `nstat` + + D) `ss` + +#### 🔴 Уровень 3: Эксперт + ++ **175. Каково назначение `tcpdump`?** + + A) Для сброса (dump) TCP-соединений. + + B) Для анализатора сетевого трафика, который позволяет перехватывать и отображать пакеты, проходящие через сетевой интерфейс. + + C) Для создания TCP-туннелей. + + D) Для вывода статистики по TCP-протоколу. + ++ **176. Что показывает команда `ss -ltn`?** + + A) Все установленные TCP-соединения. + + B) Все TCP-сокеты в состоянии прослушивания (LISTEN), с отображением числовых портов и без разрешения имён. + + C) Все UDP-сокеты. + + D) Все сетевые туннели. + ++ **177. Как с помощью `nmap` проверить, открыт ли TCP-порт 80 на хосте `example.com`?** + + A) `nmap -p 80 example.com` + + B) `nmap -check 80 example.com` + + C) `nmap example.com | grep 80` + + D) `nmap --port 80 --host example.com` + +--- +## 💾 Хранилище и файловые системы + +### Анкета: Работа с файловыми системами + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **178. Какая команда используется для монтирования файловой системы?** + + A) `attach` + + B) `connect` + + C) `mount` + + D) `fsck` + ++ **179. Каково назначение файла `/etc/fstab`?** + + A) Он содержит таблицу статических маршрутов. + + B) Он содержит информацию о файловых системах и их точках монтирования, которые монтируются автоматически при загрузке. + + C) Это скрипт для проверки файловых систем. + + D) Он содержит список всех файлов в системе. + ++ **180. Что делает команда `umount /mnt/data`?** + + A) Форматирует устройство, смонтированное в `/mnt/data`. + + B) Отмонтирует файловую систему от каталога `/mnt/data`. + + C) Удаляет каталог `/mnt/data`. + + D) Проверяет файловую систему на ошибки. + +#### 🔴 Уровень 3: Эксперт + ++ **181. Что такое "ленивое" отмонтирование (`umount -l`)?** + + A) Отмонтирование происходит с задержкой в несколько секунд. + + B) Файловая система немедленно отсоединяется от иерархии, но остаётся занятой, пока все процессы, использующие её, не завершатся. + + C) Отмонтируется только часть файловой системы. + + D) Команда возвращает управление сразу, а отмонтирование происходит в фоновом режиме. + ++ **182. Как перемонтировать файловую систему в режим "только для чтения" (read-only)?** + + A) `mount -o remount,ro /path` + + B) `remount ro /path` + + C) `mount --change --readonly /path` + + D) `fsck -r /path` + ++ **183. Что такое `bind mount`?** + + A) Монтирование файловой системы, защищенной паролем. + + B) Монтирование одного каталога в другой каталог, делая его содержимое доступным по двум путям. + + C) Монтирование сетевой файловой системы. + + D) Монтирование зашифрованного раздела. + +--- +### Анкета: Работа с памятью и свопом + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **184. Какая команда показывает информацию об использовании оперативной памяти и swap-раздела?** + + A) `mem` + + B) `top` + + C) `free` + + D) `vmstat` + ++ **185. Что такое `swap` (своп) в Linux?** + + A) Область на диске, используемая как виртуальное расширение оперативной памяти (RAM). + + B) Быстрый кэш для часто используемых файлов. + + C) Временный раздел для хранения загрузочных файлов. + + D) Процесс обмена данными между ядром и пользовательским пространством. + ++ **186. Как включить swap-файл `/swapfile`?** + + A) `swapon /swapfile` + + B) `mount /swapfile` + + C) `swap enable /swapfile` + + D) `mkswap /swapfile && activate` + +#### 🔴 Уровень 3: Эксперт + ++ **187. Что показывает столбец `buff/cache` в выводе команды `free`?** + + A) Память, используемую ядром для собственных нужд. + + B) Память, используемую для дискового кэша (page cache) и буферов, которая может быть освобождена при необходимости. + + C) Память, которая зарезервирована, но еще не используется. + + D) Память, выделенную под swap. + ++ **188. Для чего используется параметр ядра `swappiness`?** + + A) Он определяет, насколько "охотно" ядро будет сбрасывать данные из оперативной памяти в swap. + + B) Он задает максимальный размер swap-раздела. + + C) Он включает или выключает использование swap. + + D) Он задает приоритет использования разных swap-разделов. + ++ **189. Что такое OOM Killer (Out of Memory Killer)?** + + A) Утилита для очистки оперативной памяти. + + B) Механизм ядра, который при нехватке памяти принудительно завершает процессы, чтобы освободить память. + + C) Вирус, который потребляет всю доступную память. + + D) Процесс, который отслеживает утечки памяти в приложениях. + +--- +## 📈 Наблюдение и оптимизация + +### Анкета: Мониторинг ресурсов + +#### 🟢 Уровень 1: Основы + ++ **190. Какая интерактивная утилита в реальном времени показывает список процессов, отсортированных по использованию CPU?** + + A) `ps` + + B) `free` + + C) `top` (или `htop`) + + D) `df` + ++ **191. Какая команда показывает использование дискового пространства файловыми системами?** + + A) `du` + + B) `df` + + C) `ls -l` + + D) `free` + ++ **192. Для чего нужна команда `du -sh /path/to/dir`?** + + A) Чтобы показать количество файлов в каталоге. + + B) Чтобы показать права доступа к каталогу. + + C) Чтобы показать суммарный размер каталога `/path/to/dir` в удобном для чтения формате. + + D) Чтобы показать свободное место в разделе, где находится каталог. + +#### 🟢🟢 Уровень 2: Продвинутый пользователь + ++ **193. Что такое `iostat`?** + + A) Утилита для мониторинга статистики ввода-вывода (чтения/записи) для дисковых устройств. + + B) Утилита для мониторинга состояния сетевых интерфейсов. + + C) Утилита для вывода информации об inode. + + D) Утилита для измерения производительности CPU. + ++ **194. Какая утилита предоставляет подробную информацию о статистике виртуальной памяти, процессов, прерываний, дискового ввода-вывода и CPU?** + + A) `free` + + B) `vmstat` + + C) `meminfo` + + D) `cpustat` + ++ **195. В чем основное преимущество `htop` перед `top`?** + + A) `htop` потребляет меньше ресурсов. + + B) `htop` предустановлен во всех системах. + * C) `htop` предоставляет более удобный и интерактивный интерфейс с цветной подсветкой, прокруткой и управлением процессами. + + D) `htop` может показывать только процессы текущего пользователя. + +#### 🟢🟢🟢 Уровень 3: Эксперт + ++ **196. Что означает `wa` (IO-wait) в выводе `top` или `vmstat`?** + + A) Процент времени, в течение которого CPU простаивал, ожидая завершения операций ввода-вывода. + + B) Процент времени, потраченный на ожидание ответа от сети. + + C) Количество процессов, ожидающих своей очереди на выполнение. + + D) Среднее время ожидания для завершенных процессов. + ++ **197. Для чего используется `sar` (System Activity Reporter)?** + + A) Для сбора, отчета и сохранения информации о системной активности (CPU, память, I/O) за длительный период. + + B) Для отправки отчетов о сбоях системы разработчикам. + + C) Для архивации системных логов. + + D) Для поиска файлов в системе по их активности. + ++ **198. Что делает команда `watch df -h`?** + + A) Делает снимок вывода `df -h` и сохраняет его в файл. + + B) Запускает `df -h` каждые 2 секунды (по умолчанию) и выводит результат на экран, позволяя наблюдать за изменениями. + + C) Отслеживает изменения в файловой системе и запускает `df -h` при каждом изменении. + + D) Запускает `df -h` в фоновом режиме. + +--- +### Анкета: Производительность + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **199. Что такое `Load Average`?** + + A) Средняя загрузка процессора в процентах за последние 1, 5 и 15 минут. + + B) Среднее количество процессов в очереди на выполнение (или ожидающих I/O) за 1, 5 и 15 минут. + + C) Средняя температура процессора. + + D) Среднее использование оперативной памяти. + ++ **200. Для чего используются команды `nice` и `renice`?** + + A) Для установки "хорошего" имени для процесса. + + B) Для изменения приоритета планировщика для новых (`nice`) или уже запущенных (`renice`) процессов. + + C) Для проверки состояния процесса. + + D) Для ограничения ресурсов, которые может использовать процесс. + ++ **201. Что означает, если `Load Average` на 4-ядерном процессоре равен 4.0?** + + A) Система перегружена, не хватает ресурсов. + + B) Система простаивает. + + C) Все ядра процессора полностью утилизированы, но очереди на выполнение нет. + + D) Два из четырех ядер полностью загружены. + +#### 🔴 Уровень 3: Эксперт + ++ **202. Какой инструмент позволяет трассировать системные вызовы и сигналы, получаемые процессом?** + + A) `gdb` + + B) `ltrace` + + C) `strace` + + D) `perf` + ++ **203. Для чего используется команда `lsof`?** + + A) Для вывода списка открытых файлов (List Open Files), включая сетевые сокеты, каналы и т.д. + + B) Для поиска файлов по их содержимому. + + C) Для блокировки файла от изменений. + + D) Для вывода списка "мягких" (символических) ссылок. + ++ **204. Что делает команда `dmesg`?** + + A) Выводит сообщения из буфера сообщений ядра, что полезно для диагностики проблем с оборудованием и драйверами. + + B) Показывает сообщения, отправленные другим пользователям. + + C) Выводит отладочную информацию из запущенных приложений. + + D) Форматирует и выводит системный журнал. + +--- +## 🧩 Изоляция и управление ресурсами + +### Анкета: Namespaces и cgroups + +#### 🔴 Уровень 3: Эксперт + ++ **205. Что такое `namespaces` (пространства имён) в ядре Linux?** + + A) Механизм для организации файлов в каталоги. + + B) Механизм изоляции, который позволяет процессам иметь собственный, отдельный от других, набор глобальных системных ресурсов (например, PID, сеть, точки монтирования). + + C) Система именования переменных в ядре. + + D) Способ управления доступом пользователей к файлам. + ++ **206. Каково основное назначение `cgroups` (контрольных групп)?** + + A) Для группировки пользователей с одинаковыми правами. + + B) Для организации процессов в иерархические группы, а также для ограничения и учёта использования ресурсов (CPU, память, I/O) этими группами. + + C) Для создания виртуальных сетевых интерфейсов. + + D) Для контроля версий конфигурационных файлов. + ++ **207. Какие два механизма ядра лежат в основе большинства современных систем контейнеризации, таких как Docker?** + + A) `iptables` и `SELinux` + + B) `namespaces` и `cgroups` + + C) `KVM` и `QEMU` + + D) `systemd` и `udev` + +--- +### Анкета: Контейнеризация + +#### 🟡 Уровень 2: Продвинутый пользователь + ++ **208. Что такое `Docker`?** + + A) Система виртуализации, эмулирующая аппаратное обеспечение. + + B) Платформа для разработки, доставки и запуска приложений в контейнерах. + + C) Система управления конфигурациями, аналог Ansible. + + D) Менеджер пакетов для Linux. + ++ **209. В чем ключевое отличие контейнера от виртуальной машины?** + + A) Контейнер работает быстрее, но менее безопасен. + + B) Контейнеры виртуализируют операционную систему, используя ядро хоста, а виртуальные машины эмулируют целое аппаратное обеспечение и запускают свою собственную ОС. + + C) Виртуальные машины используют меньше дискового пространства. + + D) Контейнеры не могут работать с сетью, в отличие от ВМ. + ++ **210. Что такое "образ" (image) в Docker?** + + A) Запущенный экземпляр контейнера. + + B) Снимок состояния оперативной памяти контейнера. + + C) Шаблон только для чтения с инструкциями для создания контейнера. + + D) Файл резервной копии контейнера. + +#### 🔴 Уровень 3: Эксперт + ++ **211. Что такое `Podman` и чем он отличается от `Docker`?** + + A) `Podman` — это графический интерфейс для `Docker`. + + B) `Podman` — это инструмент для управления контейнерами, который не требует центрального демона и может работать без прав `root`. + + C) `Podman` — это форк `Docker`, разработанный Microsoft. + + D) `Podman` используется для оркестрации контейнеров, а `Docker` — для их создания. + ++ **212. Что такое `Dockerfile`?** + + A) Файл журнала работающего контейнера Docker. + + B) Текстовый файл с инструкциями для автоматической сборки образа Docker. + + C) Конфигурационный файл для демона Docker. + + D) Скрипт для запуска контейнера. + ++ **213. Какая команда покажет список всех запущенных контейнеров Docker?** + + A) `docker list` + + B) `docker ps` + + C) `docker images` + + D) `docker top` + +--- +### Анкета: Виртуализация + +#### 🔴 Уровень 3: Эксперт + ++ **214. Что такое `KVM` (Kernel-based Virtual Machine)?** + + A) Полноценный гипервизор, работающий как отдельная ОС. + + B) Механизм в ядре Linux, который превращает его в гипервизор 1-го типа, используя аппаратную виртуализацию. + + C) Эмулятор аппаратного обеспечения, работающий в пользовательском пространстве. + + D) Технология контейнеризации. + ++ **215. Какую роль выполняет `QEMU` в связке с `KVM`?** + + A) `QEMU` управляет сетевыми подключениями для `KVM`. + + B) `KVM` обеспечивает ускорение, а `QEMU` эмулирует аппаратное обеспечение (диски, сетевые карты и т.д.) для виртуальной машины. + + C) `QEMU` — это графический интерфейс для `KVM`. + + D) `QEMU` не используется вместе с `KVM`. + ++ **216. Что такое `libvirt`?** + + A) Драйвер для виртуальных устройств. + + B) Библиотека и набор инструментов для унифицированного управления различными технологиями виртуализации (`KVM`, `Xen`, `LXC` и др.). + + C) Файловая система для виртуальных машин. + * D) Протокол для удалённого доступа к виртуальным машинам. + +--- +### Анкета: Ограничение и распределение ресурсов + +#### 🔴 Уровень 3: Эксперт + ++ **217. Как с помощью `systemd` ограничить использование памяти для службы `myservice.service` до 500 МБ?** + + A) Добавить в unit-файл опцию `MemoryLimit=500M`. + + B) Добавить в unit-файл опцию `MemoryMax=500M`. + + C) Добавить в unit-файл опцию `MemoryAccounting=true` и `MemoryHigh=500M`. + + D) Добавить в unit-файл опцию `LimitMEM=500M`. + ++ **218. Что делает команда `ulimit -n 1024`?** + + A) Ограничивает количество процессов до 1024. + + B) Ограничивает использование памяти до 1024 КБ. + + C) Ограничивает максимальное количество открытых файловых дескрипторов до 1024 для текущей сессии. + + D) Ограничивает размер файла до 1024 байт. + ++ **219. Какой механизм используется для управления ресурсами, выделенными для службы `systemd` или контейнера `docker`?** + + A) `nice` + + B) `ulimit` + + C) `cgroups` (контрольные группы) + + D) `namespaces` (пространства имён) + +--- + +## 🔐 Ответы + +1. **C** +2. **B** +3. **D** +4. **B** +5. **C** +6. **B** +7. **D** +8. **A** +9. **C** +10. **A** +11. **C** +12. **B** +13. **A** +14. **B** +15. **B** +16. **C** +17. **B** +18. **C** +19. **C** +20. **B** +21. **D** +22. **B** +23. **B** +24. **B** +25. **B** +26. **D** +27. **A** +28. **B** +29. **B** +30. **A** +31. **B** +32. **B** +33. **A** +34. **B** +35. **B** +36. **A** +37. **C** +38. **B** +39. **C** +40. **B** +41. **D** +42. **B** +43. **B** +44. **B** +45. **A** +46. **B** +47. **B** +48. **C** +49. **B** +50. **A** +51. **B** +52. **C** +53. **B** +54. **B** +55. **B** +56. **A** +57. **C** +58. **B** +59. **B** +60. **B** +61. **B** +62. **C** +63. **B** +64. **B** +65. **C** +66. **C** +67. **B** +68. **C** +69. **C** +70. **C** +71. **C** +72. **C** +73. **B** +74. **B** +75. **B** +76. **B** +77. **C** +78. **D** +79. **B** +80. **B** +81. **B** +82. **B** +83. **A** +84. **C** +85. **D** +86. **A** +87. **C** +88. **B** +89. **B** +90. **C** +91. **B** +92. **C** +93. **A** +94. **A** +95. **B** +96. **B** +97. **D** +98. **B** +99. **C** +100. **B** +101. **B** +102. **B** +103. **B** +104. **B** +105. **B** +106. **C** +107. **B** +108. **B** +109. **B** +110. **C** +111. **B** +112. **C** +113. **A** +114. **B** +115. **A** +116. **C** +117. **B** +118. **B** +119. **B** +120. **C** +121. **A** +122. **C** +123. **B** +124. **A** +125. **B** +126. **B** +127. **C** +128. **B** +129. **A** +130. **A** +131. **B** +132. **B** +133. **B** +134. **B** +135. **B** +136. **C** +137. **B** +138. **B** +139. **C** +140. **A** +141. **A** +142. **A** +143. **B** +144. **C** +145. **C** +146. **B** +147. **B** +148. **C** +149. **B** +150. **B** +151. **B** +152. **B** +153. **C** +154. **C** +155. **B** +156. **A** +157. **A** +158. **B** +159. **B** +160. **B** +161. **A** +162. **A** +163. **B** +164. **B** +165. **B** +166. **C** +167. **A** +168. **B** +169. **A** +170. **D** +171. **B** +172. **C** +173. **A** +174. **D** +175. **B** +176. **B** +177. **A** +178. **C** +179. **B** +180. **B** +181. **B** +182. **A** +183. **B** +184. **C** +185. **A** +186. **A** +187. **B** +188. **A** +189. **B** +190. **C** +191. **B** +192. **C** +193. **A** +194. **B** +195. **C** +196. **A** +197. **A** +198. **B** +199. **B** +200. **B** +201. **C** +202. **C** +203. **A** +204. **A** +205. **B** +206. **B** +207. **B** +208. **B** +209. **B** +210. **C** +211. **B** +212. **B** +213. **B** +214. **B** +215. **B** +216. **B** +217. **A** +218. **C** +219. **C** diff --git a/quiz.py b/quiz.py new file mode 100755 index 0000000..a4c30cb --- /dev/null +++ b/quiz.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +import re +import random +import argparse +import textwrap +import sys +from collections import defaultdict + +class Question: + """Класс для хранения информации о вопросе.""" + def __init__(self, number, text, options, answer_letter, block, sub_block, level): + self.number = number + self.text = text + self.options = options + self.answer_letter = answer_letter + self.block = block + self.sub_block = sub_block + self.level = level + + def __repr__(self): + return f"Q{self.number} (L{self.level}): {self.text[:30]}..." + +def parse_markdown(markdown_text): + """ + Парсит весь Markdown текст, извлекая вопросы, ответы и их метаданные. + """ + # 1. Извлечь ответы + answers = {} + answer_section_match = re.search(r"## 🔐 Ответы\n\n((?:.|\n)*)", markdown_text) + if answer_section_match: + answer_text = answer_section_match.group(1) + for match in re.finditer(r"(\d+)\.\s+\*\*([A-D])\*\*", answer_text): + answers[int(match.group(1))] = match.group(2) + + # 2. Извлечь вопросы + questions = [] + # Разделяем текст на большие блоки (начинаются с ##) + blocks = re.split(r'\n## ', markdown_text) + for block_content in blocks: + if not block_content.strip() or 'Ответы' in block_content: + continue + + block_title_match = re.match(r"(.+)", block_content) + block_title = block_title_match.group(1).strip() if block_title_match else "Неизвестный блок" + + # Паттерн для поиска одного полного вопроса + question_pattern = re.compile( + r"\+ \*\*(\d+)\. (.+?)\*\*\n" # Номер и текст вопроса + r"\s+\+ A\) ([^\n]+)\n" # Опция A + r"\s+\+ B\) ([^\n]+)\n" # Опция B + r"\s+\+ C\) ([^\n]+)\n" # Опция C + r"\s+\+ D\) ([^\n]+)", # Опция D + re.DOTALL + ) + + sub_blocks = re.split(r'### Анкета: (.+)', block_content) + current_sub_block = block_title # По умолчанию + for i in range(1, len(sub_blocks), 2): + current_sub_block = sub_blocks[i].strip() + content = sub_blocks[i+1] + + levels_content = re.split(r'#### (.+)', content) + for j in range(1, len(levels_content), 2): + level_title = levels_content[j] + level_text = levels_content[j+1] + + level = 1 + if '🟢🟢' in level_title or '🟡' in level_title: + level = 2 + elif '🟢🟢🟢' in level_title or '🔴' in level_title: + level = 3 + + for match in question_pattern.finditer(level_text): + q_num = int(match.group(1)) + options = { + 'A': match.group(3).strip(), + 'B': match.group(4).strip(), + 'C': match.group(5).strip(), + 'D': match.group(6).strip(), + } + if q_num in answers: + question = Question( + number=q_num, + text=match.group(2).strip(), + options=options, + answer_letter=answers[q_num], + block=block_title, + sub_block=current_sub_block, + level=level + ) + questions.append(question) + return questions + +def select_quiz_questions(questions, num_per_block): + """ + Выбирает случайные вопросы из каждого блока, сохраняя баланс сложности. + """ + questions_by_block = defaultdict(list) + for q in questions: + questions_by_block[q.block].append(q) + + final_quiz = [] + for block, q_list in questions_by_block.items(): + if not q_list: + continue + + selected_for_block = [] + by_level = defaultdict(list) + for q in q_list: + by_level[q.level].append(q) + + for level in by_level: + random.shuffle(by_level[level]) + + level_priority_cycle = [1, 2, 1, 3, 2, 1] # Даём приоритет более простым вопросам + + while len(selected_for_block) < num_per_block and any(by_level.values()): + cycled = False + for level in level_priority_cycle: + if by_level[level]: + selected_for_block.append(by_level[level].pop()) + cycled = True + break + if not cycled: # Если в приоритетном цикле вопросы кончились, берём любые оставшиеся + for level in sorted(by_level.keys()): + if by_level[level]: + selected_for_block.append(by_level[level].pop()) + break + + final_quiz.extend(selected_for_block) + + random.shuffle(final_quiz) + return final_quiz + +def print_quiz(quiz_questions): + """ + Красиво печатает вопросы и ответы. + """ + print("=" * 80) + print("СЛУЧАЙНЫЙ ОПРОСНИК ПО LINUX".center(80)) + print("=" * 80) + + if not quiz_questions: + print("\nНе удалось сгенерировать вопросы. Проверьте исходный текст.") + return + + # Печатаем вопросы + print("\n--- ВОПРОСЫ ---\n") + for i, q in enumerate(quiz_questions, 1): + level_icons = 'I' * q.level + print(f"{i}. [Блок: {q.block} | Уровень: {level_icons}]") + print(textwrap.fill(f" Вопрос #{q.number}: {q.text}", width=80, subsequent_indent=' ')) + print(f" A) {q.options['A']}") + print(f" B) {q.options['B']}") + print(f" C) {q.options['C']}") + print(f" D) {q.options['D']}\n") + + # Печатаем ответы + print("\n" + "=" * 35 + " ОТВЕТЫ " + "=" * 36 + "\n") + for i, q in enumerate(quiz_questions, 1): + answer_text = q.options[q.answer_letter] + print(f"{i} (Вопрос #{q.number}): {q.answer_letter}) {answer_text}") + +def main(): + parser = argparse.ArgumentParser( + description="Генератор опросника по Linux. Принимает Markdown текст через stdin.", + formatter_class=argparse.RawTextHelpFormatter + ) + parser.add_argument( + "count", + type=int, + help="Количество случайных вопросов для выбора из КАЖДОГО основного блока." + ) + args = parser.parse_args() + + # Сообщение-подсказка выводится в stderr, чтобы не мешать выводу в stdout + print( + "Ожидание Markdown текста из стандартного ввода (stdin)...", + file=sys.stderr + ) + + markdown_text = sys.stdin.read() + + all_questions = parse_markdown(markdown_text) + if not all_questions: + print("Ошибка: не найдено ни одного вопроса. Убедитесь, что вы передали текст в stdin.", file=sys.stderr) + return + + quiz = select_quiz_questions(all_questions, args.count) + print_quiz(quiz) + +if __name__ == "__main__": + main()