bash - 将 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: ^
我还用 替换了反引号$( )
,这在几个方面更清晰,并在生成的文件名周围加上双引号(不是绝对必要的,但对于包含命令或变量替换的东西来说,这是一个很好的一般做法)。
由于缺少空格,您在评论中尝试的版本还有几个额外的问题:-Z username-s 0
代替-Z username -s 0
和12345-w -
代替12345 -w -
. 空格是 shell 语法中的重要分隔符,因此请注意不要添加或删除它们,除非您知道它在该特定位置是安全的。在这里,可以删除选项与其参数之间的空格(例如,-Zusername -s0
而不是-Z username -s 0
),但删除参数和下一个选项之间的空格会导致混乱。
推荐阅读
- geomesa - 如何在 Geomesa 中摄取 geojson?
- javascript - 按组为对象数组创建索引列
- flutter - 在进行小部件测试时是否可以渲染颤振小部件?
- python - Python asn.1 DER 编码序列 NamedTypes 只能转换标量值
- keycloak - 将 Keycloak 与 icCube 一起使用 - 如何使其工作(缺少 Keycloak 上下文令牌)?
- dplyr - 通过带有不带引号的元素的显式参数指定要分组的多个变量
- applepay - 订单完成后 Apple pay on web pay
- r - R中的顺序向量:带数字的字母很有趣
- html - 仅在内部或仅在外部描边 SVG 路径
- c# - 如何使用非泛型类型获取 Enum 的默认值?