¿Cuál es la diferencia entre ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc ...?

68

Las respuestas a las preguntas sobre SO y askubuntu , junto con el examen (y la lectura de encabezados de) $HOMEe /etc/indican una cantidad de archivos que se pueden usar para establecer variables de entorno, que incluyen:

  • ~/.profile
  • ~/.bashrc
  • ~/.bash_profile
  • ~/.gnomerc
  • ~/.Rprofile
  • /etc/bash_bashrc
  • /etc/profile
  • /etc/screenrc

Reúno esos archivos en el /etc/trabajo para todos los usuarios, mientras que los archivos $HOMEson específicos del usuario. También deduzco que .profilese carga al iniciar sesión mientras que se .bashrccarga cuando /bin/bashse ejecuta. También entiendo que diferentes programas tienen diferentes archivos de configuración (por ejemplo, .Rprofilepara R). Pero agradecería alguna aclaración:

  • ¿Son *rcy los *profilearchivos fundamentalmente diferentes?
  • ¿Cuál es el alcance de dichos archivos (por ejemplo, qué archivos se usan comúnmente con Linux)
  • ¿Hay una jerarquía (por ejemplo, .bashrcsobrescribe las variables establecidas .settings)
  • ¿Cuál es una buena referencia para esta clase de archivos? Para las opciones en estos archivos?

Preguntas vinculadas

Abe
fuente
3
Ver la INVOCATIONsección en man bash. Vea el FHSartículo wiki sobre sistemas de archivos Linux. Eso le dará un buen comienzo y responderá algunas de estas preguntas. Los archivos con un punto ( .) anterior suelen ser específicos del usuario; residen en el $HOMEdirectorio del usuario .
3
¿Todos ellos? De Verdad?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams No estoy buscando los detalles, solo una descripción general de cómo se relacionan y cuándo uno debe usarse sobre el otro.
Abe

Respuestas:

48

La organización de los archivos de configuración es mucho menos uniforme de lo que parecen implicar sus preguntas. No hay una "clase", no hay una "jerarquía", y no hay un "zar de configuración" global ni un comité que decida una sintaxis común u otras generalizaciones limpias y agradables como las que está buscando. Sólo hay una multitud de aplicaciones separadas como R, bash, screeny el entorno de escritorio GNOME, todos los cuales tienen sus propias maneras de hacer las cosas, por lo que debe buscar en la documentación de cada programa individual para responder a cualquier específicas preguntas acerca de un archivo en particular. Si parece ad-hoc, es porque lo es: la mayoría del software Unix / Linux fue desarrollado para diferentes propósitos por diferentes personas que se dedicaron a la configuración de manera ligeramente diferente.

Para responder a sus otras preguntas puntualmente:

  • *rcy *profileno significan mucho, por lo que esta pregunta realmente no se puede responder. "rc" es simplemente una abreviatura o sufijo comúnmente utilizado para archivos de configuración. Su etimología se remonta a la antigüedad (en años informáticos), y probablemente significa ejecutar comandos (desde runcom ). El hecho de que las aplicaciones usen la misma palabra no significa que estén de acuerdo con las convenciones. "perfil" es un sufijo mucho menos común.

  • Definir "alcance". La mayoría de las aplicaciones no comparten archivos de configuración con otras aplicaciones no relacionadas. La única excepción posible es /etc/profiley .profile, que puede ser utilizada por múltiples shells diferentes (incluyendo al menos shy bash). Hay algo llamado entorno asociado con cada proceso en ejecución que puede contener variables que pueden afectar el comportamiento de dicho proceso. En general, las variables de entorno se establecen mediante los archivos de configuración de shell apropiados, o quizás los archivos de configuración de cualquier entorno de escritorio gráfico que esté utilizando. También hay archivos de configuración para "bibliotecas", como .inputrcreadline y .gtkrc*GTK, que afectarán a todas las aplicaciones que usan la biblioteca.

  • No, no existe una jerarquía global para los archivos de configuración. Nuevamente, consulte la documentación del programa específico en cuestión, por ejemplo, el bashmanual de bash. Una convención general en la que puede confiar es que la configuración del usuario $HOMEanula la configuración de todo el sistema /etc. Esto se logra generalmente leyendo el archivo del usuario después del sistema, de modo que las configuraciones posteriores sobrescriban las anteriores. Sin embargo, esto no es una garantía, y para obtener respuestas definitivas, debe consultar la documentación del programa específico que está utilizando.

  • No hay una "clase", al menos ninguna lo suficientemente general como para abarcar todos los archivos que ha enumerado en su pregunta, por lo que la cuestión de una referencia para dicha "clase" es discutible. Nuevamente, consulte la documentación del programa específico que está utilizando.

jw013
fuente
5

Creo que esta pregunta es demasiado amplia en muchos niveles, por ejemplo, está haciendo preguntas sobre al menos cuatro programas diferentes en una pregunta. Solo miraré la diferencia entre los archivos de configuración en /etcy $HOME.

Unix es un sistema operativo multi-usuario, esto significa que muchas personas diferentes pueden usar un sistema, ya sea mediante el uso de ssh, telneto Xorg. Para proporcionar una configuración estandarizada para sus usuarios, puede proporcionar una configuración de todo el sistema /etc/, normalmente su Distribución también la utiliza para proporcionar una configuración global para, por ejemplo, basho screen.

Por otro lado, algunos usuarios desean personalizar la configuración de sus programas por sí mismos, como combinaciones de teclas, colores o apariencia. Esto se hace a través del archivo de configuración en su $HOME. En resumen, /etc/proporciona una configuración de todo el sistema, mientras que los archivos de configuración en $ HOME permiten a los usuarios cambiar / anular la configuración de todo el sistema.

Ulrich Dangel
fuente
3

Parte de la respuesta proviene de esta publicación :

.bashrc es un script de shell que Bash ejecuta cada vez que se inicia de forma interactiva.

Contraste .bash_profiley .profileque solo se ejecutan al comienzo de un nuevo shell de inicio de sesión. (bash -l)

Usted elige si un comando va en .bashrccontra .bash_profiledependiendo de si desea que se ejecute una vez o para cada inicio shell interactivo.

Stan
fuente