różnica między plikiem bash.bashrc a plikiem / etc / environment

42

Do dnia, w którym ustawiłem zmienne środowiskowe w bash.bashrcpliku. Ostatnio kazano mi użyć /etc/environmentpliku. Oba działają dobrze.

Jaka jest różnica między nimi?

Poszukałem go i stwierdziłem, że „bashrc jest używany dla konkretnego użytkownika i środowiska, w całym systemie”. Co rozumie się tutaj przez cały system? /etc/bash.bashrcstosuje również zmiany w całym systemie. Popraw mnie, jeśli się mylę. Każda pomoc będzie mile widziana.

trapaank
źródło

Odpowiedzi:

35

Jedną różnicą jest to, że /etc/environmentzawiera tylko definicje zmiennych i wydaje się, że nie przechodzi przez jakiekolwiek rozszerzenie / interpolację zmiennych. Dlatego nie można odwoływać się do zmiennych w definicjach. To na przykład nie zadziała:

A="else"
B="something $A"

B będzie dosłownie something $A, a nie oczekiwane something else.

Zobacz to pytanie .

Nawiasem mówiąc, odpowiedź znaleziona przez Google wydaje się odnosić do użytkownika ~/.bashrc, a nie do całego systemu /etc/bash.bashrc. To może powodować zamieszanie.

roadmr
źródło
jaki jest cel ~ / .bashrc, gdy istnieją dwa pliki, które robią to samo / etc / environment i /etc/bash.bashrc?
trapaank
6
Plik /etc/bash.bashrc jest wykonywany, jeśli dowolny użytkownik otworzy bash. ~ / .Bashrc jest wykonywany tylko wtedy, gdy właściciel katalogu domowego, w którym jest zapisany, otworzy bash.
André Stannek
18

/etc/environmentPlik ustawia zmienną systemową szeroki dla każdego użytkownika na bagażniku. Polecenia w /etc/bash.bashrcsą wykonywane, jeśli bashpowłoka zostanie otwarta przez dowolnego użytkownika. Tak więc zmienne nie zostałyby ustawione, chyba że bashpowłoka zostanie otwarta co najmniej raz.

André Stannek
źródło
Przepraszam, jestem początkującym w Linuksie. kiedy powłoka bash zostanie otwarta? a co innego, kiedy otwarta jest powłoka bash, czy zastąpi zmienną ustawioną w / etc / enviornment, czy nie?
trapaank
Nie jestem pewien, kiedy dokładnie uruchomione jest środowisko / etc /, ale /etc/bash.bashrc jest wykonywany przez Ubuntu po wejściu do środowiska pulpitu. Dlatego działa, jeśli ustawisz tam zmienne. Domyślam się, że środowisko / etc / jest uruchamiane raz podczas uruchamiania przed wejściem na pulpit i że wykonanie /etc/bash.bashrc zastępuje zmienne. Ale jeszcze raz: nie jestem tego pewien.
André Stannek
4
To jest po zalogowaniu, a nie boot!
slm
6

A gdy pytasz o „ system ”:

Pliki konfiguracyjne znajdujące się w /etckatalogu dotyczą wszystkich użytkowników w systemie. Dla /etc/bash.bashrcoznaczałoby to dla wszystkich i wszystkiego, co jest za pomocą „Borne Again Shell” aka Bash na tej maszynie. Nawet jeśli jesteś jedynym człowiekiem, który go używa, może to dotyczyć „użytkowników technicznych” (po prostu spójrz /etc/passwdi sprawdź, jak często występuje tam termin „/ bin / bash” - lub użyj grep bash /etc/passwd | wc -l, co powinno dać ci liczba ta bezpośrednio (co oznacza: „pobierz” wszystkie wiersze zawierające ciąg „bash” z pliku „/ etc / passwd”, i wyślij wyniki („|”) do polecenia „wc” (liczba słów), aby policzyć linie („-l”).

Dlatego dla użytkownika bezpieczniej jest zmodyfikować ~/.bashrc(oznacza to plik „.bashrc” - z wiodącą kropką, tak - w katalogu domowym, np. /home/ankur/.bashrc), Który następnie wpływa tylko na użytkownika i pozostawia wszystko inne w spokoju . Pliki w /etcpowinny być zmieniane tylko wtedy, gdy zmiany systemowe są naprawdę zamierzone.

Poza tym: Obie konfiguracje zostaną użyte, jeśli istnieją. Najpierw plik ogólnosystemowy (tutaj /etc/bash.bashrc:) jest odczytywany i „pozyskiwany” (jego ustawienia są stosowane do bieżącej sesji), a następnie użytkownicy /home/username/.bashrcsą obsługiwani tak samo, a zatem mogą dodawać, a nawet zmieniać / nadpisywać ustawienia z globalnego /etc/bash.bashrcplik.

Izzy
źródło
3

Poza systemem szerokiej użytkownika i szeroki zakres dyskusji, jeden najbardziej znaczącą różnicą jest /etc/environmentto nie skrypt inny niż ~/.bashrc.

Nie można wyłuskać zmiennej wewnątrz /etc/environment, jej przypisanie zmiennej, która przyjmuje wartość linii dosłownie (jak już wspomniano w roadmr).

Twoje Ubuntu zablokuje cię, jeśli spieprzysz $PATHwnętrze /etc/environment, próbując dołączyć nową ścieżkę

PATH=$PATH:/new_path

Jeśli Twoja strona logowania do Ubuntu Gnome lub Unity nie wpuściła Cię bez zgłaszania nieprawidłowego hasła. A ostatnio zmodyfikowałeś /etc/environment, najprawdopodobniej tak jest.

Rozwiązaniem jest zalogowanie się do konsoli wirtualnej CTRL+ ALT+ F1konsola logowania, ręczne sprawdzenie $PATHi naprawa /etc/environmentpliku.

Zgodnie z tym , /etc/environmentjest ładowany przez PAM stosu, który zapełnia zmienną środowiskową wiersz po wierszu.

legendbb
źródło
-1

Różnica między nimi polega na tym, że /etc/enivironmentplik będzie działał dla wszystkich użytkowników, podczas gdy plik bash.bashrc będzie działał szczególnie dla tego użytkownika. A jeśli zrobisz coś złego w /etc/environmentpliku, konsekwencje mogą być poważne, ponieważ możesz łatwo cofnąć zmiany w pliku bash.bashrc, kopiując zawartość pliku / etc / environment. Ale pierwsza preferencja dotyczy bash.bashrcpliku, a następnie pliku / etc / environment. Nie jest tak, że jeśli wprowadzisz zmiany w bash.bashrcpliku, terminal da pierwszeństwo lokalnemu plikowi użytkownika (tj. bash.bashrc), A następnie plikowi głównemu (tj /etc/environment.).

Pranit Bauva
źródło
Myślę, że mylisz pliki ~ / .bashrc i /etc/bash.bashrc. Pierwszy jest lokalny dla użytkownika otwierającego powłokę, drugi jest globalny dla wszystkich użytkowników otwierających powłokę.
Dennis