Linux для чайника

Адрес канала: @os_linux_ru
Категории: Технологии
Язык: Русский
Количество подписчиков: 20.03K
Описание канала:

Linux
- Разбор утилит / инструментов
- Новости / факты
- Опросы для проверки знаний, навыков
и многое другое.
Только по вопросам сотрудничества: @altmainf
Регистрация в перечне РКН https://clck.ru/3EpL9L

Рейтинги и Отзывы

3.00

3 отзыва

Оценить канал os_linux_ru и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

1

2 звезд

0

1 звезд

1


Последние сообщения

12 янв
Очищаем дисковый кэш в Linux

Linux кэширует файлы в свободной RAM — это ускоряет всё. Но иногда нужно сбросить кэш. Полезно. когда нужен честный бенчмарк скорости диска диагностика памяти либо тесты в VM/контейнерах

Не делай это регулярно — кэш заполнится заново, а производительность упадёт.

Главная команда:
sudo sync
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Цифры:
• 1 — только данные файлов
• 2 — метаданные
• 3 — всё


Проверка:

free -h | grep Mem
buff/cache резко упадёт → больше free.

Альтернатива:
sudo sysctl -w vm.drop_caches=3

Готовый one-liner для теста диска:
sudo sync; echo 3 > /proc/sys/vm/drop_caches; dd if=/bigfile of=/dev/null bs=1M status=progress

Мини-скрипт:
#!/bin/bash
free -h | grep Mem
sudo sync; echo 3 > /proc/sys/vm/drop_caches
free -h | grep Mem
echo "Кэш сброшен"
Не ставь в cron — хуже будет. Linux сам управляет кэшем лучше нас.
2.53K views11:06
Подробнее
Поделиться:
Открыть/Комментировать
12 янв
VDI нужен там, где важно быстро выдавать рабочие места, держать доступ под контролем и не превращать поддержку пользователей в бесконечный хаос. Если удалёнка, филиалы или много однотипных рабочих мест, VDI экономит недели администрирования.

На открытом уроке разберёте архитектуру VDI на базе Microsoft RDS, полный цикл развертывания и настройку удалённого доступа. Без абстракций, с понятной схемой, что и зачем поднимается.

→ Записаться на открытый урок курса «Администратор Windows»: https://otus.pw/JbKh/

Реклама. ООО «Отус онлайн‑образование», ОГРН 1177746618576
2.64K views09:03
Подробнее
Поделиться:
Открыть/Комментировать
10 янв
Бывает, сервер или рабочая машина начинает «думать» дольше обычного: команды висят, интерфейс лагает, SSH отвечает с задержкой. Не паникуем — 90% случаев решаются системной диагностикой.

Полный чек-лист, когда что-то тормозит:

Шаг 1: Общая картина — что жрёт ресурсы прямо сейчас
Сразу запускаем htop (если нет — sudo apt install htop или dnf install htop).
Что смотреть:
CPU: если все ядра на 100% — ищем процесс вверху списка (сортировка по %CPU — нажми F6 → %CPU).
RAM/Swap: если Swap активно используется (жёлтая полоска) — нехватка памяти, процесс убивает OOM-killer.
Load Average (вверху): три числа — 1/5/15 мин. Если на 4-ядерной машине >8-12 — перегрузка.

Альтернатива без htop: top (Shift+P — сортировка по CPU, Shift+M — по MEM).

Шаг 2: Память — free и vmstat
free -h # сколько реально свободно
vmstat -w 1 10 # каждую секунду 10 раз

Ключевые колонки в vmstat:
• r — процессы в очереди на CPU (если > числа ядер — CPU bottleneck)
• b — процессы в uninterruptible sleep (обычно I/O wait)
• si/so — swap in/out (если не нули — памяти не хватает)
• wa — % CPU в I/O wait (высокий — диски тормозят)

Шаг 3: Диски — iostat и iotop
iostat -xz 1 10 # расширенная стат-а каждую сек.
iotop # как htop, но для I/O (нужен root)

В iostat смотрим:
• %util
близко к 100% — диск загружен полностью
• await > 20-30 ms — медленный отклик (SSD должно быть <1 ms)
• svctm устарело, но если высокое — проблемы

Если NVMe/SSD, а util 100% — часто виноваты большие логи или бэкапы.

Шаг 4: CPU детально — mpstat и pidstat
mpstat -P ALL 1 10 # нагрузка по каждому ядру
pidstat -u 1 10 # CPU по процессам со временем

Поможет понять: один поток жрёт одно ядро или нагрузка равномерная.

