デフォルトでは、次のファイルを削除しようとします。
/var/lib/mysql/db/nomNomina2.*
検索を使用して検索すると、次の結果が表示されます。
/var/lib/mysql/db/nomNomina2.MYD
/var/lib/mysql/db/nomNomina2.MYI
/var/lib/mysql/db/nomNomina2.frm
しかし、私は努力します。
$ rm -fv /var/lib/mysql/db/nomNomina2.frm
出力は出ませんが、検索を使用してもファイルは表示され続けます。
同じ場所で同じファイル名を持つファイルを作成および削除できますが、検索を使用するとまだ表示され、同じ名前の別のテーブルを作成することはできません。
この問題の原因は何ですか?ファイルシステムの混乱?修正するには?
答え1
locate
はい信頼できないシステムに存在するファイルに関するリアルタイムの最新情報。情報はデータベースにキャッシュされます。
また、次のような有名なセリフを検討してください。
これは動作しません!キャッシュを責めるべきですか?
ボックスにどのファイル/ディレクトリがあるかについての実際の最新情報今、ls
またはfind
、stat
またはtest -e filename && echo it is there
、さらに使用してくださいprintf %s\\n *
。ほぼ何もないExceptlocate
ファイルシステムに関する最新情報を提供します。
LESS=+/BUGS man locate
(マイシステム)次のセクションも参照してください。
BUGS The locate program may fail to list some files that are present, or may list files that have been removed from the system. This is because locate only reports files that are present in the database...
を実行できますが、updatedb
正直に言うと、ファイルがどこにあるのかを正確に知っていて、それを使ってlocate
見つけることができます。 locate
方法を教えてください。そのパスにファイルが存在するかどうかはわかりません。ファイルのパスをすでに知っている場合は必要ありませんかlocate
?
これ目的検索とは「高速ファイル名の検索」を意味し、必ずしも正確または信頼できるわけではありません。
注:「使用しないでください」と言うわけではありませんlocate
。システム内のファイルがどこにあるかわからない場合に便利です。ただし、パス名を取得した後はlocate
その目的に合うので、次のようにする必要があります。その他確認/検証などのためのツールあなたが見つけたファイル。
答え2
検索コマンドは、ディスク上のファイルを検索せずにデータベースのファイルパスを検索します。データベースは、システム上のファイルとそのパスに関する情報を含むファイルです。
したがって、「locate」コマンドの1つの制限は、他のユーティリティ「updatedb」によって更新できるデータベースへの依存性です。したがって、「locate」コマンドを使用して信頼できる最新の結果を得るには、そのコマンドが機能するデータベースを定期的に更新する必要があります。
したがって、ファイルを削除したら、#find コマンドを使用してリアルタイムでそのファイルを検索し、そのファイルが存在するかどうかを確認する必要があります。 #find /var/lib/mysql/db/ -iname "nomNomina2.*"