Вопросы для собеседования Системного администратора или DevOps инженера Linux. Часть 2. Simple Linux Questions

Всем привет! в прошлой статье мы начали разбор статьи с GitHub — Linux System Administrator/DevOps Interview Questions.
Сегодня будет пачка вопрос из раздела «Простые» — экзамен на звание junior Linux administrator.

Простые вопросы / Simple Linux Questions

1. Какое имя и UID у администратора системы? (What is the name and the UID of the administrator user?)

В Linux системе, как в большинстве unix-like/base систем, администратором (а точнее суперпользователем, тк администратором может идейно выступать любой пользователь, сопровождающий систему и способный получить права суперпользователя) является пользователь с учетной записью root. Название является исторически сложившимся и в принципе может быть заменено на любое другой. Права суперпользователя зависят не от названия учетной записи, а от ее идентификатора — UID (User ID). Для суперпользователя uid=0 и именно это так отличает его учетную запись от всех прочих.

2. Как вывести список всех, даже скрытых файлов, находящихся в директории (How to list all files, including hidden ones, in a directory?)

За вывод содержимого текущего (если без аргументов, содержащих путь к какой-то определенной директории) отвечает команда ls — сокращение от слова list. Параметр -a (сокращение от all)  позволяет посмотреть все файлы, даже скрытые ( их имя начинается с точки), а если комбинировать его с параметром -l (long) — то мы увидим подробную информацию. Есть еще одна команда — tree, которая не входит в стандартный комплект утилит, которая также может показывать содержимое каталогов ( однако в более удобном-наглядном древовидном представлении) и так же может показывать скрытые файлы, дополнительную информацию и тд.

3. Какая linux/unix команда позволяет удалить директорию и все ее содержимое? (What is the Unix/Linux command to remove a directory and its contents?)

Существует команда rmdir, созданная специально для удаления директорий, однако она не удалит их, если директории не пусты. Команда rm может помочь нам в этом — если применить флаг -r (recursive) она рекурсивно удаляет все содержимое каталога и потом его тоже. Флаг -f позволит сделать это игнорируя различные предупреждения, однако будьте осторожны с этой комбинацией rm -rf — так как она может запросто снести вам большую часть системы). В обычной ситуации я бы рекомендовал использовать комбинацию -ri — тогд на удаление каждого объекта будет задаваться вопрос- а точно ли вы этого хотите.

4. Какая команда покажет вам объем свободной или используемой памяти? Существует ли в linux свободная память? (Which command will show you free/used memory? Does free memory exist on Linux?)

Еще одна команда, входящая в стандартный набор утилит linux — free. Как раз для этого и предназначена. Ряд модификаторов типа -h, -m, -b меняет формат вывода (байты, мегабайты и тп). Команда выводит информацию как по оперативной памяти, так и по свопу (аналог “подкачки” в windows). Однако столбцов там больше чем 2 ( свободно/занято), а точнее их 6:

  • total – общее количество установленной в системе памяти — ОЗУ и под своп;
  • used – реально использующая в данный момент и зарезервированная системой память; Вычисляется как ( total – free – buffers – cache)
  • free – свободная память (вообще никем не используется);
  • shared – Shared memory или Разделяемая память, обычно используется tmpfs.
  • buffers – буферы в памяти – страницы памяти, зарезервированные системой для выделения их процессам, когда они потребуют этого, также известна как heap-memory;
  • cached – файлы, которые недавно были использованы системой/процессами и хранящиеся в памяти на случай если вскоре они снова потребуются.
  • available — оценка того, сколько памяти может быть доступно для запуска новых приложений без свопинга. То есть это сколько памяти система также может освободить + использовать свободное пространство.

5. Как найти строку “my konfi is the best” рекурсивно в файлах  каталога? (How to search for the string «my konfi is the best» in files of a directory recursively?)

Самым простым и известным способом поиска является использование утилиты grep, с ключами -r (рекурсивынй поиск) — то есть поиск по каталогам и подкаталогам и ключом -i (искать вне зависимости от регистра). Однако grep не является лучшим вариантом поиска, так как является утилитой общего назначения. Вторым вариантом является вызов связки find + grep — первой из них вы можете задать что искать надо только по файлам ( игнорируя каталоги, линки, сокеты и прочие объекты,  в которых искомой строки быть точно не может) а так же указать по каким файлам искать (задать маску расширения например). Тем самым ускорив поиск. И наконец третий вариант — использовать специализированную утилиту ack или ack-grep (одно и то же — просто названия разные). Она создана для поиска среди файлов проекта с исходным кодом, поэтому понимает некоторые казалось бы очевидные вещи (не ищи среди резервных копий файлов, среди файлов метаданных git и тп), тем самым еще сильней ускоря поиск.

6. Как удаленно подключиться к серверу или что такое SSH? (How to connect to a remote server or what is SSH?)

Удаленно к серверу можно подключиться довольно большим числом способов, в зависимости от того, что есть под рукой ( то есть в зависимости от вашего окружения). Вот только некоторые из известных мне способов:

  • IP-KVM —
  • VNC via IPMI / iLo / iDRAC / etc…
  • VNC
  • VNC via Web
  • Web интерфейс
  • Telnet
  • SSH
  • RDP

Однако, в обычной ситуации когда речь заходит про удаленное подключение к Linux серверу, речь обычно идет про SSH (а если быть точнее — openssh), который де-факто является стандартом удаленного управления Linux серверами. SSH или secure socket shell — протокол, обеспечивающий защищенный при помощи криптографических средств способ подключения к удаленному командному интерпретатору. Защита представляет собой обеспечение безопасности в двух аспектах:

  • Обеспечение конфиденциальности передаваемых данных — вводимых команд и получаемых ответов за счет шифрования всего трафика, передаваемого между клиентом и сервером.
  • Защита от атак типа MiTM — за счет сохранения отпечатка ключа сервера на стороне клиента при первом подключении с последующей сверкой его при каждом следующем подключении

7. Как посмотреть все переменные окружения и как вы можете их использовать? (How to get all environment variables and how can you use them?)

Переменные окружения — сущность, существующая во всех unix подобных операционных системах (и отчасти в windows тоже) — это переменные, задаваемые для каждого отдельного сеанса пользователя (как интерактивный — вход в режиме графического интерфейса, запуск командного интерпретатора так и не интерактивный- запуск процесса от имени пользователя), и несущие ряд настроек- пути поиска бинарных файлов утилит, локаль и язык окружения, основной редактор и прочее.

Как посмотреть — используя например команды “printenv” или “env”. Задать — с помощью команды “export”. Использовать можно для изменения поведения системы и запускаемых приложений. Так же в некоторых ситуациях для конфигурации программ и сервисов. В моей практике была система, состоящая из нескольких сервисов, написанных на node.js. Так вот ее конфигурация задавалась через переменные окружения, а вместо конфигурационного файла использовался специальный bashrc профайл с значением переменных окружения для пользователя, из под которого запускался процесс.

8. Я получаю сообщение «command not found» когда я ввожу “ifconfig -a”, что я делаю не так? (I get «command not found» when I run ifconfig -a. What can be wrong?)

Мне известны две причина:

  • Пакет, содержащий утилиту ifconfig не установлен (обычно она входит в пакет net-tools — установите его).
  • Каталог “/sbin”, в котором содержится эта утилита, не добавлен в пути поиска вашей переменной окружения “$PATH” — в таком случае попробуйте ввести полный путь для этой утилиты “/sbin/ifconfig -a”. Такое например случается когда вы работаете не под учетной записью с правами суперпользователя.

9. Что происходит когда я ввожу “TAB-TAB”? (What happens if I type TAB-TAB?)

в зависимости от того где мы применяем эту комбинацию. В случае когда мы набираем команду в терминале, эта комбинация сработает как автодополнение — дописав команду за нас. В случае когда мы вводим аргументы команды — имя файла или путь, он так же будет дополнение. В обоих случаях это сработает в случае если существует однозначное соответствие.

