如何解决将 pcap 打印到远程服务器时出现 Cat 错误
脚本如下;当我手动运行它时,没有问题,但是
#!/bin/bash
/usr/bin/sudo /usr/sbin/tcpdump -i any -Z user -s 0 -v port xxx or xxx -w - | ssh root@xx.xx.xx.xx -C 'cat - > /opt/pcap/trace.`date +\%s`' .&
sleep 10
pkill tcpdump
exit
sh -x 输出如下。可能是什么问题?
cat .: 是一个目录
解决方法
这是更正后的版本:
/usr/bin/sudo /usr/sbin/tcpdump -i any -Z user -s 0 -w - -v port xxx or xxx | ssh root@xx.xx.xx.xx -C 'cat - > "/opt/pcap/trace.$(date +\%s)"' &
原始版本有两个问题,末尾的 .
之前的杂散 &
字符,以及 -w -
的 tcpdump
选项在过滤器表达式之后(选项必须在表达式之前):
/usr/bin/sudo /usr/sbin/tcpdump -i any -Z user -s 0 -v port xxx or xxx -w - | ssh root@xx.xx.xx.xx -C 'cat - > /opt/pcap/trace.`date +\%s`' .&
problems here: ^^^^ and here: ^
我还用 $( )
替换了反引号,也就是 cleaner in a couple of ways,并在结果文件名周围加上双引号(不是绝对必要的,但是对于包含命令或变量替换的内容的一般做法是好的) ).
由于缺少空格,您在评论中尝试的版本有几个额外的问题:-Z username-s 0
代替 -Z username -s 0
和 12345-w -
代替 12345 -w -
。空格是 shell 语法中的重要分隔符,因此请注意不要添加或删除它们,除非您知道它在该特定位置是安全的。在这里,删除选项与其参数之间的空格是可以的(例如,-Zusername -s0
而不是 -Z username -s 0
),但是删除参数和下一个选项之间的空格会导致混乱。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。