Bereinigen Sie das $ HOME-Verzeichnis

16

Während einiger Jahre $HOMEtauchten in meinem Verzeichnis viele versteckte Dateien und Verzeichnisse auf.

Ich möchte ständig die nicht benötigten löschen.

Wie kann ich herausfinden, welche Anwendungen diese versteckten Dateien und Verzeichnisse erstellt haben?

Wie kann ich sicher sein, dass die versteckten Dateien und Verzeichnisse sicher entfernt werden und nichts Wichtiges verloren geht und nichts, was davon abhängt, nicht aufhört zu funktionieren?

xralf
quelle
2
Das Ermitteln, welche Anwendungen die Ordner und Dateien erstellt haben, kann schwierig sein. Normalerweise ist das Korrelieren der Dateien, die mit Apps von anständigen Entwicklern verknüpft sind, einfach, aber dies ist nicht immer der Fall. Wenn Sie eine gute Antwort finden, würde ich gerne wissen, was es ist.
0xSheepdog
2
@ 0xSheepdog auditd für die Zukunft - für die Geschichte so ziemlich nichts.
Jenny D
Stellen Sie sicher, dass Sie eine Sicherungskopie der Dateien haben, bevor Sie sie entfernen. (Dies beinhaltet die Überprüfung, ob Sie die Dateien wiederherstellen können.)
Jenny D
1. Verwenden Sie Linux? Welche Kernelversion? (Bitte nur Dur / Moll) 2. Ist SELinux aktiviert oder können Sie es aktivieren? 3. Haben Sie root-Zugang?
Otheus

Antworten:

15

Sie können sie nur vorübergehend verschieben.

cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
    sh -c 'touch -a -- "$@"
           mv -- "$@" ~/.trash
    ' --   {} +

$HOMEDadurch werden alle Dateien in Ihrem Verzeichnis gefunden, auf die seit einem Jahr nicht mehr zugegriffen wurde, ohne dass sie erneut in untergeordnete Verzeichnisse verschoben werden. Es aktualisiert die Zugriffszeit für alle von ihnen auf den aktuellen Stand und verschiebt sie dann in ein Verzeichnis mit dem Namen .trash. Wenn zwischen der Ausführung und dem Zeitpunkt, an dem Sie mit dem Löschen alter Dateien beginnen, Probleme auftreten ~/.trash, können Sie versuchen, einige Dateien zurückzusetzen, um festzustellen, ob eine der von Ihnen in den Papierkorb gelegten die Ursache war.

mikeserv
quelle
Obwohl dies die Frage technisch nicht beantwortet, halte ich es für eine ziemlich gute Umgehung.
Jesse K
1
@JesseKeilson - ich denke , dass es nicht technisch die Frage beantworten: Wie kann ich sicher sein , dass es sicher ist wichtig , um die versteckten Dateien und Verzeichnisse und nichts zu entfernen , gehen verloren und nichts von ihnen abhänge werde nicht aufhören zu arbeiten?
mikeserv
1
Einige Dateisysteme werden mit der Option "noatime" gemountet. Die Uhrzeit wird niemals geändert, auch wenn die Uhrzeit mtime oder ctime ist. Dies führt dazu, dass Ihre Suche die zuletzt verwendeten Dateien falsch verschiebt.
Adrien M.
@AdrienM. - das ist richtig. Im Großen und Ganzen kommt jedoch jedes gesunde Gefühl, mit dem ich in Kontakt komme, mit Verwendungen in Verbindung relatime. von man mount: relatime: Update inode Zugriffszeiten im Verhältnis zu ändern oder zu ändern Zeit. Die Zugriffszeit wird nur aktualisiert, wenn die vorherige Zugriffszeit vor der aktuellen Änderungs- oder Änderungszeit lag. (Ähnlich wie noatime, aber es funktioniert nicht muttoder in anderen Anwendungen, die wissen müssen, ob eine Datei seit der letzten Änderung gelesen wurde.) Verwenden Sie -mund -mtime, um mit modtime zu arbeiten. oder was auch immer du magst.
mikeserv
Der Teil " und Verzeichnisse " der Frage wird nicht beantwortet . Dafür müssten Sie jedes Verzeichnis durchsuchen und prüfen, ob alle Dateien älter als ein Jahr sind.
naught101
6

Wenn Sie Wurzel Ihres Systems sind, können Sie das verwenden Audit - Kernel - Funktion , um die maximale Informationen haben wer / wann / was zugegriffen / erstellt / geänderte Dateien. In diesem Tutorial finden Sie Beispiele mit Debian-Geschmack

Wenn Sie keinen Root-Zugriff haben, können Sie eine crontab oder ein Skript mit einer Endlosschleife + sleep verwenden, um lsof- und grep-Dateien in Ihrem Homedir auszuführen. Siehe manpage von lsof . Es werden jedoch nur Ihre Anwendungen angezeigt, bei denen zum Zeitpunkt des Starts von lsof ein Filedescriptor geöffnet ist. Sollte eine Anwendung eine Datei öffnen, bearbeiten und dann schließen, wird diese Änderung in lsof nicht angezeigt.

Ein Einzeiler wie dieser sollte den Job machen: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Eine andere Möglichkeit besteht darin, mithilfe der inotify- Kernel-API zu überprüfen, wann auf eine Datei zugegriffen wird. Leider ist es ein asynchrones System, und Sie werden keine Details wie "welche App", "genau wann", "welcher Benutzer" haben. Sie haben nur einen Rückruf zu "Diese Datei wurde geändert / zugegriffen ...". Einige Anwendungen (Inotify, FAM, Gamin) bieten Ihnen einfachen Zugriff auf die API

Adrien M.
quelle
Ich habe gerade versucht, inotifyzu triggern lsof. Das System ist einfach zu schnell, als dass diese Idee funktionieren könnte: Der Prozess ist häufig beendet oder hat die Datei geschlossen, bevor lsof ausgeführt werden kann. In einigen Fällen könnte dies noch funktionieren, aber wahrscheinlich nur sehr wenige.
Otheus
auditd Es ist das einzige System, das Ihnen alle Details zur Verfügung stellt, ohne etwas zu verpassen, da es einen bestimmten Codepfad im Kernel verwendet. Alle anderen Tools werden Informationen vermissen, fehlende Daten, da der Prozess beendet wird / das fd geschlossen hat.
Adrien M.
Einverstanden. Ich habe nur inotify auf die Probe gestellt und bestätigt, dass es den hier geforderten Job nicht wirklich macht.
Otheus
3

Sie können nach atimeDateien suchen und diese entfernen, die lange Zeit nicht verwendet wurden (vorausgesetzt, Sie haben Ihr System nicht für die Verwendung von atime konfiguriert tmpreaper).

Stattdessen würde ich Bleachbit vorschlagen , ein interaktives GUI-Programm zum Entfernen von Cruft.

Radovan Garabík
quelle