Jak uruchomić drugą powłokę w trybie pojedynczego użytkownika?

14

Może to zabrzmieć jak sprzeczność, ale ostatnio musiałem używać trybu pojedynczego użytkownika (aka tryb konserwacji) przez pewien czas (dni!), Próbując odbudować uszkodzoną macierz RAID.

Robiąc to, zauważyłem, że chcę użyć drugiej powłoki do takich celów, jak sprawdzanie / edytowanie ustawień w różnych plikach konfiguracyjnych lub przeglądanie logów systemowych, gdy główna (i jedyna) konsola jest zajęta i wykonuje proces odzyskiwania.

Jakie byłoby zalecane polecenie uruchomienia drugiej powłoki na innym tty?

Oczywiście jedną z metod może być użycie screenw tty1, ale nie jest to łatwe do przełączania sesji z Alt-F1, Alt-F2 itp.

StarNamer
źródło
4
screenjest tak proste. Ctrl AP nie wydaje się dużo trudniejszy niż Alt F1 ...
mveroone
Warto zauważyć, że aplikacje takie jak screeni tmuxdo zarządzania oknami TUI nie zawsze załatwiają sprawę. Czasami potrzebujesz rzeczywistego ttyXurządzenia, a nie pts.
Parthian Shot

Odpowiedzi:

14

Jest to komenda zaprojektowany specjalnie dla tej sytuacji: openvt. Po prostu uruchom openvtze swojej powłoki na tty1, a znajdziesz powłokę działającą na pierwszym tty, która nie miała już na sobie czegoś (prawdopodobnie tty2). Istnieje kilka opcji, które mogą ci się przydać; zobacz stronę manuala openvt.

Ponieważ nie jest to logowanie zarządzane przez getty, po wyjściu z nowej powłoki nie pojawi się monit o zalogowanie się. Tty po prostu zginie, ponieważ nie będą działały na nim żadne procesy, ale nadal będziesz mógł przełączać się w przód i w tył (Alt-F1 Alt-F2) i zobaczyć, co było na ekranie, gdy opuściłeś powłokę. Do deallocvtniszczy dowodzenia ttys, które są w tym zombie podobny stan, wracając do oryginału „Alt-F2 nic nie robi” stan.

Polecenia te pierwotnie były nazywane opena disalloc, ale w końcu ktoś postanowił je zmienić, ponieważ były zbyt ogólne i disallocate uznano za „ani słowa”.

W dawnych czasach sterownik klawiatury i init był konfigurowany tak, aby Alt + Up działał open, więc działał jako skrót klawiszowy do odradzania powłoki na nowej konsoli. W dalszym ciągu możesz znaleźć resztkę tej starej konfiguracji, skomentowaną w twoim /etc/inittab. (Jeśli nie używasz jakiegoś fantazyjnego nowego init, który nie ma inittab.)

Jest to podobne pytanie tutaj

Społeczność
źródło
3
Fajnie, nie byłam tego świadoma openvt. +1.
jscott,
To wydaje się znacznie łatwiejsze niż getty. Nigdy nie zdawałem sobie sprawy, że jest już zainstalowany.
StarNamer
Pomyślałem, że zgłosię, że spędziłem ponad tydzień z systemem w trybie jednego użytkownika, naprawiając macierz RAID i openvtokazało się bardzo przydatne. Dzięki za wprowadzenie nowego polecenia do mojego ogłoszenia.
StarNamer
12

Możesz odrodzić kolejny gettyna dowolne tty. Uruchom system w trybie pojedynczego użytkownika, a następnie uruchom gettytty2:

root@host:~# /sbin/getty 38400 tty2 &

Możesz teraz Alt+ F2przejść do nowego tty. W razie potrzeby powtórz dla dodatkowych tty. Prawdopodobnie możesz zrobić coś czystszego i po prostu skonfigurować, /etc/inittababy automatycznie obsługiwać to w trybie pojedynczego użytkownika.

jscott
źródło
Wygląda na to, czego szukam. Spróbuję następnym razem.
StarNamer
Spróbował tego. Działa, ale ponieważ sesja logowania nie jest odradzana init, nie zostanie ponownie uruchomiona, jeśli umrze.
StarNamer,
Rzeczywiście, po prostu upuszczamy go w tle w powyższym przykładzie. Jeśli potrzebujesz pełnej oferty prawdziwego vt, będziesz hakował, /etc/inittaba /etc/rc1.d/S??singleprzynajmniej.
jscott,
2

Prawdopodobnie możesz obejść się bez dodatkowej instancji powłoki, korzystając JOB CONTROLz bieżącej powłoki. Jest to udokumentowane na stronie podręcznika użytkownika bash(1).

Możesz po prostu zawiesić zadanie domyślnie przy użyciu sekwencji Ctrl+ Z, chociaż można go skonfigurować w terminalu w inny sposób, sprawdź dane wyjściowe stty -a:

$ stty -a | grep susp
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;

Możesz sprawdzić swoje prace, wydając jobs:

# jobs
[1]   Stopped                 journalctl -f
[2]-  Stopped                 vim /etc/hosts
[3]+  Stopped                 tail -f /var/log/firewalld

Przenieś jeden z nich na pierwszy plan:

$ fg %3

Lub wznów to w tle:

$ bg %2

Ta metoda nie ma wielu zalet screenlub tmux, ale może być równie przydatna w niektórych sytuacjach.

dawud
źródło
Chodzi o to, że nie chcę zawieszać ani zakłócać procesu uruchomionego na początkowej konsoli. Na przykład podczas uruchamiania ddrescuenie chcę przerywać i wznawiać go, nawet jeśli jest to skonfigurowane.
StarNamer
Kilka problemów z tym. Z jednej strony, nie może on być używany jako jego powłoki bash (może być używana csh, tcshlub zsh, na przykład), więc wspomnieć jego manpage byłyby niedokładne w tej sprawie. Po drugie, nie odpowiada to na zadane pytanie.
Parthian Shot
1

Rozważ użycie terminalowych multiplekserów, takich jak tmux lub screen.

Dowiedz się więcej o tmux tutaj: https://github.com/tmux/tmux/wiki

Marcin Kamiński
źródło
Pytanie już o tym wspomina: „Oczywiście jedną z metod może być użycie screena w tty1 *, ale nie jest to łatwe do przełączania sesji z Alt-F1, Alt-F2 itp.”.
Cristian Ciupitu
Jak mówi Cristian, już rozważyłem screeni czułem, że inne multipleksery są jeszcze bardziej przesadne. Potrzebuję tylko prostej drugiej konsoli.
StarNamer
Ach, przepraszam, przeoczyłem screentwoje pytanie. Było późno.
Marcin Kamiński
Jak używanie kombinacji 2 kluczy może być „przesadzeniem” obok spawnowania nowych TTY i zakotwiczenia się do nich osobno i tak dalej?
mveroone
IMO, to dziwna definicja „przesady”, ale hej, cokolwiek dla kogoś działa, nic mi nie jest;)
Marcin Kamiński