Speicherort der Ausgabeverlaufsdatei der Bash-Shell


13

Wo speichert die Bash-Shell die eigentliche Terminalsitzung? Ich möchte die Ausgabe der zuvor verwendeten Befehle lesen. Alles, was ich googeln kann, ist das Speichern der Ausgabe eines Befehls.

Da die Ausgabe auf dem Bildschirm angezeigt wird, muss sie ohnehin irgendwo gespeichert werden. Meine Frage lautet also: Wo?

Antworten:


11

Bash speichert nur den Verlauf der von Ihnen ausgeführten Befehle (die Sie durch Eingabe abrufen können history). Wenn Sie das Zurückblättern nicht bereits auf einen sehr hohen Wert eingestellt haben, können die Ausgaben, die älter als der eingestellte Wert für das Zurückblättern sind, nicht angezeigt werden. Wenn Sie diesen Wert ebenfalls auf einen sehr hohen Wert einstellen, wird das Scrollen langsamer, da die Zeilen im Speicher gespeichert sind .

Um Ihre zukünftigen Befehle und deren Ausgaben zu speichern, gibt es einige Optionen:

Verwenden screen

Starten Sie eine Bildschirmsitzung , indem Sie eingeben screen. Sobald Sie innerhalb Bildschirm sind, drücken Sie Ctrl- a, dann :, dann eingeben log. Alle E / A-Vorgänge werden in screenlogDateien in dem Verzeichnis erfasst , in dem Sie den screenBefehl gestartet haben .

Verwenden script

Sie können mit der Eingabe beginnen script. Eine Skript - Sitzung beginnt das wird alle I / O auf eine Datei mit dem Namen zu erfassen typescript. Sie können die scriptSitzung beenden, indem Sie Ctrl- d und die Protokolle in der typescriptDatei anzeigen .

Verwenden tee

Tee ist ein handliches Werkzeug. Sie können so etwas tun:

$ bash | tee log.txt

Dies öffnet eine neue Bash-Shell in der, die Sie bereits ausführen. Wenn Sie exitdies nicht tun, können Sie die Ausgaben in der aufgerufenen Datei sehenlog.txt

Andere Möglichkeiten

Wie Dustin Kirkland in diesem Beitrag vorgeschlagen hat, können Sie auch Byobu verwenden . Ich habe zwar noch nie ein Terminal-Screencasting- Tool verwendet, aber das klingt auch nach einer Option.


6

Es gibt viele Fragen, die sich auf diese beziehen, aber alle beginnen mit der (richtigen) Annahme, dass die Ausgabe nicht protokolliert wird.

Meine Frage lautet also: Wo?

Nirgendwo: Die Ausgabe von Bash (und jeder anderen mir bekannten Shell) wird nicht protokolliert.

Da die Ausgabe auf dem Bildschirm angezeigt wird, muss sie ohnehin irgendwo gespeichert werden.

Es ist, aber höchstwahrscheinlich nicht im Klartext und nicht einmal auf der Festplatte (obwohl dies wirklich dem Terminalemulator überlassen ist): höchstwahrscheinlich und zumindest in den meisten Fällen in einem vom Terminalemulator zugewiesenen Speichersegment.

Es ist jedoch sicher, dass es nicht in einer Datei protokolliert wird, zumindest nicht von der Shell, und ich kenne keine Terminalemulatoren, die die Ausgabe standardmäßig in einer Datei protokollieren.

In der Tat bedeutet dies nicht, dass es unmöglich ist, die Terminal-Ausgabe zu protokollieren: Zuerst möchte ich etwas erwähnen, von dem ich glaube, dass es nicht vielen bekannt ist, da ich hier auf Ask Ubuntu noch nie jemanden gesehen habe, der dies erwähnt Zurückscrollen zu einer Datei (vielleicht gibt es andere Terminalemulatoren, die eine solche Funktionalität bieten, Konsole ist nur die einzige, die ich kenne), obwohl dies durch die Größenbeschränkung für das Zurückscrollen von Konsole begrenzt ist.

