Tienes un cupón activo hasta el . Ver tu oferta

Aprende lo básico de Linux para ser productivo

Diferentes sistemas operativos han estado atendiendo a diferentes audiencias durante mucho tiempo: Windows para profesionales de negocios, Mac para creativos y Linux para desarrolladores. Para los desarrolladores de sistemas operativos, este tipo de espectro de mercado ha simplificado en gran medida el concepto del producto, los requisitos técnicos, la experiencia del usuario y la dirección del mercado. Sin embargo, también ha endurecido las normas del entorno de trabajo, lo que ha llevado a que los usuarios se vean limitados a áreas estrechas y no superpuestas: los empresarios no tienen la oportunidad de participar en el proceso creativo y los desarrolladores no tienen idea de los problemas empresariales.

En realidad, el conocimiento y la experiencia son dinámicos, abarcan varias disciplinas y áreas de actividad. La idea de que "solo puedes tener habilidades en una cosa" no es una guía para dominar una habilidad, sino un intento de lidiar con una optimización prematura. Solo puedes saber en qué eres bueno cuando te has probado en diferentes áreas. Y puede resultar que tengas habilidades para muchas actividades diferentes.

Para los analistas de negocios modernos, la eliminación de la brecha entre el negocio y el desarrollo es especialmente relevante. Los analistas de negocios deben ser bilingües, capaces de usar la línea de comandos de Linux (que también está en macOS y, con WSL, en Windows), pero también de aprovechar las amplias capacidades de Microsoft Office en Windows. Es evidente que el mundo de Linux asusta a aquellos que tienen una formación en negocios. Afortunadamente, al igual que en muchos otros casos, solo necesitas aprender el 20% de la información para hacer el 80% del trabajo. Aquí está mi 20%.

Por qué los analistas de negocios modernos deben conocer Linux

Gracias a sus raíces de código abierto, Linux ha cosechado las contribuciones de miles de desarrolladores a lo largo de su existencia. Han construido programas y utilidades para facilitar su propio trabajo y el de los programadores que les siguieron. Como resultado, el desarrollo de código abierto ha creado un efecto de red: cuanto más desarrolladores construían utilidades en la plataforma original, más otros desarrolladores podían influir en esas utilidades para escribir sus propios programas.

El resultado es un gran paquete de programas y utilidades (es decir, software) que se ha escrito en Linux y para Linux. Durante años, muchas de ellas no funcionaban bien en Windows. Un ejemplo es el popular sistema de control de versiones llamado git, que nació en Linux y está pensado para trabajar desde la línea de comandos, un ecosistema que ya tenía todas las herramientas necesarias.

Hoy la situación es distinta a la de 2017, cuando se escribió el artículo original. Git y muchas otras herramientas ya funcionan en Windows, y Microsoft ofrece WSL 2 (Windows Subsystem for Linux), que ejecuta un kernel de Linux dentro de Windows y permite usar distribuciones como Ubuntu o Debian. En una instalación estándar basta con ejecutar wsl --install en una terminal de administrador. En macOS la terminal ya es un sistema Unix. Si quieres configurarlo paso a paso, tenemos una guía sobre Ubuntu y Linux en Windows.

Aun así, trabajar en un entorno Linux sigue teniendo ventajas, sobre todo por estas dos razones.

  1. Las tareas básicas, como el análisis de archivos, la planificación de trabajo y la búsqueda de texto, se resuelven con herramientas de línea de comandos que en Linux vienen listas para usar.
  2. Los lenguajes de programación (Python, C++) y las bibliotecas relacionadas suelen esperar parámetros específicos de Linux o ubicaciones específicas del sistema de archivos, y en un Windows sin WSL eso puede causar errores.

Si juntamos todo esto, trabajar en un entorno Linux (nativo, en macOS o con WSL 2) evita perder tiempo reescribiendo herramientas básicas y reduce los problemas de compatibilidad entre sistemas operativos.

Ahora, echemos un vistazo a los conceptos básicos de Linux.

La unidad fundamental de Linux: "shell"

La shell (también conocida como terminal, consola o línea de comandos) es la interfaz de texto a través de la cual se envían comandos a la máquina. En Linux, el lenguaje de la shell se llama bash. A diferencia de los usuarios de Windows, que en su mayoría navegan haciendo clic en las ventanas, los desarrolladores de Linux están atados al teclado y escriben comandos en la shell. Si bien esta transición puede ser poco natural para aquellos sin experiencia en programación, los beneficios de desarrollar en Linux superan con creces la inversión inicial en aprendizaje.

Aprendiendo algunos conceptos importantes

En comparación con un lenguaje de programación bastante maduro, bash tiene solo unos pocos conceptos principales que debes aprender. Una vez que los domines, el resto de bash es simplemente memorización. Para ser más claro: dominar bash significa memorizar 20-30 comandos y sus argumentos más utilizados.

Linux puede parecer inaccesible para aquellos que no están familiarizados con el desarrollo debido a la forma en que los desarrolladores (sin esfuerzo) arrojan comandos esotéricos en la terminal cuando les apetece. La verdad es que solo conocen unos pocos comandos. Para todo lo demás, como cualquier mortal, buscan en la documentación, en Google o le preguntan a un asistente de IA (más abajo hay una sección sobre cómo hacerlo con cuidado).

