Nettoyer le répertoire $ HOME

16

Pendant quelques années, dans mon $HOMErépertoire, de nombreux fichiers et répertoires cachés sont apparus.

Je voudrais supprimer continuellement les inutiles.

Comment savoir quelles applications ont créé ces fichiers et répertoires cachés.

Comment puis-je être sûr qu'il est sûr de supprimer les fichiers et répertoires cachés et rien d'important ne sera perdu et rien en fonction d'eux ne cessera de fonctionner?

xralf
la source
2
Il peut être difficile de déterminer quelles applications ont créé les dossiers et les fichiers. Généralement, la corrélation des fichiers associés aux applications faites par des développeurs décents est simple, mais ce n'est pas toujours le cas. Si vous trouvez une bonne réponse, j'aimerais pour ma part savoir de quoi il s'agit.
0xSheepdog
2
@ 0xSheepdog auditd pour l'avenir - pour l'histoire, à peu près rien.
Jenny D
Assurez-vous d'avoir une sauvegarde des fichiers avant de les supprimer. (Cela comprend la vérification que vous pouvez restaurer les fichiers.)
Jenny D
1. Utilisez-vous Linux? Quelle version du noyau? (majeur / mineur uniquement) 2. SELinux est-il activé ou pouvez-vous l'activer? 3. Avez-vous un accès root?
Otheus

Réponses:

15

Vous pouvez simplement les déplacer temporairement.

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

Celui-ci trouvera tous les fichiers de votre $HOMErépertoire - sans récursivité dans les répertoires enfants - qui n'ont pas été consultés depuis un an. Il mettra à jour le temps d'accès pour chacun d'eux maintenant, puis les déplacera tous dans un répertoire nommé .trash. Si vous rencontrez des problèmes entre le moment où vous l'exécutez et l'heure à laquelle vous décidez de commencer à supprimer les anciens fichiers, ~/.trashvous pouvez essayer de reculer certains d'entre eux et voir si certains de ceux que vous avez mis à la poubelle en étaient la cause.

mikeserv
la source
Bien que cela ne réponde pas techniquement à la question, je pense que c'est une très bonne solution de contournement.
Jesse K
1
@JesseKeilson - Je pense que cela répond techniquement à la question: comment puis-je être sûr qu'il est sûr de supprimer les fichiers et répertoires cachés et rien d'important ne sera perdu et rien en fonction d'eux ne cessera de fonctionner?
mikeserv
1
Certains systèmes de fichiers sont montés avec l'option "noatime". L'atime ne sera jamais modifié, même si le mtime ou le ctime le sont. Cela conduira votre découverte à déplacer à tort des fichiers récents.
Adrien M.
@AdrienM. - c'est vrai. dans l'ensemble, cependant, chaque fs sain d'esprit j'entre en contact avec des utilisations à la relatimeplace. from man mount:: mettre à relatimejour les temps d'accès aux inodes par rapport à modifier ou changer l'heure. L'heure d'accès n'est mise à jour que si l'heure d'accès précédente était antérieure à l'heure de modification ou de changement actuelle. (Similaire à noatime, mais il ne casse pas muttou à d'autres applications qui ont besoin de savoir si un fichier a été lu depuis la dernière fois qu'il a été modifié.) Et de toute façon, utilisez -met -mtimetravaillez avec modtime. ou tout ce que vous aimez.
mikeserv
Il ne répond pas à la partie " et répertoires " de la question. Pour cela, vous devez parcourir chaque .directory et vérifier que tous les fichiers ont plus d'un an.
naught101
6

Si vous êtes à la racine de votre système, vous pouvez utiliser la fonction de noyau d' audit pour avoir le maximum d'informations sur qui / quand / quoi accéder / créer / modifier les fichiers. voir ce tutoriel pour des exemples à saveur debian

Si vous ne disposez pas d'un accès root, vous pouvez utiliser une crontab ou un script avec une boucle infinie + sleep pour exécuter les fichiers lsof & grep dans votre homedir. Voir la page de manuel de lsof . Cependant, il n'affichera que vos applications qui ont un descripteur de fichier ouvert au moment où vous lancez lsof. Si une application ouvre un fichier, le modifie puis le ferme, vous ne verrez pas cette modification dans lsof.

une doublure comme celle-ci devrait faire l'affaire: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Une autre façon consiste à utiliser l' API du noyau inotify pour vérifier quand un fichier est en cours d'accès. Hélas, c'est un système asynchrone, et vous n'aurez pas de détails comme "quelle application", "précisément quand", "quel utilisateur". Vous n'aurez qu'un rappel sur "ce fichier a été modifié / accédé ...". Certaines applications (Inotify, FAM, gamin) vous offrent un accès simple à l'api

Adrien M.
la source
J'ai juste essayé d'utiliser inotifypour déclencher lsof. Le système est tout simplement trop rapide pour que cette idée fonctionne: le processus a souvent disparu ou a fermé le fichier avant que lsof puisse être exécuté. Dans certains cas, cela peut encore fonctionner, mais probablement très peu.
Otheus
auditd C'est le seul système qui vous fournit tous les détails, sans rien manquer, car il utilise un chemin de code spécifique dans le noyau. Tous les autres outils manqueront des informations, manqueront des données car le processus sera terminé / ont fermé le fd.
Adrien M.
D'accord. Je mettais juste inotify à l'épreuve et confirmais qu'il ne fera pas vraiment le travail requis ici.
Otheus
3

Vous pouvez rechercher atimeet supprimer des fichiers non utilisés depuis longtemps (à condition que vous n'ayez pas configuré votre système pour ne pas utiliser atime), mais c'est plutôt risqué (voyez tmpreapersi vous voulez aller dans ce sens).

Au lieu de cela, je suggère Bleachbit , un programme d'interface graphique interactif pour supprimer la cruauté.

Radovan Garabík
la source