Come verificare quale tty sto attualmente usando?


22

Ci sono 7 terminali che possono essere utilizzati nel nostro sistema. tty7è basato sulla GUI.

Come posso sapere quale tty sto attualmente usando?

come, tty1, tty2 .... tty6?


Perché stai affermando che è un "punto" nei commenti? Questo è totalmente diverso da quello che chiedi qui. La sessione in una GUI NON è una tty.
Rinzwind,

1
Sono confuso su questo concetto, ecco perché
luv.preet

Risposte:


30

Esistono diversi modi per scoprirlo. Vorrei andare con il comando who am i(non who):

$ who am i
ravexina    tty2        2017-04-10 11:19 (:0)

Quando sono in un terminale grafico, restituirebbe qualcosa del tipo:

ravexina    pts/0        2017-04-10 1:19 (:0)

In sessione ssh l'utilizzo di un risultato grafico terminale è lo stesso, ma invece di (: 0), otterrò l'IP della mia macchina (192.168.xx). altri comandi come w, who, pgrep, ps, ecc sono utili anche.

Ad esempio per scoprire a quale ttyinterfaccia grafica è in esecuzione:

ps $(pgrep Xorg)

Che nel mio caso, poiché non uso alcun display manager come gdm o slim, produrrà:

 PID  TTY      STAT   TIME COMMAND
 1693 tty1     Sl     0:05 /usr/lib/xorg/Xorg

4
+1, sebbene in mate-terminal who am inon restituisca nulla e whoamiritorni zanna(mentre whorestituisce tutte le sessioni (ricordo una domanda correlata (che si è rivelata senza risposta) in cui abbiamo notato che emulatori diversi hanno prodotto output diversi da who)).
Zanna,

graphic userà sempre tty7, poiché questo è l'unico 1 che fornisce supporto grafico
luv.preet

1
@Zanna Mi incontro a questa situazione da solo, ma penso che valga la pena menzionarlo.
Ravexina,

1
comunque, who am ifunzionerà sempre bene in un vt, ed pgrepè molto intelligente (potresti voler usare la $()sintassi per i sottotitoli dei comandi possono creare un po 'di confusione nel markdown) quindi la tua risposta è molto bella e chiunque abbia effettuato il downgrade non avrebbe dovuto farlo ...
Zanna,

1
@ luv.preet è fuori dalla portata della tua domanda ma vedi Differenza tra punti e tty :) - il post di cui questo è un duplicato ha una risposta fantastica
Zanna

14

Usa il ttycomando.

Se ho ragione, questo è il riferimento:

/dev/tty1 - tty1
/dev/tty2 - tty2
/dev/tty3 - tty3
/dev/tty4 - tty4
/dev/tty5 - tty5
/dev/tty6 - tty6

è showinng pts / 18.
luv.preet

questo punto potrebbe essere in esecuzione in un tty, non è vero? Come posso saperlo?
luv.preet

5
@ luv.preet che è il tuo terminale. Vedi "Differenza tra pts e tty" .
Chai T. Rex,

4
ptssignifica che stai usando il terminale dalla GUI o tramite SSH
lithium_js il

3
Dovrai fare una nuova domanda per questo.
Chai T. Rex,

6

Facciamo un passo indietro e cominciamo con la confusione: cos'è un tty? Originariamente tty era un'abbreviazione di teletype che divenne teletype di vetro che divenne qualsiasi terminale o la connessione a uno, in particolare una porta seriale (questi sono ancora in giro, più comunemente / dev / ttyS0, / dev / ttyUSB0 e talvolta / dev / ttyacm0). Quindi hai pseudo tty e tty virtuali. le vecchie mani unix hanno familiarità con gli pseudo-tty che vengono utilizzati per terminali remoti (ssh e telnet), terminali virtuali (xterm e simili) e multiplexer di terminali (schermo e tmux). Gli pseudo-tty hanno avuto vari schemi di denominazione nel tempo, ma quello attuale usa nomi come / dev / pts / 0. I tty virtuali sono invece associati alle console virtuali, in particolare quando si utilizzano i tasti funzione control alt si passa da una console virtuale a ciascuna delle quali è associato un tty virtuale.

Quindi, se hai bisogno di trovare la tua pseudo tty (o tty virtuale quando usi la modalità testo) ci sono tutti i tipi di soluzioni come who am io ps ax|grep $$questo è relativamente facile da fare in quanto ci sono diversi modi per scoprirlo poiché la pseudo tty è aperta su io standard nella maggior parte dei casi e ci sono altri metodi che funzionano anche quando io viene reindirizzato. questo ha anche il vantaggio di fare anche la cosa giusta quando si usano porte seriali e tty virtuali purché non si utilizzino emulatori di terminali grafici o multiplexer di terminali.

Ma cosa succede se si desidera identificare la console virtuale? sudo fgconsolepuò essere utile per casi interattivi. O quello che faccio è semplicemente camminare sulle console in quanto il passaggio è in genere abbastanza veloce. Non sono a conoscenza di un metodo programmatico che funzioni in modo affidabile in casi non interattivi o fuori terra.

