write コマンド

目的

通信回線をオープンして、リアルタイムで、 システム上の他のユーザーにメッセージを送信します。

構文

ホスト上でユーザーからの応答を待っているすべてのメッセージを照会し、そのメッセージにハンドルを付けて表示するには、次のようにタイプします。

write -q [ -n Host ]

ユーティリティーまたはシェル・スクリプトによって送信されたメッセージに応答したり、指定したハンドルに関連したメッセージを再表示するには、次のようにタイプします。

write -hHandle, { ok | cancel | query } [ -n Host ]

ユーザー (オプションで他のホスト上) または特定のデバイスにメッセージを送信するには、次のようにタイプします。

write [ -r  ] { [ -n HostUser | User@Host  } [  Line ]

説明

write コマンドを使用すると、リアルタイムでメッセージをシステム上で送信できます。このコマンドによって、もう一方のログイン・ユーザーと会話式に通信することができます。各ユーザーは、他のワークステーションから短いメッセージを交互に送受信します。 長いメッセージの場合は、まずメッセージ全体をファイルに入れてから、そのファイルを write コマンドの入力データとしてリダイレクトすると送信できます。

メッセージを受信する側のユーザー (User パラメーターで指定) は、ログイン済みで、メッセージ許可を拒否している状態であってはなりません。ログインしていないユーザーにメッセージを送信すると、メッセージ「user not logged in」が表示されます。mesg コマンドを no に設定してメッセージ許可を拒否しているユーザーにメッセージを送信すると、メッセージ「write: permission denied」が表示されます。

write コマンドを発行すると、下記のメッセージが、ビープ音 (ASCII BEL 文字) とともにメッセージ受信者またはターゲットに即座に送信されます。

Message from SenderID on SenderHostname (ttynn) [Date] ... 

正常に接続すると、write コマンドは 2 つの ASCII BEL 文字を両方のワークステーションに送信します。ビープ音によって、送信側ユーザーにはメッセージが開始できたことを、受信側ユーザーにはメッセージを送信中であることを警告します。

Enter キーを押すごとに 1 行送信されます。送信側から受信側への通信リンクがオープン状態のままであれば、Ctrl-D キー・シーケンスで送信リンクを終了するまで送信は継続します。 その後、テキスト終結文字 (<EOT>) が宛先ワークステーションに送信されると、write コマンド・ モードは終了します。

受信側ユーザーまたはターゲット・ユーザーは、write コマンドを送り返すことで、送信元ユーザーに応答することができます。 これによって、受信側から送信側へ戻す通信回線がオープンされ、返事としてのメッセージ応答が可能になります。このタイプのメッセージのやり取りでは、 以下のような規則が役に立ちます。すなわち、最初に送信先ユーザーに書き出す際、テキストを送信する前に応答を待ちます。メッセージの終わりには o (メッセージ終了) のようなシグナルを付けて相手側ユーザーが応答するよう警告します。会話を終了するときには、oo (メッセージ終了および送信終了) を使用します。

行の先頭に文字 !(感嘆符) が付いている場合には、write コマンドはシェルを呼び出して残りの行をコマンドとして実行します。

複数のワークステーションにログインしているユーザーまたは複数のプロセスを多重使用しているユーザーに書き込むときには、 write コマンドは /etc/utmp ファイル内に見つかった最初のログイン・インスタンスをメッセージ送達地点 (通常はログイン・シェルまたはコンソール・シェル) として使用し、下記のメッセージを表示します。

UserID is logged on more than one place.
You are connected to "Workstation".
Other locations are:
Workstation

このメッセージを受け取ったら、最初のログインのロケーション以外の場所にメッセージを送信したい場合は、そのロケーションの Line (例えば、tty00) を指定して、別のロケーションで送信側ユーザーに接触することができます。

他のユーザーへの書き込み許可は、送信側ユーザーによって mesg コマンドで認可を与えられるか、拒否されるかで決まります。一部のコマンドは、出力による干渉を防止するために、実行中はメッセージ許可を拒否します。root ユーザー権限を持つユーザーは、ワークステーションのメッセージ許可に関係なく、どのワークステーションにも書き込みができます。

write コマンドを使用すると、他のホストのユーザーと会話できます。 -nHostName フラグまたは User@Host パラメーターを使用すると、リモート・ホスト上のユーザーを識別できます。リモート・ホスト上のユーザーに書き込むには、writesrv デーモンを、現行ホスト上とリモート・ホスト上の両方で実行中でなければなりません。

write コマンドは、qdaemon デーモンで使用して他のホストのユーザーにメッセージを送信し、応答を待つこともできます。有効な応答は下記の 3 つのみです。

項目 説明
ok 元の書き込みは状況 0 で終了します。
cancel 元の書き込みは状況 1 で終了します。
query 所定のハンドルに対応するメッセージが表示されます。

パラメーター

項目 説明
User メッセージ・テキストを受信するユーザーのユーザー ID を指定します。
User@Host メッセージ・テキストを受信するユーザーのユーザー ID およびリモート・ホストを指定します。
Line 別のロケーション (例えば、tty00) で送信先ユーザーと交信します。

フラグ

項目 説明
-h Handle,Reply 応答オプションのある write を使用して、ユーティリティーまたはシェル・スクリプトによって送信されたメッセージに応答します。Handle 変数に使用する値は、内部で生成され、元のメッセージのテキスト内のユーザーに与えられます。応答には、okcancel または query が使用できます。
-nHost リモート・ホストを指定します。Host 変数にはニックネームまたは IP アドレスを指定できます。
-q ホスト上でユーザーからの応答を待っているすべてのメッセージを照会し、そのメッセージにハンドルを付けて表示します。
-r メッセージ・ハンドルを生成してメッセージのヘッダーに入れ、そのメッセージを送信して応答を待ちます。このフラグは、オペレーター・メッセージ用に qdaemon デーモンで使用され、シェル・スクリプトに入れることもできます。対話型会話には使用されません。終了状況 0 は応答が ok であったことを示し、終了状況 1 は応答が cancel であったことを示し、終了状況 2 はユーザーに接触できなかったことを示します。
要件:
  • すべてのフラグを機能させるためには、ターゲット・ホスト上で writesrv デーモンが実行中でなければなりません。-n フラグも @Host も使用せず、-h-q、または -r を使用している場合は、ホスト上で writesrv デーモンを実行中でなければなりません。
  • TCP/IP はマシンにインストールされていないが HostName が設定されている場合、-h-q、 または -r フラグの付いた write コマンドを使用してローカル・ホスト上のユーザーと会話するには、/etc/hosts ファイルの loopback エントリーの最後に自分のホスト名を追加する必要があります。 元のエントリーには下記のように記述されています。
    127.0.0.1 loopback LocalHostName
    新しいエントリーには下記のように記述します。
    127.0.0.1 loopback LocalHostName HostName

終了状況

このコマンドは、下記の終了値を戻します。

項目 説明
0 正常終了。
>0 指定されたユーザーはログインしていないか、許可を拒否しました。

  1. ログインしているユーザーにメッセージを書き込むには、以下のように入力します。
    write june
    Enter キーを押し、下記のように入力します。
    I need to see you! Meet me in the computer room at 12:30.
    次に、Ctrl-D キー・シーケンスを押して write コマンド・モードを終了します。

    ユーザー ID が karen で、ワークステーション tty3 を使用中であれば、 june のワークステーションは下記のように表示します。

    Message from karen on trek tty3 Aug 17 11:55:24  ...
    I need to see you!  Meet me in the computer room at 12:30.
    <EOT>
  2. 会話をするには、以下のように入力します。
    write june
    Enter キーを押し、下記のように入力します。
    Meet me in the computer room at 12:30.
    o
    これによって会話が開始します。2 行目の先頭の文字 o はメッセージが終了したことを示します。これは、June に応答を待っていることを知らせます。継続したい場合は、Ctrl-D を押さないでください。

    June は以下のように入力して応答します。

    
    write karen
    Enter キーを押し、下記のように入力します。
    I'm running tests at 12:30. Can we meet at 3?
    o
    ここで下記のように応答できます。
    OK--the computer room at 3.
    oo
    oo の意味はメッセージ終了および送信終了 で、他に伝えることがないことを June に伝えます。June も終了 (oo) したら、Ctrl-D を押して会話を終了します。
  3. 作成したメッセージをあるユーザーに送信するには、下記のように入力します。
    write june < message.text
    このコマンドは、ファイル message.text の内容を june のワークステーションに書き込みます。
  4. あるワークステーションを使用中のユーザーに書き込むには、下記のように入力します。
    write -n console
    Enter キーを押し、下記のように入力します。
    The printer in building 998 has jammed.
    Please send help.
    次に、Ctrl-D キー・シーケンスを押します。

    このコマンドは、ワークステーション /dev/console にログインしているユーザーにメッセージを書き込みます。

  5. ホスト partya のユーザー spuds にメッセージを送信するには、下記のように入力します。
    write -n partya spuds
    Enter キーを押し、下記のように入力します。
    Your new tape has just arrived,
    come see me to pick it up.
    Thanks!
    次に、Ctrl-D キー・シーケンスを押します。

    または

    write spuds@partya
    Enter キーを押し、下記のように入力します。
    Your new tape has just arrived,
    come see me to pick it up.
    Thanks!
    次に、Ctrl-D キー・シーケンスを押します。
  6. ここで、qdaemon デーモンによって送信されたメッセージの例を示します。
    
    Message from mary on trek (tty10) Aug 17 10:03:34 ...
    Use "write -h 6398492,reply" to reply
    Please insert tape number 5 into rmt0.
    <EOT>
    肯定的に応答するには、下記のように入力します。
    
    write -h 6398492,ok
    次に、Ctrl-D キー・シーケンスを押します。

    否定的に応答するには、下記のように入力します。

    
    write -h 6398492,cancel
    次に、Ctrl-D キー・シーケンスを押します。

    -h フラグを使用すると、ホスト名またはユーザー ID を与える必要がなくなります。 この情報はハンドルにより追跡されます。

ファイル

項目 説明
/etc/hosts TCP/IP ホスト情報が入っています。
/etc/utmp whowrite、および login コマンドに関するユーザーおよびアカウント情報が入っています。