Linux Ready | DevOps
10.8K subscribers
1.01K photos
73 videos
533 links
Авторский канал по разработке на Linux.
Ресурсы, обучения, задачи, шпаргалки.
Ежедневно информация пополняется!

Cотрудничество: @energy_c
Download Telegram
40 собесов и оффер за 1 месяц

Алексей разработчик.

Искал работу с декабря - написание сопроводов и отклики занимали очень много времени.

Выхлоп - почти нулевой.

В какой-то момент понял:
так можно искать бесконечно.

И по совету друга попробовал ии-ассистента для автооткликов - Софи.

▫️За ~1 месяц прошел около 40 собеседований
▫️Получил оффер с вакансии, на которую, по его словам, не откликнулся бы сам

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


Весь процесс - от первого собеседования до оффера - занял 4 дня.

Зарегистрироваться и попробовать Софи можно здесь.

3 дня - бесплатно.
👎5😁2❤1
Знали, что отдельной команде можно выдать собственные /tmp и /var/tmp, не создавая контейнер?

Для этого у systemd есть свойство PrivateTmp:
systemd-run --user --pipe \
-p PrivateTmp=yes \
bash


Запущенная оболочка получает отдельные временные каталоги. Файлы, созданные программой в /tmp и /var/tmp, не будут видны через обычные /tmp и /var/tmp хоста.

Это удобно при запуске сборок, тестов и сторонних инструментов, которые создают множество временных файлов:
systemd-run --user --pipe \
-p PrivateTmp=yes \
npm test


После завершения временного unit systemd освобождает связанное с ним приватное пространство временных файлов.

При этом это не полноценная песочница: PrivateTmp=yes изолирует именно /tmp и /var/tmp, а остальные доступные программе пути сам по себе не скрывает.

🔥 PrivateTmp позволяет одной командой изолировать временные файлы конкретной задачи без Docker и ручного создания mount namespace.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🔥6
😍 Крайне интересная статья лежит на Хабре: «Как ядро Linux решает, какой процесс „убить“ при нехватке памяти»!

В этой статье:
• Разбирается работа OOM Killer: почему Linux допускает overcommit памяти и по каким метрикам выбирает процесс для завершения;
• Показывается, как диагностировать OOM через oom_score, oom_score_adj, логи ядра, cgroups и PSI;
• Рассматриваются способы защитить критичные сервисы и заранее реагировать на нехватку памяти с помощью systemd, earlyoom, nohang и systemd-oomd.

🔊 Продолжайте читать на Habr!


🚪 Linux Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥7
Работаем с SSH-конфигурацией: избавляемся от длинных команд подключения!

Если приходится регулярно подключаться к нескольким серверам, использовать разные SSH-ключи, нестандартные порты или подключаться через промежуточный сервер, длинные команды ssh быстро становятся неудобными. Для этого существует пользовательский файл конфигурации ~/.ssh/config, который позволяет хранить все параметры подключения в одном месте.

Если каталог ~/.ssh еще не существует, сначала создайте его и установите правильные права доступа:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/config


После этого SSH-клиент будет автоматически читать файл ~/.ssh/config при каждом подключении. Достаточно один раз описать нужные серверы, и в дальнейшем подключение станет значительно проще.

Например, добавим конфигурацию для рабочего сервера:
Host prod
HostName 192.168.1.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519


Теперь вместо длинной команды:
ssh -i ~/.ssh/id_ed25519 deploy@192.168.1.10


достаточно выполнить:
ssh prod


SSH автоматически подставит адрес сервера, пользователя, порт и нужный ключ. Если подобных серверов десятки, экономия времени становится очень заметной.

Точно так же можно сохранить параметры подключения к серверу с нестандартным SSH-портом:
Host backup
HostName backup.example.com
User admin
Port 2222
IdentityFile ~/.ssh/id_backup


После этого для подключения не нужно помнить номер порта или каждый раз использовать параметр -p:
ssh backup


