Как я обрабатываю вывод ifconfig для определения моей скорости канала?

Когда Вы работаете terminator -e ranger, эмулятор терминала запускает программу ranger непосредственно в нем. Когда Вы работаете terminator и затем запустите ranger в оболочке эмулятор терминала выполняет оболочку, которая работает ranger. Основное различие - то, что интерактивный файл инициализации Вашей оболочки получен (например. ~/.bashrc для удара, ~/.zshrc для zsh). Если Ваш файл дистанционного управления оболочки установит некоторые переменные среды, то Вы получите различные результаты в зависимости от того, была ли программа запущена через интерактивную оболочку или нет. Здесь, похоже, что Вы устанавливаете EDITOR или VISUAL в Вашем .bashrc. Если Вы не делаете, Вы получаете значение по умолчанию своей системы, которое является нано.

Фиксация должна установить переменную сред, где они должны быть установлены, т.е. в Вашем файле инициализации сессии. На большинстве установок это ~/.profile. Не устанавливайте переменные среды в .bashrc, .zshrc и т.п. Посмотрите
Какие файлы настройки должны использоваться для установки переменных среды с ударом?
Различие между .bashrc и .bash_profile
Среда установки Correctly

5
05.08.2013, 12:53
2 ответа

скорость канала

Я не думаю, что Вы действительно ищете скорость канала, это - скорость выделенного соединения Вашего соединения. Если Вы имеете ethtool установленный (в repos) можно использовать эту команду для получения скорости канала:

$ sudo ethtool eth0 | grep -i speed
    Speed: 100Mb/s

пропускная способность (ядро)

Вы хотите видеть свою скорость пропускной способности. Сколько из общей скорости Вы используете в течение данного количества времени. Существует несколько способов считать байты eth0 интерфейс:

$ cat /sys/class/net/eth0/statistics/rx_bytes 
3431530366

Существует также /proc/net/dev, то, которому я верю, является структурой ядра, которая обеспечивает данные для ifconfig:

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo:629956414  572909    0    0    0     0          0         0 629956414  572909    0    0    0     0       0          0
  eth0:3431888253 329701689    0    0    0     0          0    359127 831203319 353144288    0    0    0     0       0          0
  sit0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0

измерение инструментов использования

Лучше все еще должен был бы использовать фактический инструмент для измерения Вашего использования пропускной способности. Здесь существует много опций:

  1. используйте wget/curl

    Они довольно просты. Выберите большой файл, чтобы загрузить и видеть статистику, о которой сообщает любой инструмент после того, как это будет завершено.

    $ wget --output-document=/dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
    -or-
    
    $ curl -O /dev/null http://speedtest.wdc01.softlayer.com/downloads/test500.zip
    
  2. используйте cli контролирующий инструмент

    В этой категории существуют многочисленные инструменты. Вот пара для запущения Вас.

  3. используйте speedtest-cli

    Это использует почтенный веб-сайт speedtest.net из командной строки.

    $ ./speedtest-cli
    Retrieving speedtest.net configuration...
    Retrieving speedtest.net server list...
    Testing from Comcast Cable (x.x.x.x)...
    Selecting best server based on ping...
    Hosted by FiberCloud, Inc (Seattle, WA) [12.03 km]: 44.028 ms
    Testing download speed........................................
    Download: 32.29 Mbit/s
    Testing upload speed..................................................
    Upload: 5.18 Mbit/s
    
  4. используйте iperf

    Для этого Вы установите свой собственный сервер и клиент и затем измерите уровень пропускной способности между двумя из Ваших компьютеров. Это - лучшее в том смысле, что Вы получите больше точной картины своего компьютера/производительности сети, чем в зависимости от производительности определенной интернет-цели.

    на сервере:

    $ iperf -s
    

    на клиенте:

    $ iperf -c myserver.mydom
     ------------------------------------------------------------
    Client connecting to 192.168.1.1, TCP port 5001
    TCP window size: 16.0 KByte (default)
    ------------------------------------------------------------
     [  3] local 192.168.1.3 port 52143 connected with 192.168.1.1 port 5001
     [ ID] Interval       Transfer     Bandwidth
     [  3]  0.0-10.0 sec    113 MBytes  94.7 Mbits/sec
    

Ссылки

8
27.01.2020, 20:34
  • 1
    Другой способ получить пропускную способность состоит в том, чтобы проанализировать ip -s link show eth0 или использовать iftop. –  jofel 05.08.2013, 15:00
  • 2
    Необходимо смочь считать пропускную способность ссылки непосредственно из sysfs (без ethtool), это находится в /sys/class/net/<interface>/speed - возможно зависящий от Вашей версии ядра и как Вы настроили его. Единицы являются Мбит/с. –  Toby Speight 05.02.2018, 17:34

Я действительно согласен с вашим вопросом и ответами, таким образом, я действительно могу сделать это в одной строке:

m1=`cat /sys/class/net/eth0/statistics/tx_bytes` ; sleep 10s ; m2=`cat /sys/class/net/eth0/statistics/rx_bytes` ; echo $((($m2-$m1)/10240))

и он принтет довольно хорошо.

в более сложном порядке:

#!/bin/bash                                                                          

intervalo=3                                                                          
info="/sys/class/net/"                                                               
cd $info                                                                             
for interface in eth*                                                                
do                                                                                   
  rx1=`cat $info$interface/statistics/rx_bytes`                                      
  tx1=`cat $info$interface/statistics/tx_bytes`                                      
 `sleep $((intervalo))s`                                                            
  rx2=`cat $info$interface/statistics/rx_bytes`                                      
  tx2=`cat $info$interface/statistics/tx_bytes`
  echo $interface
  echo ----
  echo RX: $((($rx2-$rx1)/($intervalo*1024))) Kbps
  echo TX: $((($tx2-$tx1)/($intervalo*1024))) Kbps
done

, который работает нормально, но может быть улучшен с использованием массивов для сохранения каждого результата интерфейса, поэтому ему нужно было бы только сделать сон для всех интерфейсов, а не один из них.

3
27.01.2020, 20:34

Теги

Похожие вопросы