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 DATABASEoexport -p grep -E DB_SQL_. - Variables relacionadas con VPNs:
env grep -i vpn. Por ejemplo, al usar OpenVPN podrás verOVPN_CONFIGoOVPN_LOG. - Orden alfabético:
export -p sortoprintenv sortpara 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.envcon permisos restringidos (chmod 600). - En ambientes de contenedores Docker, emplea la sección
environment:en tusdocker-compose.ymlo--env-file. - Revisa variables con
declare -pxpara asegurarte de no exponer rutas o tokens innecesarios.
7. Otros shells: Bash vs Zsh vs Fish
- Bash y Zsh usan
export,export -pydeclare -x. - Fish emplea
set -x VAR valoryset -xmuestra las exportadas. - En POSIX shells (
sh),exportyenvsuelen 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!
Deja una respuesta