Sysadminium
322 subscribers
148 photos
1 video
1 file
398 links
Я делюсь своими знаниями системного администратора. Всё проверено на себе — иногда даже дважды.
Download Telegram
📌Команда needrestart в linux

После установки обновлений в Linux не всегда очевидно, нужно ли перезагружать сервер или перезапускать службы. Утилита needrestart помогает выяснить это.

🛠 Установка
apt install needrestart


📋 Основные возможности
needrestart анализирует систему и сообщает:

- Нужно ли перезагрузить сервер (например, при обновлении ядра)
- Какие службы и процессы используют устаревшие библиотеки и требуют перезапуска
- Какие пользовательские сессии (например, SSH) работают с устаревшими компонентами

📋 Основные опции
-k - Проверяет, совпадает ли загруженное ядро с последним установленным.
-l - Ищет процессы, которые используют устаревшие версии общих библиотек.
-w - Проверяет, был ли обновлён микрокод процессора (intel-microcode или amd64-microcode), и вступил ли он в силу.
-b - Без интерактивного режима, для скриптов
-v - Подробный вывод
-h - Справка
📌Выключение Secure Boot на виртуалке ProxmoxVE с UEFI

Когда вы подготавливаете виртуальную машину, вы можете указать чтобы она использовала OVMF (UEFI) вместо стандартного BIOS. Также нужно не забыть сделать диск для EFI. И виртуалка будет использовать виртуальный UEFI при загрузке.

Но есть одна проблема, по умолчанию UEFI на Proxmox 8.4 включает Secure Boot и не всё получится установить. Например у меня не получилось установить zfs-dkms. Точнее установить то получилось, но модуль в системе не загрузился.
Чтобы убедиться что по умолчанию Secure Boot включен, выполните:

# mokutil --sb-state  
SecureBoot enabled



Чтобы выключить Secure Boot нужно удалить старый EFI-диск, это можно сделать из веб-интерфейса. И создать новый, но без Secure Boot, это делается так:

qm set <vmid> -efidisk0 data:1,efitype=4m,size=1M

- Обрати внимание, что нет опции pre-enrolled-keys=1, которая включает Secure Boot. Эта опция используется, если вы создаёте диск EFI из веб интерфейса.

Дальше запускаете свою виртуалку и можете проверить выключен ли SecureBoot:

# mokutil --sb-state  
SecureBoot disabled
Platform is in Setup Mode
📌Когда вы на ProxmoxVE 8 создаёте Linux бонд, то из веб-интерфейса у вас не получится узнать всю информацию и статистику по этому бонду. Но её легко получить из терминала, достаточно выполнить команду:

cat /proc/net/bonding/bond0


👉Для бонда active-backup увидим следующую информацию:
- Bonding Mode: fault-tolerance (active-backup)
- Primary Slave: enp36s0f0 (primary_reselect always)
- Currently Active Slave: enp36s0f0
- MII Status: up
- Slave Interface: enp36s0f0
- - - MII Status: up
- - - Speed: 10000 Mbps
- Slave Interface: enp38s0
- - - MII Status: up
- - - Speed: 1000 Mbps

То есть слейв enp36s0f0 является приоритетным. Включена опция primary_reselect always, благодаря которой бонд будет переключаться на приоритетный порт всякий раз когда линк на нём будет подниматься.
👉Для LACP мы увидим другую информацию:
- LACP active: on
- Transmit Hash Policy: layer3+4 (1)
- LACP rate: slow
- Slave Interface: eno1np0
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full
- Slave Interface: eno2np1
- - - MII Status: up
- - - Speed: 10000 Mbps
- - - Duplex: full

В общем команда полезная если администрируете Proxmox VE и настраиваете Linux бридж на бонде.👌
📌Отличия оперативной памяти UDIMM и RDIMM

Основные отличия между UDIMM (Unbuffered DIMM) и RDIMM (Registered DIMM).

✅Буферизация:
UDIMM – небуферизированная память, где контроллер памяти напрямую обращается к модулям ОЗУ.
RDIMM – содержит регистры (буфер), которые уменьшают нагрузку на контроллер памяти.

✅ECC (Error-Correcting Code):
UDIMM бывает как с поддержкой ECC, так и без нее.
RDIMM почти всегда поддерживает ECC.

