Админские угодья
1.47K subscribers
462 photos
40 videos
223 links
Всё для системного администратора

По всем вопросам : @Sofiia_artamonova
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Как фильтровать вывод предыдущей команды и зачем нужен pipe |

Bash удобен тем, что позволяет передавать результаты одной команды в другую. Для этого используется символ | (pipe, канал, или конвейер).

Простой пример: нужно отфильтровать вывод лога nginx, чтобы отобразить только запросы к конкретному URL. Сначала используем команду cat для вывода содержимого файла, затем фильтруем нужные строки с помощью grep.


cat access.log | grep api/users
cat access.log | grep 02/Dec
cat access.log | grep api | grep 172.17.0.1
👍1
Haskell Dockerfile Linter

Интеллектуальный распаковщик Dockerfile, помогающий создавать лучшие образы Docker. Линтер разбирает Docker-файл на AST и выполняет правила поверх AST. Он опирается на поддержку ShellCheck для проверки Bash-кода внутри инструкций RUN.

https://github.com/hadolint/hadolint
Что в bash скрипте означает команда set -euo pipefail?

Команда set -euo pipefail в Bash-скрипте изменяет поведение интерпретатора и добавляет контроль ошибок, что делает сценарий более надежным.

1. -e: Завершает выполнение скрипта, если любая команда завершилась с ненулевым статусом (то есть произошла ошибка). Это предотвращает дальнейшее выполнение скрипта, если что-то пошло не так.

2. -u: Вызывает ошибку, если используется неинициализированная (неопределенная) переменная. Это помогает избежать ошибок, когда случайно обращаются к переменной, которая не была задана.

3. -o pipefail: Заставляет весь конвейер (|) завершиться с ошибкой, если любая команда в цепочке вернула ненулевой статус. По умолчанию в Bash статус конвейера определяется только последней командой, а pipefail изменяет это поведение. Если любая команда в конвейере завершится ошибкой, это будет считаться ошибкой всего конвейера.

Пример

set -euo pipefail

# Пример команды, использующей необъявленную переменную
echo $undefined_var # Это вызовет ошибку из-за опции -u


Таким образом, set -euo pipefail делает скрипт более устойчивым к ошибкам, помогая избежать неожиданных ситуаций и неявных ошибок.
👍31
Массивы bash

Если вы используете «стандартную» оболочку *NIX-системы, возможно, вы не знакомы с такой полезной особенностью bash как массивы. Хотя массивы в bash не так круты, как в P-языках (Perl, Python и PHP) и других языках программирования, они часто бывают полезны.
Bash-массивы имеют только численные индексы, но они не обязательны к использованию, то есть вы не должны определять значения всех индексов в явном виде.

https://habr.com/ru/articles/511608/
👍2
Срок действия учетной записи

Узнать срок действия учетной записи в ActiveDirectory можно через оснастку: Пользователи и компьютеры или с помощью команды Powershell. Во втором случае мы получим список всех учетных записей, у которых заканчивается срок действия.


Search-ADAccount -AccountExpiring -UsersOnly -TimeSpan 07.00:00:00 | Sort-Object -Descending AccountExpirationDate | ft Name, AccountExpirationDate

Устанавливаем TimeSpan на одну неделю и получаем список учетных записей срок действия которых закончится в течение одной недели (7 дней).
👍2
This media is not supported in your browser
VIEW IN TELEGRAM
Sampler. Визуализация для любой команды shell

Инструмент для выполнения команд shell, визуализации и оповещения. Настраивается с помощью простого файла YAML.

Установка Linux
sudo wget https://github.com/sqshq/sampler/releases/download/v1.1.0/sampler-1.1.0-linux-amd64 -O /usr/local/bin/sampler
sudo chmod +x /usr/local/bin/sampler

https://github.com/sqshq/sampler
❤‍🔥3
Простой и удобный шаблон для bash-скриптов выполняемых по расписанию

Хочу поделиться с сообществом простым и полезным шаблоном скрипта-обёртки на bash для запуска заданий по cron (а сейчас и systemd timers), который моя команда повсеместно использует много лет.

