Apuntes bash

No es un bug, es una característica del shell.

Manipulación de archivos y redirección en Bash

Vamos a ver como crear, mover, copiar, eliminar archivos y visualizar su contenido, junto con técnicas de redirección, comandos encadenados y el manejo de flujos estándar.

Comandos para gestionar archivos

Estos comandos permiten copiar, mover y eliminar archivos y directorios:

  • cp archivo_origen archivo_destino Copia un archivo de un lugar a otro.
    cp ./documento.txt ~/Documentos/ copiaria documento.txt (si estas en su misma carpeta) a la capeta Documentos de tu usuario
  • cp -r carpeta_origen carpeta_destino Copia una carpeta completa.
  • mv archivo_origen archivo_destino Mueve o renombra un archivo.
  • mv carpeta_origen carpeta_destino Mueve un directorio.
  • rm archivo Elimina un archivo.
  • rm -r carpeta Borra una carpeta y todo su contenido.

Ejemplo práctico:

Para hacer una copia de seguridad de un documento antes de modificarlo:

cp informe.txt informe_backup.txt

Si deseas mover todos los archivos .jpg a una carpeta llamada "Fotos":

mv *.jpg Fotos/

Visualización del contenido de archivos

Estos comandos permiten inspeccionar el contenido de archivos sin necesidad de abrirlos en un editor:

  • cat archivo.txt Muestra todo el contenido del archivo.
  • less archivo.txt Permite desplazarse por el contenido con las flechas.
  • head -n 10 archivo.txt Muestra las primeras 10 líneas.
  • tail -n 10 archivo.txt Muestra las últimas 10 líneas.

Ejemplo práctico:

Si quieres ver las primeras líneas de un archivo de registros:

head -n 20 log.txt

Para monitorear un archivo de registros en tiempo real:

tail -f log.txt

Redirección de entrada y salida

Redirigir la salida de comandos a archivos o modificar el flujo de datos permite automatizar procesos.

  • comando > archivo.txt Redirige la salida estándar, sobrescribiendo el archivo.
  • comando >> archivo.txt Añade la salida al final del archivo.
  • comando < archivo.txt Usa el contenido de un archivo como entrada.
  • comando 2> error.txt Guarda solo los errores en un archivo.
  • comando &> archivo.txt Redirige la salida estándar y los errores al mismo archivo.

`stdout` y `stderr`: Flujos de salida estándar

Cuando ejecutamos comandos en Bash, los resultados pueden aparecer en dos flujos distintos:

  • `stdout` (Standard Output) La salida estándar del comando.
  • `stderr` (Standard Error) Mensajes de error generados por el comando.

Ejemplo práctico:

Si ejecutamos:

ls /home/user/

Los archivos listados aparecen en `stdout`. Pero si ejecutamos:

ls /directorio_inexistente

El mensaje de error se imprimirá en `stderr`.

Redirección específica de `stdout` y `stderr`:

  • ls > archivos.txt Guarda solo la salida estándar en un archivo.
  • ls /directorio_inexistente 2> errores.txt Guarda solo los errores en un archivo.
  • ls /home/user &> salida.txt Guarda `stdout` y `stderr` en el mismo archivo.
  • comando 2>/dev/null Descarta los errores sin mostrarlos.

Pipes (|) y encadenamiento de comandos

El operador | permite encadenar comandos, enviando la salida de uno como entrada del siguiente.

  • ls -l | less Muestra los archivos con paginación.
  • cat archivo.txt | grep "error" Filtra líneas que contienen "error".
  • ps aux | grep firefox Busca procesos relacionados con Firefox.
  • df -h | grep "/dev/sd" Filtra información sobre discos montados.
  • ls -l | more Muestra la salida del comando pantalla por pantalla y solo avanzará cuando presiones Espacio o Enter.

Ejemplo práctico:

Para listar archivos ordenados por tamaño de forma legible:

ls -lhS | less

Si necesitas ver los procesos de tu sistema ordenados por consumo de memoria:

ps aux | sort -k4 -nr | head

Opciones (flags)

Habrás observado que algunos comandos admiten las mismas opciones:

  • -r o -R (recursivo) Se usa en comandos como cp, mv y rm para trabajar con directorios completos.
  • -i (interactivo) En rm, mv, y cp pide confirmación antes de sobrescribir o eliminar archivos.
  • -f (forzar): en rm y mv evita las confirmaciones y fuerza la acción.
  • -v (verbose): en cp, mv, y rm muestra información detallada de cada operación.
  • -h (human-readable): En ls, df, y du, muestra tamaños en formatos comprensibles (KB, MB, GB).
  • -a (todos los archivos): En ls y cp, incluye archivos ocultos (.).

En Bash, puedes escribir varias opciones juntas (-iR) o separadas (-i -R) y el comportamiento es el mismo:


cp -iR carpeta_origen carpeta_destino
cp -i -R carpeta_origen carpeta_destino
# es lo mismo 
TOP