✅Производительность и надежность:
UDIMM – быстрее из-за меньшей задержки, но менее стабильна при больших объемах памяти.
RDIMM – немного медленнее, но надежнее и поддерживает большие объемы ОЗУ.

✅Совместимость:
UDIMM используется в обычных ПК и рабочих станциях.
RDIMM – в серверах и рабочих станциях с поддержкой ECC Registered памяти.

👉Если сервер требует RDIMM, то UDIMM работать не будет. Так что внимательно читайте требования материнской платы к памяти.
👍5
📌Замена множества пробелов на один в bash

Чтобы заменить множество пробелов на 1 вы можете использовать.

✅ sed
echo "это пример текста" | sed 's/ */ /g'


✅ tr
echo "это пример текста" | tr -s ' '


Выбирайте тот способ, который вам больше нравится.
👍3
📌Команда grep в Linux

👉Команда grep используется для поиска строк в файле (grep 'шаблон' <файл> ) или для фильтрации вывода (ls -l | grep 'шаблон').

👉С опцией -c вы можете посчитать количество совпадений. Например посчитаем количество пустых строк.

grep -c "^$"


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

grep -o '[0-9]*'


👉Опция -E включает расширенные регулярные выражения. Они позволяют избегать экранирования. Например мы хотим найти строку с одним ИЛИ вторым словом.

grep -E 'cat|dog'
grep 'cat\|dog'


👉Найти строку где шаблон повторяется несколько раз в строке (+).

grep -E 'a+'
grep 'a\+'


👉Использования фигурных скобок для указания количества повторов шаблона в строке {3}. Это вообще невозможно выполнить без -E.

grep -E '[0-9]{3}'
👍3
👉Естественно опции можно комбинировать. Вот пример -Eo. Показать только ip-адреса.

grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'


👉Чтобы найти всё слово целиком используют опцию -w. Без этой опции части слова тоже будут найдены, если совпадут с шаблоном. Например найти слово target.

grep -w 'target'


👉С помощью опций -A и -B можно показать строки после совпадения и до совпадения. А опция -C покажет строки до и после совпадения.

grep -A 3 'bbo'
grep -B 3 'bbo'
grep -C 3 'bbo'


👉Чтобы наоборот исключить из вывода найденные по шаблону строку используют опцию -v. Например исключим комментарии, начинающиеся с #.

grep -v '^#'


👉С помощью опции -m мы можем указать сколько первых совпадений показать. Например вывести только первое совпадение.

grep -m 1 bbo


👉Для поиска без учета регистра используют опцию -i.

grep -i bbo


👉Чтобы расскрасить найденное слово используют опцию --color.

grep --color bbo


👉В регулярных выражениях символ начала строки ^, а символ конца строки $.

Строки начинающиеся на s: grep '^s'
Строки заканчивающиеся на s: grep 's$'
📌Для того чтобы создать массив в bash нужно использовать скобки и перечислить через пробелы элементы массива. Например:

animals=("cat" "dog" "horse" "cow")


Пробежаться по этому массиву можно с помощью цикла for.

for i in "${animals[@]}"; do
echo "$i"
done


Это можно использовать для написания скриптов. Например в массиве вы указываете список баз данных. А затем с помощью цикла создаёте дампы перечисленных баз.

Или например можно поработать с файлами.

files=("file1.txt" "file2.txt" "file3.txt")
for f in "${files[@]}"; do
cp "$f" /backup/
done
👍3
📌ZPOOL TRIM

✅Команда zpool trim инициирует процесс TRIM для разделов ZFS. То есть сообщает SSD (или другому блоку устройства, поддерживающему TRIM), какие блоки больше не используются и могут быть физически очищены.

zpool trim <pool_name>


Полезно trim запускать:
- После удаления большого объема данных.
- После пересоздания или восстановления пула.
- Регулярно, по расписанию, например раз в месяц.

✅Можно настроить автоматический trim на пуле:

zpool set autotrim=on <pool_name>


Автоматический TRIM в ZFS (autotrim=on) работает в фоновом режиме, асинхронно. Работает периодически, не сразу после удаления.

