Вместо массива используйте set -- file1 file2...
для заполнения списка параметров, затем используйтеbash
преобразование параметров с операторомQ
uote :
set -- 'a "b' c "d 'e" "f 'g "'"h' ; (set -x; printf 'cmd %s\n' "${*@Q}")
Выход:
+ printf 'cmd %s\n' ''\''a "b'\'' '\''c'\'' '\''d '\''\'\'''\''e'\'' '\''f '\''\'\'''\''g "h'\'''
cmd 'a "b' 'c' 'd '\''e' 'f '\''g "h'
Или, если мы удалим часть set -x;
, вывод станет:
cmd 'a "b' 'c' 'd '\''e' 'f '\''g "h'
Комментарий от LL3предлагает лучший способ, который не требуетset --...
:
export x; n=(a "b 'c"); x="${n[@]@Q}"
( n=($x); printf 'cmd %s\n' "${n[*]}"; )
Выход:
cmd 'a' 'b '\''c'
Еще один метод заключается в использованииbash
преобразования параметров с операторA
ssignment , (которому также требуетсяeval
):
export x;n=(a b 'c d');x="${n[@]@A}"; (eval "$x";printf '%s\n' "${n[@]}")
Вывод, показывающий, что видит printf
:
a
b
c d
Сначала убедитесь, что tcpdump установил вашу систему. Затем создайте файл сценария и добавьте следующую команду в файл сценария.
sudo tcpdump -i ethX icmp and icmp[icmptype]=icmp-echo >> ping.log
Затем добавьте этот скрипт в cronjob.
вот то, что я решил сделать, и это работает достаточно хорошо для меня.
см.man tcpdump
tcpdump -U -i eth0 icmp and icmp[icmptype]=icmp-echo -C 10 -w /root/ping_`date '+%Y%m%d_%H%M'`.log &
это сохраняется в двоичный файл журнала в соответствии с -w
с датой и временем, добавленным к имени файла журнала, когда файл журнала был запущен.
-C
ограничивает файл журнала до #мегабайт
-U
важен, потому что он вызывает сброс в файл, без него вы никогда не увидите содержимое в /root/ping.log , пока не нажмете Ctrl -C tcpdump.
Чтобы прочитать журнал проверки связи, который находится в двоичном формате, требуется tcpdump
, что легко сделать с помощью
tcpdump -r <log file> -tttt
tcpdump -r <log file> -tttt -n
Мне не удалось заставить ts
из moreutils работать через канал. Также не работало перенаправление стандартного вывода из tcpdump через >>
. Это на RHEL 7.9
Чтобы остановить этот фоновый процесс tcpdump, я выполняю ps -ef | grep tcpdump | grep root
, чтобы определить его PID, а затем kill -9 <PID>
.