Большинство списков вопросов для собеседований по Linux повторяют одни и те же 10 вопросов десятилетней давности, а многие «официальные» ответы устарели или неприменимы к современным дистрибутивам Linux.
Хотя основы не изменились, сама Linux эволюционировала. На многих дистрибутивах инструменты вроде journalctl заменили старые методы логирования, ss практически вытеснил netstat, а ряд традиционных служб и команд больше не используются по умолчанию.
Если вы готовитесь к собеседованию на позицию системного администратора Linux, DevOps-инженера или Site Reliability Engineer (SRE), простого заучивания ответов недостаточно.
Интервьюеры часто задают уточняющие вопросы, чтобы проверить, действительно ли вы понимаете концепции и способны решать реальные задачи. Умение объяснить, почему что-то работает, и продемонстрировать это с помощью правильной команды Linux может сыграть решающую роль.
Редакция впервые опубликовала это руководство несколько лет назад, но оно нуждалось в обновлении. Некоторые упомянутые в исходной версии службы больше не используются в современных дистрибутивах Linux, а один из ответов был технически некорректным.
Мы полностью переработали руководство с учётом современных окружений Linux, заменив устаревшую информацию на практичные, точные объяснения и команды, которые вы будете использовать в работе администратора Linux.
Готовитесь ли вы к первому собеседованию по Linux или освежаете знания перед следующей должностью, эти 15 вопросов помогут обрести уверенность, чтобы отвечать не по учебнику, а демонстрировать реальный практический опыт работы с Linux.
1. Как приостановить выполняющийся процесс и перевести его в фоновый режим?
Нажмите Ctrl+Z, пока процесс выполняется на переднем плане. При этом отправляется сигнал SIGTSTP (Terminal Stop), который приостанавливает процесс без завершения и возвращает вас к приглашению командной оболочки.
После приостановки процесса вы можете управлять им с помощью следующих команд управления заданиями:
-
bg: возобновляет выполнение приостановленного задания в фоновом режиме, позволяя ему продолжить работу, пока вы используете тот же терминал. -
fg: выводит фоновое или приостановленное задание обратно на передний план. -
jobs: отображает список всех заданий, выполняющихся или приостановленных в текущем сеансе оболочки, вместе с их номерами (например,%1,%2).
Например, предположим, вы запустили большое резервное копирование rsync, а затем поняли, что терминал нужен для другой задачи. Вместо того чтобы прерывать перенос данных и начинать заново, нажмите Ctrl+Z для приостановки, выполните bg для продолжения в фоновом режиме и продолжайте работу в том же терминале.
$ rsync -av /home/user/Documents/ /backup/
^Z [1]+ Stopped rsync -av /home/user/Documents/ /backup/
$ bg [1]+ rsync -av /home/user/Documents/ /backup/ &
$ jobs [1]+ Running rsync -av /home/user/Documents/ /backup/ &
$ fg %1 rsync -av /home/user/Documents/ /backup/
Совет для собеседования: помните, что Ctrl+Z только приостанавливает процесс, но не завершает его. Часто задают уточняющий вопрос о разнице между Ctrl+Z и Ctrl+C. Ctrl+C отправляет сигнал SIGINT, который прерывает (обычно завершает) процесс, а Ctrl+Z отправляет SIGTSTP, который просто приостанавливает его.
2. Какой минимальный набор разделов нужен для установки Linux и как просмотреть загрузочные сообщения?
Минимальным требованием для установки Linux является один корневой раздел (/). Система может загружаться и работать только с ним.
Однако в большинстве производственных систем используется несколько дополнительных разделов или томов:
-
/(root): хранит операционную систему и приложения. -
/boot: содержит ядро и файлы загрузчика. Этот раздел часто выносят отдельно, особенно при использовании полного шифрования диска.
-
Swap: предоставляет виртуальную память при нехватке ОЗУ и используется для гибернации. В современных системах обычно не требуется правило “swap = 2× RAM”.
Для диагностики проблем загрузки или анализа произошедшего при старте можно использовать следующие команды:
-
dmesg: выводит сообщения загрузки ядра и кольцевой буфер ядра. Полезна для проверки обнаружения оборудования, загрузки драйверов и ошибок на уровне ядра. -
journalctl -b: показывает полный лог текущей загрузки в дистрибутивах на основе systemd (Ubuntu, RHEL, Fedora, Debian, Rocky Linux и других). -
journalctl -b -p err: выводит только сообщения об ошибках текущей загрузки, что упрощает поиск проблем.
Например:
$ dmesg | less
$ journalctl -b
$ journalctl -b -p err
На старых дистрибутивах Linux, использовавших систему инициализации SysV, загрузочные логи обычно сохранялись в файлы типа /var/log/boot.log. Однако в современных дистрибутивах Linux, использующих systemd, основным инструментом для просмотра загрузочных логов и диагностики проблем при старте является journalctl.
Совет: если интервьюер спросит, какую команду вы используете для диагностики сервера, который не загрузился должным образом, оптимальным ответом обычно будет journalctl -b, поскольку она предоставляет полный отчёт о текущей загрузке, включая сообщения ядра, системные службы и ошибки запуска. dmesg следует использовать, когда проблема связана конкретно с обнаружением оборудования или событиями ядра.
3. Какой демон отслеживает системные события в современном Linux?
Несколько лет назад ожидаемым ответом на этот вопрос был syslogd, поскольку он был стандартным демоном системного логирования в традиционных Unix- и Linux-системах. Хотя его до сих пор могут упомянуть на собеседованиях, большинство современных дистрибутивов Linux перешли на новые решения.
Сегодня система логирования зависит от используемого дистрибутива Linux:
-
Ubuntu и Debian: по умолчанию используется rsyslog, который хранит логи в виде обычных текстовых файлов в каталогах вроде
/var/log/. -
RHEL, Rocky Linux, Fedora и другие дистрибутивы на systemd: используется
systemd-journald, сохраняющий логи в бинарном журнале, который просматривается командойjournalctl.
Важно знать, какая система логирования используется в вашем дистрибутиве, потому что команды для просмотра логов различаются.
Например, для проверки активности SSH-входов:
# RHEL, Rocky Linux, Fedora
$ journalctl -u sshd
# Ubuntu and Debian
$ grep 'sshd' /var/log/auth.log
Если нужно просмотреть логи конкретной службы, можно использовать:
$ journalctl -u nginx
$ journalctl -u sshd
Понимание разницы между rsyslog и systemd-journald показывает, что вы знакомы с работой логирования в современных Linux-системах, а не только в старых дистрибутивах.
Совет: часто задают уточняющий вопрос, могут ли rsyslog и systemd-journald работать вместе. Ответ — да. Во многих дистрибутивах Linux systemd-journald сначала собирает сообщения, а затем передаёт их в rsyslog. Это позволяет хранить логи и в традиционных текстовых файлах в /var/log, и одновременно получать к ним доступ через journalctl. Понимание взаимодействия этих компонентов демонстрирует практический опыт администрирования Linux, а не простое заучивание.
4. Что нужно сделать перед запуском fsck на корневом разделе?
Перед запуском fsck на корневой файловой системе она не должна быть смонтирована в режиме чтения-записи. Запуск fsck на активной, доступной для записи файловой системе может привести к повреждению данных, поскольку операционная система может продолжать запись на диск во время проверки.
Самые безопасные подходы:
-
Загрузиться в режиме восстановления (rescue), однопользовательском режиме или с live-носителя и выполнить
fsck, когда корневая файловая система не используется. -
Если корневая система смонтирована, перемонтировать её в режим «только чтение» перед запуском
fsck(если это уместно). -
Если запустить
fsckсразу невозможно, запланировать проверку при следующей загрузке.
Например:
# Перемонтировать корневую ФС только для чтения
$ mount -o remount,ro /
# Выполнить проверку (устройство заменить на своё)
$ fsck /dev/sda2
Чтобы принудительно запустить проверку при следующей загрузке:
# Старые системы Linux
$ touch /forcefsck
В современных дистрибутивах на основе systemd можно также добавить параметр загрузки ядра:
fsck.mode=force
Это предписывает системе выполнить проверку во время старта.
Совет: часто задают вопрос: «Можно ли запускать fsck на смонтированной файловой системе?» Безопасный ответ — нет для файловых систем в режиме чтения-записи, особенно для корневой. Хотя некоторые файловые системы поддерживают ограниченную проверку на лету, стандартной практикой является запуск fsck только когда система не смонтирована или смонтирована только для чтения.
5. Как скопировать дерево каталогов с сохранением структуры?
Традиционным инструментом Unix для копирования целого дерева каталогов является cpio. Он сохраняет иерархию каталогов, а также может сохранять права доступа и временные метки файлов.
Хотя сегодня он используется не так часто, он всё ещё встречается в сертификационных экзаменах, например курс подготовки к LFCS, и на некоторых собеседованиях по Linux.
Классический пример:
$ find /home -depth | cpio -pdm /backup
Пояснение частей:
-
find /home -depth: выводит список всех файлов и каталогов в /home, обрабатывая файлы перед их родительскими каталогами. -
cpio -p: использует режим сквозного копирования (pass-through), перенося файлы напрямую в другой каталог. -
-d: создаёт целевые каталоги, если они отсутствуют. -
-m: сохраняет исходное время модификации.
Хотя cpio стоит знать для сертификации и собеседований, большинство администраторов Linux сейчас используют rsync, потому что он проще, быстрее и умеет возобновлять прерванные передачи.
Например:
$ rsync -a /home/ /backup/
Опция -a (archive) сохраняет структуру каталогов, права доступа, владельца, временные метки, символические ссылки и другие важные атрибуты файлов, что делает её предпочтительным выбором для большинства реальных систем Linux.
Совет: если интервьюер спросит традиционную команду Unix для копирования всего дерева каталогов с сохранением структуры, ожидаемый ответ — cpio. Однако упоминание того, что rsync -a является предпочтительным инструментом в современном администрировании Linux, демонстрирует практический опыт и показывает, что вы разбираетесь как в классических утилитах Unix, так и в актуальных best practices.
6. Как автоматизировать ротацию логов?
Стандартным инструментом для автоматической ротации логов в Linux является logrotate. Он управляет файлами журналов, выполняя их ротацию, сжатие, удаление и повторное создание на основе заданных правил. Это предотвращает бесконтрольный рост файлов журналов и экономит дисковое пространство.
В большинстве дистрибутивов Linux, включая Ubuntu, Debian, RHEL, Rocky Linux и Fedora, logrotate установлен по умолчанию и запускается автоматически через cron или systemd-таймер.
Конфигурационные файлы находятся в:
-
/etc/logrotate.conf— основной файл конфигурации. -
/etc/logrotate.d/— содержит отдельные файлы для конкретных служб (Apache, Nginx, MySQL и т.д.).
Типовая конфигурация logrotate позволяет задавать:
-
периодичность ротации (ежедневно, еженедельно, ежемесячно),
-
количество хранимых архивных копий,
-
сжатие ротированных логов,
-
игнорирование пустых файлов,
-
необходимость перезапуска службы после ротации.
Пример конфигурации:
/var/log/myapp.log {
weekly
rotate 4
compress
missingok
notifempty
}
Эта конфигурация ротирует лог еженедельно, сохраняет четыре архивные копии, сжимает старые логи, не ругается на отсутствие файла и пропускает ротацию, если лог пуст.
Важный момент, который стоит упомянуть на собеседовании: журналы systemd не управляются logrotate. Вместо этого свои логи самостоятельно управляет systemd-journald.
Чтобы уменьшить размер журналов systemd:
# Сократить журнал до 500 МБ
$ journalctl --vacuum-size=500M
# Удалить записи старше двух недель:
$ journalctl --vacuum-time=2weeks
Постоянные ограничения на размер журнала задаются в файле:
/etc/systemd/journald.conf
Например, можно задать параметры, такие как SystemMaxUse, чтобы ограничить дисковое пространство, которое может занимать журнал.
Совет: часто задают вопрос, управляет ли logrotate всеми логами Linux. Ответ — нет. Традиционные текстовые логи в /var/log управляются logrotate, в то время как журналы systemd обрабатываются отдельно с помощью systemd-journald.
7. Как узнать, кто запланировал задание с помощью at?
Команда at планирует однократное задание на указанную дату и время. Чтобы просмотреть ожидающие задания, используйте at -l или эквивалент atq.
at -l
or
atq
Вывод содержит номер задания, запланированное время выполнения и пользователя, создавшего задание.
Пример:
3 Sat Aug 1 02:00:00 2026 a username
# Просмотреть команды, которые выполнит задание:
at -c 3
(Замените 3 на нужный номер задания.)
Чтобы удалить ненужное задание, выполните:
atrm 3
or
at -r 3
Это удаляет указанное задание из очереди.
Этот вопрос часто задают на собеседованиях, чтобы проверить, понимаете ли вы разницу между at и cron:
-
atиспользуется для однократных задач, -
cron— для повторяющихся задач, выполняющихся через регулярные интервалы (каждый час, день, неделю и т.д.).
Например, если вас попросят запланировать разовое резервное копирование базы данных сегодня в 2:00 ночи, не изменяя системный crontab, правильным инструментом будет at.
8. Как просмотреть содержимое tar-архива, не распаковывая его?
Чтобы вывести список файлов в tar-архиве без извлечения, используйте команду tar с опцией -t (list).
tar -tvf backup.tar.gz
Опции:
-
-t: вывести содержимое архива, не извлекая. -
-v: отображать подробную информацию (права доступа, владелец, группа, размер, время модификации). -
-f: указать файл архива.
Пример вывода:
-rw-r--r-- root/root 1024 2026-07-30 10:15 backup/file1.txt
drwxr-xr-x root/root 0 2026-07-30 10:15 backup/config/
-rw-r--r-- root/root 2048 2026-07-30 10:16 backup/config/app.conf
Хорошей практикой считается просмотр архива перед распаковкой — это позволяет проверить, какие файлы и структуру каталогов он содержит.
Полезная деталь: современный GNU tar автоматически определяет распространённые форматы сжатия, такие как gzip (.tar.gz), bzip2 (.tar.bz2) и XZ (.tar.xz). Это значит, что обычно не требуется явно указывать опции -z, -j или -J.
Например, все эти команды работают с современным GNU tar:
tar -tf backup.tar.gz
tar -tf backup.tar.bz2
tar -tf backup.tar.xz
В старых версиях tar часто требовались специфичные для сжатия опции, поэтому в устаревшей документации до сих пор можно встретить команды вроде tar -ztvf archive.tar.gz.
Совет: распространённый уточняющий вопрос — в чём разница между tar -tf и tar -xf. Опция -t только выводит список содержимого, в то время как -x извлекает файлы в текущий каталог.
9. Что такое ошибка страницы памяти (page fault) и когда она возникает?
Ошибка страницы (page fault) возникает, когда выполняющийся процесс пытается обратиться к странице памяти, которая в данный момент не отображена в физическую оперативную память. Вопреки распространённому заблуждению, page fault не случается при завершении программы, а происходит во время активной работы, когда программа запрашивает память.
При возникновении page fault ядро Linux определяет, можно ли сразу отобразить требуемую страницу или её нужно сначала загрузить с диска.
Существует два типа ошибок страниц, которые следует знать:
-
Minor page fault — нужная страница уже доступна в памяти (например, в страничном кэше или используется совместно с другим процессом). Ядро просто обновляет таблицы страниц, без дискового ввода-вывода.
-
Major page fault — требуемую страницу необходимо загрузить с диска (из исполняемого файла, memory-mapped файла или раздела подкачки). Из-за медленного доступа к диску частые major page faults могут значительно снизить производительность.
Отслеживать общесистемную активность памяти и подкачки можно с помощью vmstat 1.
$ vmstat 1
Обращайте внимание на столбцы si (swap in) и so (swap out). Постоянная активность в этих столбцах может указывать на нехватку памяти.
Для просмотра статистики ошибок страниц конкретного процесса используйте:
$ ps -o min_flt,maj_flt -p <pid>
Здесь:
-
min_flt— количество minor page faults, -
maj_flt— количество major page faults.
Большое количество major page faults часто указывает на нехватку свободной памяти, и система тратит время на чтение страниц с диска вместо использования ОЗУ.
Совет: небольшое количество minor page faults абсолютно нормально для любой Linux-системы. Однако постоянно высокое число major page faults, особенно в сочетании с интенсивной подкачкой, обычно указывает на нехватку памяти. В таких случаях добавление ОЗУ или выявление прожорливых процессов зачастую эффективнее, чем обновление процессора.
10. Что такое коды возврата и как их использовать?
Код возврата (exit status) — это значение, которое программа передаёт в оболочку после завершения. Принято считать, что 0 означает успешное выполнение, а любое ненулевое значение указывает на ошибку или нештатную ситуацию. Конкретное значение ненулевого кода зависит от программы.
Чтобы проверить код возврата последней команды, используйте:
$ grep "error" logfile.txt
$ echo $?
Если grep находит совпадение, echo $? возвращает 0. Если совпадений нет, возвращается ненулевой статус.
Коды возврата особенно полезны в сценариях командной оболочки, где можно управлять последующими действиями в зависимости от успеха или неудачи команды.
Например:
# Запустить cmd2, только если cmd1 выполнена успешно
$ cmd1 && cmd2
# Запустить cmd2, только если cmd1 завершилась с ошибкой
$ cmd1 || cmd2
11. В чём разница между жёсткой и символической ссылкой?
И жёсткие ссылки (hard link), и символические (soft link) предоставляют дополнительный способ доступа к файлу, но работают по-разному.
Жёсткая ссылка — это ещё одна запись в каталоге, указывающая на тот же inode, что и исходный файл. Поскольку оба имени ссылаются на одни и те же данные на диске, удаление оригинального имени не удаляет файл, пока существует хотя бы одна жёсткая ссылка.
Символическая ссылка (symlink) — это специальный файл, хранящий путь к другому файлу или каталогу. Если исходный файл удалён или перемещён, симлинк становится битым, так как его цель больше не существует.
Создаются они так:
# Создать жёсткую ссылку
$ ln target_file hardlink
# Создать символическую ссылку
$ ln -s target_file symlink
Основные различия:
Жёсткая ссылка Символическая ссылка
Указывает на тот же inode, что и исходный файл Хранит путь к целевому файлу или каталогу
Продолжает работать, даже если исходное имя файла удалено Перестаёт работать, если целевой файл удалён или перемещён
Не может пересекать границы файловых систем Может указывать на файлы или каталоги в других файловых системах
Не может ссылаться на каталоги (как правило) Может ссылаться как на файлы, так и на каталоги
На практике символические ссылки используются гораздо чаще благодаря гибкости и возможности указывать на любые файлы и каталоги в системе. Жёсткие ссылки применяются в основном тогда, когда нужно иметь несколько имён для одного файла без дублирования данных.
12. В чём разница между kill -9 и kill -15?
Команда kill отправляет сигналы процессам. Два сигнала, которые чаще всего обсуждаются на собеседованиях: SIGTERM (15) и SIGKILL (9).
-
kill -15отправляет SIGTERM, который вежливо просит процесс завершиться. У процесса есть возможность закрыть файлы, сохранить данные, освободить ресурсы и корректно завершить работу. -
kill -9отправляет SIGKILL, который немедленно останавливает процесс. Процесс не может перехватить или проигнорировать этот сигнал, поэтому у него нет возможности выполнить очистку.
В большинстве случаев сначала следует попробовать SIGTERM. Если сигнал не указан, kill по умолчанию отправляет SIGTERM.
Например:
# Отправить SIGTERM (по умолчанию)
$ kill 1234
# Эквивалент
$ kill -15 1234
# Принудительно завершить процесс
$ kill -9 1234
Используйте SIGKILL только когда процесс полностью завис и не завершается после SIGTERM. Принудительное завершение приложений вроде баз данных может прервать выполняемые операции и оставить данные в несогласованном состоянии.
13. Как проверить открытые порты и слушающие сервисы?
Для просмотра сетевых соединений в современных Linux-системах рекомендуют использовать ss. Он вытеснил netstat в большинстве дистрибутивов, так как работает быстрее и получает информацию о сокетах напрямую из ядра.
Чтобы отобразить все слушающие TCP- и UDP-порты вместе с процессами-владельцами, выполните:
$ ss -tulpn
Опции:
-
-t: показать TCP-сокеты. -
-u: показать UDP-сокеты. -
-l: только слушающие сокеты. -
-p: показать имя процесса и его PID. -
-n: выводить числовые адреса и порты, не преобразуя имена.
Пример вывода:
Netid State Recv-Q Send-Q Local Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 users:(("sshd",pid=892,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=1215,fd=6))
Если служба не запускается, в первую очередь проверьте, не занят ли нужный порт другим процессом.
Например:
# Проверить состояние службы
$ systemctl status nginx
# Проверить, не занят ли порт 80
$ ss -tulpn | grep :80
Так вы быстро определите, слушает ли служба ожидаемый порт или его уже захватило другое приложение.
14. Что такое OOM Killer и как он выбирает, какой процесс завершить?
Когда в системе заканчивается свободная память и подкачка не помогает, ядро Linux задействует механизм OOM Killer (Out-Of-Memory), который принудительно завершает один из процессов, чтобы освободить память и не допустить полного зависания системы.
OOM killer не выбирает процесс случайным образом. Ядро присваивает каждому процессу оценку OOM (oom score), учитывая использование памяти и другие факторы. Процессы с более высокой оценкой с большей вероятностью будут завершены.
Посмотреть оценку OOM процесса можно так:
$ cat /proc/<pid>/oom_score
Также можно повлиять на вероятность выбора процесса, изменив значение oom_score_adj:
$ cat /proc/<pid>/oom_score_adj
Значение может быть от -1000 до 1000:
-
-1000: защищает процесс от завершения OOM killer’ом. -
0: поведение по умолчанию. -
1000: делает процесс значительно более вероятной целью.
Например, чтобы защитить критичный процесс:
$ echo -1000 | sudo tee /proc/<pid>/oom_score_adj
Если система постоянно вызывает OOM killer, это обычно признак того, что ей требуется больше памяти, увеличенный swap или менее прожорливые приложения.
15. Как найти файлы, изменённые за последние 24 часа?
Чтобы найти файлы, модифицированные за последние сутки, используйте find с опцией -mtime:
$ find /var/log -mtime -1
Пояснение:
-
find /var/log: поиск в каталоге /var/log. -
-mtime -1: файлы, изменённые менее одного дня назад.
Другие варианты:
# Изменённые ровно один день назад
$ find /var/log -mtime 1
# Изменённые более одного дня назад
$ find /var/log -mtime +1
Для более точного управления используйте -mmin, работающий с минутами.
Например, найти файлы, изменённые за последний час:
$ find /var/log -mmin -60
Эта команда особенно полезна при поиске неисправностей. Если служба внезапно перестаёт работать, можно быстро найти недавно изменённые файлы журналов, конфигурационные файлы или другие файлы и выяснить, что изменилось перед возникновением проблемы.
Заключение
Вопросы на собеседовании по Linux проверяют не только умение заучивать команды. Интервьюеры хотят понять, насколько хорошо вы разбираетесь в работе Linux, можете чётко объяснить ключевые концепции и знаете, какие команды применять при диагностике реальных систем.
Приведённые 15 вопросов охватывают темы, с которыми вы столкнётесь на многих собеседованиях на позиции Linux-администратора, DevOps-инженера и cloud-инженера.
Потратьте время на практику: выполните каждую команду на машине с Linux, поэкспериментируйте с разными опциями и постарайтесь понять вывод, а не просто запомнить его. Такой практический опыт значительно облегчит уверенные ответы на уточняющие вопросы.
Если вы готовитесь к собеседованиям по Linux, держите это руководство под рукой и регулярно возвращайтесь к этим концепциям. Прочное понимание основ часто выделяет успешных кандидатов.






Пока нет комментариев. Будьте первым!