Dejando de lado las pequeñas complicaciones en el camino, aquí están los conceptos clave de bash.

Sintaxis de comando

Los comandos siguen la sintaxis: {command} {arguments..}

Por ejemplo, en 'grep -inr', grep es el comando (para buscar una cadena de texto) y -inr son las banderas/argumentos que modifican lo que grep hace de forma predeterminada. La forma más directa de entender qué significa esto es escribir 'man grep' o buscar información sobre el comando. Recomiendo aprender los comandos y sus argumentos más utilizados: es demasiado difícil recordar qué hace cada bandera.

Alias de directorios

  • Directorio actual (¿dónde estoy?): .
  • Directorio padre del directorio actual: ..
  • Directorio de inicio del usuario: ~
  • Raíz del sistema de archivos (o el padre de todos los padres): /

Por ejemplo, para cambiar al directorio padre, debes escribir: cd ..

De manera similar, para copiar un archivo ubicado en "/ruta/al/archivo.txt" al directorio actual, debes escribir cp /path/to/file.txt . (nota el punto al final del comando). Dado que estos son solo alias, también puedes usar la ruta real en lugar de ellos.

Información útil

Tenemos varios cursos disponibles, los usuarios registrados pueden realizarlos gratuitamente en este enlace.

STDIN / STDOUT

Todo lo que escribes en la ventana y confirmas (presionando ENTER) se llama entrada estándar (STDIN).

Todo lo que el programa muestra en respuesta en la terminal (por ejemplo, texto de un archivo) se llama salida estándar (STDOUT).

Tuberías (piping)

  1. | La tubería toma STDOUT del comando a la izquierda de la tubería y lo convierte en STDIN para el comando a la derecha de la tubería. Ejemplo: echo 'test text' | wc -l
  2. El símbolo "mayor que" toma STDOUT del comando a la izquierda y lo escribe/sobrescribe en un nuevo archivo a la derecha. Ejemplo: ls > tmp.txt

  3. Dos símbolos "mayor que" toman STDOUT del comando a la izquierda y lo añaden a un archivo nuevo o existente a la derecha. Ejemplo: date >> tmp.txt

Patrones de búsqueda (wildcards)

Puedes pensar en ellos como el carácter % en SQL. Por ejemplo, puedes escribir WHERE first_name LIKE 'John%' para encontrar cualquier entrada que comience con el nombre John.

En bash, puedes escribir John*. Si quieres mostrar una lista de todos los archivos en un directorio que terminen en ".json", escribes: ls *.json

Completado con TAB

Bash a menudo completa los comandos automáticamente según una lógica determinada cuando comienzas a escribir un comando y presionas TAB.

Sin embargo, vale la pena probar algo como zsh o fish para la autocompletación, ya que recordar los comandos y todos sus argumentos es muy difícil. Además, estas herramientas ofrecen autocompletado basado en tu historial de comandos.

Salir

A veces te quedas atrapado en algún programa y no puedes salir. Esto es algo que ocurre con mucha frecuencia para los principiantes en Linux y puede ser muy desmotivador. A menudo, la salida se logra con algo que contiene la letra q. Es bueno recordar lo que se muestra a continuación y usarlo cuando te encuentres atrapado.

  • Bash CTRL+cqexit
  • Python: quit()
  • Nano: CTRL+x
  • Vim: :q!

Lo que recuerdo de los comandos de bash

Estos son los comandos que uso con más frecuencia en Linux (desde los más utilizados hasta los menos utilizados). Como mencioné antes, conocer solo un puñado de comandos te permitirá realizar una amplia variedad de tareas programables.

  • cd {directory} cambiar de directorio
  • ls -lha mostrar el contenido del directorio en forma de lista (detallada)
  • vim o nano editor de línea de comandos
  • touch {file} crear un nuevo archivo vacío
  • cp -R {original_name} {new_name} copiar un archivo o directorio (y todo su contenido)
  • mv {original_name} {new_name} mover o renombrar un archivo
  • rm {file} eliminar un archivo
  • rm -rf {file/folder} eliminar un archivo o carpeta sin posibilidad de recuperación [usar con cuidado]
  • pwd mostrar el directorio de trabajo actual
  • cat o less o tail o head -n10 {file} mostrar el contenido de un archivo en STDOUT
  • mkdir {directory} crear un directorio vacío
  • grep -inr {string} buscar una cadena en cualquier archivo en este directorio o en sus subdirectorios
  • column -s, -t <delimited_file> mostrar un archivo delimitado por columnas
  • tree -LhaC 3 mostrar la estructura de un directorio hasta 3 niveles de profundidad (con tamaños de archivo y directorios ocultos)
  • htop (o top) administrador de tareas
  • python3 -m venv .venv ; source .venv/bin/activate ; pip install {pip_package} crear y activar un entorno virtual de Python e instalar paquetes dentro de él (en distribuciones recientes como Debian 12 o Ubuntu 23.04 en adelante, pip install fuera de un entorno virtual suele bloquearse con el error "externally-managed-environment", y esto incluye --user)
  • pipx install {pip_package} instalar una herramienta de Python con su propio entorno aislado
  • pushd . ; popd ; dirs; cd - push/pop/view directorio en la pila + cambiar de nuevo al último directorio
  • sed -i "s/{find}/{replace}/g" {file} reemplazar una cadena en un archivo (en macOS, que usa la versión BSD de sed, hay que escribir sed -i '' con comillas vacías después de -i)
  • find . -type f -name '*.txt' -exec sed -i "s/{find}/{replace}/g" {} \; reemplazar una cadena en cada archivo en este y en los subdirectorios con un nombre que coincida con *.txt
  • tmux new -s session, tmux attach -t session crear una nueva sesión de terminal sin abrir una nueva ventana [nivel avanzado]
  • wget {link} descargar una página web o recurso web
  • curl -X POST -d "{key: value}" http://www.google.com enviar una solicitud HTTP a un servidor web
  • find <directory> mostrar una lista de todo el contenido de un directorio y sus subdirectorios de forma recursiva

