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?
linux
bash
gnu-screen
su
Ichorus
quelle
quelle
su
von einer Bildschirmsitzung aus zu starten .Antworten:
Technisch gesehen leiten Sie hier nichts um.
Durch das Aufrufen wird
script /dev/null
lediglichscript
das gesamte Typoskript gespeichert. In/dev/null
der Praxis bedeutet dies, dass der Inhalt verworfen wird.Siehe
man script
fü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,script
hat 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 Siesu
von Benutzer A zu Benutzer B wechselnscreen
, 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.quelle
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.
quelle
/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.