คำสั่งคล้ายกับ netstat -np แต่จัดกลุ่มตามสถานะและ PID หรือไม่


9

มีคำสั่งคล้ายกับnetstat -npแต่จัดกลุ่มตามสถานะและPIDหรือไม่

ฉันต้องการทราบจำนวนปัจจุบันของการเชื่อมต่อเซิร์ฟเวอร์ในสถานะเฉพาะที่จัดกลุ่มตามโปรแกรม

คล้ายกับ,

102 squid ESTABLISHED
32 httpd ESTABLISHED

ฉันใช้ RHEL5

คำตอบ:


11

คุณสามารถใช้sortเพื่อจัดระเบียบผลลัพธ์netstatในรูปแบบที่คุณต้องการ

$ netstat -anpt 2>&1 | tail -n +5 | sort -k7,7 -k 6,6

สิ่งนี้จะเรียงลำดับผลลัพธ์โดยใช้คอลัมน์ที่ 7 ก่อน (ชื่อกระบวนการ / PID) ตามด้วยสถานะ (ESTABLISHED, LISTEN และอื่น ๆ )

หมายเหตุ:ส่วนแรกของคำสั่งnetstat -anpt 2>&1 | tail -n +5 ..จะนำเอาท์พุททั้งหมดที่อาจเกิดขึ้นบน STDOUT ไปยัง STDIN เช่นกันจากนั้นตัด 5 บรรทัดแรกซึ่งเป็นเอาต์พุตสำเร็จรูปnetstatที่เราไม่สนใจ

ตัวอย่าง

$ netstat -anpt 2>&1 | tail -n +5 | sort -k7,7 -k 6,6
tcp        0      0 192.168.1.20:49309      192.168.1.103:631       ESTABLISHED 2077/gnome-settings 
tcp        0      0 192.168.1.20:38393      204.62.14.135:443       ESTABLISHED 2260/mono           
tcp        0      0 192.168.1.20:39738      74.125.192.125:5222     ESTABLISHED 2264/pidgin         
tcp        0      0 192.168.1.20:40097      87.117.201.130:6667     ESTABLISHED 2264/pidgin         
tcp        0      0 192.168.1.20:53920      217.168.150.38:6667     ESTABLISHED 2264/pidgin         
...
tcp        1      0 192.168.1.20:50135      190.93.247.58:80        CLOSE_WAIT  24714/google-chrome 
tcp        1      0 192.168.1.20:44420      192.168.1.103:631       CLOSE_WAIT  24714/google-chrome 
tcp        0      0 192.168.1.20:36892      74.125.201.188:5228     ESTABLISHED 24714/google-chrome 
tcp        0      0 192.168.1.20:43778      74.125.192.125:5222     ESTABLISHED 24714/google-chrome 
tcp        0      0 192.168.1.20:33749      198.252.206.140:80      ESTABLISHED 24714/google-chrome 
...

คุณสามารถใช้วิธีการที่คล้ายกันที่จะได้รับการนับการใช้เครื่องมือต่างๆเช่นหรือwcuniq -c

การเปลี่ยนผลลัพธ์

หากคุณต้องการให้ได้ผลลัพธ์netstatเช่นนี้:

102 squid ESTABLISHED
32 httpd ESTABLISHED

คุณสามารถทำบางหั่นต่อไปและ dicing ใช้และawk sedสิ่งนี้สามารถทำให้กะทัดรัดมากขึ้น แต่คุณควรเริ่มต้นและทำงานได้ดีขึ้น

$ netstat -anpt 2>&1 | tail -n +5 | awk '{print $7,$6}' | sort -k1,1 -k3,3 \
    | sed 's#/# #' | column -t
2264   pidgin          ESTABLISHED
2264   pidgin          ESTABLISHED
24714  google-chrome   CLOSE_WAIT
24714  google-chrome   CLOSE_WAIT
24714  google-chrome   ESTABLISHED
24714  google-chrome   ESTABLISHED
...
24714  google-chrome   ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             ESTABLISHED
26358  ssh             LISTEN
26358  ssh             LISTEN
26358  ssh             LISTEN