Шаг 5: Исторические данные — sar (sysstat)
Если проблема не постоянная:
sar -u 10 5 # CPU сейчас
sar -r # память за день
sar -d # диски за день
sar -n DEV # сеть

Sysstat по умолчанию собирает данные каждые 10 мин — золотой источник для ночных тормозов.

Шаг 6: Конкретный процесс — strace и perf
Если виновник известен (например, mysqld или java):
strace -p PID -c
# системные вызовы и сколько времени на них
perf top -p PID
# что именно в CPU жрёт (нужен kernel-headers)
perf record -p PID -g sleep 10; perf report
# профилирование

Шаг 7: Ядро и аппаратные проблемы
dmesg -T --follow
# последние сообщения ядра с читаемыми датами
cat /proc/interrupts
# если один IRQ очень высокий — драйвер/устройство

Частые виновники: ошибки диска, перегрев, сетевые драйверы.

Шаг 8: Сеть — если тормозит только удалённо
iftop # кто сколько трафика жрёт
nethogs # по процессам
ping -c 4 google.com
mtr google.com # трассировка + пинг
3.24K views09:03
Подробнее
Поделиться:
Открыть/Комментировать
7 янв
«Xargs: как обрабатывать вывод команд пачками (параллельно!)»

Pipe в Bash крут, но xargs делает его мощнее: берёт ввод и передаёт аргументами другой команде.

Полезно для больших списков (файлы, PID). -P для параллели.

Пример: убить процессы по grep
ps aux | grep "myapp" | awk '{print $2}' | xargs -P 4 kill

Пояснение:
grep находит, awk берёт PID ($2), xargs kill'ит параллельно 4 штуки (-P4).

Практика: с find — find . -name "*.tmp" | xargs rm (без -exec). Экономит время на серверах.
4.34K views09:00
Подробнее
Поделиться:
Открыть/Комментировать
3 янв
Автоматически выключаем компьютер в определённое время

Выключать ПК каждый день в 23:00 (например, для детского ПК).

Простое решение (в cron):
cron0 23 * * * shutdown -h now

Или с предупреждением за 10 минут:
cron50 22 * * * wall "Компьютер выключится через 10 минут!"
0 23 * * * shutdown -h now
6.27K views09:01
Подробнее
Поделиться:
Открыть/Комментировать
29 дек 2025
Автоматическая смена обоев из папки

