Atajos y trucos de productividad (RSA-16)
Este capítulo incluye:
- Atajos de teclado en terminal
- Reutilización rápida de comandos
- Alias y funciones personalizadas
- Multiproceso y multitarea en bash
- Historia, autocompletado y edición de comandos
- Expresiones de patrón y globbing
1. Atajos de teclado en la terminal
Atajo | Acción |
---|---|
Ctrl + A | Ir al inicio de la línea |
Ctrl + E | Ir al final de la línea |
Ctrl + U | Borrar desde cursor al inicio |
Ctrl + K | Borrar desde cursor al final |
Ctrl + W | Borrar palabra anterior |
Ctrl + R | Buscar comando anterior (historia) |
Ctrl + L | Limpiar pantalla (clear ) |
Alt + . | Insertar último argumento del comando anterior |
Ctrl + T | Intercambiar letras bajo y antes del cursor |
2. Reutilizar comandos y argumentos
!! # Repite el último comando
!n # Repite el comando número n del historial
!sudo # Ejecuta último comando que empezó con 'sudo'
!tar:p # Muestra el comando sin ejecutarlo (modo seguro)
→ Puedes usar fc
para editar un comando anterior en tu editor:
$ fc
3. Historia y búsqueda avanzada
$ history # Ver comandos anteriores
$ history | grep apt # Buscar comandos por palabra clave
$ !123 # Ejecutar comando número 123
$ !!:1 # Primer argumento del último comando
→ La historia se guarda en ~/.bash_history
4. Alias para comandos frecuentes
Definir en ~/.bashrc
o ~/.bash_aliases
:
alias ll='ls -la'
alias actualizar='sudo apt update && sudo apt upgrade'
alias buscar='apt-cache search'
alias topmem='ps aux --sort=-%mem | head -n 10'
Aplicar:
$ source ~/.bashrc
5. Funciones avanzadas en bash
Ejemplo: eliminar archivos grandes automáticamente
function limpiar_grandes() {
find "$1" -type f -size +100M -exec rm -i {} \;
}
→ Uso: limpiar_grandes /var/log
6. Trabajar en segundo plano y multitarea
$ comando & # Ejecuta en segundo plano
$ jobs # Ver procesos activos
$ fg %1 # Traer tarea 1 al frente
$ disown # Desvincula proceso del terminal
Multiproceso con xargs
o parallel
:
$ ls *.jpg | xargs -n1 -P4 convert
7. Autocompletado y comodines (globbing)
Comodines comunes
*
→ cualquier número de caracteres?
→ un solo carácter[abc]
→ cualquiera de esos caracteres
Ejemplo:
ls *.log # Archivos terminados en .log
ls reporte[1-5].txt
Autocompletado y tabulador
- Usa
TAB
para completar comandos, rutas o nombres - Usa doble
TAB
para mostrar opciones disponibles - En muchos sistemas, está gestionado por
bash-completion
Instalación:
# apt install bash-completion
8. Redirecciones útiles
comando > salida.txt # Redirige salida estándar
comando >> salida.txt # Añade al final
comando 2> errores.txt # Redirige errores
comando &> todo.txt # Salida + errores
9. Comandos encadenados
comando1 && comando2 # Solo si comando1 fue exitoso
comando1 || comando2 # Solo si comando1 falla
comando1; comando2 # Ejecutar ambos sin importar el estado
10. Ejecución sobre múltiples archivos
Ejemplo con bucles:
for f in *.txt; do
grep "ERROR" "$f"
done
O usando find
:
find . -name "*.log" -exec grep "fallo" {} +
sed y awk: edición y análisis en terminal
Parte final dedicada a las potentes herramientas sed y awk.
Son dos herramientas fundamentales en la línea de comandos de Linux para manipulación y análisis de texto.
sed: editor de flujo
sed
permite editar texto línea por línea sin abrir archivos en un editor. Se usa para buscar, reemplazar, eliminar, insertar o mostrar contenido.
Ejemplos básicos de sed
Reemplazar texto:
sed 's/error/ERROR/' archivo.txt # Solo primera ocurrencia por línea
sed 's/error/ERROR/g' archivo.txt # Todas las ocurrencias
Eliminar líneas:
sed '/^$/d' archivo.txt # Eliminar líneas vacías
sed '/#TODO/d' script.sh # Eliminar líneas que contienen #TODO
Mostrar líneas específicas:
sed -n '5p' archivo.txt # Mostrar solo línea 5
sed -n '5,10p' archivo.txt # Mostrar líneas 5 a 10
Insertar líneas antes o después:
sed '/Servidor/a\\Configuración avanzada' archivo.txt # Añadir después
sed '/Servidor/i\\Inicio del bloque' archivo.txt # Añadir antes
Cambiar contenido en múltiples archivos:
find . -name "*.conf" -exec sed -i 's/puerto=80/puerto=8080/g' {} +
Ejemplos avanzados de sed
Reemplazar solo si aparece en contexto:
sed '/nginx/ s/error/ERROR/' log.txt # Solo si línea contiene nginx
Eliminar líneas duplicadas consecutivas:
sed '$!N; /^\(.*\)\n\1$/d; P; D' archivo.txt
Cambiar delimitador de CSV:
sed 's/,/|/g' datos.csv
Transformar minúsculas en mayúsculas (GNU sed):
sed 's/[a-z]/\U&/g' archivo.txt
awk: procesador de textos estructurados
awk
permite dividir líneas en campos, aplicar condiciones, calcular expresiones y generar reportes. Ideal para archivos con columnas como logs, CSV o tablas.
Ejemplos básicos de awk
Mostrar columna específica:
awk '{print $1}' archivo.txt # Primer campo
awk -F, '{print $2}' archivo.csv # Segundo campo, usando coma
Filtrar líneas por valor de campo:
awk '$3 > 80' notas.txt # Tercer campo mayor a 80
Sumar valores de una columna:
awk '{s+=$2} END {print s}' datos.txt # Suma total del segundo campo
Contar ocurrencias de un valor:
awk '$1 == "ERROR" {c++} END {print c}' log.txt
Ejemplos avanzados de awk
Formato de salida personalizado:
awk '{printf "%-10s %s\n", $1, $2}' datos.txt
Calcular promedio de valores:
awk '{s+=$2} END {print "Promedio:", s/NR}' datos.txt
Procesar archivo tipo CSV y calcular totales por campo:
awk -F, '{ventas[$1]+=$2} END {for (v in ventas) print v, ventas[v]}' ventas.csv
Combinar filtrado y cálculo:
awk '$3 >= 90 {print $1, "excelente"}' notas.txt
Contar palabras únicas:
awk '{for(i=1;i<=NF;i++) w[$i]++} END {for (i in w) print i, w[i]}' texto.txt