A todos nos pasa y nos ha pasado (sobre todo al inicio) de instalar y desinstalar aplicaciones, probar programas y configuraciones...y por supuesto el sistema sufre un poco a causa de estas "experiencias".

En esta pequeña y básica guía veremos algunas soluciones bastante cómodas (seguramente mucho mejor que formatear y empezar desde cero) para tratar de volver a la "normalidad" nuestra amada Debian. Con esta guía no pretendo descubrir la pólvora, ya que son cosas archiconocidas por muchos de los lectores, pero tal vez sirva a aquellos que recién empiezan.
Y como prevenir es mejor que curar.....allá vamos!

Todos estaremos de acuerdo en que trabajar en un sistema limpio y que nos permita limpiarlo es mas cómodo que uno "sucio" y "desordenado", y sobretodo si se trata de interventos a nivel de sistema!.
Checkinstall

Checkinsall es una utilidad que permite crear paquetes Debian a partir de los fuentes. CUIDADO, porque no son paquetes completos, sino que simplemente ayudan a seguir el rastro de archivos instalados por el programa, facilitando la actualización y el borrado del mismo.
Comenzamos con la instalación:
# aptitude install checkinstall

Su uso es bastante fácil e intuitivo,la configuración de las fuentes ( ./configure --alguna-opción) y la compilación (make) se deben de llevar a cabo, mientras que el comando:
# make install

debe ser sustituido por :
# checkinstall

Durante la ejecución vendrán formuladas algunas preguntas,como por ejemplo el tipo de paquete a crear (siendo los posibles: deb,rpm,tgz).

Tenemos a disposición otras opciones :

* -y,--default --Acepta los valores por defecto
* --pkgname=name --Impone el nombre de un paquete
* --pkgversion=versión --Impone la versión
* -A, --arch, --pkgarch=arch --Impone la arquitectura
* --pkgrelease=release --Impone la release versión
* --pkggroup=group --Impone el grupo al cual el paquete debe pertenecer(doc,net...)
* --pakdir=directory --Donde salvar el paquete
* --maintainer=email_addr --El mantenedor del paquete
* --dpkgflags=flags --Eventuales flags para dpkg
* --bk --Realiza un Backup de los archivos que serán pisados

Una vez terminado el proceso,el paquete vendrá automáticamente instalado.
Nota: debemos tener en cuenta que serán señalados eventuales dependencias,sustituciones e/o conflictos,esto debido a que el objetivo de checkinstall es aquel de poder rastrear los files generados y no el de crear un .deb oficial.
Debfoster
#aptitude install debfoster

El objetivo de este programa es de mostrar los paquetes que NO han sido instalados como dependencias, y una vez individuado/s, sera mostrada una lista indicando los paquetes "retenidos" por este/os.
Su uso es bastante simple, cuando lo hacemos correr por primera vez nos hará una serie de preguntas acerca de los paquetes instalados.
Podemos seleccionar mantener el paquete (sera recordado por debfoster) o podemos elegir su eliminación.
Si al momento de responder una de las preguntas tenemos alguna duda acerca del paquete, podemos tipear "?" para poder visualizar información acerca del mismo.
Salida de ejemplo:
libxml-libxml-perl is keeping the following 3 packages installed:
libxml-libxml-common-perl libxml-namespacesupport-perl libxml-sax-perl
Keep libxml-libxml-perl? [Ynpsiuqx?], [H]elp:

ahora podemos elegir cosa hacer:

* Y --Mantiene el paquete instalado
* n --Borra el paquete señalado
* p --Borra el paquete señalado y todos los paquetes retenidos
* s --Salta la pregunta
* i --Visualiza información sobre el paquete
* ? --Igual a i
* u --Vuelve a formular la pregunta anterior
* q --Cancela la operación sin realizar modificaciones
* x --Realiza la cancelación de los paquetes
* h --Ayuda

poderoso verdad?!

Cuando realizamos la limpieza con este programa,seria importante tener algunas consideraciones:

-La información mostrada no toma en cuenta eventuales programas compilados desde las fuentes.

-Leer con atención las librerías mostradas como "retenidas",puede suceder que se muestre una librería de desarrollo NO necesaria para la ejecución de otras aplicaciones,pero indispensable para la compilación (libncurses5-dev por ejemplo).
Deborphan
#aptitude install deborphan

Este paquete genera una lista de los paquetes huérfanos en el sistema. Por paquete huérfano entendemos aquellas librerías que ya no son necesarias, osea, que ningún paquete instalado la indica como dependencia.Pero...atención con los programas compilados desde las fuentes (con make install o checkinstall) ya que no serán controladas sus dependencias, por lo que podríamos causar algún problema de funcionamiento.

Una opción interesante es --libdev, que nos genera una lista con las librerías de desarrollo (que terminan con -dev) no necesarias.

Para ver los paquetes huérfanos basta lanzar el comando
#deborphan
o
#deborphan --libdevel

Es posible hacer que apt-get lea la lista de paquetes generada por deborphan:
# apt-get --purge remove `deborphan`
# apt-get --purge remove `deborphan --libdev`

La opción --purge como ya sabemos elimina los archivos de configuración del paquete.
Para los poco amantes de la consola podemos instalar gtkorphan, el cual es una muy fácil e intuitiva interfaz gráfica para deborphan.

#aptitude install gtkorphan

y el pollo esta pronto !
Archivos de configuración.

Eliminando los archivos de configuración liberamos espacio en nuestro disco (tarde o temprano muy valioso) y mantenemos limpio el directorio /etc.
Con el siguiente comando podremos borrar los archivos de configuración que han sido dejados por paquetes desinstalados sin la opción --purge.
# dpkg --purge `COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`

pero...que cáspita es este chorizo de letras ?! tranquilos...allá vamos!
dpkg --purge paquetes

Borra los archivos de configuración de todos los paquetes indicados.Estos paquetes los obtenemos tramite el comando
`COLUMNS=300 dpkg -l | egrep "^rc" | cut -d' ' -f3`

que a su vez genera la lista de los paquetes que no han sido borrados completamente (osea aquellos que cuando "se fueron", olvidaron de llevarse la configuración).

COLUMNS=300 --> modifica la longitud de la cadena,evitando cortar los nombres de los paquetes (COLUMNS es una variable de ambiente).

dpkg -l --> lista los paquetes disponibles.

egrep "^rc" --> lista las cadenas de nombres que comienzan con "rc", que es el estado que indica que el paquete ha sido borrado.

cut -d' ' -f3 --> devuelve el nombre del paquete,usa como limitador (-d) de campo un espacio (' ') y toma el tercer campo ( -f3.field en ingles).

Existen otros dos comandos que funcionan exactamente igual que el anterior:
dpkg -P $(dpkg -l |awk '/^rc/ { print $2 }')

o
for i in $(dpkg -l |grep ^r| awk '{print $2}'); do aptitude purge -y $i; done

También podemos realizar la limpieza por medio de deborphan, así:
dpkg --purge $(deborphan --find-config)

O bien podemos utilizar aptitude:
aptitude purge '~'c

Donde c la bandera de estado del paquete.
Localepurge

Este es un paquete que debería ser instalado en el sistema desde el inicio, o al menos eso pienso.
El objetivo de este paquete es eliminar los idiomas que instala un paquete y no nos sirven.
Normalmente nos sirven dos idiomas:
*en (idioma "de fabrica")
*es_ES (nuestro idioma)

Entre otras debemos elegir las variaciones que son utilizadas en nuestro sistema (es_ES@euro y en_US o la que sea).

No es aconsejable borrar el ingles, ya que es el idioma por defecto del sistema, y para evitar problemas ....no molesta.

así que, si aun no lo hemos hecho:
#aptitude install localepurge

Durante la configuración sera mostrada una lista con los idiomas, de estas, deberemos seleccionar las que nos interesa.

Normalmente no es necesario, pero por si las moscas...ejecutamos:
#localepurge

De ahora en adelante cada vez que instalemos un paquete,los idiomas inútiles serán borrados, ganando así, espacio en disco.
Buscando archivos duplicados

Conviene cada tanto hacer una intervención sobre el sistema en busca de archivos duplicados.
Cuando digo archivos duplicados me refiero a archivos con diferente nombre pero de idéntico contenido.
Para esto nos podemos valer del siguiente script:
find path/ -type f | xargs md5sum | awk '{
sub("[^/]*/","",$2);
if (cache[$1])
print "Found: "cache[$1],$2;
else
cache[$1]=$2
}'