10. Какая команда покажет доступное пространство в Unix/Linux системе? (What command will show the available disk space on the Unix/Linux system?)

df или disk free — команда, отображающее свободное место на той или иной файловой. У команды существуют различные модификаторы ее вывода- например отображение размера в человеко-читаемом формате (-h):

11. Какую команду вы знаете для проверки DNS записей? (What commands do you know that can be used to check DNS records?)

Как минимум три — host, nslookup(name space look up), dig (dns internet groper).

12. Какие команды изменяют владельца файла и права на файл ? (What Unix/Linux commands will alter a files ownership, files permissions?)

Две команды — chmod и chown. chmod — Change Mode — изменяет режим прав доступа к файлу, путем выставления их при помощи цифровой маски (755, 644 и тд) либо за счет буквенного выражения (u=rwx,g=rw,o=rx).

chown — change owner — команда изменения владельца и группы владельца файла.

13. Что делает команда “chmod +x FILENAME” ? (What does chmod +x FILENAME do?)

Эта команда добавит для всех пользователей право на выполнение этого файла. То есть например в случае обычных файлов — это возможность запустить его как программу ( если это бинарный исполняемый файл или сценарий на одном из скриптовых языков), для каталогов  например это право посмотреть список содержимого и тд.

14. Что означают права 0750 примененные к файлу? (What does the permission 0750) on a file mean?

7 = rwx

5 = r-x

0 = —

Итого Владелец может все, члены группы владельца могут читать и исполнять, прочие пользователи не могут ничего.

15. Что означают права 0750 примененные к папке? (What does the permission 0750 on a directory mean?)

Права получаются аналогичные вышеописанным, однако тк это каталог, поведение немного отличается — владелец по прежнему может все, а вот члены группы владельца  могут только просматривать содержимое папки (r) и в принципе в нее заглядывать (x)

16. Как добавить нового системного пользователя без права входа в систему? (How to add a new system user without login permissions?)

Добавить пользователя и указать ему в настройках файла /etc/password в качестве командной оболочки программу /usr/sbin/nologin либо /bin/false ( в первом лучае при попытке войти он получит вежливое сообщение о том что в текущий момент эта учетная запись недоступна, во втором- просто отбой).

Либо в файле /etc/shadow вместо хеша пароля пользователя указать * (звездочку) Однако сработает это только для авторизации по паролю, а не по ключу. Сделать с помощью команд это можно следующим образом:

17. Как добавить или удалить пользователя из группы? (How to add/remove a group from a user? )

использовать команду usermod с ключами -G и -a. Вместе они позволяют добавить пользователя в некоторую новую для него группу, без флага -а, он будет исключен из групп, которых нет в списке, переданном команде

18. Что такое алиасы (псевдонимы) в баше? (What is a bash alias?)

это возможность дать короткое имя длинной сложной команде или набору команд, или команду с указанными модификаторами. Самое простое — это “ll”, который является псевдонимом для “ls -la”. С помощью команды alias без параметров можно увидеть список текущих установленных псевдонимов:

19. Как вы установите почтовый адрес для рута или обычного пользователя? (How do you set the mail address of the root/a user?)

Создав скрытый файл .forward в домашнем каталоге рута или обычного пользователя. Так же можно воспользоваться файлом /etc/alias, если на хосте установлен какой либо mta

20. Что делает сочетание клавиш CTRLl+C? (What does CTRL-c do?)

Посылает текущему процессу сигнал прерывания (завершения работы) с терминала. Процесс должен остановить свое выполнение штатным образом ( не аварийно)

21. Что содержится в  файле /etc/services? (What is in /etc/services?)

там содержатся алиасы для различных протоколов, ставящие взаимное соответствие между названием прикладного протокола, используемым портом и видом транспортного протокола — tcp или udp.

 

22. 2Как перенаправить вывод STDOUT и STDERR в баше? (How to redirect STDOUT and STDERR in bash? (> /dev/null 2>&1))

