Часть II • Защитные операции с использованием bash
# Заголовок
# --------------
# Однострочный вывод
# --------------
# Вывод из пяти строк
# ...
# --------------
# Метки столбцов, а затем
# восемь строк гистограммы
# ...
# --------------
#
# некоторые важные постоянные строки
UPTOP=$(tput cup 0 0)
ERAS2EOL=$(tput el)
REV=$(tput rev) # негативное изображение
OFF=$(tput sgr0) # общий сброс
SMUL=$(tput smul) # режим подчеркивания включен (пуск)
RMUL=$(tput rmul) # режим подчеркивания выключен (сброс)
COLUMNS=$(tput cols) # ширина нашего окна
# DASHES(ТИРЕ)='------------------------------------'
printf -v DASHES '%*s' $COLUMNS '-'
DASHES=${DASHES// /-}
#
# prSection – напечатать фрагмент экрана
# напечатать $1-many строк из stdin
# каждая строка представляет собой полную строку текста
# с последующим стиранием до конца строки
# разделы заканчиваются штриховой линией
#
function prSection ()
{
local -i i
for((i=0; i < ${1:-5}; i++))
do
read aline
printf '%s%s\n' "$aline" "${ERAS2EOL}"
done
printf '%s%s\n%s' "$DASHES" "${ERAS2EOL}" "${ERAS2EOL}"
}
function cleanup()
{
if [[ -n $BGPID ]]
then
kill %1
rm -f $TMPFILE
fi
} &> /dev/null
Глава 12. Форматирование и отчетность
193
trap cleanup EXIT
# запустить процесс bg
TMPFILE=$(tempfile)
{ bash tailcount.sh $1 | \
bash livebar.sh > $TMPFILE ; } &
BGPID=$!
clear
while true
do
printf '%s' "$UPTOP"
# заголовок:
echo "${REV}Rapid Cyber Ops Ch. 12 -- Security Dashboard${OFF}" \
| prSection 1
#----------------------------------------
{
printf 'connections:%4d %s\n' \
$(netstat -an | grep 'ESTAB' | wc -l) "$(date)"
} | prSection 1
#----------------------------------------
tail -5 /var/log/syslog | cut -c 1-16,45-105 | prSection 5
#----------------------------------------
{ echo "${SMUL}yymmdd${RMUL}" \
"${SMUL}hhmmss${RMUL}" \
"${SMUL}count of events${RMUL}"
tail -8 $TMPFILE
} | prSection 9
sleep 3
done
.Команда.
tput
.предоставляет.независимую.от.терминала.последовательность.
символов,.позволяющую.переместиться.в.левый.верхний.угол.экрана..Чтобы.
не.вызывать.данную.команду.при.каждом.цикле,.мы.вызываем.ее.только.один.раз.
и.сохраняем.вывод.для.повторного.использования.при.каждой.итерации..Далее.
следуют.другие.вызовы.специальных.последовательностей,.сохраненных.для.по-
вторного.использования.
.Существует.несколько.способов.создания.пунктирной.линии..Здесь.мы.выбрали.
один,.хоть.немного.и.замысловатый,.но.очень.интересный.вариант..При.этом.двух-
этапном.процессе.используется.заполнение.функцией.
printf
.всей.пустой.резуль-
тирующей.строки..Символ.
*
.указывает.функции.
printf
.использовать.для.задания.
ширины.отформатированного.поля.первую.переменную..В.результате.получается.
строка.из.49.пробелов.и.одного.знака.минус..Напечатанная.строка.сохраняется.
в.переменной,.заданной.параметром.
-v
..Вторая.часть.создания.пунктирной.линии.
заключается.в.том,.чтобы.заменить.каждый.пробел.знаком.минус.(двойной.слеш.
указывает.bash.заменить.не.только.первое,.но.и.все.остальные.вхождения).
194
Do'stlaringiz bilan baham: |