Intereting Posts
Компиляция клиента OpenSSH или Dropbear для Android Запретить показ сообщения о отметке времени при запуске «tar xzf» Что делает «w» с урандом? Как resize разделов ext2, которые я сократил, без e2fsck -f с жалобами на суперблок или таблицу разделов Как зарезервированные блоки GDT используются после изменения размера сети в файловой системе ext3 Как восстановить поврежденный резервный файл с помощью Duplicity? Используйте значения rEFInd live usb, чтобы исправить Grub2 Какие препараты следует выполнять перед переустановкой окон? Использование SED для получения значений из строки Expect Script: максимальное количество аргументов командной строки Не удается запустить удаленный скрипт через скрипт bash, но может через терминал ssh config auto выполнить удаленную команду Как удалить последнюю запятую каждой строки csv с помощью linux Как я мог перевернуть содержимое двоичного файла с помощью команд bash Как исправить мою fstab

Как определить текущее использование сети?

Я хочу показать текущее использование сети (использование полосы пропускания) одного интерфейса окна Debian на веб-сайте. Он не должен быть очень сложным или точным, просто простое число, такое как «52 Мбит / с».

Типичные мониторы пропускной способности сети, такие как iftop дают мне возможности просто извлечь такое значение.

Как я могу получить его лучше?

Например, я думаю, что я могу разобрать /proc/net/dev каждые несколько минут. Не уверен, что это действительно лучший способ сделать это.

Я думаю, что ifstat поможет вам:

 [root @ localhost ~] # ifstat -i eth0 -q 1 1
        eth0
  KB / s в KB / s out
  3390,26 69,69

Лучший способ сделать это просто, вероятно, для разбора /proc/net/dev (следует предупредить, что /proc не переносится). Вот сценарий bash который я быстро собрал, чтобы он мог вычислить его:

 #!/bin/bash _die() { printf '%s\n' "$@" exit 1 } _interface=$1 [[ ${_interface} ]] || _die 'Usage: ifspeed [interface]' grep -q "^ *${_interface}:" /proc/net/dev || _die "Interface ${_interface} not found in /proc/net/dev" _interface_bytes_in_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev) _interface_bytes_out_old=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev) while sleep 1; do _interface_bytes_in_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { sub(/^.*:/, "") ; print $1 } else { print $2 } }' /proc/net/dev) _interface_bytes_out_new=$(awk "/^ *${_interface}:/"' { if ($1 ~ /.*:[0-9][0-9]*/) { print $9 } else { print $10 } }' /proc/net/dev) printf '%s: %s\n' 'Bytes in/sec' "$(( _interface_bytes_in_new - _interface_bytes_in_old ))" \ 'Bytes out/sec' "$(( _interface_bytes_out_new - _interface_bytes_out_old ))" # printf '%s: %s\n' 'Kilobytes in/sec' "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 1024 ))" \ # 'Kilobytes out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 1024 ))" # printf '%s: %s\n' 'Megabits in/sec' "$(( ( _interface_bytes_in_new - _interface_bytes_in_old ) / 131072 ))" \ # 'Megabits out/sec' "$(( ( _interface_bytes_out_new - _interface_bytes_out_old ) / 131072 ))" _interface_bytes_in_old=${_interface_bytes_in_new} _interface_bytes_out_old=${_interface_bytes_out_new} done 

Имейте в виду, что sleep не учитывает количество времени, которое требуется для выполнения операций в цикле while, поэтому это (очень немного) неточно. На моей 600mhz медной линии цикл занимает 0.011 секунд – незначительная неточность для большинства целей. Помните также, что при использовании (закомментированных) килобайтных / мегабитных выходов bash понимает только целую арифметику.

Существуют мониторы сетевого трафика, такие как vnstat, которые хранят ежемесячные записи вашего трафика или slurm, которые принимают его значения непосредственно из тех, которые хранятся в ядре. Он доступен в большинстве дистрибутивов.

Вот что я вижу, когда я запускаю slurm -i ra0 :

введите описание изображения здесь