Dies ist jedoch häufig nicht wirklich nützlich, und höchstwahrscheinlich möchten Sie nach "geeigneten" Lösungen suchen, um die Ausgabe einer gesamten Sitzung in einer Datei zu protokollieren ( Wie protokolliere ich alle Eingaben und Ausgaben in einer Terminalsitzung? Und die Antwort von Ron ).


1

Es gibt einen Befehl mit dem Namen script. Wenn er nicht installiert ist apt-get install script, wird er ausgeführt.

Dann geben Sie im Terminal einfach script ein.

und machen Sie, was immer Sie wollen, nachdem Sie fertig sind, geben Sie einfach exit ein und dann wird in Ihrem aktuellen Verzeichnis eine Datei mit allen stdout- und stdin-Informationen erstellt.

hoffe es hilft dir


Paket ist NA in Ubuntu 18.04
Markroxor

1

Dies hat nichts mit Ihrer shell ( bash) zu tun , es ist keine Funktion des von Ihnen verwendeten Terminal-Emulators. Es wird im "Scrollback Buffer" Ihres Terminals gespeichert. Ich konnte keine klaren Erklärungen finden, wo genau dies gespeichert ist, aber die persönliche Erfahrung hat mir gezeigt, dass es irgendwo in gespeichert ist /tmp.

Wie die Antwort auf die Frage oben nahelegt, wird sie höchstwahrscheinlich in einer namenlosen Datei gespeichert. Um zu sehen, was ich meine, öffnen Sie eine neue Datei mit einem Texteditor:

gedit newfile

Schreiben Sie eine Textzeile in die Datei und speichern Sie sie. Öffnen Sie jetzt, während diese Datei noch geöffnet ist, ein Terminal und löschen Sie es:

rm newfile

Da Sie die Datei noch geöffnet haben gedit, können Sie weiter darauf schreiben. Sie können sogar mehrere Gigabyte an Daten darauf schreiben, obwohl die Datei gelöscht wurde. Das liegt daran, dass beim Löschen einer Datei lediglich der Link entfernt wird, der auf den Inode verweist . Wenn sein Dateideskriptor von einem anderen Programm offengehalten wird, können Daten darauf geschrieben werden, obwohl es keine tatsächliche Verknüpfung (Datei) mehr gibt, die dem Dateideskriptor auf dem Dateisystem entspricht.

Das alles soll heißen, dass der Verlauf Ihres Terminals wahrscheinlich mit einem solchen Trick irgendwo in einer gelöschten Datei gespeichert wird /tmp. Was Sie wahrscheinlich tatsächlich wollen, ist, einfach den Scrollback-Puffer Ihres Terminal-Emulators zu vergrößern, damit Sie einfach nach oben scrollen und ihn sehen können. Die Einzelheiten dazu hängen vom verwendeten Terminal-Emulator ab. Die meisten haben einen Befehlszeilenschalter, mit dem Sie dies tun können, und viele haben auch eine GUI-Methode, mit der Sie dies einstellen können. In gnome-terminal(der Standardeinstellung unter Ubuntu) ist es beispielsweise Bearbeiten -> Einstellungen -> Profile - Klicken Sie auf Ihr Profil -> Bearbeiten -> Scrollen -> Scrollen auf NNN beschränken:

Bildschirm mit Optionen für das Gnome-Terminal


Interessante Einsicht. Eine längere Historie im Terminal einzusehen, ist jedoch nicht das, was ich will: Ich möchte Zugriff auf das Cout zum Terminal haben, dh auf alles, was dort geschrieben wurde. VON EG PYTHON
Daniel Böckenhoff

@ Danielböckenhoff dann willst du wohl scriptwie in der angenommenen antwort beschrieben.
Terdon

Sicher. Ich habe es akzeptiert :)
Daniel Böckenhoff

-2

Die Terminalsitzung wird in einer .bash_historyDatei gespeichert . Geben Sie dies in Ihr Terminal ein echo $HISTFILE. Dadurch erhalten Sie den Pfad der .bash_historyDatei.


2
Dies gibt nur die zuvor ausgeführten Befehle aus , nicht die Ausgabe der Befehle.
Ron
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.