Limpie el directorio $ HOME

16

Durante unos años, en mi $HOMEdirectorio aparecieron muchos archivos y directorios ocultos.

Me gustaría eliminar continuamente los innecesarios.

¿Cómo puedo averiguar qué aplicaciones crearon esos archivos y directorios ocultos?

¿Cómo puedo estar seguro de que es seguro eliminar los archivos y directorios ocultos y que nada importante se perderá y que nada, dependiendo de ellos, no dejará de funcionar?

xralf
fuente
2
Determinar qué aplicaciones crearon las carpetas y los archivos puede ser complicado. Por lo general, la correlación de los archivos asociados con las aplicaciones creadas por desarrolladores decentes es sencilla, pero no siempre es así. Si encuentra una buena respuesta, me gustaría saber cuál es.
0xSheepdog
2
@ 0xSheepdog auditado para el futuro: para la historia, prácticamente nada.
Jenny D
Asegúrese de tener una copia de seguridad de los archivos antes de eliminarlos. (Esto incluye verificar que puede restaurar los archivos).
Jenny D
1. ¿Estás usando Linux? ¿Qué versión del kernel? (mayor / menor solo por favor) 2. ¿Está SELinux habilitado o puede habilitarlo? 3. ¿Tiene acceso de root?
Oteo

Respuestas:

15

Puedes desplazarlos temporalmente.

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

Eso encontrará todos los archivos en su $HOMEdirectorio, sin recurrir a directorios secundarios, a los que no se ha accedido durante un año. Actualizará el tiempo de acceso para todos ellos en este momento y luego los moverá a un directorio llamado .trash. Si encuentra algún problema entre el momento en que lo ejecuta y el momento en que decide comenzar a eliminar archivos antiguos ~/.trash, puede intentar mover algunos de ellos y ver si alguno de los que puso en la papelera fue la causa.

mikeserv
fuente
Si bien esto técnicamente no responde la pregunta, creo que es una solución bastante buena.
Jesse K
1
@JesseKeilson - Creo que no responder técnicamente a la pregunta: ¿Cómo puedo estar seguro de que es seguro para eliminar los archivos ocultos y directorios y nada importante se perderá nada y en función de ellos no dejarán de funcionar?
mikeserv
1
Algunos sistemas de archivos están montados con la opción "noatime". El atime nunca se modificará, incluso si lo son mtime o ctime. Esto hará que su búsqueda mueva incorrectamente los archivos recientes.
Adrien M.
@AdrienM. - es verdad. en general, sin embargo, cada cuerdo entro en contacto con usos relatime. desde man mount:: relatimeActualice los tiempos de acceso de inodo en relación con el tiempo de modificación o cambio. El tiempo de acceso solo se actualiza si el tiempo de acceso anterior era anterior al tiempo de modificación o cambio actual. (Similar a noatime, pero no se rompe muttni a otras aplicaciones que necesitan saber si un archivo se ha leído desde la última vez que se modificó) y, de todos modos, use -my -mtimepara trabajar con modtime. o lo que quieras
mikeserv
Que no responde a la ' y directorios parte "de la pregunta para que se necesitaría para caminar cada .directory, y comprobar todos los archivos son mayores de un año..
naught101
6

Si es la raíz de su sistema, puede usar la función de kernel de auditoría para tener la máxima información sobre quién / cuándo / qué accedió / creó / modificó archivos. vea este tutorial para ejemplos con sabor a debian

Si no tiene acceso de root, puede usar un crontab o un script con un bucle infinito + dormir para ejecutar archivos lsof y grep en su homedir. Consulte la página de manual de lsof . Sin embargo, solo mostrará sus aplicaciones que tengan un descriptor de archivo abierto en el momento en que inicie lsof. Si una aplicación abre un archivo, edítelo y luego ciérrelo, no verá este cambio en lsof.

una frase como esta debería hacer el trabajo: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Otra forma es utilizar la API de kernel inotify para verificar cuándo se accede a un archivo. Por desgracia, es un sistema asíncrono, y no tendrá detalles como "qué aplicación", "precisamente cuándo", "qué usuario". Solo tendrá una devolución de llamada sobre "este archivo fue modificado / accedido ...". Algunas aplicaciones (Inotify, FAM, gamin) le brindan acceso simple a la API

Adrien M.
fuente
Solo intenté usar inotifypara disparar lsof. El sistema es simplemente demasiado rápido para que esta idea funcione: el proceso a menudo desaparece o ha cerrado el archivo antes de que lsof pueda ejecutarse. En algunos casos, esto podría funcionar, pero probablemente muy pocos.
Oteo
auditado Es el único sistema que le proporciona todos los detalles, sin perderse nada, ya que utiliza una ruta de código específica en el núcleo. Todas las demás herramientas perderán información, perderán datos, ya que el proceso finalizará / habrá cerrado el fd.
Adrien M.
Convenido. Estaba poniendo inotify a prueba y confirmando que realmente no hará el trabajo requerido aquí.
Oteo
3

Puede buscar atimey eliminar archivos que no se utilizaron durante mucho tiempo (siempre que no haya configurado su sistema para no usar atime), pero eso es bastante arriesgado (vea tmpreapersi desea seguir este camino).

En cambio, sugeriría Bleachbit , un programa GUI interactivo para eliminar cruft.

Radovan Garabík
fuente