teeとttyの組み合わせ[閉じる]

teeとttyの組み合わせ[閉じる]

私は本から読んでからコマンドを試しました。

sudo ls | tee /dev/tty3a

このコマンドは、を使用しても拒否された権限を付与しますsudo
ここで、ttyは私がすでに知っているテレタイプです。しかし、3aとttyはどういう意味ですか?

ベストアンサー1

/devデバイスファイル名はUnixバリアントによって異なります。/dev/tty現在、ターミナルなど各所で見られるものがあります。これは、/dev/tty3aSolarisおよびSCO OpenServerを含む一部のUnixバリアントの4番目のシリアルポート名のようです。 Linuxに対応するものは、/dev/ttyS3.sols|tee /dev/tty3a出力がls4番目のシリアルポートにコピーされます。

シリアルポートにデバイスが接続されていない場合は、エラー(「入力/出力エラー」)が表示されます。シリアルポート用のドライバがないと、他のエラー(「デバイスなし」)が発生します。デバイスノードがまったく存在しない場合は、もちろん「該当するファイルやディレクトリはありません」というメッセージが表示されます。

デバイスノードがあるがアクセス権がない場合は、「アクセス拒否」エラーが表示されます。ルートとして実行されている場合、またはハードウェア端末がシリアルポートに接続されていて端末にログインしていない場合、デバイスにアクセスできません。

デバイスが存在すると仮定してrootとしてアクセスするには、rootとしてteeコマンドを実行する必要があります。たとえば、次のようになります。

ls | sudo tee /dev/tty3a

これは root としてのみ実行できるsudo ls | tee /dev/tty3aため動作しません。lsコマンドは元のユーザーの引数ではなく、tee元のユーザーとして実行されます。sudoこのコマンドでは、パイプは元のシェルによって生成され、呼び出しはsudoパイプの左側を形成します。ルートlsとして実行するにはtee作成する必要がありますsudo ls | sudo tee /dev/tty3a(パイプの作成はまだ元のシェルにあります)。これら2つのコマンドをrootとして実行し、パイプ設定をrootとして実行するには、rootとしてシェルを呼び出してパイプを設定する必要があります。sudo sh -c 'ls | tee /dev/tty3a'

1シリアルポート番号は0から始まります。

おすすめ記事