Jak sprawdzić, którego tty obecnie używam?

22

W naszym systemie jest 7 terminali. tty7jest oparty na GUI.

Skąd mam wiedzieć, którego tty obecnie używam?

jak, tty1, tty2 .... tty6?

luv.preet
źródło
Dlaczego twierdzisz, że to „pts” w komentarzach? To całkowicie różni się od tego, o co tu pytasz. Sesja w GUI NIE jest tty.
Rinzwind
1
Jestem zdezorientowany tą koncepcją, dlatego
luv.preet
powiązane: unix.stackexchange.com/questions/77796/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

30

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 ttydział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
Ravexina
źródło
4
+1, chociaż w mate-terminal who am inic nie zwraca i whoamizwraca zanna(podczas gdy whozwraca 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)).
Zanna,
graficzny zawsze będzie używał tty7, ponieważ jest to jedyny 1, który zapewnia wsparcie graficzne
luv.preet
1
@Zanna Sam spotykam się z tą sytuacją, ale myślę, że warto o tym wspomnieć.
Ravexina
1
tak czy inaczej, who am izawsze będzie działał ładnie w vt, i pgrepjest 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ć ...
Zanna,
1
@ luv.preet, który jest poza zakresem twojego pytania, ale patrz Różnica między pkt i tty :) - post, którego ten duplikat ma niesamowitą odpowiedź
Zanna
14

Użyj ttypolecenia.

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
lit_js
źródło
to pokazuje pkt / 18.
luv.preet
te punkty mogą być uruchomione w tty, prawda? Skąd mam to wiedzieć?
luv.preet
5
@ luv.preet, który jest twoim terminalem. Zobacz „Różnica między pts a tty” .
Chai T. Rex,
4
ptsoznacza, że ​​używasz terminala z GUI lub przez SSH
lithium_js
3
W tym celu musisz zadać nowe pytanie.
Chai T. Rex,
6

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 ilub 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 fgconsolemoż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.

Hildred
źródło
6

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.

  1. 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.

  2. 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.

  3. 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:

    menu odzyskiwania

  4. 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:~#
    
  5. 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.

Karel
źródło
czy to zawsze otwiera tty1?
luv.preet
Nie, nie otwiera żadnego tty. Zamiast tego montuje główny system plików Ubuntu zainstalowany na dysku twardym jako interaktywna powłoka z uprawnieniami do zapisu, umożliwiającymi uruchamianie na nim poleceń.
karel
3

Myślę, że dbasz o coś innego niż inne odpowiedzi. Biegaćsudo fgconsole aby dowiedzieć się, który prawdziwy tty jest teraz aktywny.

Marian Adam
źródło
@karel Łatwo wyobrazić sobie sytuację, w której brakuje aktualnego ogłoszenia TTY. Na przykład twój profil bash czyści ekran. Zaproponowałem polecenie, którego można użyć w dowolnym momencie, nie tylko natychmiast po zalogowaniu. WRT Ctrl + Alt + F1 nie działa - istnieje szybkie obejście: użyj chvt lub openvt.
Marian Adam
A BTW, uruchom to z sudo. Właśnie dlatego masz błąd.
Marian Adam
1

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ś.

André
źródło
1

Z wyjątkiem GUI, w którym to przypadku dostajesz pts, pokazuje to pożądany wynik:

ls -l `tty` | awk '{print $10}'
Ferroao
źródło