私は本から読んでからコマンドを試しました。
sudo ls | tee /dev/tty3a
このコマンドは、を使用しても拒否された権限を付与しますsudo
。
ここで、ttyは私がすでに知っているテレタイプです。しかし、3aとttyはどういう意味ですか?
答え1
/dev
デバイスファイル名はUnixバリアントによって異なります。/dev/tty
現在、ターミナルなど各所で見られるものがあります。これは、/dev/tty3a
SolarisおよびSCO OpenServerを含む一部のUnixバリアントの4番目のシリアルポート名のようです。 Linuxに対応するものは、/dev/ttyS3
.sols|tee /dev/tty3a
出力がls
4番目のシリアルポートにコピーされます。
シリアルポートにデバイスが接続されていない場合は、エラー(「入力/出力エラー」)が表示されます。シリアルポート用のドライバがないと、他のエラー(「デバイスなし」)が発生します。デバイスノードがまったく存在しない場合は、もちろん「該当するファイルやディレクトリはありません」というメッセージが表示されます。
デバイスノードがあるがアクセス権がない場合は、「アクセス拒否」エラーが表示されます。ルートとして実行されている場合、またはハードウェア端末がシリアルポートに接続されていて端末にログインしていない場合、デバイスにアクセスできません。
デバイスが存在すると仮定して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から始まります。
答え2
本で見つけた例は、自分の画面と他の端末画面に同時に書き込むことができることを示しています。同じサーバーにログインして2回実行すると、w
次の結果が表示されます。
$ w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
joe pts/1 :0 21:53 0.00s 0.04s 0.00s w
joe pts/2 :0 22:38 3.00s 0.01s 0.01s /bin/bash
最初のコンソールで以下を作成します。
$ seq 3 | tee /dev/pts/1
デュアル出力が得られます。
その後、同じコンソールで試してください。
$ seq 3 | tee /dev/pts/2
そして両方の画面で同じ出力が得られます。
これは、ログインしているモニター/コンソールが多く、1つのコンソールですべて更新したい場合に便利です。