Warum funktioniert die Umleitung von 'script' nach / dev / null / so, dass 'screen' als anderer Benutzer angezeigt wird?

36

Ich wurde von einem Benutzer angehalten, ein bestimmtes Skript mit langer Laufzeit auszuführen. Ich wollte screen benutzen, bekam aber die Fehlermeldung "Das Terminal '/ dev / pts / 4' kann nicht geöffnet werden - bitte überprüfen."

Also googelte ich herum und stieß auf einen Forumsbeitrag, der zum Laufen aufforderte $ script '/dev/null/'. Ich tat es und dann konnte ich filmen.

Warum funktioniert das? Was macht su, wenn dieser Bildschirm nicht als der angeklagte Benutzer ausgeführt werden kann? Warum wird das Umleiten von 'script' nach / dev / null ansonsten verhindert? Verwendet es ein Skript, um irgendwo ein Protokoll als der ursprüngliche Benutzer zu schreiben?

Ichorus
quelle
2
Besser wäre es, suvon einer Bildschirmsitzung aus zu starten .
Justarobert
@justarobert nicht, wenn Sie möchten, dass mehrere Benutzer für ein Dienst- / Batch-Skript-Konto eine Verbindung zu demselben Bildschirm herstellen können.
Ashley

Antworten:

40

Technisch gesehen leiten Sie hier nichts um.

Durch das Aufrufen wird script /dev/nulllediglich scriptdas gesamte Typoskript gespeichert. In /dev/nullder Praxis bedeutet dies, dass der Inhalt verworfen wird.

Siehe man scriptfür detaillierte Informationen und util-linux-ng - Paket für die Umsetzung ( misc-utils/script.c).

Das hat eigentlich nichts damit zu tun screen. Warum dies funktioniert, scripthat den Nebeneffekt, dass ein Pseudoterminal für Sie unter erstellt wird /dev/pts/X. Auf diese Weise müssen Sie es nicht selbst tun, und der Bildschirm weist keine Berechtigungsprobleme auf. Wenn Sie suvon Benutzer A zu Benutzer B wechseln screen, versuchen Sie durch direktes Aufrufen , den Besitz des Pseudoterminals von Benutzer A zu erlangen . Dies wird nicht gelingen, wenn Sie root sind . Aus diesem Grund wird die Fehlermeldung angezeigt.

Karol J. Piczak
quelle
6

Um direkt in Ihr Terminalfenster auszugeben, muss das laufende Programm in der Lage sein, auf Ihr steuerndes Terminal zu schreiben. Wenn Sie einen xterm oder ssh oder eine andere virtuelle Verbindung verwenden , um Ihren Steueranschluss (im Gegensatz zu einem echten Live - direkt angeschlossenen Endgerät im Gegensatz) ist ein Pseudo-tty (pty).

Ihre Pty ist nur für Sie mit Schreibberechtigung eingerichtet, wenn Sie sich anmelden. Anderenfalls können andere Benutzer auf Ihr Display schreiben (oder es lesen). Wenn Sie sich also an einen anderen Benutzer wenden (und dieser Benutzer kein Root-Benutzer ist), hat dieser Benutzer keinen Zugriff auf das zugrunde liegende Pty.

Bei komplexeren E / A-Vorgängen wie dem Bildschirm ist jedoch ein direkter Zugriff auf das Pty erforderlich, damit die Steuerung des gesamten Bildschirms funktioniert. In diesem Fall treten Probleme auf, wenn die Person, die den Befehl ausführt, keinen ordnungsgemäßen Zugriff auf das steuernde Terminal hat.

Wenn Sie das Skript nach / dev / null umleiten, versucht der Bildschirm nicht, auf das steuernde Terminal zu schreiben, sodass das Berechtigungsproblem nicht auftritt.

Phil Hollenback
quelle
2
Wie kann ich also sehen, was der Bildschirm schreibt, wenn er nach / dev / null geht? Ich bin mir ziemlich sicher, dass ich es falsch verstanden habe und es geht nicht wirklich nach / dev / null, aber wohin geht es?
User63623
"it", was Bildschirmausgabe bedeutet, geht nicht zu /dev/null. Erstens: Skript zeichnet Ihre Sitzung auf (siehe Manpage), und Sie brauchen sie überhaupt nicht: Das geht nach / dev / null. Aber es hat keinen Nebeneffekt: Es macht ein Pseudoterminal, und jetzt verwenden Sie dieses und der Bildschirm kann in die Antwort von oneSee @ karol-piczak schreiben.
Nanne