Update interview.md

Additions, corrections of answers and typos
This commit is contained in:
Swfuse 2024-02-19 13:06:15 +03:00 committed by GitHub
parent 46b99fac31
commit 653fd50e6a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -235,6 +235,7 @@
- Ответ - Ответ
Через IPMI или kvm если оно есть на сервере. Через IPMI или kvm если оно есть на сервере.
Ну или звонить дежурному инженера ЦОДА, если иных опций нет.
--- ---
@ -245,9 +246,9 @@
KVM (или kvm over ip) — устройство, позволяющее передавать видеосигнал и ввод с мыши/клавиатуры по сети с использованием IP-протокола от вашего сервера. При помощи KVM вы можете перезагрузить сервер, получить доступ в BIOS сервера и к другим функциям, которые невозможно выполнить на сервере через терминал. То есть он обособлен от операционной системы. KVM (или kvm over ip) — устройство, позволяющее передавать видеосигнал и ввод с мыши/клавиатуры по сети с использованием IP-протокола от вашего сервера. При помощи KVM вы можете перезагрузить сервер, получить доступ в BIOS сервера и к другим функциям, которые невозможно выполнить на сервере через терминал. То есть он обособлен от операционной системы.
Часто используется как последнее средство. Сервер не грузится, или есть ещё какой-то программный сбой. Часто используется как последнее средств. Когда сервер не грузится, или есть ещё какой-то программный или системный сбой.
KVM - клавиатура, монитор(видео), мышь. KVM - это аббревиатура, состоящая из слов. Клавиатура, монитор(видео), мышь.
--- ---
@ -321,7 +322,7 @@
### Модели процессора, количестве физических и логических ядер, поддерживаемых инструкциях, режиме работы? ### Модели процессора, количестве физических и логических ядер, поддерживаемых инструкциях, режиме работы?
- Ответ - Ответ
- Модель процессора `proc/cpuinfo` - Модель процессора `cat /proc/cpuinfo`
``` ```
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
@ -364,6 +365,7 @@
- **performance** — режим максимальной мощности, выставляет максимально возможную частоту - **performance** — режим максимальной мощности, выставляет максимально возможную частоту
- Физические ядра - это число физических ядер, реальных аппаратных компонентов. - Физические ядра - это число физических ядер, реальных аппаратных компонентов.
Логические ядра - это число физических ядер, умноженное на количество потоков, которые могут выполняться на каждом ядре с помощью гиперпотока. Логические ядра - это число физических ядер, умноженное на количество потоков, которые могут выполняться на каждом ядре с помощью гиперпотока.
например, мой 4-ядерный процессор запускает два потока на ядро, поэтому у меня есть 8 логических процессоров. например, мой 4-ядерный процессор запускает два потока на ядро, поэтому у меня есть 8 логических процессоров.
@ -373,7 +375,6 @@
dmidecode -t processor | grep "Core Enabled:" dmidecode -t processor | grep "Core Enabled:"
Core Enabled: 6 Core Enabled: 6
Core Enabled: 6 Core Enabled: 6
``` ```
Видим, что на данной системе находится 12 физических ядер (6+6). Соответственно, нормальный показатель LA должен быть менее 12. Однако, на процессорах Intel используется технология [Hyper-Threading](http://www.intel.ru/content/www/ru/ru/architecture-and-technology/hyper-threading/hyper-threading-technology.html), которая делит одно физическое ядро на два логических. Видим, что на данной системе находится 12 физических ядер (6+6). Соответственно, нормальный показатель LA должен быть менее 12. Однако, на процессорах Intel используется технология [Hyper-Threading](http://www.intel.ru/content/www/ru/ru/architecture-and-technology/hyper-threading/hyper-threading-technology.html), которая делит одно физическое ядро на два логических.
@ -561,7 +562,7 @@
### Типе используемого сетевого адаптера и состоянии его интерфейсов? ### Типе используемого сетевого адаптера и состоянии его интерфейсов?
- Ответ дополнить - Ответ
```bash ```bash
sorsstorage13 : ~ [0] # lspci | grep net sorsstorage13 : ~ [0] # lspci | grep net
@ -661,17 +662,18 @@
1. При включении компьютера цп переходит на адрес биоса и загружает биос. 1. При включении компьютера цп переходит на адрес биоса и загружает биос.
2. Биос, или uefi проходит кучу проверок и согласно своим проверкам носитель информации. 2. Биос, или uefi проходит кучу проверок и согласно своим проверкам носитель информации.
3. На носителе находится MBR или GPT где находится загрузчик. Дальше по обстоятельствам. Загрузчик может загружать ось, а может передать дальше. Например, если у нас несколько систем на нескольких разделах. 3. На носителе находится MBR или GPT где находится загрузчик. Дальше по обстоятельствам. Загрузчик может загружать ось, а может передать управление дальше дальше.
Например, если у нас есть несколько систем на нескольких разделах.
Под первой частью загрузки подразумевается небольшая часть машинного кода, которая запускает второй загрузчик. Потому что выделяется 446 байт. Там ничего не поместится. Под первой частью загрузки подразумевается небольшая часть машинного кода, которая запускает второй загрузчик. Потому что выделяется 446 байт. Там ничего не поместится.
4. Итого загрузчик первого этапа загружает загрузчик второго и кладет данные в оперативку. Загрузчик, зная где лежит загрузчик ос, грузит его, и грузит initial ram disk - там лежат модули ядра. Они также являются драйверами, которые необходимы для загрузки всей остальной системы. 4. Итого загрузчик первого этапа загружает загрузчик второго и кладет данные в оперативку.
Загрузчик, зная где лежит загрузчик ос, грузит его, и грузит initial ram disk - там лежат модули ядра. Они также являются драйверами, которые необходимы для загрузки всей остальной системы.
1. Затем ядро берет всё на себя. Инициализация устройств, конфигурирование процессора, памяти 1. Затем ядро берет всё на себя. Инициализация устройств, конфигурирование процессора, памяти
2. Далее запускается пользовательская среда, процесс init 2. Далее запускается пользовательская среда, процесс init
Начало начал инициализация работы компьютера. **Начало начал инициализация работы компьютера**
Перед включением нужно послать какой-то сигнал, чтобы начать вообще инициализацию загрузки пк. Перед включением нужно послать какой-то сигнал, чтобы начать вообще инициализацию загрузки пк.
Есть интеллектуальный способ, есть дедовской. Есть интеллектуальный способ, есть дедовской.
@ -686,8 +688,8 @@
Для запуска процессору отправится сигнал Reset Для запуска процессору отправится сигнал Reset
Полная подробная по загрузке пк вы можете увидеть по ссылке: Полная подробная по загрузке пк вы можете увидеть по ссылке:
[https://vc.ru/dev/137548-pusk-v-detalyah-kak-zagruzhaetsya-server](https://vc.ru/dev/137548-pusk-v-detalyah-kak-zagruzhaetsya-server) [https://vc.ru/dev/137548-pusk-v-detalyah-kak-zagruzhaetsya-server](https://vc.ru/dev/137548-pusk-v-detalyah-kak-zagruzhaetsya-server)
--- ---
@ -700,13 +702,14 @@
«Портативность», в контексте стандарта POSIX, относится к исходному коду (не к бинарникам, которые из этих самых исходников собираются). «Портативность», в контексте стандарта POSIX, относится к исходному коду (не к бинарникам, которые из этих самых исходников собираются).
«интерфейс» — это взаимодействие вашего кода с остальным кодом. «Интерфейс» — это взаимодействие вашего кода с остальным кодом.
Это такое описание общее как с нами будут работать программы. Можно взять программу из одной ос и без проблем запустить на другой. Это такое описание общее как с нами будут работать программы. Можно взять программу из одной ос и без проблем запустить на другой.
Семафоры. Разделение одного и того же ресурса. Семафоры. Разделение одного и того же ресурса.
Как управлять потоками, как держаться, и все такое. Как управлять потоками, как держаться, и все такое.
---
### Что такое уровни выполнения ### Что такое уровни выполнения
@ -714,11 +717,9 @@
В Linux существует такое понятие как уровень выполнения (run level). Уровень выполнения обозначается числами от 0 до 6. В Linux существует такое понятие как уровень выполнения (run level). Уровень выполнения обозначается числами от 0 до 6.
Система в определенный момент времени находится на соответствующем Система в определенный момент времени находится на соответствующем уровне выполнения.
уровне выполнения. Вы, как администратор системы, можете переводить её с Вы, как администратор системы, можете переводить её с одного уровня выполнения на другой. Это делается при помощи программы init (или telinit).
одного уровня выполнения на другой. Это делается при помощи программы Для этого программе в качестве аргумента передается число, соответствующее уровню выполнения.
init (или telinit). Для этого программе в качестве аргумента передается
число, соответствующее уровню выполнения.
- **0** — выполняются действия по выключению системы. - **0** — выполняются действия по выключению системы.
- **1** — однопользовательский режим (single user mode). - **1** — однопользовательский режим (single user mode).
@ -754,10 +755,11 @@
- Написать ответ - Написать ответ
**BIOS** - Basic Input-Output System. Это низкоуровневое по. **BIOS** - Basic Input-Output System. Это низкоуровневое по.
Располагается на чипе пк на материнке. Он загружается при запуске пк, и отвечает за пробуждение аппаратных компонентов пк, обеспечивает правильную их работу. И запускает загрузчик Располагается на чипе пк на материнке. Он загружается при запуске пк, и отвечает за пробуждение аппаратных компонентов пк, обеспечивает правильную их работу. И запускает загрузчик.
При включении биос проходит самотестирование POST(Power-On Self Test) при включении питания перед загрузкой ОС. Он проверяет правильность конфигурации оборудования и его правильную работу. Если что-то пойдет не так, он будет пищать или покажет код проваленного теста. При включении биос проходит самотестирование POST(Power-On Self Test) при включении питания перед загрузкой ОС. Он проверяет правильность конфигурации оборудования и его правильную работу.
Затем биос ищет загрузочную запись или MBR, и запускает загрузчик Если что-то пойдет не так, он будет пищать или покажет код проваленного теста.
Затем биос ищет загрузочную запись или MBR, и запускает загрузчик
Есть еще CMOS. Это дополнительный металл оксид-полупроводник. Это память с батарейкой, где биос хранит настройки на плате. Есть еще CMOS. Это дополнительный металл оксид-полупроводник. Это память с батарейкой, где биос хранит настройки на плате.
@ -771,7 +773,7 @@
UEFI замена биосу. UEFI замена биосу.
По факту это новый стандарт, который решает ограничения биоса По факту это новый стандарт, который решает следующие ограничения биоса:
- Может грузиться с дсисков емкостью 2.2 ТБ. Предел 9.4 зетабайта. Это больше чем все данные в интернете. Использует GPT. - Может грузиться с дсисков емкостью 2.2 ТБ. Предел 9.4 зетабайта. Это больше чем все данные в интернете. Использует GPT.
- UEFI работает в 32 битном или 64 битном режиме. Имеет более адресумое адресное пространство. Загружается быстрее. Поэтому в uefi есть поддержка мыши, графика. Хоть и необязательно. - UEFI работает в 32 битном или 64 битном режиме. Имеет более адресумое адресное пространство. Загружается быстрее. Поэтому в uefi есть поддержка мыши, графика. Хоть и необязательно.
@ -838,6 +840,7 @@
Здесь запускаются скрипты инициализации, отслеживает события, и реагирует на них. Более гибкий процесс инициализации. Если какая-то служба не запустилась, или вдруг упала, то апстарт это отследит и запустит повторно. Здесь запускаются скрипты инициализации, отслеживает события, и реагирует на них. Более гибкий процесс инициализации. Если какая-то служба не запустилась, или вдруг упала, то апстарт это отследит и запустит повторно.
---
### Что такое systemd и init ? В чем основное преимущество первого над вторым ? ### Что такое systemd и init ? В чем основное преимущество первого над вторым ?
@ -857,6 +860,7 @@
- Хорошая документированность (я не говорю, что легаси-набор плохо документирован, я лишь говорю, что systemd не уступает); - Хорошая документированность (я не говорю, что легаси-набор плохо документирован, я лишь говорю, что systemd не уступает);
- Он не только загрузчик, но и система инициализирующая демоны - Он не только загрузчик, но и система инициализирующая демоны
---
### Как понять используется ли в системе systemd? ### Как понять используется ли в системе systemd?
@ -876,23 +880,23 @@
``` ```
Можно сделать ещё через процесс 1, и через файловую систему `/proc`: Можно сделать ещё через процесс 1, и через файловую систему `/proc`:
``` ```
root@swfuse:~# stat /proc/1/exe root@swfuse:~# stat /proc/1/exe
File: /proc/1/exe -> /lib/systemd/systemd File: /proc/1/exe -> /lib/systemd/systemd
Size: 0 Blocks: 0 IO Block: 1024 symbolic link Size: 0 Blocks: 0 IO Block: 1024 symbolic link
Device: 4h/4d Inode: 444358 Links: 1 Device: 4h/4d Inode: 444358 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2022-06-20 00:00:01.579875809 +0000 Access: 2022-06-20 00:00:01.579875809 +0000
Modify: 2022-06-09 17:19:41.581240179 +0000 Modify: 2022-06-09 17:19:41.581240179 +0000
Change: 2022-06-09 17:19:41.581240179 +0000 Change: 2022-06-09 17:19:41.581240179 +0000
``` ```
--- ---
### Опишите, что происходит (с точки зрения процессов), при выполнении любой команды в консоли, например: ### Опишите, что происходит (с точки зрения процессов), при выполнении любой команды в консоли, например:
`$ ls -l` `$ ls -l`
- **Ответ** - **Ответ**
@ -970,9 +974,7 @@ Change: 2022-06-09 17:19:41.581240179 +0000
Посмотреть полную информацию по дескриптору возможно командой `stat <path_to_file>`. Посмотреть полную информацию по дескриптору возможно командой `stat <path_to_file>`.
Время модификации: Время модификации командой `stat --format=%y dira`
`stat --format=%y dira`
--- ---
@ -982,7 +984,8 @@ Change: 2022-06-09 17:19:41.581240179 +0000
- Ответ - Ответ
Sudo позволяет подменить пользователя и выполнить команду от его имени. Расшифровывается именно так - **s**ubstitute **u**ser and **do** Sudo позволяет подменить пользователя и выполнить команду от его имени.
Расшифровывается именно так - **s**ubstitute **u**ser and **do**
По умолчанию выполнение команды происходит от имени суперпользователя. По умолчанию выполнение команды происходит от имени суперпользователя.
@ -1367,6 +1370,9 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
*Файловый дескриптор* *Файловый дескриптор*
- неотрицательное целое число, которое используется в интерфейсе между пространством пользователя и пространством ядра (kernel) для идентификации ресурсов файла / сокета. Когда создаётся новый поток ввода-вывода, ядро возвращает процессу, создавшему поток ввода-вывода, его файловый дескриптор. - неотрицательное целое число, которое используется в интерфейсе между пространством пользователя и пространством ядра (kernel) для идентификации ресурсов файла / сокета. Когда создаётся новый поток ввода-вывода, ядро возвращает процессу, создавшему поток ввода-вывода, его файловый дескриптор.
Важно отметить, что файловые дескрипторы не ограничиваются только файлами.
Они также могут ссылаться на каталоги, сокеты, каналы (pipes), устройства ввода-вывода и даже некоторые специфические для процесса ресурсы, такие как файлы процесса и области памяти.
Операционная система автоматически создает три файловых дескриптора для каждого процесса: 0 (стандартный ввод), 1 (стандартный вывод) и 2 (стандартный вывод ошибок).
--- ---
@ -1390,10 +1396,10 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
Он нужен в критических ситуациях, когда повис процесс. Он нужен в критических ситуациях, когда повис процесс.
Проблема использования sigkill. Проблема использования sigkill:
SIGKILL убивает дочерние процессы.И в этом случае может появиться процесс зомби. Уничтоженный процесс не имеет возможности сообщить родителю о том, что у него был сигнал уничтожения. (kill9) SIGKILL убивает дочерние процессы.И в этом случае может появиться процесс зомби.
Уничтоженный процесс не имеет возможности сообщить родителю о том, что у него был сигнал уничтожения. (kill9)
На некоторые сигналы можно
--- ---
@ -1414,16 +1420,17 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
Часто говорят что это средняя загрузка процессора или нагрузка системы, или какие-то циферки. Часто говорят что это средняя загрузка процессора или нагрузка системы, или какие-то циферки.
Узнать значение la можно разными способами. Например, uptime, top. Узнать значение la можно разными способами. Например, uptime, top.
Принято, что маленькое значение это стабильное поведение системы. Большое значение - возможно проблема есть в системе, что-то идет не так, копятся процессы. Принято считать, что какое-то стабильное значение данного это стабильное поведение системы. Появление всплеска - возможно проблема есть в системе, что-то идет не так, копятся процессы.
Цифры обозначают нагрузку за определенный период времени. 1, 5 и 15 минут. Цифры обозначают нагрузку за определенный период времени. 1, 5 и 15 минут. (Это важно учесть, это все рассчитывается для предыдущего времени. И когда вы заходите на сервер спустя минуту - там может ничего не быть)
**Вообще - эта цифра показывает количество процессов в статусе d r** **Вообще - эта цифра показывает количество процессов в статусе d r (ожидание, запущено соответственно)**
А дальше уже всё будет зависеть от ситуации. А дальше уже всё будет зависеть от ситуации.
Допустим у нас сервер есть где постоянно диски насилуются. Там всегда LA будет высокая скорее всего. Просто потому что есть процессы в статусе d, которые копятся из-за того, что диск занят. Допустим у нас сервер есть где постоянно на диски пишутся резервные копии. Там LA будет высокая скорее всего. Просто потому что есть процессы в статусе d, которые копятся из-за того, что диск занят.
Но на работу системы в целом это не влияет. Но на работу системы в целом это может не влиять вообще.
Если процессов скопилось много там, где это не ожидается, ну там сервера с базой, с php-fpm, nginx и прочим таким, то смотрим через `top -cHi -d1` что там именно скопилось. Если процессов скопилось много там, где это не ожидается, ну там сервера с сайтами, базами данных, с php-fpm, nginx и прочим таким, то смотрим через `top -cHi -d1` что там именно скопилось.
И в таких вот случаях сервер может тупить, ибо будут копиться процессы в статусе r. Из-за чего работа сервера будет медленной. Даже по ssh иногда не зайти будет.
@ -1450,7 +1457,10 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
**Физическая память** (или ***«ОЗУ»***, ***«RAM»***, ***«оперативка»***) — это энергозависимая память, установленная в компьютере. Для её работы требуется непрерывный поток электричества. Перебои с электропитанием или внезапное выключение компьютера могут привести к стиранию хранящихся в ней данных. Кроме того, эта память является линейно адресуемой. Другими словами, значения адресов памяти увеличиваются линейным образом. **Физическая память** (или ***«ОЗУ»***, ***«RAM»***, ***«оперативка»***) — это энергозависимая память, установленная в компьютере. Для её работы требуется непрерывный поток электричества. Перебои с электропитанием или внезапное выключение компьютера могут привести к стиранию хранящихся в ней данных. Кроме того, эта память является линейно адресуемой. Другими словами, значения адресов памяти увеличиваются линейным образом.
Запуская и исполняя программы, процессор напрямую обращается к физической памяти. Обычно программы хранятся на жестком диске. Время доступа процессора к диску значительно превышает аналогичное время доступа к физической (оперативной) памяти. Чтобы процессор мог выполнять программы быстрее, они сначала помещаются в физическую (оперативную) память. После завершения своей работы, они возвращаются обратно на жесткий диск. Освобожденная таким образом память может быть выделена новой программе. При выполнении данные программы называются **процессами**. Запуская и исполняя программы, процессор напрямую обращается к физической памяти.
Обычно программы хранятся на жестком диске. Время доступа процессора к диску значительно превышает аналогичное время доступа к физической (оперативной) памяти.
Чтобы процессор мог выполнять программы быстрее, они сначала помещаются в физическую (оперативную) память. После завершения своей работы, они возвращаются обратно на жесткий диск.
Освобожденная таким образом память может быть выделена новой программе. При выполнении данные программы называются **процессами**.
--- ---
@ -1459,12 +1469,16 @@ KiB Swap: 0 total, 0 free, 0 used. 10090148 avail Mem
- Ответ - Ответ
Виртуальная память (или «логическая память») — это метод управления памятью, осуществляемый операционной системой, который позволяет программам задействовать значительно больше памяти, чем фактически установлено в компьютере. Например, если объем физической памяти компьютера составляет 4 ГБ, а виртуальной 16 ГБ, то программе может быть доступен объем виртуальной памяти вплоть до 16 ГБ. Виртуальная память (или «логическая память») — это метод управления памятью, осуществляемый операционной системой, который позволяет программам задействовать значительно больше памяти, чем фактически установлено в компьютере.
Например, если объем физической памяти компьютера составляет 4 ГБ, а виртуальной 16 ГБ, то программе может быть доступен объем виртуальной памяти вплоть до 16 ГБ.
Основное различие между физической и виртуальной памятью заключается в том, что физическая память относится к оперативной памяти компьютера, подключенной непосредственно к его материнской плате. Именно в ней находятся выполняемые в данный момент программы. А виртуальная память — это метод управления, расширяющий при помощи жесткого диска объем физической памяти, благодаря чему у пользователей появляется возможность запускать программы, требование к памяти которых превышает объем установленной в компьютере физической памяти. Основное различие между физической и виртуальной памятью заключается в том, что физическая память относится к оперативной памяти компьютера, подключенной непосредственно к его материнской плате.
Именно в ней находятся выполняемые в данный момент программы.
А виртуальная память — это метод управления, расширяющий при помощи жесткого диска объем физической памяти, благодаря чему у пользователей появляется возможность запускать программы, требование к памяти которых превышает объем установленной в компьютере физической памяти.
![memory-img](https://github.com/Swfuse/devops-interview/blob/main/imgs/Untitled%201.png) ![memory-img](https://github.com/Swfuse/devops-interview/blob/main/imgs/Untitled%201.png)
---
### Почему в htop может быть не до конца корректная сводка по потребляемой памяти ### Почему в htop может быть не до конца корректная сводка по потребляемой памяти
@ -1532,14 +1546,14 @@ https://github.com/pixelb/ps_mem
### a=5; true | { true && a=10; } чему будет равно a? ### a=5; true | { true && a=10; } чему будет равно a?
Ответ будет 5. - Ответ будет 5.
Потому что каждая команда конвейера исполняется в отдельной подоболочке (SubShell) Потому что каждая команда конвейера исполняется в отдельной подоболочке (SubShell)
``` ```
nparamonov@peka:~$ a=5; true | { true && a=10; echo $a; } nparamonov@peka:~$ a=5; true | { true && a=10; echo $a; }
10 10
nparamonov@peka:~$ echo $a nparamonov@peka:~$ echo $a
5 5
``` ```
--- ---
@ -1588,8 +1602,7 @@ nparamonov@peka:~$ echo $a
## Диски и файловая система ## Диски и файловая система
**Что такое блочные устройства? Какие элементарные операции **Что такое блочные устройства? Какие элементарные операции можно с ними производить?**
можно с ними производить?**
- Ответ - Ответ
@ -1606,9 +1619,9 @@ nparamonov@peka:~$ echo $a
- Для пользователя это незаметно. - Для пользователя это незаметно.
- Используется для монтирования файловых систем. - Используется для монтирования файловых систем.
Через `lsblk` можно посмотреть такие устройства. Через `lsblk` можно посмотреть такие устройства.
Данные передаются блоками. Как правило, кратный размер 256 байт Данные передаются блоками. Как правило, кратный размер 256 байт
Можно записывать считывать, разделы создавать. Можно записывать считывать, разделы создавать.
Блочные устройства не работают напрямую с системными вызовами. Блочные устройства не работают напрямую с системными вызовами.
И в случае блочных устройств их взаимосвязь обеспечивается системой управления файлами и подсистемой плочного устройства. И в случае блочных устройств их взаимосвязь обеспечивается системой управления файлами и подсистемой плочного устройства.
@ -1633,7 +1646,7 @@ nparamonov@peka:~$ echo $a
- Ответ - Ответ
Согласно выводу На примере вывода:
```bash ```bash
crw-rw-rw- 1 root root 1, 3 Feb 23 1999 null crw-rw-rw- 1 root root 1, 3 Feb 23 1999 null
@ -1683,8 +1696,28 @@ nparamonov@peka:~$ echo $a
### Как создать файловую систему на блочном устройстве? Какие параметры можно задать при создании? ### Как создать файловую систему на блочном устройстве? Какие параметры можно задать при создании?
- Ответ - Ответ
Создание файловой системы на блочном устройстве можно сделать с помощью команды `mkfs` (make file system).
Эта команда обычно используется вместе с типом файловой системы, который вы хотите создать, например, ext4, ext3, xfs и т.д.
Вот пример команды, которая создает файловую систему ext4 на блочном устройстве `/dev/sdb1`:
```bash
mkfs -t ext4 /dev/sdb1
```
При создании файловой системы можно задать различные параметры, в зависимости от типа файловой системы. Например, для файловой системы ext4 можно задать следующие параметры:
- `-L label` : задает метку для файловой системы.
- `-m reserved-blocks-percentage` : задает процент блоков, зарезервированных для суперпользователя.
- `-E extended-options` : задает расширенные параметры, такие как stride, stripe-width и т.д.
- `-b block-size` : задает размер блока в байтах (по умолчанию 4096).
- `-N number-of-inodes` : задает количество индексных дескрипторов (inode) в файловой системе.
Но для той или иной файловой системы команды и ключи могут быть другими. Так что смотрите какая фс.
---
### Что такое **inodes айноды** ### Что такое **inodes айноды**
@ -1737,7 +1770,7 @@ nparamonov@peka:~$ echo $a
--- ---
### Какая файловая система бывает динамическими айнодами? ### Какая файловая система бывает динамическими айнодами и что это такое, зачем нужно?
- Ответ - Ответ
@ -1846,23 +1879,27 @@ nparamonov@peka:~$ echo $a
--- ---
### Какую файловую систему выбрать ext4 или xfs? ### Какую файловую систему выбрать ext4 или xfs?
XFS поддерживает очень большие разделы и файлы. - Ответ
Также она хорошо работает при многопоточной нагрузке параллельной записи и чтения. XFS поддерживает очень большие разделы и файлы.
Не очень подходит для однопоточных нагрузок с большим количеством метаданных. Например если один поток создает и удаляет большое количество мелких файлов.xfs поддерживает динамические inod-ы. В xfs они динамические, и их можно добавить. Также она хорошо работает при многопоточной нагрузке параллельной записи и чтения.
Ограничение системного раздела - 500TB Не очень подходит для однопоточных нагрузок с большим количеством метаданных. Например если один поток создает и удаляет большое количество мелких файлов.xfs поддерживает динамические inod-ы. В xfs они динамические, и их можно добавить.
В xfs можно потерять все данные, если сбилось что-то в момент записи на диск. Ограничение системного раздела - 500TB
Да и развернуть бэкап может не получиться, xfs разный может быть на серверах. В xfs можно потерять все данные, если сбилось что-то в момент записи на диск.
Да и развернуть бэкап может не получиться, xfs разный может быть на серверах.
ext4 поддерживает разделы до 50TB. Позволяет уменьшить созданный раздел. ext4 поддерживает разделы до 50TB. Позволяет уменьшить созданный раздел.
Лучше себя проявляет на медленных дисках с точки зрения пропускной способности. Лучше себя проявляет на медленных дисках с точки зрения пропускной способности.
Итог: Итог:
Если много потоков последовательной записи или чтения с большим потреблением cpu в виде мелких файлов, и много метаданных то лучше ext4. Если много потоков последовательной записи или чтения с большим потреблением cpu в виде мелких файлов, и много метаданных то лучше ext4.
Если у нас параллельная нагрузка в несколько потоков с большими файлами - лучше xfs. Если у нас параллельная нагрузка в несколько потоков с большими файлами - лучше xfs.
https://access.redhat.com/articles/3129891 https://access.redhat.com/articles/3129891
По своему опыту скажу - что xfs дисковые аварии в облаках плохо переживает. Потом сложно будет диск привести в рабочее состояние. То и дело будут отвалы, и проверки будут показывать ошибки.
--- ---
@ -1893,7 +1930,7 @@ https://access.redhat.com/articles/3129891
--- ---
### Как узнать, какими процессами используется раздел? (lsof, fuser, grep within procfs) ### Как узнать, какими процессами используется раздел?
- Ответ - Ответ
@ -1910,12 +1947,12 @@ https://access.redhat.com/articles/3129891
При включении главный диск смонтирован в корень. Загрузочный в boot. При включении главный диск смонтирован в корень. Загрузочный в boot.
Дополнительные диски можно увидеть в `mnt/*` Дополнительные диски можно увидеть в `mnt/*`
Информация об этих монтированиях хранится в файле `/etc/fstab` Информация об этих монтированиях хранится в файле `/etc/fstab`
Система автоматом монтирует диски на основании тех данных, которые берет их этого файла. Система автоматом монтирует диски на основании тех данных, которые берет их этого файла.
То есть монтирование во время загрузки То есть монтирование происходит во время загрузки
`/etc/mtab` это файл, который содержит список уже смонтированных файловых систем. `/etc/mtab` это файл, который содержит список уже смонтированных файловых систем.
@ -1945,7 +1982,7 @@ https://access.redhat.com/articles/3129891
Симлинк - магкая ссылка. При ее создании создается новый объект на существующий файл файловой системы. Симлинк - магкая ссылка. При ее создании создается новый объект на существующий файл файловой системы.
Отличить можно по наличию буквы l Отличить можно по наличию буквы l в выводе команды ls например:
``` ```
ls -lih | grep sym ls -lih | grep sym
@ -1953,7 +1990,7 @@ https://access.redhat.com/articles/3129891
``` ```
- **Ключевые отличия** - **Ключевые отличия**
- `hardlink` не может указывать на файл в другой файловой системе (так как `inode` может принадлежать только одной ФС), а `symlink` может. - `hardlink` не может указывать на файл в другой файловой системе (так как `inode` может принадлежать только одной ФС), а `symlink` может.
- при редактировании файла-ссылки в случае с `hardlink`ом изменятся оба файла, так как это один и тот же объект, а в случае с `symlink`а можно изменять его имя, атрибуты, направить его на другой файл и при этом оригинальный файл не будет затронут (но учтите, что если вы откроете файл симлинка для редактирования то измените оригинальный файл, т.к. по сути вы откроете для редактирования именно его) - при редактировании файла-ссылки в случае с `hardlink`ом изменятся оба файла, так как это один и тот же объект, а в случае с `symlink`а можно изменять его имя, атрибуты, направить его на другой файл и при этом оригинальный файл не будет затронут (но учтите, что если вы откроете файл симлинка для редактирования то измените оригинальный файл, т.к. по сути вы откроете для редактирования именно его)
- жёсткая ссылка не может указывать на на каталог - жёсткая ссылка не может указывать на на каталог
- При удалении `hardlink` - При удалении `hardlink`
@ -2158,7 +2195,7 @@ https://access.redhat.com/articles/3129891
Сначала смотрим свободное место Сначала смотрим свободное место
df df
Потом иноды Потом иноды, поскольку айноды тоже имеют свойство заканчиваться
df -i df -i
``` ```
@ -2190,8 +2227,8 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Бывает так, что превышается квота. Бывает так, что превышается квота
Для каждого юзера и пользователя она своя может быть Для каждого юзера и пользователя она своя может быть, жестко заданная
```bash ```bash
#посмотреть квоту юзера #посмотреть квоту юзера
@ -2218,7 +2255,8 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
502 bad gateway, ошибка на стороне вышестоящего сервера 502 bad gateway, ошибка на стороне вышестоящего сервера. То есть nginx сообщает о том, что получил ответ от другого сервера, к которому он обращался - некорректный или непонятный.
И тут уже надо копать что там в логах у вышестоящего сервера не так.
Если брать nginx+apache Если брать nginx+apache
@ -2244,7 +2282,8 @@ https://access.redhat.com/articles/3129891
} }
``` ```
Обращаем внимание на proxy_pass. Это то, куда у нас пошел запрос. Обращаем внимание на proxy_pass. Это то, куда у нас пошел запрос.
А дальше действуем по ситуации. Перезапускаем сервис, смотрим логи этого приложения. А дальше действуем по ситуации. Перезапускаем сервис, смотрим логи этого приложения, или, как в данном случае можно еще посмотреть логи сервера apache.
Впрочем, это касается всех ошибок 5xx.
--- ---
@ -2252,10 +2291,11 @@ https://access.redhat.com/articles/3129891
### В директории находится файл с нечитаемым содержимым. Каким образом можно узнать формат хранения данных и предназначение файла? ### В директории находится файл с нечитаемым содержимым. Каким образом можно узнать формат хранения данных и предназначение файла?
- Ответ - Ответ
Поможет команда `file`. Она в большинстве случаев показывает что это за файл по своей сути.
```bash ```bash
$ file stat-master.zip $ file stat-master.zip
stat-master.zip: Zip archive data, at least v1.0 to extract stat-master.zip: Zip archive data, at least v1.0 to extract
$ file unins000.exe $ file unins000.exe
unins000.exe: PE32 executable (GUI) Intel 80386, for MS Windows unins000.exe: PE32 executable (GUI) Intel 80386, for MS Windows
@ -2274,8 +2314,8 @@ https://access.redhat.com/articles/3129891
- Файл не существует. - Файл не существует.
- Файл существует, но это символическая ссылка - Файл существует, но это символическая ссылка
- Файл существует, но это 32 битный файл. И нужны библиотеки для его запуска - Файл существует, но это 32 битный файл. И нужны библиотеки для его запуска.
- Иногда из-за символов каких-нибудь, в питоне такое происходит, поудалять символы лишние нужно - Иногда из-за символов каких-нибудь, в питоне такое происходит, поудалять символы лишние нужно, в самом файле.
- Нету интерпретатора в системе - Нету интерпретатора в системе
--- ---
@ -2284,7 +2324,8 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
line-buffered опция которая выведет результат как только найдет Поможет утилита strace
line-buffered в данном случае это опция, которая выведет результат как только найдет
strace -f - отслеживание дочерныих процессов strace -f - отслеживание дочерныих процессов
@ -2292,7 +2333,7 @@ https://access.redhat.com/articles/3129891
strace -f lftp sitename |& grep --line-buffered open | grep /home/akkana strace -f lftp sitename |& grep --line-buffered open | grep /home/akkana
``` ```
Либо в самой программе, если удастся найти параметры Либо в самой программе, если удастся найти параметры вывода проблемы. Как правило это -vvv, verbose
```bash ```bash
/usr/sbin/mysqld --verbose --help | grep -A 1 "Default options" /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
@ -2371,13 +2412,36 @@ https://access.redhat.com/articles/3129891
- Free свободная память в системе. - Free свободная память в системе.
- Shared память, используемая (преимущественно) в tmpfs - Shared память, используемая (преимущественно) в tmpfs
- Buffer, и Cache идентифицируют память, используемую для нужд ядра / операционной системы. Буфер и кеш складываются вместе, а сумма указывается в разделе «buff/cache». - Buffer, и Cache идентифицируют память, используемую для нужд ядра / операционной системы. Буфер и кеш складываются вместе, а сумма указывается в разделе «buff/cache».
- Available примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки. В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент. - Available примерное количество оперативной памяти, доступное для запуска новых приложений без использования ими раздела подкачки.
В отличие от поля free, это поле принимает в расчёт страницу cache и также то, что не вся рекуперируемая (пригодная для повторного использования) память будет возвращена для рекуперации из-за того, что элементы используются в данный момент. (То есть то, что можно потенциально освободить. Кэш, буфер и тп)
Вот и получается, что доступная память (available) как правило больше или равна свободной памяти (free)
--- ---
### Что такое разделяемая память? ### Что такое разделяемая память?
Привести примеры** Привести примеры**
- Ответ
Разделяемая память - это область памяти, которую могут использовать несколько процессов одновременно. Это один из способов межпроцессного взаимодействия, позволяющий различным процессам обмениваться данными без необходимости использования более сложных механизмов, таких как сокеты или каналы.
Например, клиент и сервер.
Клиент это терминал ввода. Сервер принимает данные.
Клиент вводит строку терминала. Строка передеается серверу через сегмент памяти. После чего информация выводится.
Более глобальные примеры:
Базы данных. Общая память используется в бд, где ряд процессов обращаются к общим структурам данных, и манипулируют ими.
Веб сервера. Например, апач. Апач использует общую память для рабочих процесов. Что позволяет разным процессам обслуживать разные запросы.
Операционные системы. Например, linux использует общую память для IPC, кэширования файловой системы и других задач.
Подробнее про такую память можно почитать тут:
https://dev.to/0xog_pg/using-shared-memory-in-linux-1p62
--- ---
### Сервер под нагрузкой тормозит - тяжелые запросы к кассандре и ELK отрабатывают сильно медленнее чем раньше и чем другие аналогичные сервера. ### Сервер под нагрузкой тормозит - тяжелые запросы к кассандре и ELK отрабатывают сильно медленнее чем раньше и чем другие аналогичные сервера.
@ -2386,14 +2450,14 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
- Сначала делаем команду top, обратить внимание на sys time и 35% CPU, которое отъедало systemd. Соответственно, что-то там усиленно ядро творило в своем sys time - Сначала делаем команду top, обратить внимание на sys time и 35% CPU, которое отъедало systemd. Соответственно, что-то там усиленно ядро творило в своем sys time
- Чтобы увидеть что именно делает systemd можно запустить `strace -c -p 1`, это даст таблицу сисколов, среди которых `waitid` отъедал много ресурсов.(78% CPU времени кушало). Данный системный вызов используется во время ожидания изменения состояния процесса. - Чтобы увидеть что именно делает systemd можно запустить `strace -c -p 1`, это даст таблицу сисколов, среди которых `waitid` отъедал много ресурсов.(78% CPU времени кушало). Данный системный вызов используется во время ожидания изменения состояния процесса.
Отсюда предположение - systemd что-то порождает, оно падает, случается waitid и все это добро происходит быстро и в больших кол-вах Отсюда предположение - systemd что-то порождает, оно падает, случается waitid и все это добро происходит быстро и в больших кол-вах
- Далее смотрим что именно systemd может так усиленно плодить: `watch -n 1 ps --ppid 1`. Тут мы видим какие процессы активно форкаются. - Далее смотрим что именно systemd может так усиленно плодить: `watch -n 1 ps --ppid 1`. Тут мы видим какие процессы активно форкаются.
И в таблице вывода замелькали сомнительные `a.out` и `a.sh` И в таблице вывода замелькали сомнительные `a.out` и `a.sh`
- Поиск по имени (`find / -name "a.sh" 2`> /dev/null) привел к скрипту /var/games/a.sh - Поиск по имени (`find / -name "a.sh" 2`> /dev/null) привел к скрипту /var/games/a.sh
- Закомментировал содержимое для проверки гипотезы - нагрузку как ветром сдуло - Закомментировал содержимое для проверки гипотезы - нагрузку как ветром сдуло
- Поискать где может прятаться автозапуск этой "радости" - в кроне, в systemd timers, profile файлах. Либо спрятано с особой выдумкой, либо было запущено вами вручную с последующей чисткой history. - Поискать где может прятаться автозапуск этой "радости" - в кроне, в systemd timers, profile файлах. Либо спрятано с особой выдумкой, либо было запущено вами вручную с последующей чисткой history.
--- ---
@ -2492,15 +2556,31 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Неймспейсы, пространства имен Докер используется namespaces. Для создания изолированного рабочего пространства, которое называется контейнером.
При запуске контейнера докер создает набор неймспейсов для этого контейнера.
Эти неймспейсы обеспечивают уровень изоляции. Каждый аспект контейнера выполняется в отдельном контейнере и его доступ ограничен неймспейсом.
В частности в Docker Engine использует следующее:
- Пространство имен pid: Изоляция процессов (PID: идентификатор процесса).
- Пространство имен net: Управление сетевыми интерфейсами (NET: Networking).
- Пространство имен ipc: Управление доступом к ресурсам IPC (IPC: InterProcess Communication).
- Пространство имен mnt: Управление точками монтирования файловой системы (MNT: Mount).
- Пространство имен uts: Изолирование идентификаторов ядра и версий. (UTS: Unix Timesharing System).
--- ---
### Почему в контейнере можно увидеть только процессы, запущенные в самом контейнере? ### Почему в контейнере можно увидеть только процессы, запущенные в самом контейнере?
- Ответ - Ответ
Это связано с тем, что Docker использует пространство имен PID (Process ID) для обеспечения изоляции процессов в контейнерах.
Когда создается новый контейнер, Docker создает новое пространство имен PID для этого контейнера и запускает процесс в этом пространстве имен.
В этом изолированном пространстве имен PID относится только к процессам, запущенным в том же контейнере.
Это означает, что процесс в контейнере **может видеть только другие процессы в том же контейнере и не имеет возможности видеть процессы, запущенные в других контейнерах или на хост-системе**.
Это ключевой аспект изоляции и безопасности, обеспечиваемой контейнерами Docker.
--- ---
@ -2524,10 +2604,35 @@ https://access.redhat.com/articles/3129891
Можно. Можно.
- Контейнеры должны быть частью одной сети - Контейнеры должны быть частью одной сети
- Докер создает виртуальную сеть, default bridge и подключает к ней контейнеры - Докер создает виртуальную сеть, default bridge и подключает к ней контейнеры. Также использует драйвер overlay для многохостовых сетей
- В сети контейнерам назначается айпишник - В сети контейнерам назначается айпишник
- если контейнеры имеют выход в большую сеть, то ведут себя как программы на отдельных компах - если контейнеры имеют выход в большую сеть, то ведут себя как программы на отдельных компах
Пример с сетевым драйвером bridge:
1. Создаем сеть
```
docker network create my_network
```
2. Запускаем два контейнера в сети (sleep 1d это для бездействия контейнера в течение дня. Полезно при дебаге порой):
```
docker run -d --name container1 --network my_network alpine sleep 1d
docker run -d --name container2 --network my_network alpine sleep 1d
```
3. Пробуем попинговать по имени:
```
docker exec -it container1 ping container2
ubuntu@host:~$ docker exec -it container1 ping container2
PING container2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.110 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.083 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.111 ms
```
Это работает потому, что когда вы создаете контейнер в сети Docker, он получает собственный IP-адрес в этой сети и добавляет DNS-запись на DNS-сервер сети.
Это позволяет контейнерам в одной сети взаимодействовать друг с другом, используя свои имена.
Если вы хотите создать сеть на нескольких хостах Docker, используйте сетевой драйвер `overlay`.
Для этого потребуется Docker Swarm или стороннее хранилище ключевых значений, например Consul или etcd.
--- ---
@ -2535,8 +2640,42 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Точка входа в приложение Точка входа в приложение.
Это инструкция в докерфайле, которая всегда будет выполняться при запуске контейнера.
Она часто используется для определения основной команды для запуска контейнера.
Например для запуска веб сервера или какой-либо иной службы.
Что происходит пошагово:
Инструкция ENTRYPOINT в Dockerfile задает команду, которая всегда будет выполняться при запуске контейнера. Она часто используется для задания основной команды для запуска контейнера, например, для запуска веб-сервера, базы данных или службы.
Вот что происходит шаг за шагом:
1. В процессе сборки образа Docker читает Dockerfile строка за строкой, сверху вниз. Когда Docker встречает инструкцию ENTRYPOINT, он записывает команду и ее аргументы.
2. После сборки образа при запуске контейнера из этого образа Docker выполняет команду, указанную в инструкции ENTRYPOINT.
3. Если команда Docker run также включает в себя команду, то она передается в качестве аргумента команде ENTRYPOINT.
Например, если у вас есть Dockerfile со следующим ENTRYPOINT:
```
ENTRYPOINT ["/app/start.sh"]
```
И запускается контейнер из этого образа с помощью команды:
```
docker run -it my_image echo "Hello, World!"
```
Докер выполнит команду ENTRYPOINT с командой run в качестве аргумента:
```
/app/start.sh echo "Hello, World!"
```
Обратите внимание, что команду ENTRYPOINT можно отменить при запуске контейнера, используя флаг `--entrypoint` в команде `docker run`.
В этом основной смысл что можно переопределить аргумент, или вообще его отменить.
### В чем отличие CMD и ENTRYPOINT ### В чем отличие CMD и ENTRYPOINT
@ -2903,8 +3042,7 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Это иная реализация контейнеров. Которые работают в оси под открытой инициативой. И если у обычных <>, у ката qemu, kvm, опускается ниже Контейнер на стероидах. Больше для безопасности. Это иная реализация контейнеров. Которые работают в оси под открытой инициативой. И если у обычных <>, у ката qemu, kvm, опускается ниже. Контейнер на стероидах. Больше для безопасности придумано.
--- ---
@ -3002,8 +3140,9 @@ https://access.redhat.com/articles/3129891
- Ответ чтоб меньше доебывали - Ответ чтоб меньше доебывали
tcp перед передачей сигнала устанавливает связь между устройствами. tcp перед передачей сигнала устанавливает связь между устройствами. И он требует хендшейк.
udp сразу отправляет, возможна частичная потеря и несоблюдение порядка данных udp сразу отправляет, хендшейк не устанавливает. Возможна частичная потеря и несоблюдение порядка данных.
Но что делать, если доставка не гарантирована в таком случае? Просто отправляются по два пакета. Если один потерялся - дойдет второй.
--- ---
@ -3047,13 +3186,13 @@ https://access.redhat.com/articles/3129891
- Если корневой сервер не знает запрашиваемого домена, то он отправляет запрос серверу ответственному за зону (.ru), в которому привязан домен, - Если корневой сервер не знает запрашиваемого домена, то он отправляет запрос серверу ответственному за зону (.ru), в которому привязан домен,
- Если DNS сервер зоны не знает запрашиваемого домена, то запрос отправляется к NS серверу домена. IP адрес хоста, при его наличии у DNS сервера, возвращается обратно по цепочке - Если DNS сервер зоны не знает запрашиваемого домена, то запрос отправляется к NS серверу домена. IP адрес хоста, при его наличии у DNS сервера, возвращается обратно по цепочке
1. После того, как IP адрес хоста получили, необходимо сформировать на прикладном уровне запрос к серверу. К запросу добавляются следующие заголовки: 3. После того, как IP адрес хоста получили, необходимо сформировать на прикладном уровне запрос к серверу. К запросу добавляются следующие заголовки:
- Прикладной уровень: протокол запроса (HTTP/S, FTP и т.д), - Прикладной уровень: протокол запроса (HTTP/S, FTP и т.д),
- Транспортный (TCP/UDP): порт, по которому обращаемся к серверу. - Транспортный (TCP/UDP): порт, по которому обращаемся к серверу.
- Сетевой уровень: IP адрес пакета - Сетевой уровень: IP адрес пакета
- Канальный уровень: определяет есть ли такой адрес в сети. Если нет, то пакет передаётся шлюзу. Устройство шлюза проверяет свою таблицу маршрутизации и направляет пакет в нужном направлении. - Канальный уровень: определяет есть ли такой адрес в сети. Если нет, то пакет передаётся шлюзу. Устройство шлюза проверяет свою таблицу маршрутизации и направляет пакет в нужном направлении.
- -
1. Далее выполняется следующий алгоритм действий установления соединения: 4. Далее выполняется следующий алгоритм действий установления соединения:
- После того, как запрос достиг сервера, клиент отправляет клиенту запрос (client hello) и свою версию протокола TLS на защищенное соединение. - После того, как запрос достиг сервера, клиент отправляет клиенту запрос (client hello) и свою версию протокола TLS на защищенное соединение.
- Сервер отвечает клиенту (server hello) с информацией о выбранной версии TLS, методом шифрования, методом компресии и публичный сертификат сервера, подписанный центром сертификации. Сертификат содержит публичный ключ, который будет использован клиентом для шифрования данных. - Сервер отвечает клиенту (server hello) с информацией о выбранной версии TLS, методом шифрования, методом компресии и публичный сертификат сервера, подписанный центром сертификации. Сертификат содержит публичный ключ, который будет использован клиентом для шифрования данных.
- Клиент подтверждает сертификат сервера с помощью своего списка центров сертификации. Если сертификат подписан центром из списка, то серверу можно доверять. - Клиент подтверждает сертификат сервера с помощью своего списка центров сертификации. Если сертификат подписан центром из списка, то серверу можно доверять.
@ -3064,7 +3203,7 @@ https://access.redhat.com/articles/3129891
После этого защищенное соединение с сервером установлено. После этого защищенное соединение с сервером установлено.
1. Далее необходимо сформировать запрос серверу: 5. Далее необходимо сформировать запрос серверу:
- Клиент формирует запрос HTTP, в котором участвует метод (например GET), URL и версию протокола. Например `GET /pogoda/samara HTTP/2`. - Клиент формирует запрос HTTP, в котором участвует метод (например GET), URL и версию протокола. Например `GET /pogoda/samara HTTP/2`.
- Следующий заголовок клиента HOST, в котором указывается к какому хосту необходимо обратиться. Например `HOST: yandex.ru`. По заголовку HOST сервер может определить к какому сайту на сервере необходимо обратиться. - Следующий заголовок клиента HOST, в котором указывается к какому хосту необходимо обратиться. Например `HOST: yandex.ru`. По заголовку HOST сервер может определить к какому сайту на сервере необходимо обратиться.
- Запрос может также содержать и другие заголовки. Необходимо только, чтобы сервер смог понять эти заголовки. - Запрос может также содержать и другие заголовки. Необходимо только, чтобы сервер смог понять эти заголовки.
@ -3110,10 +3249,18 @@ https://access.redhat.com/articles/3129891
--- ---
И NAT занимается тем, что переводит приватные адреса в общедоступные. И NAT занимается тем, что переводит приватные адреса в общедоступные. NAT (Network Address Translation). Собственно, технология так и расшифровывается.
Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов. Это позволяет устройству с частным адресом IPv4 обращаться к ресурсам за пределами его частной сети. NAT в сочетании с частными адресами IPv4 оказался полезным методом сохранения общедоступных IPv4-адресов.
---
Еще один вариант ответа:
На офис и дом выдается один глобальный адрес. Фаервол применяет технологию NAT. Она же masquerade. И в этом случае фаервол подменяет локальный айпи на свой глобальный.
Помимо этогодобавляет к этому соединению случайный порт порт, чтобы запомнить и промониторить доходят ли пакеты от внешнего источника на локальный адрес пользователя.
Эта запись вносится в таблицу.
Удаление из таблицы нат происходит либо по таймауту(если это настроено), либо в случае когда виден пакет fin. То есть, когда фаервол видит пакет завершения fin.
--- ---
### Что такое SNI? ### Что такое SNI?
@ -3829,6 +3976,7 @@ https://access.redhat.com/articles/3129891
Хеш-таблицы — это тип структуры данных, в которой адрес или значение индекса элемента данных генерируются из хеш-функции. Хеш-таблицы — это тип структуры данных, в которой адрес или значение индекса элемента данных генерируются из хеш-функции.
Это ускоряет доступ к данным, поскольку значение индекса ведет себя как ключ к значению данных. Другими словами, в хэш-таблице хранятся пары ключ-значение, но ключ генерируется с помощью функции хеширования. Это ускоряет доступ к данным, поскольку значение индекса ведет себя как ключ к значению данных. Другими словами, в хэш-таблице хранятся пары ключ-значение, но ключ генерируется с помощью функции хеширования.
По этому принципу, например, работают чит коды в GTA San Andreas. То, что мы знаем как читкоды - это не те слова, которые изначально закладывались разработчиками.
--- ---
@ -3921,7 +4069,7 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Будет иметь значение `None`
--- ---
@ -4199,7 +4347,7 @@ https://access.redhat.com/articles/3129891
- Ответ - Ответ
Нет. Поскольку есть поле узел. И шедулер назначает какому поду куда ехать Нет. Поскольку есть поле узел. И шедулер назначает какому поду куда ехать.
--- ---
@ -4512,7 +4660,6 @@ https://access.redhat.com/articles/3129891
Также там есть ключи DirectoryOrCreate и FileOrCreate - они нужны для задачи кубернетесу проверить наличие папки, и потом обращение к файлу. Также там есть ключи DirectoryOrCreate и FileOrCreate - они нужны для задачи кубернетесу проверить наличие папки, и потом обращение к файлу.
=
--- ---