GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin untuk mengambil konten skrip bash yang sedang berjalan dari RAM

Lihat /proc/$PID/fd. Di sana Anda harus memiliki semua deskriptor file yang dibuka oleh proses, termasuk skrip itu sendiri. Hanya cat $FD > /tmp/yourscript.sh seharusnya cukup untuk memulihkannya.


Dengan asumsi bahwa OP benar-benar berarti dari RAM dan bukan dengan cara apa pun , dan dengan asumsi bahwa proses eksekusi skrip memiliki batas file inti nol (yang biasanya merupakan pengaturan default, cat /proc/PID/limits ), maka Anda perlu melampirkan ke proses dan menyetel batas inti ke nilai yang cukup besar untuk menyertakan gambar proses dan menggunakan sinyal ABRT untuk menghasilkan file inti, atau menggunakan alat seperti gdb yang dapat dilampirkan ke suatu proses dan menghasilkan gambar inti dari proses dari RAM.

  1. Instal gdb

Di beberapa shell dengan kepemilikan yang sama dengan skrip yang sedang berjalan atau kepemilikan root:

  1. Lakukan ps ax untuk menemukan id proses (PID)
  2. gdb -p PID

Perhatikan bahwa ini akan menghentikan kelanjutan eksekusi proses tetapi tidak menghapusnya dari tabel proses.

  1. Di gdb, keluarkan perintah generate-core-file

gdb harus merespons dengan sesuatu seperti Saved corefile core.15113 , dengan asumsi PID adalah 15113.

  1. Di gdb, keluarkan perintah detach

Skrip Anda akan terus (melanjutkan) berjalan.

  1. Di gdb, keluarkan perintah quit
  2. Di shell, jalankan strings core.15113 > my_script.sh

Buka my_script.sh di beberapa editor. Teks skrip Anda harus berada di bagian akhir file sebelum bagian lingkungan. Gunakan editor untuk menghapus bagian sebelum dan sesudah skrip.

Uji solusi ini pada skrip lain sebelum Anda menggunakannya pada skrip hadiah Anda. YMMV.

Urutannya terlihat seperti ini:

[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. Pipa ke/dari clipboard dalam skrip Bash

  2. Apa cara terbaik untuk memastikan hanya satu contoh skrip Bash yang berjalan?

  3. Jalankan skrip bash dari URL

  1. Cara "Tepat" Untuk Menguji Jika Suatu Layanan Berjalan Dalam Skrip?

  2. Bash + Bagaimana Cara Keluar Dari Skrip Sekunder Dan Dari Skrip Utama Pada Kedua Kalinya?

  3. Menjalankan skrip Python dari PHP

  1. Menginstal Program Dari Script Bash?

  2. menjalankan skrip php (fungsi php) di linux bash

  3. Variabel dalam Bash Script yang mempertahankan nilainya sejak terakhir kali dijalankan