В новом релизе Debian 13 обновился пакетный менеджер apt до версии 3.0, которая вышла в апреле 2025 года. В прошлом релизе apt был версии 2.6. От пакетного менеджера нужно обычно немного - установить пакет и зависимости. Основное, на что обращаешь внимание - интерфейс. И вот тут у apt всегда было всё как-то не очень.
Это не очень и попытались исправить. Стало лучше, но всё равно не так информативно, как в том же
Ну да ладно, что есть то есть. Посмотрел повнимательнее на новый apt, так как теперь постоянно с ним работать придётся. Вот основные изменения по сравнению с прошлой версией.
1️⃣ Как я уже сказал - внешний вид. Более наглядно выделены пакеты и зависимости. Плюс, по умолчанию появилась подсветка. Ею, если что, можно управлять через параметры. Не знаю, кому это может понадобиться. Я точно заниматься подобной настройкой не буду.
2️⃣ Теперь вывод apt, который не умещается в один экран терминала, например, при
Для ручного просмотра это удобно, но теперь не понятно, как грепать вывод. Надо отключать новый pager. Но не хочется лезть в настройки для этого. Можно сделать так:
Такой формат трудно запомнить. Нужно будет постоянно в шпаргалку лазить, что неудобно. В общем, нововведение так себе.
3️⃣ Появилась поддержка формата DEB822 для описания репозиториев. Вместо файла
Эта команда забэкапит файл
Мне новый формат понравился больше. Лучше воспринимается на глаз за счёт того, что запись репозитория разбита на строки с заголовками. Плюс, через
4️⃣ Появился новый движок поиска зависимостей. Не знаю, для чего он был сделан и какие проблемы решил. Я не сталкивался с какими-то проблемами в зависимостях из-за apt.
Ещё ряд не таких заметных в эксплуатации изменений:
- появились несжатые индексы, традиционно их сжимают gzip или xz, теперь будут и несжатые
- переработали механизм autoremove, но я не увидел сам и не нашёл нигде примеров, что конкретно изменилось
- прекращено использование утилиты apt-key и общего хранилища ключей, но это не сказать, что что-то новое, от неё уже давно отказываются в пользу отдельного ключа для каждого репозитория
- вместо gnutls и gcrypt для шифрования теперь используется openssl
В завершении несколько полезных ключей для apt.
Посмотреть версии устанавливаемых пакетов:
Пакеты, установленные не из системных репозиториев:
Список установленных пакетов с версиями и репозиториями, откуда они были установлены:
То же самое, только чтобы можно было грепнуть неродные репы:
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #debian
Это не очень и попытались исправить. Стало лучше, но всё равно не так информативно, как в том же
dnf. Сравнение можно посмотреть на картинке внизу. Не знаю, в чём сложность повторить примерно так же. У dnf и репозиторий сразу видно, и версию пакета, и отформатировано аккуратнее. У apt стало лучше, чем было, когда все пакеты простынёй вываливали. Частично это можно было исправить дополнительными ключами, но всё равно не так наглядно было, как у dnf. Ну да ладно, что есть то есть. Посмотрел повнимательнее на новый apt, так как теперь постоянно с ним работать придётся. Вот основные изменения по сравнению с прошлой версией.
apt search, не вываливается весь в него, а выводится построчно, как при использовании less. Соответственно, работают все горячие клавиши от less. Я чаще всего использую Shif-g - переместиться в конец списка, / - включить поиск. Подробнее про less писал отдельно.Для ручного просмотра это удобно, но теперь не понятно, как грепать вывод. Надо отключать новый pager. Но не хочется лезть в настройки для этого. Можно сделать так:
# apt -o APT::Pager= list | grep zabbixТакой формат трудно запомнить. Нужно будет постоянно в шпаргалку лазить, что неудобно. В общем, нововведение так себе.
sources.list можно описывать репозитории в sources.list.d/*.sources. Текущий sources.list преобразовать в новый формат можно так:# apt modernize-sourcesЭта команда забэкапит файл
sources.list и создаст вместо него sources.list.d/debian.sources. Так же новый apt поддерживает использование Debian APT CDN. Можно указать в качестве источника пакетов deb.debian.org, а реальный сервер для загрузки будет выбран автоматически на основании не знаю чего. Не нашёл информации на этот счёт.Мне новый формат понравился больше. Лучше воспринимается на глаз за счёт того, что запись репозитория разбита на строки с заголовками. Плюс, через
Enabled: no можно отключать репозиторий. Это более аккуратно выглядит, чем комментирование строк с репозиториями.Ещё ряд не таких заметных в эксплуатации изменений:
- появились несжатые индексы, традиционно их сжимают gzip или xz, теперь будут и несжатые
- переработали механизм autoremove, но я не увидел сам и не нашёл нигде примеров, что конкретно изменилось
- прекращено использование утилиты apt-key и общего хранилища ключей, но это не сказать, что что-то новое, от неё уже давно отказываются в пользу отдельного ключа для каждого репозитория
- вместо gnutls и gcrypt для шифрования теперь используется openssl
В завершении несколько полезных ключей для apt.
Посмотреть версии устанавливаемых пакетов:
# apt -V install mcПакеты, установленные не из системных репозиториев:
# apt list '?narrow(?installed, ?not(?origin(Debian)))'Список установленных пакетов с версиями и репозиториями, откуда они были установлены:
# apt -o APT::Pager= list --installed -a | grep -v stableТо же самое, только чтобы можно было грепнуть неродные репы:
# apt -o APT::Pager= list -a --installed | grep -v stable | grep -v '^$'———
ServerAdmin:
#linux #debian
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍107👎2
На днях зашёл в свежеустановленную из шаблона систему Rocky Linux 9 и с удивлением увидел неработающую. команду:
Первый раз с таким столкнулся. Почему-то был уверен, что это либо системная утилита, либо часть оболочки bash. Не припоминаю, чтобы я отдельно её ставил.
Эта команда полностью очищает терминал и возвращает курсор на самую первую строку. Я постоянно её использую в процессе работы в консоли. Регулярно по привычке набираю её в терминале Windows и расстраиваюсь, что она не работает. Начинаю вспоминать, как она выглядит в винде. Даю подсказку -
Оказывается, эта утилита живёт в пакете ncurses. В Debian и Ubuntu никогда этот пакет не ставил. Утилита clear там была во всех редакциях и шаблонах, с которыми мне приходилось работать. А вот в Rocky пришлось поставить:
Так что если не знали, про clear, то рекомендую посмотреть и пользоваться. Удобная утилита. Ну а если потеряли, то знайте, что живёт она в отдельном пакете.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
# clear-bash: clear: command not foundПервый раз с таким столкнулся. Почему-то был уверен, что это либо системная утилита, либо часть оболочки bash. Не припоминаю, чтобы я отдельно её ставил.
Эта команда полностью очищает терминал и возвращает курсор на самую первую строку. Я постоянно её использую в процессе работы в консоли. Регулярно по привычке набираю её в терминале Windows и расстраиваюсь, что она не работает. Начинаю вспоминать, как она выглядит в винде. Даю подсказку -
cls. Оказывается, эта утилита живёт в пакете ncurses. В Debian и Ubuntu никогда этот пакет не ставил. Утилита clear там была во всех редакциях и шаблонах, с которыми мне приходилось работать. А вот в Rocky пришлось поставить:
# dnf install ncursesТак что если не знали, про clear, то рекомендую посмотреть и пользоваться. Удобная утилита. Ну а если потеряли, то знайте, что живёт она в отдельном пакете.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍105👎3
Столкнулся на днях с ошибкой, которую уже давно не видел. Минут 10 потратил, пока не понял, в чём проблема. Давно работает один LXC контейнер с Debian внутри. У меня давняя привычка везде и всюду использовать названия только на английском языке и никогда не ставить пробелы, заменяя их тире или подчёркиванием. И вам того же советую во избежание траты времени на поиск внезапных ошибок или проблем с отладкой.
Закинул туда скрипт с комментариями на русском языке, которые иногда оставляю в начале. Вместо русских букв местами получил крякозябры. Первое, на что посмотрел - кодировка исходного текста. На всякий случай сохранил его в VSCode, убедился, что там UTF-8 и скопировал ещё раз. Не помогло.
Подумал, может это в mcedit проблема. Открыл скрипт в nano - там то же самое. На всякий случай скопировал по scp этот же скрипт, чтобы исключить проблемы, связанные с буфером обмена. То же самое. Копирую на другой сервер, там всё нормально.
Дальше понял, что надо локали в терминале смотреть:
Если честно, даже не знаю, что это за локаль
Меняю локаль на английскую:
Теперь надо перезагрузиться, чтобы настройки применились. Перезахода в систему будет недостаточно. Или можно вручную выбрать из списка:
Чтобы новая локально заработала, нужно перезайти пользователем в терминал. Перезагружаться не обязательно.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
Закинул туда скрипт с комментариями на русском языке, которые иногда оставляю в начале. Вместо русских букв местами получил крякозябры. Первое, на что посмотрел - кодировка исходного текста. На всякий случай сохранил его в VSCode, убедился, что там UTF-8 и скопировал ещё раз. Не помогло.
Подумал, может это в mcedit проблема. Открыл скрипт в nano - там то же самое. На всякий случай скопировал по scp этот же скрипт, чтобы исключить проблемы, связанные с буфером обмена. То же самое. Копирую на другой сервер, там всё нормально.
Дальше понял, что надо локали в терминале смотреть:
# localeLANG=C........Если честно, даже не знаю, что это за локаль
C. Пока нигде не было русского языка, проблем не замечал. Обычно тут по умолчанию стоит en_US.UTF-8. Если и надо поменять локаль, то на ru_RU.UTF-8, чтобы нормально 1С сервер работал. Больше не знаю ситуаций, где бы стоило менять её с английской.Меняю локаль на английскую:
# locale-gen en_US.UTF-8# update-locale en_US.UTF-8Теперь надо перезагрузиться, чтобы настройки применились. Перезахода в систему будет недостаточно. Или можно вручную выбрать из списка:
# dpkg-reconfigure localesЧтобы новая локально заработала, нужно перезайти пользователем в терминал. Перезагружаться не обязательно.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍103👎5
При работе в терминале Linux иногда возникает потребность записать все вводимые команды и результаты вывода этих команд. Речь идёт не о централизованном способе записи всей активности, а разовой задачи, потому что централизованно эти вещи не всегда настроены. Плюс, там есть разные нюансы в работе, из-за которых что-то может не попадать в вывод.
Приведу примеры централизованной записи команд, о которых я рассказывал ранее:
◽️sshlog - запись вводимых команд и вывода, централизованный сбор логов с записями сессий, уведомления о каких-то событиях в консоли и многое другое.
◽️tlog - централизованная система сбора пользовательской активности в консоли от RedHat.
◽️snoopy - небольшая библиотека под Linux, которая может логировать не только команды пользователей, но многое другое. Например, команды системных процессов.
◽️log-user-session - программа, которая запускается вместо оболочки пользователя и пропускает через себя все его команды, записывая их в текстовый файл.
◽️PROMPT_COMMAND - логирование в текстовый файл с помощью встроенной возможности оболочки bash.
Сегодня речь пойдёт о разовой задаче, когда вы подключились к серверу и хотите сохранить свою работу в консоли. Сделать это очень просто с помощью программы script, которая обычно уже присутствует в системе.
После подключения к серверу запустите её и направьте вывод в лог-файл:
Теперь всё, что вы введёте в консоль, будет записано в файл. Для удобства сразу дату туда добавил. Для того, чтобы прекратить запись, достаточно ввести команду
В лог попадёт некоторый "мусор", который затрудняет восприятие вывода. Это связано с тем, что script записывает сырой поток команд, который включает в себя некоторые закодированные ASCII последовательности, например, описывающие цветной вывод или команды терминала, типа возврата каретки и т.д.
Это всё можно разом очистить. Например, так:
На выходе будет чистый терминал практический такой же, как вы его видели, когда работали.
Простое и быстрое решение для разовой задачи по сохранению своей работы в терминале. Рекомендую сохранить и использовать по мере необходимости.
Я иногда включаю запись терминала средствами SSH клиента, но туда тоже всякий мусор попадает, надо обрабатывать. Плюс, не всегда всю сессию надо записывать. А тут в терминале включил запись, когда не надо, отключил. Потом очистил и всё видно в наглядном представлении без лишнего мусора. Можно вывод какой-то команды или набора команд сохранить и потом спокойно посмотреть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal #ssh
Приведу примеры централизованной записи команд, о которых я рассказывал ранее:
◽️sshlog - запись вводимых команд и вывода, централизованный сбор логов с записями сессий, уведомления о каких-то событиях в консоли и многое другое.
◽️tlog - централизованная система сбора пользовательской активности в консоли от RedHat.
◽️snoopy - небольшая библиотека под Linux, которая может логировать не только команды пользователей, но многое другое. Например, команды системных процессов.
◽️log-user-session - программа, которая запускается вместо оболочки пользователя и пропускает через себя все его команды, записывая их в текстовый файл.
◽️PROMPT_COMMAND - логирование в текстовый файл с помощью встроенной возможности оболочки bash.
Сегодня речь пойдёт о разовой задаче, когда вы подключились к серверу и хотите сохранить свою работу в консоли. Сделать это очень просто с помощью программы script, которая обычно уже присутствует в системе.
После подключения к серверу запустите её и направьте вывод в лог-файл:
# script -q -f ~/terminal_$(date +%F_%T).logТеперь всё, что вы введёте в консоль, будет записано в файл. Для удобства сразу дату туда добавил. Для того, чтобы прекратить запись, достаточно ввести команду
exit в терминале, и script завершит свою работу.В лог попадёт некоторый "мусор", который затрудняет восприятие вывода. Это связано с тем, что script записывает сырой поток команд, который включает в себя некоторые закодированные ASCII последовательности, например, описывающие цветной вывод или команды терминала, типа возврата каретки и т.д.
Это всё можно разом очистить. Например, так:
# sed -i 's/\x1B\[[0-9;?]*[A-Za-z]//g; s/\x1B\][0-9;]*.*(\x07|\x1B\\)//g;' terminal_2025-10-12_22:42:54.log\x1B\[[0-9;?]*[A-Za-z] - убрали управляющие последовательности (цвета, курсор и bracketed paste);\x1B\][0-9;]*.*(\x07|\x1B\\) - убрали OSC-последовательности ESC ] 0; title ESC \ и некоторые другие;\r - убрали возврат каретки (^M);На выходе будет чистый терминал практический такой же, как вы его видели, когда работали.
Простое и быстрое решение для разовой задачи по сохранению своей работы в терминале. Рекомендую сохранить и использовать по мере необходимости.
Я иногда включаю запись терминала средствами SSH клиента, но туда тоже всякий мусор попадает, надо обрабатывать. Плюс, не всегда всю сессию надо записывать. А тут в терминале включил запись, когда не надо, отключил. Потом очистил и всё видно в наглядном представлении без лишнего мусора. Можно вывод какой-то команды или набора команд сохранить и потом спокойно посмотреть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal #ssh
Please open Telegram to view this post
VIEW IN TELEGRAM
👍127👎3
Я всегда без исключения в Linux использую swap в виде отдельного файла, а не раздела. Причина очень простая - это намного удобнее. Из глубины веков тянется шлейф убеждений, что отдельный раздел работает быстрее, чем файл. Теоретически - да, практически не понятно.
Во-первых, swap в принципе редко используется интенсивно. Во-вторых, как замерить скорость его работы на реальной нагрузке? В-третьих, разница если и будет, то незначительная. Swap в виде файла позволяет на лету менять свой размер или вовсе его отключать, если экстренно понадобится доступное место. Это весомое преимущество, которое стоит использовать.
Swap в 1 ГБ добавляю так:
Если всё ок, то добавляю в
Отдельно отмечу, что не рекомендуется создавать пустой файл с помощью truncate или fallocate:
Он создастся мгновенно, в отличие от
Если swap уже настроен в виде раздела, то трогать уже не буду, если только это не пустая виртуалка. Иногда попадаются виртуалки с lvm, где swap в виде отдельного lv раздела. Это стандартная схема установки в Debian. В этом случае его можно удалить, объединить с основным, а swap сделать в виде файла.
Все эти операции безопасны и могут быть выполнены без перезагрузки. Но как я уже сказал, на работающих серверах не рекомендую это делать, так как потом корневой раздел надо будет увеличивать. Это потенциально небезопасная операция. Но если сильно прижмёт, то сделать можно. Я так делал и не раз.
Последовательность действий тут такая. Смотрим список разделов:
Небольшая виртуалка с диском на 30 ГБ, где 1,5 отдано под swap. Уберём этот раздел и объединим с основным. Отключаем этот swap:
И сразу же проверьте файл /etc/fstab. Там нужно удалить строку с подключением этого раздела. Выглядит примерно так:
Закомментируйте её. Удаляем раздел со свапом:
Расширяем корневой раздел:
И растягиваем файловую систему на весь раздел, так как увеличение раздела не подразумевает её автоматическое увеличение. Она ничего не знает об увеличенном разделе, если ей об этом не сказать.
Проверяем, что получилось:
Раздел стал 29G против предыдущих 27.5G. Дальше можно добавлять swap в виде файла, как я показал в начале. И обязательно, когда всё закончите, перезагрузите виртуалку и убедитесь, что всё в порядке. Все эти операции не требуют перезагрузки, но если где-то ошиблись, особенно в fstab, можете получить проблемы во время загрузки. По горячим следам это легко исправить, а если reboot случится через полгода и система не загрузится, можно сразу не сообразить, из-за чего это.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal #совет
Во-первых, swap в принципе редко используется интенсивно. Во-вторых, как замерить скорость его работы на реальной нагрузке? В-третьих, разница если и будет, то незначительная. Swap в виде файла позволяет на лету менять свой размер или вовсе его отключать, если экстренно понадобится доступное место. Это весомое преимущество, которое стоит использовать.
Swap в 1 ГБ добавляю так:
# dd if=/dev/zero of=/swap bs=1024 count=1000000# mkswap /swap# chmod 0600 /swap# swapon /swapЕсли всё ок, то добавляю в
/etc/fstab:/swap swap swap defaults 0 0Отдельно отмечу, что не рекомендуется создавать пустой файл с помощью truncate или fallocate:
# truncate -s 1G /swap# fallocate -l 1G /swapОн создастся мгновенно, в отличие от
dd, которая явно пишет туда нули. Не помню, в какой документации читал, но запомнил, что swap лучше нулями сразу записать, а не создавать пустым.Если swap уже настроен в виде раздела, то трогать уже не буду, если только это не пустая виртуалка. Иногда попадаются виртуалки с lvm, где swap в виде отдельного lv раздела. Это стандартная схема установки в Debian. В этом случае его можно удалить, объединить с основным, а swap сделать в виде файла.
Все эти операции безопасны и могут быть выполнены без перезагрузки. Но как я уже сказал, на работающих серверах не рекомендую это делать, так как потом корневой раздел надо будет увеличивать. Это потенциально небезопасная операция. Но если сильно прижмёт, то сделать можно. Я так делал и не раз.
Последовательность действий тут такая. Смотрим список разделов:
# lvsroot web-01-vg -wi-ao---- <27.51g
swap_1 web-01-vg -wi-ao---- <1.54gНебольшая виртуалка с диском на 30 ГБ, где 1,5 отдано под swap. Уберём этот раздел и объединим с основным. Отключаем этот swap:
# swapoff -aИ сразу же проверьте файл /etc/fstab. Там нужно удалить строку с подключением этого раздела. Выглядит примерно так:
/dev/mapper/web--01--vg-swap_1 none swap sw 0 0Закомментируйте её. Удаляем раздел со свапом:
# lvremove /dev/web-01-vg/swap_1Do you really want to remove active logical volume web-01-vg/swap_1? [y/n]: y Logical volume "swap_1" successfully removed.Расширяем корневой раздел:
# lvextend -l +100%FREE /dev/web-01-vg/root Size of logical volume web-01-vg/root changed from <27.51 GiB (7042 extents) to 29.04 GiB (7435 extents). Logical volume web-01-vg/root successfully resized.И растягиваем файловую систему на весь раздел, так как увеличение раздела не подразумевает её автоматическое увеличение. Она ничего не знает об увеличенном разделе, если ей об этом не сказать.
# resize2fs /dev/web-01-vg/rootresize2fs 1.47.2 (1-Jan-2025)Filesystem at /dev/web-01-vg/root is mounted on /; on-line resizing requiredold_desc_blocks = 4, new_desc_blocks = 4The filesystem on /dev/web-01-vg/root is now 7613440 (4k) blocks long.Проверяем, что получилось:
# df -h | grep root/dev/mapper/web--01--vg-root 29G 4.7G 23G 18% /Раздел стал 29G против предыдущих 27.5G. Дальше можно добавлять swap в виде файла, как я показал в начале. И обязательно, когда всё закончите, перезагрузите виртуалку и убедитесь, что всё в порядке. Все эти операции не требуют перезагрузки, но если где-то ошиблись, особенно в fstab, можете получить проблемы во время загрузки. По горячим следам это легко исправить, а если reboot случится через полгода и система не загрузится, можно сразу не сообразить, из-за чего это.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍213👎4
Вчера в статье про обновление Debian 12 до Debian 13 Trixie появился полезный комментарий. Автор указал, что в результате обновления удаляется файл
В Debian 13 вообще по умолчанию убрали
Существует устоявшаяся практика по изменению стандартных конфигурационных файлов. Обычно для внесения своих правок используется специальная директория с названием сервиса и
Если вы хотите внести изменения в sysctl, то просто добавьте отдельный файл в
Например, если хотите добавить форвард пакетов между сетевыми интерфейсами, создайте отдельный файл
После этого примените настройку:
Я всё это, конечно же, знаю, но иногда сознательно так не делаю для своего удобства. Мне нравится, когда вся конфигурация в одном файле. Кому-то это кажется наоборот неудобным. Это моё личное предпочтение, за которое я часто получал критику, если делал все изменения в стандартном конфигурационном файле.
Например, я предпочитаю, когда конфигурация Postfix или Dovecot в одном общем файле, а не раскиданная по нескольким. А в Nginx или Logstash по разным. Там есть логическое разделение по смыслам. В случае Nginx всё очевидно - разные виртуальны хосты, разные файлы конфигураций. В Logstash тоже разные процедуры с данными в разных файлах.
В общем случае вносить изменения стоит в корректирующие файлы конфигурации, а не основные. А как вам удобнее, решайте сами. Просто знайте, что иногда ваш файл может быть перезаписан. Изменения обычно не теряются, так как старый файл сохраняется рядом с другим расширением. Ещё популярные примеры из этой области:
◽️
◽️
◽️
◽️
◽️
◽️
Ну и так далее. Это типичная картина для файлов конфигураций служб в Linux. Скорее будет исключение, если служба будет использовать другой подход к организации конфигурационных файлов.
А вы как предпочитаете хранить конфигурации? Как правильно или как удобно?
#linux
/etc/sysctl.conf, а старый переименовывается на /etc/sysctl.conf.dpkg-bak. Соответственно, все внесённые настройки не применяются. Этого стоит ожидать и понимать, что такое может произойти, хотя на моей памяти ни разу такого не видел с sysctl.conf, потому что я обычно вношу изменения именно в него. В Debian 13 вообще по умолчанию убрали
/etc/sysctl.conf, так как за эти настройки отвечает служба systemd-sysctl, которая хранит свои настройки в /usr/lib/sysctl.d/.Существует устоявшаяся практика по изменению стандартных конфигурационных файлов. Обычно для внесения своих правок используется специальная директория с названием сервиса и
.d на конце. Для примера с sysctl это всегда была директория /etc/sysctl.d, а сейчас /usr/lib/sysctl.d/. Хотя старая вроде бы тоже подгружается в момент загрузки системы.Если вы хотите внести изменения в sysctl, то просто добавьте отдельный файл в
/etc/sysctl.d и внесите свои правки туда. Имя файла при этом чаще всего может быть любым, главное следить за расширением .conf. Обычно на это проверка стоит и к основной конфигурации подключаются только файлы определённого расширения.Например, если хотите добавить форвард пакетов между сетевыми интерфейсами, создайте отдельный файл
/etc/sysctl.d/forward.conf и добавьте туда:net.ipv4.ip_forward = 1После этого примените настройку:
# sysctl -p /etc/sysctl.d/forward.confnet.ipv4.ip_forward = 1Я всё это, конечно же, знаю, но иногда сознательно так не делаю для своего удобства. Мне нравится, когда вся конфигурация в одном файле. Кому-то это кажется наоборот неудобным. Это моё личное предпочтение, за которое я часто получал критику, если делал все изменения в стандартном конфигурационном файле.
Например, я предпочитаю, когда конфигурация Postfix или Dovecot в одном общем файле, а не раскиданная по нескольким. А в Nginx или Logstash по разным. Там есть логическое разделение по смыслам. В случае Nginx всё очевидно - разные виртуальны хосты, разные файлы конфигураций. В Logstash тоже разные процедуры с данными в разных файлах.
В общем случае вносить изменения стоит в корректирующие файлы конфигурации, а не основные. А как вам удобнее, решайте сами. Просто знайте, что иногда ваш файл может быть перезаписан. Изменения обычно не теряются, так как старый файл сохраняется рядом с другим расширением. Ещё популярные примеры из этой области:
◽️
/etc/zabbix/zabbix_agentd.d◽️
/etc/fail2ban/fail2ban.d◽️
/etc/dovecot/conf.d◽️
/etc/sudoers.d◽️
/etc/mysql/mariadb.conf.d◽️
/etc/logstash/conf.dНу и так далее. Это типичная картина для файлов конфигураций служб в Linux. Скорее будет исключение, если служба будет использовать другой подход к организации конфигурационных файлов.
А вы как предпочитаете хранить конфигурации? Как правильно или как удобно?
#linux
👍115👎2
На прошлой неделе просматривал видео некоторых блогеров. У кого-то заметил экран приветствия на сервере после подключения по SSH. Сразу не записал, у кого увидел, вроде у Realmanual, но не уверен. Потом уже не нашёл. Но не суть.
Я всегда знал, что приветствие можно настроить, но особо не заморачивался. Максимум, что настраивал при подключении, запуск команды
А тут увидел приветствие, которое мне понравилось. Я полный вывод не запоминал, только оставил себе пометку подумать, что было бы полезно увидеть мне. В итоге сделал себе и сохранил для использования такое приветствие:
Пояснять тут особо нечего. Отмечу только, что в качестве IP взял настройку самого первого не
Настроить это очень просто. Любой ИИ вам соберёт по запросу подходящий bash скрипт, который нужно будет положить
Заодно удалил строку:
Она находится в файле
Закомментировал её. Получил приветствие, как на картинке снизу. Мне понравилась. На свои сервера буду добавлять.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux
Я всегда знал, что приветствие можно настроить, но особо не заморачивался. Максимум, что настраивал при подключении, запуск команды
w, чтобы увидеть главным образом активные сессии и понимать, что ты не один на сервере. Иногда это работало как хорошая пугалка, если у тебя осталась висеть твоя же сессия, только с какого-то непривычного IP.А тут увидел приветствие, которое мне понравилось. Я полный вывод не запоминал, только оставил себе пометку подумать, что было бы полезно увидеть мне. В итоге сделал себе и сохранил для использования такое приветствие:
-----------------------------------------IP : 95.183.13.208Hostname : serveradmin.ruOS : Debian GNU/Linux 12 (bookworm)USER : rootLoad Average : 0.08 0.06 0.04Uptime : up 1 week, 6 hours, 32 minutes-----------------------------------------CPU : 2 CPURAM : 3915 MB, 1055 MB (26%) freeHDD (/) : 60G, 36G (60%) free-----------------------------------------Пояснять тут особо нечего. Отмечу только, что в качестве IP взял настройку самого первого не
lo интерфейса. У меня это практически всегда основной IP адрес, который я хочу видеть. А пользователя root подкрашиваю в красный цвет.Настроить это очень просто. Любой ИИ вам соберёт по запросу подходящий bash скрипт, который нужно будет положить
/etc/profile.d. Потом можно его подправить по своему вкусу. Я в итоге оставил такой:#!/bin/bash
# Цвета
RED='\033[0;31m'
NC='\033[0m' # No Color
# IP первого сетевого интерфейса
LOCAL_IP=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+' | grep -v '^127\.' | head -n 1)
# Имя сервера
HOSTNAME=$(hostname)
# ОС
OS=$(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"')
# Пользователь
USER_NAME=$(whoami)
# Root красным
if [ "$USER_NAME" = "root" ]; then
USER_NAME="${RED}${USER_NAME}${NC}"
fi
# Load average
LOADAVG=$(awk '{print $1" "$2" "$3}' /proc/loadavg)
# Uptime
UPTIME=$(uptime -p)
# Количество CPU
CPU_COUNT=$(nproc)
# RAM: всего и свободно (в мегабайтах)
RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
RAM_FREE=$(free -m | awk '/Mem:/ {print $7}')
RAM_FREE_PCT=$(( RAM_FREE * 100 / RAM_TOTAL ))
# HDD: для корневого раздела /
DISK_TOTAL_HUMAN=$(df -h / | awk 'NR==2 {print $2}')
DISK_FREE_HUMAN=$(df -h / | awk 'NR==2 {print $4}')
# Используем df без форматирования для процентов
DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}')
DISK_FREE=$(df -k / | awk 'NR==2 {print $4}')
DISK_FREE_PCT=$(( DISK_FREE * 100 / DISK_TOTAL ))
echo ""
echo "-----------------------------------------"
echo "IP : ${LOCAL_IP:-N/A}"
echo "Hostname : $HOSTNAME"
echo "OS : $OS"
echo -e "USER : $USER_NAME"
echo "Load Average : $LOADAVG"
echo "Uptime : $UPTIME"
echo "-----------------------------------------"
echo "CPU : ${CPU_COUNT} CPU"
echo "RAM : ${RAM_TOTAL} MB, ${RAM_FREE} MB (${RAM_FREE_PCT}%) free"
echo "HDD (/) : ${DISK_TOTAL_HUMAN}, ${DISK_FREE_HUMAN} (${DISK_FREE_PCT}%) free"
echo "-----------------------------------------"
echo ""
Заодно удалил строку:
The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Она находится в файле
/etc/motd и подключается в /etc/pam.d/sshd в строке:session optional pam_motd.so noupdateЗакомментировал её. Получил приветствие, как на картинке снизу. Мне понравилась. На свои сервера буду добавлять.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍321👎2
Вчера написал заметку про настройку приветствия при подключении к серверу. В комментариях автор, у которого я вдохновился идеей, подкинул ещё одну очень удобную фишку по решению небольшой проблемы. Причём именно той, о которой я много раз думал, что неплохо бы как-то это решить, но даже не представлял как.
У меня в виртуалках и контейнерах Proxmox чаще всего IP адреса назначаются автоматически через DHCP. Иногда хочется быстро посмотреть IP адрес контейнера или виртуалки через веб интерфейс, особенно если он по какой-то причине изменился или не был жёстко привязан по MAC или Machine-ID.
Для VM это чаще всего решается быстро, так как я всегда устанавливаю QEMU Guest Agent. С его помощью IP адрес выводится на основную вкладку Summary виртуальной машины. А вот с контейнерами это так не работает. Приходится либо в него заходить через консоль, либо смотреть на DHCP сервере.
Этот вопрос можно решить с помощью файла
Чаще всего сетевой интерфейс контейнера имеет имя
Очень просто и удобно. Файл
Для виртуалок это тоже можно использовать, но там есть проблема. Сетевые интерфейсы могут называться сильно по-разному: ens18, enp0s18 и т.д. Если вы принудительно не приводили их к старому наименованию в виде ethX, то придётся для каждого случая прописывать имя сетевого интерфейса.
ИИ написал, что можно указать конструкцию вида
If the interface argument is not specified, then select the first fully configured (UP, non-LOCALBACK, RUNNING) interface. If no configured interface is found, fall back to the IP address of the machine’s hostname.
То есть указываем просто
Очень удобная весчь. Мне понравилось. Реально не хватало в повседневной работе.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux
У меня в виртуалках и контейнерах Proxmox чаще всего IP адреса назначаются автоматически через DHCP. Иногда хочется быстро посмотреть IP адрес контейнера или виртуалки через веб интерфейс, особенно если он по какой-то причине изменился или не был жёстко привязан по MAC или Machine-ID.
Для VM это чаще всего решается быстро, так как я всегда устанавливаю QEMU Guest Agent. С его помощью IP адрес выводится на основную вкладку Summary виртуальной машины. А вот с контейнерами это так не работает. Приходится либо в него заходить через консоль, либо смотреть на DHCP сервере.
Этот вопрос можно решить с помощью файла
/etc/issue. Вообще не знал до сего дня для чего он существует и какие открывает возможности. Добавляем туда в LXC контейнере:eth0: \4{eth0}Чаще всего сетевой интерфейс контейнера имеет имя
eth0. Теперь открыв консоль контейнера через веб интерфейсе Proxmox, вы увидите его текущий IP адрес:Debian GNU/Linux 12 Debian12-ct tty1eth0: 192.168.137.29Debian12-ct login:Очень просто и удобно. Файл
/etc/issue в Linux - это шаблон приветственного сообщения (pre-login banner), который выводится до появления приглашения login: на локальной консоли (tty). Важно понимать, что подключения по SSH не используют /etc/issue. Это шаблон только для локальных консолей.Для виртуалок это тоже можно использовать, но там есть проблема. Сетевые интерфейсы могут называться сильно по-разному: ens18, enp0s18 и т.д. Если вы принудительно не приводили их к старому наименованию в виде ethX, то придётся для каждого случая прописывать имя сетевого интерфейса.
ИИ написал, что можно указать конструкцию вида
\4{all} для вывода всех IP адресов, но в Debian 13 это не работает. Не знаю, откуда он это взял. Я воспользовался старорежимным дедовским методом и прочитал man:# man agettyIf the interface argument is not specified, then select the first fully configured (UP, non-LOCALBACK, RUNNING) interface. If no configured interface is found, fall back to the IP address of the machine’s hostname.
То есть указываем просто
\4 или для красоты IP: \4 и получаем приветствие с IP адресом, который будет взят с первого активного сетевого интерфейса, но не lo. В принципе, этот вариант можно использовать как универсальный и для VM, и для контейнеров.Очень удобная весчь. Мне понравилось. Реально не хватало в повседневной работе.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍172👎3
Предлагаю вашему вниманию один проект, который мне прислал подписчик, он же, соответственно, и автор. С его помощью можно отправлять результаты работы команды, выполненной на сервере, в Telegram. То есть это лёгкая CLI обёртка, через которую запускается команда, например, по cron или вручную, а результат её работы в виде времени выполнения, кода выхода и самого вывода будет отправляться в Telegram.
Программа называется tg_exec. В репозитории в том числе описание на русском языке. Мне показалась эта штука удобной, так что решил написать. На первый взгляд всё это видится чем-то подозрительным и небезопасным. Я бегло глянул код на go. Там немного и читается легко. На первый взгляд чего-то необычного там нет. Перехватывается вывод команды и отправляется в телегу. Можно и самому такое наколхозить, но тут всё уже аккуратно собрано в пакет, с конфигурацией, переменными, красивым выводом.
Для того, чтобы пользоваться, делаем так:
1️⃣ Устанавливаем пакет, забрав его из репозитория.
2️⃣ Добавляем в конфигурационный файл
Я проверял и через прямую отправку себе, и через отправку в группу. Нормально работает.
3️⃣ Запускаем любую команду через tg-exec. На первый раз можно в режиме debug:
Как это выглядит в Telegram можно посмотреть на картинке снизу. Всё аккуратно и наглядно.
В tg-exec можно обернуть команды в кроне, чтобы следить за их выполнением. Можно использовать для каких-то длительных сборок, чтобы узнать, когда она закончится, или где-то в пайплайнах. Тут уже сами смотрите, где может пригодиться.
☝️Когда тестировал, столкнулся с тем, что уведомления не отправлялись. Вылезала ошибка с таймаутом. Оказалось, что сервер пытался по ipv6 достучаться до api.telegram.org и у него это не получалось. Отключил ipv6 и всё заработало. Это ещё один пример, когда работающий ipv6 доставляет проблемы. Я уже как-то делал заметку по этому поводу и там были бурные обсуждения. Но по факту в РФ пока нужды в ipv6 нет. С этим протоколом только лишние проблемы и хлопоты.
На мой взгляд простая, понятная и удобная утилита. Можно пользоваться. Думаю, автор тут ответит, если у кого-то будут вопросы или пожелания по программе. Я даже не знаю, что тут можно улучшить или добавить. Свою задачу она нормально выполняет.
Не забудьте наставить звёздочек в репозиторий. Автор постарался, красиво всё оформил, описал, пакет собрал, мне написал.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
Программа называется tg_exec. В репозитории в том числе описание на русском языке. Мне показалась эта штука удобной, так что решил написать. На первый взгляд всё это видится чем-то подозрительным и небезопасным. Я бегло глянул код на go. Там немного и читается легко. На первый взгляд чего-то необычного там нет. Перехватывается вывод команды и отправляется в телегу. Можно и самому такое наколхозить, но тут всё уже аккуратно собрано в пакет, с конфигурацией, переменными, красивым выводом.
Для того, чтобы пользоваться, делаем так:
# wget https://github.com/WithoutCowards/tg_exec/releases/download/1.0.3/tg-exec_1.0.3_amd64.deb# dpkg -i tg-exec_*_amd64.deb/etc/tg-exec/config.conf токен бота и свой ID. Для тех, кто совсем не знает, что это такое, поясню. Бота создаём через телеграмовского бота @BotFather, а свой ID или ID чата, куда будет добавлен этот бот, узнаём через бота @my_id_bot.Я проверял и через прямую отправку себе, и через отправку в группу. Нормально работает.
# DEBUG=1 tg-exec "apt update"# DEBUG=1 tg-exec "df -h"Как это выглядит в Telegram можно посмотреть на картинке снизу. Всё аккуратно и наглядно.
В tg-exec можно обернуть команды в кроне, чтобы следить за их выполнением. Можно использовать для каких-то длительных сборок, чтобы узнать, когда она закончится, или где-то в пайплайнах. Тут уже сами смотрите, где может пригодиться.
☝️Когда тестировал, столкнулся с тем, что уведомления не отправлялись. Вылезала ошибка с таймаутом. Оказалось, что сервер пытался по ipv6 достучаться до api.telegram.org и у него это не получалось. Отключил ipv6 и всё заработало. Это ещё один пример, когда работающий ipv6 доставляет проблемы. Я уже как-то делал заметку по этому поводу и там были бурные обсуждения. Но по факту в РФ пока нужды в ipv6 нет. С этим протоколом только лишние проблемы и хлопоты.
На мой взгляд простая, понятная и удобная утилита. Можно пользоваться. Думаю, автор тут ответит, если у кого-то будут вопросы или пожелания по программе. Я даже не знаю, что тут можно улучшить или добавить. Свою задачу она нормально выполняет.
Не забудьте наставить звёздочек в репозиторий. Автор постарался, красиво всё оформил, описал, пакет собрал, мне написал.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍187👎2
Я вчера рассказывал про программу, которая позволяет отправлять в Telegram отчёты о выполнении какой-то команды. Сразу возникло желание получить какой-то инструмент и для обратной связи - выполнять на сервере команду, которая вводится в чате в Telegram.
На эту тему очень много решений, как очень простых в виде небольшого python скрипта, так и более развитых проектов на github. Я попробовал и первое, и второе. Расскажу про то, что понравилось больше всего - shell2telegram.
Сразу отмечу, чем понравился:
➕ Есть deb и rpm пакеты, а так же присутствует в репозитории snap. Сам по себе это один бинарник на go. В пакет упакован для удобства вместе с man.
➕ Есть возможность ограничить набор доступных команд.
➕ Для выполнения команд можно настроить авторизацию.
➕ Есть встроенная статистика и некоторое управление в боте.
Показываю, как пользоваться:
1️⃣ Скачиваем и устанавливаем пакет:
2️⃣ Записываем в переменную окружения токен бота:
3️⃣ Запускаем с парой доступных команд:
Команда
4️⃣ Идём в бота и проходим авторизацию для запуска команд от root:
Идём в консоль сервера, видим там код для авторизации. Вводим его боту:
Получил сообщение:
5️⃣ Вводим боту команды и смотрим вывод со списком процессов:
С помощью ключей
Можно посмотреть статистику выполнения команд, отправив боту:
Или погасить его прямо из Telegram:
Все доступные команды описаны в репозитории или в man.
Можно много всего накостылить с её помощью. Я обернул в systemd, чтобы работала как служба. Для этого создал файл
И запустил:
Интересная и функциональная штука. Можно, например, добавлять и удалять правила файрвола. К примеру, разрешим подключаться к SSH. В консоли это выглядит так:
Нам надо обернуть эту команду в Shell2Telegram. Бот принимает аргумент после команды как STDIN в консольную команду. В Iptables STDIN можно передать через простой скрипт-прокладку. Создаём исполняемый скрипт
Запускаем:
Выполняем в боте:
Проверяем в консоли:
Так можно много всего придумать. Если у вас есть идеи, для чего это может пригодиться, делитесь.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
На эту тему очень много решений, как очень простых в виде небольшого python скрипта, так и более развитых проектов на github. Я попробовал и первое, и второе. Расскажу про то, что понравилось больше всего - shell2telegram.
Сразу отмечу, чем понравился:
Показываю, как пользоваться:
# wget https://github.com/msoap/shell2telegram/releases/download/v1.10.0/shell2telegram_1.10.0_linux_amd64.deb# dpkg -i shell2telegram_1.10.0_linux_amd64.deb# export TB_TOKEN=55555555:AAAAAAAAAAAAA# shell2telegram /topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \ /topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'Команда
/topcpu выводит 10 лидеров среди процессов по CPU, /topmem - по памяти./authrootИдём в консоль сервера, видим там код для авторизации. Вводим его боту:
/authroot ZJНрhiRGB1NLbkLD5VySПолучил сообщение:
You (Vladimir Zp (@zeroxzed)) authorized as root./topcpu/topmemС помощью ключей
-allow-users= и -root-users= можно сразу перечислить пользователей с доступом к боту, чтобы не нужно было использовать коды:# shell2telegram -root-users="zeroxzed" \ /topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \ /topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'Можно посмотреть статистику выполнения команд, отправив боту:
/shell2telegram statИли погасить его прямо из Telegram:
/shell2telegram exitВсе доступные команды описаны в репозитории или в man.
Можно много всего накостылить с её помощью. Я обернул в systemd, чтобы работала как служба. Для этого создал файл
/etc/systemd/system/shell2telegram.service. Закинул туда:[Unit]
Description=Shell2Telegram bot
After=network.target
[Service]
Type=simple
Environment=TB_TOKEN=55555555:AAAAAAAAAAAAAA
ExecStart=/usr/bin/shell2telegram -root-users="zeroxzed" \
/topcpu:desc="Top CPU Procs" 'ps -e -o pcpu,pmem,args --sort -pcpu | head -10' \
/topmem:desc="Top MEM Procs" 'ps -e -o pcpu,pmem,args --sort -pmem | head -10'
Restart=on-failure
RestartSec=5
User=root
WorkingDirectory=/root
[Install]
WantedBy=multi-user.target
И запустил:
# systemctl daemon-reload# systemctl enable --now shell2telegram.serviceИнтересная и функциональная штука. Можно, например, добавлять и удалять правила файрвола. К примеру, разрешим подключаться к SSH. В консоли это выглядит так:
# iptables -A INPUT -i ens18 -s 192.168.13.5 -p tcp --dport 22 -j ACCEPTНам надо обернуть эту команду в Shell2Telegram. Бот принимает аргумент после команды как STDIN в консольную команду. В Iptables STDIN можно передать через простой скрипт-прокладку. Создаём исполняемый скрипт
addip.sh:#!/bin/bash
read ip
iptables -A INPUT -i ens18 -s "$ip" -p tcp --dport 22 -j ACCEPT
Запускаем:
# shell2telegram /addip:desc="Add IP to Iptables" '~/addip.sh'Выполняем в боте:
/addip 1.2.3.4Проверяем в консоли:
# iptables -L -v -n | grep 22 0 0 ACCEPT tcp -- ens18 * 1.2.3.4 0.0.0.0/0 tcp dpt:22Так можно много всего придумать. Если у вас есть идеи, для чего это может пригодиться, делитесь.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍116👎9
Для анализа занятого места на дисках в Linux есть встроенная утилита du. Если к ней приловчиться и запомнить некоторые ключи, то больше ничего и не нужно. Например, заходим в директорию и вводим:
Получаем отсортированный список всех директорий с размером в порядке убывания. Просто и удобно.
Вот ещё один вариант, который иногда использую. Простой скрипт, который проверяет размер директорий и записывает результат тут же в файл:
Это актуально, к примеру, для почтового сервера, когда надо посмотреть, какие ящики наиболее объёмные, или для списка сайтов на веб сервере, чтобы понять, какой из них пухнет выше нормы. Если это происходит регулярно, то история замеров иногда помогает, особенно если размер хранилища очень большой и его обсчёт занимает много времени. Для хранилища почтового сервера в формате maildir это актуально. Там обсчёт всех ящиков может минуты длиться. То же самое для большого сервера бэкапов. Иногда и десятки минут могут уйти для обсчёта большого хранилища на HDD дисках с миллионами мелких файлов.
Если вопрос с занятым местом на сервере возникает регулярно, а решать его удобнее интерактивно, то я почти всегда поставлю туда ncdu. По умолчанию его нет в моём списке обязательного софта, который ставлю, но при необходимости поставлю именно его. Он давно есть в стандартных репозиториях, поэтому изначально выбор был в его пользу, а теперь уже привык.
У ncdu свой механизм сканирования, и работает он значительно быстрее du. Плюс, интерактивно в некоторых ситуациях быстрее разобраться с проблемой занятого места.
Если надо максимально быстро сканировать каталоги и узнавать их размер, то можно взять консольную утилиту dust. Мне она известна давно, ещё со времён, когда её не было в стандартных репозиториях дистрибутивов, а ставить приходилось вручную. Это и ограничивало использование. С выходом Debian 13 этой проблемы нет. Утилита появилась в стандартном репозитории под именем du-dust:
Dust использует свой механизм обхода каталогов, который быстрее du и в некоторых ситуациях быстрее ncdu. Плюс, у него наглядный псевдографический вывод директорий с размерами и с подсветкой самых объёмных. Визуально легко оценить реальную картину на дисках. Для какого-нибудь большого сервера с бэкапами сырых данных эта утилита будет актуальна.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
# du -hd1 | sort -hrПолучаем отсортированный список всех директорий с размером в порядке убывания. Просто и удобно.
Вот ещё один вариант, который иногда использую. Простой скрипт, который проверяет размер директорий и записывает результат тут же в файл:
#!/bin/bash
{
echo "=================================="
echo "Dirs size $(date +"%Y-%m-%d_%H-%M")"
echo "=================================="
} >> dirs_size.txt
du -s -- * | sort -nr | cut -f 2- | while read -r a; do du -hs "$a" >> dirs_size.txt; done
Это актуально, к примеру, для почтового сервера, когда надо посмотреть, какие ящики наиболее объёмные, или для списка сайтов на веб сервере, чтобы понять, какой из них пухнет выше нормы. Если это происходит регулярно, то история замеров иногда помогает, особенно если размер хранилища очень большой и его обсчёт занимает много времени. Для хранилища почтового сервера в формате maildir это актуально. Там обсчёт всех ящиков может минуты длиться. То же самое для большого сервера бэкапов. Иногда и десятки минут могут уйти для обсчёта большого хранилища на HDD дисках с миллионами мелких файлов.
Если вопрос с занятым местом на сервере возникает регулярно, а решать его удобнее интерактивно, то я почти всегда поставлю туда ncdu. По умолчанию его нет в моём списке обязательного софта, который ставлю, но при необходимости поставлю именно его. Он давно есть в стандартных репозиториях, поэтому изначально выбор был в его пользу, а теперь уже привык.
# apt install ncduУ ncdu свой механизм сканирования, и работает он значительно быстрее du. Плюс, интерактивно в некоторых ситуациях быстрее разобраться с проблемой занятого места.
Если надо максимально быстро сканировать каталоги и узнавать их размер, то можно взять консольную утилиту dust. Мне она известна давно, ещё со времён, когда её не было в стандартных репозиториях дистрибутивов, а ставить приходилось вручную. Это и ограничивало использование. С выходом Debian 13 этой проблемы нет. Утилита появилась в стандартном репозитории под именем du-dust:
# apt install du-dustDust использует свой механизм обхода каталогов, который быстрее du и в некоторых ситуациях быстрее ncdu. Плюс, у него наглядный псевдографический вывод директорий с размерами и с подсветкой самых объёмных. Визуально легко оценить реальную картину на дисках. Для какого-нибудь большого сервера с бэкапами сырых данных эта утилита будет актуальна.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍228👎3
В стандартных репозиториях Debian, да и многих других дистрибутивов давно живёт небольшая и неприметная утилита grc, которая умеет подкрашивать терминал для популярных утилит и типовых логов. Использовать её очень просто, ничего запоминать не надо.
И теперь можно подсвечивать почти все типовые действия в консоли:
На картинках ниже примеры того, как это выглядит. Вроде и ничего особенного, но глазу приятнее и в целом более наглядно при анализе информации. А главное запоминать ничего не надо. Никаких ключей, настроек и т.д. Просто добавляете перед командой grc и всё. При желании, можно алиасы добавить.
Причём в Debian для алиасов уже всё настроено. Достаточно в в файле /etc/default/grc указать параметр:
После этого активируется файл конфигураций
Некоторые современные SSH клиенты сами умеют подкрашивать некоторые строки. Например, в MobaXterm по умолчанию по шаблонам есть подсветка некоторых элементов: подсветка IP адресов, слов error, warn и т.д. Но я обычно это отключаю, что видеть исходный терминал так, как он есть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux #terminal
# apt install grcИ теперь можно подсвечивать почти все типовые действия в консоли:
# grc ss -tulnp# grc ps axf# grc ping ya.ru# grc cat /var/log/syslog# grc tail -f /var/log/syslogНа картинках ниже примеры того, как это выглядит. Вроде и ничего особенного, но глазу приятнее и в целом более наглядно при анализе информации. А главное запоминать ничего не надо. Никаких ключей, настроек и т.д. Просто добавляете перед командой grc и всё. При желании, можно алиасы добавить.
Причём в Debian для алиасов уже всё настроено. Достаточно в в файле /etc/default/grc указать параметр:
GRC_ALIASES=trueПосле этого активируется файл конфигураций
/etc/profile.d/grc.sh и подсветка будет активирована для добавленных туда утилит.Некоторые современные SSH клиенты сами умеют подкрашивать некоторые строки. Например, в MobaXterm по умолчанию по шаблонам есть подсветка некоторых элементов: подсветка IP адресов, слов error, warn и т.д. Но я обычно это отключаю, что видеть исходный терминал так, как он есть.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍213👎3
Рассказываю, как выполнить важную базовую настройку, которую я обычно делаю на всех серверах. Речь пойдёт про отправку системной почты пользователя root через внешний почтовый сервер. Для этого можно использовать любой smtp клиент, например ssmtp или msmtp.
Я обычно использую в этой роли Postfix, потому что хорошо его знаю, плюс он позволяет в случае необходимости делать расширенные настройки, которые иногда нужны. Например, заменять заголовки, использовать разные сервера для отправки, блокировать отправку по разным направлениям, разрешая только одно и т.д.
Если Postfix не установлен, то надо поставить:
Сохраняем на всякий случай стандартную конфигурацию и заменяем своей:
Содержимое
Здесь достаточно поменять адрес сервера и порт
◽️mail.zeroxzed.ru - имя почтового сервера, такое же как в параметре relayhost
◽️servers@zeroxzed.ru:password123 - почтовый ящик и пароль от него
Файл generic имеет следующий формат:
Здесь мы указываем, что в письмах отправителя root меняем на servers@zeroxzed.ru. Это нужно для того, чтобы не было проблем с доставкой. Если у вас имя сервера имеет вид srv.local, то без этой замены отправитель будет root@srv.local. С таким отправителем вашу почту большинство серверов не примут, ответив что-то в духе: "Sender address rejected: Domain not found". А почтовая служба Яндекса в обязательном порядке требует, чтобы имя пользователя для аутентификации совпадало с адресом отправителя, иначе письмо не будет отправлено.
Вы можете для каждого сервера делать отдельный почтовый ящик, либо использовать один и тот же. Я обычно использую один и тот же, чтобы не плодить лишние сущности. Но с разными ящиками более гибкие настройки могут быть. Я различаю сервера по имени сервера в теме письма, а отправитель везде один.
Формируем на основе текстовых файлов локальные базы данных, с которыми будет работать Postfix, и перезапускаем его:
Проверяем отправку:
Письмо нормально улетело в Gmail. В теме письма - имя сервера, в отправителе - root <servers@zeroxzed.ru>.
Теперь сделаем так, чтобы локальная почта, адресованная пользователю root, отправлялась куда-то на внешний ящик. Для этого добавляем в
И обновляем базу алиасов:
Проверяем:
В ящик root@zeroxzed.ru должно прийти письмо от root <servers@zeroxzed.ru>.
Теперь все системные уведомления для root будут отправляться в этот ящик. Проверим на каком-нибудь задании crontab с ошибкой. Для этого создадим такое ошибочное задание на выполнение несуществующей команды:
Добавляем задачу:
Сохраняем и ждём минуту. Получаем на почту ошибку выполнения задания cron. Тема письма будет примерно такая: "Cron <root@srv-web01> /usr/bin/command-not-found". По имени сервера srv-web01 можно сделать правило фильтрации.
С такими настройками, к примеру, кроны с rsync и ключами
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX
#linux
Я обычно использую в этой роли Postfix, потому что хорошо его знаю, плюс он позволяет в случае необходимости делать расширенные настройки, которые иногда нужны. Например, заменять заголовки, использовать разные сервера для отправки, блокировать отправку по разным направлениям, разрешая только одно и т.д.
Если Postfix не установлен, то надо поставить:
# apt install postfixСохраняем на всякий случай стандартную конфигурацию и заменяем своей:
# cp main.cf main.cf.origСодержимое
main.cf:relayhost = mail.zeroxzed.ru:465smtp_sasl_auth_enable = yessmtp_sasl_security_options =smtp_tls_CAfile = /etc/ssl/certs/Entrust_Root_Certification_Authority.pemsmtp_tls_session_cache_database = btree:/var/lib/postfix/smtp_tls_session_cachesmtp_tls_session_cache_timeout = 3600ssmtp_tls_wrappermode = yessmtp_tls_security_level = encryptsmtp_sasl_password_maps = hash:/etc/postfix/sasl_passwdsmtp_generic_maps = hash:/etc/postfix/genericЗдесь достаточно поменять адрес сервера и порт
mail.zeroxzed.ru:465 на свои. Создаём файл sasl_passwd, где будут храниться данные для аутентификации. Формат такой:mail.zeroxzed.ru servers@zeroxzed.ru:password123◽️mail.zeroxzed.ru - имя почтового сервера, такое же как в параметре relayhost
◽️servers@zeroxzed.ru:password123 - почтовый ящик и пароль от него
Файл generic имеет следующий формат:
root servers@zeroxzed.ruЗдесь мы указываем, что в письмах отправителя root меняем на servers@zeroxzed.ru. Это нужно для того, чтобы не было проблем с доставкой. Если у вас имя сервера имеет вид srv.local, то без этой замены отправитель будет root@srv.local. С таким отправителем вашу почту большинство серверов не примут, ответив что-то в духе: "Sender address rejected: Domain not found". А почтовая служба Яндекса в обязательном порядке требует, чтобы имя пользователя для аутентификации совпадало с адресом отправителя, иначе письмо не будет отправлено.
Вы можете для каждого сервера делать отдельный почтовый ящик, либо использовать один и тот же. Я обычно использую один и тот же, чтобы не плодить лишние сущности. Но с разными ящиками более гибкие настройки могут быть. Я различаю сервера по имени сервера в теме письма, а отправитель везде один.
Формируем на основе текстовых файлов локальные базы данных, с которыми будет работать Postfix, и перезапускаем его:
# postmap /etc/postfix/generic /etc/postfix/sasl_passwd# systemctl restart postfixПроверяем отправку:
# echo "Test body message." | mail -s "$(hostname)" zeroxzed@gmail.comПисьмо нормально улетело в Gmail. В теме письма - имя сервера, в отправителе - root <servers@zeroxzed.ru>.
Теперь сделаем так, чтобы локальная почта, адресованная пользователю root, отправлялась куда-то на внешний ящик. Для этого добавляем в
/etc/aliases:root: root@zeroxzed.ruИ обновляем базу алиасов:
newaliasesПроверяем:
# echo "Test body message." | mail -s "$(hostname)" rootВ ящик root@zeroxzed.ru должно прийти письмо от root <servers@zeroxzed.ru>.
Теперь все системные уведомления для root будут отправляться в этот ящик. Проверим на каком-нибудь задании crontab с ошибкой. Для этого создадим такое ошибочное задание на выполнение несуществующей команды:
# crontab -eДобавляем задачу:
* * * * * /usr/bin/command-not-foundСохраняем и ждём минуту. Получаем на почту ошибку выполнения задания cron. Тема письма будет примерно такая: "Cron <root@srv-web01> /usr/bin/command-not-found". По имени сервера srv-web01 можно сделать правило фильтрации.
С такими настройками, к примеру, кроны с rsync и ключами
-v или --progress шлют вывод rsync на почту. Удобно бегло посмотреть, что там куда копируется, или увидеть ошибки, если есть.❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍172👎2
Пару недель назад прочитал полезную статью на хабре:
⇨ Бросил tmux и написал свой инструмент
Там автор прошёлся прям по больному. Он рассказал про разные терминальные мультиплексоры с упоминанием проблем, которые напрягают в повседневной работе. Я нигде и ни от кого не видел ранее такую подборку. Думал всегда, что это я один страдаю из-за неудобного скрола мышки в screen или глюками с буферами или интерактивными утилитами в tmux. Там в статье прям по пунктам всякие неудобства перечислены и чем они вызваны с точки зрения архитектуры приложений.
Вроде основную задачу по сохранении сессии SSH при разрыве соединения решают и screen, и tmux, но пользоваться ими неудобно. Я последние года стал пользоваться повсеместно tmux вместо screen, но всё равно из-за разных глюков делал это редко и только для долгоиграющих процедур, типа обновления, которые крайне нежелательно прерывать. Во всех остальных случаях я отключал мультиплексор и работал напрямую в консоли. А разделение сессий на одном экране реализовывал с помощью менеджера соединений, а не мультиплексора.
В итоге автор написал небольшую утилиту atch на С, которая работает идеально, если вам нужно просто сохранять сессию при разрыве соединения и потом обратно в неё подключаться. Нет никакой эмуляции терминала, как в screen или tmux. Atch ничего не парсит, не перекодирует, поэтому нет проблем со скролом мышки, пропаданием истории терминала, глюками с OSC-последовательностями.
Работает atch так, как надо, без каких-либо дополнительных настроек. Я попробовал, очень понравилось. В репозитории есть собранный бинарник, его достаточно скачать:
Утилита совсем новая. В репозиториях дистрибутивов её, разумеется, пока нет. Очень надеюсь, что она там со временем появится, потому что она удобна и проста, решает ровно одну задачу и делает это хорошо. Всё в духе философии UNIX.
Дальше создаём сессию work:
И работаем в ней. Если соединение разорвалось, то подключаемся заново по SSH и заходим в сессию:
Видим тут же в терминале всю историю терминала, которая была до отключения!!! Она пишется в
Смотрим список сессий:
Всё интуитивно и просто. Запоминать команды не нужно. Этого достаточно, чтобы пользоваться, для моих задач. Я после перехода из screen в tmux постоянно вспоминаю, как посмотреть список сессий.
Можно запустить любой процесс через atch и потом посмотреть консольный вывод из любого места, подключившись в созданную сессию:
И история автоматом сохранится. Автор также приводит пример с AI агентами, которые работают в сессии с atch, а потом можно посмотреть, что они там делали. В принципе, записать действия в консоли можно очень разными способами (подборка разных решений этой задачи). Этот возможно и не самый удобный для этой задачи, но максимально простой.
Если много работаете в консоли, используете screen или tmux, рекомендую попробовать atch. Вам должно понравиться. Давно мне не попадались утилиты, которые бы так порадовали своей простой и удобством. Казалось бы, уже всё давно придумано, но, как видим, ещё нет.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux #terminal
⇨ Бросил tmux и написал свой инструмент
Там автор прошёлся прям по больному. Он рассказал про разные терминальные мультиплексоры с упоминанием проблем, которые напрягают в повседневной работе. Я нигде и ни от кого не видел ранее такую подборку. Думал всегда, что это я один страдаю из-за неудобного скрола мышки в screen или глюками с буферами или интерактивными утилитами в tmux. Там в статье прям по пунктам всякие неудобства перечислены и чем они вызваны с точки зрения архитектуры приложений.
Вроде основную задачу по сохранении сессии SSH при разрыве соединения решают и screen, и tmux, но пользоваться ими неудобно. Я последние года стал пользоваться повсеместно tmux вместо screen, но всё равно из-за разных глюков делал это редко и только для долгоиграющих процедур, типа обновления, которые крайне нежелательно прерывать. Во всех остальных случаях я отключал мультиплексор и работал напрямую в консоли. А разделение сессий на одном экране реализовывал с помощью менеджера соединений, а не мультиплексора.
В итоге автор написал небольшую утилиту atch на С, которая работает идеально, если вам нужно просто сохранять сессию при разрыве соединения и потом обратно в неё подключаться. Нет никакой эмуляции терминала, как в screen или tmux. Atch ничего не парсит, не перекодирует, поэтому нет проблем со скролом мышки, пропаданием истории терминала, глюками с OSC-последовательностями.
Работает atch так, как надо, без каких-либо дополнительных настроек. Я попробовал, очень понравилось. В репозитории есть собранный бинарник, его достаточно скачать:
# curl -Lo atch.tgz https://github.com/mobydeck/atch/releases/latest/download/atch-linux-amd64.tgz# tar -xzf atch-linux-amd64.tgz atch# mv atch /usr/local/bin/Утилита совсем новая. В репозиториях дистрибутивов её, разумеется, пока нет. Очень надеюсь, что она там со временем появится, потому что она удобна и проста, решает ровно одну задачу и делает это хорошо. Всё в духе философии UNIX.
Дальше создаём сессию work:
# atch workИ работаем в ней. Если соединение разорвалось, то подключаемся заново по SSH и заходим в сессию:
# atch workВидим тут же в терминале всю историю терминала, которая была до отключения!!! Она пишется в
~/.cache/atch/ сразу же в момент вывода. И потом воспроизводится при повторном подключении к сессии. Ничего не теряется. Ты попадаешь в тот же вывод терминала, откуда тебя отключило. Это очень удобно.Смотрим список сессий:
# atch listВсё интуитивно и просто. Запоминать команды не нужно. Этого достаточно, чтобы пользоваться, для моих задач. Я после перехода из screen в tmux постоянно вспоминаю, как посмотреть список сессий.
Можно запустить любой процесс через atch и потом посмотреть консольный вывод из любого места, подключившись в созданную сессию:
# atch start deploy ./deploy.shИ история автоматом сохранится. Автор также приводит пример с AI агентами, которые работают в сессии с atch, а потом можно посмотреть, что они там делали. В принципе, записать действия в консоли можно очень разными способами (подборка разных решений этой задачи). Этот возможно и не самый удобный для этой задачи, но максимально простой.
Если много работаете в консоли, используете screen или tmux, рекомендую попробовать atch. Вам должно понравиться. Давно мне не попадались утилиты, которые бы так порадовали своей простой и удобством. Казалось бы, уже всё давно придумано, но, как видим, ещё нет.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍203👎2
Расскажу про один трюк в strace, про который я вроде бы ещё ни разу не писал. В нём ничего особенного нет, но в некоторых ситуациях с ним удобно. Если случайно нигде не видел подобного использования, то самому может и в голову не прийти, что так можно.
У strace и её производных (ltrace, latrace) есть ключ
Strace много всего умеет и обычно используется при дебаге. Я про него часто упоминал в различных заметках в основном в контексте анализа дисковой активности процессов. Например, какие файлы читает процесс, в какие пишет. Вот сразу реальный и полезный пример с Angie/Nginx.
Если у вас навороченная конфигурация, где куча всего подключается из разных директорий, что бывает часто (привет настройкам Nginx в Bitrixenv), то хочется быстро посмотреть, а что реально из какой-то конкретной директории подключается в момент запуска веб сервера. Проще всего это сделать, анализируя активность процесса во время выполнения команды
Можно просто посмотреть все системные вызовы openat, которые отвечают за чтение:
В выводе будет много всего лишнего - библиотеки, логи, системные файлы и т.д. Можно попробовать грепнуть:
У вас, кстати, ничего не получится. Это особенность nginx, про которую просто надо знать. Вывод этой команды улетает не в стандартный поток stdout, а в stderr. Не знаю, почему так, но в Nginx это исторически сложилось. А grep не грепает stderr. Вам нужно будет как минимум сделать вот так:
То есть направить поток stderr в stdout. Тогда он грепнется. Но вывод всё равно будет не очень красивый и наглядный. И тут можно использовать вот такой трюк:
На выходе получили аккуратный обработанный список директорий и файлов в
В данном случае уже не имеет значение, куда и как пишет nginx. За этим не нужно следить. Аналогичная команда с обычным грепом выглядела бы так:
Тут обязательно перенаправление
Подобная обработка вывода через pipe актуальна для анализа каких-то интерактивных программ. Например,
Запускаем и сразу закрываем iftop. В консоли видим список файлов, которые она прочитала. В данном случае команда:
уже не сработает. До grep дело не дойдёт, так как сначала вывалится портянка strace, а потом запустится iftop. В первом случае мы сразу же обрабатываем вывод в strace, выводим его в консоль и потом запускается iftop.
Можно посмотреть, где живёт конфигурация mc, запущенная под рутом:
Просто и наглядно. Удобно смотреть, кто, что читает в момент запуска.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#bash #linux #terminal
У strace и её производных (ltrace, latrace) есть ключ
-o, через который настраивается вывод результата в файл. При этом вместо файла может выступать pipe, а не обычный файл. Покажу сразу на примере. Тут будет видно явное удобство такого подхода.Strace много всего умеет и обычно используется при дебаге. Я про него часто упоминал в различных заметках в основном в контексте анализа дисковой активности процессов. Например, какие файлы читает процесс, в какие пишет. Вот сразу реальный и полезный пример с Angie/Nginx.
Если у вас навороченная конфигурация, где куча всего подключается из разных директорий, что бывает часто (привет настройкам Nginx в Bitrixenv), то хочется быстро посмотреть, а что реально из какой-то конкретной директории подключается в момент запуска веб сервера. Проще всего это сделать, анализируя активность процесса во время выполнения команды
nginx -t. В этот момент конфигурация проверяется на ошибки, соответственно, она должна быть прочитана.Можно просто посмотреть все системные вызовы openat, которые отвечают за чтение:
# strace -zf -e trace=openat nginx -tВ выводе будет много всего лишнего - библиотеки, логи, системные файлы и т.д. Можно попробовать грепнуть:
# strace -zf -e trace=openat nginx -t | grep /etc/nginxУ вас, кстати, ничего не получится. Это особенность nginx, про которую просто надо знать. Вывод этой команды улетает не в стандартный поток stdout, а в stderr. Не знаю, почему так, но в Nginx это исторически сложилось. А grep не грепает stderr. Вам нужно будет как минимум сделать вот так:
# strace -zf -e trace=openat nginx -t 2>&1 | grep /etc/nginxТо есть направить поток stderr в stdout. Тогда он грепнется. Но вывод всё равно будет не очень красивый и наглядный. И тут можно использовать вот такой трюк:
# strace -o "| grep -Eo '/etc/nginx/[^\"]+'" -zf -e trace=openat nginx -t/etc/nginx/nginx.conf/etc/nginx/modules-enabled/etc/nginx/mime.types/etc/nginx/conf.d/etc/nginx/sites-enabled/etc/nginx/sites-enabled/defaultНа выходе получили аккуратный обработанный список директорий и файлов в
/etc/nginx, которые веб сервер прочитал. Смысл того, что мы сделали в том, что через ключ -o вывод отправили не в файл, а в пайп, где он сразу же был обработан тем же grep, который вывел только то, что было между " ", а это как раз путь в файловой системе. Вся остальная информация не нужна и только мешает.В данном случае уже не имеет значение, куда и как пишет nginx. За этим не нужно следить. Аналогичная команда с обычным грепом выглядела бы так:
# strace -zf -e trace=openat nginx -t 2>&1 | grep -Eo '/etc/nginx/[^\"]+'Тут обязательно перенаправление
2>&1. Подобная обработка вывода через pipe актуальна для анализа каких-то интерактивных программ. Например,
iftop:# strace -o "| grep -Eo '/[^\"]+'" -zf -e trace=openat iftopЗапускаем и сразу закрываем iftop. В консоли видим список файлов, которые она прочитала. В данном случае команда:
# strace -zf -e trace=openat iftop | grep -Eo '/[^\"]+'уже не сработает. До grep дело не дойдёт, так как сначала вывалится портянка strace, а потом запустится iftop. В первом случае мы сразу же обрабатываем вывод в strace, выводим его в консоль и потом запускается iftop.
Можно посмотреть, где живёт конфигурация mc, запущенная под рутом:
# strace -o "| grep -Eo '/root[^\"]+'" -zf -e trace=openat mc/root/.config/mc/ini/root/.bash_historyПросто и наглядно. Удобно смотреть, кто, что читает в момент запуска.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#bash #linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍114👎1
Когда разбирался с файловыми системами, увидел возможность EXT4, про которую раньше не знал. Можно сделать дамп метаданных файловой системы, без непосредственно самих данных. То есть вы получаете список всех файлов с размером, правами и прочими атрибутами. Этот дамп можно примонтировать, как обычный диск, и посмотреть структуру. Всё будет выглядеть, как обычная файловая система, только самих данных не будет.
Выглядит это примерно так. Работает даже для примонтированной системы. Но для надёжности, конечно, лучше отмонтировать, если есть возможность:
В данном случае я сделал образ метаданных корневого раздела диска и примонтировал его в /mnt/fs_metadata.
На практике это может быть полезным для сравнения больших разнесённых хранилищ файлов. Например, можно снять дамп метаданных, перенести его на другой сервер, там смонтировать и очень быстро найти различия с помощью того же rsync. По сети такое сравнение для больших хранилищ может длиться очень долго. А через такой дамп быстрее в разы.
Выглядит это примерно так:
В данном случае
f / d / l (файл / директория / симлинк) и чем различаются: s - размер, p - права, o - владелец и т.д. По этим меткам, соответственно, можно грепнуть и вывести только нужные различия.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux
Выглядит это примерно так. Работает даже для примонтированной системы. Но для надёжности, конечно, лучше отмонтировать, если есть возможность:
# e2image -rf /dev/sda1 fs_raw.img# mkdir -p /mnt/fs_metadata# mount -t ext4 -o ro,noload fs_raw.img /mnt/fs_metadataВ данном случае я сделал образ метаданных корневого раздела диска и примонтировал его в /mnt/fs_metadata.
На практике это может быть полезным для сравнения больших разнесённых хранилищ файлов. Например, можно снять дамп метаданных, перенести его на другой сервер, там смонтировать и очень быстро найти различия с помощью того же rsync. По сети такое сравнение для больших хранилищ может длиться очень долго. А через такой дамп быстрее в разы.
Выглядит это примерно так:
# rsync -ani --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp --exclude=/mnt / /mnt/fs_metadata/В данном случае
--exclude используются, потому что я сравниваю корень. Оставил их для примера, если нужно будет тоже сделать какие-то исключения. На выходе получите листинг изменённых файлов, где будет указан тип файла f / d / l (файл / директория / симлинк) и чем различаются: s - размер, p - права, o - владелец и т.д. По этим меткам, соответственно, можно грепнуть и вывести только нужные различия.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍144👎1
Есть разные способы автоматической доставки необходимых пакетов софта на целевые сервера: ansible или аналоги, bash, в частности с помощью bashible, cloud-init, различные ci/cd системы со своими агентами. Во всех этих системах первое, что приходит в голову, сформировать список необходимых пакетов и передавать его на установку. В случае необходимости, список можно менять.
Но есть и другой распространённый подход - создание мета-пакета, который включает в себя в виде зависимостей набор отдельных пакетов. В случае каких-то изменений в составе пакетов, вам не придётся менять составленный ранее список. Достаточно изменить сам мета-пакет, и сервера при стандартном обновлении установят недостающее.
В зависимости от ситуации, можно использовать тот или иной подход. У каждого есть как свои плюсы, так и минусы. Например, если список пакетов хранится в ansible и часто меняется, придётся постоянно обновлять список в переменной и пушить эти изменения в репозиторий. Если они несущественны и не требуют отдельного учёта, проще менять мета-пакет, не затрагивая код ролей или плейбуков. Например, если вы ведёте набор софта для настройки рабочей станции на Linux. Там будет масса всего для установки. Удобно всё это завернуть в один мета-пакет workstation и менять именно его.
Мета-пакеты во всю представлены в стандартных репозиториях. Самый популярный мета-пакет - linux-image-amd64, который обновляет ядро. Посмотреть его состав можно так:
Набор инструментов build-essential, оболочки gnome, xfce4, kde - это всё тоже мета-пакеты. Узнал о них совершенно случайно не так давно. Сколько лет настраиваю линуксы, всегда пакеты по одному ставил, храня списки в переменных.
Собрать свой мета-пакет очень просто. Покажу на примере мета пакета
Получил на выходе мета-пакет
Причём эти пакеты устанавливаются по-отдельности, их можно как обычно посмотреть через
В случае необходимости любой из установленных пакетов можно удалить как обычно через apt. Если изменить список пакетов и версию в файле
То в систему будет добавлено то, чего не хватает из зависимостей в мета-пакете. Если ты свои пакеты хранишь в локальном репозитории, то изменения приедут на целевые сервера с плановым обновлением.
Работают мета-пакеты просто и прозрачно, используя для создания встроенный в deb дистрибутивы менеджер пакетов dpkg. Есть и другие инструменты для этого, но этот проще всего.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux
Но есть и другой распространённый подход - создание мета-пакета, который включает в себя в виде зависимостей набор отдельных пакетов. В случае каких-то изменений в составе пакетов, вам не придётся менять составленный ранее список. Достаточно изменить сам мета-пакет, и сервера при стандартном обновлении установят недостающее.
В зависимости от ситуации, можно использовать тот или иной подход. У каждого есть как свои плюсы, так и минусы. Например, если список пакетов хранится в ansible и часто меняется, придётся постоянно обновлять список в переменной и пушить эти изменения в репозиторий. Если они несущественны и не требуют отдельного учёта, проще менять мета-пакет, не затрагивая код ролей или плейбуков. Например, если вы ведёте набор софта для настройки рабочей станции на Linux. Там будет масса всего для установки. Удобно всё это завернуть в один мета-пакет workstation и менять именно его.
Мета-пакеты во всю представлены в стандартных репозиториях. Самый популярный мета-пакет - linux-image-amd64, который обновляет ядро. Посмотреть его состав можно так:
# apt show linux-image-amd64.....Description: Linux for 64-bit PCs (meta-package).....Набор инструментов build-essential, оболочки gnome, xfce4, kde - это всё тоже мета-пакеты. Узнал о них совершенно случайно не так давно. Сколько лет настраиваю линуксы, всегда пакеты по одному ставил, храня списки в переменных.
Собрать свой мета-пакет очень просто. Покажу на примере мета пакета
deb-base с набором программ, которые я обычно ставлю на все сервера:# mkdir -p ~/deb-base/DEBIAN# nano ~/deb-base/DEBIAN/controlPackage: deb-baseVersion: 1.0Architecture: allMaintainer: Vladimir <root@serveradmin.ru>Depends: sudo, curl, wget, htop, rsync, unattended-upgrades, net-tools, lsof, iftopDescription: Base Debian server configuration# dpkg-deb --build deb-baseПолучил на выходе мета-пакет
deb-base.deb, у которого в зависимостях sudo, curl, wget, htop, rsync, unattended-upgrades, net-tools, lsof, iftop. При установке мета-пакета они все будут установлены:# apt install ./deb-base.debПричём эти пакеты устанавливаются по-отдельности, их можно как обычно посмотреть через
dpkg:# dpkg -l | grep iftopВ случае необходимости любой из установленных пакетов можно удалить как обычно через apt. Если изменить список пакетов и версию в файле
control, пересобрать мета-пакет и запустить:# apt upgrade ./deb-base.debТо в систему будет добавлено то, чего не хватает из зависимостей в мета-пакете. Если ты свои пакеты хранишь в локальном репозитории, то изменения приедут на целевые сервера с плановым обновлением.
Работают мета-пакеты просто и прозрачно, используя для создания встроенный в deb дистрибутивы менеджер пакетов dpkg. Есть и другие инструменты для этого, но этот проще всего.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍116👎3
Есть довольно известная программа в Linux (в Windows тоже работает) для хранения и управления историей - atuin. Видел много про неё заметок в различных тематических каналах. Но в основном там были общие слова, либо пересказ описания. Программа мало того, что сама по себе довольно удобная и полезная, но таких немало, так у неё есть ещё одна особенность, которая меня заинтересовала. Она поддерживает централизованное хранение истории со всех хостов в одном месте с возможностью смотреть или искать глобально по всей истории.
Я развернул всё это хозяйство у себя на постоянку, настроил, чтобы было удобно пользоваться и хочу поделиться своим опытом. Сразу скажу, что я не уверен, что подобное стоит устанавливать в прод. Я бы не стал, если прям сильно не нужна эта функциональность. Развернул всё на своих личных машинах, которых у меня немало и которым тоже требуется централизованное управление.
📌 Перечислю основные возможности atuin:
▪️Замена основного поиска по истории через CTRL + R. Работает удобно, мне лично очень понравилось.
▪️Централизованный сбор истории со всех хостов. Хранение либо в SQLite, либо в PostgreSQL. Это одновременно и удобный поиск по всей истории, и её бэкап.
▪️На сервере может показывать глобальную историю, историю всего хоста, текущей сессии или конкретной папки.
▪️Помимо непосредственно выполненной команды сохраняет код выхода, время исполнения, в какой директории была запущена.
▪️Стандартную историю в ~/.bash_history не заменяет и не перезаписывает.
▪️Работает со всеми популярными оболочками, в том числе powershell.
▪️В bash работает с помощью хуков preexec и precmd через расширение bash-preexec.sh, в других оболочках не проверял.
▪️ Всё это open source.
Не буду подробно останавливаться на установке клиентов, так как в документации всё это есть. Для сервера я взял готовый docker-compose.yml, убрал оттуда postgres и заменил на локальную sqlite, просто указав:
Соответственно, бэкап всей истории - это бэкап файла atuin.db. Теперь после установки клиентов на хостах достаточно добавить адрес своего сервера для хранения там истории.
Приведу пример настроенного мной клиента в
-
Мой локальный адрес сервера истории
-
Сразу после записи команды отправлять её на сервер
-
По умолчанию в поиске по CTRL+R открывается история хоста
-
Формат хранения истории, по умолчанию не сохраняет имя сервера, добавил
-
Всегда отображать полный интерфейс
По умолчанию autin запускается по CTRL+R или по стрелке вверх. Последнее мне не нужно, я сразу отключил. Для этого в ~/.bashrc добавил ключ к запуску:
После настройки первого клиента, регистрируем учётную запись на сервере:
Далее записываем в atuin уже существующую историю и синхронизируем её с сервера:
На следующих серверах достаточно будет сделать:
И зайти под уже созданной учёткой. Теперь при нажатии CTRL+R у вас откроется поиск по текущей истории хоста. Дальнейшее нажатие комбинации CTRL+R переключает область поиска: сессия, директория, глобальный поиск.
Для того, чтобы статично вывести глобальную историю, а не искать по ней, можно использовать команду:
Можно её грепать, а можно прямо тут написать строку для поиска. Например, смотрим на все перезагрузки:
В целом, удобное решение для централизованного хранения истории. Тут тебе и сама история хоста и по сути глобальный аудит. Не хватает веб интерфейса для просмотра.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux
Я развернул всё это хозяйство у себя на постоянку, настроил, чтобы было удобно пользоваться и хочу поделиться своим опытом. Сразу скажу, что я не уверен, что подобное стоит устанавливать в прод. Я бы не стал, если прям сильно не нужна эта функциональность. Развернул всё на своих личных машинах, которых у меня немало и которым тоже требуется централизованное управление.
📌 Перечислю основные возможности atuin:
▪️Замена основного поиска по истории через CTRL + R. Работает удобно, мне лично очень понравилось.
▪️Централизованный сбор истории со всех хостов. Хранение либо в SQLite, либо в PostgreSQL. Это одновременно и удобный поиск по всей истории, и её бэкап.
▪️На сервере может показывать глобальную историю, историю всего хоста, текущей сессии или конкретной папки.
▪️Помимо непосредственно выполненной команды сохраняет код выхода, время исполнения, в какой директории была запущена.
▪️Стандартную историю в ~/.bash_history не заменяет и не перезаписывает.
▪️Работает со всеми популярными оболочками, в том числе powershell.
▪️В bash работает с помощью хуков preexec и precmd через расширение bash-preexec.sh, в других оболочках не проверял.
▪️ Всё это open source.
Не буду подробно останавливаться на установке клиентов, так как в документации всё это есть. Для сервера я взял готовый docker-compose.yml, убрал оттуда postgres и заменил на локальную sqlite, просто указав:
ATUIN_DB_URI: sqlite:///config/atuin.dbСоответственно, бэкап всей истории - это бэкап файла atuin.db. Теперь после установки клиентов на хостах достаточно добавить адрес своего сервера для хранения там истории.
Приведу пример настроенного мной клиента в
~/.config/atuin/config.toml. Отражу только те параметры, что изменил по сравнению со стандартом:-
sync_address = "http://192.168.137.57:8888"Мой локальный адрес сервера истории
-
sync_frequency = "0"Сразу после записи команды отправлять её на сервер
-
filter_mode = "host"По умолчанию в поиске по CTRL+R открывается история хоста
-
history_format = "{time} {host} {user} - {directory} | {command}"Формат хранения истории, по умолчанию не сохраняет имя сервера, добавил
-
style = "full"Всегда отображать полный интерфейс
По умолчанию autin запускается по CTRL+R или по стрелке вверх. Последнее мне не нужно, я сразу отключил. Для этого в ~/.bashrc добавил ключ к запуску:
eval "$(atuin init bash --disable-up-arrow)"После настройки первого клиента, регистрируем учётную запись на сервере:
# atuin registerДалее записываем в atuin уже существующую историю и синхронизируем её с сервера:
# atuin import auto# atuin syncНа следующих серверах достаточно будет сделать:
# atuin loginИ зайти под уже созданной учёткой. Теперь при нажатии CTRL+R у вас откроется поиск по текущей истории хоста. Дальнейшее нажатие комбинации CTRL+R переключает область поиска: сессия, директория, глобальный поиск.
Для того, чтобы статично вывести глобальную историю, а не искать по ней, можно использовать команду:
# atuin search --filter-mode globalМожно её грепать, а можно прямо тут написать строку для поиска. Например, смотрим на все перезагрузки:
# atuin search --filter-mode global rebootВ целом, удобное решение для централизованного хранения истории. Тут тебе и сама история хоста и по сути глобальный аудит. Не хватает веб интерфейса для просмотра.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍78👎4
В последнее время видел много упоминаний на тему загрузки на старом ядре Linux, если после обновления на новом возникают проблемы. Это стало особенно актуально после перехода PVE на новое ядро 7-й версии. На некотором железе с ним возникают проблемы. Я сам с этим столкнулся на одном из серверов. Хотя чаще всего всё в порядке.
На эту тему я вспомнил свою старую историю на этот счёт, когда пришлось откатиться на старое ядро, чтобы восстановить работоспособность сервера. История редкая, я не слышал, чтобы кто-нибудь о подобном рассказывал, но я столкнулся лично.
Была у меня одна виртуалка с веб сервером, которая начала глючить из-за нехватки памяти. Периодически приходил OOM Killer и выключал Mysql. У неё был большой аптайм, так что решил её на всякий случай перезагрузить, прежде чем разбираться с тем, почему перестало хватать памяти. Ну и чтобы не приседать два раза, решил сразу и обновления свежие поставить.
Во время обновления пакетный менеджер ругнулся на нехватку памяти и не закончил нормально свою работу. Думаю, ладно, перезагружу, как есть, без обновлений. Перезагружаю, а система не стартует. В консоли ошибка:
Не буду рассказывать, как я её решал, чтобы не тратить понапрасну ваше время. Перехожу сразу к сути. Пакетный менеджер установил все обновления, в том числе ядра. В момент пересборки initramfs с новым ядром, процесс с
Решилось это выбором старой версии ядра для загрузки системы. Для него initramfs был собран нормально. Загрузился на старом ядре, ещё раз нормально провёл обновление и убедился, что всё в порядке. От подобной ошибки, кстати, частично страхует наличие swap, хоть и не на 100%. У меня обычно везде есть swap, но тут он не помог.
Всё это было ещё в те времена, когда LLM не работали как доступные публично персональные помощники, к которым можно было обратиться с вопросом. Пришлось разбираться самому. Не знаю, насколько сейчас всё это актуально, но если вы не знаете, что такое initramfs и как загружается система Linux, посмотрите мою заметку на этот счёт. Думаю, что на собеседованиях эта тема по-прежнему может быть актуальной. Да и просто, когда знаком с базой, решение ошибок сильно упрощается.
p.s. Картинка снизу не моя, нашёл в инете для наглядности. Она примерно так и выглядит. Когда первый раз видишь подобное, становится не по себе, так как выглядит страшно и не понятно, как решать. Сразу о бэкапах начинаешь думать и хаотично вспоминать, точно ли с ними всё в порядке.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux #ошибка
На эту тему я вспомнил свою старую историю на этот счёт, когда пришлось откатиться на старое ядро, чтобы восстановить работоспособность сервера. История редкая, я не слышал, чтобы кто-нибудь о подобном рассказывал, но я столкнулся лично.
Была у меня одна виртуалка с веб сервером, которая начала глючить из-за нехватки памяти. Периодически приходил OOM Killer и выключал Mysql. У неё был большой аптайм, так что решил её на всякий случай перезагрузить, прежде чем разбираться с тем, почему перестало хватать памяти. Ну и чтобы не приседать два раза, решил сразу и обновления свежие поставить.
Во время обновления пакетный менеджер ругнулся на нехватку памяти и не закончил нормально свою работу. Думаю, ладно, перезагружу, как есть, без обновлений. Перезагружаю, а система не стартует. В консоли ошибка:
Kernel panic not syncing: VFS: Unable to mount root fsНе буду рассказывать, как я её решал, чтобы не тратить понапрасну ваше время. Перехожу сразу к сути. Пакетный менеджер установил все обновления, в том числе ядра. В момент пересборки initramfs с новым ядром, процесс с
update-initramfs упал из-за нехватки памяти и начальный загрузчик не собрался. Но в Grub по умолчанию было назначено новое ядро. В итоге система не стартовала.Решилось это выбором старой версии ядра для загрузки системы. Для него initramfs был собран нормально. Загрузился на старом ядре, ещё раз нормально провёл обновление и убедился, что всё в порядке. От подобной ошибки, кстати, частично страхует наличие swap, хоть и не на 100%. У меня обычно везде есть swap, но тут он не помог.
Всё это было ещё в те времена, когда LLM не работали как доступные публично персональные помощники, к которым можно было обратиться с вопросом. Пришлось разбираться самому. Не знаю, насколько сейчас всё это актуально, но если вы не знаете, что такое initramfs и как загружается система Linux, посмотрите мою заметку на этот счёт. Думаю, что на собеседованиях эта тема по-прежнему может быть актуальной. Да и просто, когда знаком с базой, решение ошибок сильно упрощается.
p.s. Картинка снизу не моя, нашёл в инете для наглядности. Она примерно так и выглядит. Когда первый раз видишь подобное, становится не по себе, так как выглядит страшно и не понятно, как решать. Сразу о бэкапах начинаешь думать и хаотично вспоминать, точно ли с ними всё в порядке.
———
ServerAdmin:
#linux #ошибка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61👎1
Расскажу про некоторые системы, которые ранее уже упоминал на канале, но в качестве обзора или начального впечатления. Сейчас я с ними уже поработал на своей инфраструктуре, мне они понравились, я их изучил и оставил в работе, так что могу дать более осмысленное описание.
Меня иногда спрашивают, зачем домой покупать сервера, что-то настраивать, на работе этого хватает. Скажу конкретно за себя. Для меня это тоже часть работы, перемешанная с хобби. Мне это и нравится, и приносит пользу в рабочих делах. Я взаимодействую с разными компаниями, у меня нет какой-то одной, где бы я работал и мог что-то разворачивать, проверять. Мне удобнее это делать дома, поэтому я там развёл зоопарк различных систем, без которых можно обойтись, но мне нравится ими заниматься. Плюс, это приносит пользу основной деятельности, как по настройке инфраструктур, так и ведения этого канала. Получается симбиоз различных дел в единую продуктивную деятельность.
🔹Начну с PatchMon - система для отслеживания обновлений на серверах. Я ей постоянно пользуюсь. Очень удобно, хоть это и плюс ещё одна панель управления со своим агентом на хостах. Поддерживает, как Linux, так и Windows. На винде от неё толку почти нет. Ставить ничего не умеет, только отслеживает наличие обновлений как системы, так и программ. Некоторые программы с русскими названиями криво отображаются. Программы Windows и пакеты Linux перемешиваются в общем списке пакетов. Мне не очень понравилось. Винду туда добавлять не рекомендую.
А вот для систем на базе ОС Linux очень удобно. Можно зайти в список серверов и быстро посмотреть, есть ли какие-то обновления, какие из них критичные и связанные с безопасностью, а какие обычные. Можно тут же обновить конкретный сервер или все разом. Перед обновлением можно прогнать проверку в режиме dry-run, посмотреть, нет ли каких-то проблем с зависимостями и в целом работы apt. Если всё в порядке, можно тут же сразу запустить обновление и наблюдать за ним в консоли через браузер, либо запланировать на какое-то определённое время.
Тут получается и автоматизация, и ручной контроль. Два в одном. Как захочешь, так и будет. Можно бахнуть сразу все обновления, а можно аккуратно обновить всё по очереди. Если каким-то серверам нужна перезагрузка, это будет отображено в панели. Эта функциональность немного глючит и не всегда правильно отображает состояние. Она проверяет самую свежую версию установленного пакета с ядром с текущим работающим ядром. Если отличаются, говорит, что надо перезагрузиться.
🔹Видеорегистратор Frigate. Для меня это стало игрушкой, которая жрёт ресурсы сервера и моё время. Она много всего умеет за счёт встроенных llm моделей. Благодаря им работает распознавание лиц, некоторых объектов, номеров машин, семантический поиск. Она умеет отслеживать состояние объектов. Например, я с её помощью отслеживаю состояние детской песочницы - открыта / закрыта. Если забыть закрыть, могут коты приходить и гадить, поэтому приходится отслеживать и не забывать закрывать.
Я настроил во Frigate распознавание лиц всех членов семьи. Сейчас занимаюсь настройкой отслеживания, кто где есть. Практической пользы в этом нет, но мне нравится этим заниматься. Модели надо вручную обучать, маркируя представленные кадры в качестве образцов. Программа сложна в настройке и неочевидна. Так что это не решение из разряда поставил и забыл. Но возможности очень хорошие. Не знаю, где ещё всё это есть, да ещё и бесплатно.
🔹Фотогалерея Immich. Я про неё уже много писал. Наигрался с настройкой. Отмечу одну очень полезную фишку мобильного приложения. Мало того, что оно просто все медиа отправляет на сервер, можно выбрать дату, начиная с которой с телефона все медиа будут удалены, при условии, что они хранятся на сервере. Это очень упрощаются очистку телефона от переполненной галереи. Одним кликом всё очистил, но при этом все фотки доступны для просмотра с сервера, как-будто они у тебя локально. Очень удобно.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:📱 Telegram | 🌐 Сайт | 📲 MAX 😩
#linux
Меня иногда спрашивают, зачем домой покупать сервера, что-то настраивать, на работе этого хватает. Скажу конкретно за себя. Для меня это тоже часть работы, перемешанная с хобби. Мне это и нравится, и приносит пользу в рабочих делах. Я взаимодействую с разными компаниями, у меня нет какой-то одной, где бы я работал и мог что-то разворачивать, проверять. Мне удобнее это делать дома, поэтому я там развёл зоопарк различных систем, без которых можно обойтись, но мне нравится ими заниматься. Плюс, это приносит пользу основной деятельности, как по настройке инфраструктур, так и ведения этого канала. Получается симбиоз различных дел в единую продуктивную деятельность.
🔹Начну с PatchMon - система для отслеживания обновлений на серверах. Я ей постоянно пользуюсь. Очень удобно, хоть это и плюс ещё одна панель управления со своим агентом на хостах. Поддерживает, как Linux, так и Windows. На винде от неё толку почти нет. Ставить ничего не умеет, только отслеживает наличие обновлений как системы, так и программ. Некоторые программы с русскими названиями криво отображаются. Программы Windows и пакеты Linux перемешиваются в общем списке пакетов. Мне не очень понравилось. Винду туда добавлять не рекомендую.
А вот для систем на базе ОС Linux очень удобно. Можно зайти в список серверов и быстро посмотреть, есть ли какие-то обновления, какие из них критичные и связанные с безопасностью, а какие обычные. Можно тут же обновить конкретный сервер или все разом. Перед обновлением можно прогнать проверку в режиме dry-run, посмотреть, нет ли каких-то проблем с зависимостями и в целом работы apt. Если всё в порядке, можно тут же сразу запустить обновление и наблюдать за ним в консоли через браузер, либо запланировать на какое-то определённое время.
Тут получается и автоматизация, и ручной контроль. Два в одном. Как захочешь, так и будет. Можно бахнуть сразу все обновления, а можно аккуратно обновить всё по очереди. Если каким-то серверам нужна перезагрузка, это будет отображено в панели. Эта функциональность немного глючит и не всегда правильно отображает состояние. Она проверяет самую свежую версию установленного пакета с ядром с текущим работающим ядром. Если отличаются, говорит, что надо перезагрузиться.
🔹Видеорегистратор Frigate. Для меня это стало игрушкой, которая жрёт ресурсы сервера и моё время. Она много всего умеет за счёт встроенных llm моделей. Благодаря им работает распознавание лиц, некоторых объектов, номеров машин, семантический поиск. Она умеет отслеживать состояние объектов. Например, я с её помощью отслеживаю состояние детской песочницы - открыта / закрыта. Если забыть закрыть, могут коты приходить и гадить, поэтому приходится отслеживать и не забывать закрывать.
Я настроил во Frigate распознавание лиц всех членов семьи. Сейчас занимаюсь настройкой отслеживания, кто где есть. Практической пользы в этом нет, но мне нравится этим заниматься. Модели надо вручную обучать, маркируя представленные кадры в качестве образцов. Программа сложна в настройке и неочевидна. Так что это не решение из разряда поставил и забыл. Но возможности очень хорошие. Не знаю, где ещё всё это есть, да ещё и бесплатно.
🔹Фотогалерея Immich. Я про неё уже много писал. Наигрался с настройкой. Отмечу одну очень полезную фишку мобильного приложения. Мало того, что оно просто все медиа отправляет на сервер, можно выбрать дату, начиная с которой с телефона все медиа будут удалены, при условии, что они хранятся на сервере. Это очень упрощаются очистку телефона от переполненной галереи. Одним кликом всё очистил, но при этом все фотки доступны для просмотра с сервера, как-будто они у тебя локально. Очень удобно.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
———
ServerAdmin:
#linux
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍111👎1