Сначала пара слов о том зачем это нужно, какие проблемы решает. С самого начала моей работы системным администратором linux, я обнаружил, что cron не очень удобный планировщик задач. При этом практически безальтернативный. Чем больше становился мой парк серверов и виртуальных машин, тем больше я получал абсолютно бесполезных почтовых сообщений "From: Cron Daemon". Задание завершилось с ошибкой - cron напишет об этом. Задание выполнено успешно, но напечатало что-нибудь в STDOUT/STDERR - cron всё равно напишет об этом. При этом даже нельзя отформатировать тему почтового сообщения для удобной автосортировки. Сначала были годы борьбы с использованием разных вариаций из > /dev/null, 2> /dev/null, > /dev/null 2>&1, | mail -E -s '<Subject>' root@. Потом я нашёл Cronic - обёртку на bash, которая скрывает вывод запускаемой задачи, если она завершена успешно. Стало полегче, но обнаружилось, что от некоторых заданий всё же лучше получать сообщение "Task OK", чтобы не столкнуться в самый неподходящий момент с тем, что выполнение задания тихо сломано месяц назад.

https://habr.com/ru/articles/778922/
👍2
Zenith - что-то вроде top или htop, но с диаграммами с возможностью масштабирования, использованием CPU, GPU, сети и диска.

Особенности
Дополнительные графики использования ЦП, памяти, сети и дисков
Быстрый просмотр свободного места на диске, IP-адресов сетевых карт, частоты процессора
Выделение основных пользователей ЦП, памяти и диска
Процент заряда батареи, время зарядки или разрядки, потребляемая мощность
Таблица процессов с возможностью фильтрации по типу верхней части, включающая использование диска каждым процессом
Изменение приоритета процесса
Представления диаграмм с возможностью масштабирования (с поддержкой прокрутки назад во времени)
Управление процессами с помощью сигналов
Сохранение данных о производительности между запусками
Метрики использования GPU для графических процессоров NVIDIA (с --features nvidia), включая использование GPU для каждого процесса
Графики свободного места на диске
Учет задержек (в Linux при запуске zenith с правами root)

Установка на дистрибутивы Linux на базе Debian/Ubuntu (64-бит)

sudo apt install curl
curl -sL https://raw.githubusercontent.com/wimpysworld/deb-get/main/deb-get | sudo -E bash -s install deb-get



https://github.com/bvaisvil/zenith
👍4
Media is too big
VIEW IN TELEGRAM
Файловые системы в линуксе | сравнительный тест файловых систем linux ext4 xfs f2fs btrfs zfs
Список полезных консольных команд VMWare ESXi (в том числе ESXCLI)

reboot — перезагрузить хост
poweroff — выключить хост
esxcli system version get — узнать версию (номер) инсталлированной версии VMware ESXi
uname -a — так же узнать версию VMware ESXi
vmware –vl – и еще один способ узнать версию и релиз VMware ESXi
esxcli hardware pci list | more — полная информация об установленных PCI устройствах
lspci — краткая информация обо всех установленных PCI устройствах
esxtop — диспетчер процессов top для vmware esxi (быстрые клавиши для переключения дисплея: c :cpu, i :interrupt, m :memory, n :network, d :disk adapter, u :disk device, v :disk VM, p :power mgmt)
vmkerrcode -l — расшифровка кодов ошибок
esxcfg-nics -l — информация о сетевых картах
esxcfg-vswitch -l — информация о виртуальных коммутаторах
find . -name libstorelib.so — найти файл libstorelib.so
dcui — работа с консолью сервера через ssh сессию
chkconfig -l — статус работы демонов
esxcli hardware memory get — размер установленной памяти
esxcli software vib list — список установленных vib-пакетов
esxcli network ip connection list — состояние активных соединений (аналог netstat)
esxcli storage vmfs extent list — информация о примонтированных/подключенных томах VMFS
esxcli hardware clock (get/set) — отображение/установка времени esxi-хоста
cd - Смена текущей директории;
cp - Копирование файла.cp [файл 1] [файл2];
find - Поиск файлов по критериям;
ls - Список файлов и директорий в текущей или явно указанной директории.ls /vmfs/volumes/ ключи: -l подробная информация -a отображение скрытых файлов;
mkdir — Создание директории;
mv — Перемещение файла. Переименование файла.mv [путь и имя файла] [путь, куда перемещать];
ps — Информация о запущенных процессах. ps -ef;
rm - Удаление файлов;
shutdown — Выключение или перезагрузка сервера shutdown nowshutdown –r now;
vi — Текстовый редактор;
nano — Дружелюбный к новичкам текстовый редактор, отсутствует на ESXi;
cat — Вывод содержимого файла на экран. cat /etc/hosts;
more — Вывод содержимого файла на экран, по странице за раз. more /etc/hosts;
man — Справка по командам man <команда, по которой есть вопрос>, для некоторых команд помощь выводится при запуске самой команды без параметров;
useradd — Создание пользователя. useradd <имя пользователя>;
passwd - Задание пароля пользователю passwd <имя пользователя>;
esxcli storage nfs list — список подключеных nfs- хранлилищ на хосте
esxcli software vib list — cписок установленных vib-пакетов
esxcli hardware memory get — информация об использовании памяти на хосте ESXi, включая общий объем
This media is not supported in your browser
VIEW IN TELEGRAM
Relax-and-Recover

