Comandos útiles de Bash en Linux: filtrado con grep, enlaces simbólicos, gestión de firewalls, lectura de entrada, bucles for y administración de usuarios con awk

grep: Búsqueda y filtrado de texto

Utilizado comúnmente para buscar patrones dentro de archivos o salidas de comandos. Ejemplos prácticos:

  • Ver procesos Java: ps -ef | grep java
  • Obtener solo el ID del proceso Java: ps -ef | grep java | grep -v grep | awk '{print $2}'
Opción Descripción
-c Muestra el número de líneas que coinciden con el patrón.
-i Ignora diferencias entre mayúsculas y minúsculas.
-l Muestra solo los nombres de archivos que contienen coincidencias.
-n Mostrar la línea junto con su número.
-v Selecciona líneas que NO coinciden con el patrón (exclusión).
-w Coincidencia exacta de palabrsa completas.
-r Búsqueda recursiva en directorios.

ln: Creación de enlaces simbólicos

Permite crear accesos directos a archivos o directorios.

ln -s /usr/local/redis /home/yuxiaobin/redis

Este comando crea un enlace simbólico llamado redis en /home/yuxiaobin/ que apunta al directorio /usr/local/redis.
Nota: El flag -s indica enlace simbólico; sin él, se crea un enlace duro (no compatible con directorios).

iptables: Configuración temopral de reglas de firewall

# Ver listado de reglas
iptables -L -n

# Abrir puerto TCP temporalmente
iptables -A INPUT -p tcp --dport 61616 -j ACCEPT

# Persistir regla tras reinicio
vi /etc/rc.d/init.d/iptables
service iptables restart

firewall-cmd: Gestión de firewalls con systemd

# Estado del servicio
firewall-cmd --state

# Detener el servicio
systemctl stop firewalld.service

# Deshabilitar inicio automático
systemctl disable firewalld.service

# Añadir puerto permanentemente
sudo firewall-cmd --add-port=8002/tcp --permanent

read: Capturar entrada desde terminal

Permite solicitar datos al usuario durante la ejecución del script.

#!/bin/bash
echo "Ingrese el nombre de la rama:"
read branch_name

if [ -z "$branch_name" ]; then
    branch_name="master"
fi

echo "Rama seleccionada: $branch_name"
git checkout "$branch_name"

Con mensaje personalizado:

read -p "¿Desea continuar? (y/n): " respuesta

if [[ "$respuesta" == "y" || "$respuesta" == "Y" ]]; then
    echo "Procediendo..."
elif [[ "$respuesta" == "n" || "$respuesta" == "N" ]]; then
    echo "Operación cancelada."
else
    echo "Entrada inválida."
fi

Argumentos en scripts: Uso de $1, $2...

Recibir parámetros al llamar al script.

#!/bin/bash
if [ -z "$1" ]; then
    echo "Uso: $0 <nombre>"
else
    echo "Hola $1, ¿cómo estás hoy?"
fi
</nombre>

for: Bucle para iterar sobre elementos

Ejemplo: mover y copiar archivos SQL que contienen "11" en su nombre.

#!/bin/bash
for file in $(ls . | grep '.sql' | grep '11'); do
    mv copy/$file copy/${file}.bak
    cp $file copy/
done

Funcionamiento: - Busca archivos .sql que contengan "11". - Renombra sus versiones en copy/ añadiendo .bak. - Copia los originales a la carpeta copy/.

useradd: Crear nuevos usuarios

Crear un nuevo usuario con configuraciones predeterminadas.

useradd tomcat -U -m -s /bin/bash
passwd tomcat

Esto crea un usuario llamado tomcat, con grupo asociado, directorio personal y shell por defecto. Se requiere establecer contraseña con passwd.

awk: Procesamiento avanzado de datos estructurados

Herramienta poderosa para aálisis de texto, especialmente con archivos CSV o tabulados.

  • Imprimir toda la línea: awk '{print $0}' archivo.csv
  • Usar separador personalizado: awk -F ',' '{print $1}' archivo.csv
  • Número de campos (NF) y filas (NR): ``` awk -F ',' '{total += $8} END {print "Total:", total, "Promedio:", total/NR}' archivo.csv
  • Filtrar por expresión regular: ``` awk -F '\t' '/The/ {print $15}' libro.tsv
  • Comparación exacta: ``` awk -F ',' '$7 == "Marítimo" {print $1, $2, $3, $7}' datos.csv
  • Variables y cálculos acumulativos: ``` awk -F ',' '{total += $8; printf "%s\t%s\t%-5s\t%s\n", $1, substr($2,1,2), $3, $NF} END {printf "Total: %s\tPromedio: %.2f\n", total, total/NR}' datos.csv
    
    

Complementos útiles

  • Mostrar primeras 200 líneas de un archivo: head xxx.log -n 200
  • Reemplazar texto en líneas específicas con sed: sed -i '1,10s/12.02.00/11.2.0.4/g' xxx.dmp

Etiquetas: bash grep ln iptables firewall

Publicado el 8-30 08:13