数年の間、私の$HOME
ディレクトリに多くの隠しファイルとディレクトリが現れました。
不要なものを継続的に削除したいと思います。
どのアプリケーションがこれらの隠しファイルとディレクトリを作成したかを知るにはどうすればよいですか。
非表示のファイルとディレクトリを削除しても安全であり、重要なものは何も失われず、それらに依存するものは動作を停止しないことをどのように確認できますか?
数年の間、私の$HOME
ディレクトリに多くの隠しファイルとディレクトリが現れました。
不要なものを継続的に削除したいと思います。
どのアプリケーションがこれらの隠しファイルとディレクトリを作成したかを知るにはどうすればよいですか。
非表示のファイルとディレクトリを削除しても安全であり、重要なものは何も失われず、それらに依存するものは動作を停止しないことをどのように確認できますか?
回答:
一時的にそれらを置き換えることができます。
cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
sh -c 'touch -a -- "$@"
mv -- "$@" ~/.trash
' -- {} +
これにより、$HOME
ディレクトリ内のすべてのファイルが検索されます-子ディレクトリに再帰することなく-1年間アクセスされていません。すべてのユーザーのアクセス時間を今すぐに更新し、すべてのユーザーをという名前のディレクトリに移動します.trash
。実行してから古いファイルの削除を開始するまでに問題が発生した場合は~/.trash
、それらの一部を元に戻して、ごみ箱に入れたファイルが原因かどうかを確認できます。
relatime
代わりに使用するすべての正気なfs 。from man mount
::relatime
変更または変更時間に関連するinodeアクセス時間を更新します。アクセス時刻は、前のアクセス時刻が現在の変更時刻または変更時刻よりも早い場合にのみ更新されます。(に似ていますが、ファイルが最後に変更されてから読み取られたかどうかを知る必要がある他のアプリケーションをnoatime
壊しmutt
たりしません。)とにかく、modtimeを使用-m
し-mtime
て作業します。またはあなたが好きなもの。
システムのルートである場合、監査カーネル機能を使用して、誰/いつ/何がアクセス/作成/変更されたファイルに関する最大情報を取得できます。debianフレーバーの例については、このチュートリアルを参照してください
ルートアクセスがない場合は、crontabまたは無限ループ+スリープのスクリプトを使用して、homedirでlsofおよびgrepファイルを実行できます。lsofのマンページを参照してください。ただし、lsofを起動した時点でファイル記述子が開かれているアプリケーションのみが表示されます。アプリケーションがファイルを開いて編集し、閉じた場合、lsofにこの変更は表示されません。
このようなワンライナーは仕事をする必要があります: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'
別の方法は、inotify カーネルAPIを使用して、ファイルにアクセスするタイミングをチェックすることです。残念ながら、これは非同期システムであり、「どのアプリ」、「正確なタイミング」、「どのユーザー」などの詳細はありません。「このファイルは変更/アクセスされました...」に関するコールバックのみがあります。一部のアプリケーション(Inotify、FAM、gamin)は、APIへの簡単なアクセスを提供します
inotify
トリガーに使用しようとしましたlsof
。システムは、このアイデアが機能するには速すぎます:lsofを実行する前に、プロセスが頻繁になくなったり、ファイルを閉じたりします。場合によっては、これはまだ機能するかもしれませんが、おそらく非常に少数です。
atime
長時間使用されていないファイルを検索して削除できます(atimeを使用しないようにシステムを構成しなかった場合)が、それはかなり危険です(tmpreaper
この方法を使用するかどうかを確認してください)。
代わりに、不要なものを削除するインタラクティブなGUIプログラムBleachbitをお勧めします。