Archivos ocultos en Linux: la convención del punto

El archivo oculto en Linux no es un archivo con un atributo especial activado, un bit de metadatos, ni nada que el kernel gestione de forma diferente. Es simplemente un archivo o directorio cuyo nombre empieza por . (un punto). Eso es todo. La “ocultación” no existe a nivel de sistema de ficheros — existe a nivel de convención entre herramientas de usuario.

El origen es simple y pragmático: cuando ls se diseñó, había que decidir qué hacer con las entradas especiales . (directorio actual) y .. (directorio padre) que aparecen en todos los directorios. La solución fue que ls ignorase por defecto cualquier nombre que empezase con punto. Efecto secundario: si pones un punto delante del nombre de tu fichero de configuración, desaparece del listado normal. Esa convención se generalizó y hoy es la razón por la que el home de cualquier usuario está lleno de “invisibles”.

Usas este mecanismo constantemente sin notarlo. Cada aplicación que instala algo para tu usuario — bash, git, ssh, vim, qualquier cosa — crea un directorio o fichero oculto en tu $HOME para guardar su configuración o estado. Con el tiempo, ese directorio acumula decenas de entradas. Si alguna vez ves que df o du reportan que tu home consume mucho espacio pero ls no muestra nada sospechoso, los archivos ocultos son los primeros candidatos. La opción -a de ls viene del inglés all y deshabilita ese filtrado.

Si te saltas este comportamiento sin entenderlo, puedes cometer errores en ambas direcciones: borrar accidentalmente .ssh/ (pierdes todas tus claves privadas y autorizaciones), o dejar crecer sin control directorios como .cache/ hasta llenar el disco.

# Situación: el home parece vacío pero hay poco espacio libre.
# Primero, listado completo con -l (detalles) y -a (todos, incluidos ocultos)
ls -la ~

# La salida incluirá entradas como estas:
# drwxr-xr-x 18 ana ana 4096 may 12 09:14 .
# drwxr-xr-x  4 root root 4096 ene  3 11:02 ..
# -rw-r--r--  1 ana ana  220 ene  3 11:02 .bash_logout
# -rw-r--r--  1 ana ana 3526 ene  3 11:02 .bashrc
# drwxr-xr-x  8 ana ana 4096 may 11 22:41 .cache
# drwx------  3 ana ana 4096 abr 20 16:33 .config
# drwxr-xr-x  3 ana ana 4096 feb  5 10:18 .local
# -rw-r--r--  1 ana ana  807 ene  3 11:02 .profile
# drwx------  2 ana ana 4096 ene  4 08:55 .ssh

# Ver cuánto ocupa cada directorio oculto del home, ordenado por tamaño.
# --max-depth=1 limita du a un nivel: no baja recursivamente a subdirectorios.
# El punto final hace referencia al directorio actual (el home en este caso).
du --max-depth=1 --human-readable ~ 2>/dev/null | sort --human-numeric-sort --reverse

# Si .cache es el culpable (lo suele ser), ver qué hay dentro:
ls -la ~/.cache

# Listar SOLO los archivos ocultos en el home, sin . ni ..
# El patrón .[^.]* excluye . y .. pero captura todo lo que empiece por punto
# seguido de al menos un carácter que no sea otro punto.
ls -d ~/.* 2>/dev/null | grep -v '/\.\.$\|/\.$'

# Ver las primeras líneas de .bashrc para entender qué es
head -20 ~/.bashrc

# Verificar que .ssh tiene los permisos correctos.
# SSH rechaza las claves si los permisos son demasiado abiertos.
# 700 en el directorio, 600 en los ficheros de clave.
stat -c "%a %n" ~/.ssh ~/.ssh/* 2>/dev/null

Fíjate en la columna de permisos del ls -la: el primer carácter es d para directorios y - para ficheros normales. Lo que sigue son los permisos en tres grupos de tres (propietario, grupo, otros). Eso no cambia por el hecho de que el nombre empiece por punto — el kernel los trata exactamente igual que cualquier otro fichero.

El du --max-depth=1 sobre el home es uno de los diagnósticos más útiles que puedes hacer. Sin él, estarías mirando ls y viendo “nada”, mientras .cache de tu navegador ocupa 3 GB. El sort --human-numeric-sort entiende sufijos como K, M, G para ordenar correctamente; sin esa opción, el orden sería lexicográfico y 200M aparecería antes que 3G.

Los directorios que acabas de ver en el ejemplo tienen roles distintos y vale la pena internalizarlos. .bashrc se ejecuta cada vez que abres una terminal interactiva no de login (la mayoría de las terminales del día a día); .profile se ejecuta en el login real (SSH, TTY). Si pones algo en el lugar equivocado, te preguntarás por qué tu alias no existe al hacer SSH. .config/ es el estándar moderno XDG para configuración de aplicaciones gráficas y cada vez más herramientas de terminal. .local/ tiene dos subdirectorios clave: share/ para datos de aplicación y bin/ para binarios instalados solo para tu usuario — si instalas algo con pip install --user o cargo install, el binario acaba aquí. .ssh/ merece atención especial: los permisos incorrectos no son solo un riesgo de seguridad, hacen que SSH directamente rechace las claves con un error, así que el stat del ejemplo no es opcional cuando algo falla.

25

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio