エイリアスをインストールせずにlocate
小規模システムで検索するのと同じ結果を得るにはどうすればよいですか?
find
同じ出力を生成できると想像できるため、エイリアスは次のようになります。
alias locate="find / -name"
しかし、これは検索と同じように機能しないようです。
locate test
その名前のファイルのみが検索されます。正確に検索時に呼び出されると、そのファイルを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コマンドを作成し、tee
スーパーcat
ユーザーモードとより良い場所でデータベースに書き込む方が良いでしょう/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フラグを設定しないでください tee
、cat
またはfind
。これはシステムのセキュリティ抜け穴になります!私の言葉は、このエイリアスに適したツールを提供するために、setuidモードで制限された方法で動作するこれらの単純なコマンドの安全な代替策を書くことです。
答え2
function locate_f()
{
find / -path "*$1*" //Edit:path (as Gilles stated)
}
alias locate=locate_f
答え3
努力する
alias locate="find / | grep "
これは検索とまったく同じでなければなりませんが、もちろん速度ははるかに遅くなります。
答え4
1)すべてのユーザーにグローバルにエイリアスを追加します。
echo 'alias locate="grep $1 /var/locate/locate.db"' >> /etc/bashrc
デフォルトでは、より直感的なパラメータ選択を可能にするシェルスクリプトを指すことができます。非常に簡単な検索を探しているなら、これで十分です。
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でテストしました。結果はほぼ同じです。