Я не уверен, что вы пытаетесь здесь изменить, насколько мне известно, stat -c
работает только со статистикой GNU, а stat -c %y
выдает результат в формате 2019-03-14 14:21:32.704211521 +0200
. Вы пытаетесь удалить что-либо после двойного пробела, но его нет.
В любом случае, если вы хотите выполнить арифметические действия с меткой времени, лучше просто считать секунды с начала эпохи, т. е. -c %Y
, а не -c %y
. Потом,чтобы получить разницу (в секундах ), вы можете использовать арифметическое расширение $((.. ))
в оболочке:
$ diff=$(( "$(date +%s)" - "$(stat -c %Y "$file")" ))
$ echo $diff
86527
Чтобы получить это как часы, минуты и секунды, просто сделайте соответствующие деления и возьмите остатки:
$ s=$(( diff % 60 )); m=$(( diff / 60 % 60 )); h=$(( diff / 3600 ))
$ printf "%d:%02d:%02d\n" "$h" "$m" "$s"
24:02:07
Или используйте, например,. bc
, чтобы получить время в дробных числах дней, как показывает ответ @Pheric .
В качестве отправной точки:
/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
Затем вы добавляете это задание crontab (вы можете запускать его каждую минуту, если хотите):
#! /bin/bash
dig +short abc.com | while read address; do
if [ -z "`/sbin/iptables-save | grep "$address"`" ]; then
/sbin/iptables -A OUTPUT -d "$address" -p tcp -m tcp --dport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -d "$address" -p tcp -m tcp --dport 443 -j ACCEPT
fi
done
Это полностью не проверено, но должно работать.