7 Aug 2026, 09:40 UTC140 views5 reactionsread 7 August 2026 eval: почему опасен и когда реально нужен
В Bash почти любую строку можно превратить в команду через eval. Он берёт переданный текст и запускает его как новый Bash-код.
Именно поэтому это один из самых спорных инструментов в shell-скриптах.
▪️Как работает eval
Простой пример:
cmd="ls -la"
eval "$cmd"
Bash сначала получает строку:
ls -la
а затем выполняет её как обычную команду.
▪️Где возникает проблема
Есл…
👍5
6 Aug 2026, 13:32 UTC215 views2 reactionsread 7 August 2026 Проверка доступности локальных Unix-сервисов: nc -U и curl --unix-socket
Не все сервисы в Linux слушают TCP-порты. Многие приложения работают только через UNIX-сокеты - локальные каналы связи между процессами.
Например:
/run/docker.sock
/run/php/php-fpm.sock
/run/containerd/containerd.sock
Снаружи такие сервисы не видны через обычный nmap, но внутри системы они могут иметь важное значение.
▪️Найти активные UNIX-…
👍2
5 Aug 2026, 14:42 UTC262 views5 reactionsread 7 August 2026 Почему sort | uniq не всегда работает так, как ожидается
Когда нужно убрать дубликаты, многие сразу пишут:
sort file.txt | uniq
Работает. Но только если понимать, что именно делает каждая команда.
▪️Как работает uniq
Распространённое заблуждение - uniq ищет все повторяющиеся строки.
На самом деле он удаляет только соседние дубликаты.
Например:
apple
banana
apple
orange
Если выполнить:
uniq file.txt
получим…
👍5
4 Aug 2026, 12:05 UTC285 views7 reactionsread 7 August 2026 mkfifo: обмен данными между процессами через именованные каналы
Обычный pipe:
command1 | command2
работает только пока запущены обе команды. Но иногда нужен постоянный канал, к которому разные процессы могут подключаться позже.
Для этого в Linux есть FIFO (named pipe).
▪️Создание именованного канала
mkfifo /tmp/my_pipe
Теперь /tmp/my_pipe выглядит как файл:
ls -l /tmp/my_pipe
Вывод:
prw-r--r-- 1 user user 0…
👍7
3 Aug 2026, 12:56 UTC356 views4 reactionsread 7 August 2026 Когда переменные пропадают
Одна из частых ловушек в bash - переменная изменилась… но снаружи осталась прежней. Причина почти всегда одна - subshell.
▪️ Что такое subshell. Subshell - это дочерний процесс bash. Он получает копию переменных, но изменения не возвращаются назад. Создается, например, здесь:
( command )
или в пайпах:
command | while read ...
▪️ Классическая проблема
count=0
echo -e "a\nb\nc" | w…
👍4
31 Jul 2026, 16:15 UTC316 views7 reactionsread 7 August 2026 Forwarded from @localhost_publicVideo
С ДНЕМ СИСАДМИНА! 👍
По традиции в этот великий день мы смотрим классику 🎬
😎 localhost › IT-юмор
🔥7
31 Jul 2026, 09:35 UTC461 views9 reactionsread 7 August 2026 env -i: запуск программы в полностью “чистом” окружении
Большинство программ наследуют десятки переменных окружения: PATH, HOME, LANG, LD_LIBRARY_PATH, прокси, токены и многое другое.
Иногда именно они становятся причиной странного поведения приложения.
▪️Посмотреть текущее окружение
env
или:
printenv
Вы увидите все переменные, которые будут унаследованы дочерними процессами.
▪️Запуск без окружения
Команда:
en…
👍8🔥1
30 Jul 2026, 09:32 UTC444 views9 reactionsread 7 August 2026 find -exec против -exec {} +: почему одна команда может быть в десятки раз быстрее
Многие используют find так:
find /var/log -name "*.log" -exec gzip {} \;
Команда работает, но есть нюанс: для каждого найденного файла запускается отдельный процесс gzip.
▪️Что происходит
Если найдено 5000 файлов, Bash выполнит примерно 5000 запусков gzip.
Это лишние создания процессов, переключения контекста и заметная потеря пр…
👍7🔥2
29 Jul 2026, 09:25 UTC355 views7 reactionsread 7 August 2026 exec: замена процесса без создания дочернего
Обычно при запуске команды Bash создаёт новый процесс:
sleep 60
После завершения sleep управление возвращается обратно в shell.
Но exec работает иначе - он заменяет текущий процесс новым. Старый процесс исчезает, а его PID сохраняется.
▪️Простой пример
echo $$
exec sleep 60
После выполнения вы больше не вернётесь в текущий shell. Процесс Bash будет полностью заменён…
🔥5👍1🗿1
28 Jul 2026, 09:20 UTC376 views6 reactionsread 7 August 2026 readarray: читаем вывод команды в массив без циклов
Часто в Bash список файлов или строк читают через while read. Но если нужно просто получить все данные в массив, есть более короткий и быстрый способ - readarray (или его синоним mapfile).
▪️Классический подход
files=()
while IFS= read -r file; do
files+=("$file")
done < <(find /var/log -name "*.log")
Работает, но код получается довольно громоздким.
▪️То ж…
👍6
27 Jul 2026, 17:32 UTC385 views5 reactionsread 7 August 2026 hash: почему Bash иногда запускает “не ту” команду
Каждый раз искать исполняемый файл в каталогах из $PATH было бы дорого. Поэтому Bash запоминает найденные пути в собственном кэше команд.
Из-за этого после обновления или перемещения бинарника можно столкнуться с неожиданным поведением.
▪️Посмотреть кэш команд
hash
Пример вывода:
hits command
12 /usr/bin/git
5 /usr/bin/python3
8 /usr/bin/ssh…
👍5
24 Jul 2026, 09:05 UTC490 views8 reactionsread 7 August 2026 caller: определение места вызова функции в Bash
При отладке больших Bash-скриптов часто недостаточно знать, какая функция упала. Нужно понять, откуда именно она была вызвана.
Для этого есть встроенная команда caller.
▪️Базовый пример
function test_func() {
caller
}
test_func
Вывод:
5 main
Это означает: функция была вызвана из 5-й строки функции main (или основного скрипта).
▪️Использование в логировании о…
👍8
Showing the 12 most recent of 21 posts we hold for @bash_tex. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.