Каждый час ставить новый фон рабочего стола из папки с картинками.
Cкрипт change_wallpaper.sh — для GNOME:
Bash#!/bin/bash
wallpapers=~/pictures/wallpapers/*
random_wall=$(shuf -n1 -e $wallpapers)
gsettings set org.gnome.desktop.background picture-uri "file://$random_wall"
gsettings set org.gnome.desktop.background picture-uri-dark "file://$random_wall"

В cron:

cron0 * * * * /path/change_wallpaper.sh
1.82K views08:59
Подробнее
Поделиться:
Открыть/Комментировать
25 дек 2025
Скачали ISO-образ Ubuntu или программу — проверить, что файл не повреждён и не подменён.

#На сайте обычно дают SHA256 хеш, например:
# 1a2b3c4d...

sha256sum ubuntu-24.04.iso
# Сравнить вывод с тем, что на сайте

Или сразу проверить:
Bashecho "1a2b3c4d... ubuntu-24.04.iso" | sha256sum --check
# Выведет OK или FAILED
4.29K views12:04
Подробнее
Поделиться:
Открыть/Комментировать
22 дек 2025
Классическая форк-бомба :(){ :|:& };: в современных версиях Ubuntu (начиная примерно с 18.04–20.04 и точно в 22.04/24.04) не крашит систему, как это было в старых дистрибутивах.

Почему она "не работает"
Ubuntu использует systemd, который автоматически создаёт для каждого пользователя отдельный cgroup (контроллер ресурсов). По умолчанию в systemd установлен лимит на максимальное количество задач (processes + threads) для одного пользователя — обычно около 33% от системного максимума (kernel.threads-max), что даёт примерно 10–15 тысяч процессов (зависит от конфигурации машины).

Когда форк-бомба доходит до этого лимита:
• Дальнейшие fork() начинают падать с ошибкой (bash выдаёт кучу "fork: retry: Resource temporarily unavailable").
• Процессор нагружается на короткое время (несколько секунд–минут).
• Затем всё успокаивается: лишние процессы умирают или просто висят, система остаётся отзывчивой.

Дополнительно может сработать OOM Killer (если памяти не хватит), но в большинстве случаев даже до этого не доходит.
5.28K views08:59
Подробнее
Поделиться:
Открыть/Комментировать
18 дек 2025
Скрипт для просмотра внешних сетевых соединений по процессам

Иногда полезно знать, какие программы на вашем компьютере выходят в интернет.

#!/usr/bin/env bash

# Вывод заголовка
echo "Активные сетевые соединения (внешние)"
echo

# Получаем список соединений (TCP/UDP) с PID и именами процессов
ss -tunpH | awk '
# Фильтруем только внешние соединения (не localhost)
$5 !~ /(127\.0\.0\.1|::1)/ {

# Извлекаем PID процесса
match($0, /pid=([0-9]+)/, p)

# Извлекаем имя процесса
match($0, /"([^"]+)"/, c)

# Выводим красиво: PID, имя процесса и удалённый адрес
printf "PID: %-6s ПРОГРАММА: %-15s -> %s\n", p[1], c[1], $5
}'

1. ss -tunpH
• -t — TCP соединения
• -u — UDP соединения
• -n — показывать IP и порты без преобразования в имена
• -p — показать PID и имя процесса
• -H — без заголовка

2. Фильтрация внешних соединений
• $5 !~ /(127\.0\.0\.1|::1)/
• Исключает все локальные соединения, оставляя только внешние IP.

3. Извлечение PID и имени процесса
• match($0, /pid=([0-9]+)/, p) → PID
• match($0, /"([^"]+)"/, c) → имя программы

4. Вывод в удобной форме
PID: 1234 ПРОГРАММА: firefox -> 172.217.16.142:443
PID: 982 ПРОГРАММА: ssh -> 18.197.45.22:22
5.5K views09:05
Подробнее
Поделиться:
Открыть/Комментировать
16 дек 2025
Версии ядра линукс

Запись версии ядра можно представить в виде: A.B.C-D.

A – это версия ядра, изначально планировалось повышать номер только после значительной переработки ядра, но сейчас это делают после достаточного количества правок и нововведений примерно два раза за десятилетие.

B – это ревизия ядра, обновление происходит каждые 2-3 месяца. Некоторые из них получают долгосрочную поддержку (LTS – long term support). Каждая ревизия имеет большой список изменений, которые сначала проверяют тестировщики.

C и D отвечают за небольшие правки в коде ядра. С увеличивается в том случае, если были обновлены драйверы устройств, а D – когда вышел очередной патч безопасности. Эти номера могут меняться практически каждый день.

Узнать версию ядра можно с помощью команды: uname -r
4.4K views11:04
Подробнее
Поделиться:
Открыть/Комментировать
14 дек 2025
Проверка файла / директории в Bash

В Bash для этого используют file test operators, чаще всего в [[ ... ]].

Базовые проверки:
Файл существует: [[ -e path ]]
Обычный файл: [[ -f path ]]
Директория: [[ -d path ]]
Символьная ссылка: [[ -L path ]]

Права доступа:

Чтение / запись / выполнение
[[ -r path ]] # readable
[[ -w path ]] # writable
[[ -x path ]] # executable
Проверяет права текущего пользователя, не владельца файла.

Размер и содержимое:
Файл не пустой: [[ -s path ]]
Файл пустой: [[ ! -s path ]]
Владение:
[[ -O path ]] # владелец — текущий пользователь
[[ -G path ]] # принадлежит группе пользователя
Временные атрибуты:
[[ path -nt other ]] # newer than
[[ path -ot other ]] # older than
Комбинирование условий:
if [[ -f file && -r file ]]; then
echo "Readable file"
fi

Безопасные идиомы:
Проверка перед использованием:
[[ -f "$file" ]] || {
echo "File not found: $file" >&2
exit 1
}
Создать директорию, если нет:
[[ -d "$dir" ]] || mkdir -p "$dir"

Частые ошибки:
Неэкранированная переменная:
[[ -f $file ]] # плохо
[[ -f "$file" ]] # правильно
Использование ls:
ls file.txt >/dev/null 2>&1 # плохо
[[ -f file.txt ]] # правильно

Краткая шпаргалка:
-e существует
-f обычный файл
-d директория
-L symlink
-r чтение
-w запись
-x выполнение
-s не пуст
4.12K views14:02
Подробнее
Поделиться:
Открыть/Комментировать
11 дек 2025
Определяем тип файла в Linux

Существует специальная утилита file, которая выполняет определение типа файла. она анализирует начало содержимого файла и находит в нем специальные "сигналы", характерные для определенного типа – бинарного файла, текстового, изображения и др.

Синтаксис: file
Расширение для программы file безразлично.

С помощью ключа -L мы можем узнать тип файла, на который ссылается файл-ссылка.
2.16K views11:05
Подробнее
Поделиться:
Открыть/Комментировать
11 дек 2025
Гринатом — ИТ-интегратор Росатома — ищет системного архитектора АРМ в Москве!

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

А мы предложим конкурентоспособную «белую» зарплату с годовыми бонусами и ежегодной индексацией, ДМС со стоматологией, тренажерный зал с сауной в офисе,
образовательные курсы за счёт компании. И главное — карьерный и экспертный рост в рамках единой команды.
2.36K views09:04
Подробнее
Поделиться:
Открыть/Комментировать
9 дек 2025
Живой монитор пинга в терминале с цветным графиком в стиле мини-дашборда

По умолчанию (будет пинговать 8.8.8.8):
./check.sh

С указанием своего хоста или IP:
./check.sh 1.1.1.1
./check.sh ya.ru
3.15K views11:10
Подробнее
Поделиться:
Открыть/Комментировать
9 дек 2025
Дирижируем сетевым оркестром: маршрутизация на основе политик (PBR)

Как сделать так, чтобы трафик в сети шел не просто по кратчайшему пути, а по заданным правилам и приоритетам? На открытом вебинаре курса OTUS Network Engineer. Professional Константин Григорьев расскажет, как маршрутизировать трафик «по нотам» — с помощью политик, IP SLA и механизмов контроля доступа.

17 декабря, 20:00
Дирижируем сетевым оркестром: маршрутизация на основе политик (PBR)
— разбор основных правил построения политик;
— проверка работы маршрутизации и отладка;
— создание тестов IP SLA для мониторинга каналов;
— основы распределения трафика и защиты сети.

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

Зарегистрируйтесь: https://otus.pw/htwA/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
3.05K views09:05
Подробнее
Поделиться:
Открыть/Комментировать
8 дек 2025
Чтобы при вводе пароля через sudo отображались звёздочки (*****), нужно включить опцию pwfeedback в настройках sudo.

Способ 1. Правильный (через visudo)
Открыть sudoers для редактирования:
sudo visudo
Добавить строку:
Defaults pwfeedback
Сохранить и выйти.

Теперь sudo будет показывать звёздочки при вводе пароля.

Способ 2. Только для текущего пользователя
Создать (или отредактировать) файл:
sudo visudo -f /etc/sudoers.d/pwfeedback
Добавить:
Defaults:<твой_пользователь> pwfeedback

Например:
Defaults:alice pwfeedback
3.18K views12:02
Подробнее
Поделиться:
Открыть/Комментировать
4 дек 2025
Удаление дубликатов файлов по хэшу

#!/bin/bash

# -------------------------------------------
# Скрипт проходит по всем файлам в указанной
# директории, вычисляет их хэши и удаляет
# дубликаты (спрашивая подтверждение).
# -------------------------------------------

# Директория для сканирования.
# Если пользователь не передал путь, используется текущая.
dir="${1:-.}"

# Хэш-алгоритм. Можно заменить на:
# md5sum — быстрее, но менее надёжно
# sha1sum — средне
# sha256sum — медленнее, но максимально надёжно
algo="sha256sum"

# Ассоциативный массив "хэш → путь к оригиналу".
# В нём сохраняются хэши всех уже встреченных файлов.
declare -A seen

echo "-------------------------------------------"
echo " Сканирование директории: $dir"
echo " Алгоритм хеширования: $algo"
echo "-------------------------------------------"
echo

# Используем find для обхода ВСЕХ файлов.
# -type f — только обычные файлы.
# -print0 — вывод с нулевым разделителем, чтобы корректно
# обрабатывать имена с пробелами и спецсимволами.
while IFS= read -r -d '' file; do

# Вычисляем хэш файла. Команда вида:
# sha256sum file | awk '{print $1}'
# выводит только сам хэш без имени.
hash=$($algo "$file" | awk '{print $1}')

# Если этот хэш уже есть в массиве,
# значит, файл-дубликат найден.
if [[ ${seen[$hash]} ]]; then
echo " Найден дубликат:"
echo " Оригинал: ${seen[$hash]}"
echo " Дубликат: $file"
echo

# Запрашиваем подтверждение удаления.
read -p "Удалить дубликат? [y/N]: " answer

# Удаление только если ответ 'y' или 'Y'
if [[ "$answer" =~ ^[Yy]$ ]]; then
rm -v "$file" # -v — verbose, показывает что удалено
else
echo "Пропуск."
fi

echo

else
# Если хэша нет — запоминаем файл как оригинал.
seen[$hash]="$file"
fi

# Этот синтаксис < <(...) позволяет передавать результат find
# прямо в цикл while (без создания временных файлов).
done < <(find "$dir" -type f -print0)

echo "Готово!"
4.18K views12:01
Подробнее
Поделиться:
Открыть/Комментировать
4 дек 2025
Сбой DHCP или перегрузка канала — и сеть перестаёт дышать. Один некорректный пакет, десяток повторов — и критическая инфраструктура уходит в оффлайн.

На открытом уроке разберём самые практические атаки на доступность: DHCP starvation через DHCPig/Yersinia и перегрузку канала с помощью hping3. Покажем на живой демонстрации, какие последствия вызывают истощение пула адресов и агрессивная утилизация трафика.

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

Встречаемся 10 декабря в 20:00 МСК в преддверие старта курса «Пентест. Инструменты и методы проникновения в действии».

Регистрируйтесь — и разберите атаки до уровня пакетов: https://otus.pw/wZU9/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
3.76K views09:05
Подробнее
Поделиться:
Открыть/Комментировать
1 дек 2025
Старший и младший номера устройств

Как мы помним, в UNIX — все есть файл, поэтому каждому устройству в системе соответствует имя этого устройства в каталоге /dev. 

Каждое именованное устройство в Linux однозначно характеризуется двумя (байтовыми: 0...255) номерами: старшим номером (major) — номером отвечающим за отдельный класс устройств, и младшим номером (minor) — номером конкретного устройства внутри своего класса

Если вы введёте команду ls -l, то увидите два числа (разделённые запятой) в каждой записи файла устройства перед датой последней модификации файла, где обычно показывается длина. Эти цифры являются старшим и младшим номером устройства для каждого из них (старшие номера: 1, 4, 7 и 10, а младшие: 1, 3, 5, 64, 65 и 129).
4.08K views11:06
Подробнее
Поделиться:
Открыть/Комментировать
1 дек 2025
PostgreSQL и DevOps: управление базой данных через CI/CD и Kubernetes

Как автоматизировать развёртывание, обслуживание и мониторинг PostgreSQL в продакшн-среде? На открытом вебинаре курса OTUS PostgreSQL. Advanced Антон Герасименко покажет, как объединить DevOps-практики и PostgreSQL 17, чтобы упростить работу с базой данных и повысить её отказоустойчивость.

→ 8 декабря, 18:00

PostgreSQL и DevOps — управляем базой данных через CI/CD и Kubernetes
— создание Docker-контейнера для PostgreSQL и его правильная настройка
— использование Kubernetes-операторов для автоматического развертывания
— мониторинг и алертинг через Prometheus и Grafana
— настройка репликации и standby-реплик в PostgreSQL 17
— интеграция миграций и бэкапов в CI/CD-процессы

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

→ Зарегистрируйтесь: https://otus.pw/2twt/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
3.74K views09:01
Подробнее
Поделиться:
Открыть/Комментировать
30 ноя 2025
Проверка, выполняется ли скрипт в interactive shell

[[ $- == *i* ]]
В переменной $- содержатся флаги текущего shell, и если там есть буква i, то оболочка интерактивная.

Допустим, у нас есть скрипт, который выводит приветствие только если его запустили интерактивно (например, вручную), но молчит, когда его запускает cron, systemd, ssh-скрипты и т.п.

#!/usr/bin/env bash

# Идиома: определение интерактивности оболочки
if [[ $- == *i* ]]; then
echo "Добро пожаловать! Скрипт запущен интерактивно."
echo "Можно показывать красивые подсказки, приглашения, меню…"
else
# Ничего не выводим или выводим очень лаконично
echo "non-interactive mode"
fi

echo "Основная работа скрипта продолжается..."

Cпецпеременная Bash ($-) — список текущих shell-опций.
Например: himBH Где: i → interactive (если есть — оболочка интерактивная). Остальные буквы — разные режимы (h, m, B и т.д.)

Примеры запуска:

Интерактивно (пишем в терминале)
$ ./script.sh
Добро пожаловать! Скрипт запущен интерактивно.
Можно показывать красивые подсказки, приглашения, меню…
Основная работа скрипта продолжается...

Неинтерактивно (через pipe)
$ echo | bash script.sh
non-interactive mode
Основная работа скрипта продолжается...

Через cron (эффект аналогичный)
non-interactive mode
Основная работа скрипта продолжается...
3.62K views17:04
Подробнее
Поделиться:
Открыть/Комментировать
28 ноя 2025
Встроенные команды календарей

cal: Простой календарь на текущий месяц. cal покажет календарь, cal 2025 — на год, cal -3 — на три месяца. (ncal для альтернативного вида).

calendar: Утилита из пакета bsdmainutils (sudo apt install bsdmainutils для Ubuntu).
Создайте файл ~/.calendar с событиями в формате "MM/DD/YYYY описание". Команда calendar покажет предстоящие события.

at и cron: Для напоминаний.
at — одноразовые: echo "notify-send 'Время встречи'" | at 14:00 tomorrow.
cron — повторяющиеся: crontab -e и добавьте 0 9 * * 1-5 notify-send "Еженедельный отчет". (Установите at через пакетный менеджер, если нужно).
3.77K views11:04
Подробнее
Поделиться:
Открыть/Комментировать
26 ноя 2025
Несколько распространённых и полезных идиом Bash

1. Проверка существования файла или директории
if [ -f "$file" ]; then
echo "Файл существует"
fi
Используется для проверки файлов (-f), директорий (-d), исполняемых файлов (-x) и т.д. Полезно перед операциями, чтобы избежать ошибок.

2. Условное присваивание переменной (с дефолтным значением)
name=${NAME:-"Гость"}
Если переменная NAME пустая или не установлена, присваивает "Гость". Аналогично ${VAR:=value} для установки.

3. Цикл по файлам в директории
for file in *.txt; do
echo "Обрабатываю $file"
done
Простой способ итерации по файлам. Осторожно с пробелами в именах — используй for file in *; do и кавычки.

4. Чтение строк из файла с циклом while
while IFS= read -r line; do
echo "Строка: $line"
done < input.txt
Безопасное чтение файла построчно, без потери пробелов. IFS= отключает разделение, -r сохраняет бэкслеши.

5. Проверка успешности команды
if command; then
echo "Команда прошла успешно"
else
echo "Ошибка"
fi
Bash возвращает код выхода (0 — успех). Это основа для обработки ошибок.

6. Here-документ для многострочного ввода
cat << EOF
Это многострочный текст.
EOF
Полезно для создания конфигов или скриптов на лету. << — heredoc, EOF — маркер конца.

7. Trap для очистки при выходе
trap 'rm -f /tmp/tempfile' EXIT
Автоматическая очистка временных файлов при завершении скрипта. Можно ловить сигналы вроде INT (Ctrl+C).

8. Set -e для строгого режима
set -e
# Теперь скрипт выходит при первой ошибке
Делает скрипт "строгим" — он прерывается на первой неудачной команде. Комбинируй с set -u (ошибка на неустановленных переменных) и set -o pipefail (для пайпов).
4.12K views11:04
Подробнее
Поделиться:
Открыть/Комментировать
25 ноя 2025
globstar и рекурсивный **

Включаем:

shopt -s globstar

Используем:

echo **/*.py
Полный обход директорий — без find.

