ファイルは削除できませんが、親ディレクトリは削除できます。

ファイルは削除できませんが、親ディレクトリは削除できます。

デフォルトでは、次のファイルを削除しようとします。

/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またはfindstatまたは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.*"

関連情報