Еще одна полезная возможность — использовать отдельные SSH-ключи для разных сервисов. Например, для GitHub:
Host github.com
User git
IdentityFile ~/.ssh/github
IdentitiesOnly yes


Параметр IdentitiesOnly yes заставляет SSH использовать только ключи, явно указанные в конфигурации для этого подключения, а не автоматически перебирать все ключи, загруженные в SSH-агент. Это особенно полезно, если на компьютере используется несколько ключей для разных проектов или организаций.

Если нужный сервер доступен только через промежуточный сервер (bastion или jump-хост), это тоже легко настраивается:
Host internal
HostName 10.10.0.15
User admin
ProxyJump bastion

Host bastion
HostName bastion.example.com
User jump


После этого достаточно выполнить всего одну команду:
ssh internal


SSH самостоятельно подключится к bastion-хосту, а затем автоматически перенаправит соединение на внутренний сервер. Никаких дополнительных действий выполнять не потребуется.

Чтобы SSH быстрее обнаруживал потерю соединения и не оставлял зависшие сессии при проблемах с сетью, можно добавить общие параметры:
Host *
ServerAliveInterval 30
ServerAliveCountMax 3


В этом случае клиент будет отправлять проверочный пакет каждые 30 секунд. Если ответ не придет три раза подряд, соединение будет считаться потерянным и автоматически завершится.

Если хотите убедиться, какие именно параметры SSH использует для конкретного подключения после применения всех правил из конфигурации, выполните:
ssh -G prod


Команда покажет итоговую конфигурацию: имя пользователя, адрес сервера, порт, используемый ключ и все остальные параметры после обработки файла ~/.ssh/config. Это один из самых удобных способов проверить, что конфигурация настроена именно так, как вы ожидаете.

🔥 Файл ~/.ssh/config значительно упрощает работу с большим количеством серверов. Он избавляет от длинных команд подключения, позволяет хранить параметры в одном месте, использовать разные SSH-ключи, ProxyJump, нестандартные порты и множество других возможностей OpenSSH, которые делают ежедневную работу администратора или разработчика гораздо удобнее.

🚪 Linux Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥7❤4
В Linux можно ограничить время работы любой команды без написания дополнительной логики!

Иногда команда зависает, перестаёт отвечать или работает значительно дольше ожидаемого. Обычно для таких случаев пишут отдельные проверки, запускают процессы в фоне или завершают их вручную.

Во многих дистрибутивах уже есть утилита timeout из GNU Coreutils:
bash id="c8fv6n"
$ timeout 30s ./backup.sh


Если через 30 секунд команда не завершится самостоятельно, timeout отправит ей сигнал завершения.

При необходимости можно указать другой сигнал:
bash id="x4pqsn"
$ timeout -s SIGKILL 5m command


Это удобно для автоматизации, резервного копирования, тестов и CI, где зависший процесс не должен блокировать выполнение остальных задач.

Команда возвращает код завершения, поэтому её легко использовать в shell-сценариях без дополнительных конструкций.

🔥 timeout позволяет сделать любой сценарий устойчивее к зависаниям буквально одной строкой.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤10🔥5
📂 Напоминалка для работы с сетью!

Например, nmcli device wifi list покажет доступные Wi-Fi сети, а nmcli device wifi connect поможет быстро подключиться к нужной точке доступа.

На картинке — команды nmcli для просмотра и настройки сети, управления сетевыми интерфейсами, Wi-Fi и Ethernet-подключениями.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8❤3👎1
Знали, что можно экспериментировать с mount, вообще не затрагивая основную систему?

Обычно любые операции с mount сразу становятся видны всем процессам в текущем пространстве монтирования. Если случайно смонтировать файловую систему, сделать bind mount или изменить параметры монтирования, изменения увидят и остальные процессы хоста.

Но Linux позволяет создать собственный mount namespace:
sudo unshare --mount --fork bash