donde path es la ruta del directorio que queremos controlar.
Este script como se ve NO borra nada, simplemente busca y lista.

Otra alternativa que nos ofrece Debian al momento de buscar y limpiar archivos duplicados es fdupes, una aplicación para linea de comandos muy fácil y útil de usar.
#aptitude install fdupes

Donde las diferentes opciones que nos ofrece son :
(man fdupes para profundizar la informacion).

* -r -- Modo recursivo.
* -s -- Comprueba enlaces simbolicos.
* -h -- Comprueba los enlaces fuertes.
* -S -- Muestra el tamaño de los archivos duplicados.
* -q -- Modo “quiet”, oculta el indicador de progreso.
* -v -- Muestra la version de fdupes.
* -d -- Borra los ficheros duplicados (cuidado, con esta opcion.)
* -h -- Muestra la ayuda.
* -n -- Descarta los ficheros vacios

Ejemplo:

$ fdupes -r -n -S /ruta/al/directorio > duplicados.txt

Se buscan los archivos dentro de /ruta/al/directorio y sus subdirectorios (recursivamente) omitiendo los archivos vacios, mostrando el tamaño de los mismos y guardando la salida en un archivo de texto para estudiar mas tarde y decidir que hacemos.
Instalación de paquetes sin incluir paquetes recomendados ni sugeridos

Una forma de controlar los paquetes que se han de instalar al usar "apt-get install paquete", es controlando los paquetes, aplicaciones y librerías sugeridas o recomendadas, con el fin de tener un sistema limpio y con lo que en realidad necesitamos.

Para realizar ésto, basta con indicarlo en el archivo de configuración /etc/apt/apt.conf añadiendo los siguientes parámetros:
APT::Install-Recommends "false";
APT::Install-Suggests "false";
Cruft:

Según su descripción,
descripcion escribió:

Cruft es un programa que busca a lo largo de tu sistema cualquier cosa que no debería estar allí pero que por alguna razón está; o cualquier cosa que debería estar pero que no está.

Basa casi todos sus resultados en la base de datos de dpkg, así como en una lista de "ficheros extra" que pueden aparecer durante el tiempo de vida de varios paquetes.

Cruft está todavía en una versión preeliminar; tu ayuda para mejorar su precisión y rendimiento es apreciada.

Así pues, cruft es un paquete que una vez instalado y ejecutado, empezará a listar una gran cantidad de ficheros que presumiblemente sobran, faltan o están de alguna forma incorrectos. Su uso es interesante si lo que pretendes es llevar a cabo una limpia hasta los cimientos de tu sistema. Se recomienda encarecidamente usar el sentido común, cruft no es perfecto, y cualquier vano intento de ejecutar burradas como rm -rf $(cruft) terminará, con toda seguridad, en desastre. Así pues, si vas a emplear esta poderosa y destructiva herramienta, siempre a mano y cerciorándote en cada caso de que vas a borrar o manipular.
Conclusión:

Estas son las técnicas de base para tener en orden y limpia nuestra Debian,los cambios se hacen visibles sobretodo en lo que respecta a espacio en disco.
No olvidemos el utilizo de:

apt-get o aptitude clean
apt-get o aptitude autoclean

que no haré comentarios ya que existe abundante información en el foro. Además:

Deberemos limpiar toda cache que se nos cruce en el camino.

Una aplicación que personalmente recomiendo,siempre y cuando sea usada con cuidado:
http://kde-apps.org/content/show.php/KleanSweep?content=71959&PHPSESSID=....
Con esta aplicación mantendremos limpia nuestra /home de una enorme cantidad de cosas inútiles que se van acumulando.
Si no lo deseamos instalar,siempre podemos recurrir a:
$ ls -a

lo cual nos permitirá ver los archivos y directorios de configuración,que son aquellos ocultos,los que tienen un . (punto) al inicio.
Una vez individuado el directorio a borrar:
$ rm -r nombredeldirectorio

donde la opción -r indica la recursividad de la operación,permitiendo el borrado del directorio.