web-dev-qa-db-fra.com

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

Réponses aux questions sur DONC et askubunt , ainsi que piquer à travers (et lire les en-têtes de) $HOME et /etc/, indique un certain 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 rassemble ces fichiers dans /etc/ fonctionne pour tous les utilisateurs alors que les fichiers dans $HOME sont spécifiques à l'utilisateur. Je comprends aussi que .profile est chargé à la connexion alors que .bashrc chargé lorsque /bin/bash est exécuté. Je comprends également que différents programmes ont des fichiers de paramètres différents (par exemple .Rprofile pour R). Mais j'apprécierais quelques éclaircissements:

  • Sont *rc et *profile fichiers fondamentalement différents?
  • Quelle est la portée de ces fichiers (par exemple, quels fichiers sont couramment utilisés avec Linux)
  • Existe-t-il une hiérarchie (par exemple .bashrc remplace les variables définies dans .settings)
  • Quelle est une bonne référence pour cette classe de fichiers? Pour les options de ces fichiers?

Questions liées

70
Abe

L'organisation des fichiers de configuration est beaucoup moins uniforme que vos questions ne le laissent supposer. Il n'y a pas de "classe", il n'y a pas de "hiérarchie", et il n'y a pas de "configuration tsar" globale ni de comité qui décrète une syntaxe commune ou d'autres généralisations propres à Nice comme celles que vous recherchez. Il n'y a qu'une multitude d'applications distinctes comme R, bash, screen et l'environnement de bureau GNOME, qui ont tous leurs propres façons de faire les choses, donc vous devriez regarder à la documentation de chaque programme individuel pour répondre à toutes les questions spécifiques sur un fichier particulier. Si cela semble ad hoc, c'est parce que c'est le cas: la plupart des logiciels Unix/Linux ont été développés à des fins différentes par des personnes différentes qui ont toutes procédé à une configuration légèrement différente.

Pour répondre ponctuellement à vos autres questions:

  • *rc et *profile ne signifie pas grand-chose, il est donc impossible de 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 informatiques) et signifie probablement exécuter des commandes (de runcom ). Ce n'est pas parce que les applications utilisent le même mot qu'elles s'accordent sur les conventions. "profil" est un suffixe beaucoup moins courant.

  • Définissez la "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/profile et .profile, qui peut être utilisé par plusieurs shells différents (y compris au moins sh et bash). Il y a quelque chose appelé environnement associé à chaque processus en cours d'exécution qui peut contenir des variables qui peuvent affecter le comportement dudit processus. Généralement, les variables d'environnement sont définies par les fichiers de configuration Shell appropriés, ou peut-être les fichiers de configuration de l'environnement de bureau graphique que vous utilisez. Il existe également des fichiers de configuration pour les "bibliothèques", comme .inputrc pour readline et .gtkrc* pour GTK, qui affectera 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 bash manual pour bash. Une convention générale sur laquelle vous pouvez généralement compter est que les paramètres utilisateur dans $HOME remplacer la configuration à l'échelle du système dans /etc. Ceci est généralement accompli en lisant le fichier utilisateur après celui du système, de sorte que les paramètres ultérieurs remplacent les précédents. Cependant, ce n'est pas une garantie, et pour des réponses définitives, vous devez 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, donc la question d'une référence pour une telle "classe" est théorique. Encore une fois, reportez-vous à la documentation du programme spécifique que vous utilisez.

49
jw013

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

Unix est un système d'exploitation multi-utilisateurs, cela signifie que de nombreuses personnes différentes peuvent utiliser un système, soit en utilisant ssh, telnet ou Xorg. Pour fournir une configuration standardisée à vos utilisateurs, vous pouvez fournir une configuration à l'échelle du système dans /etc/, ceci est généralement également utilisé par votre distribution pour fournir une configuration globale, par exemple bash ou screen.

D'un autre côté, certains utilisateurs souhaitent personnaliser eux-mêmes les paramètres de leurs programmes, comme les raccourcis clavier, les couleurs ou l'apparence. Cela se fait via le fichier de configuration dans leur $HOME. Donc en bref /etc/ fournit une configuration à l'échelle du système tandis que les fichiers de configuration dans $ HOME permettent aux utilisateurs de modifier/remplacer la configuration à l'échelle du système.

5
Ulrich Dangel

Une partie de la réponse vient de cet article :

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

Contraste .bash_profile et .profile qui ne s'exécutent qu'au début d'un nouveau shell de connexion. (bash -l)

Vous choisissez si une commande va dans .bashrc contre .bash_profile selon que vous souhaitez qu'il s'exécute une fois ou à chaque démarrage interactif du shell.

3
Stan