DLACZEGO powłoka ** login ** nad powłoką ** non-login **?


24

Mam podstawową wiedzę na temat plików dotfiles w systemie * nix. Ale nadal jestem dość zdezorientowany tą różnicą między powłoką logowania a powłoką niezalogowaną?

Kilka różnych odpowiedzi (w tym wiele duplikatów) dotyczyło już następujących punktów:

  • Jak wywołać powłokę do logowania lub bez logowania
  • Jak wykryć do logowania lub bez logowania powłoki
  • Jakie pliki startowe zostaną zużyte przez powłokę do logowania lub bez logowania
  • Więcej informacji można znaleźć w dokumentacji (np. man bash)

To, czego nie powiedziały odpowiedzi (a także coś, o czym wciąż się mylę) to:

  • Jaki jest przypadek użycia powłoki do logowania lub bez logowania ? (np, ja tylko skonfigurowany zshrcdo zshi to wystarczy dla najbardziej osobistych wymagań dev, wiem, że nie jest tak proste, jak co vimrcdo vim)

  • Jaki jest powód , aby użyć logowanie na zakaz logowania skorupy (oprócz spożywania różnych plików startowych i cykle życia)?

Odpowiedzi:


16

Chodzi o to, że użytkownik powinien mieć (najwyżej) jedną powłokę logowania na host. (Być może powinienem powiedzieć, że jedna powłoka logowania na hosta na terminal - jeśli jesteś jednocześnie zalogowany do hosta za pośrednictwem wielu terminali, można oczekiwać, że będziesz mieć wiele powłok logowania). Zazwyczaj (zawsze?) Będzie to pierwsza otrzymana powłoka po zalogowaniu (stąd nazwa). Tak więc ten schemat pozwala określić działania, które mają się zdarzyć tylko raz podczas logowania, oraz rzeczy, które mają się zdarzyć przy każdym uruchomieniu nowej (interaktywnej) powłoki.

Zwykle każda inna powłoka uruchamiana po zalogowaniu będzie potomkiem powłoki potomnej (dziecko dziecka…) i dlatego odziedziczy wiele ustawień (zmiennych środowiskowych umaskitp.) Z powłoki logowania. A zatem chodzi o to, że pliki inicjalizacji login ( .login, .profileetc.) należy skonfigurować ustawienia, które są dziedziczone, a niech .bashrc(lub cokolwiek innego wykorzystania) obsługiwać te, które nie są ( set, shopt, non-eksportowane zmienne powłoki itp.)

Innym pojęciem jest to, że pliki inicjujące logowanie (i tylko one) powinny wykonywać „ciężkie podnoszenie”, tj. Czynności wymagające dużych zasobów. Na przykład możesz chcieć, aby niektóre procesy działały w tle za każdym razem, gdy jesteś zalogowany (ale tylko jedna ich kopia (instancja)). Możesz chcieć wyświetlać pewne informacje o stanie (np. dfLub who) podczas logowania, ale nie za każdym razem, gdy uruchamiasz nową interaktywną powłokę. Zwłaszcza jeśli masz interaktywnyprogram / dialog (tj. taki, który wymaga od ciebie danych wejściowych), który chcesz uruchomić przy każdym logowaniu, prawdopodobnie nie chcesz, aby był uruchamiany przy każdym uruchomieniu nowej powłoki. Jako skrajny przykład, dwadzieścia lat temu Solaris zalogował cię do pojedynczej, nie graficznej powłoki bez okien. (Wierzę, że zmieniło się od tego czasu.) Zadaniem .loginlub .profile(lub czymkolwiek) było uruchomienie systemu okienkowego za pomocą polecenia podobnego do startx. (Było to przydatne częściowo dlatego, że dostępnych było wiele systemów okienkowania. Różni użytkownicy mieli różne preferencje. Niektórzy użytkownicy używali różnych systemów w różnych sytuacjach, a my mieliśmy okno dialogowe z .profilepytaniem „Z jakiego systemu okien chcesz korzystać dzisiaj?”) Oczywiście nie chcesz, aby działało to za każdym razem, gdy otwierasz nowe okno lub piszeszsh.

Minęło wiele lat, odkąd używałem czegokolwiek innego niż bash przypadki na krawędzi. (Na przykład piszę skrypty za pomocą #!/bin/sh, więc w niektórych systemach moje skrypty działają dash, a w innych działają bashw trybie POSIX. Kilka razy w roku uruchamiam csh/ tcshprzez kilka minut, aby zobaczyć, jak to sobie radzi lub odpowiedz na pytanie.) Jeśli codziennie używasz wielu powłok (np. bashi zsh), Twoje wzorce mogą być inne. Jeśli twoja podstawowa powłoka jest (jak zdefiniowano w /etc/passwd) bash, możesz wywołać zshpowłokę logowania, a następnie być może wywołać niektóre interaktywne zshpowłoki niepodlegające logowaniu . Prawdopodobnie powinieneś unikać posiadania powłoki logowania, która jest podporządkowana innej powłoce logowania tego samego typu.

Jak wspomniano w Różnicy między powłoką logowania a powłoką niezalogowaną? , aplikacja OS X Terminal uruchamia powłokę logowania, więc typowy użytkownik zwykle będzie miał jednocześnie kilka „powłok logowania”. To jest nieco inny od tego modelu, który opisałem powyżej, i może wymagać od użytkownika, aby przemyśleć to, co robi w jego .loginlub.profile(lub cokolwiek) plik. Nie wiem, czy programiści OS X udokumentowali uzasadnienie tej decyzji projektowej. Ale mogę sobie wyobrazić sytuację, w której byłoby to przydatne. Był czas, kiedy zwykle logowałem się podczas otwierania garści okien powłoki i ustawiałem różne kolory tekstu i tła (pisząc sekwencje specjalne ANSI na ekranie), aby pomóc mi śledzić, który z nich był. Kolory końcowe są przykładem czegoś, co nie jest dziedziczone przez dzieci-dzieci, ale utrzymuje się w oknie. Jest to coś, co chciałbyś robić za każdym razem, gdy uruchamiasz nowe okno Terminalu, ale nie za każdym razem, gdy uruchamiasz nową interaktywną powłokę.

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.