Wiem, jaka jest różnica między powłokami interaktywnymi / nieinteraktywnymi a powłokami do logowania / bez logowania, ale wydaje się, że w praktyce nigdy nie będzie powłoki do nieinteraktywnego logowania, chyba że masz coś takiego /bin/bash --login some-script.sh
w skrypcie (a nawet wydaje się, że trochę dziwne). Czy to prawda, czy są one bardziej powszechne?
14
telnet towel.blinkenlights.nl
dla powłoki nieinteraktywnej ;-)Odpowiedzi:
Zakładam, że mówisz o koncepcji logowania Basha w stosunku do braku logowania i interaktywnych vs. nieinteraktywnych powłok Bash, jak opisano w sekcji Inwokacja strony podręcznika. (Różni się to od interpretacji w odpowiedzi Jamesa Youngmana na dowolne dowolne polecenie użyte jako „powłoka” (lub interpreter poleceń użytkownika) w
passwd(5)
pliku i to, czy ten program akceptuje wprowadzanie danych przez użytkownika; niektóre, na przykład/usr/sbin/nologin
, oczywiście, nie. )Masz rację, że
/bin/bash --login some-script.sh
spowoduje to nieinteraktywne wywołanie Bash logowania, i może to być patologiczny przykład. Jest jeszcze jedna sprawa, być może niezbyt często, ale nie naprawdę dziwne, że produkuje nieinteraktywny powłoki logowania:ssh somehost < some-file
. Tutajsshd
uruchomi się Bash zargv[0]
ustawionym na,-bash
ponieważ nie otrzymano polecenia do uruchomienia, co powoduje, że Bash uważa się za powłokę logowania, ale ponieważ stdin nie jest podłączony do terminala, Bash nie przejdzie w tryb interaktywny ($-
nie będzie zawierałi
) .(Osobiście sprawa ta wydaje się znacznie bardziej uzasadniona niż odwrotna sytuacja,
ssh somehost somecommand
która nie jest uważana za „powłokę logowania”, mimo że jest to nowy login,somehost
taki jak powyżej.)Niedawno zrobiłem to, co powinienem był zrobić dawno temu i stworzyłem tabelę trybów Basha i jakie pliki init są uruchamiane . Jeśli uznasz to za mylące, weź to za serce, przynajmniej ja też. Zastanawia mnie, jaki był ich pierwotny cel, jeśli chodzi o zasady dotyczące
.bashrc
egzekucji.źródło
Większość powłok logowania według liczby nowo zainstalowanych systemów jest nieinteraktywna, w rzeczywistości:
Jasno
/bin/bash
i/bin/sh
tradycyjne muszle i są interaktywne. Ale wszystkie inne elementy na tej liście są nieinteraktywne. Jeśli czytasz listę i nie wiesz, co robi jedna z nich, możesz po prostu sprawdzić jej stronę podręcznika (na przykładman nologin
lubman sync
).Co faktycznie robi polecenie
Patrząc na historię postów Kapitana Człowieka, widzę, że nie mają oni doświadczenia z Uniksem. Może więc pytanie w komentarzu dotyczące nieprzestrzegania dotyczyło wiersza poleceń u góry odpowiedzi, a nie tylko wyniku. Wyjaśnię również wiersz poleceń, mimo że jest to naprawdę nie na temat tego pytania.
Polecenie jest potokiem uniksowym . Potok jest łańcuchem poleceń - czytasz go od lewej do prawej - w którym wyjście pierwszego polecenia staje się wejściem drugiego, wyjście drugiego staje się wejściem trzeciego itd., Dopóki koniec rurociągu. Wynik ostatniego procesu jest wyświetlany na terminalu (chyba że został przekierowany). Aby uzyskać więcej informacji, zobacz wpis w Wikipedii dotyczący rurociągów powłokowych .
Jeśli nie rozumiesz, co robi potok, możesz po prostu uruchomić go w segmentach, aby zobaczyć, co się dzieje. Możesz także przeczytać stronę podręcznika poleceń, które są używane (tutaj
awk
,sort
iuniq
). W rzeczywistości powinieneś to zrobić teraz. Poczekam.Uruchommy etapy potoku stopniowo (możesz to bezpiecznie zrobić na własnym systemie Unix):
Powyższy wynik to po prostu zawartość siódmego pola z
/etc/passwd
pliku. Jest to baza danych (plik tekstowy), która informuje system, czym jest powłoka logowania wszystkich użytkowników. Jeśli chcesz dowiedzieć się więcej o tym,/etc/passwd
po prostu przeczytaj go (jest to świat do odczytu) i zajrzyj na stronę podręcznika(man 5 passwd)
.Więc czytając całą listę, możesz dowiedzieć się, jakie są popularne przedmioty, ale to nie jest dobry format odpowiedzi na to pytanie, ponieważ tak naprawdę chodziło o to, jak popularne są nieinteraktywne powłoki. Policzmy je. Najprostszym sposobem na to jest posortowanie elementów w pierwszej kolejności:
Możemy użyć programu,
uniq
aby pokazać nam tylko unikalne elementy:~ $ awk -F: '{print 7 $}' </ etc / passwd | sortuj | uniq | sed -e 's / ^ / /' / bin / bash / bin / false / bin / sh / bin / sync / usr / sbin / nologin
Ale czekaj, to nie ma sensu, ile ich było? Zapytajmy
uniq
(przeczytaj stronę podręcznika!):To oczywiście wynik, który widzieliśmy u góry odpowiedzi. Posortujmy to jeszcze raz, aby zobaczyć wpisy w kolejności:
Poczekaj, to nie może być prawda, 17 pojawia się przed 1, a 5 po 23. Problem polega na tym, że przedmioty są sortowane leksykograficznie . Poprośmy o
sort
posortowanie ich numerycznie i w odwrotnej kolejności:Myślę, że to wyjaśnia wszystko w oryginalnej odpowiedzi. Jeśli nadal nie masz pewności co do szczegółów działania tych poleceń, możesz przeczytać strony podręcznika. Jeśli nadal nie masz pewności co do zasad tego, co się dzieje, lepiej zacząć od przeczytania książki (online lub na papierze) wyjaśniającej Unixa i Linuksa.
źródło
/bin/sync
skorupa? więc jakieś narzędzie jest powłoką?bash --login
w pytaniu, pyta konkretnie obash
procesy, które nie mająi
ustawionej opcji. (Powstają one z poleceń takich jakssh somehost < script.sh
; będzie to powłoka „login, nieinteraktywna” w sensie określonym w sekcji INVOCATION na stronie podręcznika Bash.)