【问题标题】:use tcpkill command from an ip list从 ip 列表中使用 tcpkill 命令
【发布时间】:2015-11-30 14:12:48
【问题描述】:

我在一个名为 ips 的文件中有一个 ip 列表: ip1 ip2

我想从这个列表中 tcpkill。我不能从 tcpkill 命令选项中做到这一点。我需要一个脚本来写:

tcpkill -i eth0 -9 主机 ip1 或主机 ip2

列表会随着时间的推移而增长。

我唯一知道的是我需要一个循环来读取列表:

对于 $(cat list) 中的 IP ;做
echo "tcpkill -i eth0 -9 主机 $IP" (对于 列表的第一个元素)
echo "or host $IP" (对于其余的 列表)。

所以我的问题是: 1. 为此目的正确的语法是什么? 2. 有完全不同的方法吗?

大家有什么想法吗?!

非常感谢。

【问题讨论】:

    标签: bash


    【解决方案1】:

    这个单行命令会将 IP 列表附加到 tcpkill 命令以形成完整的命令:

    tcpkill -i eth0 -9 host $(cat list | xargs | sed 's/ / or host /g')
    

    您可以将此命令放在echo 之后,以查看该命令是如何形成的。

    echo tcpkill -i eth0 -9 host $(cat list | xargs | sed 's/ / or host /g')
    

    【讨论】:

    • 确实感谢 Prasanna;你能解释一下你的代码吗?
    • cat list 在标准输出上打印所有 IP。下一个xargs 命令将列表的所有行附加到带有空格分隔符的单行中。现在我们有了以空格为分隔符的 IP 地址列表(例如“ip1 ip2 ip3 ip4 ip5 ...”)。下一个sed 命令将每个空格替换为字符串“或主机”。 sed 命令的“g”标志告诉用这个字符串替换所有出现的空格字符。结果,我们得到一个类似“ip1 or host ip2 or host ip3 or host ip4 or host ip5”的字符串。我们将此字符串附加到tcpkill 命令后host 单词之后的适当位置。阅读 $(cmd) 语法以获取更多信息。
    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多