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 usuariocp -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)
Enrm
,mv
, ycp
pide confirmación antes de sobrescribir o eliminar archivos.-f
(forzar): enrm
ymv
evita las confirmaciones y fuerza la acción.-v
(verbose): encp
,mv
, yrm
muestra información detallada de cada operación.-h
(human-readable): Enls
,df
, ydu
, muestra tamaños en formatos comprensibles (KB, MB, GB).-a
(todos los archivos): Enls
ycp
, 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