This media is not supported in your browser
VIEW IN TELEGRAM
Отличный репозиторий с реальными вопросами, которые проверяют знания Linux и DevOps. Здесь есть вопросы по командам, процессам, файловым системам, сетям, bash и другим темам, которые часто встречаются в задачах и на собеседованиях.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥10🤝7❤2
Скрипт с автозапуском: чтобы не забыть — автоматизируй!
Хочешь, чтобы скрипт сам запускался при включении Linux? Например, для логирования, запуска сервисов или отправки уведомлений. Сделать это можно через
Сначала создаём bash-скрипт, который будет выполняться при загрузке. Пусть он, например, записывает время старта в лог-файл:
Сохрани его как /usr/local/bin/boot-script,sh и сделай исполняемым:
Теперь создаём unit-файл systemd:
/etc/systemd/system/boot-script.service
Тип
А
Осталось активировать сервис:
Теперь скрипт будет выполняться каждый раз при загрузке системы. Убедиться в этом можно, посмотрев лог:
🔥 Удобно, если хочешь автоматизировать повседневные задачи — без crontab и лишних костылей.
➡️ DevOps Ready | #практика
Хочешь, чтобы скрипт сам запускался при включении Linux? Например, для логирования, запуска сервисов или отправки уведомлений. Сделать это можно через
systemd — просто, нативно и надёжно.Сначала создаём bash-скрипт, который будет выполняться при загрузке. Пусть он, например, записывает время старта в лог-файл:
#!/bin/bash
echo "Система запущена: $(date)" >> /var/log/boot-script.log
Сохрани его как /usr/local/bin/boot-script,sh и сделай исполняемым:
chmod +x /usr/local/bin/boot-script.sh
Теперь создаём unit-файл systemd:
/etc/systemd/system/boot-script.service
[Unit]
Description=Мой автозапускаемый скрипт
After=network.target
[Service]
ExecStart=/usr/local/bin/boot-script.sh
Type=oneshot
[Install]
WantedBy=multi-user.target
After=network.target означает, что скрипт выполнится только после запуска сети. Тип
oneshot говорит, что это однократное выполнение. А
WantedBy=multi-user.target позволяет запустить скрипт при входе в основную многопользовательскую среду (то есть обычная загрузка без GUI).Осталось активировать сервис:
sudo systemctl daemon-reexec
sudo systemctl enable boot-script.service
sudo systemctl start boot-script.service
Теперь скрипт будет выполняться каждый раз при загрузке системы. Убедиться в этом можно, посмотрев лог:
cat /var/log/boot-script.log
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤9🔥8
Например, Reflected XSS выполняется сразу после перехода по вредоносной ссылке, а Stored XSS сохраняется в базе и срабатывает у всех пользователей.
На картинке — 3 основных типа XSS, которые важно различать при разработке и ревью кода.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥6🤝6👍3
Разрежённые файлы (sparse files) и экономия диска!
В Linux файл может иметь логический размер, превышающий фактически занятое место на диске. Незаписанные области представлены как дыры (holes) и физически места не занимают.
Создание файла большого размера без записи данных:
Файл имеет логический размер 10G, но почти не занимает место на диске.
Проверка:
Создание sparse-файла через
Смещение файлового офсета устанавливается на 10G без записи данных — создаётся файл с дырой.
Частичная запись данных:
Физически будет занят только небольшой участок около 1G, остальное останется дырами.
Просмотр расположения данных:
Показывает, какие диапазоны файла реально занимают блоки на диске (для классических FS вроде ext4/xfs).
Освобождение места внутри существующего файла, автоматическое преобразование участков, заполненных нулями, в дыры:
Точечное выбивание физических блоков с сохранением логического размера:
Корректное копирование sparse-файлов:
Для архивов:
Важно: поддержка sparse-файлов и hole punching зависит от файловой системы и её конфигурации (ext4, xfs — поддерживают).
🔥 Sparse-файлы — базовый механизм экономии диска для образов, дампов и крупных артефактов.
➡️ DevOps Ready | #практика
В Linux файл может иметь логический размер, превышающий фактически занятое место на диске. Незаписанные области представлены как дыры (holes) и физически места не занимают.
Создание файла большого размера без записи данных:
truncate -s 10G bigfile.img
Файл имеет логический размер 10G, но почти не занимает место на диске.
Проверка:
ls -lh bigfile.img
du -h bigfile.img
ls показывает логический размер файла, du — реально занятое дисковое пространство.Создание sparse-файла через
dd:dd if=/dev/zero of=bigfile.img bs=1 count=0 seek=10G
Смещение файлового офсета устанавливается на 10G без записи данных — создаётся файл с дырой.
Частичная запись данных:
printf 'DATA' | dd of=bigfile.img bs=1 seek=1G conv=notrunc
Физически будет занят только небольшой участок около 1G, остальное останется дырами.
Просмотр расположения данных:
filefrag -v bigfile.img
Показывает, какие диапазоны файла реально занимают блоки на диске (для классических FS вроде ext4/xfs).
Освобождение места внутри существующего файла, автоматическое преобразование участков, заполненных нулями, в дыры:
fallocate -d bigfile.img
Точечное выбивание физических блоков с сохранением логического размера:
fallocate --punch-hole --offset 1G --length 500M --keep-size bigfile.img
Корректное копирование sparse-файлов:
cp --sparse=always src.img dst.img
Для архивов:
tar --sparse -cf backup.tar bigfile.img
Важно: поддержка sparse-файлов и hole punching зависит от файловой системы и её конфигурации (ext4, xfs — поддерживают).
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍7🔥6🤝1
В этом посте собраны методы управления Environment Variables: от простого вывода списка до маскирования данных и передачи значений между этапами сборки. Работают в GitLab CI, GitHub Actions и локальных Docker-контейнерах.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥7👍5🤝4
This media is not supported in your browser
VIEW IN TELEGRAM
Особенно кайф для тех, кто работает в Linux/DevOps/CI среде и хочет разбираться, а не наугад копипастить из StackOverflow.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤17🔥14🤝9
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь собран большой русскоязычный список полезного софта: консольные утилиты, системные инструменты, графические приложения, окружения рабочего стола, а также ссылки на форумы и полезные ресурсы по Linux.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤝9❤7🔥1
Как убрать зависший процесс, дав ему шанс завершиться нормально?
Иногда процесс нужно убрать, но
Сначала отправь корректный сигнал завершения:
Подожди пару секунд (значение условное, часто этого достаточно):
Если не вышел, завершаем принудительно:
🔥
➡️ DevOps Ready | #совет
Иногда процесс нужно убрать, но
SIGKILL сразу не всегда правильно, можно потерять буферы, получить битые временные файлы.Сначала отправь корректный сигнал завершения:
kill -TERM 1234
SIGTERM даёт процессу шанс закрыть файлы, сохранить состояние и выйти.Подожди пару секунд (значение условное, часто этого достаточно):
sleep 2
Если не вышел, завершаем принудительно:
kill -KILL 1234 2>/dev/null || true
SIGKILL нельзя перехватить: ядро завершит процесс (за исключением редких случаев D-state из-за I/O).SIGTERM - позволяет процессу корректно освободить ресурсы и закрыть файловые дескрипторы; SIGKILL используй только как fallback, когда процесс игнорирует сигналы и завис.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤝10🔥8
Почему grep выводит данные с задержкой в пайпах?
Бывало
Это не баг. Большинство CLI-утилит буферизуют
Классический сценарий мониторинга логов без задержек:
Альтернатива специально для
Работает и с другими командами:
🔥 Если команда в пайпе не отвечает, почти всегда виновата буферизация.
➡️ DevOps Ready | #совет
Бывало
tail -f app.log | grep ERROR - лог пишется, а grep молчит и выводит всё сразу через секунды?Это не баг. Большинство CLI-утилит буферизуют
stdout, когда работают не в TTY, а в пайпе. Отключаем буферизацию:stdbuf -oL grep "ERROR" app.log
-oL — построчный вывод (line-buffered).Классический сценарий мониторинга логов без задержек:
tail -f app.log | stdbuf -oL grep "ERROR"
Альтернатива специально для
grep:tail -f app.log | grep --line-buffered "ERROR"
Работает и с другими командами:
journalctl -f | stdbuf -oL grep nginx
stdbuf -oL (или grep --line-buffered) возвращает вывод без переписывания пайпа.Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤6🔥6🤝4
Например, tar czf создаёт архив с сжатием, а tar xzf позволяет быстро распаковать .tar.gz.
На картинке — команды tar, которые стоит держать под рукой: создание архивов, распаковка, просмотр содержимого и работа с gzip / bzip2 / xz.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥7👍5🤝3
This media is not supported in your browser
VIEW IN TELEGRAM
Этот ресурс объясняет основы и важные концепции через примеры и живые объяснения. Тут ты найдёшь темы по синтаксису, функциям, структурам данных, алгоритмам и архитектуре. Полезно как новичкам, так и тем, кто хочет укрепить фундамент, понять внутренние механизмы и перестать путаться в деталях.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍9❤4🤝4
В этом посте собраны ключевые параметры и типы проверок (Liveness, Readiness, Startup), которые помогут кластеру понять, когда ваш контейнер готов принимать трафик, а когда его пора перезагрузить.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥10👍5🤝1