Jaka jest różnica między ~ / .profile, ~ / .bashrc, ~ / .bash_profile, ~ / .gnomerc, / etc / bash_bashrc, / etc / screenrc…?


68

Odpowiedzi na pytania dotyczące SO i askubuntu , wraz z przeglądaniem (i czytaniem nagłówków) $HOMEoraz /etc/wskazują liczbę plików, których można użyć do ustawienia zmiennych środowiskowych, w tym:

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

Zbieram te pliki w /etc/pracy dla wszystkich użytkowników, podczas gdy pliki $HOMEsą specyficzne dla użytkownika. Zbieram również, że .profilejest ładowany przy logowaniu podczas .bashrcładowania, gdy /bin/bashjest wykonywany. Rozumiem również, że różne programy mają różne pliki ustawień (np. .RprofileDla R). Byłbym jednak wdzięczny za wyjaśnienia:

  • Czy *rci *profilepliki są zasadniczo różne?
  • Jaki jest zakres takich plików (np. Które pliki są powszechnie używane w systemie Linux)
  • Czy istnieje hierarchia (np. .bashrcZastępuje ustawione zmienne .settings)
  • Jakie jest dobre odniesienie dla tej klasy plików? Aby uzyskać opcje w tych plikach?

Powiązane pytania


3
Zobacz INVOCATIONsekcję w man bash. Zobacz FHSartykuł wiki na temat systemów plików Linux. To da dobry początek i odpowie na kilka z tych pytań. Pliki z poprzedzającą kropką ( .) są zazwyczaj specyficzne dla użytkownika - znajdują się w katalogu użytkownika $HOME.

3
Wszyscy? Naprawdę?
Ignacio Vazquez-Abrams,

@ IgnacioVazquez-Abrams Nie szukam szczegółów, a jedynie ogólny opis ich relacji i tego, kiedy należy używać jednego nad drugim.
Abe

Odpowiedzi:


48

Organizacja plików konfiguracyjnych jest o wiele mniej jednolita, niż sugerują twoje pytania. Nie ma „klasy”, nie ma „hierarchii”, nie ma globalnego „konfiguratora” ani komitetu, który określa wspólną składnię lub inne ładne czyste uogólnienia, takie jak te, których szukasz. Jest tylko mnogość odrębnych aplikacji, takich jak R, bash, screeni GNOME, z których wszystkie mają swoje własne sposoby robienia rzeczy, więc należy szukać w dokumentacji dla każdego indywidualny program odpowie na wszelkie szczegółowe pytania dotyczące danego pliku. Jeśli wydaje się to ad-hoc, to dlatego, że jest tak: większość oprogramowania Unix / Linux została opracowana do różnych celów przez różnych ludzi, którzy nieco inaczej konfigurowali konfigurację.

Aby odpowiedzieć punktowo na inne pytania:

  • *rci *profileniewiele znaczą, więc na to pytanie tak naprawdę nie można odpowiedzieć. „rc” jest jedynie powszechnie używanym skrótem lub sufiksem dla plików konfiguracyjnych. Jego etymologia sięga czasów starożytnych (w latach komputerowych) i prawdopodobnie oznacza uruchamianie poleceń (z runcom ). To, że aplikacje używają tego samego słowa, nie oznacza, że ​​zgadzają się na konwencje. „profil” jest znacznie mniej powszechnym sufiksem.

  • Zdefiniuj „zakres”. Większość aplikacji nie udostępnia plików konfiguracyjnych innym niepowiązanym aplikacjom. Jedynym możliwym wyjątkiem jest /etc/profilei .profile, które może być używane przez wiele różnych powłok (w tym przynajmniej shi bash). Istnieje coś zwanego środowiskiem związanym z każdym uruchomionym procesem, które może zawierać zmienne, które mogą wpływać na zachowanie tego procesu. Zasadniczo zmienne środowiskowe są ustawiane przez odpowiednie pliki konfiguracyjne powłoki lub pliki konfiguracyjne dowolnego używanego środowiska graficznego. Istnieją również pliki konfiguracyjne dla „bibliotek”, takie jak .inputrcreadline i .gtkrc*GTK, które będą miały wpływ na każdą aplikację korzystającą z biblioteki.

  • Nie, nie ma globalnej hierarchii plików konfiguracyjnych. Ponownie zapoznaj się z dokumentacją danego programu, na przykład z bashinstrukcją dla bash. Ogólna konwencja, na której zwykle można polegać, polega na tym, że ustawienia użytkownika $HOMEzastępują konfigurację ogólnosystemową w /etc. Zazwyczaj odbywa się to poprzez odczytanie pliku użytkownika po systemie, tak aby późniejsze ustawienia zastępowały wcześniejsze. Nie stanowi to jednak gwarancji i w celu uzyskania ostatecznych odpowiedzi należy zapoznać się z dokumentacją używanego programu.

  • Nie ma „klasy”, a przynajmniej ogólnej, która nie obejmuje wszystkich plików wymienionych w pytaniu, więc pytanie o odniesienie do takiej „klasy” jest dyskusyjne. Ponownie zapoznaj się z dokumentacją konkretnego używanego programu.


5

Myślę, że to pytanie jest zbyt ogólne na tak wielu poziomach, np. Zadajesz pytania dotyczące co najmniej czterech różnych programów w jednym pytaniu. Spojrzę tylko na różnicę między plikami konfiguracyjnymi w /etci $HOME.

Unix jest systemem operacyjnym dla wielu użytkowników, co oznacza wiele różnych osób może korzystać z systemu, albo za pomocą ssh, telnet, lub Xorg. Aby zapewnić użytkownikom ustandaryzowaną konfigurację, możesz podać konfigurację ogólnosystemową /etc/, jest to zwykle używane przez Twoją Dystrybucję, aby zapewnić globalną konfigurację np . bashLub screen.

Z drugiej strony niektórzy użytkownicy chcą samodzielnie dostosowywać ustawienia swoich programów, takie jak skróty klawiszowe, kolory lub wygląd. Odbywa się to poprzez plik konfiguracyjny w ich $HOME. Krótko mówiąc, /etc/zapewnia konfigurację całego systemu, podczas gdy pliki konfiguracyjne w $ HOME pozwalają użytkownikom zmieniać / zastępować konfigurację całego systemu.


3

Część odpowiedzi pochodzi z tego postu :

.bashrc to skrypt powłoki, który Bash uruchamia za każdym razem, gdy jest uruchamiany interaktywnie.

Kontrast .bash_profilei .profilektóre są uruchamiane tylko na początku nowej powłoki logowania. (bash -l)

Ty decydujesz, czy polecenie wchodzi w .bashrctryb vs, w .bash_profilezależności od tego, czy chcesz, aby było uruchamiane raz czy przy każdym uruchomieniu interaktywnej powłoki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.