Желаю вам, чтобы Ваша зп росла быстрее, чем количество тасок. И пусть в жизни, как в коде, всегда находится правильный алгоритм!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12👍5🫡1
Systemd умеет не только собирать и хранить логи, но и отдавать их по HTTP. Для этого есть служба
systemd-journal-gatewayd, которая позволяет просматривать журнал прямо в браузере. Настраивается все буквально в пару шагов (пример для debian).
apt install systemd-journal-remote
Запускаем службу:
systemctl start systemd-journal-gatewayd.service
По умолчанию используется порт 19531.
http://10.25.1.55:19531/browse
Только логи текущей загрузки:
http://10.25.1.55:19531/entries?boot
В интерфейсе удобно переключаться между сервисами через выпадающий список.
curl --silent -H 'Accept: application/json' \
'http://10.25.1.55:19531/entries?UNIT=ssh.service'
systemd-journal-gatewayd умеет работать не только с локальным журналом, но и с логами, собранными с других серверов. Для этого можно указать директорию с журналами:
systemd-journal-gatewayd -D /path/to/logs
#systemd #logs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
WinRE - это встроенная среда восстановления для windows, которая запускается при проблемах с загрузкой системы или вручную через установочный носитель/средства восстановления. Обычно ее используют для диагностики и восстановления, но среду можно адаптировать под собственные задачи.
reagentc /info
Если среда отключена, включаем ее:
reagentc /enable
Winre.wim (обычно на скрытом разделе Recovery или в C:\Recovery\WindowsRE). Создаем рабочую директорию и монтируем образ:
mkdir C:\WinRE_Mount
dism /mount-image /imagefile:C:\Recovery\WindowsRE\Winre.wim /index:1 /mountdir:C:\WinRE_Mount
Внутри смонтированного образа можно:
dism /image:C:\WinRE_Mount /add-driver /driver:C:\Drivers\ /recurse
dism /image:C:\WinRE_Mount /add-package /packagepath:C:\Updates\update.cab
После внесенных изменений сохраняем:
dism /unmount-image /mountdir:C:\WinRE_Mount /commit
#windows #winRE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
В linux каждый файл или каталог хранится в виде структуры данных, называемой inode (index node). Inode содержит метаданные: права доступа, владельца, временные метки и ссылки на блоки с данными.
Даже если у вас много свободного места на диске, но закончились inodes - новые файлы создать не получится. Чаще всего такая ситуация возникает на серверах, где генерируются миллионы мелких файлов (логи, временные данные, кеши).
df -i
В столбцах будет видно общее количество inode, сколько уже занято и сколько осталось.
Inode создаются при форматировании файловой системы. Параметры задаются утилитой mkfs (для ext4 - mkfs.ext4). Например, создаем файловую систему с фиксированным количеством inode:
mkfs.ext4 -N 2000000 /dev/sdb1
Здесь -N задает количество inode. По умолчанию mkfs.ext4 рассчитывает их исходя из соотношения «один inode на 16К дискового пространства». Если ожидается много мелких файлов, можно увеличить плотность inode:
mkfs.ext4 -i 4096 /dev/sdb1
(один inode на каждые 4К).
Чтобы не допустить, что один пользователь «забьет» диск миллионами файлов, используют квоты. Включаем поддержку квот в /etc/fstab:
/dev/sdb1 /home ext4 defaults,usrquota,grpquota 0 2
Перемонтируем файловую систему:
mount -o remount /home
Создаем файлы для квот и включаем их:
quotacheck -cum /home
quotaon /home
Ограничиваем inode для пользователя:
edquota -u username
В открывшемся редакторе можно задать soft/hard limit для количества файлов (inodes).
#filesystem #inodes
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Если существует риск кражи носителей с данными, стоит задуматься о шифровании. На linux это проще всего реализовать через LUKS, который позволяет зашифровать раздел и работать с ним как с обычным блочным устройством.
apt install cryptsetup # debian
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 lukscrypt
После этого появится устройство /dev/mapper/lukscrypt.
mkfs.ext4 /dev/mapper/lukscrypt
mkdir /mnt/crypt
mount /dev/mapper/lukscrypt /mnt/crypt
Теперь раздел доступен в системе, а при следующем подключении для расшифровки нужно будет выполнить
cryptsetup luksOpen и ввести пароль.#LUKS #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Иногда команды в linux выдают данные так, что разобраться в них сложно: все идет сплошным текстом, столбцы "пляшут". В таких случаях выручает утилита
column, которая форматирует вывод в аккуратные таблицы.По умолчанию разделителем считается пробел, но при необходимости можно указать свой символ.
mount | column -t
Сразу видно, где какая файловая система и куда она примонтирована - читается намного удобнее.
/etc/passwd разделен двоеточиями. Сделаем его аккуратной таблицей:
column -s ":" -t /etc/passwd
Теперь строки легко обрабатывать, например, через awk. Выведем только имена пользователей:
column -s ":" -t /etc/passwd | awk '{print $1}'
Каждое имя - в отдельной строке. Отличный способ быстро собрать список, массив или передать данные.
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2
tmpfs - это файловая система, которая хранит данные в оперативной памяти (RAM). Она монтируется как обычный каталог и доступна для приложений прозрачно, но при этом все записи идут не на диск, а в память.
Зачем это может быть полезно:📍 Ускорение работы - операции чтения/записи из RAM значительно быстрее, чем даже на NVMe SSD.📍 Снижение износа SSD - временные файлы не пишутся на диск, что уменьшает количество циклов записи.📍 Автоматическая очистка - содержимое tmpfs исчезает при перезагрузке.
Примеры использования tmpfs
/tmp по умолчанию монтируется как tmpfs. Если нет - можно добавить в /etc/fstab:
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
npm/yarn cache или /var/cache/pacman) в tmpfs.
tmpfs /var/cache tmpfs defaults,noatime,size=2G 0 0
build/ в RAM:
mount -t tmpfs -o size=4G tmpfs ./build
Ограничение по размеру
Размер tmpfs можно задавать вручную (size=1G), иначе по умолчанию он занимает до половины ОЗУ.
#linux #SSD
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤1
Когда нужно объединить несколько сетевых интерфейсов в один для повышения отказоустойчивости или производительности, в linux есть два основных механизма: bonding и teaming. Оба решают схожие задачи, но работают по-разному.
Основные режимы работы:
Проверенный и стабильный инструмент.
Поддерживается почти во всех дистрибутивах.
Большой выбор режимов.
Ограниченная масштабируемость.
Более тяжелое ядро-зависимое решение (модуль ядра).
Настройка чуть менее гибкая.
Особенности:
Гибкая настройка (json + плагины).
Легче масштабировать и управлять.
Мониторинг и логика вынесены в userspace (а не только ядро).
Более сложный для "быстрых правок".
В некоторых дистрибутивах bonding до сих пор по умолчанию используется чаще.
Если у вас традиционная инфраструктура (например, debian, старые centOS, небольшие серверы) - проще использовать bonding: он доступен сразу и без лишних зависимостей.
Если вы работаете с современными centOS или хотите больше гибкости (например, интеграцию с NetworkManager, плагины, мониторинг линков) - выбирайте teaming.
#network
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Иногда нужно быстро передать файлы по сети, без заморочек с настройкой SMB или FTP. Для этого есть два простых инструмента - один для linux, другой для windows.
В современных дистрибутивах Python уже установлен, так что все сводится к одной команде:
cd /var/log
python3 -m http.server 8181
Открываем браузер, заходим на IP-адрес сервера с портом 8181 и сразу видим содержимое директории.
Файлы скачали - сервер остановили. Удобно и быстро.
Для Windows есть проверенное решение - HFS.
Это небольшой исполняемый файл, который работает на любой версии windows, включая 11. Скачали → запустили → открыли в браузере IP машины.
HFS позволяет публиковать как целые директории, так и отдельные файлы, просто перетащив их в окно программы. В отличие от SMB, который постоянно требует возни с версиями протокола и учетками, HFS работает «из коробки».
▪️ Дополнительные возможности HFS:📍 аутентификация пользователей;📍 логирование;📍 кастомизация внешнего вида через HTML-шаблоны;📍 контроль пропускной способности;📍 работа в фоне.
Программа бесплатна и с открытым исходным кодом.
#linux #windows #tools
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Если раньше для просмотра базовой информации о linux системе приходилось использовать целый набор команд вроде:
lsb_release -a
uname -a
cat /etc/os-release
cat /etc/redhat-release
- то теперь достаточно одной:
hostnamectl
Static hostname: networkadmin.ru
Icon name: computer-vm
Chassis: vm
Machine ID: ---
Boot ID: ---
Virtualization: microsoft
Operating System: Debian GNU
Kernel: Linux ---
Architecture: x86-64
Что можно увидеть
Имя хоста (static/pretty/текущее)
ОС и версия дистрибутива
Версия ядра
Аппаратная информация (chassis, архитектура)
Виртуализация или контейнеризация (VM или Docker/LXC/OpenVZ)
Machine ID и Boot ID - полезно при отладке и мониторинге
Также с помощью hostnamectl можно не только смотреть информацию, но и менять имя сервера:
hostnamectl set-hostname myserver
Изменения применяются сразу и сохраняются после перезагрузки.
#hostnamectl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤6
В Linux есть подсистема ядра -
inotify, которая умеет отслеживать изменения в файловой системе и выдавать уведомления о событиях (создание, удаление, обновление файлов и каталогов). Для работы можно воспользоваться утилитой fswatch, которая доступна почти во всех популярных ОС. В linux под капотом она использует именно inotify.
apt install fswatch
Запуск простого мониторинга за директорией /tmp:
fswatch /tmp
Но в таком виде вывод слишком сырой. Можно сразу добавить ключи:
-x - отображать тип событий
-t - выводить временные метки
fswatch -x -t /tmp
В одной консоли запускаем fswatch, а в другой пробуем:
echo '123' > /tmp/file.txt
rm /tmp/file.txt
В логах получаем:
28 Sep 2025 23:27:20 MSK /tmp/file.txt Created
28 Sep 2025 23:27:20 MSK /tmp/file.txt Updated
28 Sep 2025 23:27:35 MSK /tmp/file.txt Removed
Мониторинг можно запустить в фоне:
fswatch -x -t /tmp >> /var/log/fswatch.log &
или добавить автозапуск через cron:
@reboot fswatch -x -t /tmp >> /var/log/fswatch.log &
Более надёжный способ - оформить как сервис systemd:
/etc/systemd/system/fswatch.service
[Unit]
Denoscription=fswatch file monitor
[Service]
ExecStart=/usr/bin/fswatch -x -t /tmp
[Install]
WantedBy=multi-user.target
Запуск:
systemctl enable --now fswatch.service
journalctl -u fswatch.service
Можно отфильтровать конкретные типы событий, например, только удаление:
fswatch --event Removed -x -t /tmp
#inotify #fswatch
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2
tcpdump - один из самых используемых инструментов для анализа сетевого трафика прямо в консоли. С его помощью можно не только снять дамп, но и отфильтровать нужные пакеты, чтобы не утонуть в гигабайтах логов.
tcpdump -i eth0
Смотрим весь трафик интерфейса eth0. Часто этого уже достаточно для первичной диагностики.
tcpdump host 192.168.1.10
Только пакеты от/к указанному IP.
tcpdump port 22
Видим весь SSH-трафик.
tcpdump src host 10.0.0.5
tcpdump dst port 80
tcpdump src host 192.168.1.100 and port 443
tcpdump not port 22
tcpdump icmp
tcpdump tcp
tcpdump udp
tcpdump -i eth0 tcp port 80 -A
Ключ -A выводит полезную нагрузку пакетов в ASCII. Удобно, если нужно подсмотреть запросы.
tcpdump -i eth0 tcp port 443 -vvv
С подробной детализацией можно увидеть домены, к которым идёт подключение.
tcpdump -i eth0 udp port 53
tcpdump -i eth0 -w dump.pcap
А потом открыть dump.pcap в Wireshark.
tcpdump -c 100 -i eth0
Собираем только первые 100 пакетов.
Используйте -nn - чтобы ip-адреса и порты не переводились в имена (ускоряет работу).
-vvv - максимально подробный вывод.
Для длительного мониторинга всегда сохраняйте в файл (-w) и анализируйте в wireshark или tshark.
#linux #tcpdump
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁18❤5🔥2
Часто возникает ситуация: программа подвисает, работает странно или вообще не запускается. В таких случаях на помощь приходят два инструмента -
strace и ltrace. Оба они позволяют заглянуть внутрь процесса, но делают это на разных уровнях.
strace ls /nonexistent
Вывод покажет, что ls пытается открыть директорию и получает ENOENT (нет такого файла).
strace -p 1234
Теперь видно, чем занимается процесс с PID 1234.
strace -e open,read,write -p 1234
Будут показаны только вызовы open, read, write.
ltrace ls
Вы увидите вызовы функций вроде malloc(), strlen(), fopen().
ltrace -e malloc,free ./myprog
Будут показаны только вызовы функций управления памятью.
strace → понять, что происходит на уровне системных вызовов (например, программа не может открыть файл из-за прав).
ltrace → отследить логику внутри библиотек (например, неверно передаются параметры в функцию).
strace -p <PID>
Сразу видно, ждёт ли программа I/O или зациклилась.
strace ./prog 2>&1 | grep ENOENT
Можно увидеть, какой именно файл не удаётся открыть.
ltrace -e malloc,free ./prog
Если много malloc(), но мало free() - повод задуматься.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
На первый взгляд, копирование файлов в linux выглядит элементарной задачей. Но если копать глубже, у команды cp есть несколько нюансов, которые легко могут привести к неожиданному результату.
cp /dir_a/* /dir_b
Кажется логичным, но так скопируются только файлы верхнего уровня, без вложенных директорий. Чтобы взять все целиком (с поддиректориями и атрибутами), используем:
cp -a /dir_a/* /dir_b
Ключ -a = рекурсия + права доступа + даты + симлинки. В общем, максимально правильное копирование.
Звездочка раскрывается в bash. Символ * обрабатывает сама оболочка, а не cp. То есть bash разворачивает список файлов и передаёт их в виде длинной команды:
cp -a /dir_a/file1 /dir_a/file2 ... /dir_b
Если файлов слишком много - можно упереться в ограничение длины команды.
Скрытые файлы теряются. Файлы, начинающиеся с точки (.htaccess, .env и т.п.), по умолчанию не попадут в *. В результате копирование окажется не точным.
Пустая директория = ошибка. Если в исходной папке нет файлов, то * не развернётся, и cp просто вернет ошибку.
cp -aT /dir_a /dir_b
Здесь:
-a - копирование со всеми атрибутами
-T - воспринимать /dir_b как саму директорию назначения, а не поддиректорию внутри неё
Таким образом, копирование отрабатывает корректно: и вложенные каталоги, и скрытые файлы будут на месте.
#linux #cp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤2🔥1😱1👌1
Swap в linux играет роль страховочного пространства на диске для выгрузки неиспользуемых страниц памяти. Но работать с ним можно по-разному: от полного отключения до использования современных технологий сжатия. Разберем основные практики.
swapon --show
free -h
swapoff -a
Чтобы выключить swap навсегда - закомментируйте его строки в
/etc/fstab.
# swapon /swapfile --priority 100
Текущие приоритеты видно в выводе
swapon --show.0 - максимально избегать использования swap.
60 (по умолчанию) - сбалансированный вариант.
100 - активно выгружать память в swap.
Пример настройки:
sysctl -w vm.swappiness=10
Для постоянного применения добавьте в
/etc/sysctl.conf:
vm.swappiness=10
Активация через параметры ядра:
zswap.enabled=1
Установка и включение в Debian/Ubuntu:
apt install zram-tools
systemctl enable --now zramswap.service
#linux #swap
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Когда речь заходит о работе с внешними или сетевыми хранилищами, важно проверять, что файловая система действительно подключена и смонтирована. В Linux для этого есть две удобные утилиты -
findmnt и findfs.
findmnt -x
Success, no errors or warnings detected
Если в конфигурации есть ошибка - получите подробное сообщение:
findmnt -x
/mnt/backup
[E] unreachable on boot required source: UUID=151ea24d-977a-412c-818f-0d374baa5012
Также можно проверять наличие конкретной точки монтирования:
if findmnt -rno TARGET "$1" >/dev/null; then
echo "$1 mounted."
else
echo "$1 not mounted."
fi
findfs "UUID=151ea24d-977a-412c-818f-0d374baa5013"
/dev/sda2
Выходной код тоже полезен в скриптах:
0 → устройство найдено
1 → файловая система не найдена
if findfs "UUID=$1" >/dev/null; then
echo "$1 connected."
else
echo "$1 not connected."
fi
Если не проверить подключение, легко попасть в неприятную ситуацию:
бэкап или копирование пойдет не на внешний диск, а в локальную систему;
место на корневом разделе быстро закончится;
при монтировании обратно старые файлы могут спрятаться за точкой монтирования.
#findmnt #findfs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Когда в скрипте что-то идет не так, часто хочется понять, какая команда выполнилась последней и какие значения получили переменные. Вместо того чтобы расставлять десятки echo, в bash есть встроенный инструмент -
set -x.Если указать его в начале скрипта, оболочка начнет печатать в консоль каждую выполняемую команду с подставленными значениями переменных. Перед строкой появляется символ +, что делает разбор вывода наглядным.
Создадим простой скрипт, который проверяет наличие файла и копирует его в директорию резервных копий:
#!/bin/bash
set -x
src="/etc/hosts"
dst="/tmp/backup"
mkdir -p "$dst"
timestamp=$(date +%Y%m%d_%H%M%S)
cp "$src" "$dst/hosts_$timestamp"
echo "Backup created: $dst/hosts_$timestamp"
Вывод консоли:
▶ Запуск
# ./backup.sh
+ src=/etc/hosts
+ dst=/tmp/backup
+ mkdir -p /tmp/backup
+ date +%Y%m%d_%H%M%S
+ timestamp=20251007_121330
+ cp /etc/hosts /tmp/backup/hosts_20251007_121330
+ echo 'Backup created: /tmp/backup/hosts_20251007_121330'
Backup created: /tmp/backup/hosts_20251007_121330
Мы видим каждое действие: какие переменные подставились, как отработала команда date, куда скопировался файл.
#linux #debug
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4