Из-за неизвестного алгоритма autotrim и отсутствия его настроек, лично я предпочитаю запускать trim вручную по расписанию в cron.
📌Journalctl - утилита для просмотра логов в SystemD

Чтобы посмотреть логи службы или ядра в системах на базе SystemD используется команда journalctl. Вот основные варианты:

👉Посмотреть логи конкретной службы.
journalctl -u <имя_службы>


👉Последние строки журнала.
journalctl -u <имя_службы> -n 50


👉Следить за логами в реальном времени (аналог tail -f).
journalctl -u <имя_службы> -f


👉Показать логи только за сегодня.
journalctl -u <имя_службы> --since today


👉Показать логи за конкретный период.
journalctl -u <имя_службы> --since "2025-06-17 14:00" --until "2025-06-17 15:00"


👉Чтобы просмотреть сообщения ядра, а также можем добавить вывод последних сообщений.
journalctl -k
journalctl -k -f


👉Все дополнительные опции и фильтры, которые мы применяли для логов службы применимы и для логов ядра. Например:
journalctl -k --since today
📌Proxmox VE + Proxmox Backup Server: нюанс с пользователями и паролями.

Недавно настраивал связку Proxmox VE и PBS. Для подключения хранилища использовал логин root@pam от PBS. Позже сменил пароль root на PBS — и внезапно перестали делаться бекапы.

✅Важно: в Proxmox VE нельзя просто изменить пароль у уже добавленного хранилища PBS — приходится удалять и подключать заново.
👍2
🔐 В этот раз решил сделать правильно:
- Создал отдельного пользователя pbsuser@pbs;
- Назначил ему права только на нужное хранилище через PBS:
- - Access Control → Permissions → Add:
- - Path: datastore/backups (название вашего хранилища);
- - User: pbsuser@pbs;
- - Role: DatastorePowerUser.

❗️Но после переподключения хранилища в PVE появилась ошибка:
backup owner check failed (pbsuser@pbs != root@pam)

📎 Оказалось, PBS строго проверяет владельца старых резервных копий. Если они были созданы под root@pam, то pbsuser@pbs не сможет создать новые, пока старые не будут удалены.

✅ Вывод:
- Всегда используйте отдельного пользователя для бекапов;
- Назначайте ему только необходимые права;
- При смене пароля — удаляйте и пересоздавайте подключение к PBS в PVE;
- Если меняете пользователя — удаляйте старые бекапы, иначе новые не создадутся из-за конфликта владельца.

Так и безопаснее, и надёжнее.
👍3
📌Создание архивов при помощи tar

📦 Полный бэкап (Full backup):

tar --create --gzip --file=full_backup.tar.gz --listed-incremental=backup.snar /путь/к/каталогу


🧱 Инкрементальный бэкап (Incremental backup):

tar --create --gzip --file=incr_backup_$(date +%Y-%m-%d).tar.gz --listed-incremental=backup.snar /путь/к/каталогу


♻️ Восстановление:

Сначала восстанови полный бэкап:
tar --extract --gzip --file=full_backup.tar.gz


Затем - все инкрементальные, по порядку:
tar --extract --gzip --file=incr_backup_2025-07-28.tar.gz


📌 Новая цепочка бэкапов:

Если нужно начать новую инкрементальную цепочку:
- Удали старый файл backup.snar.
- Сделай новый полный бэкап (см. шаг 1).

📎 Полезно знать:

- Файл backup.snar содержит метаинформацию об изменениях. Не удаляй его, если продолжаешь делать инкременты.
- Посмотреть содержимое архива:
tar --list --file=archive.tar.gz
👍4
📌Как выяснить, загружена ли система Debian 12 в режиме UEFI или Legacy BIOS?

👉Способ 1: Проверка наличия переменных EFI
ls /sys/firmware/efi

- Если каталог существует и не пуст — система загружена в режиме UEFI. В противном случае это BIOS.

👉Способ 2: Команда bootctl (если установлен systemd-boot)
bootctl status

- Если в выводе будет строка "System is booted in EFI mode", значит это UEFI.
- Если команда скажет, что bootctl не поддерживается или EFI не найден — значит BIOS.

👉Способ 3: Проверка таблицы разделов
sudo parted -l

