我有一个需要帮助的 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
请帮忙,
答案1
从语句中的文件名中删除斜线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 不存在,则创建它。现在它们已经创建(或已经存在)并进行比较。”
答案2
从 find 行中删除“ls”。它们应该看起来像find / -perm -4000 -0 -perm -2000 > suid.old
按照您的设置方式,find 认为 ls 是路径参数。由于 find 将结果打印到 STDOUT,因此只需执行常规重定向即可获得所需的输出。
答案3
我的版本:
#!/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