TTYは通常のファイルとどう違うのですか? [コピー]

TTYは通常のファイルとどう違うのですか? [コピー]

私がssh理解したいオプションは-t次のとおりです。

-t 疑似端末割り当てを強制します。これは、リモートコンピュータ上で任意の画面ベースのプログラムを実行するために使用することができ、これは、例えばメニューサービスを実装する場合に有用である。複数の -t オプションは、ssh にローカル tty がない場合でも tty 割り当てを強制します。

したがって、TTYはデバイスです。 TTYを参照する1つの方法は、記述子(TTYデバイスを開いて得た)を使用することです。 STDIN、STDOUT、STDERR は記述子です。ただし、必ずしもTTYデバイスを参照するわけではありません。-tオプションを使用すると、TTYデバイスを参照するように強制されます。このオプションの機能を理解するために、これは正しい推論方法ですか?

一般的なSTDIN、STDOUT、およびSTDERRを使用して達成できないTTYの特別な点は何ですか?

-tオプションのユースケースの例を歓迎します。

sshこのTTYはどのようなメカニズムに割り当てられますか?sshサーバーまたはクライアントから新しいTTYを作成しますか?これを確認するには? (新しいノードが表示される必要があります/dev/...)この新しいTTYは、既存のSTDIN、STDOUT、およびSTDERRにどのようにバインドされますか?

答え1

-tオプションは、[標準ファイル記述子]がTTYデバイスを参照するように強制します。このオプションの機能を理解するために、これは正しい推論方法ですか?

いいえ。この-tオプションは離れてマシンのstdin / out / errは、一対のパイプではなく擬似ttyスレーブに接続されています。

デフォルトでは、次の条件が満たされると、ptyで実行されます。(ㅏ)明示的な命令は下されず、(二)SSHの標準入力顧客それ自体はttyです。-t場合でも(ㅏ)条件が満たされず、二つそのうち(-tt(二)満足していません。

sshはTTYを割り当てるためにどのようなメカニズムを使用しますか?

いくつかのシステム依存メカニズムを介して。今日、これは主に[1]master_fd = posix_openpt()が続く標準です。slave_fd = open(ptsname(master_fd))

sshはサーバーまたはクライアントから新しいTTYを生成しますか?

ssh いつも次に、新しい擬似ttyを作成します。仕える人つまり、リモートシステムにあります。サーバーにpseudo-ttyが割り当てられ、ローカル(クライアント)stdinがttyの場合、ローカルttyはrawモードに設定されます。

これを確認するには? (新しいノードが表示されます/dev/

不要。ただし、2019年の一般的なLinuxシステムでは、/dev/ptsそれぞれの新しいpseudo-ttyの下に新しいファイルが表示されます。

この新しいTTYは、既存のSTDIN、STDOUT、およびSTDERRとどのような関係がありますか?

他のファイル記述子と同様に、等を使用するdup2(slave_fd, 0)と、参照されているすべてのファイルが閉じられます。 ptyが割り当てられると、リモートセッションの制御ttyにもなります。dup2(slave_fd, 1)dup2(newfd, oldfd)oldfd

-tオプションのユースケースの例を歓迎します。

ssh -t /bin/bashログインシェルがあるシステムでcsh-t省略すると、/bin/bashプロンプト、ジョブ制御、行編集機能などなしで実行されます。

一般的なSTDIN、STDOUT、およびSTDERRを使用して達成できないTTYの特別な点は何ですか?

検索してください;-)

パイプは、ttyや他の種類のファイルよりも「通常の」標準入力ではありません。

[1]それ自体に多くの問題があります(名前空間をマウントしてマウントするために複数のdevptを使用)。これがTIOCGPTPEERLinuxにioctlが追加された理由です。これは、ファイルシステムを経由せずにスレーブデバイスを参照するfdを返します。

関連情報