У меня есть сценарий bash, с которым мне нужна помощь:
#!/bin/bash
if [ -f "/suid.old" ]
then
find / -perm -4000 -o -perm -2000 ls > suid.old
else
find / -perm 4000 -o -perm -2000 ls > suid.new
diff suid.old suid.new > newchanges.list
fi
когда я запускаю его, появляется сообщение об ошибке: diff: suid.old: Нет такого файла или каталога.
Мой сценарий должен сказать, что если suid.old не существует, используйте команду find, чтобы создать его, или используйте команду find, чтобы делать все, что нужно, с suid.new. после обнаружения любых внесенных изменений и перенаправления на newchanges.list
пожалуйста помоги,
Удалите косую черту из имени файла в if
заявление. Таким образом, он проверяет наличие файла в корневом каталоге, но позже он создается в любом текущем каталоге.
Кроме того, ваш сценарий в основном говорит: «Если suid.old не существует, тогда сделайте разницу ".
Вам может понадобиться что-то вроде:
#!/bin/bash
if [ ! -f "suid.old" ]
then
find / -perm -4000 -o -perm -2000 ls > suid.old
fi
if [ ! -f "suid.new" ]
then
find / -perm 4000 -o -perm -2000 ls > suid.new
fi
diff suid.old suid.new > newchanges.list
mv suid.new suid.old
Здесь говорится: «Если suid.old не существует, создайте его. Если suid.new не существует, создайте его. Теперь, когда они созданы (или уже существуют), выполните сравнение».
Моя версия:
#!/bin/bash
if [ ! -f "/suid.old" ]; then # note: !
find / -perm -4000 -o -perm -2000 -ls > /suid.old # note: dash before ls; slash before file
else
find / -perm 4000 -o -perm -2000 -ls > /suid.new
diff /suid.old /suid.new > /newchanges.list
mv /suid.new /suid.old # could be handy
fi
Удалите "ls" из строк поиска. Они должны выглядеть как find / -perm -4000 -0 -perm -2000 > suid.old
способ настройки find предполагает, что ls - это аргумент пути. Так как find печатает результаты в STDOUT, простое выполнение обычного перенаправления приведет к желаемому результату.