как ко времени определенная часть исполняемого файла?

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

  #!/bin/sh
    IPTABLES="/sbin/iptables"
    BLOCKEDIPS_XS=/root/iptables/iptables/blockxs.zone
$IPTABLES -F
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES --delete-chain
$IPTABLES -F FORWARD
$IPTABLES -F -t mangle
$IPTABLES -F -t nat
$IPTABLES -X
timer start
/bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip
do
    # Append everything to droplist
    $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs "
    $IPTABLES -A droplist -i eth0 -s $ip -j DROP
done <"$BLOCKEDIPS_XS"
timer stops, shows elapsed time
3
задан 16 May 2018 в 16:21

3 ответа

A time это воздействует на оперативные группы штаба и SECONDS переменная является оба функциями удара, не в sh. С sh можно получить метки времени в двух точках с помощью date команда, и затем получает различие. date +%s даст время в секундах с эпохи.

# timer start
start=$(date +%s)
/bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip
do
    # Append everything to droplist
    $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs "
    $IPTABLES -A droplist -i eth0 -s $ip -j DROP
done <"$BLOCKEDIPS_XS"
# timer stops, shows elapsed time
echo $(( $(date +%s) - start ))
3
ответ дан 1 December 2019 в 13:08

Вы можете часть времени сценария удара при помощи группировки команды

#!/bin/bash

echo "foo"
sleep 1

time { 
sleep 2
echo "bar"
sleep 3
}

sleep 1
echo "baz"

Напр.

$ ./somescript.sh 
foo
bar

real    0m5.006s
user    0m0.005s
sys 0m0.001s
baz

Группировка с подоболочкой (т.е. круглые скобки вместо фигурных скобок) должна также работать.

5
ответ дан 1 December 2019 в 13:08

Самый легкий путь состоит в том, чтобы поместить time команда перед командой Вы работаете. Например:

$ time locate display-auto
/etc/cron.d/display-auto-brightness
/home/rick/Downloads/display-auto-brightness
/home/rick/Pictures/display-auto-brightness conky.png
/home/rick/Pictures/display-auto-brightness systray.png
/home/rick/Pictures/display-auto-brightness-config 1.png
/home/rick/Pictures/ps display-auto-brightness.png
/lib/systemd/system-sleep/display-auto-brightness
/mnt/e/etc/cron.d/display-auto-brightness
/mnt/e/lib/systemd/system-sleep/display-auto-brightness
/mnt/e/usr/local/bin/display-auto-brightness
/usr/local/bin/display-auto-brightness

real    0m0.826s
user    0m0.803s
sys     0m0.016s

Мы используем locate управляйте для нахождения всех имен файлов с display-auto на имена. Просто вставьте time команда перед командой.


Получение времени для части сценария

Можно использовать $SECONDS переменная в Вашем сценарии для получения времени для части его. Например:

SECONDS=0
/bin/egrep -v "^#|^$" $BLOCKEDIPS_XS | while IFS= read -r ip
do
    # Append everything to droplist
    $IPTABLES -A droplist -i eth0 -s $ip -j LOG --log-prefix " Drop IP List blockxs "
    $IPTABLES -A droplist -i eth0 -s $ip -j DROP
done <"$BLOCKEDIPS_XS"
timer stops, shows elapsed time
BlockTime=$SECONDS
echo "Total time to block IPs: $BlockTime Seconds"

В этом коде SECONDS обнулен и затем получен после того, как долгий процесс происходит.

2
ответ дан 1 December 2019 в 13:08

Другие вопросы по тегам:

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