运行netstat -tulpun | grep -i port_from_the_list
并获取运行下一个命令的输出的脚本
我需要在列表中提到的所有服务器上运行 2 个命令。
server: Jan port: 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd
server: feb port: 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd
- 登录服务器
- 运行第一个命令
netstat
,该命令给出进程 ID 的输出 ps -ef | grep -i 1505 "processid"
运行它将获取进程 ID 输出并运行命令ps
接受的输出
server: Jan port: 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd
root 1421 15033 0 13:38 pts/16 00:00:00 grep -i 1505
server: feb port: 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1505/httpd
root 1421 15033 0 13:38 pts/16 00:00:00 grep -i 1505
我无法读取netstat
命令的输出并运行下一个命令。
while read -r -u10 server port line
do
echo ========== server: "$server" port: "$port" ==========
ssh -qn "$server" "netstat -tulpun | grep -E \"\b$port\b\"" | awk '{print $7}' | grep "/" | awk -F "/" '{print $1}' | xargs -I % bash -c 'echo Port % && ps -ef | grep % && echo ' | grep -v grep
echo
done 10< demo
答案1
你可以从
for port in $(cat demo); do
mypid=$(netstat xxxx |
grep ":${port} " | grep LISTEN | sed -e 's/.*LISTEN//'| cut -d/ -f1)
ps -fp ${mypid}
done
可能的改变(你熟悉的):
- 使用 xargs 调用 ps
... -f1) | xargs ps -fp
- 用于
sed
切割/ - 使用 while 循环
cat demo | while read port; do