W naszym systemie jest 7 terminali. tty7
jest oparty na GUI.
Skąd mam wiedzieć, którego tty obecnie używam?
jak, tty1, tty2 .... tty6?
W naszym systemie jest 7 terminali. tty7
jest oparty na GUI.
Skąd mam wiedzieć, którego tty obecnie używam?
jak, tty1, tty2 .... tty6?
Odpowiedzi:
Jest kilka sposobów, aby się tego dowiedzieć. Wybrałbym polecenie who am i
(nie who
):
$ who am i
ravexina tty2 2017-04-10 11:19 (:0)
Gdy jestem w graficznym terminalu, zwraca coś takiego:
ravexina pts/0 2017-04-10 1:19 (:0)
W sesji ssh przy użyciu graficznego terminalu wynik jest taki sam, ale zamiast (: 0) otrzymam adres IP mojej maszyny (192.168.xx). inne polecenia, takie jak w
, who
, pgrep
, ps
, etc są pomocni.
Na przykład, aby dowiedzieć się, przy którym tty
działa mój interfejs graficzny:
ps $(pgrep Xorg)
Co w moim przypadku, ponieważ nie używam żadnego menedżera wyświetlania, takiego jak gdm lub slim, spowoduje to:
PID TTY STAT TIME COMMAND
1693 tty1 Sl 0:05 /usr/lib/xorg/Xorg
who am i
nic nie zwraca i whoami
zwraca zanna
(podczas gdy who
zwraca wszystkie sesje (pamiętam powiązane pytanie (które okazało się niemożliwe do odpowiedzi), w którym zauważyliśmy, że różne emulatory wytwarzały różne dane wyjściowe who
)).
who am i
zawsze będzie działał ładnie w vt, i pgrep
jest bardzo sprytny (możesz chcieć użyć $()
składni do komend podrzędnych może być nieco mylący w Markdown), więc twoja odpowiedź jest bardzo ładna i ktokolwiek ją ocenił, nie powinien tego zrobić ...
Użyj tty
polecenia.
Jeśli mam rację, to jest odniesienie:
/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6
pts
oznacza, że używasz terminala z GUI lub przez SSH
Cofnijmy się i zacznijmy od zamieszania: czym jest tty? Pierwotnie tty był skrótem teletypu, który stał się teletekstem szklanym, który stał się dowolnym terminalem lub połączeniem z jednym, a konkretnie portem szeregowym (Są one nadal w pobliżu, najczęściej / dev / ttyS0, / dev / ttyUSB0 i czasami / dev / ttyacm0). Potem masz pseudo tty i wirtualne tty. stare ręce uniksowe są zaznajomione z pseudotytami, które są używane do zdalnych terminali (ssh i telnet), wirtualnych terminali (xterm i tym podobne) oraz multiplekserów terminali (screen i tmux). Pseudo tty miały z czasem różne schematy nazewnictwa, ale obecnie używa nazw takich jak / dev / pts / 0. Z drugiej strony wirtualne tty są powiązane z konsolami wirtualnymi, szczególnie gdy używasz klawiszy funkcyjnych Control Alt, przełączasz wirtualne konsole, z których każda jest sparowana z wirtualnym tty.
Więc jeśli chcesz znaleźć swój pseudo tty (lub wirtualny tty, gdy używasz trybu tekstowego), istnieje wiele różnych rozwiązań, takich jak who am i
lub ps ax|grep $$
jest to stosunkowo łatwe, ponieważ istnieje wiele sposobów, aby się tego dowiedzieć, ponieważ pseudo tty jest otwierany w standardowym systemie io w większości przypadków i istnieją inne metody, które działają nawet po przekierowaniu io. ma to również tę zaletę, że robi się dobrze, gdy używasz portów szeregowych i wirtualnych tty, o ile nie używasz emulatorów terminali graficznych ani multiplekserów terminali.
Ale co, jeśli chcesz zidentyfikować wirtualną konsolę? sudo fgconsole
może być przydatny w interaktywnych przypadkach. Albo po prostu chodzę po konsolach, ponieważ przełączanie jest zazwyczaj wystarczająco szybkie. Nie znam metody programowej, która działa niezawodnie w przypadkach nieinteraktywnych lub nieprzewidzianych w ziemi.
Spójrzmy na przykład, który gwarantuje, że nigdy nie będzie w stanie niezawodnie odpowiedzieć na wirtualną konsolę. Komputer, na którym siedzę przed (alpha) ma Xserver działający na tty2 (: 1), mam trzy okna otwarte dwa xtermy i vncviewer (podłączony do bravo: 2). Jeden xterm jest uruchomiony ekran, drugi działa ssh charley. Screen ma dwa otwarte okna, delta ssh i kto (kto poprawnie identyfikuje pseudo tty w kolumnie drugiej i podaje wskazówkę (:1:S0)
w kolumnie piątej, która mówi nam, że pseudo tty jest podłączony do pierwszej sesji ekranu, która jest połączona z drugim serwerem X, ale nie podaje żadnych informacji o konsoli wirtualnej). Przebieg, który w którejkolwiek sesji ssh daje podpowiedź(alpha)
która identyfikuje maszynę, z której pochodzi sesja ssh, która jest stosunkowo dobra dla sesji zdalnych. Chociaż niewiele jest informacji o tym, co jest podłączone do pseudo tty (i absolutnie nie jest dostępna żadna wirtualna konsola, ani nawet zdalne informacje tty), przynajmniej zdalny host jest zidentyfikowany. informacje o ekranie mogą być niepoprawne, ponieważ sesje ekranu są odłączalne, a vnc nie dostarcza żadnych użytecznych informacji, ponieważ jedyną różnicą między sesją vnc a sesją lokalną jest numer wyświetlania. W wielu przypadkach można założyć, że: 0 jest na tty7, ale nie zawsze, i nigdy na moim, ponieważ bravo w ogóle nie ma karty graficznej i: 0 to sesja vnc (która myli, kto uważa, że jest to konsola lokalna) i żadna z maszyn nie używa tty7 jako sesji graficznej, ponieważ (nie tylko przeciwnie) zrzucam logi do tty7 (i tty5, tty6 i tty8 także) religijnie sesje graficzne gdzie indziej. Ale ekran oczekiwania może również działać jako program terminalowy, umożliwiając nawiązanie sesji za pomocą kabla szeregowego. Co zgłasza taka sesja, kto jest uruchamiany? Po co tylko port szeregowy, czy to przez vnc, xterm, ssh, screen i adapter szeregowy USB jednocześnie lub jest podłączony do mojego telewideo.
Po zalogowaniu się do tty automatycznie pokazuje, którego tty używasz w pierwszym wierszu.
Jeśli naciśnięcie kombinacji klawiszy Ctrl+ Alt+ F3pokazuje tylko czarny ekran, jak napisano w komentarzu, istnieje alternatywny sposób uzyskania dostępu do powłoki roota podczas uruchamiania komputera bez naciskania Ctrl+ Alt+, F3aby wyświetlić tty.
Natychmiast po ekranie powitalnym BIOS / UEFI podczas uruchamiania systemu BIOS, szybko naciśnij i przytrzymaj Shiftklawisz, co spowoduje wyświetlenie menu GNU GRUB. (Jeśli zobaczysz logo Ubuntu, przegapiłeś punkt, w którym możesz wejść do menu GRUB.) Przy UEFI naciśnij (być może kilka razy) Escklawisz, aby przejść do menu GRUB. Czasami ekran powitalny producenta jest częścią programu ładującego system Windows, więc po włączeniu komputera przechodzi on bezpośrednio do ekranu GRUB, a następnie naciskanie nie Shiftjest konieczne.
Na pierwszym fioletowym ekranie GNU GRUB wybierz Zaawansowane opcje dla Ubuntu za pomocą klawiszy ↑ i ↓ i naciśnij Enter. Zostaniesz wtedy poproszony przez inne fioletowe menu menu GNU GRUB, które zawiera listę opcji jądra.
Naciskaj klawisz strzałki w dół, aż wybierzesz drugi wpis od góry (ten z trybem odzyskiwania w opisie), a następnie naciśnij Enter.
Teraz powinieneś zobaczyć to menu odzyskiwania:
Za pomocą klawiszy strzałek przewiń w dół, aby zrootować, a następnie naciśnij Enter.
Powinieneś teraz zobaczyć monit roota, coś takiego:
root@ubuntu:~#
Na tym etapie powinieneś mieć system plików tylko do odczytu. Musisz zamontować go ponownie z uprawnieniami do zapisu:
mount -o rw,remount /
Teraz możesz uruchamiać polecenia tak samo jak w terminalu.
Myślę, że dbasz o coś innego niż inne odpowiedzi. Biegaćsudo fgconsole
aby dowiedzieć się, który prawdziwy tty jest teraz aktywny.
Użyj polecenia tty, działa na Linuksie i macOS i daje dość proste wyjście do odczytu, tylko nazwę tty, w którym jesteś.
Przykład:
$ tty
/dev/pts/0
Można to łatwo napisać w skrypcie lub dołączyć do pytania, na przykład:
$ PS1='`tty`: '
/dev/pts/0: _
W ten sposób zawsze będziesz wiedzieć, w którym terminalu jesteś.