#bash
#bash
Вопрос:
я только что узнал, что ifstat отображает использование сети, и приведенная ниже команда выдает то, что я хочу, на экране консоли
/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}'
я хочу вывести это в файл, чтобы я мог использовать библиотеку javascript для вывода этих значений..
но, похоже, я не могу выводить журналы в файл
/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2}' > bandwidth.txt
bandwidth.txt пусто
может кто-нибудь посоветовать, как записать использование полосы пропускания сети в файл (collectl кажется интересным, но не может понять, как получить uplaod и загрузить статистику)
Ответ №1:
awk буферизует свои выходные данные. Обычно большинство программ используют буферизацию строк, когда stdout является терминалом, но переключаются на больший размер буфера, когда stdout не является терминалом, и awk не является исключением. Если вы выполняли свою команду достаточно долго, вы в конечном итоге увидите, что размер файла увеличивается порциями размером 4096 или около того (возможно, больше или меньше) по мере заполнения буфера и его очистки.
Чтобы заставить awk очищать свой буфер после каждой строки, независимо от того, является ли стандартный вывод терминалом, добавьте fflush()
команду:
/usr/bin/ifstat -i eth0 -b -n | awk 'NR>2 {print "Download" $1 "upload" $2; fflush()}' > bandwidth.txt