次の問題を解決しています。Unix教科書 (8章16号、207ページ):
コマンドと
chmod
同じ操作を実行するコマンドラインを提供します。 (ヒント:端末を含むすべてのハードウェアデバイスには、ディレクトリに関連ファイルがあります。)mesg n
mesg y
/dev
私はその答えが次のようになると信じています:
mesg n
=chmod 770 /dev/stdout
mesg y
=chmod 777 /dev/stdout
しかし、使用するとどうなるのだろうかchmod 000 /dev/stdin
。
端末にコマンドを入力できないようにロックされていますか?
答え1
/dev/stdin
いいえ、/dev/stdout
間違ったデバイスです。これは端末装置ではなく、それぞれ標準入力と標準出力の別名です。定義によると、標準入力と標準出力は次のようになります。ファイル記述子アプリケーションは開かれると予想され、一般的な意味を持ちます(ファイル記述子はそれぞれ0と1、2は標準エラーです)。/dev/stdin
などのデバイスは、アプリケーションにファイル名が必要ですが、アプリケーションユーザーが特定のファイルを開くのではなく、特定のファイル記述子にアクセスしたい場合に便利です。/dev/stdout
Unixのバリエーションによっては、デバイスファイルではない可能性があります。たとえば、Linuxでは、/proc/self/fd/0
そのファイル記述子でプロセスが開かれたすべてのファイルへの「魔法の」シンボリックリンクです。
/dev/stdin
の権限を変更すると、/dev/stdout
これらのファイル名が明示的に使用されている場合にのみ変更されます。権限は特定のファイル名を開くときにのみ重要であるため、端末に関連するものには影響を与えず、標準入力と標準出力の一般的な使用には影響しません。
することは、mesg
プロセスの権限を変更することだけです。制御端子。端末で実行されるアプリケーションの場合、端末は標準入力、標準出力、および標準エラー(ファイル記述子0、1、および2)で開きます。コマンドを使用してtty
端末デバイスが何であるかを確認できます。mesg n
と同等でchmod g-w "$(tty)"
同等mesg y
ですchmod g+w "$(tty)"
。