Для большинства операций потребуется root (или CAP_SYS_ADMIN).

Новая оболочка получает собственное пространство монтирования. Любые последующие mount, umount и mount --bind будут видны только внутри неё.

Например:
bash id="t8n5wy"
mount -t tmpfs tmpfs /mnt

touch /mnt/test
ls /mnt


Или можно проверить сложный сценарий с bind mount, не опасаясь затронуть основную систему:
mount --bind ./build /usr/local/bin

# Проверяем сценарий...


Когда завершается последний процесс в этом namespace, он автоматически уничтожается вместе со всеми своими mount'ами. Никакой ручной очистки не требуется.

🔥 Если нужно безопасно проверить сложные операции с монтированием или воспроизвести окружение без виртуальной машины и контейнера — unshare --mount является одним из самых удобных инструментов Linux.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍9🤝9
📂 Шпаргалка по основным сетевым протоколам!

Например, DNS преобразует доменные имена в IP-адреса, TLS обеспечивает защищённую передачу данных, а SSH используется для безопасного удалённого доступа к системам.

На схеме собраны протоколы, которые встречаются в веб-разработке, сетевой инфраструктуре и системном администрировании: TCP, UDP, QUIC, HTTP, DNS, SSH, WebSocket, WebRTC, WireGuard и другие.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤4
This media is not supported in your browser
VIEW IN TELEGRAM
☁️☁️☁️☁️☁️☁️☁️

24 сентября Yandex Cloud проведёт Yandex Scale 2026 — флагманскую технологическую конференцию, посвящённую облачным технологиям, инфраструктуре и искусственному интеллекту.

🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
🎨🎨🎨🎨🎨🎨🎨🎨🎨
В программе четыре продуктовых трека — AI, Data, Security и Hybrid Infrastructure & DevOps, — и отдельный углублённый технологический трек DeepTech, который пройдёт только онлайн.

В треке Hybrid Infrastructure & DevOps откроем программу рассказом про главные инфраструктурные анонсы и новинки 2026 года. На примере Stackland расскажем, как построить свою внутреннюю платформу по методологии Platform Engineering и ускорить time to market. Разберём, зачем бизнесу кластеры Yandex Managed Service for Kubernetes на тысячи нод — на реальном продакшн-кейсе Mindbox. Расскажем, как получить предсказуемую и безопасную ИИ‑разработку с ИИ‑командой на платформе SourceCraft и максимизировать возврат инвестиций от ИИ. Разберём возможности построения реальной гибридной инфраструктуры на базе единой технологической платформы и то, как полноценно объединить локальную и облачную среды, включая выделенные серверы BareMetal. И на примере крупного банка рассмотрим, как создать полноценный гибрид, соблюдая требования безопасности, регуляторов и бизнеса одновременно.

🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
🎨🎨🎨🎨🎨🎨🎨🎨🎨
Отдельно пройдут воркшопы по Hybrid Infrastructure & DevOps. Смоделируем аварию на физическом сервере и проверим, как гибридная архитектура на облаке и BareMetal держит отказоустойчивость. Научим разворачивать корпоративную ИИ-систему с RAG-сценарием на Yandex BareMetal и Stackland — чтобы модель работала с внутренней документацией и базами знаний. Разберём, как эффективно делить GPU-ресурсы Yandex Managed Service for Kubernetes между параллельными задачами обучения моделей. И покажем, как команда ИИ-агентов SourceCraft проходит путь от бизнес-требований до безопасного релиза — с проверкой на уязвимости на каждом шаге.

🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨
🎨🎨🎨🎨🎨🎨🎨🎨🎨🎨

На конференции будут не только треки — ещё демозоны, питчинг решений, IT-квест и мерч. Параллельно в онлайн-студии — розыгрыш призов и секретный гость.


Программа целиком — на сайте конференции, регистрация там же, а участие бесплатное!
Please open Telegram to view this post
VIEW IN TELEGRAM
👎6
Знали, что можно экспериментировать с mount, вообще не затрагивая основную систему?

