📌Совет по Linux
Если вы хотите определить, сколько времени займет выполнение определенной команды или скрипта, используйте команду time.
Вот синтаксис:
Пример:
Он также показывает использование системных ресурсов процесса, что делает его полезным инструментом для оценки эффективности конкретной команды.
Если вы хотите определить, сколько времени займет выполнение определенной команды или скрипта, используйте команду time.
Вот синтаксис:
$ time <команда>.
Пример:
$ time find / -perm -u=s -type f &>/dev/null
Он также показывает использование системных ресурсов процесса, что делает его полезным инструментом для оценки эффективности конкретной команды.
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Как фильтровать вывод предыдущей команды и зачем нужен pipe
Bash удобен тем, что позволяет передавать результаты одной команды в другую. Для этого используется символ
Простой пример: нужно отфильтровать вывод лога nginx, чтобы отобразить только запросы к конкретному URL. Сначала используем команду
|
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
Интеллектуальный распаковщик Dockerfile, помогающий создавать лучшие образы Docker. Линтер разбирает Docker-файл на AST и выполняет правила поверх AST. Он опирается на поддержку ShellCheck для проверки Bash-кода внутри инструкций RUN.
https://github.com/hadolint/hadolint
Что в bash скрипте означает команда set -euo pipefail?
Команда
1.
2.
3.
Пример
Таким образом,
Команда
set -euo pipefail
в Bash-скрипте изменяет поведение интерпретатора и добавляет контроль ошибок, что делает сценарий более надежным. 1.
-e
: Завершает выполнение скрипта, если любая команда завершилась с ненулевым статусом (то есть произошла ошибка). Это предотвращает дальнейшее выполнение скрипта, если что-то пошло не так.2.
-u
: Вызывает ошибку, если используется неинициализированная (неопределенная) переменная. Это помогает избежать ошибок, когда случайно обращаются к переменной, которая не была задана.3.
-o pipefail
: Заставляет весь конвейер (|
) завершиться с ошибкой, если любая команда в цепочке вернула ненулевой статус. По умолчанию в Bash статус конвейера определяется только последней командой, а pipefail
изменяет это поведение. Если любая команда в конвейере завершится ошибкой, это будет считаться ошибкой всего конвейера.Пример
set -euo pipefail
# Пример команды, использующей необъявленную переменную
echo $undefined_var # Это вызовет ошибку из-за опции -u
Таким образом,
set -euo pipefail
делает скрипт более устойчивым к ошибкам, помогая избежать неожиданных ситуаций и неявных ошибок.👍3❤1
Массивы bash
Если вы используете «стандартную» оболочку *NIX-системы, возможно, вы не знакомы с такой полезной особенностью bash как массивы. Хотя массивы в bash не так круты, как в P-языках (Perl, Python и PHP) и других языках программирования, они часто бывают полезны.
Bash-массивы имеют только численные индексы, но они не обязательны к использованию, то есть вы не должны определять значения всех индексов в явном виде.
https://habr.com/ru/articles/511608/
Если вы используете «стандартную» оболочку *NIX-системы, возможно, вы не знакомы с такой полезной особенностью bash как массивы. Хотя массивы в bash не так круты, как в P-языках (Perl, Python и PHP) и других языках программирования, они часто бывают полезны.
Bash-массивы имеют только численные индексы, но они не обязательны к использованию, то есть вы не должны определять значения всех индексов в явном виде.
https://habr.com/ru/articles/511608/
👍2
Срок действия учетной записи
Узнать срок действия учетной записи в ActiveDirectory можно через оснастку: Пользователи и компьютеры или с помощью команды Powershell. Во втором случае мы получим список всех учетных записей, у которых заканчивается срок действия.
Устанавливаем
Узнать срок действия учетной записи в 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
https://github.com/sqshq/sampler
Инструмент для выполнения команд 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/
Хочу поделиться с сообществом простым и полезным шаблоном скрипта-обёртки на 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/
Хабр
Простой и удобный шаблон для bash-скриптов выполняемых по расписанию
Хочу поделиться с сообществом простым и полезным шаблоном скрипта-обёртки на bash для запуска заданий по cron (а сейчас и systemd timers), который моя команда повсеместно использует много лет. Сначала...
👍2
Zenith - что-то вроде top или htop, но с диаграммами с возможностью масштабирования, использованием CPU, GPU, сети и диска.
Особенности
Дополнительные графики использования ЦП, памяти, сети и дисков
Быстрый просмотр свободного места на диске, IP-адресов сетевых карт, частоты процессора
Выделение основных пользователей ЦП, памяти и диска
Процент заряда батареи, время зарядки или разрядки, потребляемая мощность
Таблица процессов с возможностью фильтрации по типу верхней части, включающая использование диска каждым процессом
Изменение приоритета процесса
Представления диаграмм с возможностью масштабирования (с поддержкой прокрутки назад во времени)
Управление процессами с помощью сигналов
Сохранение данных о производительности между запусками
Метрики использования GPU для графических процессоров NVIDIA (с --features nvidia), включая использование GPU для каждого процесса
Графики свободного места на диске
Учет задержек (в Linux при запуске zenith с правами root)
Установка на дистрибутивы Linux на базе Debian/Ubuntu (64-бит)
https://github.com/bvaisvil/zenith
Особенности
Дополнительные графики использования ЦП, памяти, сети и дисков
Быстрый просмотр свободного места на диске, 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 ESXiuname -a
— так же узнать версию VMware ESXivmware –vl
– и еще один способ узнать версию и релиз VMware ESXiesxcli 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.sodcui
— работа с консолью сервера через ssh сессиюchkconfig -l
— статус работы демоновesxcli hardware memory get
— размер установленной памятиesxcli software vib list
— список установленных vib-пакетовesxcli network ip connection list
— состояние активных соединений (аналог netstat)esxcli storage vmfs extent list
— информация о примонтированных/подключенных томах VMFSesxcli 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
Решение для аварийного восстановления и миграции систем на новое железо под управлением 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
В этой статье мы рассмотрим особенности использования командлета 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 — отличная альтернатива
Простой запуск:
Установка:
ubuntu:
При переполнении диска серверов, 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 настроить подключение к двум провайдерам. Как настроить основной и резервный каналы подключения к интернет и управлять ими.
Показываем как на роутере Mikrotik настроить подключение к двум провайдерам. Как настроить основной и резервный каналы подключения к интернет и управлять ими.
🔥2
Как активировать debug режим в bash?
1. Использование опции
Запустите скрипт с опцией
Или добавьте
2. Использование опции
Опция
Также можно добавить
3. Использование режима отладки
Для максимально подробной отладки можно использовать обе опции сразу —
4. Использование
Команда
Это полезно для сложных сценариев, где нужно понять, какая именно команда вызывает ошибку.
5. Отладка с помощью
Переменная
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-сокет
В этом посте я подробно расскажу, как заменить
Я считаю, что программы с
Это связано с работой группы Confined Users SIG в Fedora.
https://tim.siosm.fr/blog/2023/12/19/ssh-over-unix-socket/
В этом посте я подробно расскажу, как заменить
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.
Файл резервной копии содержит конфиденциальную информацию, такую как пароли. Поэтому, чтобы получить доступ к созданным файлам резервной копии, у скрипта или планировщика должна быть политика "sensitive" (чувствительная).
Использование строки в качестве функции
Проверка пропускной способности и добавление ограничений
Этот скрипт проверяет, не превышает ли загрузка на интерфейсе 512 кбит/с, если это так, то добавляется очередь для ограничения скорости до 256 кбит/с.
Заблокировать доступ к определённым веб-сайтам
Этот скрипт полезен, если вы хотите заблокировать некоторые сайты, но не хотите использовать веб-прокси.
В этом примере проверяются записи "Rapidshare" и "youtube" в DNS-кэше, и IP-адреса добавляются в список адресов с именем "restricted". Прежде чем начать, необходимо настроить маршрутизатор для перехвата всех DNS-запросов.
и добавьте брандмауэр
Теперь мы можем написать сценарий и запланировать его выполнение, скажем, каждые 30 секунд.
Код сценария:
Сгенерировать резервную копию и отправить её по электронной почте
Этот скрипт создаёт файл резервной копии и отправляет его на указанный адрес электронной почты. В теме письма содержится имя маршрутизатора, текущая дата и время.
Обратите внимание, что сервер 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