40 собесов и оффер за 1 месяц
Алексей разработчик.
Искал работу с декабря - написание сопроводов и отклики занимали очень много времени.
Выхлоп - почти нулевой.
В какой-то момент понял:
так можно искать бесконечно.
И по совету друга попробовал ии-ассистента для автооткликов - Софи.
▫️За ~1 месяц прошел около 40 собеседований
▫️Получил оффер с вакансии, на которую, по его словам, не откликнулся бы сам
Весь процесс - от первого собеседования до оффера - занял 4 дня.
Зарегистрироваться и попробовать Софи можно здесь.
3 дня - бесплатно.
Алексей разработчик.
Искал работу с декабря - написание сопроводов и отклики занимали очень много времени.
Выхлоп - почти нулевой.
В какой-то момент понял:
так можно искать бесконечно.
И по совету друга попробовал ии-ассистента для автооткликов - Софи.
▫️За ~1 месяц прошел около 40 собеседований
▫️Получил оффер с вакансии, на которую, по его словам, не откликнулся бы сам
В описании она выглядела скучно, а по факту - одна из самых интересных компаний, с которыми я общался.
Весь процесс - от первого собеседования до оффера - занял 4 дня.
Зарегистрироваться и попробовать Софи можно здесь.
3 дня - бесплатно.
👎5😁2❤1
Знали, что отдельной команде можно выдать собственные /tmp и /var/tmp, не создавая контейнер?
Для этого у systemd есть свойство
Запущенная оболочка получает отдельные временные каталоги. Файлы, созданные программой в
Это удобно при запуске сборок, тестов и сторонних инструментов, которые создают множество временных файлов:
После завершения временного
При этом это не полноценная песочница:
🔥
🚪 Linux Ready | #совет
Для этого у 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.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤7🔥6
В этой статье:
• Разбирается работа OOM Killer: почему Linux допускает overcommit памяти и по каким метрикам выбирает процесс для завершения;• Показывается, как диагностировать OOM через oom_score, oom_score_adj, логи ядра, cgroups и PSI;• Рассматриваются способы защитить критичные сервисы и заранее реагировать на нехватку памяти с помощью systemd, earlyoom, nohang и systemd-oomd.
🔊 Продолжайте читать на Habr!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍7🔥7
Работаем с SSH-конфигурацией: избавляемся от длинных команд подключения!
Если приходится регулярно подключаться к нескольким серверам, использовать разные SSH-ключи, нестандартные порты или подключаться через промежуточный сервер, длинные команды
Если каталог
После этого SSH-клиент будет автоматически читать файл
Например, добавим конфигурацию для рабочего сервера:
Теперь вместо длинной команды:
достаточно выполнить:
SSH автоматически подставит адрес сервера, пользователя, порт и нужный ключ. Если подобных серверов десятки, экономия времени становится очень заметной.
Точно так же можно сохранить параметры подключения к серверу с нестандартным SSH-портом:
После этого для подключения не нужно помнить номер порта или каждый раз использовать параметр
Еще одна полезная возможность — использовать отдельные SSH-ключи для разных сервисов. Например, для GitHub:
Параметр
Если нужный сервер доступен только через промежуточный сервер (bastion или jump-хост), это тоже легко настраивается:
После этого достаточно выполнить всего одну команду:
SSH самостоятельно подключится к bastion-хосту, а затем автоматически перенаправит соединение на внутренний сервер. Никаких дополнительных действий выполнять не потребуется.
Чтобы SSH быстрее обнаруживал потерю соединения и не оставлял зависшие сессии при проблемах с сетью, можно добавить общие параметры:
В этом случае клиент будет отправлять проверочный пакет каждые 30 секунд. Если ответ не придет три раза подряд, соединение будет считаться потерянным и автоматически завершится.
Если хотите убедиться, какие именно параметры SSH использует для конкретного подключения после применения всех правил из конфигурации, выполните:
Команда покажет итоговую конфигурацию: имя пользователя, адрес сервера, порт, используемый ключ и все остальные параметры после обработки файла
🔥 Файл
🚪 Linux Ready | #практика
Если приходится регулярно подключаться к нескольким серверам, использовать разные 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, которые делают ежедневную работу администратора или разработчика гораздо удобнее.Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥7❤4
В Linux можно ограничить время работы любой команды без написания дополнительной логики!
Иногда команда зависает, перестаёт отвечать или работает значительно дольше ожидаемого. Обычно для таких случаев пишут отдельные проверки, запускают процессы в фоне или завершают их вручную.
Во многих дистрибутивах уже есть утилита
Если через 30 секунд команда не завершится самостоятельно,
При необходимости можно указать другой сигнал:
Это удобно для автоматизации, резервного копирования, тестов и CI, где зависший процесс не должен блокировать выполнение остальных задач.
Команда возвращает код завершения, поэтому её легко использовать в shell-сценариях без дополнительных конструкций.
🔥
🚪 Linux Ready | #совет
Иногда команда зависает, перестаёт отвечать или работает значительно дольше ожидаемого. Обычно для таких случаев пишут отдельные проверки, запускают процессы в фоне или завершают их вручную.
Во многих дистрибутивах уже есть утилита
timeout из GNU Coreutils:bash id="c8fv6n"
$ timeout 30s ./backup.sh
Если через 30 секунд команда не завершится самостоятельно,
timeout отправит ей сигнал завершения.При необходимости можно указать другой сигнал:
bash id="x4pqsn"
$ timeout -s SIGKILL 5m command
Это удобно для автоматизации, резервного копирования, тестов и CI, где зависший процесс не должен блокировать выполнение остальных задач.
Команда возвращает код завершения, поэтому её легко использовать в shell-сценариях без дополнительных конструкций.
timeout позволяет сделать любой сценарий устойчивее к зависаниям буквально одной строкой.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-подключениями.Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8❤3👎1
Знали, что можно экспериментировать с mount, вообще не затрагивая основную систему?
Обычно любые операции с
Но Linux позволяет создать собственный
Для большинства операций потребуется
Новая оболочка получает собственное пространство монтирования. Любые последующие
Например:
Или можно проверить сложный сценарий с
Когда завершается последний процесс в этом
🔥 Если нужно безопасно проверить сложные операции с монтированием или воспроизвести окружение без виртуальной машины и контейнера —
🚪 Linux Ready | #совет
Обычно любые операции с
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.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 и другие.
Сохрани, чтобы не потерять!
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, вообще не затрагивая основную систему?
Обычно любые операции с
Но Linux позволяет создать собственный
Для большинства операций потребуется
Новая оболочка получает собственное пространство монтирования. Любые последующие
Например:
Или можно проверить сложный сценарий с
Когда завершается последний процесс в этом
🔥 Если нужно безопасно проверить сложные операции с монтированием или воспроизвести окружение без виртуальной машины и контейнера —
🚪 Linux Ready | #совет
Обычно любые операции с
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.Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤8🔥7😁1
Права доступа защищают файлы внутри работающей системы, но не спасают при прямом доступе к накопителю или его
snapshot. LUKS шифрует блочное устройство целиком, поэтому без ключа прочитать его содержимое невозможно.В этом посте:
• Проверяем выбранный диск перед шифрованием;
• Создаём LUKS-контейнер через cryptsetup;
• Разблокируем его как обычное устройство через /dev/mapper;
• Создаём файловую систему, монтируем и безопасно закрываем контейнер.
Так можно отдельно защищать диски с бэкапами, дампами баз данных и другими данными, не меняя приложения, которые с ними работают.
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
В репозитории собраны команды для получения информации о системе, поиска и просмотра файлов, монтирования дисков, работы с файловыми системами, резервного копирования и обработки текста через grep, sed и awk. Есть отдельные разделы по сети, iptables, процессам, мониторингу и диагностике с top, ps, lsof, strace, tcpdump, rsync и другими утилитами.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍11🔥6
В этой статье:
• Узнаете, как быстро определить, где проблема: на сервере, в сети или у провайдера;• Разберёте диагностику VDS с помощью ping, traceroute, MTR, curl, htop, iostat и других Linux-утилит;• Познакомитесь с инструментами для мониторинга сети, ресурсов, дисков, портов и логов сервера.🔊 Продолжай читать на Habr!
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, а также полезные сочетания клавиш терминала.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝20👍11❤8🔥1
Почему rm удалил файл, но место на диске не освободилось!
На Linux-сервере можно удалить большой журнал через
Найти открытые удалённые файлы можно через:
Например, в выводе может быть:
Проверить, куда указывает дескриптор, и посмотреть его параметры можно через
Именно поэтому
Сравнить показания можно так:
Чтобы штатно освободить место, приложение должно закрыть старый открытый файл. Если оно не поддерживает повторное открытие журналов, обычно достаточно штатного перезапуска сервиса:
Для постоянно работающих служб предпочтительнее использовать поддерживаемый приложением механизм повторного открытия журналов без полного перезапуска. Например, nginx умеет переоткрывать лог-файлы:
Поэтому для ротации журналов обычно используют
В аварийной ситуации удалённый файл можно обнулить через его открытый файловый дескриптор:
Но это именно аварийный приём. Если процесс пишет без
Проверить флаги открытого дескриптора и текущую позицию можно через:
Расхождение между
🔥 Если после
🚪 Linux Ready | #практика
На 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 место не освободилось, процесс, скорее всего, продолжает удерживать удалённый файл открытым. Блоки будут окончательно освобождены, когда исчезнут все открытые ссылки на него.Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🤝9🔥5❤2👎1
Почему rm удалил файл, но место на диске не освободилось!
На Linux-сервере можно удалить большой журнал через
Найти открытые удалённые файлы можно через:
Например, в выводе может быть:
Проверить, куда указывает дескриптор, и посмотреть его параметры можно через
Именно поэтому
Сравнить показания можно так:
Чтобы штатно освободить место, приложение должно закрыть старый открытый файл. Если оно не поддерживает повторное открытие журналов, обычно достаточно штатного перезапуска сервиса:
Для постоянно работающих служб предпочтительнее использовать поддерживаемый приложением механизм повторного открытия журналов без полного перезапуска. Например, nginx умеет переоткрывать лог-файлы:
Поэтому для ротации журналов обычно используют
В аварийной ситуации удалённый файл можно обнулить через его открытый файловый дескриптор:
Но это именно аварийный приём. Если процесс пишет без
Проверить флаги открытого дескриптора и текущую позицию можно через:
Расхождение между
🔥 Если после
🚪 Linux Ready | #практика
На 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 место не освободилось, процесс, скорее всего, продолжает удерживать удалённый файл открытым. Блоки будут окончательно освобождены, когда исчезнут все открытые ссылки на него.Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤8🔥6