Обычно любые операции с mount сразу становятся видны всем процессам в текущем пространстве монтирования. Если случайно смонтировать файловую систему, сделать bind mount или изменить параметры монтирования, изменения увидят и остальные процессы хоста.

Но Linux позволяет создать собственный mount namespace:
sudo unshare --mount --fork bash


Для большинства операций потребуется root (или CAP_SYS_ADMIN).

Новая оболочка получает собственное пространство монтирования. Любые последующие mount, umount и mount --bind будут видны только внутри неё.

Например:
bash id="t8n5wy"
mount -t tmpfs tmpfs /mnt

touch /mnt/test
ls /mnt


Или можно проверить сложный сценарий с bind mount, не опасаясь затронуть основную систему:
mount --bind ./build /usr/local/bin

# Проверяем сценарий...


Когда завершается последний процесс в этом namespace, он автоматически уничтожается вместе со всеми своими mount'ами. Никакой ручной очистки не требуется.

🔥 Если нужно безопасно проверить сложные операции с монтированием или воспроизвести окружение без виртуальной машины и контейнера — unshare --mount является одним из самых удобных инструментов Linux.

🚪 Linux Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤8🔥7😁1
👩‍💻 Шифруем отдельный диск в Linux через LUKS!

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

В этом посте:
• Проверяем выбранный диск перед шифрованием;

• Создаём LUKS-контейнер через cryptsetup;

• Разблокируем его как обычное устройство через /dev/mapper;

• Создаём файловую систему, монтируем и безопасно закрываем контейнер.


Так можно отдельно защищать диски с бэкапами, дампами баз данных и другими данными, не меняя приложения, которые с ними работают.

🚪 Linux Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍13❤8👎1🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
👍 Большая шпаргалка по Linux-командам для повседневной работы!

В репозитории собраны команды для получения информации о системе, поиска и просмотра файлов, монтирования дисков, работы с файловыми системами, резервного копирования и обработки текста через grep, sed и awk. Есть отдельные разделы по сети, iptables, процессам, мониторингу и диагностике с top, ps, lsof, strace, tcpdump, rsync и другими утилитами.

Оставляю ссылочку: GitHub 📱


🚪 Linux Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍11🔥6
❤️ Годная статья попалась на Хабре: «Топ утилит и инструментов для проверки работоспособности VDS»!

В этой статье:
• Узнаете, как быстро определить, где проблема: на сервере, в сети или у провайдера;
• Разберёте диагностику VDS с помощью ping, traceroute, MTR, curl, htop, iostat и других Linux-утилит;
• Познакомитесь с инструментами для мониторинга сети, ресурсов, дисков, портов и логов сервера.

🔊 Продолжай читать на Habr!


🚪 Linux Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🔥5👎1
📂 Краткая шпаргалка по основам системы!

Как устроена файловая система Linux, чем отличаются /etc, /usr, /var и /proc, как работают права rwx и что означает chmod 764

На схеме собраны системные директории, базовые команды для работы с файлами, процессами и дисковым пространством, права доступа, специальные биты SetUID / SetGID / Sticky Bit, а также полезные сочетания клавиш терминала.

Сохрани, чтобы не потерять!

🚪 Linux Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝20👍11❤8🔥1
Почему rm удалил файл, но место на диске не освободилось!

На Linux-сервере можно удалить большой журнал через rm, но df -h по-прежнему будет показывать заполненную файловую систему.
rm /var/log/app/application.log
df -h /var


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

Найти открытые удалённые файлы можно через:
sudo lsof +L1


Например, в выводе может быть:
COMMAND  PID   USER  FD   TYPE DEVICE SIZE/OFF NLINK NAME
java 2451 app 12w REG 8,1 15G 0 /var/log/app/application.log (deleted)


NLINK=0 означает, что ссылок из каталогов на inode больше нет, а 12w — файловый дескриптор, открытый на запись. Процесс при этом продолжает работать с прежним файлом даже после rm.