Решение для аварийного восстановления и миграции систем на новое железо под управлением Linux (ср. mksysb,
ignite)

Relax-and-Recover создает загрузочный образ. Этот образ может переразметить систему. После этого запускается восстановление из резервной копии. Возможно восстановление на другое оборудование. Поэтому Relax-and-Recover можно использовать и как инструмент миграции.

В настоящее время Relax-and-Recover поддерживает различные загрузочные носители (включая ISO, PXE, ленту OBDR, USB или eSATA), разнообразные сетевые протоколы (включая sftp, ftp, http, nfs, cifs), а также множество стратегий резервного копирования (включая IBM TSM, CommVault, Micro Focus Data Protector, Symantec NetBackup, Bareos, Bacula, rsync, Borg).

Решение Relax-and-Recover было разработано для простой настройки, не требует обслуживания и готово прийти на помощь в случае бедствия. Его характер "установил и забыл" устраняет любые оправдания для отсутствия решения по аварийному восстановлению.

https://relax-and-recover.org/

https://github.com/rear/rear
👍1
PowerShell: используем Invoke-Command для запуска команд/скриптов на удаленных компьютерах

В этой статье мы рассмотрим особенности использования командлета Invoke-Command для удаленного выполнения команд и скриптов. Возможно запускать команды удаленно на одном компьютере, или параллельно на множестве компьютерах в вашей сети. Командлет Invoke-Command использует возможности удаленного управления, заложенные в PowerShell Remoting. PowerShell Remoting позволяет удаленно подключаться к PowerShell сессиям на компьютерах через службу WinRM (Windows Remote Management) через протокол Web Services for Management (WS-Management). Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

https://telegra.ph/PowerShell-ispolzuem-Invoke-Command-dlya-zapuska-komandskriptov-na-udalennyh-kompyuterah-09-26
💯1
Утилита ncdu: быстрое решение для очистки диска

При переполнении диска серверов, ncdu — отличная альтернатива du и find. Она быстро показывает, какие файлы занимают место, и позволяет удалять их прямо в интерфейсе.

Простой запуск:
# cd /
# ncdu

Установка:

ubuntu: apt install ncdu
osx: brew install ncdu
centos: yum install ncdu
Media is too big
VIEW IN TELEGRAM
Mikrotik: Настройка основного и резервного провайдеров

Показываем как на роутере Mikrotik настроить подключение к двум провайдерам. Как настроить основной и резервный каналы подключения к интернет и управлять ими.
🔥2
Как активировать debug режим в bash?


1. Использование опции -x
Запустите скрипт с опцией -x, чтобы bash выводил каждую команду перед её выполнением.


bash -x script.sh


Или добавьте set -x в самом скрипте, чтобы начать отладку с этого места:


#!/bin/bash
set -x
# команды скрипта
set +x # остановка отладки


