Например,
set -euo pipefail помогает избежать многих ошибок в скриптах, а trap позволяет корректно обрабатывать сигналы и выполнять очистку перед завершением программы.На картинке — основные конструкции Bash: переменные, условия, циклы, функции, массивы, работа с файлами, аргументы командной строки, перенаправление потоков, обработка сигналов и другое.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥7❤6
Работа с ss — замена netstat для диагностики сетевых подключений!
Во многих руководствах до сих пор встречается:
Но в большинстве современных Linux-дистрибутивов рекомендуется использовать:
Утилита входит в пакет
Посмотреть TCP-сокеты:
Посмотреть все TCP-соединения в числовом виде:
Посмотреть прослушивающие TCP-сокеты и UDP-сокеты:
Если нужно увидеть процессы, которым принадлежат сокеты:
Вывод покажет адреса прослушивания, порты, PID и имя процесса.
Частая задача — выяснить, кто занимает конкретный порт. Например, проверить порт 8080:
Либо отфильтровать сокеты, прослушивающие порт 443:
При диагностике веб-серверов полезно смотреть количество установленных соединений. Например:
Состояния соединений отображаются в первом столбце, например:
Подсчитать количество активных соединений:
Это помогает быстро оценить текущую нагрузку на сервис.
Для анализа SSH-подключений:
Либо так:
В зависимости от того, анализируется сервер или клиент.
Посмотреть только сокеты в состоянии
Так можно быстро проверить, действительно ли приложение слушает нужный порт.
Например, после запуска сервиса:
Для диагностики проблем с соединениями полезно смотреть сокеты в ожидании закрытия:
Большое количество
Показать общую статистику по протоколам:
Например:
Конкретные значения будут зависеть от текущего состояния системы. Команда позволяет быстро оценить сетевую активность системы.
Практический пример диагностики недоступного веб-приложения. Сначала проверяем, слушает ли процесс порт:
Затем смотрим активные подключения:
Если подключений нет — проблема может быть в балансировщике, firewall или DNS.
Если подключения есть, но много соединений находится в состоянии:
Стоит проверить сетевую доступность, настройки фильтрации трафика и работу балансировщика.
Дополнительно полезно знать:
Команда выводит расширенную информацию о TCP-соединениях: RTT, размер окна, retransmits и другие параметры, которые часто используются при анализе сетевых проблем.
🔥
🚪 Linux Ready | #практика
Во многих руководствах до сих пор встречается:
netstat
Но в большинстве современных Linux-дистрибутивов рекомендуется использовать:
ss
Утилита входит в пакет
iproute2, работает быстрее и получает информацию через интерфейсы ядра Linux без необходимости парсинга большого объёма данных из /proc.Посмотреть TCP-сокеты:
ss -t
Посмотреть все TCP-соединения в числовом виде:
ss -tan
Посмотреть прослушивающие TCP-сокеты и UDP-сокеты:
ss -tuln
Если нужно увидеть процессы, которым принадлежат сокеты:
ss -tulpn
Вывод покажет адреса прослушивания, порты, PID и имя процесса.
Частая задача — выяснить, кто занимает конкретный порт. Например, проверить порт 8080:
ss -ltnp '( sport = :8080 )'
Либо отфильтровать сокеты, прослушивающие порт 443:
ss -ltnp '( sport = :443 )'
При диагностике веб-серверов полезно смотреть количество установленных соединений. Например:
ss -tan
Состояния соединений отображаются в первом столбце, например:
LISTEN
ESTAB
TIME-WAIT
CLOSE-WAIT
SYN-RECV
Подсчитать количество активных соединений:
ss -Htan state established | wc -l
Это помогает быстро оценить текущую нагрузку на сервис.
Для анализа SSH-подключений:
ss -tn '( sport = :22 )'
Либо так:
ss -tn '( dport = :22 )'
В зависимости от того, анализируется сервер или клиент.
Посмотреть только сокеты в состоянии
LISTEN:ss -ltn
Так можно быстро проверить, действительно ли приложение слушает нужный порт.
Например, после запуска сервиса:
ss -ltnp | grep 3000
Для диагностики проблем с соединениями полезно смотреть сокеты в ожидании закрытия:
ss -tan state close-wait
Большое количество
CLOSE-WAIT часто указывает на ошибки в приложении, которое некорректно закрывает соединения.Показать общую статистику по протоколам:
ss -s
Например:
TCP: 523 established
UDP: 42
INET: 610
Конкретные значения будут зависеть от текущего состояния системы. Команда позволяет быстро оценить сетевую активность системы.
Практический пример диагностики недоступного веб-приложения. Сначала проверяем, слушает ли процесс порт:
ss -ltnp '( sport = :8080 )'
Затем смотрим активные подключения:
ss -tan '( sport = :8080 )'
Если подключений нет — проблема может быть в балансировщике, firewall или DNS.
Если подключения есть, но много соединений находится в состоянии:
SYN-RECV
Стоит проверить сетевую доступность, настройки фильтрации трафика и работу балансировщика.
Дополнительно полезно знать:
ss -i
Команда выводит расширенную информацию о TCP-соединениях: RTT, размер окна, retransmits и другие параметры, которые часто используются при анализе сетевых проблем.
ss — один из основных инструментов диагностики сети в современных Linux-системах и в большинстве случаев является предпочтительной заменой netstat благодаря более высокой скорости работы и расширенным возможностям фильтрации.Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍8🔥5🤝2
This media is not supported in your browser
VIEW IN TELEGRAM
В этом репозитории подробно разбирается внутреннее устройство Linux: процессы, память, системные вызовы, ELF и работа системы на низком уровне. Материал построен на практических примерах за счёт чего сложные темы намного проще понять. Хорошо подойдёт разработчикам, DevOps и тем, кто хочет лучше понимать, как Linux работает под капотом.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍7🤝5👎1😁1
Знали, что Bash умеет генерировать десятки путей и аргументов ещё до запуска команды?
Большинство используют циклы или копируют похожие команды несколько раз, хотя Bash умеет делать это самостоятельно.
Например, нужно быстро создать структуру нового проекта:
Shell автоматически развернёт команду в несколько аргументов ещё до запуска
Точно так же удобно создавать резервные копии:
Фактически Bash выполнит:
Можно работать сразу с несколькими каталогами:
Команда мгновенно превратится в набор путей для всех указанных директорий.
Поддерживаются и диапазоны:
В результате будут созданы файлы от
🔥
🚪 Linux Ready | #совет
Большинство используют циклы или копируют похожие команды несколько раз, хотя Bash умеет делать это самостоятельно.
Например, нужно быстро создать структуру нового проекта:
$ mkdir -p project/{src,tests,docs}Shell автоматически развернёт команду в несколько аргументов ещё до запуска
mkdir.Точно так же удобно создавать резервные копии:
$ cp app.{conf,conf.bak}Фактически Bash выполнит:
$ cp app.conf app.conf.bak
Можно работать сразу с несколькими каталогами:
$ echo /var/log/{nginx,apache2,redis}/*.logКоманда мгновенно превратится в набор путей для всех указанных директорий.
Поддерживаются и диапазоны:
$ touch file{1..10}.txtВ результате будут созданы файлы от
file1.txt до file10.txt без единого цикла.Brace expansion выполняется внутри Bash ещё до запуска программы, поэтому работает быстрее и чище, чем дополнительные shell-конструкции.Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9🤝6❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Удобная шпаргалка, в которой собраны команды для повседневной работы. Здесь можно быстро найти команды для навигации по файловой системе, управления файлами и каталогами, работы с процессами, пользователями, сетью и правами доступа. Материал отлично подойдёт как новичкам, которые только знакомятся с Linux, так и разработчикам, которым нужен быстрый справочник.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍7🔥6👎1
Большинство задач на удалённом сервере можно выполнять без входа по SSH!
Многие подключаются к серверу, выполняют одну команду, выходят, затем подключаются снова.
На самом деле SSH умеет запускать команды напрямую:
Результат сразу приходит в локальный терминал без интерактивной сессии.
Можно передавать данные через обычные каналы Linux:
Дамп базы окажется на локальной машине, при этом временный файл на сервере не создаётся.
Можно копировать целые каталоги потоково:
Архив никогда не записывается на диск сервера и сразу распаковывается локально.
🔥 Такой подход удобно использовать в скриптах, автоматизации, резервном копировании и диагностике. Часто оказывается, что для выполнения задачи полноценная SSH-сессия вообще не нужна.
🚪 Linux Ready | #совет
Многие подключаются к серверу, выполняют одну команду, выходят, затем подключаются снова.
На самом деле SSH умеет запускать команды напрямую:
$ ssh user@server 'journalctl -n 1000'
Результат сразу приходит в локальный терминал без интерактивной сессии.
Можно передавать данные через обычные каналы Linux:
$ ssh user@server 'mysqldump db' > dump.sql
Дамп базы окажется на локальной машине, при этом временный файл на сервере не создаётся.
Можно копировать целые каталоги потоково:
$ ssh user@server 'tar czf - /var/log' | tar xzf -
Архив никогда не записывается на диск сервера и сразу распаковывается локально.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥9❤7
Pipes позволяют процессам обмениваться данными напрямую: вывод одной программы становится входом для другой. Именно благодаря этому работают привычные конвейеры команд через символ
|.На картинке показаны анонимные и именованные каналы (FIFO), схема их работы, примеры создания и основные команды для использования.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥7❤5🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
На сайте собрана удобная шпаргалка по основным Linux-командам, которая помогает быстро находить нужные команды для повседневной работы. Здесь есть всё необходимое: навигация по файловой системе, управление файлами и каталогами, работа с процессами, сетью, пользователями и правами доступа.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍10🤝3
В Linux можно продолжать читать файл даже после его удаления!
В Linux процесс работает не с именем файла, а с открытым файловым дескриптором. Пока дескриптор остаётся открытым, удаление имени файла никак не влияет на возможность чтения данных.
Откройте файл через отдельный файловый дескриптор:
Теперь удалите файл обычной командой:
Файл исчезнет из каталога и больше не будет доступен по имени.
Но дескриптор останется открытым:
Содержимое файла продолжит читаться, хотя самого файла в файловой системе уже нет.
Поэтому иногда после удаления большого журнала свободное место на диске не появляется. Процесс продолжает удерживать открытый дескриптор, а ядро освобождает место только после его закрытия.
🔥 Понимание того, как работают файловые дескрипторы, помогает быстрее находить причины пропавшего места на диске и разбираться с поведением сервисов.
🚪 Linux Ready | #совет
В Linux процесс работает не с именем файла, а с открытым файловым дескриптором. Пока дескриптор остаётся открытым, удаление имени файла никак не влияет на возможность чтения данных.
Откройте файл через отдельный файловый дескриптор:
$ exec 3< huge.log
Теперь удалите файл обычной командой:
$ rm huge.log
Файл исчезнет из каталога и больше не будет доступен по имени.
Но дескриптор останется открытым:
$ cat <&3
Содержимое файла продолжит читаться, хотя самого файла в файловой системе уже нет.
Поэтому иногда после удаления большого журнала свободное место на диске не появляется. Процесс продолжает удерживать открытый дескриптор, а ядро освобождает место только после его закрытия.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤9🔥7🤝1
Например,
nmcli device wifi list показывает доступные Wi-Fi сети, nmcli connection show выводит список всех подключений, а nmcli connection up <name> активирует нужное подключение.На картинке — полезные команды для работы с NetworkManager: управление интерфейсами, Wi-Fi, подключениями и настройкой статического IP.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍9🤝6❤1
Разбираемся с диагностикой утечек дискового пространства!
Иногда сервер начинает терять свободное место, но при этом
С точки зрения Linux файл уже удалён из дерева каталогов, но
Базовая проверка состояния диска:
Это первый шаг — смотрим, есть ли реальное заполнение файловой системы. Если раздел почти полный, а по каталогам картина не бьётся с ожиданиями, дальше имеет смысл копать глубже.
Сравнение с фактическим использованием:
Если
Поиск удалённых файлов, удерживаемых процессами:
Здесь важный момент —
Типичный пример:
Файл исчез из каталога, но процесс продолжает писать в него. На практике это часто логи или временные буферы.
Быстро отфильтровать только проблемные записи:
Удобно, когда вывода много и нужно сразу увидеть реальные утечки.
Посмотреть открытые дескрипторы процесса:
Каждый файл там — это активный файловый дескриптор. Если среди них есть (deleted), это и есть удерживаемое место.
Приближённая оценка объёма:
Честно говоря, это грубая оценка.
Как освобождается место: самый нормальный вариант — дать процессу корректно закрыть файл:
Если это сервис с поддержкой переоткрытия логов:
Классический сценарий — лог-файл удалили вручную через
Если
🚪 Linux Ready | #практика
Иногда сервер начинает терять свободное место, но при этом
du не показывает ничего критичного. Один из типовых сценариев — удалённые файлы, которые продолжают удерживаться процессами.С точки зрения Linux файл уже удалён из дерева каталогов, но
inode и блоки остаются заняты, пока хотя бы один процесс держит файловый дескриптор открытым.Базовая проверка состояния диска:
df -h
Это первый шаг — смотрим, есть ли реальное заполнение файловой системы. Если раздел почти полный, а по каталогам картина не бьётся с ожиданиями, дальше имеет смысл копать глубже.
Сравнение с фактическим использованием:
du -xhd1 /var
-x важен: он ограничивает обход текущей файловой системой и исключает мусор с других mount points.Если
df показывает занято много, а du — нет, почти всегда это либо удалённые открытые файлы, либо редкие случаи с скрытыми mount/overlay слоями (контейнеры тоже сюда попадают).Поиск удалённых файлов, удерживаемых процессами:
sudo lsof +L1
Здесь важный момент —
+L1 означает link count < 1, то есть файл уже удалён, но ещё открыт процессом.Типичный пример:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NAME
java 1234 app 45w REG 8,1 12G 0 /var/log/app.log (deleted)
Файл исчез из каталога, но процесс продолжает писать в него. На практике это часто логи или временные буферы.
Быстро отфильтровать только проблемные записи:
sudo lsof +L1 | grep deleted
Удобно, когда вывода много и нужно сразу увидеть реальные утечки.
Посмотреть открытые дескрипторы процесса:
ls -l /proc/PID/fd
Каждый файл там — это активный файловый дескриптор. Если среди них есть (deleted), это и есть удерживаемое место.
Приближённая оценка объёма:
sudo lsof +L1 | awk '{print $7}' | grep -E '^[0-9]+$' | awk '{sum+=$1} END {print sum/1024/1024/1024 " GB"}'
Честно говоря, это грубая оценка.
SIZE/OFF не всегда чистый байтовый формат, поэтому цифра больше для ориентира, чем для точного аудита.Как освобождается место: самый нормальный вариант — дать процессу корректно закрыть файл:
sudo systemctl restart service_name
Если это сервис с поддержкой переоткрытия логов:
kill -HUP PID
Классический сценарий — лог-файл удалили вручную через
rm, но процесс продолжает писать в уже открытый inode. В итоге место на диске исчезло, хотя файлов как будто нет.Если
df показывает заполнение, а du не объясняет куда делось место — первым делом проверяются открытые удалённые файлы через lsof +L1. Это один из самых быстрых способов найти невидимую утечку диска в Linux-системах.Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥8🤝6❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь можно найти подробные разборы Linux-команд, Bash-скриптов, работы с файлами, процессами, правами доступа, пакетами и системным администрированием. Материалы сопровождаются примерами команд и практическими объяснениями, что делает обучение более понятным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤5🔥5
Любую уже запущенную команду можно отправить в background, даже если забыли поставить &!
Очень частая ситуация. Запустили долгую команду, сборку, скрипт,
Большинство в такой ситуации останавливают процесс и запускают всё заново с
На самом деле это не нужно.
Если команда уже работает в
Нажмите:
Shell отправит процессу сигнал
Теперь достаточно выполнить:
Процесс продолжит работу уже в
Проверить список фоновых задач можно так:
Если позже нужно вернуть процесс обратно в
🔥 Полезный встроенный механизм
🚪 Linux Ready | #совет
Очень частая ситуация. Запустили долгую команду, сборку, скрипт,
rsync или анализ логов и только потом поняли, что терминал оказался заблокирован.Большинство в такой ситуации останавливают процесс и запускают всё заново с
&.На самом деле это не нужно.
Если команда уже работает в
foreground:$ sleep 1000
Нажмите:
Ctrl + Z
Shell отправит процессу сигнал
SIGTSTP и временно остановит выполнение.Теперь достаточно выполнить:
$ bg
Процесс продолжит работу уже в
background, а терминал снова станет свободным.Проверить список фоновых задач можно так:
$ jobs
Если позже нужно вернуть процесс обратно в
foreground:$ fg
job control в Bash. Он особенно выручает при долгих командах, когда перезапуск означает потерю времени или состояния.Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍10🔥8
Диагностика проблем с DNS в Linux!
Многие сетевые проблемы на Linux-серверах оказываются связаны не с firewall, маршрутизацией или приложением, а именно с DNS. Симптомы обычно такие: curl зависает, пакетный менеджер не работает, API недоступен по домену, но по IP всё открывается.
В таких случаях сначала стоит проверить, как система резолвит DNS. Первое, что нужно посмотреть — какие DNS-серверы используются системой.
В классических системах этого достаточно. Но в современных дистрибутивах с systemd-resolved файл часто указывает только на локальный stub-resolver.
Если используется systemd-resolved, реальные DNS лучше смотреть так:
Команда показывает активные DNS-серверы для интерфейсов и текущее состояние resolver’а.
Дальше стоит проверить, как система реально разрешает имя.
Это полезнее, чем кажется. В отличие от
Чтобы исключить сам DNS-сервер, полезно сделать прямой запрос.
Или через Cloudflare:
Так быстро становится понятно, проблема локальная или внешняя.
Даже если DNS отвечает, стоит посмотреть время ответа.
Смотри на строку:
Если нужно проверить весь путь разрешения, помогает
Также бывает полезно проверить reverse DNS.
Обратное разрешение часто используется в почтовой инфраструктуре, мониторинге и системах контроля доступа.
Если используется systemd-resolved, можно очистить локальный кэш.
А затем посмотреть статистику.
Если приложение жалуется на DNS, но
Особенно строку hosts, потому что она определяет порядок источников разрешения имён.
Для финальной диагностики полезно посмотреть DNS-трафик в реальном времени.
🔥 Вывод: хорошая DNS-диагностика обычно начинается с трёх вещей: проверки системного resolver’а, прямых запросов к DNS-серверам и анализа сетевого трафика. Такой подход позволяет найти большинство DNS-проблем намного быстрее, чем полный разбор всей сетевой подсистемы.
🚪 Linux Ready | #практика
Многие сетевые проблемы на Linux-серверах оказываются связаны не с firewall, маршрутизацией или приложением, а именно с DNS. Симптомы обычно такие: curl зависает, пакетный менеджер не работает, API недоступен по домену, но по IP всё открывается.
В таких случаях сначала стоит проверить, как система резолвит DNS. Первое, что нужно посмотреть — какие DNS-серверы используются системой.
cat /etc/resolv.conf
В классических системах этого достаточно. Но в современных дистрибутивах с systemd-resolved файл часто указывает только на локальный stub-resolver.
nameserver 127.0.0.53
Если используется systemd-resolved, реальные DNS лучше смотреть так:
resolvectl status
Команда показывает активные DNS-серверы для интерфейсов и текущее состояние resolver’а.
Дальше стоит проверить, как система реально разрешает имя.
getent hosts google.com
Это полезнее, чем кажется. В отличие от
dig и nslookup, getent использует системный механизм разрешения имён и ближе к тому, как работают реальные приложения. Если getent не работает, а dig работает — проблема обычно в локальной конфигурации.Чтобы исключить сам DNS-сервер, полезно сделать прямой запрос.
dig google.com @8.8.8.8
Или через Cloudflare:
dig google.com @1.1.1.1
Так быстро становится понятно, проблема локальная или внешняя.
Даже если DNS отвечает, стоит посмотреть время ответа.
dig google.com
Смотри на строку:
;; Query time: X msec
Если нужно проверить весь путь разрешения, помогает
trace.dig +trace google.com
Также бывает полезно проверить reverse DNS.
dig -x 8.8.8.8
Обратное разрешение часто используется в почтовой инфраструктуре, мониторинге и системах контроля доступа.
Если используется systemd-resolved, можно очистить локальный кэш.
sudo resolvectl flush-caches
А затем посмотреть статистику.
resolvectl statistics
Если приложение жалуется на DNS, но
dig работает корректно, стоит проверить NSS.cat /etc/nsswitch.conf
Особенно строку hosts, потому что она определяет порядок источников разрешения имён.
Для финальной диагностики полезно посмотреть DNS-трафик в реальном времени.
sudo tcpdump -ni any port 53
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥7❤5
Запускаем только один экземпляр скрипта с помощью flock!
Наверняка сталкивались с такой ситуацией: скрипт ещё работает, а
Представьте простой пример. Ваш скрипт выполняется 90 секунд, а
Уже через минуту появится второй экземпляр, который начнёт работать параллельно с первым. Если выполнение иногда занимает ещё больше времени, количество процессов может быстро вырасти.
Именно для таких случаев в Linux есть
Самый простой вариант выглядит так:
Первый процесс получит блокировку, а следующий будет ждать, пока она освободится.
Но, честно говоря, для
Если блокировка уже занята, команда сразу завершится с ненулевым кодом, а новый экземпляр просто не запустится.
Именно поэтому в
Только не забудьте, что пользователь, от имени которого работает
Если же вы хотите защитить скрипт независимо от того, как его запускают — через
Здесь
🔥
🚪 Linux Ready | #практика
Наверняка сталкивались с такой ситуацией: скрипт ещё работает, а
cron уже запускает следующий экземпляр. Или кто-то решил запустить его вручную, не подозревая, что процесс уже выполняется. В итоге одновременно работают несколько одинаковых процессов. Они начинают менять одни и те же файлы, выполнять одну и ту же работу, создавать лишнюю нагрузку, а иногда ещё и ломать результаты друг друга.Представьте простой пример. Ваш скрипт выполняется 90 секунд, а
cron запускает его каждую минуту:* * * * * /opt/scripts/backup.sh
Уже через минуту появится второй экземпляр, который начнёт работать параллельно с первым. Если выполнение иногда занимает ещё больше времени, количество процессов может быстро вырасти.
Именно для таких случаев в Linux есть
flock. Он использует файловые блокировки ядра и позволяет сказать: пока этот скрипт работает, второй запуск не начинай.Самый простой вариант выглядит так:
flock /tmp/backup.lock /opt/scripts/backup.sh
Первый процесс получит блокировку, а следующий будет ждать, пока она освободится.
Но, честно говоря, для
cron ожидание обычно не имеет смысла. Проще пропустить очередной запуск, чем держать очередь из процессов. Поэтому чаще используют ключ -n:flock -n /tmp/backup.lock /opt/scripts/backup.sh
Если блокировка уже занята, команда сразу завершится с ненулевым кодом, а новый экземпляр просто не запустится.
Именно поэтому в
cron обычно встречается такой вариант:* * * * * /usr/bin/flock -n /var/lock/backup.lock /opt/scripts/backup.sh
Только не забудьте, что пользователь, от имени которого работает
cron, должен иметь доступ к файлу блокировки.Если же вы хотите защитить скрипт независимо от того, как его запускают — через
cron, вручную или из другого скрипта, — блокировку можно поставить прямо внутри него:#!/usr/bin/env bash
exec 200>/var/lock/backup.lock
flock -n 200 || exit 1
echo "Работает только один экземпляр"
Здесь
exec открывает файл блокировки и связывает его с файловым дескриптором 200, а flock устанавливает блокировку именно на этот дескриптор. Пока дескриптор открыт, блокировка остаётся активной. Даже если процесс аварийно завершится, ядро автоматически её снимет, поэтому вечных блокировок здесь не бывает.flock использует рекомендательные (advisory) блокировки. Это значит, что они работают только между процессами, которые сами используют flock для одного и того же файла блокировки. Если какая-то программа полностью игнорирует механизм блокировок, flock физически её не остановит.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍8❤5
Например,
curl -I позволяет проверить HTTP-заголовки сервера, curl -H добавить необходимые заголовки или токены авторизации, а curl -X POST отправить запрос к API из терминала.На картинке — основные команды curl, которые пригодятся при разработке, тестировании API, диагностике сетевых проблем и работе с Linux-серверами.
Сохрани, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍11🔥9
This media is not supported in your browser
VIEW IN TELEGRAM
Так сказал мой друг из Африки, когда увидел этот стол)
Не знаю уж че за сетап, меня зовут Саша и качественную необычную мебель из натурального дерева я делаю уже больше 12-ти лет, столько же занимаюсь и темой здоровья.
Когда я услышал, что до 10% смертности связано с сидячим образом жизни, меня это поразило и я задался целью делать максимально функциональные и полезные рабочие пространства, ибо геморрой в 30 это конечно довольно нишево, но все же сомнительно 😂
Ну а собрать такой комплект под свои задачи и при этом сразу прикинуть цены вы можете в удобном Mini App конструкторе
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤2👎2🔥2
Знали, почему большинство пользователи Linux почти всегда используют find вместе с -print0?
Обычная передача списка файлов через
Чтобы исключить эту проблему,
Теперь этот поток можно безопасно передать в
Так будут корректно обработаны любые допустимые имена файлов, независимо от пробелов, табуляции и других символов.
Тот же приём подходит для удаления файлов:
И для передачи файлов любой другой программе:
Именно связка
🔥 Если пишете shell-сценарии или автоматизацию, этот приём избавляет от целого класса трудноуловимых ошибок.
🚪 Linux Ready | #совет
Обычная передача списка файлов через
xargs небезопасна. Если имя файла содержит пробел, перевод строки, кавычки или другие специальные символы, команда может обработать его неправильно.Чтобы исключить эту проблему,
find умеет разделять имена файлов нулевым байтом:$ find . -type f -print0
Теперь этот поток можно безопасно передать в
xargs:$ find . -type f -print0 | xargs -0 sha256sum
Так будут корректно обработаны любые допустимые имена файлов, независимо от пробелов, табуляции и других символов.
Тот же приём подходит для удаления файлов:
$ find . -type f -print0 | xargs -0 rm
И для передачи файлов любой другой программе:
$ find . -type f -print0 | xargs -0 grep "TODO"
Именно связка
-print0 и -0 считается стандартным способом безопасной обработки имён файлов в Unix-подобных системах.Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥8❤6🤝1
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь собрано огромное количество полезных команд и практических заметок по Linux: работа с терминалом, файловой системой, процессами, сетью, сервисами, Docker, Git, PostgreSQL, Nginx и не только. Особенно ценно, что это не просто сухой список команд, а именно шпаргалка с примерами, пояснениями и полезными сценариями из практики.
Оставляю ссылочку: GitHub📱
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥5❤4
Контроль целостности системных утилит Linux через проверку хэш-сумм.
При компрометации сервера злоумышленники часто подменяют базовые системные бинарники (например,
Сформируем базу данных эталонных хэш-сумм для выбранных системных утилит и сохраним её в защищенный файл:
Файл базы данных успешно создан и содержит уникальные криптографические отпечатки чистых бинарников.
Напишем автоматический скрипт валидации, который сверяет текущее состояние файлов с ранее сохраненным эталоном:
Команда выполнит сверку всех строк и выведет предупреждение только в случае несовпадения хэшей.
Ожидаемый вывод:
Регулярный запуск такого скрипта через cron помогает вовремя заметить активность руткитов и троянов. Чтобы атакующий не смог подделать саму базу хэшей, обязательно храните эталонный файл
🚪 Linux Ready | #практика
При компрометации сервера злоумышленники часто подменяют базовые системные бинарники (например,
ss, ps или login) на модифицированные версии с бэкдорами. Мы напишем лаконичный bash-скрипт, который создаст эталонные слепки контрольных сумм SHA-256 для критически важных утилит и проверит их на предмет несанкционированных изменений. Этот базовый механизм Host IDS (интрузивного детектирования) позволяет оперативно обнаружить факт присутствия атакующего в системе.Сформируем базу данных эталонных хэш-сумм для выбранных системных утилит и сохраним её в защищенный файл:
# Создание эталонных хэшей для проверки
sha256sum /bin/ps /bin/ss /usr/bin/whoami > /root/sys_integrity.db
Файл базы данных успешно создан и содержит уникальные криптографические отпечатки чистых бинарников.
Напишем автоматический скрипт валидации, который сверяет текущее состояние файлов с ранее сохраненным эталоном:
# Скрипт проверки и вывода измененных файлов
sha256sum -c /root/sys_integrity.db 2>&1 | grep -v 'OK' || echo "Integrity check: SUCCESS"
Команда выполнит сверку всех строк и выведет предупреждение только в случае несовпадения хэшей.
# проверка (контрольная эмуляция подмены для проверки реакции парсера)
echo "test" >> /root/sys_integrity.db && sha256sum -c /root/sys_integrity.db 2>&1 | grep 'FAILED'
Ожидаемый вывод:
/root/sys_integrity.db: FAILED
# cleanup (удаление тестовой базы данных из системы)
rm -f /root/sys_integrity.db
Регулярный запуск такого скрипта через cron помогает вовремя заметить активность руткитов и троянов. Чтобы атакующий не смог подделать саму базу хэшей, обязательно храните эталонный файл
sys_integrity.db на удаленном сервере логирования или на флешке в режиме "только чтение".Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍8🤝3
Например, REST подходит для классических CRUD-операций, WebSocket — для приложений с обменом данными в реальном времени, GraphQL позволяет получать только нужные данные, а gRPC обеспечивает быстрый обмен между сервисами.
На картинке — 6 популярных архитектурных стилей и протоколов API, которые стоит знать каждому разработчику.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝10👍6🔥3