strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
或者,将其格式化以方便阅读,并完整保留OP的strace标志:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
细目分类,最里面优先:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
请向我展示所有活动的TCP连接,而无需将IP地址解析为DNS名称。用管道将其传输到awk,它将在以结尾的任何行上打印第五个字段/telnet
,其中字段由一个或多个空格和冒号分隔。该字段将成为源端口。
改进:可以通过在awk的操作部分| head -n 1
的末尾或;exit
内部添加a 来使其更加健壮,但是您的原始版本缺少等效项,因此我不想将其更长。
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
这****
是我上面已经解释过的部分。在这里,我要寻找的任何netstat -tnp
与我上面发现的源端口具有相同端口且归Apache所有的行;找到它时,我将打印第七个字段(由一个或多个空格或斜杠分隔)。这是Apache子代的PID。
改进:除了仅返回一个PID(通过与上述相同的方法)之外,我能想象到的最大事情是,在实际匹配dport时要更具区分性,而不是恰好适合此模式的其他东西。通过在FS(-F
)中添加冒号很容易做到这一点,但是问题是在IPv4与IPv6混合的情况下发生的,其中地址本身可能存在冒号,因此很快就会变得讨厌。这似乎非常强大,尤其是在尾随空间方面。
sudo strace -o /tmp/strace -f -s4096 -r -p
这是您原始问题的直接副本;我至少没有修改它。
如果您允许我再输入几个字符,则我运行的版本可能是:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5;exit}") / && /apache2/ {print \$7;exit}")