「スクリプト」を/ dev / null /にリダイレクトすると、「スクリーン」が別のユーザーとしてsuになっているときに機能するのはなぜですか?


37

特定の長時間実行されるスクリプトを実行するために、ユーザーに夢中になりました。画面を使用したいのですが、「端末 '/ dev / pts / 4'を開けません-チェックしてください」というエラーメッセージが表示されました。

だから私はグーグルで検索して、実行するよう指示されたフォーラムの投稿に出会いました$ script '/dev/null/'。私はそうし、それから私はスクリーニングできた。

なぜこれが機能するのですか?その画面を実行しているsuは、su'edユーザーとして実行できませんか?なぜ 'script'を/ dev / nullにリダイレクトすると、それが妨げられるのですか?スクリプトを使用して、元のユーザーとしてログをどこかに書き込みますか?


2
クリーナーはsu、画面セッション内から実行することになります。
justarobert

複数のユーザーがサービス/バッチスクリプト実行アカウントの同じ画面にアタッチできるようにする場合は、@ justarobertは使用できません。
アシュリー

回答:


41

技術的には、ここでは何もリダイレクトしていません。

呼び出すscript /dev/nullだけになりscript、全体のセーブtypescriptです/dev/null練習手段の内容を破棄しているが。

man script詳細情報および実装用util-linux-ngパッケージ(misc-utils/script.c)を参照してください。

これはscreen実際には関係ありません。なぜこれが機能するのかを呼び出すとscript、で擬似端末が作成されるという副作用があります/dev/pts/X。この方法では、自分で行う必要はなく、画面に権限の問題はありません- suユーザーAからユーザーBに直接移動するscreen場合、ユーザーAの擬似端末を取得しようと直接試みます。rootでない限り、これは成功しません。そのため、エラーメッセージが表示されます。


6

端末ウィンドウに直接出力するには、実行中のプログラムが制御端末に書き込むことができる必要があります。xtermまたはsshまたはその他の仮想接続(実際の直接接続端末とは対照的に)を使用している場合、制御端末は擬似tty(pty)です。

あなたのptyは、あなたがログオンしたときにあなただけのための書き込み許可で設定されます。したがって、別のユーザーにsu(およびそのユーザーがrootでない)すると、そのユーザーは基礎となるptyにアクセスできません。

ただし、画面などのより複雑なI / Oでは、画面全体を制御する魔法のように機能するためにptyに直接アクセスする必要があります。それは、コマンドを実行している人が制御端末に適切にアクセスできないという問題に遭遇したときです。

スクリプトを/ dev / nullにリダイレクトすると、画面は制御端末に書き込もうとしないため、アクセス許可の問題は発生しません。


2
それでは、/ dev / nullに移動した場合にどの画面が表示されるのかをどのように確認できますか?私は誤解していると確信しており、実際には/ dev / nullには行きませんが、どこに行きますか?
user63623

画面出力を意味する「it」はに移動しません/dev/null。まず:スクリプトは(マンページを参照してください)あなたのセッションを記録し、あなたがすべてでそれを必要としない:そう、それはは/ dev / nullになります。しかし、副作用はありません:擬似端末を作成し、今はこれを使用しています。画面はこの端末に書き込むことができます@ karol-piczakの答えを参照してください。
ナネ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.