Системный администратор Linux. Вопросы

Собеседования подходят к завершению, кандидаты согласованы, офферы разосланы. А это значит, что настало время выполнить обещания и выложить вопросы к кандидатам.


Если кто пропустил, вот начало: Системный администратор Linux и продолжение: Продолжение поста «Системный администратор Linux»


В комментариях к предыдущим постам было высказано много мнений по поводу тематики и самих вопросов. Была и критика, и занудство, и здравые мысли. От себя могу сказать, что это не универсальный список вопросов для собеседования. Это то, с чем у нас приходится сталкиваться чаще всего, что надо понимать и без чего рост компетенций будет заметно усложнён. Часть вопросов просто для понимания кругозора кандидата.

Системный администратор Linux. Вопросы Linux, Windows, Сисадмин, Отдел кадров, Пригорело, Собеседование, Длиннопост

Так же и у нас: лучше долго выбирать наиболее подходящих под специфику и быстро догнать до нужного уровня, чем взять и обучить с нуля пусть даже очень грамотного новичка или не профильного специалиста.


Вопросы будут в порядке сложности. На многие вопросы я постараюсь давать два ответа. Первый - краткий и достаточный для того, что бы его зачесть. Второй ответ - более правильный или более развёрнутый, дающий кандидату преимущество перед остальными. Некоторые вопросы/ответы будут в форме диалога.


Готовы? Ну тогда поехали!


В: Как посмотреть версию ядра?

О: uname -a

В+: А если только версию?


О+: uname -r


В: Как узнать какие модули ядра загружены?

О: lsmod

В+: Как загрузить и выгрузить модуль?

О+: Загрузить командой modprobe, выгрузить ей же, но с ключом --remove, если модуль не используется.


В: Есть сервер с двумя интерфейсами. Один интерфейс смотрит в интернет, другой в локалку. На обоих адреса прописаны статикой. Как пользователей из локалки выпустить в интернет через этот сервер?

О: Маршрут по умолчанию должен быть назначен на интерфейс с интернетом, нужно поднять NAT через iptables и SNAT/DNAT или MASQUERADE, надо включить forward пакетов.

В+: Как именно это сделать?

О+: Для примера шлюз будет на RHEL-based дистрибутиве. В других дистрибутивах есть созвучные или аналогичные опции. В настройках интерфейса с локалкой надо прописать defroute=no, на интерфейсе с интернетом defroute=yes. Либо можно указать маршрут в файле route-название_интерфейса, который располагается рядом с файлом настроек интерфейса. Настройка NAT будет зависеть от того, фиксирован ли список клиентов в локалке или нет. Если фиксирован - настройка через SNAT, если не фиксирован - MASQUERADE. Так же, если к клиенту будут обращения из внешней сети, придётся использовать DNAT. Включить forward пакетов можно временно командой echo 1 > /proc/sys/net/ipv4/ip_forward или постоянно, прописав net.ipv4.ip_forward = 1 в файл /etc/sysctl.conf и загрузить их из файла командой sysctl -p.

О++: Можно ещё поднять прокси и выпустить через него. Например squid. При этом либо явно указав этот прокси у клиентов, либо прозрачно, через iptables и POSTROUTING.


[Дословный синтаксис команд не нужен. Главное, что кандидат понимает что именно и как он будет делать. Если кандидат расскажет ещё что такое этот ip_forward - это будет дополнительным плюсом.]


В: Есть сервер с двумя интерфейсами, к каждому из которых подключён отдельный интернет провайдер. Например первый 100 мегабит, второй 50. Можно ли как-то получить суммарный внешний канал в 150 мегабит?

О: Штатно - нельзя. Но можно поставить пакет iproute2, который позволяет сделать два маршрута по умолчанию, каждый из которых будет иметь свой вес. Например вес первого интерфейса сделать вес 2, а второго - 1. Тогда трафик будет пытаться направляться в соотношении 2 к 1 относительно интерфейсов. В идеальных условиях это даст суммарные 150 мегабит. В реальных - будет зависимость и «тяжелых» сессий, которые будут привязываться к одному конкретному интерфейсу.


