Відповіді:
Якщо ви просто хочете отримати номер і не потребуєте жодних деталей, ви можете прочитати дані /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" не дуже оптимальний для простого підрахунку кількості рядків. Моє тестування показує, що це припущення вірно.
Перший працює на передумові, що команда хвоста дійсно гарна в тому, щоб відкинути непотрібні дані, настільки, що вона компенсує створення додаткової підшкірної оболонки та проведення додаткової роботи над змінними середовища. Це використовує той факт, що рядки в / proc / net / tcp вже пронумеровані, щоб усунути необхідність підрахунку рядків. Остаточне рішення передбачає, що awk нараховує досить добре, щоб компенсувати будь-які недоліки через завантаження більшої програми та створення декількох процесів. Рішення awk має додаткову перевагу, що воно добре вписується в просте однолінійне визначення псевдоніму (Що дає додаткові переваги в тому, що сценарій не викликається, таким чином, додаткові оболонки не розгортаються, що дає додаткові переваги в мілі секунди.)
/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