🤔 Как работает DHCP?
DHCP (Dynamic Host Configuration Protocol):
1. Клиент отправляет DHCPDISCOVER.
2. Сервер отвечает DHCPOFFER.
3. Клиент выбирает и отправляет DHCPREQUEST.
4. Сервер подтверждает DHCPACK.
В результате клиент получает: IP, маску, шлюз, DNS и др. Это автоматизация настройки сети.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Клиент отправляет DHCPDISCOVER.
2. Сервер отвечает DHCPOFFER.
3. Клиент выбирает и отправляет DHCPREQUEST.
4. Сервер подтверждает DHCPACK.
В результате клиент получает: IP, маску, шлюз, DNS и др. Это автоматизация настройки сети.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4🔥2
🤔 Как в линуксе посмотреть список дескрипторов файлов?
В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы
🚩Основные способы
🟠Команда `ls` в каталоге `/proc/[PID]/fd`
Каждый процесс в Linux имеет свой подкаталог в
Вывод
🟠Использование `lsof`
Команда
Пример для всех процессов
Вывод
🟠Использование `lsfd`
Утилита
Вывод
🚩Полезные флаги и фильтрация
Список дескрипторов определенного пользователя:
Список файлов определенного типа (например, сокеты):
Фильтрация по определенному файлу или устройству:
🚩Почему важно знать про дескрипторы?
🟠Отладка приложений
Определение, какие файлы, сокеты или устройства использует процесс.
🟠Устранение утечек
Проверка, остаются ли ненужные дескрипторы открытыми.
🟠Администрирование
Диагностика проблем, связанных с блокировкой файлов.
Ставь 👍 и забирай 📚 Базу знаний
В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы
/proc, которая содержит информацию о процессах, включая их открытые файловые дескрипторы.🚩Основные способы
🟠Команда `ls` в каталоге `/proc/[PID]/fd`
Каждый процесс в Linux имеет свой подкаталог в
/proc с идентификатором процесса (PID). В подкаталоге fd хранятся ссылки на открытые дескрипторы файлов.ls -l /proc/$(pidof <имя_процесса>)/fd
Вывод
lrwx------ 1 user user 64 Dec 23 12:00 0 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 1 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 2 -> /dev/pts/0
🟠Использование `lsof`
Команда
lsof (list open files) отображает список всех открытых файлов в системе.lsof -p <PID>
Пример для всех процессов
lsof
Вывод
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 1234 user cwd DIR 8,1 4096 256 /home/user
bash 1234 user rtd DIR 8,1 4096 2 /
bash 1234 user 0u CHR 136,0 0 3 /dev/pts/0
bash 1234 user 1u CHR 136,0 0 3 /dev/pts/0
bash 1234 user 2u CHR 136,0 0 3 /dev/pts/0
🟠Использование `lsfd`
Утилита
lsfd (из пакета util-linux) удобна для просмотра файловых дескрипторов.lsfd
Вывод
PID FD TTY TYPE DEVICE SIZE/OFF NODE NAME
1234 0 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
1234 1 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
1234 2 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0
🚩Полезные флаги и фильтрация
Список дескрипторов определенного пользователя:
lsof -u <имя_пользователя>
Список файлов определенного типа (например, сокеты):
lsof -i
Фильтрация по определенному файлу или устройству:
lsof /path/to/file
🚩Почему важно знать про дескрипторы?
🟠Отладка приложений
Определение, какие файлы, сокеты или устройства использует процесс.
🟠Устранение утечек
Проверка, остаются ли ненужные дескрипторы открытыми.
🟠Администрирование
Диагностика проблем, связанных с блокировкой файлов.
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как ставить Kubernetes на bare metal и в облако?
На bare metal — чаще всего через kubeadm, k3s, Rancher, MicroK8s, либо с помощью Ansible (kubespray). В облаке — через сервисы провайдеров (EKS, GKE, AKS) или вручную на облачные ВМ, с теми же инструментами. Отличие — в настройках сети, балансировке и подключении хранилищ.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Где хранить приватный PGP ключ?
Приватный PGP-ключ – это чувствительные данные, которые нельзя хранить в незащищенных местах. Потеря или компрометация ключа может привести к утечке зашифрованных данных.
🚩Лучшие способы хранения приватного PGP-ключа
🟠На аппаратном токене (YubiKey, Nitrokey, SmartCard)
- Ключ никогда не покидает устройство.
- Физическая защита от копирования.
- Можно использовать для SSH, GPG, подписи кода.
🟠В защищенном хранилище (Bitwarden, 1Password, KeePassXC)
- Хранилище зашифровано и требует пароль или биометрию.
- Можно синхронизировать между устройствами без потери безопасности.
- Экспортировать ключ в зашифрованный файл:
🟠В зашифрованном виде на диске (LUKS, VeraCrypt, EncFS)
- Физическая защита – даже если диск украдут, без пароля его не открыть.
- Работает на Linux, Windows, MacOS.
1⃣Создать зашифрованный контейнер с LUKS (Linux):
2⃣Хранить ключ внутри
🟠4. В HSM или облачном KMS (AWS KMS, HashiCorp Vault, Azure Key Vault)
- Подходит для энтерпрайз-решений.
- Аппаратное шифрование (HSM) делает взлом практически невозможным.
- AWS KMS или Vault можно использовать для PGP.
Ставь 👍 и забирай 📚 Базу знаний
Приватный PGP-ключ – это чувствительные данные, которые нельзя хранить в незащищенных местах. Потеря или компрометация ключа может привести к утечке зашифрованных данных.
🚩Лучшие способы хранения приватного PGP-ключа
🟠На аппаратном токене (YubiKey, Nitrokey, SmartCard)
- Ключ никогда не покидает устройство.
- Физическая защита от копирования.
- Можно использовать для SSH, GPG, подписи кода.
🟠В защищенном хранилище (Bitwarden, 1Password, KeePassXC)
- Хранилище зашифровано и требует пароль или биометрию.
- Можно синхронизировать между устройствами без потери безопасности.
- Экспортировать ключ в зашифрованный файл:
gpg --export-secret-keys --armor > private-key.asc
🟠В зашифрованном виде на диске (LUKS, VeraCrypt, EncFS)
- Физическая защита – даже если диск украдут, без пароля его не открыть.
- Работает на Linux, Windows, MacOS.
1⃣Создать зашифрованный контейнер с LUKS (Linux):
cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX secure_disk
mkfs.ext4 /dev/mapper/secure_disk
2⃣Хранить ключ внутри
/mnt/secure_disk/private-key.asc. 🟠4. В HSM или облачном KMS (AWS KMS, HashiCorp Vault, Azure Key Vault)
- Подходит для энтерпрайз-решений.
- Аппаратное шифрование (HSM) делает взлом практически невозможным.
- AWS KMS или Vault можно использовать для PGP.
vault kv put secret/pgp_key key="$(cat private-key.asc)"
Ставь 👍 и забирай 📚 Базу знаний
🤔 Есть облако и есть bare metal — как будете строить логику ванильного Kubernetes?
В обоих случаях можно использовать один и тот же подход: автоматизировать установку через kubeadm или использовать дистрибутив (например, K3s, RKE, Kubespray). Разделять конфигурации для облака и bare metal (например, CNI-плагины, storage), использовать централизованную систему CI/CD, выносить sensitive-конфиги в Secrets.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 Видим что места нет находим большой файл 5 Гб например удаляем его а пишет что места всё равно нет в чём причина?
В Linux удаленный файл может оставаться в памяти, если он все еще используется запущенным процессом. Это происходит, потому что файл не удаляется физически, пока его дескриптор (file descriptor) открыт.
Файл все еще используется процессом
Файл удален, но все еще открыт (
Файл удален, но был записан в смонтированный том
🚩Проверить, какие процессы держат удаленный файл (`lsof`)
Команда
Вывод
Решение: Перезапустить процесс:
или
🚩Освободить место вручную (`/proc`)
Если процесс нельзя перезапустить, можно освободить занятую память без перезапуска.
Вывод
Очистить файл, не перезапуская процесс
🚩Проверить монтирование (Docker, NFS, tmpfs)
Если файл хранился в смонтированном томе, он может не удалиться сразу.
Проверить монтированные диски:
Если файл был в Docker-контейнере, проверить объемы:
Ставь 👍 и забирай 📚 Базу знаний
В Linux удаленный файл может оставаться в памяти, если он все еще используется запущенным процессом. Это происходит, потому что файл не удаляется физически, пока его дескриптор (file descriptor) открыт.
Файл все еще используется процессом
Файл удален, но все еще открыт (
deleted в /proc) Файл удален, но был записан в смонтированный том
🚩Проверить, какие процессы держат удаленный файл (`lsof`)
Команда
lsof | grep deleted
Вывод
nginx 1234 www-data 4w REG 8,1 5G /var/log/nginx/access.log (deleted)
Решение: Перезапустить процесс:
systemctl restart nginx
или
kill -HUP 1234 # Закрыть процесс (PID = 1234)
🚩Освободить место вручную (`/proc`)
Если процесс нельзя перезапустить, можно освободить занятую память без перезапуска.
ls -l /proc/*/fd/ | grep deleted
Вывод
lrwx------ 1 root root 64 Feb 21 14:23 /proc/5678/fd/4 -> /var/log/nginx/access.log (deleted)
Очистить файл, не перезапуская процесс
> /proc/5678/fd/4
🚩Проверить монтирование (Docker, NFS, tmpfs)
Если файл хранился в смонтированном томе, он может не удалиться сразу.
Проверить монтированные диски:
df -h
mount | grep /var/log
Если файл был в Docker-контейнере, проверить объемы:
docker system df
Ставь 👍 и забирай 📚 Базу знаний
👍2💊1
🤔 Что такое container network module в Docker?
Это подсистема Docker, которая управляет сетевыми подключениями контейнеров. Она реализует типы сетей: bridge, host, none, overlay, macvlan, и отвечает за создание виртуальных интерфейсов, мостов и роутинг трафика между контейнерами и внешним миром.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как сделать rebase на main branch?
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
🟠Выполняем rebase на `main`
Сначала убедимся, что
Теперь выполняем сам rebase:
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
Продолжите rebase:
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
Ставь 👍 и забирай 📚 Базу знаний
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
main). 🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
feature-branch: git checkout feature-branch
🟠Выполняем rebase на `main`
Сначала убедимся, что
main обновлена: git checkout main
git pull origin main
Теперь выполняем сам rebase:
git checkout feature-branch
git rebase main
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
git add <файл>
Продолжите rebase:
git rebase --continue
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
git push origin feature-branch --force
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какая Subnet Mask у CIDR 10.20.0.0/23?
CIDR /23 означает маску подсети255.255.254.0 , что предоставляет 512 IP-адресов, из которых 510 доступны для хостов (за вычетом адреса сети и широковещательного).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
CIDR /23 означает маску подсети
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Когда вы создаёте файл какие права создаются по умолчанию?
Права доступа по умолчанию зависят от базовых прав доступа и значения
🟠Файлы: 666 (rw-rw-rw-)
Это означает, что по умолчанию все пользователи могут читать и записывать в файл.
🟠Каталоги: 777 (rwxrwxrwx)
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.
🚩Значение umask: 022
Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение
🟠Создание файла
Базовые права доступа: 666
Значение
Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)
🟠Создание каталога
Базовые права доступа: 777
Значение
Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)
🚩Создание файла с umask 0022
1⃣Установка umask
2⃣Создание файла
3⃣Проверка прав доступа
Вывод
Права доступа: 644 (rw-r--r--)
🚩Создание каталога с umask 0027
1⃣Установка umask
2⃣Создание каталога
3⃣Проверка прав доступа
Вывод
Права доступа: 750 (rwxr-x---)
🚩Дополнительные замечания
🟠umask в скриптах
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
🟠Проверка прав доступа в разных ситуациях
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.
Ставь 👍 и забирай 📚 Базу знаний
Права доступа по умолчанию зависят от базовых прав доступа и значения
umask. Базовые права доступа — это значения, которые система использует для определения разрешений перед применением маски umask.🟠Файлы: 666 (rw-rw-rw-)
Это означает, что по умолчанию все пользователи могут читать и записывать в файл.
🟠Каталоги: 777 (rwxrwxrwx)
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.
🚩Значение umask: 022
Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение
umask указывается в восьмеричной системе счисления. 🟠Создание файла
Базовые права доступа: 666
Значение
umask: 022Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)
🟠Создание каталога
Базовые права доступа: 777
Значение
umask: 022Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)
🚩Создание файла с umask 0022
1⃣Установка umask
umask 0022
2⃣Создание файла
touch myfile
3⃣Проверка прав доступа
ls -l myfile
Вывод
Права доступа: 644 (rw-r--r--)
-rw-r--r-- 1 user user 0 Jul 26 12:00 myfile
🚩Создание каталога с umask 0027
1⃣Установка umask
umask 0027
2⃣Создание каталога
mkdir mydir
3⃣Проверка прав доступа
ls -ld mydir
Вывод
Права доступа: 750 (rwxr-x---)
drwxr-x--- 2 user user 4096 Jul 26 12:00 mydir
🚩Дополнительные замечания
🟠umask в скриптах
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
#!/bin/bash
umask 027
touch file1
mkdir dir1
🟠Проверка прав доступа в разных ситуациях
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как работает injector sidecar в Vault?
Injector добавляет в под дополнительный контейнер, который извлекает секреты из Vault и передаёт их основному приложению через файл, переменную окружения или том. Это позволяет безопасно использовать секреты без ручной интеграции.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Injector добавляет в под дополнительный контейнер, который извлекает секреты из Vault и передаёт их основному приложению через файл, переменную окружения или том. Это позволяет безопасно использовать секреты без ручной интеграции.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие процессы убивает long killer?
Это системный механизм в Astra Linux (и некоторых других дистрибутивах на базе Debian), который убивает "долгоиграющие" процессы, потребляющие слишком много ресурсов. Он предотвращает зависания системы и защищает от неэффективного использования вычислительных мощностей.
🚩Какие процессы убивает Long Killer?
Long Killer анализирует процессы и завершает те, которые:
Запущены от обычного пользователя (не root).
Работают слишком долго (по умолчанию >10 минут).
Потребляют много CPU (по умолчанию >90% CPU).
Используют много памяти (если система близка к OOM – Out of Memory).
Не имеют активности (зависли, например, ожидание ввода).
Он не убивает root-процессы.
Системные службы (например,
Если процесс выполняется интерактивно (например, работа в
🚩Как проверить, что процесс убит Long Killer?
Если подозреваете, что ваш процесс завершился из-за Long Killer, посмотрите логи
Также можно проверить
🚩Как отключить или настроить Long Killer?
Файл конфигурации находится здесь
Пример настроек
После изменения перезапустите сервис
Чтобы полностью отключить Long Killer
🚩Как избежать убийства процессов?
Запуск от
Снижение приоритета процесса (nice/renice)
Использование
Ставь 👍 и забирай 📚 Базу знаний
Это системный механизм в Astra Linux (и некоторых других дистрибутивах на базе Debian), который убивает "долгоиграющие" процессы, потребляющие слишком много ресурсов. Он предотвращает зависания системы и защищает от неэффективного использования вычислительных мощностей.
🚩Какие процессы убивает Long Killer?
Long Killer анализирует процессы и завершает те, которые:
Запущены от обычного пользователя (не root).
Работают слишком долго (по умолчанию >10 минут).
Потребляют много CPU (по умолчанию >90% CPU).
Используют много памяти (если система близка к OOM – Out of Memory).
Не имеют активности (зависли, например, ожидание ввода).
Он не убивает root-процессы.
Системные службы (например,
sshd, systemd) остаются нетронутыми. Если процесс выполняется интерактивно (например, работа в
vim или nano), он обычно не трогает его. 🚩Как проверить, что процесс убит Long Killer?
Если подозреваете, что ваш процесс завершился из-за Long Killer, посмотрите логи
journalctl -u long-killer.service --no-pager | tail -n 20
Также можно проверить
dmesg dmesg | grep "killed by Long Killer"
🚩Как отключить или настроить Long Killer?
Файл конфигурации находится здесь
/etc/long-killer.conf
Пример настроек
MAX_CPU_USAGE=90 # Максимальная загрузка CPU (%)
MAX_EXEC_TIME=600 # Максимальное время выполнения (секунды)
EXCLUDE_USERS=root # Не убивать процессы от root
После изменения перезапустите сервис
systemctl restart long-killer.service
Чтобы полностью отключить Long Killer
systemctl stop long-killer.service
systemctl disable long-killer.service
🚩Как избежать убийства процессов?
Запуск от
root (если это безопасно): sudo my_long_process
Снижение приоритета процесса (nice/renice)
nice -n 10 my_process
renice -n 10 -p <PID>
Использование
nohup или screen для фоновых задач nohup my_script.sh &
Ставь 👍 и забирай 📚 Базу знаний
🤔 Сценарий с двумя разработчиками и terraform plan — будут ли ошибки при apply?
Да, возможны ошибки.
Если ты выполнил terraform plan, потом кто-то другой внёс изменения и выполнил свой plan, apply, а затем ты пытаешься применить свой устаревший plan, то:
- План уже не соответствует текущему state.
- При apply возникнут конфликты, предупреждения, возможны разрушения чужих изменений.
- Terraform может запросить подтверждение, если ресурсы различаются.
Решение — всегда перед apply делать terraform pull или terraform refresh, либо заново выполнять terraform plan, чтобы сравнивалось с актуальным состоянием.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Да, возможны ошибки.
Если ты выполнил terraform plan, потом кто-то другой внёс изменения и выполнил свой plan, apply, а затем ты пытаешься применить свой устаревший plan, то:
- План уже не соответствует текущему state.
- При apply возникнут конфликты, предупреждения, возможны разрушения чужих изменений.
- Terraform может запросить подтверждение, если ресурсы различаются.
Решение — всегда перед apply делать terraform pull или terraform refresh, либо заново выполнять terraform plan, чтобы сравнивалось с актуальным состоянием.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний