Кроме того, как ориентир, вот то, как сбросить ВСЕ текущие правила iptables:
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables=/sbin/iptables
$iptables -F
$iptables -X
$iptables -t nat -F
$iptables -t nat -X
$iptables -t mangle -F
$iptables -t mangle -X
$iptables -P INPUT ACCEPT
$iptables -P FORWARD ACCEPT
$iptables -P OUTPUT ACCEPT
Нет никакой опции просто возвратить одно поле. Однако опция -P
гарантии, что все поля печатаются на той же строке (без этой опции, если первый столбец слишком широк, другие смещаются к следующей строке). Можно затем использовать awk для печати требуемого столбца от второй строки.
size=$(df -Pk ~ | awk 'NR==2 {print $2}') # in kB
Для установки всех переменных сразу можно заставить awk распечатать отрывок оболочки.
eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')"
Несколько экзотических систем позволяют пробелы в маркировках файловой системы, которые делают надежный парсинг df
невозможный вывод. К сожалению, нет никакого другого портативного пути.
На Linux только, можно использовать stat
команда. Это немного неуклюже, размеры выражаются в блоках.
block_size=$(stat -f -c %S ~)
total_blocks=$(stat -f -c %b ~)
free_blocks=$(stat -f -c %f ~)
size=$((block_size * total_blocks)) # in bytes
available=$((block_size * free_blocks))
used=$((size - available))