2. Использование опции -v
Опция -v заставляет bash выводить команды, которые он читает, но ещё не исполнил. Это полезно для отладки синтаксиса.


bash -v script.sh


Также можно добавить set -v в скрипте для включения вывода на определённом участке:


#!/bin/bash
set -v
# команды скрипта
set +v # остановка вывода


3. Использование режима отладки -xv
Для максимально подробной отладки можно использовать обе опции сразу — -x и -v:


bash -xv script.sh


4. Использование trap для пошаговой отладки
Команда trap позволяет запускать отладочные действия на определённых сигналах или ошибках. Например, чтобы пошагово отслеживать выполнение команд, можно использовать:


trap 'echo "Команда: $BASH_COMMAND"' DEBUG


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

5. Отладка с помощью PS4
Переменная PS4 позволяет настроить префикс вывода отладки. Это полезно, если вы хотите видеть номер строки и другую информацию:


export PS4='+ $(basename $0):${LINENO}: '
bash -x script.sh
🏆2
Sudo без бинарного setuid или SSH через UNIX-сокет

В этом посте я подробно расскажу, как заменить sudo (программу с `setuid`), используя SSH через локальный UNIX-сокет.

Я считаю, что программы с setuid`/`setgid — это устаревшая часть наследия UNIX, которую следует исключить. В будущем посте я объясню причины безопасности, стоящие за этим утверждением.

Это связано с работой группы Confined Users SIG в Fedora.

https://tim.siosm.fr/blog/2023/12/19/ssh-over-unix-socket/
Подборка полезных скриптов для Mikrotik

Сгенерировать резервную копию и отправить её по электронной почте

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

Обратите внимание, что сервер SMTP должен быть настроен перед использованием этого скрипта. Смотрите настройки в разделе /tool e-mail.


/system backup save name=email_backup
/tool e-mail send file=email_backup.backup to="[email protected]" body="See attached file" \
subject="$[/system identity get name] $[/system clock get time] $[/system clock get date] Backup")

Файл резервной копии содержит конфиденциальную информацию, такую как пароли. Поэтому, чтобы получить доступ к созданным файлам резервной копии, у скрипта или планировщика должна быть политика "sensitive" (чувствительная).

Использование строки в качестве функции


:global printA [:parse ":local A; :put \$A;" ];
$printA


Проверка пропускной способности и добавление ограничений
Этот скрипт проверяет, не превышает ли загрузка на интерфейсе 512 кбит/с, если это так, то добавляется очередь для ограничения скорости до 256 кбит/с.


:foreach i in=[/interface find] do={
/interface monitor-traffic $i once do={
:if ($"received-bits-per-second" > 0 ) do={
:local tmpIP [/ip address get [/ip address find interface=$i] address] ;
# :log warning $tmpIP ;
:for j from=( [:len $tmpIP] - 1) to=0 do={
:if ( [:pick $tmpIP $j] = "/") do={
/queue simple add name=$i max-limit=256000/256000 dst-address=[:pick $tmpIP 0 $j] ;
}
}
}
}
}


Заблокировать доступ к определённым веб-сайтам
Этот скрипт полезен, если вы хотите заблокировать некоторые сайты, но не хотите использовать веб-прокси.

В этом примере проверяются записи "Rapidshare" и "youtube" в DNS-кэше, и IP-адреса добавляются в список адресов с именем "restricted". Прежде чем начать, необходимо настроить маршрутизатор для перехвата всех DNS-запросов.


/ip firewall nat
add action=redirect chain=dstnat comment=DNS dst-port=53 protocol=tcp to-ports=53
add action=redirect chain=dstnat dst-port=53 protocol=udp to-ports=53


и добавьте брандмауэр


/ip firewall filter
add chain=forward dst-address-list=restricted action=drop


Теперь мы можем написать сценарий и запланировать его выполнение, скажем, каждые 30 секунд.
Код сценария:


