GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ist es möglich, den Inhalt eines laufenden Bash-Skripts aus dem RAM abzurufen?

Schau mal in /proc/$PID/fd. Dort sollten Sie alle vom Prozess geöffneten Dateideskriptoren haben, einschließlich des Skripts selbst. Nur 00 sollte ausreichen, um es wiederherzustellen.


Angenommen, das OP meinte wirklich aus dem RAM und nicht auf irgendwelche Weise , und unter der Annahme, dass der Prozess, in dem das Skript ausgeführt wurde, kein Kerndateilimit hat (was normalerweise die Standardeinstellung ist, 14 ), dann müssen Sie an den Prozess anhängen und entweder das Core-Limit auf einen ausreichend großen Wert setzen, um das Prozessabbild einzuschließen und das ABRT-Signal zum Generieren der Core-Datei zu verwenden, oder ein Tool wie 22 die an einen Prozess angehängt werden und ein Kernabbild des Prozesses aus dem RAM generieren können.

  1. Installieren Sie 30

In einigen Shells mit demselben Besitz wie das laufende Skript oder Root-Besitz:

  1. Führe 43 aus um die Prozess-ID (PID) zu finden
  2. 55

Beachten Sie, dass dadurch die Prozessausführung gestoppt, aber nicht aus der Prozesstabelle entfernt wird.

  1. Geben Sie in gdb den Befehl 62 aus

gdb sollte mit etwas wie 72 antworten , unter der Annahme, dass die PID 15113 ist.

  1. Geben Sie in gdb den Befehl 89 aus

Ihr Skript wird weiter ausgeführt (wieder aufgenommen).

  1. Geben Sie in gdb den Befehl 96 aus
  2. Führen Sie in der Shell 102 aus

Öffnen Sie die 116 in irgendeinem Editor. Ihr Skripttext sollte am Ende der Datei vor dem Umgebungsabschnitt stehen. Verwenden Sie den Editor, um die Abschnitte vor und nach dem Skript abzukratzen.

Testen Sie diese Lösung in einem anderen Skript, bevor Sie sie in Ihrem Gewinnskript verwenden. YMMV.

Die Sequenz sieht folgendermaßen aus:

[email protected]:~$ gdb -p 15113
GNU gdb (GDB) 7.4.1-debian
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Attaching to process 15113
Reading symbols from /bin/bash...(no debugging symbols found)...done.
Reading symbols from /lib/x86_64-linux-gnu/libtinfo.so.5...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libtinfo.so.5
Reading symbols from /lib/x86_64-linux-gnu/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libdl.so.2
Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/x86_64-linux-gnu/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
0x00007feaf4b4c7be in waitpid () from /lib/x86_64-linux-gnu/libc.so.6
(gdb) generate-core-file
Saved corefile core.15113
(gdb) detach
Detaching from program: /bin/bash, process 15113
(gdb) quit
[email protected]:~$ 

Linux
  1. Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

  2. Installieren von Programmen aus dem Bash-Skript?

  3. Was ist der beste Weg, um sicherzustellen, dass nur eine Instanz eines Bash-Skripts ausgeführt wird?

  4. Ausführen des PHP-Skripts (PHP-Funktion) in Linux Bash

  5. Führen Sie das Bash-Skript von der URL aus

Bash + So beenden Sie beide Male das sekundäre Skript und das Hauptskript

Wie überprüfe ich die Syntax eines Bash-Skripts, ohne es auszuführen?

In Bash-Skript zur/von der Zwischenablage leiten

Ausführen eines Python-Skripts von PHP

Ausführen von Pycharm als root vom Launcher

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner