chmod 000 / dev / stdinは端末を永久に無効にしますか?


12

私はUnix The Textbookの 質問(8章、16ページ、207ページ)からの質問に取り組んでいます

与えるchmodことと同じタスクを実行し、コマンドラインmesg nmesg yコマンドが行うが。(ヒント:端末を含むすべてのハードウェアデバイスには、/devディレクトリに関連ファイルがあります。)

答えは次のとおりです。

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

しかし、私はあなたが使用するとどうなりますchmod 000 /dev/stdinか?

ターミナルでコマンドを入力できなくなりましたか?


2
ファイルが開かれたときにのみアクセス許可がチェックされることを理解することが重要です。したがって、シェルの標準入力が何であれ、その許可を変更しても、シェルと端末エミュレーターまたはsshなどの通信チャネルが既に開いているため、コマンドの入力がロックアウトされることはありません。 ターミナルをまだ開いていないため、mesg nアクセス権を使用してfutureに影響を与えることができます。writewrite
-zwol

回答:


20

いいえ、/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)"です。


2
tty制御端末を報告しませんが、もしあれば、端末は標準入力で開きます。そのため、/ dev / stdinがデバイスではなく、/ dev / stdinで開かれたファイルへの特別なシンボリックリンクであるLinuxでは、(stdinがttyデバイスの場合、モードを変更しようとするとchmot "$(tty)"、ほぼ同じにchmod /dev/stdinなりますnot a tty現在のディレクトリ内のファイルその他)。/dev/$(ps -o tty= -p "$$")制御端末についてはを参照してください。
ステファンシャゼラス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.