diferencia entre bash.bashrc y / etc / environment file

42

Hasta la fecha solía configurar mis variables de entorno en el bash.bashrcarchivo. Recientemente me dijeron que usara el /etc/environmentarchivo. Bueno, ambos funcionan bien.

Entonces, ¿cuál es la diferencia entre ellos?

Busqué en Google esto y descubrí que "bashrc se usa para usuarios y entornos particulares, en todo el sistema". ¿Qué se entiende por todo el sistema aquí? /etc/bash.bashrcTambién está aplicando cambios en todo el sistema, supongo. Corrígeme si estoy equivocado. Cualquier tipo de ayuda será apreciada.

trapaank
fuente

Respuestas:

35

Una diferencia es que /etc/environmentcontiene solo definiciones variables y no parece pasar por ningún tipo de expansión / interpolación variable. Por lo tanto, no puede hacer referencia a variables en las definiciones. Esto, por ejemplo, no funcionará:

A="else"
B="something $A"

B será literalmente something $A, no lo esperado something else.

Ver esta pregunta .

Por cierto, la respuesta que encontró a través de Google parece referirse a un usuario ~/.bashrc, más que a todo el sistema /etc/bash.bashrc. Eso puede estar causando tu confusión.

roadmr
fuente
¿Cuál es el propósito de ~ / .bashrc cuando hay dos archivos que hacen lo mismo / etc / environment y /etc/bash.bashrc?
trapaank
66
El /etc/bash.bashrc se ejecuta si algún usuario abre un bash. ~ / .Bashrc solo se ejecuta si el propietario del directorio de inicio donde se guarda abre un bash.
André Stannek
18

El /etc/environmentarchivo establece el sistema variable en todo el sistema para cada usuario en el arranque. Los comandos en el /etc/bash.bashrcse ejecutan si bashcualquier usuario abre el shell. Por lo tanto, las variables no se establecerían a menos que bashse abra un shell al menos una vez.

André Stannek
fuente
Lo siento, soy novato en Linux. ¿Dónde se abrirá bash shell? y otra cosa cuando se abre bash shell, ¿anulará el conjunto de variables en / etc / enviornment o no?
trapaank
No estoy seguro de cuándo se ejecuta exactamente el / etc / environment pero Ubuntu /etc/bash.bashrc lo ejecuta cuando ingresa a su entorno de escritorio. Por eso funciona si configura las variables allí. Supongo que el entorno / etc / se ejecuta una vez durante el arranque antes de ingresar a su escritorio y que la ejecución de /etc/bash.bashrc sobrescribe las variables. Pero una vez más: no estoy seguro de esto.
André Stannek
44
Es al iniciar sesión, no arrancar!
slm
6

Y como usted pregunta sobre "todo el sistema ":

Los archivos de configuración ubicados en el /etcdirectorio se aplican a todos los usuarios del sistema. Para /etc/bash.bashrcesto significaría que todos y todo lo que está utilizando el "Borne Again Shell" alias Bash en esa máquina. Incluso si usted es el único ser humano que lo usa, podría haber "usuarios técnicos" afectados (simplemente eche un vistazo /etc/passwdy compruebe con qué frecuencia aparece el término "/ bin / bash", o use grep bash /etc/passwd | wc -l, lo que debería darle ese número directamente (es decir: "agarrar" todas las líneas que contienen la cadena "bash" del archivo "/ etc / passwd", y enviar los resultados ("|") al comando "wc" (recuento de palabras) para contar las líneas ("-l").

Entonces, para su usuario, es mucho más seguro modificarlo ~/.bashrc(es decir, el archivo ".bashrc" - con un punto inicial, sí - en su directorio de inicio, por ejemplo /home/ankur/.bashrc), que luego afecta a su usuario y deja todo lo demás solo . Los archivos /etcsolo deben cambiarse si los cambios en todo el sistema realmente están destinados.

Además: se usarán ambas configuraciones si existen. Primero, el archivo de todo el sistema (aquí:) /etc/bash.bashrcse lee y se "obtiene" (su configuración se aplica a la sesión actual), y luego los usuarios /home/username/.bashrcse manejan de la misma manera y, por lo tanto, pueden agregar o incluso cambiar / sobrescribir la configuración de la configuración global /etc/bash.bashrcarchivo.

Izzy
fuente
3

Más allá de la discusión de todo el sistema y del alcance del usuario, una diferencia más significativa es /etc/environmentque no es un script diferente ~/.bashrc.

No puede desreferenciar la variable dentro /etc/environment, su asignación de variable que toma el valor de la línea literalmente (como ya lo mencionó roadmr).

Su Ubuntu lo bloqueará si arruina el $PATHinterior /etc/environmental intentar agregar una nueva ruta

PATH=$PATH:/new_path

Si su página de inicio de sesión de Ubuntu Gnome o Unity no le permitió ingresar sin quejarse de la contraseña incorrecta. Y ha modificado recientemente /etc/environment, lo más probable es que sea el caso.

Una solución es iniciar sesión en la consola virtual CTRL+ ALT+ F1consola de inicio de sesión, verificar manualmente $PATHy corregir el /etc/environmentarchivo.

De acuerdo con esto , /etc/environmentse carga mediante la pila PAM, que llena la variable de entorno línea por línea.

legendbb
fuente
-1

La diferencia entre los dos es que el /etc/enivironmentarchivo funcionará para todos los usuarios, mientras que el archivo bash.bashrc funcionará particularmente solo para ese usuario. Y si hace algo mal en el /etc/environmentarchivo, las consecuencias pueden ser graves, mientras que puede deshacer fácilmente los cambios en el archivo bash.bashrc copiando el contenido del archivo / etc / environment. Pero la primera preferencia es dar al bash.bashrcarchivo y luego al archivo / etc / environment. No es que si realiza cambios en el bash.bashrcarchivo, entonces el terminal dará preferencia al archivo de usuario local (es decir, bash.bashrc) y luego al archivo principal (es decir, /etc/environment).

Pranit Bauva
fuente
Creo que estás confundiendo los archivos ~ / .bashrc y /etc/bash.bashrc. El primero es local para el usuario que abre un shell, el segundo es global para todos los usuarios que abren un shell.
Dennis