<(ssh host1 cmd) vs <(ssh host2 cmd)
Конструкция позволяет сравнивать состояние двух (или нескольких) машин без временных файлов, параллельно и максимально быстро.
Process substitution создает виртуальные файлы, в которые пишется вывод команд. SSH-запросы выполняются параллельно, а diff думает, что сравнивает два обычных файла:
diff <(ssh h1 cmd) <(ssh h2 cmd)
▪️ Лучшие практические примеры
▪️ Сравнение пакетов
diff <(ssh h1 "dpkg -l | sort") \
<(ssh h2 "dpkg -l | sort")
▪️ Конфиги (sshd_config)
diff -u <(ssh h1 "grep -v '^#' /etc/ssh/sshd_config") \
<(ssh h2 "grep -v '^#' /etc/ssh/sshd_config")
▪️ Сетевые соединения
diff <(ssh h1 "ss -tuna | sort") \
<(ssh h2 "ss -tuna | sort")
▪️ Docker-контейнеры
diff <(ssh h1 "docker ps --format '{{.Names}} {{.Image}}' | sort") \
<(ssh h2 "docker ps --format '{{.Names}} {{.Image}}' | sort")
▪️ Мини-функция
compare_hosts() {
diff <(ssh "$1" "$3") <(ssh "$2" "$3")
}
Использование:
compare_hosts node1 node2 "df -h"
BashTex 📱 #bash #utils