GNU/Linux >> Znalost Linux >  >> Linux

Odkazuje výstup příkazu `tty` a soubor `/dev/tty` na řídicí terminál aktuálního procesu Bash?

  1. Od man tty

    tty – tisk názvu souboru terminálu připojeného ke standardnímu vstupu

    $ tty
    /dev/pts/2
    
  2. Z APUE:

    Historicky byl název řídicího terminálu ve většině verzí systému UNIX /dev/tty . POSIX.1 poskytuje
    runtime
    funkci, kterou můžeme zavolat, abychom určili název řídícího
    terminálu.

    #include <stdio.h>
    char *ctermid(char *ptr);
    
    $ ls -la /dev/tty
    crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
    

Tak mě zajímalo, jestli výstup příkazu tty a soubor /dev/tty oba odkazují na řídicí terminál aktuálního bash procesu?

Pokud ano, proč příkaz tty výstup pseudoterminálního slave souboru /dev/pts/2 , což se liší od /dev/tty ?

Protože emulátor terminálu lxterminal a bash shell v něm běžící používá pseudoterminální pár, není to pseudoterminální slave /dev/pts/2 ovládací terminál bash shellu?

/dev/tty a /dev/pts/2 nejsou symbolické odkazy na sebe, takže jsou to různé soubory?

Děkuji.

Následný příspěvek, jaké jsou vztahy mezi mým současným ovládacím terminálem a `/dev/tty`?

Přijatá odpověď:

Příkaz tty (1) vrací název terminálu připojeného ke standardnímu vstupu. Může to být ovládací terminál, nebo nemusí. Proces může mít i ovládací terminál, ale není v kameni psáno, že tento terminál musí být připojen ke standardnímu vstupu.

Z manuálové stránky POSIX pro tty (1):

Obslužný program tty zapíše na standardní výstup název terminálu, který je otevřený jako standardní vstup. Použitý název musí být ekvivalentní řetězci, který by vrátila funkce ttyname() funkce definovaná ve svazku Systémová rozhraní POSIX.1‐2008.

Zkuste to sami; spustit

< /dev/null sh -c 'tty; sleep 10; echo "Done."'

a stiskněte Ctrl+C poté, co uvidíte zprávu „not a tty“ napsanou tty protože standardní vstup to není (pseudo-)terminál.

Na druhé straně /dev/tty je vždy synonymem pro řídící terminál procesu za předpokladu, že proces skutečně ovládací terminál.


Linux
  1. Čtěte a zapisujte data odkudkoli s přesměrováním v terminálu Linux

  2. Linux:Rozdíl mezi /dev/console, /dev/tty a /dev/tty0?

  3. Co se stane s výstupem procesu, který byl odmítnut a ztratil svůj terminál?

  1. Jaké jsou vztahy mezi aktuálním řídicím terminálem a `/dev/tty`?

  2. Jak připojit výstup do souboru?

  3. Uložte výstup příkazu data a watch do souboru

  1. Jak zachytit terminálové relace a výstup pomocí příkazu skriptu Linux

  2. Rekurzivně procházet adresáře a spustit příkaz na souboru v adresáři

  3. Proč Linux potřebuje mít `/dev/cdrom` i `/media/cdrom`?