Есть такая команда:
maldet -b --scan-all /home?/?/public_?
Мне было непонятно, зачем нужны вопросительные знаки, особенно один между двумя путями. Поэтому я так и сделал man maldet
и прочитал:
-a, --scan-all ПУТЬ
Сканировать все файлы по указанному пути (по умолчанию: /home, подстановочный знак: ?), например: maldet -a /home/?/public_html
Мой вопрос:
Зачем нам нужен дополнительный аргумент ?
между /home?
и public_?
?
Альтернативная версия этого вопроса могла бы быть такой: «если сочетание /home?
и public_?
означает «найти все вхождения public_
под /home
, то зачем тогда нам нужно дополнительное ?
между ними?».
решение1
Мне не удалось отследить источник команды scan
, которую в конечном итоге вызывает maldet, но maldet дословно передает указанный путь этой scan
команде, поэтому я предполагаю, что что-то дальше ?
само обрабатывает их как подстановочные знаки.
Предполагаемая цель подстановочных знаков в этом примере — собрать такие пути, как:
/home/user1/public_html
/home/user2/public_ftp
но нет:
/home/public_html
... другими словами, требовать, чтобы элемент пути существовал между /home
и /public_html
или /public_anything
.
Обязательно экранируйте или заключите в кавычки эти подстановочные знаки путей к maldet
команде, потому что если у вас есть какие-либо пути в форме: , например:/home/(single-character)/public_(single-character)
/home/a/public_a
то ваша оболочка расширится до этого (или любого из этих соответствующих) путей, вместо того, чтобы передавать его ?
в подстановочный код maldet. Вы можете ошибочно получить "удачу", используя эти пути без кавычек, пока не существует односимвольных путей, потому что если нет соответствующих путей (видимых оболочкой), она передаст строку, ?
содержащую -, в команду maldet. Как только будут найдены соответствующие пути, оболочка расширит его ?
до этих путей, и maldet больше не увидит (ваши) подстановочные знаки.