495 lines
30 KiB
Markdown
495 lines
30 KiB
Markdown
## 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>
|
|
|
|
33. В bash-скрипте указан аттрибут оболочки `set -x`. В одной из команд происходит ошибка и скрипт завершает свою работу. Как сделать, чтобы при возникновении ошибки в определенной команде скрипт продолжил свою работу?
|
|
|
|
<details>
|
|
<summary>Ответ</summary>
|
|
|
|
1 вариант: указать `|| true` после выполнения команды с ошибкой.
|
|
```sh
|
|
<command with error> || true
|
|
```
|
|
|
|
2 вариант: до выполнения данной команды указать `set +e` для игнорирования ошибок, начиная со следующей строки и после выполнения команды указать `set -e` для завершения работы скрипта в случае ошибки, начиная со следующей строки.
|
|
```sh
|
|
set -e
|
|
<command 1>
|
|
<command 2>
|
|
set +e
|
|
<command 3 wih error>
|
|
set -e
|
|
```
|
|
|
|
</details>
|
|
|
|
34. Сколько адресов в следующих подсетях?
|
|
```
|
|
192.168.5.0/24
|
|
192.168.5.0/23
|
|
192.168.5.0/19
|
|
```
|
|
|
|
<details>
|
|
<summary>Ответ</summary>
|
|
|
|
192.168.5.0/24 - 254 хостов (+1 адрес сети, +1 broadcast)
|
|
192.168.5.0/23 - 510 хостов (+1 адрес сети, +1 broadcast)
|
|
192.168.5.0/19 - 8190 хостов (+1 адрес сети, +1 broadcast)
|
|
|
|
</details>
|
|
|
|
35. Что такое протокол IP?
|
|
|
|
<details>
|
|
<summary>Ответ</summary>
|
|
|
|
IP (Internet Protocol) - протокол сетевого уровня стека TCP/IP.
|
|
|
|
Основной задачей протокола является доставка датаграмм между хостами сетей TCP/IP через произвольное число промежуточных узлов (маршрутизаторов).
|
|
|
|
Функции, реализуемые IP:
|
|
- Основа передачи данных.
|
|
- Адресация.
|
|
- Маршрутизация.
|
|
- Фрагментация датаграмм.
|
|
Протокол IP не гарантирует надежной доставки пакета: пакеты могут прийти в неправильном порядке, пакет может быть утерян, пакет может продублироваться или оказаться поврежденным. За надежность доставки пакетов отвечают протоколы транспортного уровня.
|
|
|
|
На данный момент наиболее распространена четвертая версия протокола (IPv4), однако ведутся активные работы по внедрению более совершенного IPv6.
|
|
|
|
</details>
|
|
|