Care este diferența dintre .bashrc și .profile pe Linux?
Publicat: 2022-09-29Conectarea la o mașină Linux care rulează Bash face ca anumite fișiere să fie citite. Acestea vă configurează mediul shell. Dar ce fișiere sunt citite și când pot fi confuze. Iată ce se întâmplă cu adevărat.
Diferite tipuri de Shell
Mediul pe care îl obțineți când lansați un shell este definit de setările păstrate în fișierele de configurare sau de profil . Acestea dețin informații care stabilesc lucruri precum culorile textului, promptul de comandă, aliasurile și calea căutată pentru fișierele executabile atunci când introduceți numele unui program.
Există un număr de fișiere diferite, în diferite locații din sistemul de fișiere, unde sunt stocate aceste setări. Dar înainte de a începe să vedem ce fișiere sunt citite atunci când lansați un shell, trebuie să fim clari cu privire la tipul de shell pe care îl utilizați.
Un shell de autentificare este un shell la care vă conectați. Când porniți computerul și vă conectați, sub mediul desktop grafic există un shell de conectare. Dacă vă conectați la un alt computer printr-o conexiune SSH, vă veți conecta și la un shell de conectare.
Tipul de shell pe care îl obțineți când deschideți o fereastră de terminal este un shell non-login. Nu trebuie să vă autentificați pentru a lansa un shell atunci când sunteți deja autentificat. Shell-urile de autentificare și non-login sunt shell-uri interactive. Le folosești tastând instrucțiuni, apăsând tasta „Enter” și citind răspunsurile de pe ecran.
Există, de asemenea, shell-uri non-interactive. Acestea sunt tipurile de shell care se lansează atunci când se execută un script. Scriptul este lansat într-un nou shell. Shebang #!/bin/bash
din partea de sus a scriptului dictează ce shell trebuie utilizat.
#!/bin/bash echo -e „Bună, lume!\n”
Acest script va fi rulat într-un shell Bash neinteractiv. Rețineți că, deși shell-ul nu este interactiv, scriptul în sine poate fi. Acest script se imprimă în fereastra terminalului și ar putea la fel de ușor să accepte intrarea utilizatorului.
LEGATE: 9 exemple de script Bash pentru a începe pe Linux
Shell-uri non-interactive
Shell-urile non-interactive nu citesc niciun fișier de profil atunci când se lansează. Ei moștenesc variabile de mediu, dar nu vor ști nimic despre aliasuri, de exemplu, dacă sunt definite pe linia de comandă sau într-un fișier de configurare.
Puteți testa dacă un shell este interactiv sau nu, uitându-vă la opțiunile care i-au fost transmise ca parametri de linie de comandă. Dacă există un „i” în opțiuni, shell-ul este interactiv. Parametrul special Bash $-
conține parametrii liniei de comandă pentru shell-ul curent.
[[ $- == *i* ]] && echo 'Interactiv' || ecou „Non-interactiv”
Să creăm un alias numit xc
care va însemna „pisica”. De asemenea, vom verifica dacă avem o $PATH
setată.
alias xc=cat
echo $PATH
Vom încerca să le accesăm pe ambele din interiorul acestui mic script. Copiați acest script într-un editor și salvați-l ca „int.sh”.
#!/bin/bash xc ~/text.dat echo "Variable=$PATH"
Va trebui să folosim chmod
pentru a face scriptul executabil.
chmod +x int.sh
Să rulăm scriptul nostru:
./int.sh
În shell-ul său non-interactiv, scriptul nostru nu poate folosi aliasul, dar poate folosi variabila de mediu. Shell-urile interactive sunt mai interesante în utilizarea fișierelor de profil și de configurare.
LEGATE: Cum să setați variabilele de mediu în Bash pe Linux
Shell-uri de conectare interactive
Există două tipuri de shell-uri de conectare interactive. Unul este shell-ul care vă permite să vă conectați la computer. Pe desktop-uri, acesta este de obicei shell-ul care stă la baza mediului desktop. Indiferent dacă utilizați un mediu desktop cu ferestre sau cu tiling, ceva trebuie să vă autentifice cu sistemul Linux și să vă permită să vă conectați.
Pe serverele fără un mediu desktop instalat, vă conectați direct într-un shell interactiv. Puteți face același lucru pe un computer desktop dacă renunțați la mediul desktop și accesați un terminal. Pe GNOME puteți face acest lucru cu combinația de taste Ctrl+Alt+F3. Pentru a reveni la sesiunea GNOME, apăsați combinația de taste Ctrl+Alt+F2. Shell-ul la care vă conectați printr-un SSH este și un shell de conectare.
Fișierele de profil și de configurare care sunt apelate pot fi setate folosind variabile de mediu, astfel încât acestea pot varia de la distribuție la distribuție. În plus, nu toate fișierele sunt folosite de fiecare distribuție. Într-o instalare Bash generică, shell-urile de conectare interactive citesc fișierul „/etc/profile”. Acesta deține opțiunile de configurare a shell-ului la nivelul întregului sistem. Dacă există, acest fișier citește și fișiere precum „/etc/bash.bashrc” și „/usr/share/bash-completion/bash_completion”.
Bash caută apoi un fișier „~/.bash_profile”. Dacă nu există, Bash caută un fișier „~/.bash_login”. Dacă acel fișier nu există, Bash încearcă să găsească un fișier „.profile”. Odată ce unul dintre aceste fișiere este găsit și citit, Bash oprește căutarea. Deci, în majoritatea cazurilor, „~/.profile” este puțin probabil să fie citit.
Adesea, veți găsi așa ceva în „~/.bash_profile” sau, ca un fel de protecție, în fișierul „~/.profile”:
# dacă rulează bash dacă [ -n „$BASH_VERSION” ]; apoi # includeți .bashrc dacă există if [ -f "$HOME/.bashrc" ]; apoi . „$HOME/.bashrc” fi fi
Aceasta verifică dacă shell-ul activ este Bash. Dacă este, caută un fișier „~/.bashrc” și îl citește dacă este găsit.
Shell interactive non-login
Un shell interactiv Bash non-login citește „/etc/bash.bashrc” și apoi citește fișierul „~/.bashrc”. Acest lucru permite lui Bash să aibă setări la nivel de sistem și specifice utilizatorului.
Acest comportament poate fi schimbat cu steaguri de compilare atunci când Bash este compilat, dar ar fi o circumstanță rară și particulară să întâlniți o versiune de Bash care nu generează și nu citește fișierul „/etc/bash.bashrc”.
De fiecare dată când deschideți o fereastră de terminal pe desktop, aceste două fișiere sunt folosite pentru a configura mediul acelui shell interactiv, non-login. Același lucru se întâmplă și pentru shell-urile lansate de aplicații, cum ar fi fereastra terminalului din Geany IDE.
Unde ar trebui să puneți codul de configurare?
Cel mai bun loc pentru a pune codul personal de personalizare este în fișierul „~/.bashrc”. Aliasurile și funcțiile shell-ului dvs. pot fi definite în „~/.bashrc”, iar acestea vor fi citite și disponibile pentru dvs. în toate shell-urile interactive.
Dacă distribuția dvs. nu vă citește „~/.bashrc” în shell-urile de conectare și doriți, adăugați acest cod în fișierul „~/.bash_profile”.
# dacă rulează bash dacă [ -n „$BASH_VERSION” ]; apoi # includeți .bashrc dacă există if [ -f "$HOME/.bashrc" ]; apoi . „$HOME/.bashrc” fi fi
Modularitatea este cea mai bună
Dacă aveți o mulțime de aliasuri sau doriți să utilizați aceleași aliasuri pe mai multe mașini, cel mai bine este să le stocați în propriul fișier și la fel și cu funcțiile shell. Puteți apela acele fișiere din fișierul dvs. „~/.bashrc”.
Pe computerul nostru de testare, aliasurile sunt stocate într-un fișier numit „.bash_aliases” și un fișier numit „.bash_functions” deține funcțiile shell.
Le puteți citi din fișierul „~/.bashrc” astfel:
# citește în pseudonimele mele if [ -f ~/.bash_aliases ]; apoi . ~/.bash_aliases fi # citește în funcțiile mele shell if [ -f ~/.bash_functions ]; apoi . ~/.bash_functions fi
Acest lucru vă permite să mutați cu ușurință aliasurile și funcțiile între computere. Trebuie doar să adăugați liniile de mai sus în fișierul „~/.bashrc” de pe fiecare computer și să copiați fișierele care conțin aliasurile și funcțiile shell în directorul dvs. de acasă de pe fiecare computer.
Înseamnă că nu trebuie să copiați toate definițiile din „~/.bashrc” de pe un computer în fișierele „~/.bashrc” de pe fiecare dintre celelalte computere. De asemenea, este mai bine decât copierea întregului fișier „~/.bashrc” între computere, mai ales dacă rulează Bash pe diferite distribuții.
În concluzie
Fișierele despre care trebuie să știți sunt:
- /etc/profile : setări de configurare la nivel de sistem. Folosit de shell-urile de conectare.
- ~/.bash_profile : Folosit pentru a păstra setările pentru utilizatori individuali. Folosit de shell-urile de conectare.
- ~/.bashrc : Folosit pentru a păstra setările pentru utilizatori individuali. Folosit de shell-uri interactive non-login. Poate fi apelat și din fișierul „~/.bash_profile” sau „~/.profile” pentru shell-urile de conectare.
O metodă convenabilă este să vă puneți setările personale în „~/.bashrc” și să vă asigurați că fișierul „~./bash_profile” vă numește fișierul „~/.bashrc”. Asta înseamnă că setările tale personale sunt păstrate într-un singur fișier. Veți obține un mediu shell coerent între shell-uri de conectare și non-login. Combinarea acestui lucru cu stocarea aliasurilor și a funcțiilor shell în fișiere non-sistem este o soluție îngrijită și robustă.