Quelle est la différence entre ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?

68

Les réponses aux questions sur SO et askubuntu , ainsi que l' exploration (et la lecture des en-têtes) $HOMEet /etc/, indiquent un nombre de fichiers pouvant être utilisés pour définir des variables d'environnement, notamment:

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

Je suppose que les fichiers /etc/fonctionnent pour tous les utilisateurs, alors que ceux-ci $HOMEsont spécifiques à chaque utilisateur. Je rassemble également qui .profileest chargé à la connexion alors que .bashrcchargé quand /bin/bashest exécuté. Je comprends également que différents programmes ont différents fichiers de paramètres (par exemple, .Rprofilepour R). Mais j'apprécierais quelques éclaircissements:

  • Les fichiers *rcet les *profilefichiers sont-ils fondamentalement différents?
  • Quelle est la portée de tels fichiers (par exemple, quels fichiers sont couramment utilisés avec Linux)
  • Existe-t-il une hiérarchie ( .bashrcécrasement des variables définies par exemple .settings)
  • Qu'est-ce qu'une bonne référence pour cette classe de fichiers? Pour les options de ces fichiers?

Questions liées

Abe
la source
3
Voir la INVOCATIONsection dans man bash. Voir l' FHSarticle du wiki sur les systèmes de fichiers Linux. Cela vous donnera un bon départ et répondra à quelques-unes de ces questions. Les fichiers avec un point précédent ( .) sont généralement spécifiques à l'utilisateur - ils résident dans le $HOMErépertoire de l'utilisateur .
3
Tous? Vraiment?
Ignacio Vazquez-Abrams le
@ IgnacioVazquez-Abrams Je ne cherche pas les détails, mais une description générale de leurs relations et du moment où ils devraient être utilisés l'un par rapport à l'autre.
Abe

Réponses:

48

L'organisation des fichiers de configuration est beaucoup moins uniforme que vos questions ne semblent l'impliquer. Il n'y a pas de "classe", il n'y a pas de "hiérarchie", et il n'y a pas de "czar de configuration" global ni de comité décrivant une syntaxe commune ou d'autres généralisations bien propres comme celles que vous recherchez. Il y a seulement une multitude d'applications séparées comme R, bash, screenet l'environnement de bureau GNOME, qui ont tous leurs propres façons de faire, de sorte que vous devriez regarder la documentation de chaque programme pour répondre à toutes spécifiques questions sur un fichier particulier. Si cela semble ad-hoc, c'est parce que: la plupart des logiciels Unix / Linux ont été développés à des fins différentes par des personnes différentes, qui procédaient toutes de manière légèrement différente à la configuration.

Pour répondre à vos autres questions par points:

  • *rcet *profilene veulent pas dire grand chose, donc on ne peut pas vraiment répondre à cette question. "rc" est simplement une abréviation ou un suffixe couramment utilisé pour les fichiers de configuration. Son étymologie remonte à l'Antiquité (en années d'ordinateur) et signifie probablement des commandes d'exécution (à partir de runcom ). Ce n'est pas parce que les applications utilisent le même mot qu'elles s'entendent sur des conventions. "profil" est un suffixe beaucoup moins commun.

  • Définir "portée". La plupart des applications ne partagent pas les fichiers de configuration avec d'autres applications non liées. La seule exception possible est /etc/profileet .profile, qui peut être utilisée par plusieurs coques différentes (y compris au moins shet bash). Il existe quelque chose appelé un environnement associé à chaque processus en cours d'exécution qui peut contenir des variables pouvant affecter le comportement dudit processus. Généralement, les variables d'environnement sont définies par les fichiers de configuration du shell appropriés, ou peut-être par les fichiers de configuration de n'importe quel environnement de bureau graphique utilisé. Il existe également des fichiers de configuration pour les "bibliothèques", comme .inputrcpour readline et .gtkrc*pour GTK, qui affecteront toutes les applications qui utilisent la bibliothèque.

  • Non, il n'y a pas de hiérarchie globale pour les fichiers de configuration. Encore une fois, reportez-vous à la documentation du programme spécifique en question, par exemple, le bashmanuel de bash. Une convention générale sur laquelle vous pouvez généralement compter est que les paramètres utilisateur $HOMEremplacent la configuration globale du système dans /etc. Cela est généralement accompli en lisant le fichier utilisateur après le système, afin que les paramètres ultérieurs remplacent les anciens. Cependant, ce n'est pas une garantie et pour des réponses définitives, vous devriez vous référer à la documentation du programme spécifique que vous utilisez.

  • Il n'y a pas de "classe", du moins pas assez générale pour englober tous les fichiers que vous avez énumérés dans votre question, de sorte que la question d'une référence pour une telle "classe" est sans objet. Encore une fois, reportez-vous à la documentation du programme spécifique que vous utilisez.

jw013
la source
5

Je pense que cette question est trop large à tant de niveaux. Par exemple, vous posez des questions sur au moins quatre programmes différents en une seule. Je ne ferai que regarder la différence entre les fichiers de configuration de /etcet $HOME.

Unix est un système d'exploitation multi-utilisateurs, cela signifie que beaucoup de personnes différentes peuvent utiliser un système, que ce soit en utilisant ssh, telnetou Xorg. Pour fournir une configuration standardisée à vos utilisateurs, vous pouvez /etc/utiliser une configuration système globale. Cette distribution est généralement également utilisée par votre distribution pour fournir une configuration globale, par exemple, bashou screen.

Par ailleurs, certains utilisateurs souhaitent personnaliser les paramètres de leurs programmes, tels que les raccourcis clavier, les couleurs ou l'apparence. Cela se fait via le fichier de configuration dans leur fichier $HOME. En bref, /etc/fournit une configuration à l’échelle du système tandis que les fichiers de configuration de $ HOME permettent aux utilisateurs de modifier / annuler la configuration à l’échelle du système.

Ulrich Dangel
la source
3

Une partie de la réponse provient de ce post :

.bashrc est un script shell que Bash exécute à chaque démarrage interactif.

Contraste .bash_profileet .profilequi ne sont exécutés qu’au début d’un nouveau shell de connexion. (bash -l)

Vous choisissez si une commande va dans .bashrcvs en .bash_profilefonction de si vous souhaitez l'exécuter une fois ou pour chaque démarrage du shell interactif.

Stan
la source