strace -p $(netstat -tnp|awk -F'[ /]+' "/:$(netstat -tnp|awk -F'[ :]+'
"/\/telnet/{print \$5}") /&&/apache2/{print \$7}")
Hoặc, được định dạng để đọc dễ dàng hơn và với các cờ strace của OP còn nguyên vẹn:
sudo strace -o /tmp/strace -f -s4096 -r -p $(netstat -tnp | \
awk -F'[ /]+' "/:$(netstat -tnp | awk -F'[ :]+' "/\/telnet/ \
{print \$5}") / && /apache2/ {print \$7}")
Sự cố, trong cùng đầu tiên:
netstat -tnp | awk -F'[ :]+' "/\/telnet/ {print \$5}"
Chỉ cho tôi, không cần phân giải địa chỉ IP thành tên DNS, tất cả các kết nối TCP đang hoạt động. Đường ống để awk, in trường thứ năm trên bất kỳ dòng nào kết thúc /telnet
, trong đó các trường được phân tách bằng một hoặc nhiều dấu cách và dấu hai chấm. Trường này sẽ là cổng nguồn.
Để cải thiện : Có thể trở nên mạnh mẽ hơn nhiều bằng cách thêm | head -n 1
phần cuối hoặc phần ;exit
bên trong của phần hành động, nhưng phiên bản gốc của bạn thiếu phần tương đương, vì vậy tôi không muốn làm phần này dài hơn.
netstat -tnp | awk -F'[ /]+' "/:**** / && /apache2/ {print \$7}")
Đây ****
là phần tôi đã giải thích ở trên. Ở đây, tôi đang tìm kiếm bất kỳ dòng netstat -tnp
nào có cùng cổng với cổng nguồn mà tôi đã khám phá ở trên và được sở hữu bởi Apache; khi tôi tìm thấy nó, tôi in trường thứ bảy (được giới hạn bởi một hoặc nhiều dấu cách hoặc dấu gạch chéo). Đây là PID của đứa trẻ Apache.
Để cải thiện : Bên cạnh việc chỉ trả lại một PID (thông qua các phương thức tương tự như trên), điều lớn nhất tôi có thể tưởng tượng là phân biệt đối xử hơn khi thực sự khớp với dport trái ngược với một thứ khác chỉ phù hợp với mô hình. Điều này có thể dễ dàng thực hiện bằng cách thêm dấu hai chấm vào FS ( -F
), nhưng sự cố xảy ra trong các tình huống hỗn hợp giữa IPv4 và IPv6, trong đó có thể có dấu hai chấm trong chính địa chỉ và do đó có thể trở nên khó chịu khá nhanh. Điều này có vẻ khá mạnh mẽ, đặc biệt là với không gian dấu.
sudo strace -o /tmp/strace -f -s4096 -r -p
Đây là một bản sao trực tiếp từ câu hỏi ban đầu của bạn; Tôi đã không sửa đổi nó trong ít nhất.
Nếu bạn cho phép tôi thêm một vài ký tự, phiên bản tôi sẽ chạy có thể là:
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}")