Qual è la differenza tra .profile e .bash_profile e perché non ho un file .profile sul mio sistema?


12

Quindi sono abbastanza nuovo su Linux e recentemente ho installato Fedora 19 sul mio netbook. Voglio avere una comprensione più profonda di Linux e della CLI, quindi ora sto leggendo Learn Linux: The Hard Way .

Nell'esercizio 3 l'autore dà i seguenti comandi:

  • ls -al
  • cat .profile

Provo a seguire queste istruzioni ma invano. Non esiste alcun file .profile nella directory del mio nome utente, come posso vedere da ls -al. Da quello che ho imparato il file .bash_profile e .profile sono praticamente gli stessi. L'unica differenza che ho concluso dalla mia ricerca è che .bash_profile viene controllato per primo.

Quello che non capisco è perché ci sono più file per la stessa funzione in Linux, perché l'autore usa .profile e non .bash_profile (se capisco correttamente .profile non verrà letto quando il sistema trova prima .bash_profile) e come mai non ho il file .profile sul mio sistema?


Vedi anche unix.stackexchange.com/questions/45684/… che risponde a parte della tua domanda. Inoltre, unix.stackexchange.com/questions/67940/… mostra uno dei motivi per cui questi vari file possono creare confusione per cose più avanzate di quelle che probabilmente stai ancora affrontando.
msw

Risposte:


13

I .profilerisale al guscio originale Bourne noto come sh. Poiché la shell GNU bashè (a seconda delle sue opzioni) un superset della shell Bourne, entrambe le shell possono usare lo stesso file di avvio. Cioè, a condizione che shvengano inseriti solo i comandi.profile

Ad esempio, aliasè un comando incorporato valido bashma sconosciuto a sh. Pertanto, se avessi solo un .profilenella tua home directory e metti una aliasdichiarazione in esso, shsi lamenterebbe. Quindi esiste un file specifico di bash che ha comandi di inizializzazione della shell che bash leggerà se e solo se non è presente un .profilefile.

In realtà è un po 'una semplificazione eccessiva in alcune installazioni, e non ho familiarità con Fedora. Sotto bash, /etc/profileviene letto dalla shell prima di qualsiasi file nella tua home directory. Se esiste uno script di inizializzazione a livello di sistema, spesso si dice qualcosa del genere

if there is a $HOME/.profile:
   source it
elseif bash is my shell and there is a $HOME/.bash_profile:
   source that

Perché è così? Un tentativo di compatibilità attraverso decenni di dialetti shell. Perché il tutorial è scritto in questo modo? La shell Bourne non viene più utilizzata molto di più e alcune persone non sanno nemmeno che esiste un'altra shell simile a Bourne oltre a bash. Anche quando la sintassi (limitata) di Bourne viene utilizzata per una maggiore compatibilità multipiattaforma, viene spesso eseguita dasho bash in modalità di compatibilità POSIX. In effetti, l'attuale sorgente di shell Bourne è probabilmente un componente protetto da copyright di Unix System V che sembra essere di proprietà di Novell ora, ma non ho idea di cosa, se non altro, ci stanno facendo.

Per l'utente principiante, utilizzare uno $HOME/.profileo $HOME/.bash_profileentrambi, e andrà tutto bene. Dal momento che hai già .bash_profilelavorato su questo perché potrebbe contenere elementi specifici del sistema necessari per l'installazione.


Grazie! Penso di capirlo un po 'meglio ora, ancora molto da imparare immagino.
Emiroe,

Molto di questo è spazzatura storica che davvero non hai bisogno di sapere; concentrati solo sull'ultimo paragrafo della mia risposta. Inoltre, dato che sei nuovo qui, puoi votare e accettare una risposta che è la più alta forma di ringraziamento qui.
msw,

Sì, ho già accettato la tua risposta. Non mi aspettavo che qualcuno ci mettesse così tanto impegno, quindi sono molto grato. Ho accettato la tua risposta ma non posso votarla perché richiede 15 reputazione e ne ho solo 8. Mi dispiace per quello!
Emiroe,

Ho dimenticato il limite di 15 ripetizioni; hai ragione.
msw,

4
Bonus storico n. 1 : la vera shell Bourne è finalmente fuggita dalla prigionia. minnie.tuhs.org ha il codice sorgente completo di V7 (la prima versione unix con la shell Bourne), e heirloom.sourceforge.net ha una versione leggermente più recente della shell Bourne che è ancora effettivamente utilizzabile. Bonus storico n. 2 : aliasrichiesto da POSIX, quindi non ce ne sono molti in shgiro che non lo conoscono.
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.