TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #429 1.3K
Сбор данных с нескольких серверов


<(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
  • 👍 12
More from @bash_tex
  1. Oct 9, 2026BashTex 📱 #мем
  2. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  3. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  4. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  5. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  6. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →