Linux: ficheros y texto
Moverse por el árbol de directorios, crear y borrar, encontrar lo que se busca, leer ficheros grandes sin abrirlos enteros y empaquetar para copiar o guardar.
Crear, copiar, mover y borrar
mkdir crea directorios. Con -p crea de una vez toda la ruta que falte y no protesta si el directorio ya existía, que es lo que se quiere dentro de un script.
mkdir informes
mkdir -p /datos/2026/agosto/actas # crea toda la cadena de golpe
touch acta.txt # crea el fichero vacío si no existecp copia y mv mueve. Los dos aceptan como último argumento un directorio de destino. Una diferencia importante: cp necesita -r para copiar un directorio con todo su contenido, mientras que mv mueve directorios sin necesidad de opción, porque no está duplicando nada, solo cambiando dónde está la entrada.
cp acta.txt copia.txt
cp -r informes/ /datos/respaldo/ # -r para directorios
mv acta.txt actas/ # mover
mv acta.txt acta-2026.txt # el mismo comando renombrarm borra, y en Linux no hay papelera. Con -r borra un directorio y todo lo que cuelgue de él, y con -f no pregunta ni avisa de lo que no existe. La combinación rm -rf es la que más sistemas ha destrozado de la historia: conviene ejecutar antes un ls con la misma ruta para ver qué se va a llevar por delante.
rm copia.txt
rm -i copia.txt # pide confirmación
rmdir vacio/ # solo borra directorios vacíos
rm -r informes/ # borra el directorio con su contenidomv sirve para mover y para renombrar: es el mismo comando. Y rm no manda a ninguna papelera, borra.
Para el examen
cp con directorios: necesita -r
mv: mueve y además renombra; no necesita -r
rm: borra sin papelera
rmdir y mkdir -p: rmdir solo borra directorios vacíos; mkdir -p crea la ruta entera
Buscar ficheros: find
find recorre el árbol de directorios en el momento en que se ejecuta, así que siempre dice la verdad, a costa de tardar. Su forma es: dónde buscar, seguido de las condiciones que debe cumplir lo buscado.
| Criterio | Qué filtra |
|---|---|
| -name | Por nombre, admitiendo comodines entre comillas |
| -iname | Igual, pero sin distinguir mayúsculas de minúsculas |
| -type f o -type d | Solo ficheros ordinarios o solo directorios |
| -size +100M | Por tamaño; el signo más significa «mayor que» |
| -mtime -7 | Modificados en los últimos siete días |
| -user | Por propietario |
| -perm | Por permisos exactos |
find /var/log -name "*.log"
find /home -type f -size +100M # ficheros de más de 100 MB
find /tmp -type f -mtime +30 -delete # borrar lo que lleve 30 días sin tocarse
find /etc -name "*.conf" -exec grep -l puerto {} \;La opción -exec ejecuta un comando sobre cada resultado: las llaves representan el fichero encontrado y el punto y coma escapado cierra el comando. Dos comandos emparentados: which dice en qué ruta está el ejecutable de un comando, y locate consulta una base de datos previamente indexada, por lo que responde al instante pero puede estar desactualizada.
find busca de verdad y es lento; locate consulta un índice y es instantáneo pero puede mentir.
Para el examen
find: recorre el árbol en el momento: -name, -type, -size +100M, -mtime, -exec
locate: consulta una base indexada, que puede estar desactualizada
which: localiza el ejecutable de una orden
Leer y filtrar ficheros: cat, less, head, tail y grep
cat vuelca el fichero entero por pantalla, lo que sirve para ficheros cortos y es contraproducente con un registro de varios gigas. Para eso está less, que va cargando según se avanza y permite moverse y buscar dentro. head muestra el principio y tail el final, diez líneas por defecto en ambos casos.
cat /etc/hostname
less /var/log/syslog # se sale con q
head -n 20 listado.csv # las 20 primeras líneas
tail -n 50 /var/log/syslog # las 50 últimas
tail -f /var/log/syslog # se queda mirando y muestra lo que llegaLa opción -f de tail es la que se usa a diario para vigilar un servicio: deja el fichero abierto y va escribiendo cada línea nueva en cuanto aparece.
grep filtra líneas que contienen un patrón. Es la herramienta que convierte un registro enorme en las cuatro líneas que interesan, y encadenada con una tubería filtra la salida de cualquier otro comando.
| Opción | Qué hace |
|---|---|
| -i | No distingue mayúsculas de minúsculas |
| -v | Invierte: muestra las líneas que NO cumplen |
| -n | Añade el número de línea |
| -c | En vez de las líneas, cuenta cuántas hay |
| -r | Busca de forma recursiva por todo un directorio |
| -E | Interpreta expresiones regulares extendidas |
grep -i error /var/log/syslog
grep -c denegado acceso.log # cuántas veces
grep -rn TODO /opt/proyecto/ # recursivo y con número de línea
tail -f /var/log/syslog | grep -i sshd
wc -l listado.csv # contar líneasgrep -v es el que más se falla: no busca, descarta. Sirve para quitar el ruido de un registro.
Para el examen
tail -f: vigila un registro en vivo
Opciones de grep: -i sin distinguir mayúsculas, -v invierte, -c cuenta, -n numera y -r recursivo
head y tail por defecto: 10 líneas
Empaquetar y comprimir: tar y gzip
En Unix empaquetar y comprimir son dos cosas distintas. tar junta muchos ficheros en uno solo conservando permisos y estructura de directorios, pero no reduce tamaño. gzip comprime un fichero, pero solo uno. Lo habitual es hacer las dos cosas a la vez, y por eso tar incorpora la opción de comprimir.
| Letra | Significado |
|---|---|
| c | Crear el archivo |
| x | Extraer del archivo |
| t | Listar el contenido sin extraer |
| f | El siguiente argumento es el nombre del fichero |
| z | Comprimir o descomprimir con gzip |
| v | Verboso: va diciendo qué hace |
tar -czvf respaldo.tar.gz /datos/informes
tar -tzvf respaldo.tar.gz # ver qué lleva dentro
tar -xzvf respaldo.tar.gz -C /tmp # extraer en otro directorio
gzip informe.log # deja informe.log.gz
gunzip informe.log.gzLa f va siempre pegada al nombre del fichero, así que va la última de las letras: -czvf y no -cfzv.
Para el examen
tar: empaqueta, no comprime
gzip: comprime un solo fichero
Letras de tar: c crea, x extrae, t lista, z pasa por gzip y f nombra el fichero
Regla de la f: va siempre la última
Enlaces duros y simbólicos: ln
ln crea el enlace duro y ln -s el simbólico, y la diferencia está en el i-nodo. El duro es otro nombre para el MISMO i-nodo: borrar el original no rompe nada, pero no puede cruzar sistemas de ficheros ni apuntar a directorios. El simbólico es un fichero propio que guarda una ruta: sobrevive a todo eso, pero si el destino desaparece queda colgando (roto).
Para el examen
ln y ln -s: enlace duro y enlace simbólico
Enlace duro: mismo i-nodo: no cruza sistemas de ficheros ni apunta a directorios
Enlace simbólico: fichero propio con una ruta: puede quedar roto si el destino desaparece