find 程序是一个非常强大的系统管理工具。 updatedb 脚本以及安装在系统上的各种 /etc/crontab 脚本都使用该命令。 由于某些开关的语法复杂,因此该命令需要进行一些学习。 您需要很好地了解它,才能在后台或通过脚本或 crontab 运行 find 而无需用户交互。 以这种方式运行是必要的,因为在大型系统上,find 可能需要一些时间才能完成执行。
要从命令行使用 find,请输入
find / -nouser
这是一个非常简单的例子。 find 从根 (/) 目录开始,并递归搜索所有子目录,查找不属于 /etc/passwd 文件中列出的任何用户的用户的文件。 此搜索可能需要很长时间才能完成,因此您可能希望在后台运行该命令
find / -nouser > $HOME/myfile &
此命令与上面的命令类似,但会将输出重定向到您主目录中的 myfile,并在后台执行。 如果您以 root 以外的任何用户身份在整个目录树上运行 find,则会看到您没有权限读取的目录的“权限被拒绝”错误。 如果您认为您会忘记读取该文件,您可以给出以下单行命令(它将在此处换行到列宽)
find / -nouser > $HOME/myfile; if [-s $HOME/myfile]; then /bin/mail -s "Unknown UIDs" root < $HOME/myfile; fi; rm $HOME/myfile &
这一系列命令添加了一些小细节。 在创建 myfile 之后,该命令然后检查 myfile 是否存在且不为空(零长度)。 如果它包含数据(非零长度),则该文件将通过邮件发送给 root,主题行为“Unknown UIDs”。 然后fi结束 “if-then” 条件,并且无论大小如何,该文件都会被删除。 请注意,我使用;(分号) 字符来分隔命令。 如果您将其放在命令行中,则必须将其全部放在一行中。 如果您将其放在脚本中,则可以使用回车代替;并且您不需要包含&(与号)。 调用脚本时将使用与号。 此外,您需要在脚本中包含以下行(作为第一行)
#!/bin/sh
然后,要使文件可执行,请输入chmod 755, 并且您可以从 cron 或命令行调用该脚本。 或者,只需在格式正确的 crontab 行中包含上面的 find 语句,它将定期自动执行并在存在不属于已识别用户的任何文件时通过邮件通知您。