ipset имеет встроенный -счетчик ссылок. Таким образом, всякий раз, когда на него ссылается iptables , его счетчик ссылок увеличивается. Насколько я знаю, только ipset метанабор list:set
и iptables ссылаются на ipset . Если вы не используете list:set
или не изменяете его, вы можете напрямую запросить ipset(с помощью ipset list
), чтобы узнать, ссылались ли на него iptables .
Пример:
# ipset create sshd hash:ip
# ipset list
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 0
Number of entries: 0
Members:
# iptables -A INPUT -m set --match-set sshd src -j DROP
# ipset list sshd
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 1
Number of entries: 0
Members:
Увеличился счетчик ссылок. Добавление новой команды iptables
с использованием этого набора увеличит его до 2. и т. д.
Выходные данные в формате XML могут помочь сценариям с правильными инструментами. Например:
# references=$(ipset -terse -output xml list | xmlstarlet sel -t -v '/ipsets/ipset[@name="sshd"]/header/references')
# echo $references
2
"^[0-9][0-9][0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]\ [0-9][0-9]\:[0-9][0-9]\:[0-9][0-9]$"
кажется, работает как регулярное выражение grep для моей цели, но может быть более чистый способ
как указал танасисп, это не улавливает невозможные даты, поэтому тест с датой -d
if [[ ! $(date -d $(echo "2015:12:12"|sed -e 's!:!/!g')) ]] &>/dev/null ; then echo "not right"; fi
, который терпит неудачу по-разному, так как он, возможно, также принимает несколько раз :, если передается "12 :04 :15", он принимает как действительный... что привело меня к моему окончательному решению для проверки даты:
if [[ ! $(date -d $(echo "12:04:15"|sed -e 's!:!/!g')) ]] || [[ ! "12:04:15" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then echo "not right"; fi
, что в контексте дает:
mmedia=thispic.jpg
eexifdata=($(exiftool -f -n -p '$GPSLatitude,$GPSLongitude,$CreateDate,$ModifyDate' $mmedia 2>/dev/null|sed -e 's/,/ /g' -e 's!/!:!g'))
if [[ ! $(date -d $(echo "${eexifdata[2]}"|sed -e 's!:!/!g')) ]] || [[ ! "${eexifdata[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then # if date format is not acceptable
eexifdata[2]="${eexifdata[3]}";eexifdata[3]="${eexifdata[4]}"; # then swap one position (exif is weird sometimes)
if [[ ! $(date -d $(echo "${eexifdata[2]}"|sed -e 's!:!/!g')) ]] || [[ ! "${eexifdata[2]}" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]] &>/dev/null ; then # if issue persists
eexifdata[2]="$(date +%Y:%m:%d)" # set current date
eexifdata[3]="$(date +%H:%M:%S)" # set current time
fi
fi