同じ Linux マシンにログインしているユーザにメッセージを送る「wall」「write」コマンド

以前、/dev/pts/0 などに echo すると、他のユーザのセッションに対して echo できる、というネタを紹介した。

tty コマンドの結果が /dev/pts/0 なユーザのセッションにおいて、

$ echo 'TEST' > /dev/pts/0

と実行すると、自身のプロンプトに TEST という文字列が出力される。さらに、ココで別の TTY を指定すると、

$ echo 'TEST' > /dev/pts/1

今度は /dev/pts/1 のユーザのプロンプトに、突然 TEST の文字が出力される。


Windows には以前、net sendmsg というコマンドがあり、コレを使うと他のユーザに向けてメッセージを送信できた。


これらと同様に、Linux においても、同一マシンにログインする別のユーザに向けてメッセージを飛ばすコマンドがあった。それが wallwrite コマンドだ、

wall コマンド

wall コマンドは、ログインしている全ユーザにメッセージを一斉送信できる。$ wall でメッセージが入力できるようになり、Control + D を押して終了すると、メッセージが一斉送信される。

write コマンド

write コマンドはユーザ名を指定してメッセージを送信できる。前述の > /dev/pts/0 に近い。$ write 【ユーザ名】 と指定してメッセージ入力に移る。メッセージ送信を終了するには Control + D だ。

日本語は普通には送信できない

残念ながら、これらのコマンドでは日本語を普通には送信できない。日本語文字が文字化けしてしまうのだ。Base64 エンコードして送信することで回避する方法もあったりしたが、少々面倒。

イマドキ使う機会もないかもしれないが、見つけたので紹介した次第。

こんな記事で2019年はさようなら。良いお年を。