Kabosu - Creando cosas
Publicado: 2025-08-19
Buenos días, tardes o noches:
Hoy toca hablar de la temida terminal. Si hubo una cosa que me hizo enamorarme de Linux a principios de los 2000 y luego de FreeBSD fue la línea de comandos. Hacer cosas en la terminal tiene muy mala fama. Es sinónimo de difícil. Y estoy de acuerdo en parte. Cuando la gente habla de tener que usar la terminal normalmente es en el contexto de tocar algún fichero de configuración, arreglar algo que se ha roto o tareas similares. Yo no tengo mucha idea de esas cosas y siempre que tengo que hacer algo así me toca buscar en internet cómo hacerlo. Lo que me gusta mucho de la terminal es escribir comandos en ella para procesar datos. Concatenar 2, 3, 8 comandos y hacer cosas sin necesidad de usar aplicaciones con las que tardaría horas ne hacer lo mismo.
El diseño de la terminal de Linux es una maravilla que ningún otro sistema operativo ha conseguido igualar en mi opinión. En verdad Linux no ha inventado y todo esto viene de los diferentes Unix y BSD pero por simplicidad yo digo "la terminal de Linux".
La idea clave en mi opinión es el operador |
. Si lo pones entre dos comandos, los conecta de forma que lo que escribe el primero lo recibe el segundo. Por ejemplo ls | wc -l
lista el contenido del directorio pero en vez de mostrar lo por pantalla se pasa a wc -l
que calcula cuántas líneas hay. El resultado es que te dice cuántos ficheros y directorios hay.
Conociendo 5 o 10 comandos de la terminal y encadenándolos de diferentes formas puedes hacer cosas complicadísimas con una sola línea. Los elementos por separado son extremadamente simples pero se pueden combinar para crear maravillas.
Estos son los comandos que yo uso con más frecuencia. Cada uno de ellos tiene decenas o cientos de argumentos diferentes pero yo solo uso las opciones más básicas:
cat
: escribe a la terminal el contenido de un ficherols
: escribe la lista de ficheros y directoriosgrep
: filtra líneas que contiene una palabrawc
: cuenta palabras o líneashead
: escribe solo las primeras n líneastail
: escribe solo las últimas n líneascut
: parte cada línea en campossort
: ordenar las líneasuniq
: elimina líneas repetidas consecutivasecho
: escribe un mensajeHay otros que uso menos y que cada vez que los necesito tengo que buscar qué argumentos hay que pasarles:
xargs
: ejecuta un comando para cada línea que recibefind
: busca ficheros en el disco durosed
: para modificar las líneas que lee con expresiones regularesPor ejemplo, hace un tiempo quería descargar todos los vídeos de Youtube enlazados en la web Guías Nintendo de la que ya había bajado todas sus páginas HTML. Lo que hice fue lo siguiente:
grep -roE 'https?://(www\.)?youtube\.com/embed/[a-zA-Z0-9_-]+' . | sort | uniq | xargs -n 1 yt-dlp
El comando anterior se puede separar en 4 pasos:
grep -roE 'https?://(www\.)?youtube\.com/embed/[a-zA-Z0-9_-]+' .
: busca recursivamente todos los enlaces a Youtubesort
: ordena los enlaces alfabéticamenteuniq
: al haber ordenado si un enlace está más de una vez, todas las copias aparecerán contiguas y este comando dejará solo una. Con esto evitamos repetir vídeos | xargs -n 1 yt-dlp
: ejecuta yt-dlp
para bajar cada uno de los enlaces encontradosMe gusta de la terminal que es un proceso incremental. Empiezas sabiendo 1 o 2 comandos con sus opciones más comunes y poco a poco puedes ir aprendiendo más hasta ser capaz de hacer montones de cosas sin necesidad de programar. Yo llevo más de 20 años usando la terminal casi a diario para procesar datos combinando la mayoría de los comandos anteriores y siempre aprendo cosas nuevas. Por ejemplo cosas que antes hacía con cut
ahora sé que se pueden hacer directamente con algún argumento de grep
pero eso no quita que esté mal usar cut
. Hay mil formas diferentes de hacer las cosas.
Me gustaría que "la terminal" fuera vista como la herramienta útil que es para procesar datos en vez de cómo algo viejo que tienes que usar por obligación porque no hay alternativa.