GNU/Linux >> Linux の 問題 >  >> Linux

コマンド`tty`の出力とファイル`/dev / tty`はどちらも、現在のBashプロセスの制御端末を参照していますか?

  1. man ttyから

    tty –標準入力に接続されている端末のファイル名を出力します

    $ tty
    /dev/pts/2
    
  2. APUEから:

    歴史的に、UNIXシステムのほとんどのバージョンでの制御端末の名前は/dev/ttyでした。 。 POSIX.1は、制御端末の名前を判別するために呼び出すことができる
    ランタイム
    関数を提供します。

    #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
    

だから私はコマンドttyの出力かどうか疑問に思いました およびファイル/dev/tty どちらも現在のbashプロセスの制御端末を指しますか?

はいの場合、なぜコマンドtty 疑似端末スレーブファイルを出力します/dev/pts/2 、これは/dev/ttyとは異なります ?

ターミナルエミュレータlxterminal以降 その中で実行されているbashシェルは、疑似端末ペアを使用します。これは、疑似端末スレーブ/dev/pts/2ではありません。 bashシェルの制御端末?

/dev/tty および/dev/pts/2 相互にシンボリックリンクではないので、異なるファイルですか?

ありがとう。

フォローアップ投稿私の現在の制御端末と`/dev / tty`の間にはどのような関係がありますか?

承認された回答:

コマンドtty (1)標準入力に接続されている端末の名前を返します。これは制御端末である場合とそうでない場合があります。プロセスには制御端子がある場合もありますが、その端子を標準入力に接続する必要があることは石で書かれていません。

ttyのPOSIXマニュアルページから (1):

ttyユーティリティは、標準入力として開いている端末の名前を標準出力に書き込みます。使用される名前は、ttyname()によって返される文字列と同等でなければなりません。 POSIX.1‐2008のシステムインターフェイスボリュームで定義されている関数。

自分で試してみてください。実行

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

ttyによって書き出された「notatty」というメッセージが表示されたら、Ctrl+Cを押します。 標準入力は(疑似)端末ではないためです。

一方、/dev/tty プロセスが実際に持っているという条件で、は常にプロセスの制御端末の同義語です。 制御端末。


Linux
  1. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  2. 所有権を剥奪されてターミナルを失ったプロセスの出力はどうなりますか?

  3. 現在の制御端末と`/dev / tty`の間にはどのような関係がありますか?

  1. イオリダイレクションとヘッドコマンド?

  2. 現在のBashセッションで開いているファイル記述子(およびそれらが参照するファイル)を一覧表示するにはどうすればよいですか?

  3. 出力をファイルに追加する方法は?

  1. date および watch コマンドの出力をファイルに保存する

  2. ディレクトリを再帰的にループし、ディレクトリ内のファイルに対してコマンドを実行します

  3. 現在の bash セッションで開いているファイル記述子 (およびそれらが参照するファイル) を一覧表示する方法