แทนที่จะทำwc -l /proc/net/tcp
อย่างนั้นมีวิธีที่เร็วกว่าในการทำมันไหม
ฉันต้องการจำนวนการเชื่อมต่อ tcp ทั้งหมด
แทนที่จะทำwc -l /proc/net/tcp
อย่างนั้นมีวิธีที่เร็วกว่าในการทำมันไหม
ฉันต้องการจำนวนการเชื่อมต่อ tcp ทั้งหมด
คำตอบ:
หากคุณต้องการรับหมายเลขและไม่ต้องการรายละเอียดใด ๆ คุณสามารถอ่านข้อมูล/proc/net/sockstat{,6}
ได้ โปรดทราบว่าคุณต้องรวมค่าทั้งสองเพื่อรับจำนวนการเชื่อมต่อที่แน่นอน
หากคุณต้องการรับข้อมูลจากเคอร์เนลคุณสามารถใช้ NETLINK_INET_DIAG
เพื่อรับข้อมูลจากเคอร์เนลโดยไม่ต้องอ่าน/proc
วิธีที่เร็วกว่า? ด้วยวิธีนี้จะสร้างคำตอบในเสี้ยววินาทีในความเป็นจริงมันใช้เวลา 0.009 วินาทีในคอมพิวเตอร์ของฉัน!
คุณกำลังมองหาวิธีที่ต้องการการพิมพ์น้อยลงหรือไม่? ในกรณีนั้นให้ตั้งชื่อแทนเช่น
alias tcpcount="wc -l /proc/net/tcp"
ตอนนี้คุณสามารถป้อนชื่อนามแฝงเช่นtcpcount
สิ่งที่ฉันใช้ในตัวอย่างของฉันเพื่อรับหมายเลขนี้
ป้อนบรรทัดหรือเพิ่มลงใน. bashrc ของคุณเพื่อให้นามแฝงได้รับการกำหนดทุกครั้งที่คุณเข้าสู่ระบบ
สำหรับการเชื่อมต่อจำนวนมากต่อไปนี้อาจทำงานได้เร็วขึ้นเล็กน้อย (และช้าลงเล็กน้อยสำหรับการเชื่อมต่อจำนวนน้อยมาก):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
หรืออาจจะ ...
awk 'END {print NR}' /proc/net/tcp
โซลูชันทั้งสองนี้สันนิษฐานว่า "wc" นั้นไม่เหมาะสมที่สุดเพียงแค่นับจำนวนบรรทัด การทดสอบของฉันแสดงให้เห็นว่าสมมติฐานนี้เป็นจริง
การทำงานครั้งแรกในสถานที่ตั้งที่คำสั่ง tail เป็นสิ่งที่ดีในการทิ้งข้อมูลที่ไม่จำเป็นดังนั้นมันจึงสร้างขึ้นสำหรับการสร้าง sub-shell พิเศษและทำงานพิเศษกับตัวแปรสภาพแวดล้อม มันใช้ประโยชน์จากความจริงที่ว่าบรรทัดใน / proc / net / tcp นั้นมีหมายเลขอยู่แล้วเพื่อขจัดความจำเป็นในการนับบรรทัด ทางออกสุดท้ายสมมติว่า awk นับได้ดีพอที่จะชดเชยข้อเสียใด ๆ เนื่องจากการโหลดโปรแกรมที่ใหญ่กว่าและสร้างกระบวนการหลาย ๆ กระบวนการ โซลูชัน awk มีประโยชน์เพิ่มเติมที่เหมาะสมกับคำนิยามนามแฝงแบบบรรทัดเดียว (ซึ่งให้ประโยชน์เพิ่มเติมกับที่ไม่มีสคริปต์ที่เรียกว่าดังนั้นจึงไม่มีการประมวลผลเชลล์พิเศษแยกออกมาทำให้ได้เปรียบ mili-วินาทีเพิ่มเติม)
/proc/net/tcp
มากนัก คุณสามารถลองnetstat -n -t | wc -l
ได้ แต่ฉันเดาว่า netstat นั้นอ่านได้จาก/proc/net/tcp
netstat -nt
เชื่อมต่อกับประมาณ 180.000 การเชื่อมต่อ ฉันไม่เห็นเหตุผลว่าทำไมมันควรช้ามาก ... (การอ่าน/proc/net/tcp
ช้ามาก)
awk
วิธีการนั้นช้ากว่าwc
มาก น่าจะเป็นที่ตราไว้กับtail
wc
ใช้ss -s
คำสั่งเพื่อรับคำตอบโดยละเอียด
ss -s