使用 find 和 diff 命令帮助 bash 脚本

使用 find 和 diff 命令帮助 bash 脚本

我有一个需要帮助的 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

相关内容