使用 find 查找别名

使用 find 查找别名

在没有locate安装的小型系统上,别名如何获得与locate相同的结果?

我可以想象find可以产生相同的输出,因此别名可能看起来像

alias locate="find / -name"

但这似乎与locate 的工作原理不同:

locate test

只会查找具有该名称的文件确切地在locate时调用test将找到包含该文件的所有文件。

解决方法

使用:

locate *test*

答案1

为了改善对查找速度的巨大影响,您可以模拟类似定位之类的东西

alias locate="if [ ! -e /tmp/locate.db -a ! -e /tmp/locate.lockdb ]
then touch /tmp/locate.lockdb
trap \"rm /tmp/locate.lockdb; rm /tmp/locate.db; exit\" SIGHUP SIGINT SIGTERM
find /|tee /tmp/locate.db
chmod 666 /tmp/locate.db
rm /tmp/locate.lockdb
elif [ -e /tmp/locate.lockdb ]
then find /
else cat /tmp/locate.db
fi|grep "

当然是权限问题!最好为数据库编写一些 setuid 命令,teecat以超级用户模式和更好的位置写入数据库,但是/tmp

locate.db在大多数单用户或少数用户系统上,一个廉价的替代方案是在靠近 的地方编写每个用户$HOME

另一个不错的别名是能够更新/查找。嗯,最后我认为这个别名比原来的定位更好;)

alias relocate="if [ ! -e /tmp/locate.lockdb ]
then rm /tmp/locate.db
fi
locate "

编辑 实际上,我认为重新定位应该像上面的定位别名一样使用。如果您使用不带参数的重定位,则会出现错误。这个想法是relocate "no file to search for"如果您不想搜索而只想更新数据库时使用。

好的,该查找也必须被设置。但随后你可以扔掉你的定位包。grep应传递参数以sed引用.点。

菜鸟注意事项: 当我在这里谈论 setuid 时不要在类似工具上设置 SETUID 标志 teecat或者find。这将是您系统的安全漏洞!我的意思是为这些在 setuid 模式下工作并以受限方式工作的简单命令编写安全的替代方案,只是为了为此别名提供合适的工具。

答案2

function locate_f()
{
        find / -path "*$1*" //Edit:path (as Gilles stated)
}
alias locate=locate_f

答案3

尝试

alias locate="find / | grep "

这应该与locate完全一样 - 但当然它会慢得多

答案4

1)为所有用户全局添加别名

echo 'alias locate="grep $1 /var/locate/locate.db"' >> /etc/bashrc

你基本上可以将它指向一个 shell 脚本,你可以在其中进行更直观的参数选择...如果你只是在寻找非常简单的搜索,这应该足够了。

2) 添加 Cron Job 每天运行。

/etc/cron.daily
#!bin/bash
if [[ ! -d /var/locate ]]; then
     mkdir /var/locate
fi
locatedb=/var/locate/locate.db
rm -f $locatedb
for DIRS in `ls /|grep -v "proc"`
do
   find /$DIRS -type f >> $locatedb 2>&1 /dev/null
done

您将获得与 mlocate 相同的结果,无需安装 mlocate...我刚刚在 CentOS 上进行了测试...结果几乎完全相同。

相关内容