Возможно ли восстановить содержание запущенного сценария bash из ram

Я случайно записал очень сложный скрипт bash, где я попытался выполнить выборочное и потоковое использование

теперь тот же скрипт все еще запущен, но файл больше не задан, вопрос: Можно ли сканировать через плунжер и найти представление о скрине самого файла?

Другая проблема ist: я не могу найти файл /dev /mem или /dev /kmem, уже пытался grep его для содержимого

В enviremoent: это хост-машина debian /sid (vps) на vpsfx.com

root @ heisenberg: ~ # ls -a /dev
, kmsg ptyp2 ptyp9 random tty1 tty5 ttyp2 ttyp9 urandom
.. log ptyp3 ptypa shm tty10 tty6 ttyp3 ttypa xconsole
.udev null ptyp4 ptypb stderr tty11 tty7 ttyp4 ttypb ноль
char ptmx ptyp5 ptypc stdin tty12 tty8 ttyp5 ttypc
console pts ptyp6 ptypd stdout tty2 tty9 ttyp6 ttypd
fd ptyp0 ptyp7 ptype tty tty3 ttyp0 ttyp7 ttype
полный ptyp1 ptyp8 ptypf tty0 tty4 ttyp1 ttyp8 ttypf
16 голосов | спросил Thomas Nordquist 25 WedEurope/Moscow2013-12-25T19:11:56+04:00Europe/Moscow12bEurope/MoscowWed, 25 Dec 2013 19:11:56 +0400 2013, 19:11:56

2 ответа


15

Посмотрите /proc /$ PID /fd. Там вы должны иметь все дескрипторы файлов, открытые процессом, включая сам сценарий. Простое cat $FD > /tmp/yourscript.sh должно быть достаточно, чтобы восстановить его.

ответил Diego Woitasen 26 ThuEurope/Moscow2013-12-26T01:51:00+04:00Europe/Moscow12bEurope/MoscowThu, 26 Dec 2013 01:51:00 +0400 2013, 01:51:00
14

Предполагая, что OP действительно означает из RAM , а не любым возможным способом , и предполагая, что процесс, в котором выполнялся сценарий, имеет ограничение на нулевой основной файл (который обычно значение по умолчанию, cat /proc/PID/limits), тогда вам нужно подключиться к процессу и либо установить для основного предела достаточно большое значение, чтобы включить образ процесса и использование сигнала ABRT для генерации основного файла или использовать такой инструмент, как gdb, который может присоединяться к процессу и генерировать основной образ процесса из ОЗУ.

  1. Установить gdb

В какой-то оболочке с тем же именем, что и исполняемый скрипт или корневое право собственности:

  1. Сделайте ps ax, чтобы найти идентификатор процесса (PID)
  2. gdb -p PID литий>

Обратите внимание, что это остановит выполнение процесса, но не удалит его из таблицы процессов.

  1. В gdb выведите команду generate-core-file

gdb должен отвечать на что-то вроде Saved corefile core.15113, предполагая, что PID - 15113.

  1. В gdb выведите команду detach

Ваш сценарий продолжит работу (возобновление).

  1. В gdb выведите команду quit
  2. В оболочке запустите strings core.15113 > my_script.sh

Откройте my_script.sh в каком-то редакторе. Текст сценария должен быть в конце файла перед средой. Используйте редактор, чтобы очистить разделы до и после скрипта.

Проверьте это решение на другом скрипте, прежде чем использовать его на своем сценарии приза. YMMV.

Последовательность выглядит следующим образом:

 [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]:~$ 
ответил Jonathan Ben-Avraham 26 ThuEurope/Moscow2013-12-26T01:43:49+04:00Europe/Moscow12bEurope/MoscowThu, 26 Dec 2013 01:43:49 +0400 2013, 01:43:49

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132