:foreach i in=[/ip dns cache find] do={
:local bNew "true";
:local cacheName [/ip dns cache all get $i name] ;
# :put $cacheName;

:if (([:find $cacheName "rapidshare"] >= 0) || ([:find $cacheName "youtube"] >= 0)) do={

:local tmpAddress [/ip dns cache get $i address] ;
# :put $tmpAddress;

# if address list is empty do not check
:if ( [/ip firewall address-list find list="restricted" ] = "") do={
:log info ("added entry: $[/ip dns cache get $i name] IP $tmpAddress");
/ip firewall address-list add address=$tmpAddress list=restricted comment=$cacheName;
} else={
:foreach j in=[/ip firewall address-list find list="restricted"] do={
:if ( [/ip firewall address-list get $j address] = $tmpAddress ) do={
:set bNew "false";
}
}
:if ( $bNew = "true" ) do={
:log info ("added entry: $[/ip dns cache get $i name] IP $tmpAddress");
/ip firewall address-list add address=$tmpAddress list=restricted comment=$cacheName;
}
}
}
}
👍3
Как работает Docker
4
Выводим список установленных пакетов в Linux по дате

Порой необходимо узнать когда тот или иной пакет был установлен в операционной системе (например, в целях аудита). В данной статье рассмотрим как вывести список установленных пакетов в Linux, отсортированный по дате установки - давайте разберемся!


https://telegra.ph/Vyvodim-spisok-ustanovlennyh-paketov-v-Linux-po-date-09-10
👍32
Список полезных консольных команд VMWare ESXi (в том числе ESXCLI)

reboot — перезагрузить хост
poweroff — выключить хост
esxcli system version get — узнать версию (номер) инсталлированной версии VMware ESXi
uname -a — так же узнать версию VMware ESXi
vmware –vl – и еще один способ узнать версию и релиз VMware ESXi
esxcli hardware pci list | more — полная информация об установленных PCI устройствах
lspci — краткая информация обо всех установленных PCI устройствах
esxtop — диспетчер процессов top для vmware esxi (быстрые клавиши для переключения дисплея: c :cpu, i :interrupt, m :memory, n :network, d :disk adapter, u :disk device, v :disk VM, p :power mgmt)
vmkerrcode -l — расшифровка кодов ошибок
esxcfg-nics -l — информация о сетевых картах
esxcfg-vswitch -l — информация о виртуальных коммутаторах
find . -name libstorelib.so — найти файл libstorelib.so
dcui — работа с консолью сервера через ssh сессию
chkconfig -l — статус работы демонов
esxcli hardware memory get — размер установленной памяти
esxcli software vib list — список установленных vib-пакетов
esxcli network ip connection list — состояние активных соединений (аналог netstat)
esxcli storage vmfs extent list — информация о примонтированных/подключенных томах VMFS
esxcli hardware clock (get/set) — отображение/установка времени esxi-хоста
cd - Смена текущей директории;
cp - Копирование файла.cp [файл 1] [файл2];
find - Поиск файлов по критериям;
ls - Список файлов и директорий в текущей или явно указанной директории.ls /vmfs/volumes/ ключи: -l подробная информация -a отображение скрытых файлов;
mkdir — Создание директории;
mv — Перемещение файла. Переименование файла.mv [путь и имя файла] [путь, куда перемещать];
ps — Информация о запущенных процессах. ps -ef;
rm - Удаление файлов;
shutdown — Выключение или перезагрузка сервера shutdown nowshutdown –r now;
vi — Текстовый редактор;
nano — Дружелюбный к новичкам текстовый редактор, отсутствует на ESXi;
cat — Вывод содержимого файла на экран. cat /etc/hosts;
more — Вывод содержимого файла на экран, по странице за раз. more /etc/hosts;
man — Справка по командам man <команда, по которой есть вопрос>, для некоторых команд помощь выводится при запуске самой команды без параметров;
useradd — Создание пользователя. useradd <имя пользователя>;
passwd - Задание пароля пользователю passwd <имя пользователя>;
esxcli storage nfs list — список подключеных nfs- хранлилищ на хосте
esxcli software vib list — cписок установленных vib-пакетов
esxcli hardware memory get — информация об использовании памяти на хосте ESXi, включая общий объем
👍2