команда history не показывает все строки в HISTFILE

Я использую свой интерфейс bond0 10 GIG для расчета ввода-вывода сетевой карты. Вы можете изменить ($5+$6)/***10000000для интерфейса 10GIG или 1000000 для интерфейса 1G; они КБ в(decimals***)*100

Ниже приведен скрипт, который вычисляет статистику ОС, т.е. CPU -RAM -DISK -IO (sda )-NIC -IO (bond0):

#!/bin/bash
echo "Please check Path for log folders"
if [ $# -eq 0 ]
then
  echo "Please input time in sec for how long you need to capture the OS Stats: 

Ex: os_stats.sh 3600 --> for one hour capture"
else
now=$(date +"%b_%d_%Y-%H:%M")
tail -f /var/log/messages > /tmp/ahsan/messagesd_$now.log 2>&1 &
tailpid1=$!
tail -f /var/log/messages > /tmp/ahsan/messages_$now.log 2>&1 &
tailpid2=$!
sar -u 1 $1 > cpu_raw.log &
sar -r 1 $1 > ram_raw.log &
iostat -x 1 $1 > diskIO_raw.log &
sar -n DEV 1 $1 > nicIO_raw.log &
sleep 5
#****************CPU STATS********************
awk '{print $1,$3,$4,$6,$9}' cpu_raw.log > cpu_parse
cat cpu_parse  | head -n -1 |tail -n +4 > cpu_tmp
echo "############ CPU STATS ###########" > os_stats.txt
awk '{ total += $3 } END { print "CPU AVG % = "total/NR }' cpu_tmp >> os_stats.txt
sort -k3 -n cpu_tmp |tail -1 | awk '{print "CPU Max % = " $3}' >> os_stats.txt
rm -rf cpu_tmp cpu_parse
#************MEM STATS*****
echo "############ RAM STATS ###########" >> os_stats.txt
cat ram_raw.log  | head -n -1 |tail -n +4 > ram_tmp
awk '{ total += $5 } END { print "RAM AVG % = "total/NR }' ram_tmp >> 
os_stats.txt
sort -k3 -n ram_tmp |tail -1 | awk '{print "RAM  Max % = " $5}' >> os_stats.txt
rm -rf ram_tmp
#************DISK I/O Stats *****
echo "############ DISK I/O STATS ###########" >> os_stats.txt
cat diskIO_raw.log | grep sda |awk '{print $12}' > diskio_tmp
awk '{ total += $1 } END { print "Disk I/O  AVG % = "total/NR }' diskio_tmp >> os_stats.txt
sort -k3 -n diskio_tmp | tail -1 | awk '{print "Disk I/O Max % = " $1}' >> os_stats.txt
rm -rf diskio_tmp
#*********NIC I/O Stats******
echo "############ NIC I/O STATS ###########" >> os_stats.txt
cat nicIO_raw.log | awk '/Average/ && /bond0/' |awk '{print "NIC I/O Avg = " sprintf ("%.8f",(($5+$6)/10000000)*100)}' >> os_stats.txt
mv os_stats.txt os_stats_$now.txt
rm -rf os_stats.txt
kill $tailpid1
kill $tailpid2
fi
1
30.10.2019, 11:15
1 ответ

Команда history выводит историю только текущего сеанса bash, тогда как файл содержит историю всех сеансов bash. Таким образом, история выполнения в сеансе может показывать меньше результатов, чем файл. Кроме того, история предназначена для поиска «последних» команд и, таким образом, ограничена по длине в соответствии с $HISTSIZE (для увеличения HISTSIZE в вашей среде, см. это обсуждение).

Чтобы обновить историю в конкретном сеансе, чтобы включить все последние команды из файла истории, запустите историю с -r или -n. Со страницы руководства:

-n :Считать строки истории, которые еще не были прочитаны из файла истории, в текущий список истории. Это строки, добавленные в файл истории с начала текущего сеанса bash.

-r :Прочитать содержимое файла истории и добавить его к текущему списку истории.):

user@machine:~> history
994  ssh server
995  history --help
996  man history
997  history

Вернулось только 997 строк...

user@machine:~> history -r

Обновить...

user@machine:~> history

994  ssh server
995  history --help
996  man history
997  history
998  history -r
999  ping 10.10.10.10
1000  ping 10.10.10.1
...
1992  ssh server02
1993  history

Теперь перечисляет 1993 команды. Сюда входит история, добавленная любыми другими терминалами, которые вы открыли и использовали, что даст вам аналогичный вывод (, привязанный к строкам $HISTSIZE ), для чтения необработанного файла (, ограниченного $HISTFILESIZE ). Остерегайтесь тонких различий... -n читает текущие строки сеанса bash, -r читает файл целиком.

2
27.01.2020, 23:40

Теги

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