Saltar al contenido

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.

bash
mkdir informes
mkdir -p /datos/2026/agosto/actas   # crea toda la cadena de golpe
touch acta.txt                      # crea el fichero vacío si no existe

cp 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.

bash
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 renombra

rm 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.

bash
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 contenido

mv 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.

CriterioQué filtra
-namePor nombre, admitiendo comodines entre comillas
-inameIgual, pero sin distinguir mayúsculas de minúsculas
-type f o -type dSolo ficheros ordinarios o solo directorios
-size +100MPor tamaño; el signo más significa «mayor que»
-mtime -7Modificados en los últimos siete días
-userPor propietario
-permPor permisos exactos
bash
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.

bash
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 llega

La 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ónQué hace
-iNo distingue mayúsculas de minúsculas
-vInvierte: muestra las líneas que NO cumplen
-nAñade el número de línea
-cEn vez de las líneas, cuenta cuántas hay
-rBusca de forma recursiva por todo un directorio
-EInterpreta expresiones regulares extendidas
bash
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íneas

grep -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.

LetraSignificado
cCrear el archivo
xExtraer del archivo
tListar el contenido sin extraer
fEl siguiente argumento es el nombre del fichero
zComprimir o descomprimir con gzip
vVerboso: va diciendo qué hace
bash
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.gz

La 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