Care este diferența dintre ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …? (Unix, Bash, Variabile De Mediu, Profil, Setări, Bashrc)

Abe a intrebat.

Răspunsurile la întrebările de pe SO și askubuntu, împreună cu răsfoirea (și citirea antetelor de) $HOME și /etc/, indică un număr de fișiere care pot fi folosite pentru a seta variabilele de mediu, inclusiv:

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

Înțeleg că fișierele din /etc/ funcționează pentru toți utilizatorii, în timp ce fișierele din $HOME sunt specifice fiecărui utilizator. De asemenea, am înțeles că .profile este încărcat la conectare, în timp ce .bashrc se încarcă atunci când /bin/bash este executat. De asemenea, înțeleg că diferite programe au fișiere de setări diferite (de ex. .Rprofile pentru R). Dar aș aprecia niște clarificări:

  • Sunt *rc și *profile sunt fundamental diferite?
  • Care este domeniul de aplicare al acestor fișiere (de exemplu, ce fișiere sunt utilizate în mod obișnuit cu Linux)
  • Există o ierarhie (de ex. .bashrc suprascrie variabilele setate în .settings)
  • Care este o bună referință pentru această clasă de fișiere? Pentru opțiunile din aceste fișiere?

Întrebări legate

  • „Cum se accesează o variabilă de mediu bash din R în emacs-ess?”
  • „Diferența dintre lansarea unei aplicații de la o comandă rapidă de la tastatură vs. terminal?”

Comentarii

  • A se vedea INVOCATION secțiunea din man bash. Consultați secțiunea FHS articolul din wiki despre sistemele de fișiere Linux. Acesta vă va oferi un bun început și va răspunde la câteva dintre aceste întrebări. Fișierele cu un punct anterior (.) sunt, de obicei, specifice utilizatorului – ele se află în fișierul $HOME al utilizatorului. – utilizator13742
  • Toate? Chiar așa? –  > Por Ignacio Vazquez-Abrams.
  • @IgnacioVazquez-Abrams Nu caut detalii, ci doar o descriere generală a modului în care acestea se leagă și când ar trebui să fie folosite una în locul celeilalte. –  > Por Abe.
3 răspunsuri
jw013

Organizarea fișierelor de configurare este mult mai puțin uniformă decât par să sugereze întrebările dumneavoastră. Nu există o „clasă”, nu există o „ierarhie” și nu există un „țar al configurației” global și nici un comitet care să decreteze o sintaxă comună sau alte generalizări frumoase și curate precum cele pe care le căutați. Există doar o multitudine de aplicații separate, cum ar fi R, bash, screen și mediul de birou GNOME, care au toate propriile lor moduri de a face lucrurile, așa că ar trebui să consultați documentația fiecărui program în parte pentru a răspunde la orice specifice întrebări cu privire la un anumit fișier. Dacă pare ad-hoc, asta pentru că așa este: cea mai mare parte a software-ului Unix / Linux existent a fost dezvoltat în scopuri diferite de către persoane diferite care au procedat la configurare în mod ușor diferit.

Pentru a răspunde punctual la celelalte întrebări ale dumneavoastră:

  • *rc și *profile nu înseamnă foarte mult, așa că nu se poate răspunde cu adevărat la această întrebare. „rc” este doar o abreviere sau un sufix utilizat în mod obișnuit pentru fișierele de configurare. Etimologia sa datează din timpuri străvechi (în anii calculatoarelor) și probabil înseamnă comenzi de execuție (de la runcom). Doar pentru că aplicațiile folosesc același cuvânt nu înseamnă că sunt de acord asupra convențiilor. „profil” este un sufix mult mai puțin obișnuit.

  • Definiți „domeniul de aplicare”. Majoritatea aplicațiilor nu partajează fișiere de configurare cu alte aplicații care nu au legătură între ele. Singura excepție posibilă este /etc/profile și .profile, care pot fi utilizate de mai multe shell-uri diferite (inclusiv cel puțin sh și bash). Există ceva numit mediu asociat fiecărui proces în curs de execuție, care poate conține variabile care pot afecta comportamentul procesului respectiv. În general, variabilele de mediu sunt setate de fișierele de configurare corespunzătoare ale shell-ului sau, poate, de fișierele de configurare ale oricărui mediu grafic de birou pe care îl utilizați. Există, de asemenea, fișiere de configurare pentru „biblioteci”, cum ar fi .inputrc pentru readline și .gtkrc* pentru GTK, care vor afecta fiecare aplicație care utilizează biblioteca respectivă.

  • Nu, nu există o ierarhie globală pentru fișierele de configurare. Din nou, consultați documentația pentru programul specific în cauză, de exemplu, aplicația bash manual pentru bash. O convenție generală pe care vă puteți baza de obicei este că setările utilizatorului în $HOME prevalează asupra configurației la nivel de sistem din /etc. Acest lucru se realizează de obicei prin citirea fișierului de utilizator după cel de sistem, astfel încât setările ulterioare să le suprascrie pe cele anterioare. Cu toate acestea, aceasta nu este o garanție, iar pentru răspunsuri definitive trebuie să consultați documentația pentru programul specific pe care îl utilizați.

  • Nu există nicio „clasă”, cel puțin nici una suficient de generală pentru a cuprinde toate fișierele pe care le-ați enumerat în întrebarea dumneavoastră, astfel încât întrebarea referitoare la o referință pentru o astfel de „clasă” este discutabilă. Din nou, consultați documentația programului specific pe care îl utilizați.

Ulrich Dangel

Cred că această întrebare este prea largă pe foarte multe planuri, de exemplu, puneți întrebări despre cel puțin patru programe diferite într-o singură întrebare. Mă voi uita doar la diferența dintre fișierele de configurare din /etc și $HOME.

Unix este un sistem de operare multiutilizator, ceea ce înseamnă că mai multe persoane diferite pot utiliza un sistem, fie prin utilizarea de ssh, telnet, sau Xorg. Pentru a oferi o configurație standardizată pentru utilizatorii dumneavoastră, puteți oferi o configurație la nivelul sistemului în /etc/, aceasta este de obicei utilizată și de distribuția dvs. pentru a oferi o configurație globală pentru, de exemplu. bash sau screen.

Pe de altă parte, unii utilizatori doresc să personalizeze singuri setările pentru programele lor, cum ar fi combinațiile de taste, culorile sau aspectul. Acest lucru se face prin intermediul fișierului de configurare din $HOME. Deci, pe scurt /etc/ asigură configurația la nivelul întregului sistem, în timp ce fișierele de configurare din $HOME permit utilizatorilor să modifice/înlocuiască configurația la nivelul întregului sistem.

Stan

O parte a răspunsului provine din această postare:

.bashrc este un script shell pe care Bash îl execută ori de câte ori este pornit interactiv.

Contrast .bash_profile și .profile care sunt rulate doar la începutul unui nou shell de autentificare. (bash -l)

Dumneavoastră alegeți dacă o comandă merge în .bashrc vs .bash_profile în funcție de faptul că doriți ca aceasta să fie executată o singură dată sau la fiecare pornire a unui shell interactiv.