- Если диск размечен как gpt и есть раздел типа EFI System Partition, вероятнее всего система загружена через UEFI.
- Если диск размечен как msdos — скорее всего используется BIOS.

👉Способ 4: Проверка загрузчика
Если используется GRUB, выполните:
sudo efibootmgr

- Если вывод присутствует и показывает загрузочные записи — это UEFI.
- Если пишет EFI variables are not supported on this system. — это BIOS.
👍2
📌В терминале Visual Studio Code на Linux не работают некоторые команды

👉Я уже давно полностью перешёл на Linux, использую Linux Mint Xfce4. А для написания скриптов или плейбуков использую Visual Studio Code.

👉Кроме синтаксической подсветки и подсказок получил и другие удобства. Прям из Visual Studio Code можно подключаться по SSH к серверам, работать с GIT и GigHub.

👉Но вот во встроенном терминале не всё работало, например команды su и sudo, а также команды ansible.

👉Оказывается, если установить Visual Studio Code из графического менеджера программ на Linux Mint, то он установится как Flatpak приложение. Такое приложение работает в своей песочнице и поэтому ему не доступны все возможности.

👉Для полноценной работы терминала я удалил Flatpak версию Visual Studio Code. Затем скачал deb пакет с официального сайта (https://code.visualstudio.com/docs/setup/linux) и установил Visual Studio Code с помощью этого пакета. И терминал заработал в полную силу.👌
👍3
📌На сайте eruz.zakupki.gov.ru используется неподдерживаемый протокол

Единый реестр участников закупок (ЕРУЗ) - это перечень поставщиков, подрядчиков и исполнителей, который находится в Единой информационной системе в сфере закупок.

При переходе в личный кабинет у вас может возникнуть ошибка:

На сайте eruz.zakupki.gov.ru используется неподдерживаемый протокол.
Протокол не поддерживается. Клиент и сервер используют разные версии протокола SSL или разные наборы шифров.
ERR_SSL_VERSION_OR_CIPHER_MISMATCH


Чтобы избежать этой ошибки вы должны соблюсти следующие условия.
1. Использовать только Яндекс Браузер.
2. На компьютере должен быть установлен КриптоПро CSP и его плагин для работы в браузере.
3. В настройках Яндекс Браузера должна быть включена галочка: Подключаться к сайтам, использующим шифрование по ГОСТ. Требуется КриптоПро CSP.
4. Дополнительно может мешать антивирус. Например в моём случае Касперский вмешивался в трафик браузера и мешал подключению.
📌SSH Port forwarding
✅SSH позволяет не только осуществлять подключение к командной строке, он также позволяет пробрасывать порты, это называется Port forwarding.
✅В статье разбираемся с этим:
👉https://sysadminium.ru/ssh-port-forwarding/
📌Утилита tcpdump для анализа сети

✅tcpdump — это консольная утилита для захвата и анализа сетевого трафика. Она позволяет просматривать пакеты, проходящие через сетевой интерфейс, и фильтровать их по различным критериям (IP-адрес, порт, протокол и др.). Используется для диагностики сетевых проблем, мониторинга и отладки сетевых приложений.

Примеры:
# tcpdump -i ens18
# tcpdump host 192.168.0.100
# tcpdump net 192.168.0.0/24
# tcpdump dst port 8080
# tcpdump tcp and portrange 0-1000

Больше примеров и описание к ним читайте в статье.
📌Сигналы для завершения процессов в Linux

✔️SIGTERM (15) – Корректное завершение. Процессу отправляется запрос на завершение. Позволяет закрыть файлы, сохранить данные. Именно этот сигнал отправляет команда systemctl stop.
kill -15 <PID>
# или просто
kill <PID>


✔️SIGKILL (9) – Принудительное завершение. Немедленно убивает процесс без возможности обработки. Используем если SIGTERM не помог.
kill -9 <PID>


✔️ SIGINT (2) – Прерывание (аналог Ctrl+C). Корректное завершение. Если не содержит обработчик для SIGINT, то сработает как SIGTERM.
kill -2 <PID>


✔️SIGHUP (1) – Перезапуск процесса без остановки. Аналог reload, но работает лишь для некоторых программ: Nginx, Apache, sshd, syslogd.
kill -1 <PID>
# например
kill -1 $(pidof nginx)
👍1