Проверить, куда указывает дескриптор, и посмотреть его параметры можно через /proc:
readlink /proc/2451/fd/12
cat /proc/2451/fdinfo/12


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

Сравнить показания можно так:
du -xhd1 /var
df -h /var


Чтобы штатно освободить место, приложение должно закрыть старый открытый файл. Если оно не поддерживает повторное открытие журналов, обычно достаточно штатного перезапуска сервиса:
systemctl restart имя-сервиса


Для постоянно работающих служб предпочтительнее использовать поддерживаемый приложением механизм повторного открытия журналов без полного перезапуска. Например, nginx умеет переоткрывать лог-файлы:
nginx -s reopen


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

В аварийной ситуации удалённый файл можно обнулить через его открытый файловый дескриптор:
sudo sh -c ': > /proc/2451/fd/12'


Но это именно аварийный приём. Если процесс пишет без O_APPEND, сохранённая позиция записи после truncate может остаться далеко за новым концом файла. Последующая запись тогда способна создать разреженную область — sparse hole.

Проверить флаги открытого дескриптора и текущую позицию можно через:
cat /proc/2451/fdinfo/12


Расхождение между du и df не всегда связано именно с открытыми удалёнными файлами. Но если перед этим был удалён большой активный журнал, одна из первых диагностических команд:
sudo lsof +L1


🔥 Если после rm место не освободилось, процесс, скорее всего, продолжает удерживать удалённый файл открытым. Блоки будут окончательно освобождены, когда исчезнут все открытые ссылки на него.

🚪 Linux Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤝9🔥5❤2👎1
Почему rm удалил файл, но место на диске не освободилось!

На Linux-сервере можно удалить большой журнал через rm, но df -h по-прежнему будет показывать заполненную файловую систему.
rm /var/log/app/application.log
df -h /var


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

Найти открытые удалённые файлы можно через:
sudo lsof +L1


Например, в выводе может быть:
COMMAND  PID   USER  FD   TYPE DEVICE SIZE/OFF NLINK NAME
java 2451 app 12w REG 8,1 15G 0 /var/log/app/application.log (deleted)


NLINK=0 означает, что ссылок из каталогов на inode больше нет, а 12w — файловый дескриптор, открытый на запись. Процесс при этом продолжает работать с прежним файлом даже после rm.

Проверить, куда указывает дескриптор, и посмотреть его параметры можно через /proc:
readlink /proc/2451/fd/12
cat /proc/2451/fdinfo/12


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

Сравнить показания можно так:
du -xhd1 /var
df -h /var


Чтобы штатно освободить место, приложение должно закрыть старый открытый файл. Если оно не поддерживает повторное открытие журналов, обычно достаточно штатного перезапуска сервиса:
systemctl restart имя-сервиса


Для постоянно работающих служб предпочтительнее использовать поддерживаемый приложением механизм повторного открытия журналов без полного перезапуска. Например, nginx умеет переоткрывать лог-файлы:
nginx -s reopen


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

В аварийной ситуации удалённый файл можно обнулить через его открытый файловый дескриптор:
sudo sh -c ': > /proc/2451/fd/12'


Но это именно аварийный приём. Если процесс пишет без O_APPEND, сохранённая позиция записи после truncate может остаться далеко за новым концом файла. Последующая запись тогда способна создать разреженную область — sparse hole.

Проверить флаги открытого дескриптора и текущую позицию можно через:
cat /proc/2451/fdinfo/12


Расхождение между du и df не всегда связано именно с открытыми удалёнными файлами. Но если перед этим был удалён большой активный журнал, одна из первых диагностических команд:
sudo lsof +L1


🔥 Если после rm место не освободилось, процесс, скорее всего, продолжает удерживать удалённый файл открытым. Блоки будут окончательно освобождены, когда исчезнут все открытые ссылки на него.

🚪 Linux Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤8🔥6