Если вы хотите удалить TCP-записи conntrack с IP-адресом источника $1
(, первым параметром вашего скрипта ), исходным портом назначения 80 и состоянием ESTABLISHED
, это должно быть просто :
conntrack -D -s "$1" -p tcp --dport 80 --state ESTABLISHED
Помимо уже упомянутых проблем, ваш подход будет соответствовать строкам, которые также имеют dport=8080
, или строкам, которые имеют dport=80
в ответе -на dst. И $1
в "--orig-src " $1
будет первым полем в строке, расширенной с помощью awk
, а не первым аргументом скрипта. Кроме того, grep 10.1.1.4
будет соответствовать 10.1.1.40
и 10.101.4.5
даже с grep -w
(.
, поскольку оператор регулярного выражения соответствует любому символу и не является символом слова ).
Если бы conntrack
не имел возможности фильтровать записи сам по себе, вы бы предпочли сделать что-то вроде:
conntrack -L | SRC=$1 awk '
$1 == "tcp" && \
$4 == "ESTABLISHED" && \
$5 == "src=" ENVIRON["SRC"] && \
$8 == "dport=80" {
dst = substr($6, 5)
sport = substr($7, 7)
system("conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport)
}'
Или чтобы избежать выполнения одной команды sh
для каждой записи для удаления (в дополнение к одной команде conntrack
):
conntrack -L | SRC=$1 awk '
$1 == "tcp" && \
$4 == "ESTABLISHED" && \
$5 == "src=" ENVIRON["SRC"] && \
$8 == "dport=80" {
dst = substr($6, 5)
sport = substr($7, 7)
print "conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport
}' | sh
Для утилиты cp
нет обязательных опций. Если в руководстве перечислены параметры в квадратных скобках в синопсисе (, например [OPTIONS]
в руководстве GNU cp
или [-afipv]
в руководстве OpenBSD cp
), то они являются необязательными . ].
Опция-u
(--update
)является нестандартной опцией -, которую реализует GNU cp
. Если вы решите использовать эту опцию с GNU cp
, копия будет сделана только в том случае, если исходный файл новее целевого файла или если целевой файл отсутствует. Без опции -u
копирование исходного файла будет всегда .