Ладно, я понял, что я делал не так... Строка 4 должна быть file="name Backup ($current_date).tgz"
Строка 5 должна бытьtar -cvzf "$file" module8
Сетевое взаимодействие обычно двунаправленное, в то время как tee
и конвейеры оболочки работают только -однонаправленно.
Но если у вас есть некоторые сетевые службы, которые только получают и никогда не отправляют обратно данные, вы можете отправить один и тот же поток байтов всем им по TCP с помощью zsh
+ socat
с чем-то вроде:
generate-stream > >(socat -u - tcp:host:8001) > >(socat -u - tcp:host:8002)
Или с другими оболочками с поддержкой подстановки процессов, но без поддержки multios:
generate-stream | tee >(socat -u - tcp:host:8001) | socat -u - tcp:host:8002
Теперь, чтобы подключить это к службе, которая принимает входящие соединения и перенаправляет полученный трафик таким tee
образом, вы можете сделать что-то вроде:
CODE='
cat > >(socat -u - tcp:host:8001) > >(socat -u - tcp:host:8002)
' socat -u tcp-listen:8000,fork,reuseaddr \
exec:'zsh -c eval\\ $CODE',nofork
Здесь запускается служба, которая получает трафик через TCP-порт 8000 (в однонаправленном режиме )и перенаправляет его на серверы через TCP-порты 8001 и 8002 на host
.
nofork
не обязательно, это просто оптимизация, чтобы zsh
stdin напрямую был сетевым сокетом.
Или если у вас нет zsh
, но естьbash
:
CODE='
tee >(socat -u - tcp:host:8001) | socat -u - tcp:host:8002
' socat -u tcp-listen:8000,fork,reuseaddr \
exec:'bash -c eval\\ \\\"$CODE\\\"',nofork
Это может быть адаптировано к любому из многих других транспортных протоколов, поддерживаемых socat
.
Вы можете написать zsh
вспомогательную функцию для этого типа:
ntee() (
src=$1; shift
export CODE=cat
for dst do
CODE+=" > >(socat -u - ${(qq)dst})"
done
socat -u "$src" exec:'zsh -c eval\\ $CODE',nofork
)
И использовать как:
ntee tcp-listen:8000,reuseaddr,fork \
tcp:host1:8001 \
udp-sendto:host2:8002 \
file:file.log,creat,append
например.
Инструменты netcat или socat прекрасно подходят для работы с потоками данных прикладного уровня.Чтобы пересылать копии сетевых пакетов другим адресатам на машине с Linux, вам нужно посмотреть уровень ядра -iptables
.
Нужная вам функциональность tee может быть реализована с помощью расширения TEE:Документация по расширению iptables TEE
Конкретные iptables
правила, которые вы хотите настроить, будут зависеть от ваших сетевых интерфейсов, количества портов для переадресации и т. д.