Initial commit
This commit is contained in:
435
questions/linux.basic.md
Normal file
435
questions/linux.basic.md
Normal file
@@ -0,0 +1,435 @@
|
||||
## Linux. Basic
|
||||
|
||||
1. Что такое LA? В каких единицах измеряется?
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
LA (load average) -- параметр, определяющий среднюю нагрузку на систему за период времени (1 мин, 5 минут, 15 минут). Изменяется в количестве задач на одно ядро процессора. На нагрузку системы также влияет количество задач ввода-вывода и задержка сети. Также влияние на расчета LA оказывает: 1. Технология Hyper-Threading, которая делит одно физическое ядро на 2 логических, 2. Технология Turbo Bust, которая позволяет разгонять тактовую частоту процессора и работать на частоте выше заявленной, т.е. выше номинальной частоты (время на обработку одной задачи уменьшается).
|
||||
</details>
|
||||
|
||||
2. Что будет если на сервере LA = 100?
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
Вероятно, что на сервере будет наблюдаться замедленная работа сервисов, но если параметр LA равен количеству ядер в системе или количеству потоков в системе, то данная нагрузка является нормальной.
|
||||
</details>
|
||||
|
||||
3. Почему при высоких показателях значения LA на сервере может не наблюдаться проблем (консоль ssh отзывается, сервисы работают в обычном режиме)?
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
На параметр нагрузки LA влияет также и ожидание ввода-вывода (параметр *wa* в утилите *top*) в дисков и задержка сети. Данные параметры могут не влиять на работу основных сервисов в системе, но учитываются при расчете общей нагрузки на систему.
|
||||
|
||||
</details>
|
||||
|
||||
4. Представлен вывод команды *top*. Что означает каждая запись в выводе?
|
||||
```
|
||||
top - 21:29:24 up 14:18, 1 user, load average: 0,78, 1,48, 1,10
|
||||
Tasks: 277 total, 3 running, 274 sleeping, 0 stopped, 0 zombie
|
||||
%Cpu(s): 12,4 us, 2,5 sy, 0,1 ni, 84,8 id, 0,1 wa, 0,0 hi, 0,1 si, 0,0 st
|
||||
KiB Mem : 7106404 total, 306972 free, 3127144 used, 3672288 buff/cache
|
||||
KiB Swap: 8191996 total, 8191996 free, 0 used. 3270520 avail Mem
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
*top* - название утилиты.
|
||||
|
||||
*21:29:24* - текущее время системы.
|
||||
|
||||
*up 14:18* - сколько часов:минут система работает с момента последнего запуска.
|
||||
|
||||
*1 user* - количество пользователей авторизованных в системе.
|
||||
|
||||
*load average: 0,78, 1,48, 1,10* - параметр средней нагрузки на систему за период времени 1 минута, 5 минут, 15 минут.
|
||||
|
||||
*277 total* - всего процессов в системе.
|
||||
|
||||
*3 running* - количество процессов в работе.
|
||||
|
||||
*274 sleeping* - количество процессов в состоянии sleeping: ожидает какого-либо события или сигнала.
|
||||
|
||||
*0 stopped* - количество приостановленных процессов сигналом STOP или выполнением трассировки.
|
||||
|
||||
*0 zombie* - количество зомби-процессов, которые завершили своё выполнение, но присутствующие в системе, чтобы дать родительскому процессу считать свой код завершения.
|
||||
|
||||
| Параметр | Описание |
|
||||
|-------------------------------|------------------------------------------------------------------------------------------------|
|
||||
| us (user) | Использование процессора пользовательским процессами |
|
||||
| sy (system) | Использование процессора системным процессами |
|
||||
| ni (nice) | Использование процессора процессами с измененным приоритетом с помощью команды nice |
|
||||
| id (idle) | Простой процессора. Можно сказать, что это свободные ресурсы |
|
||||
| wa (IO-wait) | Говорит о простое, связанным с вводом/выводом |
|
||||
| hi (hardware interrupts) | Показывает сколько процессорного времени было потрачено на обслуживание аппаратного прерывания |
|
||||
| si (software interrupts) | Показывает сколько процессорного времени было потрачено на обслуживание софтверного прерывания |
|
||||
| st (stolen by the hypervisor) | Показывает сколько процессорного времени было «украдено» гипервизором |
|
||||
|
||||
KiB Mem - количество оперативной памяти в кибибайтах (кратно 1024):
|
||||
*7106404 total* -- всего доступно оперативной памяти в системе,
|
||||
*306972 free* -- свободно оперативной памяти для использования,
|
||||
*3127144 used* -- использовано оперативной памяти,
|
||||
*3672288 buff/cache* -- буферизовано/закешировано оперативной памяти.
|
||||
|
||||
*KiB Swap* - количество swap-памяти в кибибайтах (кратно 1024), которые выделено на диске:
|
||||
*8191996 total* - всего выделено swap-памяти,
|
||||
*8191996 free* - свободно swap-памяти
|
||||
*0 used* - использовано swap-памяти,
|
||||
*3270520 avail Mem* - доступно для использования swap-памяти.
|
||||
|
||||
</details>
|
||||
|
||||
5. Как в утилите top в Linux посмотреть нагрузку на каждое ядро процессора?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
В утилите top нажать `1`, чтобы отобразить все ядра в системе.
|
||||
|
||||
</details>
|
||||
|
||||
6. Как в утилите top в Linux посмотреть какой командой был запущен процесс?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
В утилите top нажать `c`, чтобы отобразить команды, которыми были запущены процессы.
|
||||
|
||||
</details>
|
||||
|
||||
6. Как происходит HTTPS соединение?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Когда вы вводите адрес сайта в браузере, он спрашивает у сервера, установлен ли для сайта сертификат. В ответ сервер отправляет общую информацию об SSL-сертификате и публичный ключ, то есть сам сертификат. Браузер сверяет информацию со списком авторизованных центров сертификации. Если всё в порядке, браузер генерирует сеансовый ключ, зашифровывает его публичным ключом и отправляет на сервер. Сервер расшифровывает сообщение и сохраняет сеансовый ключ. После этого между браузером и сайтом устанавливается безопасное соединение через протокол HTTPS.
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
7. Чем отличается TCP от UDP? Что лучше?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
TCP – транспортный протокол передачи данных в сетях TCP/IP, предназначен для управления передачей данных интернета. Пакеты в TCP называются сегментами.
|
||||
Ориентирован на соединение, используется для передачи данных (электронная почта, файлы, сообщения). При определении потери пакетов будет выполнен перезапрос потерянных пакетов.
|
||||
|
||||
UDP – транспортный протокол, передающий сообщения-датаграммы без необходимости установки соединения в IP-сети. Не ориентирован на установление соединения, используется в потоковой передаче данных (IPTV, VoIP). При потере пакетов перезапроса потерянных пакетов не происходит.
|
||||
|
||||
Нельзя сказать, что TCP лучше UDP, т.к. данные транспортные протоколы используются для различных типов передачи трафика.
|
||||
|
||||
</details>
|
||||
|
||||
8. Как происходит соединение TCP?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||

|
||||
|
||||
1. Клиент, который намеревается установить соединение, посылает серверу сегмент с номером последовательности и флагом SYN.
|
||||
Дальнейший алгоритм:
|
||||
Сервер получает сегмент, запоминает номер последовательности и пытается создать сокет (буферы и управляющие структуры памяти) для обслуживания нового клиента;
|
||||
В случае успеха сервер посылает клиенту сегмент с номером последовательности и флагами SYN и ACK, и переходит в состояние SYN-RECEIVED;
|
||||
В случае неудачи сервер посылает клиенту сегмент с флагом RST.
|
||||
2. Если клиент получает сегмент с флагом SYN, то он запоминает номер последовательности и посылает сегмент с флагом ACK.
|
||||
Дальнейший алгоритм:
|
||||
Если он одновременно получает и флаг ACK (что обычно и происходит), то он переходит в состояние ESTABLISHED;
|
||||
Если клиент получает сегмент с флагом RST, то он прекращает попытки соединиться;
|
||||
Если клиент не получает ответа в течение 10 секунд, то он повторяет процесс соединения заново.
|
||||
|
||||
3. Если сервер в состоянии SYN-RECEIVED получает сегмент с флагом ACK, то он переходит в состояние ESTABLISHED.
|
||||
В противном случае после тайм-аута он закрывает сокет и переходит в состояние CLOSED.
|
||||
Процесс называется «трёхэтапным рукопожатием» (англ. three way handshake), так как несмотря на то что возможен процесс установления соединения с использованием четырёх сегментов (SYN в сторону сервера, ACK в сторону клиента, SYN в сторону клиента, ACK в сторону сервера), на практике для экономии времени используется три сегмента.
|
||||
|
||||
</details>
|
||||
|
||||
9. Какие стандартные коды ответов есть у веб-серверов?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
- 1XX — информационные коды. Они отвечают за процесс передачи данных. Это временные коды, они информируют о том, что запрос принят и обработка будет продолжаться.
|
||||
- 2XX — успешная обработка. Запрос был получен и успешно обработан сервером.
|
||||
- 3XX — перенаправление (редирект). Эти ответы сервера гласят, что нужно предпринять дальнейшие действия для выполнения запроса. Например, сделать запрос по другому адресу.
|
||||
- 4XX — ошибка пользователя. Это значит, что запрос не может быть выполнен по его вине.
|
||||
- 5XX — ошибка сервера. Эти коды возникают из-за ошибок на стороне сервера. В данном случае пользователь всё сделал правильно, но сервер не может выполнить запрос. Для кодов этого класса сервер обязательно показывает сообщение, что не может обработать запрос и по какой причине.
|
||||
|
||||
</details>
|
||||
|
||||
10. Какие существуют основные типы запросов HTTP?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Два наиболее часто используемых видов HTTP запросов это: GET и POST.
|
||||
|
||||
GET - запрашивает данные с определенного ресурса (сайта).
|
||||
POST - отправляет данные на сервер для последующей их обработки.
|
||||
|
||||
Особенности GET запроса:
|
||||
- Может быть закэширован
|
||||
- Остается в истории браузера
|
||||
- Может быть закладкой в браузере
|
||||
- Не должен использоваться при работе с крайне важными данными
|
||||
- Имеет ограниченную длину
|
||||
- Должен применяться только для получения данных
|
||||
|
||||
Особенности POST запроса:
|
||||
- Не кэшируется
|
||||
- Не может быть закладкой в браузере
|
||||
- Не остаётся в истории браузера
|
||||
- Нет ограничений по длине запроса
|
||||
|
||||
| Заголовок | Описание |
|
||||
|-----------|---------------------------------------------------------------------------------------------|
|
||||
| HEAD | Тоже самое что GET, однако возвращает только HTTP заголовки и не возвращает тело документа. |
|
||||
| DELETE | Удаляет определенный ресурс. |
|
||||
| PUT | Загружает представление определенного URI. |
|
||||
| OPTIONS | Возвращает список видов запросов, поддерживаемых веб-сервером. |
|
||||
| CONNECT | Создает прозрачный TCP/IP туннель для передачи запросов. |
|
||||
|
||||
</details>
|
||||
|
||||
11. Где хранятся имена файлов/директорий?
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
- Inodes не содержат имён файлов, только другие метаданные файла.
|
||||
- Каталоги Unix представляют собой списки ассоциативных структур, каждая из которых содержит одно имя файла и один номер индекса.
|
||||
- Драйвер файловой системы должен найти каталог, ищущий определенное имя файла, а затем преобразовать имя файла в правильный соответствующий номер индекса.
|
||||
|
||||
Таким образом имя файла/директории хранится в информационной структуре каталов.
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
12. Как удалить файл с именем `-rf`?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
```
|
||||
rm ./-rf
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
13. Как посмотреть описание дискриптора? Как посмотреть время последней модификации файла?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Посмотреть полную информацию по дискриптору возможно командой `stat <path_to_file>`.
|
||||
Время модификации:
|
||||
```
|
||||
stat --format=%y dira
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
14. Для чего нужна переменная окружения PATH?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Переменная окружения PATH содержит абсолютные пути директорий, в которых производится поиск исполняемых файлов при вводе команд
|
||||
|
||||
</details>
|
||||
|
||||
15. Как посмотреть нагрузку на диски?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Установить утилиту `sysstat`, проверить нагрузку на диски `iostat -xtc`.
|
||||
|
||||
</details>
|
||||
|
||||
16. Клиент пишет, что заходит на свой сайт и он к нему подключается через раз. Что делать, что спрашивать от клиента?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Необходимо спросить у клиента какую ошибку он наблюдает при неудачном запросе сайта, в какое время. Если проблема периодическая, то возможно проблема на стороне провайдера клиента. Необходимо запросить у клиента анализ сети с помощью утилит `traceroute`, `mtr` с того узла, где он наблюдает проблему и до сайта
|
||||
|
||||
</details>
|
||||
|
||||
17. Что такое 127.0.0.1 адрес? Для чего нужен?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
127.0.0.1 адрес или localhost доменное имя, а также зарезервированная сеть 127.0.0.1/8 частных IP адресов предназначены для тестирования программы на той же физической машине, где она запускается.
|
||||
|
||||
Использование адреса 127.0.0.1 позволяет устанавливать соединение и передавать информацию для программ-серверов, работающих на том же компьютере, что и программа-клиент, независимо от конфигурации аппаратных сетевых средств компьютера (не требуется сетевая карта, модем, и прочее коммуникационное оборудование, интерфейс реализуется при помощи драйвера псевдоустройства в ядре операционной системы)
|
||||
|
||||
Так же адрес 127.0.0.1 устанавливается для запрета доступа к сервису из внешней сети. Например:
|
||||
```
|
||||
docker run -d -p 127.0.0.1:3306:3306 mysql
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
18. Что такое файл в понятиях Unix-like операцинных системах?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Файлы - это объекты, в которые мы записываем информацию и наши данные, исполняемые файлы, но кроме этих привычных нам понятий здесь есть файлы специального назначения - файлы устройств, файлы туннелей, сокетов и многое другое.
|
||||
|
||||
Типы файлов в Linux:
|
||||
- Обычные файлы, для хранения информации;
|
||||
- Специальные файлы - для устройств и туннелей;
|
||||
- Директории.
|
||||
|
||||
</details>
|
||||
|
||||
19. Что такое RAID? Какие массивы бывают?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
RAID (Redundant Array of Independent Disks) - избыточный массив независимых дисков, технология виртуализации данных для объединения нескольких физических дисковых устройств в логический модуль для повышения отказоустойчивости и производительности.
|
||||
|
||||
В зависимости от количества дисков и класса отказоустойчивости существуют следующие основные типы RAID:
|
||||
RAID 0:
|
||||
RAID 1:
|
||||
RAID 5:
|
||||
RAID 6:
|
||||
RAID 10:
|
||||
|
||||
</details>
|
||||
|
||||
20. При каком количестве одновременно вышедших из строя дисков обеспечивает работоспособность RAID 6?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
2 диска.
|
||||
|
||||
</details>
|
||||
|
||||
21. В чем разница между объявлением переменной `export VAR="VALUE"` и `VAR="VALUE"` в bash?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
При объявлении переменной через export - переменная будет доступна в любых других процессах, при обычном объявлении переменной - переменная будет доступна только в запущенном процессе.
|
||||
|
||||
</details>
|
||||
|
||||
22. Как остановить выполнение скрипта в bash при возникновении ошибки в команде?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Команда `set -e` завершит скрипт с ошибкой, в случае, если в нижеследующем bash коде будет обнаружена ошибка. По-умолчанию bash скрипт продолжает работу, если в ходе выполнения возникла ошибка.
|
||||
|
||||
</details>
|
||||
|
||||
23. Что в bash скрипте означает команда `set -euo pipefail`?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Команда `set` устанавливает аттрибуты оболочки с опеределенных опций.
|
||||
Опция `-e` - означает, что скрипт будет остановлен, когда произойдет ошибка в ходе его выполнения.
|
||||
Опция `-u` - означает, что скрипт будет остановлен, если в ходе скрипта, будет обнаружена переменная, которая не определена.
|
||||
Опция `-o pipefail` - означает, что скрипт будет остановлен, если в ходе пайплайна команд будет выявлена ошибка.
|
||||
|
||||
</details>
|
||||
|
||||
24. Как активировать debug режим в bash?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Команда `set -x` в начале скрипта активирует вывод в консоль debug информации.
|
||||
|
||||
</details>
|
||||
|
||||
25. Что значит `$@` в bash?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
`$@` - все параметры переданные скрипту.
|
||||
|
||||
</details>
|
||||
|
||||
26. Какой код сигнала будет выполнен при исполнении команды `kill <PID>`?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Сигнал SIGTERM (код 15) - это сигнал по-умолчанию отправляемый при вызове команды kill. Это указывает процессу на завершение работы и обычно считается сигналом для использования при чистом завершении работы.
|
||||
|
||||
</details>
|
||||
|
||||
27. Как выполнить фильтрацию вывода команды, чтобы на экран были выведены только ошибки (STDERR), игнорируя STDOUT?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
```
|
||||
cmd 2>&1 >/dev/null | grep pattern
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
28. Какую команду необходимо выполнить, чтобы посмотреть какие пользователи вошли в систему в систему?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Команда `w` покажет список пользователей, которые вошли на сервер.
|
||||
|
||||
</details>
|
||||
|
||||
29. Какой файл необходимо отредактировать, чтобы отключить ssh аутентификацию по паролю?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Необходимо редактировать файл `/etc/ssh/sshd_config`, отвечающий за конфигурацию сервиса ssh.
|
||||
|
||||
</details>
|
||||
|
||||
30. В каком файле находится информация о смонтированных каталогах в файловую систсему?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Файл `/etc/fstab` содержит информацию о смонтированных каталогах в файловую систему.
|
||||
|
||||
</details>
|
||||
|
||||
31. Что выведет команда `cat a` и почему?
|
||||
```
|
||||
mkdir /tmp/abc
|
||||
cd /tmp/abc
|
||||
ls >a 2>b
|
||||
cat a
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
`cat a` выведет
|
||||
```
|
||||
a
|
||||
b
|
||||
```
|
||||
Обработка команды идёт справа налево. Сначала создается файл *b*, потом создается файл *a*, команда `ls` отображает список файлов в текущей директории (файлы *a* и *b* уже созданы) в одну колонну и перенаправляет стандартный поток вывода (`>`) в файл *a*, а стандартный поток ошибок `2` в файл *b*.
|
||||
|
||||
</details>
|
||||
|
||||
32. Какой транспортный протокол использует DNS? В каком случае DNS работает по UDP, а в каком по TCP?
|
||||
|
||||
<details>
|
||||
<summary>Ответ</summary>
|
||||
|
||||
Все реализации DNS серверов должны поддерживать использование обоих протоколов транспортного уровня (TCP и UDP). Большинство DNS-запросов будет обрабатываться с использованием протокола UDP, исключение составляют трансфер зоны (Query type AXFR) и ответы сервера, превышающие 512 байт на одно сообщение. На вопрос "зачем?" ответ простой -- чтобы не использовались для DDoS.
|
||||
|
||||
</details>
|
||||
Reference in New Issue
Block a user