หมายเหตุ: column -tเพียงแค่จัดเรียงเอาต์พุตทั้งหมดในคอลัมน์ที่ดี

การนับการเชื่อมต่อ

ในที่สุดก็ทำสิ่งที่คุณต้องการในแง่ของการรับรู้เหตุการณ์ที่เกิดขึ้น:

$ netstat -anpt 2>&1 | tail -n +5 | awk '{print $7,$6}' | sort -k1,1 -k3,3 \
    | sed 's#/# #' | column -t | uniq -c
  6 -      LISTEN
  8 -      TIME_WAIT
  1 2077   gnome-settings  ESTABLISHED
  1 2260   mono            ESTABLISHED
 10 2264   pidgin          ESTABLISHED
  2 24714  google-chrome   CLOSE_WAIT
 27 24714  google-chrome   ESTABLISHED
  3 26358  ssh             ESTABLISHED
  4 26358  ssh             LISTEN
  1 26359  ssh             ESTABLISHED
  4 3042   thunderbird     ESTABLISHED
  1 32472  monodevelop     ESTABLISHED
  2 32472  monodevelop     LISTEN
  1 32533  mono            ESTABLISHED
  1 32533  mono            LISTEN
  1 3284   monodevelop     LISTEN
  1 3365   mono            LISTEN
  1 4528   mono            LISTEN
  1 8416   dropbox         ESTABLISHED
  1 8416   dropbox         LISTEN

คอลัมน์แรกแสดงถึงการนับ


ขอบคุณสำหรับคำตอบอย่างละเอียด - ฉันจะโหวตเมื่อฉันมีตัวแทน 15 คน
Kingo

5

จากวิกิพีเดีย

บน Linux netstat(ส่วนหนึ่งของ "สุทธิเครื่องมือ") คือเลิก , ss(ส่วนหนึ่งของ iproute2) ควรจะนำมาใช้แทน

สุทธิเครื่องมือแพคเกจยังไม่ได้เห็นการเปิดตัวลินุกซ์ในรอบกว่าทศวรรษที่ผ่านมา นั่นเป็นเวลานานที่จะไม่ต้องมีการอัพเดตสำหรับชุดโปรแกรมที่ออกแบบมาเพื่อจัดการและตรวจสอบอินเตอร์เฟสการสื่อสารของเคอร์เนลที่พัฒนาตลอดเวลาโดยเฉพาะอย่างยิ่งเมื่อคุณพูดถึงเคอร์เนลที่ใช้งานอินเทอร์เน็ต

โชคดีที่มีแพ็คเกจiproute2 ที่ได้รับการบำรุงรักษาอย่างดีซึ่งรวมถึงssยูทิลิตี้

ด้วยssคุณสามารถทำสิ่งที่คุณขอที่ชอบ:

ss -np state ESTABLISHED

จากman ss:

#USAGE EXAMPLES
   ss -t -a
#          Display all TCP sockets.
#
   ss -t -a -Z
#          Display all TCP sockets with process SELinux
#          security contexts.
#
   ss -u -a
#          Display all UDP sockets.
#
   ss -o state established '( dport = :ssh or sport  =   :ssh )'
#          Display all established ssh connections.
#
   ss -x src /tmp/.X11-unix/*
#          Find  all  local  processes  connected  to X server.
#
   ss -o state fin-wait-1 '( sport = :http or sport  = :https )' dst 193.233.7/24
#          List all the tcp sockets in state FIN-WAIT-1
#          for our apache to network  193.233.7/24  and
#          look at their timers.

0

คุณสามารถใช้ netstat คอลัมน์และ awk:

netstat -anpt | column -t | awk '{print $1,$6,$7}'

สิ่งนี้พิมพ์คอลัมน์แรก, คอลัมน์ที่หกและเจ็ด

tcp LISTEN -
tcp LISTEN -
tcp ESTABLISHED 2084/firefox
tcp ESTABLISHED 2084/firefox
tcp6 LISTEN -
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.