Ver variables de entorno exportadas

Truco en Linux: Ver variables de entorno exportadas

En cualquier sistema Linux, las variables de entorno juegan un papel esencial para configurar el comportamiento de shells, aplicaciones y servicios. A veces es imprescindible listar aquellas que han sido exportadas (es decir, que están disponibles para procesos hijos) para depurar problemas o documentar el entorno de ejecución. En este artículo detallado aprenderás varias técnicas profesionales para inspeccionar, filtrar y gestionar estas variables.

1. ¿Qué son las variables de entorno exportadas

Una variable de entorno es un par nombre=valor accesible dentro del entorno del proceso. Al exportar una variable (por ejemplo con export NOMBRE=valor en Bash), ésta se marca para que programas y scripts invocados desde ese shell la hereden. Las variables no exportadas permanecen confinadas al shell actual.

2. Métodos básicos para listar variables exportadas

  • env: muestra todas las variables de entorno actuales.
  • printenv: parecido a env, con opción de filtrar por nombre (printenv NOMBRE).
  • export -p (en Bash): lista exclusivamente las variables marcadas con export.
  • declare -x (en Bash y Zsh): lista las variables exportadas con un prefijo declare -x.
Comando Descripción Ejemplo
env Muestra todas las variables de entorno. env
printenv Imprime variables acepta nombre como argumento. printenv PATH
export -p Lista variables exportadas en Bash. export -p
declare -x Equivalente a export -p en Bash/Zsh. declare -x

3. Filtrar variables según criterios

En escenarios avanzados quizá necesites aislar un subconjunto de variables. He aquí algunos trucos:

  • Filtrado por nombre: env grep -i DATABASE o export -p grep -E DB_SQL_.
  • Variables relacionadas con VPNs: env grep -i vpn. Por ejemplo, al usar OpenVPN podrás ver OVPN_CONFIG o OVPN_LOG.
  • Orden alfabético: export -p sort o printenv sort para facilitar búsquedas.

4. Uso práctico en scripts y servicios

Supongamos que creas un script de despliegue que requiere varias variables exportadas. Puedes verificar al inicio:

#!/bin/bash
required=( DB_HOST DB_USER DB_PASS )
for var in {required[@]} do
  if [ -z (printenv var) ] then
    echo Error: la variable var no está definida o exportada.
    exit 1
  fi
done
# Continuar con la ejecución...

5. Persistencia de variables exportadas

Para que tus variables sobrevivan al cierre de sesión, añádelas en:

  • ~/.bashrc o ~/.zshrc: para usuarios individuales.
  • /etc/environment: formato clave=valor para todo el sistema.
  • /etc/profile.d/.sh: scripts de inicialización global.
  • Systemd: en servicios unitarios, sección [Service]Environment=VAR=valor.

6. Buenas prácticas y seguridad

  • No incluyas secretos sensibles (API keys, contraseñas) en archivos públicos. Usa /etc/credentials.env con permisos restringidos (chmod 600).
  • En ambientes de contenedores Docker, emplea la sección environment: en tus docker-compose.yml o --env-file.
  • Revisa variables con declare -px para asegurarte de no exponer rutas o tokens innecesarios.

7. Otros shells: Bash vs Zsh vs Fish

  • Bash y Zsh usan export, export -p y declare -x.
  • Fish emplea set -x VAR valor y set -x muestra las exportadas.
  • En POSIX shells (sh), export y env suelen ser suficientes.

8. Caso práctico: Variables para WireGuard

Imagina que gestionas túneles VPN con WireGuard. Podrías definir en ~/.bashrc:

export WG_INTERFACE=wg0
export WG_ENDPOINT=vpn.miempresa.com:51820
export WG_PRIVATE_KEY=/home/usuario/keys/wg_private.key

Y luego confirmar con:

export -p  grep -E WG_

Conclusión

Conocer cómo listar y filtrar las variables de entorno exportadas te brinda control total sobre los entornos de shell y servicios. Desde un chequeo rápido con env hasta scripts robustos que validan precondiciones, este truco es básico para administradores de sistemas, desarrolladores DevOps y usuarios avanzados. ¡Pruébalo y optimiza tu flujo de trabajo en Linux!

  • Hola 👋 , soy la IA de Linuxmind.dev, te puedo ayudar a aprender.
Gathering thoughts ...

Leave a Reply

Your email address will not be published. Required fields are marked *