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
Cockpit - это встроенный в современные дистрибутивы инструмент, который превращает сервер в управляемый через браузер интерфейс. Вам больше не нужно все делать вручную в консоли - многие задачи можно выполнять из веб-панели.
debian/ubuntu:
apt install cockpit -y
systemctl enable --now cockpit.socket
RHEL/centOS/fedora:
dnf install cockpit -y
systemctl enable --now cockpit.socket
После этого панель доступна по HTTPS на порту 9090:
https://IP-сервера:9090Авторизация выполняется через обычный системный логин и пароль.
Мониторинг ресурсов (CPU, RAM, диски, сеть) в реальном времени
Управление сервисами systemd (запуск, остановка, перезапуск)
Просмотр логов journald
Управление пользователями и правами
Настройка сетевых интерфейсов и firewall
Работа с дисками, RAID и LVM
Подключение Docker/Kubernetes для управления контейнерами
Возможность администрировать несколько серверов через одну панель
Минимальная настройка: поставил и сразу работает.
Не требует сторонних агентов - все идет через systemd и встроенные механизмы.
Легко интегрируется с SELinux, firewalld и другими системными компонентами.
#linux #cockpit
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤3
Обычно мы проверяем состояние конкретной службы:
systemctl status mariadb
Но если запустить без указания сервиса:
systemctl status
то получим сводку по всей системе. Очень полезная штука
Что покажет systemctl status без аргументов:
State - общее состояние (например: running, degraded)
Failed - количество упавших юнитов
Uptime - время работы systemd
Версия systemd
Количество активных units
Дерево зависимостей сервисов в удобном виде
systemctl list-units --failed
Посмотреть детали по конкретному юниту:
systemctl status <unit>
journalctl -u <unit>
Пример:
systemctl status
Вывод:
State: degraded
Failed: 1 units
Проверяем, что упало:
systemctl list-units --failed
например, systemd-modules-load.service.
Дальше копаемся в логах:
journalctl -u systemd-modules-load.service
systemctl status → быстрый обзор состояния системы.
systemctl list-units --failed → список проблемных юнитов.
journalctl -u <unit> → подробные логи конкретной службы.
#linux #systemctl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
Админы, привыкшие к bash и linux, часто недооценивают powershell. А зря - это также неплохая оболочка, которая умеет не только выполнять команды, но и работать с объектами, сервисами и API windows. Ниже несколько полезных сценариев, которые пригодятся, если админите и linux, и windows.
# Процессы по имени
Get-Process | Where-Object { $_.ProcessName -like "*chrome*" }
# Открытые TCP-порты
Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" }
# Найти все *.log файлы и удалить старше 7 дней
Get-ChildItem -Path "C:\Logs" -Filter *.log -Recurse |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } |
Remove-Item -Force
$hosts = "8.8.8.8","1.1.1.1","networkadmin.ru"
foreach ($h in $hosts) {
Test-Connection -ComputerName $h -Count 2 -Quiet |
ForEach-Object { "$h -> $($_ -replace 'True','OK' -replace 'False','Fail')" }
}
# Проверить статус службы
Get-Service -Name "Spooler"
# Перезапустить службу
Restart-Service -Name "Spooler"
Invoke-RestMethod -Uri "https://api.ipify.org?format=json"
# Системная информация
Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture
# Диски
Get-PSDrive -PSProvider FileSystem
#powershell #windows
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍2🔥2
Ubuntu давно перешла от классического
/etc/network/interfaces к новому инструменту - netplan. Он появился начиная с ubuntu 17.10 и стал основным способом настройки сетевых интерфейсов.❗️ Netplan - это уровень абстракции для сетевых конфигураций.
Использует YAML-файлы в /etc/netplan/.
Работает через рендереры:
systemd-networkd - для серверов и headless-систем.
NetworkManager - для десктопов.
Позволяет централизованно и декларативно описывать сеть.
Все настройки находятся в
/etc/netplan/*.yaml.По умолчанию обычно есть файл
01-netcfg.yaml или 50-cloud-init.yaml.
network:
version: 2
renderer: networkd
ethernets:
ens33:
dhcp4: true
network:
version: 2
renderer: networkd
ethernets:
ens33:
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
network:
version: 2
ethernets:
ens33:
addresses:
- 192.168.1.101/24
- 192.168.1.102/24
network:
version: 2
bonds:
bond0:
interfaces: [ens33, ens34]
parameters:
mode: balance-rr
addresses:
- 192.168.1.200/24
gateway4: 192.168.1.1
network:
version: 2
vlans:
vlan100:
id: 100
link: ens33
addresses: [192.168.100.10/24]
После изменения файлов:
sudo netplan apply
Для теста перед применением можно использовать:
sudo netplan try
(дает 120 секунд на подтверждение, если сеть отвалилась - конфиг откатывается).
#linux #netplan
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Многие для отправки писем из консоли ставят дополнительные утилиты вроде
mailx или mutt. Но часто этого не нужно - все умеет curl.
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--user "admin@networkadmin.ru:MySecurePass" \
--upload-file ~/letter.txt
Пример letter.txt:
From: "Admin" <admin@networkadmin.ru>
To: "User" <user@domain.ru>
Subject: Test mail from curl
Hello from curl!
Заголовки (From, Subject и др.) задаются прямо в файле, и можно указывать любые значения.
Хранить пароль в команде небезопасно. Вместо этого используем ~/.netrc:
machine smtp.networkadmin.ru login admin@networkadmin.ru password MySecurePass
machine smtp.another.ru login user@another.ru password StrongPass123
Теперь команда проще и безопаснее:
curl -v \
--url "smtp://smtp.networkadmin.ru:587" \
--mail-from "admin@networkadmin.ru" \
--mail-rcpt "user@domain.ru" \
--netrc \
--upload-file ~/letter.txt
curl --ssl-reqd ...
curl --ssl ...
curl --url "smtps://smtp.networkadmin.ru" ...
curl --url "smtp://smtp.networkadmin.ru/myhost.domain.ru" ...
#SMTP #curl
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1