Comandos avanzados y poco utilizados

Creo que es una buena práctica mantener una lista de comandos útiles en situaciones específicas, incluso si esas situaciones ocurren con poca frecuencia (por ejemplo, qué proceso está bloqueando un puerto de red específico). Aquí tienes algunos comandos no estándar que siempre tengo a mano:

  • lsof -i :8080 mostrar una lista de descriptores de archivos abiertos (-i es una bandera para interfaces de red)
  • ss -tulpn mostrar los sockets de red abiertos y los procesos que los usan (ss reemplaza a netstat, que se considera obsoleto)
  • dool -a transmitir actividad actual de disco, red, CPU, etc. (dool es el sucesor de dstat, que dejó de desarrollarse, y puede no estar en los repositorios de tu distribución)
  • nslookup <IP address> buscar el nombre de host para una dirección IP remota
  • strace -f -e <syscall> <cmd> rastrear las llamadas al sistema de un programa (-e es una bandera para filtrar llamadas al sistema específicas)
  • ps aux | head -n20 mostrar los procesos activos actuales
  • file <file> verificar el tipo de archivo (por ejemplo, ejecutable, binario, archivo de texto con codificación ASCII)
  • uname -a información sobre el kernel del sistema operativo
  • cat /etc/os-release información sobre el sistema operativo y su versión (lsb_release -a funciona solo si el paquete está instalado)
  • hostname verificar el nombre de host de la computadora actual (por ejemplo, el nombre que otros equipos pueden usar para acceder al tuyo)
  • pstree visualizar los procesos secundarios
  • time <cmd> ejecutar un comando y generar estadísticas sobre cuánto tiempo llevó ejecutarlo
  • CTRL + z ; bg; jobs; fg enviar un proceso a segundo plano en el tty actual y volver a traerlo al primer plano
  • cat file.txt | xargs -n1 | sort | uniq -c contar la cantidad de palabras únicas en un archivo
  • wc -l <file> contar el número de líneas en un archivo
  • du -ha mostrar el tamaño en disco de directorios y su contenido
  • zcat <file.gz> mostrar el contenido de un archivo de texto comprimido
  • scp <user@remote_host> <local_path> copiar un archivo desde un servidor remoto a local o viceversa
  • man {command} mostrar el manual (es decir, la documentación) para un comando (aunque muchas veces es más rápido buscarlo en Internet)

Usar un asistente de IA con la terminal

Hoy muchas personas le piden a un asistente de IA que les explique un comando o que arme una línea que combine varias herramientas, por ejemplo "cuenta cuántas líneas tiene cada archivo .log de esta carpeta". Es una ayuda útil para aprender, siempre que no ejecutes nada a ciegas.

  • Pide que te explique cada parte del comando y qué hace cada bandera, y compáralo con man.
  • Indica tu sistema operativo y tu shell, porque un comando para Linux puede comportarse distinto en macOS.
  • Lee el comando completo antes de pulsar ENTER, sobre todo si incluye rm -rf, sed -i, sudo o descargas encadenadas a un intérprete como curl ... | sh.
  • Pruébalo primero en una carpeta de práctica o sobre una copia de tus archivos.

Un asistente puede equivocarse o inventar banderas que no existen. Por eso conviene entender los comandos básicos de este artículo antes de delegar.

Este es un artículo de Alex Petralia Learn just enough Linux to get things done.

Para seguir aprendiendo

Leer otros artículos de Blog

Lee otros artículos relevantes del mundo de la tecnología y el espíritu empresarial.

Código · Tecnologías

El sistema de tipos en TypeScript

Hemos traducido un gran artículo escrito por un antiguo desarrollador de Amazon Web Services, He Zhenghao, y hemos aprendido

Actualizado el

Tecnologías

¿Qué es Formik?

Explicamos cómo funciona la biblioteca Formik para crear formularios en React y cuándo conviene usarla

Actualizado el

Todos los artículos