Risposte alle domande su SO e askubuntu, oltre a sfogliare (e leggere le intestazioni di) $HOME
e /etc/
, indica 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 quei file in /etc/
funziona per tutti gli utenti mentre i file in $HOME
sono specifici dell'utente. Raccolgo anche quel .profile
viene caricato al login mentre .bashrc
caricato quando /bin/bash
viene eseguito. Comprendo anche che programmi diversi hanno file di impostazioni diversi (ad es. .Rprofile
per R). Ma gradirei qualche chiarimento:
- Sono
*rc
e*profile
file fondamentalmente diversi? - Qual è lo scopo di tali file (ad es. quali file sono comunemente usati con Linux)
- Esiste una gerarchia (ad es.
.bashrc
sovrascrive le variabili impostate in.settings
) - Qual è un buon riferimento per questa classe di file? Per le opzioni in questi file?
Domande collegate
- "Come accedere a una variabile di ambiente bash dall'interno di R in emacs-ess?"
- "Differenza tra l'avvio di un'applicazione da una scorciatoia da tastiera e il terminale?"
Risposta accettata:
L'organizzazione dei file di configurazione è molto meno uniforme di quanto le tue domande sembrino implicare. Non c'è "classe", non c'è "gerarchia" e non c'è uno "zar di configurazione" globale né un comitato che decreti una sintassi comune o altre belle generalizzazioni pulite come quelle che stai cercando. C'è solo una moltitudine di applicazioni separate come R
, bash
, screen
e l'ambiente desktop GNOME, ognuno dei quali ha i propri modi di fare le cose, quindi dovresti guardare la documentazione per ogni singolo programma per rispondere a qualsiasi specifico domande su un particolare file. Se sembra ad-hoc, è perché lo è:la maggior parte del software Unix/Linux è stato sviluppato per scopi diversi da persone diverse che hanno eseguito la configurazione in modo leggermente diverso.
Per rispondere in modo puntuale alle altre tue domande:
-
*rc
e*profile
non significa molto, quindi non è possibile rispondere a questa domanda. "rc" è semplicemente un'abbreviazione o un suffisso comunemente usato per i file di configurazione. La sua etimologia risale a tempi antichi (in anni di computer), e probabilmente significa eseguire comandi (da runcom). Solo perché le applicazioni usano la stessa parola non significa che siano d'accordo sulle convenzioni. "profilo" è un suffisso molto meno comune. -
Definisci "ambito". La maggior parte delle applicazioni non condivide i file di configurazione con altre applicazioni non correlate. L'unica possibile eccezione è
/etc/profile
e.profile
, che può essere utilizzato da più shell differenti (incluso almenosh
ebash
). C'è qualcosa chiamato ambiente associato a ogni processo in esecuzione che può contenere variabili che possono influenzare il comportamento di detto processo. In genere, le variabili di ambiente sono impostate dai file di configurazione della shell appropriati, o forse dai file di configurazione di qualsiasi ambiente desktop grafico che stai utilizzando. Ci sono anche file di configurazione per "librerie", come.inputrc
per readline e.gtkrc*
per GTK, che interesserà tutte le applicazioni che utilizzano la libreria. -
No, non esiste una gerarchia globale per i file di configurazione. Ancora una volta, fare riferimento alla documentazione per il programma specifico in questione, ad esempio
bash
manuale perbash
. Una convenzione generale su cui di solito puoi fare affidamento è che le impostazioni dell'utente in$HOME
sovrascrivere la configurazione a livello di sistema in/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 dovresti fare riferimento alla documentazione per il programma specifico che stai utilizzando. -
Non esiste una "classe", almeno nessuna abbastanza generale da comprendere tutti i file che hai elencato nella tua domanda, quindi la domanda su un riferimento per tale "classe" è discutibile. Ancora una volta, fai riferimento alla documentazione del programma specifico che stai utilizzando.