Я думаю, вы хотите, чтобы строка cpu Usage
отображалась в той же строке каждый раз и сразу же после строки cpu Idle
. К добиться того, что вы можете использовать клеммы tput
иel
(clr_eol
)возможность удалить строку иcuu
(parm_up_cursor
)переместить n строк вверх. Вы можете прочитать о возможностях терминала в man terminfo
. Твой скрипт будет выглядеть так:
#!/bin/bash
PREV_CPU_USE=0
PREV_CPU_IDLE=0
PREV_EPOCH_TIME=0
# Setting the delimiter
IFS=$'\n'
counter=0
while true; do
# Getting the total CPU usage
CPU_USAGE=$(head -n 1 /proc/stat)
# Getting the Linux Epoch time in seconds
EPOCH_TIME=$(date +%s)
# Splitting the /proc/stat output
IFS=" " read -ra USAGE_ARRAY <<< "$CPU_USAGE"
# Calculating the used CPU time, CPU idle time and CPU total time
CPU_USE=$((USAGE_ARRAY[1] + USAGE_ARRAY[2] + USAGE_ARRAY[3] + USAGE_ARRAY[6] + USAGE_ARRAY[7] + USAGE_ARRAY[8] ))
CPU_IDLE=$((USAGE_ARRAY[4] + USAGE_ARRAY[5]))
# Calculating the differences
DIFF_USE=$((CPU_USE - PREV_CPU_USE))
DIFF_IDLE=$((CPU_IDLE - PREV_CPU_IDLE))
DIFF_TOTAL=$((DIFF_USE + DIFF_IDLE))
DIFF_TIME=$((EPOCH_TIME - PREV_EPOCH_TIME))
printf "\r%s%s Usage: %d (counter = %d)\n" "$(tput el)" "${USAGE_ARRAY[0]}" "$((DIFF_USE*100/(DIFF_TOTAL*DIFF_TIME)))" "$counter"
printf "\r%s%s Idle: %d (counter = %d)" "$(tput el)" "${USAGE_ARRAY[0]}" "$((DIFF_IDLE*100/(DIFF_TOTAL*DIFF_TIME)))" "$counter"
counter=$((counter + 1))
tput cuu 1
# Assigning the old values to the PREV_* values
PREV_CPU_USE=$CPU_USE
PREV_CPU_IDLE=$CPU_IDLE
PREV_EPOCH_TIME=$EPOCH_TIME
# Sleep for one second
sleep 1
done
Я добавил дополнительную counter
переменную для целей отладки. Это увеличивается после каждой печати, чтобы сообщить пользователю, что старая строка заменяется новой строкой на экране.
Я также заменил ваши звонки на echo
на printf
, так как это удобнее.
iptables
может блокировать по именам хостов, изman iptables
:
-s, --source address Source specification. Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP address.
Причина, по которой это не работает для вас, заключается в том, что ваш iptables
использует локально настроенный преобразователь для определения IP-адресов Facebook, в то время как Firefox получает адреса от другого провайдера DNS. Поскольку Facebook использует облако, его IP-адреса различаются между провайдерами DNS и географическими местоположениями, что в конечном итоге означает, что iptables
решение вряд ли будет работать.
Вместо этого вы можете использовать групповые политики для Firefox, чтобы блокировать веб-сайты, например.https://github.com/mozilla/policy-templates/blob/master/README.md#websitefilterhttps://github.com/mozilla/policy-templates/releases
. проверьте этот ответ здесь:https://support.mozilla.org/en-US/questions/1260799