Qual è la differenza tra ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc ...?


68

Le risposte alle domande su SO e askubuntu , insieme a dare un'occhiata (e leggere le intestazioni di) $HOMEe /etc/, indicano un numero di file che possono essere utilizzati per impostare le variabili di ambiente, tra cui:

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

Raccolgo che i file /etc/funzionano per tutti gli utenti mentre i file in $HOMEsono specifici dell'utente. Ho anche capito che .profileviene caricato all'accesso mentre .bashrccaricato quando /bin/bashviene eseguito. Capisco anche che programmi diversi hanno file di impostazioni diverse (ad es. .RprofilePer R). Gradirei alcuni chiarimenti:

  • Sono *rce *profilefile di fondamentalmente diverso?
  • Qual è lo scopo di tali file (ad es. Quali file sono comunemente usati con Linux)
  • Esiste una gerarchia (ad esempio .bashrcsovrascrive le variabili impostate in .settings)
  • Qual è un buon riferimento per questa classe di file? Per le opzioni in questi file?

Domande collegate


3
Vedi la INVOCATIONsezione in man bash. Vedi l' FHSarticolo wiki sui filesystem Linux. Questo ti darà un buon inizio e risponderà a un paio di queste domande. I file con un punto precedente ( .) sono in genere specifici dell'utente: risiedono nella $HOMEdirectory dell'utente .

3
Tutti loro? Veramente?
Ignacio Vazquez-Abrams,

@ IgnacioVazquez-Abrams Non sto cercando i dettagli, solo una descrizione generale di come si relazionano e quando uno dovrebbe essere usato sull'altro.
Abe

Risposte:


48

L'organizzazione dei file di configurazione è molto meno uniforme di quanto sembrino implicare le tue domande. Non esiste una "classe", non esiste una "gerarchia" e non esiste un "zar di configurazione" globale né un comitato che decreta una sintassi comune o altre belle generalizzazioni pulite come quelle che stai cercando. C'è solo una moltitudine di applicazioni separate come R, bash, screene l'ambiente desktop GNOME, i quali hanno tutti i loro modi di fare le cose, quindi si dovrebbe guardare la documentazione per ogni singolo programma per rispondere ad eventuali specifiche domande su un particolare file. Se sembra ad-hoc, è perché lo è: la maggior parte del software Unix / Linux là fuori è stata sviluppata per scopi diversi da persone diverse che hanno seguito la configurazione in modo leggermente diverso.

Per rispondere alle altre domande in modo puntuale:

  • *rce *profilenon significano molto, quindi non è possibile rispondere a questa domanda. "rc" è semplicemente un'abbreviazione o suffisso comunemente usato per i file di configurazione. La sua etimologia risale ai tempi antichi (negli anni dei computer), e probabilmente significa comandi di esecuzione (da runcom ). Solo perché le applicazioni usano la stessa parola non significa che siano d'accordo sulle convenzioni. "profilo" è un suffisso molto meno comune.

  • Definire "ambito". La maggior parte delle applicazioni non condivide i file di configurazione con altre applicazioni non correlate. L'unica possibile eccezione è /etc/profilee .profile, che può essere utilizzata da più shell diverse (incluso almeno she bash). C'è qualcosa chiamato un ambiente associato ad ogni processo in esecuzione che può contenere variabili che possono influenzare il comportamento di detto processo. Generalmente, le variabili di ambiente sono impostate dai file di configurazione della shell appropriati, o forse dai file di configurazione di qualunque ambiente desktop grafico che si sta utilizzando. Esistono anche file di configurazione per "librerie", come .inputrcper readline e .gtkrc*per GTK, che influenzeranno ogni applicazione che utilizza la libreria.

  • No, non esiste una gerarchia globale per i file di configurazione. Ancora una volta, consultare la documentazione per il programma specifico in questione, ad esempio il bashmanuale di bash. Una convenzione generale su cui di solito puoi fare affidamento è che le impostazioni dell'utente $HOMEsostituiscono la configurazione a livello di sistema /etc. Ciò si ottiene in genere leggendo il file utente dopo quello di sistema, in modo che le impostazioni successive sovrascrivano quelle precedenti. Tuttavia, questa non è una garanzia e per le risposte definitive è necessario fare riferimento alla documentazione per il programma specifico che si sta utilizzando.

  • Non esiste una "classe", almeno nessuna abbastanza generale da comprendere tutti i file che hai elencato nella tua domanda, quindi la domanda di un riferimento per tale "classe" è controversa. Ancora una volta, consultare la documentazione del programma specifico che si sta utilizzando.


5

Penso che questa domanda sia troppo ampia su così tanti livelli, ad esempio stai ponendo domande su almeno quattro diversi programmi in una domanda. Vedrò solo la differenza tra i file di configurazione in /etce $HOME.

Unix è un sistema operativo multiutente, questo significa molte persone differenti possono utilizzare un sistema, utilizzando ssh, telneto Xorg. Per fornire una configurazione standardizzata per i tuoi utenti, puoi fornire una configurazione a livello di sistema, che in /etc/genere viene utilizzata anche dalla tua distribuzione per fornire una configurazione globale, ad esempio basho screen.

D'altro canto, alcuni utenti desiderano personalizzare le impostazioni dei propri programmi come combinazioni di tasti, colori o aspetto. Questo viene fatto tramite il file di configurazione nel loro $HOME. Quindi in breve /etc/fornisce una configurazione a livello di sistema mentre i file di configurazione in $ HOME consentono agli utenti di modificare / sovrascrivere la configurazione a livello di sistema.


3

Parte della risposta arriva da questo post :

.bashrc è uno script di shell che Bash esegue ogni volta che viene avviato in modo interattivo.

Contrasto .bash_profilee .profileche vengono eseguiti solo all'inizio di una nuova shell di accesso. (bash -l)

Sei tu a scegliere se un comando va .bashrccontro vs a .bash_profileseconda che tu voglia eseguirlo una volta o per ogni avvio interattivo della shell.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.