Diamo un'occhiata a un esempio che è garantito per non poter rispondere in modo affidabile alla console virtuale di sempre. Il computer su cui sono seduto (alpha) ha un Xserver in esecuzione su tty2 (: 1), ho tre finestre aperte due xterm e un vncviewer (collegato a bravo: 2). Uno xterm esegue lo schermo, l'altro esegue ssh charley. Lo schermo ha due finestre aperte, ssh delta e who (che identifica correttamente la pseudo tty nella colonna due e fornisce il suggerimento (:1:S0)nella colonna cinque che ci dice che la pseudo tty è connessa alla prima sessione dello schermo che è collegata al secondo server X, ma non fornisce alcuna informazione sulla console virtuale). In esecuzione chi su entrambe le sessioni SSH dà il suggerimento(alpha)che identifica la macchina da cui proviene la sessione SSH, che è relativamente buono per le sessioni remote. Sebbene ci siano poche informazioni su ciò che è collegato alla pseudo tty (e non è assolutamente disponibile alcuna console virtuale o anche informazioni tty remote), almeno l'host remoto viene identificato. le informazioni sullo schermo possono essere errate poiché le sessioni dello schermo sono rimovibili e vnc non fornisce alcuna informazione utile poiché l'unica differenza tra una sessione vnc e una sessione locale è il numero visualizzato. In molti casi puoi supporre che: 0 sia su tty7 ma non sempre, e mai sulla mia poiché bravo non ha affatto una scheda grafica e: 0 è una sessione vnc (che confonde chi perché pensa che sia la console locale) e nessuna delle macchine usa tty7 come sessione grafica, perché io (non solo per essere contrario) dump dei log su tty7 (e tty5, tty6 e tty8 anche) sessioni grafiche religiose altrove. Ma la schermata di attesa può anche fungere da programma terminale che consente di stabilire una sessione tramite un cavo seriale. Cosa indica una sessione del genere quando viene eseguita? Perché nient'altro che la porta seriale, sia tramite vnc, xterm, ssh, schermo e un adattatore seriale USB tutto in una volta o è collegata al mio televisore.


6

Una volta effettuato l'accesso a un tty, mostra quale tty si sta utilizzando automaticamente sulla prima riga.


Se premendo la combinazione di tastiera Ctrl+ Alt+ viene F3visualizzata solo una schermata nera, come hai scritto in un commento, esiste un modo alternativo per accedere a una shell di root quando si avvia il computer senza premere Ctrl+ Alt+ F3per visualizzare un tty.

  1. Immediatamente dopo la schermata iniziale BIOS / UEFI durante l'avvio, con BIOS, premere e tenere premuto rapidamente il Shifttasto, che farà apparire il menu GNU GRUB. (Se vedi il logo Ubuntu, hai perso il punto in cui puoi entrare nel menu di GRUB.) Con UEFI premi (forse più volte) il Esctasto per accedere al menu di GRUB. A volte la schermata iniziale del produttore fa parte del bootloader di Windows, quindi quando si accende la macchina si passa direttamente alla schermata GRUB, quindi Shiftnon è necessario premere .

  2. Dalla prima schermata GNU GRUB viola selezionare Opzioni avanzate per Ubuntu con i tasti ↑ e ↓ e premere Enter. Verrà quindi richiesto da un altro menu del menu GNU GRUB viola che contiene un elenco di opzioni del kernel.

  3. Premere il tasto freccia giù fino a selezionare la seconda voce dall'alto (quella con la modalità di ripristino nella descrizione), quindi premere Enter.

    Ora dovresti vedere questo menu di ripristino:

    menu di ripristino

  4. Utilizzando i tasti freccia, scorrere fino alla radice, quindi premere Enter.

    Ora dovresti vedere un prompt di root, qualcosa del genere:

    root@ubuntu:~#
    
  5. A questo punto dovresti avere un filesystem di sola lettura. Devi rimontarlo con le autorizzazioni di scrittura:

    mount -o rw,remount /  
    

    Ora puoi eseguire i comandi come in un terminale.


apre sempre tty1?
luv.preet

No, non apre alcun tty. Invece monta il filesystem di root di Ubuntu che hai installato sul tuo disco rigido come una shell interattiva con permessi di scrittura, permettendoti di eseguire comandi su di esso.
Karel,

3

Immagino che ti stia occupando di qualcos'altro rispetto alle altre risposte fornite. Corri sudo fgconsole per scoprire quale vero tty è ora attivo.


@karel È facile immaginare una situazione in cui ti manca l'annuncio TTY corrente. Ad esempio il tuo profilo bash cancella lo schermo. Ho offerto un comando che può essere utilizzato in qualsiasi momento, non solo immediatamente dopo l'accesso. WRT Ctrl + Alt + F1 non funziona - c'è una soluzione rapida: usa chvt o openvt.
marian adam,

E a proposito, eseguilo con sudo. Ecco perché hai ricevuto l'errore.
marian adam,

1

Usa il comando tty, funziona su Linux e macOS e dai un output piuttosto semplice da leggere, solo il nome del tty in cui ti trovi.

Esempio:

$ tty
/dev/pts/0

È facile scrivere questo script o includerlo nel prompt, ad esempio:

$ PS1='`tty`: '
/dev/pts/0: _

In questo modo saprai sempre in quale terminale ti trovi.


1

Ad eccezione della GUI, nel qual caso si ottiene un pts, questo mostra l'output desiderato:

ls -l `tty` | awk '{print $10}'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.