> file — Направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — перезаписан сначала

2> file — Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — перезаписан сначала

>>file — Направить стандартный поток вывода в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец

2>>file — Направить стандартный поток ошибок в файл. Если файл не существует, он будет создан, если существует — данные будут дописаны к нему в конец

&>file или >&file — Направить стандартный поток вывода и стандартный поток ошибок в файл. Другая форма записи: >file 2>&1

23. В чем разница между unix и linux? (What is the difference between UNIX and Linux.)

  1. Современные unix системы- коммерческие закрытые проекты, linux-based системы в большинстве своем открытые и бесплатные
  2. коммерческие unix работают на довольно ограниченном числе платформ. linux можно запустить почти на любой.
  3. linux менее стандартизован и различные версии и дистрибутивы имеют значительные флуктуации.
  4. в linux больше поддержка файловых систем и оборудования
  5. linux распространяется в том числе в виде исходных кодов, или их можно довольно легко получить в то время как unix системы поставляются только в виде готовых сборок бинарных компонент
  6. https://www.ibm.com/developerworks/ru/library/au-unix-difflinux/index.html

24. В чем разница между Telnet и SSH? (What is the difference between Telnet and SSH?)

Оба протокола дают доступ к командной строке удаленного хоста, однако telnet является незащищенным протоколом, уязвимым к атаке MiTM и к перехвату трафика.

В отличие от него, протокол ssh является криптографически защищенным, шифрующим передаваемые данные и обеспечаивающим подтверждение подлинности сервера. тем самым защищая нас и от MiTM

25. Объясните значение трех параметров средней нагрузки (load average) и что они демонстрируют? Какая команда может быть использована чтобы с ними ознакомиться? (Explain the three load averages and what do they indicate. What command can be used to view the load averages?)

Начнем с конца — эти значения можно получить при помощи команд top, htop, uptime и многих других.

В общем виде Load Average это среднее количество ожидающих ресурсов ЦПУ процессов за один из трех промежутков времени.  Однако среднее значение не является средним арифметическим а есть среднее значение функции, которая рассчитывается каждые 5 секунд с момента старта системы.

Первый параметр — среднее за минуту, второй — за 5 минут и третье — за 15 минут.

Число надо оценивать с точки зрения числа ядер  в системе. LA = 1 для одноядерной системы это плохо, а вот для 4-х ядерных это почти ничто.

https://habr.com/post/260335/

26. Что такое модуль ядра linux? (What is a Linux kernel module?)

Объектный (бинарный) файл, являющийся расширением ядра, привносящий новый функционал — например поддержку нового оборудования. Модули могут динамически загружаться и выгружаться в работающей системе. Для этого используется утилита modprobe, а получить список загруженных модулей можно с помощью lsmod, в том числе их зависимости

 

27. Расскажите про шаги, необходимые для загрузки в однопользовательском режиме для диагностики проблемы? (Walk me through the steps in booting into single user mode to troubleshoot a problem.)

Если в системе используется загрузчик grub2 ( а это скорее всего так), достаточно при загрузке системы при помощи клавиши shift приостановить загрузку, и добавить ключевое слово single в конец строки конфигурации загрузки ядра:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/installation_guide/s1-rescuemode-booting-single

28. Расскажите про шаги, необходимые для диагностики проблемы с ошибкой 404 от веб приложения, которое вы администрируете ?(Walk me through the steps you’d take to troubleshoot a 404 error on a web application you administer.)

404 означает что система не смогла предоставить вам запрашиваемый ресурс. В случае, если речь идет про статический файл (страница, рисунок и тп) — мы должны убедиться что он присутствует на сервере и веб сервер имеет к нему доступ. Для этого необходимо проверить конфигурацию веб сервера, права доступа, название файла и полный путь до него  ( возможно в нем или в описании пути в url ссылке допущена ошибка). В случае если ошибка появляется при генерации динамического ресурса — необходимо проверить передаваемые параметры и сценарии генерации страницы, хотя скорее в таком случае мы получили бы ошибку 5хх.