Câu trả lời:
Nếu bạn chỉ muốn lấy số và không cần bất kỳ chi tiết nào bạn có thể đọc dữ liệu từ đó /proc/net/sockstat{,6}
. Xin lưu ý rằng bạn phải kết hợp cả hai giá trị để có được số lượng kết nối tuyệt đối.
Nếu bạn muốn lấy thông tin từ chính kernel, bạn có thể sử dụng NETLINK_INET_DIAG
để lấy thông tin từ kernel mà không cần phải đọc nó từ/proc
Một cách nhanh hơn? Cách đó tạo ra câu trả lời trong một phần của giây, trên thực tế, nó mất 0,009 giây trên máy tính của tôi!
Bạn đang tìm kiếm một cách đòi hỏi ít gõ? Trong trường hợp đó, đặt bí danh, ví dụ:
alias tcpcount="wc -l /proc/net/tcp"
Bây giờ bạn có thể chỉ cần nhập bí danh, ví dụ như tcpcount
những gì tôi đã sử dụng trong ví dụ của mình, để có được số này.
Nhập dòng hoặc thêm nó vào .bashrc của bạn để bí danh được xác định mỗi khi bạn đăng nhập.
Đối với số lượng lớn kết nối, các kết nối sau có thể chạy nhanh hơn một chút (Và chậm hơn một chút đối với số lượng kết nối rất nhỏ):
#!/bin/bash
/usr/bin/tail -1 /proc/net/tcp | (IFS=:
read COUNT DISCARD
echo $COUNT
)
Hoặc có thể ...
awk 'END {print NR}' /proc/net/tcp
Cả hai giải pháp này đều cho rằng "wc" không tối ưu cho việc chỉ đếm số lượng dòng. Thử nghiệm của tôi cho thấy giả định này là đúng.
Công cụ đầu tiên dựa trên tiền đề rằng lệnh tail thực sự rất tốt trong việc loại bỏ dữ liệu không cần thiết, đến mức nó bù cho việc tạo một lớp vỏ phụ và thực hiện thêm công việc trên các biến môi trường. Nó thúc đẩy thực tế là các dòng trong / Proc / net / tcp đã được đánh số để loại bỏ sự cần thiết phải đếm các dòng. Giải pháp cuối cùng giả định rằng awk đủ tốt để bù đắp bất kỳ nhược điểm nào do tải một chương trình lớn hơn so với việc tạo nhiều quy trình. Giải pháp awk có thêm lợi ích là nó phù hợp với định nghĩa bí danh một dòng đơn giản (mang lại lợi ích bổ sung trong đó không có tập lệnh nào được gọi, do đó không có quá trình shell bổ sung nào được chia rẽ, mang lại lợi thế cho mili giây.)
/proc/net/tcp
. Bạn có thể thử netstat -n -t | wc -l
, nhưng tôi đoán là netstat cũng đọc từ/proc/net/tcp
netstat -nt
với khoảng 180.000 kết nối. Tôi thấy không có lý do tại sao nó phải chậm như vậy ... (đọc /proc/net/tcp
cũng rất chậm)
awk
cách tiếp cận chậm hơn so với wc
. tail
có vẻ là ngang bằng với wc
.
Sử dụng ss -s
lệnh để có được câu trả lời chi tiết.
ss -s