En Linux todo es un archivo (archivos regulares, directorios, dispositivos, sockets…). El sistema de permisos se aplica de forma uniforme a todos ellos. Antes de ejecutar cualquier operación, el kernel pregunta: ¿quién eres tú? ¿qué relación tienes con este archivo? ¿tienes permiso para hacer lo que pides?
1. Operaciones básicas sobre archivos
Copiar — cp
cp origen destino # copia un archivocp -r directorio/ destino/ # copia recursiva (obligatorio para directorios)cp -i origen destino # pregunta antes de sobreescribir (interactive)cp -v origen destino # muestra qué está copiando (verbose)cp -rv directorio/ destino/ # combinación habitual: recursivo + verbosecp -p origen destino # preserva permisos, timestamps y propietario
Gotcha: cp sin -i sobreescribe en silencio. En scripts de producción, siempre -i o comprueba antes con [ -f destino ].
Mover / renombrar — mv
mv archivo.txt nuevo_nombre.txt # renombrarmv archivo.txt /ruta/destino/ # movermv -i origen destino # preguntar si sobreescribemv -v origen destino # verbose
mv dentro del mismo sistema de archivos es instantáneo (solo actualiza el directorio). Entre sistemas de archivos distintos equivale a cp + rm.
Borrar — rm
rm archivo.txt # borrar archivorm -r directorio/ # borrar directorio y todo su contenidorm -i archivo.txt # confirmar cada borradorm -v archivo.txt # verbose
PELIGRO MAXIMO — rm -rf
rm -rf /ruta/a/borrar # borra sin preguntar, sin papelera, sin vuelta atrás
No hay “deshacer”. Un error tipográfico (rm -rf / ruta con espacio) puede arrasar el sistema. Reglas de oro:
Nunca ejecutar como root si puedes evitarlo.
Comprueba la ruta con ls antes.
Usa trash-cli como alternativa (trash archivo) para tener papelera en terminal.
En scripts, añade set -e y valida que la variable no esté vacía: rm -rf "${DIR:?variable vacía}".
Crear directorios — mkdir
mkdir nueva_carpetamkdir -p ruta/intermedia/nueva # crea todos los directorios intermediosmkdir -p proyecto/{src,tests,docs} # expansión de llaves: crea 3 subdirectorios
Eliminar directorios vacíos — rmdir
rmdir directorio_vacio # falla si tiene contenido (seguro por eso)
Crear / actualizar timestamps — touch
touch archivo.txt # crea si no existe; actualiza fecha de modificación si existetouch -t 202601011200 archivo.txt # fijar timestamp manualmente
2. Enlaces: duros y simbólicos
Enlace duro (ln)
ln archivo_original enlace_duro
Apunta directamente al mismo inodo (los datos en disco).
No hay “original” vs “enlace”: ambos son el mismo archivo con dos nombres.
Si borras uno, el otro sigue funcionando.
Limitación: no pueden cruzar sistemas de archivos ni enlazar directorios.
Enlace simbólico (ln -s)
ln -s /ruta/al/objetivo enlace_simbolicoln -s ../relativa/ruta enlace_relativo # las rutas relativas se resuelven desde donde vive el enlace
Es un archivo especial que contiene la ruta al objetivo.
Si borras el objetivo, el enlace queda “roto” (dangling symlink).
Puede cruzar sistemas de archivos, puede enlazar directorios.
ls -la muestra -> hacia el objetivo.
Cuándo usar cada uno
Situación
Tipo de enlace
Alias de ejecutables en /usr/local/bin
Simbólico
Versionado: python3 -> python3.12
Simbólico
Archivos de config que deben vivir en dos sitios
Simbólico
Copia de seguridad “sin duplicar datos” en el mismo disco
Duro
Referencia que debe sobrevivir al renombrado del origen
Duro
3. El sistema de permisos Unix
3.1 Tres actores: usuario / grupo / otros
Cada archivo tiene:
Propietario (user, u): quien lo creó (normalmente).
Grupo (group, g): un grupo del sistema al que pertenece el archivo.
Otros (others, o): cualquier usuario que no sea el propietario ni miembro del grupo.
El kernel comprueba en orden: ¿eres el propietario? → aplica permisos de u. ¿Perteneces al grupo? → aplica g. Si no, aplica o.
3.2 Tres permisos: r / w / x
Letra
Valor
Sobre ARCHIVO
Sobre DIRECTORIO
r (read)
4
Leer contenido
Listar (ls)
w (write)
2
Modificar / borrar contenido
Crear, renombrar, borrar archivos dentro
x (execute)
1
Ejecutar como programa
Entrar (cd) y acceder a rutas dentro
El permiso x en un directorio es el permiso de atravesarlo. Sin x, no puedes cd ni acceder a nada dentro, aunque tengas r. Con solo x (sin r) puedes entrar pero no listar. El caso habitual es rx juntos.
3.3 Leer la salida de ls -l — los 10 caracteres
-rwxr-xr-- 1 daniel developers 4096 Jun 12 10:00 script.sh
^ ^ ^ ^
| | | └── otros (r--)
| | └───── grupo (r-x)
| └──────── propietario (rwx)
└─────────── tipo de archivo
Carácter de tipo:
Char
Tipo
-
archivo regular
d
directorio
l
enlace simbólico
c
dispositivo de caracteres
b
dispositivo de bloques
p
named pipe
s
socket
3.4 Permisos en octal
Cada triada rwx se convierte a un dígito sumando: r=4, w=2, x=1.
Notación simbólica (legible, ideal para cambios puntuales):
chmod u+x script.sh # añadir ejecutar al propietariochmod go-w archivo.txt # quitar escritura a grupo y otroschmod a+r documento.pdf # añadir lectura a todos (a = all = ugo)chmod u=rw,go=r config # asignar exactamente: propietario rw, resto r
# Encontrar archivos con setuid (auditoría de seguridad):find /usr/bin -perm -4000 -ls
7. Comandos de inspección (solo lectura)
ls -l archivo # permisos, propietario, grupo, tamaño, fechals -la directorio/ # incluye archivos ocultosstat archivo # todo sobre el inodo: permisos, timestamps, inodo nºid # quién soy yo: uid, gid, gruposgroups # grupos a los que pertenezcogetfacl archivo # ACLs extendidas (si el sistema las usa)namei -l /ruta/completa # permisos de cada componente de la ruta
8. Gotchas frecuentes
Borrar un archivo sin permiso w en el directorio padre: el permiso de borrado lo controla el directorio, no el archivo. Puedes borrar un archivo de solo lectura si tienes w en su directorio.
chmod -R 777 .: nunca en producción. Abre vulnerabilidades de escalada de privilegios.
chown vs chmod: chown cambia a quién aplican los permisos; chmod cambia qué están permitidos.
Enlace simbólico roto: ls -la lo muestra en rojo; readlink enlace muestra a qué apunta.
Permisos en /tmp: el sticky bit evita que usuarios borrén archivos ajenos aunque tengan w en el directorio.
Directorio sin x: aunque r te permita listar nombres, sin x no puedes acceder a ningún archivo dentro (ni leer, ni abrir).