Bash

Conceptos básicos

  • Shell: Interfaz de línea de comandos que interpreta y ejecuta los comandos que el usuario ingresa.
  • Bash (Bourne Again Shell): Una versión mejorada del shell Bourne, muy popular en Linux y macOS.
  • Terminal: Aplicación que permite interactuar con el shell.
  • Prompt: Símbolo que indica que el shell está listo para recibir comandos (ej. $, #).
# unable to lock database
ps aux | grep pacman
sudo rm /var/lib/pacman/db.lck
# busqueda
find . -name "*.fuse_hidden"
find /home/usuario/documentos -name "*.fuse_hidden"
find ruta_del_directorio -name "*.fuse_hidden"
# patrones de coincidencia
find . -name "*documento*"
find . -name "documento?.txt"
find . -iname "*Documento*"

# lista de archivos
grep "nombre" archivo1 archivo2 archivo3 ...
grep "archivo.txt" *
echo $XDG_SESSION_TYPE

Comandos esenciales

  • Navegación de directorios
    • pwd: Muestra el directorio actual.
    • ls: Lista archivos y carpetas.
    • cd <ruta>: Cambia el directorio actual.
    • mkdir <nombre>: Crea un nuevo directorio.
    • rmdir <nombre>: Elimina un directorio vacío.
  • Gestión de archivos
    • touch <archivo>: Crea un archivo vacío.
    • cp <origen> <destino>: Copia archivos o directorios.
    • mv <origen> <destino>: Mueve o renombra archivos/directorios.
    • rm <archivo>: Elimina un archivo.
    • rm -r <directorio>: Elimina un directorio y su contenido.
  • Visualización y edición
    • cat <archivo>: Muestra el contenido de un archivo.
    • less <archivo>: Permite navegar por el contenido de un archivo.
    • nano <archivo>: Editor de texto en terminal.
    • vim <archivo>: Editor de texto avanzado.

Gestión de procesos

  • ps: Lista procesos en ejecución.
  • top: Muestra procesos en tiempo real.
  • kill <PID>: Termina un proceso por su ID.
  • killall <nombre_proceso>: Termina todos los procesos con ese nombre.
  • &: Ejecuta un comando en segundo plano.

Redirecciones y pipes

  • Redirecciones
    • >: Redirige la salida a un archivo, sobrescribiendo.
    • >>: Redirige la salida a un archivo, agregando.
    • <: Toma la entrada de un archivo.
  • Pipes
    • |: Conecta la salida de un comando como entrada de otro.
    • Ejemplo: ls -l | grep "txt"

Variables y scripts

  • Variables
    • VAR="valor": Define una variable.
    • echo $VAR: Muestra el valor de la variable.
    • Variables especiales:
      • $?: Código de salida del último comando.
      • $$: PID del proceso actual.
      • $#: Número de argumentos pasados al script.
      • $1, $2, ...: Argumentos posicionales.
  • Scripts
    • Archivos de texto con comandos bash ejecutables.
    • Primer línea: #!/bin/bash
    • Permisos: chmod +x script.sh
    • Ejecución: ./script.sh

Control de flujo

  • Condicionales
    • if [ condición ]; then ... elif ... else ... fi
    • Ejemplo:

bash if [ -f archivo.txt ]; then echo "El archivo existe" else echo "No existe" fi

  • Bucles
    • for variable in lista; do ... done
    • while [ condición ]; do ... done
    • Ejemplo:

bash for i in {1..5}; do echo "Número $i" done

Permisos y usuarios

  • chmod: Cambia permisos de archivos/directorios.
    • Ejemplo: chmod 755 archivo.sh
  • chown: Cambia propietario y grupo.
    • Ejemplo: chown usuario:grupo archivo.sh
  • whoami: Muestra el usuario actual.
  • sudo: Ejecuta comandos como superusuario.

Paquetes y sistemas

  • Gestores de paquetes
    • Debian/Ubuntu: apt install <paquete>
    • Arch Linux: pacman -S <paquete>
    • Red Hat/Fedora: dnf install <paquete>
  • Actualización del sistema
    • apt update && apt upgrade
    • pacman -Syu

Comandos avanzados

  • grep: Busca patrones en archivos.
  • awk: Procesamiento de texto avanzado.
  • sed: Editar flujos de texto.
  • find: Buscar archivos y directorios.
  • tar: Comprimir y descomprimir archivos.
  • zip / unzip: Comprimir y descomprimir archivos zip.
  • ssh: Conexión remota segura.
  • scp: Copiar archivos a través de SSH.

Recursos y referencias

Renombrar múltiples archivos con Bash

Comandos de renombrado

  • rename 'y/A-Z/a-z/' * : Convierte todos los nombres de archivo a minúsculas.
  • rename 'y/a-z/A-Z/' * : Convierte todos los nombres de archivo a mayúsculas.
  • rename 's/\.log$/\.txt/' *.log : Cambia la extensión .log a .txt.
  • rename 's/\b(\w)/\U$1/g' * : Capitaliza la primera letra de cada palabra en los nombres de archivo.

Utilidades de rename

  • Diferentes utilidades de rename existen según la distribución (Perl rename vs util-linux rename).
  • Permiten operaciones complejas con expresiones regulares.
  • Se pueden usar en scripts para automatizar procesos de renombrado.

Buenas prácticas en organización de código y equipos

  • Mantener bloques únicos y autocontenidos.
  • Al hacer pull request, englobar los cambios dentro de la carpeta correspondiente.
  • Escalabilidad: organizar código y equipos pensando en el crecimiento del proyecto.
  • Factores de colaboración: definir flujos de trabajo claros, revisiones de código y estándares compartidos.

Flujos de trabajo de Git

  • Integración continua (CI):
    • Ejecutar tests automatizados.
    • Comprobaciones de calidad de código.
    • Añadir requisitos obligatorios en las pull requests.
  • Despliegue continuo (CD):
    • Automatizar despliegues a producción.
    • Notificar automáticamente a equipos (Slack, email) sobre nuevas versiones.
  • Gestión de proyectos:
    • Herramientas como Jira, Asana, Trello.
    • Automatización de tickets o tareas según ramas desplegadas en producción.

Herramientas de control de calidad

  • Detectan problemas de diseño, sintaxis y funcionalidad.
  • Analizan el código y sugieren refactorizaciones.
  • Ejemplos: linters, SonarQube.
  • Automatización de tareas:
    • Calcular el número de versión automáticamente con Git.
    • Ejecutar scripts de validación antes de merges o despliegues.

Recursos adicionales