В: Как посмотреть какой DNS использует система? У нас настроен DHCP и «в лоб» в настройках на клиенте ничего нет. Файл /etc/resolv.conf много где считается устаревшим и там может быть пусто.

О: Попробовать отрезольвить любой адрес. Например командами nslookup, host или dig. Они показывают какой DNS сервер был использован.

В+: А если у нас какая нибудь Ubuntu, которая из коробки за собой тянет dnsmasq? В таком случае эти команды будут говорить, что DNS сервером является 127.0.1.1 или 127.0.0.53. Как быть?

О+: Если есть dnsmasq, значит у него есть конфиги и логи, в которых можно посмотреть что он использует. В крайнем случае можно использовать tcpdump и посмотреть какие есть исходящие подключения на 53 порт.


В: Как посмотреть таблицу маршрутизации на любой системе?

О: Это можно сделать командами route -n или ip r

В+: А на любой системе одной и той же командой?

О+: Команда netstat -rn работает везде, на Linux, Windows, MacOS, Solaris. Даже на Android. В некоторых системах это единственный вариант посмотреть маршруты.


В: Есть LVM. На одной VG есть 2 LV. Один смонтирован в корень системы, другой в /home. При создании разделов ошиблись и создали корень слишком маленький, а home слишком большой. Можно ли как-то перекинуть место из одного раздела в другой? Оба раздела содержат данные, которые нельзя удалять. В разделе home есть достаточно свободного места. Систему нельзя перезагружать.

О: Уменьшить можно, если файловая система позволяет уменьшать свой размер. Например ext4 позволяет это сделать, а xfs - нет. Увеличивать разделы можно «на горячую». Для уменьшения надо размонтировать /home, уменьшить файловую систему, уменьшить LV с этим разделом, смонтировать /home, увеличить LV раздела с корнем, увеличить файловую систему. Командой lvextend с ключом -r последние два действия можно совместить.

В+: А есть там xfs?

О+: Тогда придётся использовать временный диск. Скопировать на него данные из /home, пересоздать раздел меньшего размера, скопировать данные обратно. Можно командами pvs или vgs посмотреть свободное место на LVM. Возможно не всё пространство было размечено и его можно будет использовать вместо временного диска.


В: Как определить тип файловой системы, в которую отформатирован LV раздел в LVM? Команда fdisk -l показывает, что код раздела 83 или 8E, т.е. раздел Linux или LVM раздел.

О: Если раздел смонтирован можно командами df -T, mount или findmnt

В+: А если не смонтирован?

О+: Команда lsblk с ключом -f показывает тип файловой системы и метки, например для oracleasm дисков.


В: Как получить сводку о всём железе?

О: Командами группы ls. Например lspci, lsusb и т.д. Либо cat /proc/cpuinfo, cat /proc/meminfo и т.д.

В+: А более развёрнуто? Например с серийными номерами памяти и количеством плашек памяти?

О+: Можно через smbios командой dmidecode. Либо через ipmitool подключиться к менеджменту, если он есть, и через его shell достать данные.


В: Как обновить все пакеты, кроме одного? Например кроме ядра.

О: В RHEL-based командой yum update --exclude kernel*. В других дистрибутивах должен быть похожий ключ, который можно посмотреть в man’е к пакетному менеджеру.

В+: А если постоянно исключить из обновления?

О+: Можно использовать yum versionlock kernel*. В других дистрибутивах так же можно поискать в man’е по словам lock, hold или freeze.


Для начала, думаю, достаточно. Продолжение будет в следующих постах. Постараюсь сильно с ними не затягивать.

GNU/Linux

1K постов15.5K подписчика

Добавить пост

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.