Пример реального скрипта:
for f in **/*.md; do
pandoc "$f" -o "${f%.md}.html"
done
3.73K views18:06
Подробнее
Поделиться:
Открыть/Комментировать
25 ноя 2025
Предположим, что вам нужно запустить приложение с графическим интерфейсом gedit с помощью соответствующей команды и закрыть окно эмулятора терминала без завершения работы этого приложения.

В этом случае сначала следует запустить его в фоновом режиме:
gedit &

В результате вы увидите окно приложения, а в окне терминала будет выведен идентификатор соответствующей задачи, например:
[1] 14191

Теперь следует удалить задачу с известным идентификатором из таблицы задач командной оболочки:
disown 14191

После этого вы можете закрыть окно эмулятора терминала. Приложение с графическим интерфейсом будет работать как ни в чем ни бывало.
4.01K views11:09
Подробнее
Поделиться:
Открыть/Комментировать
24 ноя 2025
Инструмент сетевой диагностики MTR

MTR (My Traceroute) — инструмент для сетевой диагностики в Linux. Он сочетает функциональность traceroute и ping, предоставляя реал-тайм мониторинг пути пакетов от вашего компьютера до целевого хоста.

MTR работает в интерактивном режиме и может генерировать отчеты. Он часто используется сетевыми администраторами, разработчиками и пользователями для диагностики интернет-соединений.

Установка MTR
MTR обычно предустановлен в большинстве дистрибутивов Linux, но если нет, установите его через менеджер пакетов:
Ubuntu/Debian:
sudo apt update && sudo apt install mtr
После установки проверьте версию: mtr --version.

Основные команды и опции
Запуск MTR прост: mtr [опции] <цель>, где <цель> — IP-адрес или домен (например, google.com).

Ключевые опции:
-r (report mode): Генерирует статический отчет вместо интерактивного режима. Полезно для скриптов или логов.
-c <число>: Количество пакетов для отправки (по умолчанию 10 в report mode).
-i <секунды>: Интервал между пакетами (по умолчанию 1 секунда).
-n: Не разрешать имена хостов (показывать только IP).
-w: Широкий вывод (больше столбцов).
-p: Режим ping (только ping без traceroute).
-T: Использовать TCP вместо ICMP (полезно для обхода фаерволов).
-U: Использовать UDP вместо ICMP.
--no-dns: Отключить разрешение DNS.
-h: Справка по всем опциям.

В интерактивном режиме (без -r) MTR показывает динамическую таблицу. Используйте клавиши:

q — выход.
d — переключить режим отображения (статистика/график).
j — перейти к следующему узлу.
k — перейти к предыдущему узлу.
? — справка по клавишам.

Примеры использования
• Базовый интерактивный запуск: mtr google.com
Это откроет интерактивное окно с таблицей: столбцы показывают хоп (узел), потерю пакетов, среднюю задержку, лучший/худший/последний пинг и jitter (колебания).

• Генерация отчета: mtr -r -c 10 google.com
Выводит текстовый отчет, который можно сохранить: mtr -r -c 10 google.com > report.txt.

• Тестирование с TCP (для обхода ICMP-блокировок): mtr -T google.com
Полезно, если ICMP заблокирован фаерволами.

• Мониторинг с интервалом 0.5 секунды: mtr -i 0.5 -c 20 example.com

• Проверка локальной сети: mtr 192.168.1.1
(Замените IP на ваш роутер или сервер.)

Интерпретация результатов
Loss %: Процент потерянных пакетов. Высокий (более 5%) указывает на проблемы.
Snt: Отправлено пакетов.
Last: Последняя задержка.
Avg: Средняя задержка.
Best/Wrst: Лучшая/худшая задержка.
StDev: Стандартное отклонение (jitter) — показывает стабильность.
3.51K views11:04
Подробнее
Поделиться:
Открыть/Комментировать
21 ноя 2025
Динамические файловые дескрипторы в Bash: скрытая фича, которая всё меняет

Bash давно умеет сам выбирать безопасные свободные FD, и делает это удивительно удобно.

Этот пост — о малоизвестном синтаксисе {fd} и реальных кейсах его применения.

• Что такое динамические файловые дескрипторы?
Синтаксис: exec {fd}< file.txt
Смысл:
- Bash находит свободный номер FD, например 11.
- Открывает файл file.txt для чтения.
- Записывает номер (11) в переменную fd.
Проверка:
echo "$fd" # например 11
Теперь файл привязан к FD 11, и вы работаете с переменной $fd.

• Почему это важно?
- не нужно угадывать свободный номер FD
- нет конфликтов с библиотеками
- можно открывать десятки файлов подряд
- можно работать с каналами процессов и /dev/fd/*
- проще читать и писать разные потоки одновременно

• Простейший пример:
exec {fd}< file.txt

while read -r line <&$fd; do
echo "$line"
done

exec {fd}<&-
FD создаётся динамически, закрывается безопасно.

• Два файла одновременно (без конфликтов)
exec {a}< fileA.txt
exec {b}< fileB.txt

read A <&$a
read B <&$b

echo "A: $A"
echo "B: $B"

exec {a}<&-
exec {b}<&-
Не нужно думать про FD 3, 4, 5…

• Чтение + запись одновременно
exec {in}< data.txt
exec {out}> log.txt

while read -r line <&$in; do
echo "line: $line" >&$out
done

exec {in}<&-
exec {out}>&-

• Работа с потоками процессов: <( … )
Динамические FD работают не только с файлами:
exec {tmpfd}<(sed 's/foo/bar/g' data.txt)
cat <&$tmpfd
exec {tmpfd}<&-
<(...) создаёт временный поток (/dev/fd/…), а {tmpfd} превращает его в аккуратный FD.

Реальный практический пример:

Задача:
— читать лог,
— писать его полностью в один файл,
— строки с ERROR писать отдельно,
— считать WARNING.


Решение:
exec {in}< log.txt
exec {all}> all.log
exec {err}> errors.log

warnings=0

while read -r line <&$in; do
echo "$line" >&$all

if [[ $line == *ERROR* ]]; then
echo "$line" >&$err
fi

[[ $line == *WARNING* ]] && ((warnings++))
done

exec {in}<&-
exec {all}>&-
exec {err}>&-

echo "Warnings: $warnings"
С классическими FD 3, 4, 5 такой код был бы более рискованным — конфликты гарантированы.

• Как увидеть, что FD создан?
ls -l /proc/$$/fd
После: exec {fd}< file
увидите: 11 -> file
1.26K views11:04
Подробнее
Поделиться:
Открыть/Комментировать
21 ноя 2025
Кто идёт на Kuber Conf by AOT 4 декабря?

Первая некоммерческая K8s-конференция в Москве — отличный повод встретиться и обсудить:

Как на самом деле работает CNI chaining в продакшене
Как безопасно развернуть Gatekeeper для k8s-in-k8s
Поддержку Kubernetes в Vitastor
Опыт построения Managed Kubernetes

На ивенте будут топовые инженеры и архитекторы — будет о чём поговорить.
Конференция проходит под эгидой Ассоциации облачно-ориентированных технологий (АОТ), которую создают Флант, VK Cloud и Yandex Cloud.

Встречаемся?

Программа и билеты: https://aot-kuberconf.ru/?utm_source=telegram&utm_medium=referral_cpc&utm_campaign=os_linux_ru

Реклама Садовская.Е.О
ИНН:9710066394 Erid:2VtzqvPMJNL
1.63K viewsedited  08:59
Подробнее
Поделиться:
Открыть/Комментировать
20 ноя 2025
Файловые дескрипторы в Bash

Когда мы пишем Bash-скрипты, большинство операций с файлами выглядит максимально просто:
cmd < input.txt
cmd > output.txt
cmd >> output.txt
Но за этими короткими операторами скрывается мощная система: файловые дескрипторы (FD).

А знание о них открывает возможности, которые обычное перенаправление не покрывает в принципе: работа с несколькими файлами, сложные пайплайны, межпроцессное взаимодействие и даже работа с потоками как с объектами.

Что такое файловые дескрипторы?
У каждого процесса в Linux есть три стандартных канала:
FD Назначение
0 stdin (ввод)
1 stdout (вывод)
2 stderr (ошибки)

Но процесс может иметь дополнительные дескрипторы:
3, 4, 5 … — хоть до сотен.

Это такие же каналы ввода-вывода, как и 0–2, только вы сами решаете, куда они ведут.

Зачем нужны дополнительные FD?
Обычное перенаправление < file может быть применено только один раз.
То есть вы не можете «последовательно читать два файла» в одном цикле:
while read line; do …; done < file1 < file2 # так не работает
Более того, невозможно одновременно читать из одного файла и писать в другой ― в рамках одного while read.

Файловые дескрипторы это исправляют.

• Открываем файл на чтение в FD 3
exec 3< file.txt
Теперь файл открыт и доступен по номеру FD 3.
Читаем:
read line <&3
echo "$line"
Закрываем: exec 3<&-

• Открываем файл на запись в FD 4
exec 4> output.log
echo "Hello" >&4
exec 4>&-

Пример: одновременно читать один файл и писать в другой
exec3< input.txt
exec 4> output.txt

while read -r line <&3; do
echo "[LOG] $line" >&4
done

exec 3<&-
exec 4>&-

Пример: два входных файла одновременно
exec 3< fileA.txt
exec 4< fileB.txt

read A <&3
read B <&4

echo "A: $A"
echo "B: $B"

exec 3<&-
exec 4<&-

• Подводный камень: FD могут конфликтовать
Большая проблема классического подхода:
- вы вручную выбираете номер,
- FD может быть занят библиотекой или другим скриптом,
- при вложенных bash-функциях конфликт становится реальным.

Например, если вы выбрали FD 3, а ваш скрипт был вызван другой программой, которая тоже использует FD 3 ― поведение будет непредсказуемым.

Решение существует, и оно элегантно.
Оно появилось в современных версиях Bash, но о нём почти никто не знает.

Это — динамические файловые дескрипторы через {fd}.
1.83K views11:59
Подробнее
Поделиться:
Открыть/Комментировать
20 ноя 2025
Вебинар по Linux: Введение в Docker: контейнеры, изоляция и первые шаги.

На вебинаре вы узнаете:
- Чем контейнеризация отличается от виртуализации и почему Docker стал стандартом.
- Как устроены контейнер, образ и Docker Engine.
- Как запустить и управлять контейнерами с помощью базовых команд docker run, ps, exec, stop).
- Как использовать Docker Hub и скачивать готовые образы.

В результате вебинара вы:
- Разберётесь в ключевых понятиях Docker.
- Научитесь запускать и управлять контейнерами.
- Сможете использовать готовые образы для своих тестовых окружений.
- Поймёте, куда двигаться дальше в изучении контейнерных технологий.

Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"

Для участия зарегистрируйтесь: https://otus.pw/HYGT/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
2.19K views09:02
Подробнее
Поделиться:
Открыть/Комментировать