GNU/Linux >> Znalost Linux >  >> Linux

Je možné načíst obsah běžícího bash skriptu z RAM

Podívejte se na /proc/$PID/fd. Zde byste měli mít všechny deskriptory souborů otevřené procesem, včetně samotného skriptu. Stačí 07 by mělo stačit k jeho obnovení.


Za předpokladu, že OP skutečně znamenalo z RAM a nikoli jakýmkoli možným způsobem a za předpokladu, že proces, ve kterém byl skript spuštěn, má nulový limit počtu souborů jádra (což je obvykle výchozí nastavení 11 ), pak se musíte připojit k procesu a buď nastavit limit jádra na dostatečně velkou hodnotu, aby zahrnoval obraz procesu a použít signál ABRT k vygenerování souboru jádra, nebo použít nástroj jako 29 který se může připojit k procesu a generovat základní obraz procesu z paměti RAM.

  1. Nainstalujte 38

V nějakém prostředí se stejným vlastnictvím jako spuštěný skript nebo vlastnictví root:

  1. Proveďte 40 najít ID procesu (PID)
  2. 52

Všimněte si, že to zastaví provádění procesu, ale neodstraní jej z tabulky procesů.

  1. V gdb zadejte příkaz 69

gdb by měl odpovědět něčím jako 79 , za předpokladu, že PID je 15113.

  1. V gdb zadejte příkaz 86

Váš skript bude pokračovat (obnoví se) v běhu.

  1. V gdb zadejte příkaz 94
  2. V prostředí shell spusťte 109

Otevřete 113 v nějakém editoru. Text vašeho skriptu by měl být na konci souboru před sekcí prostředí. Pomocí editoru seškrábněte části před a za skriptem.

Otestujte toto řešení na jiném skriptu, než jej použijete ve svém skriptu ceny. YMMV.

Sekvence vypadá takto:

[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. Potrubí do/ze schránky ve skriptu Bash

  2. Jaký je nejlepší způsob, jak zajistit, aby byla spuštěna pouze jedna instance skriptu Bash?

  3. Spusťte bash skript z adresy URL

  1. Zabránění souběžnému spuštění bash skriptu

  2. Proč skript Bash nerozpozná aliasy?

  3. Bash skript pro odstranění nejstaršího souboru ze složky

  1. Je možné vysledovat Builtin Commands To Bash?

  2. Bash + Jak opustit sekundární skript a hlavní skript v obou případech?

  3. spuštění php skriptu (funkce php) v linux bash