Frage Warum kann "scripte" nach / dev / null / "screen" umgeleitet werden, um als ein anderer Benutzer ausgeführt zu werden?


Ich wurde in einen Benutzer hineingegeben, um ein besonders lang laufendes Skript auszuführen. Ich wollte den Bildschirm verwenden, aber ich habe die Fehlermeldung "Ihr Terminal kann nicht geöffnet werden / dev / pts / 4 '- bitte überprüfen."

Also googelte ich herum und stieß auf einen Forenbeitrag, der angewiesen wurde zu rennen $ script '/dev/null/'. Ich tat es, und dann konnte ich screenen.

Warum funktioniert das? Was kann dieser Bildschirm nicht als der Sued Benutzer ausführen? Warum wird "script" nach / dev / null umgeleitet, was sonst verhindert wird? Verwendet es Skript, um ein Protokoll als der ursprüngliche Benutzer irgendwo zu schreiben?


35
2018-04-04 16:07


Ursprung


Cleaner wäre zu rennen su innerhalb einer Bildschirmsitzung. - justarobert
@justarobert nicht, wenn Sie mehrere Benutzer in der Lage sein möchten, an denselben Bildschirm für ein Service / Batch-Skript-Konto anzuschließen. - Ashley Steel


Antworten:


Nun, technisch wirst du hier nichts umleiten.

Berufung script /dev/null macht nur script rette das Ganze Typoskript in /dev/null was in der Praxis bedeutet, den Inhalt zu verwerfen.

Sehen man script für detaillierte Informationen und util-linux-ng Paket zur Implementierung (misc-utils/script.c).

Das hat nichts damit zu tun screen tatsächlich. Warum das funktioniert, ruft an script hat einen Nebeneffekt, ein Pseudo-Terminal für Sie zu erstellen /dev/pts/X. Auf diese Weise müssen Sie es nicht selbst tun, und Bildschirm wird keine Berechtigungsprobleme haben - wenn Sie su vom Benutzer EIN zum Benutzer Bdurch direktes Aufrufen screen Sie versuchen, Besitz von Benutzer zu ergreifen EINPseudo-Terminal. Dies wird nur gelingen, wenn du es bist Wurzel. Deshalb sehen Sie die Fehlermeldung.


40
2018-04-04 16:34





Um direkt in Ihr Terminalfenster auszugeben, muss das laufende Programm in der Lage sein, in Ihr steuerndes Terminal zu schreiben. Wenn Sie einen xterm oder ssh oder eine andere virtuelle Verbindung verwenden (im Gegensatz zu einem realen live direkt verbundenen Terminal), ist Ihr steuerndes Terminal ein Pseudo-tty (Pty).

Ihr Pty ist nur mit Schreibberechtigung für Sie eingerichtet, wenn Sie sich anmelden, anderenfalls könnten andere Benutzer auf Ihrem Bildschirm kritzeln (oder lesen). Wenn Sie also mit einem anderen Benutzer verbunden sind (und dieser Benutzer nicht root ist), hat dieser Benutzer keinen Zugriff auf den zugrunde liegenden Benutzer.

Allerdings erfordern komplexere I / O wie Bildschirm direkten Zugriff auf die Pty zu arbeiten, es ist Magie der Kontrolle Ihres gesamten Bildschirms. Das ist der Fall, wenn Sie Probleme mit der Person haben, die den Befehl ausführt, der keinen ordnungsgemäßen Zugriff auf das steuernde Terminal hat.

Die Umleitung des Skripts nach / dev / null führt dazu, dass der Bildschirm nicht versucht, auf das steuernde Terminal zu schreiben, sodass das Berechtigungsproblem nicht auftritt.


5
2018-04-04 16:33



Also wie kann ich sehen, welcher Bildschirm schreibt, wenn es auf / dev / null geht? Ich bin mir ziemlich sicher, dass ich missverstanden habe und es geht nicht wirklich nach / dev / null, aber wohin geht es? - user63623
"es", dh Bildschirmausgabe, geht nicht zu /dev/null. Erstens: Skript zeichnet Ihre Sitzung auf (siehe die Manpage), und Sie brauchen sie überhaupt nicht Das Geht zu / dev / null. Aber es hat keinen Nebeneffekt: Es macht ein Pseudo-Terminal, und jetzt verwendest du dieses, und der Bildschirm kann an diese eine Seite schreiben. - Nanne