র‌্যাম থেকে চলমান বাশ স্ক্রিপ্টের সামগ্রীটি পুনরুদ্ধার করা কি সম্ভব?


18

আমি দুর্ঘটনাক্রমে একটি খুব জটিল বাশ স্ক্রিপ্ট ওভাররাইট করে ফেলেছি, যেখানে আমি পরিপাটি করে স্ক্র্যাপিং এবং থ্রেডিং কার্যকর করার চেষ্টা করেছি।

এখন একই স্ক্রিপ্টটি এখনও চলছে তবে ফাইলটি আর নেই, প্রশ্নটি হল: র‌্যামের মাধ্যমে স্ক্যান করে ফাইলের স্টিং প্রতিনিধিত্ব খুঁজে পাওয়া কি সম্ভব?

আর একটি সমস্যা হ'ল: আমি / dev / mem বা / dev / kmem ফাইলটি খুঁজে পাই না, ইতিমধ্যে বিষয়বস্তুগুলির জন্য গ্রেপ করার চেষ্টা করেছি।

পরিবেশের জন্য: এটি vpsfx.com- তে একটি ডেবিয়ান / সিড মেশিন (ভিপিএস) হোস্টেট

রুট @ হেইসেনবার্গ: ~ # এলএস -এ / দেব
। kmsg ptyp2 ptyp9 এলোমেলো tty1 tty5 ttyp2 ttyp9 ইউরানডম
.. লগ ptyp3 পিটিপি shm tty10 tty6 ttyp3 ttypa xconsole
.দেব নাল ptyp4 ptypb stderr tty11 tty7 ttyp4 ttypb শূন্য
চর ptmx ptyp5 ptypc stdin tty12 tty8 ttyp5 ttypc
কনসোল পিটিএস পিটিপি 6 পিটিপিডি স্টডআউট টিটি 2 টিটি 9 টিটিপি 6 টিটিপিডি
fd ptyp0 ptyp7 ptype tty tty3 ttyp0 ttyp7 ttype
পূর্ণ ptyp1 ptyp8 ptypf tty0 tty4 ttyp1 ttyp8 ttypf

উত্তর:


17

/ Proc / $ পিআইডি / এফডি একবার দেখুন সেখানে আপনার সমস্ত ফাইল বর্ণনাকারী প্রক্রিয়া দ্বারা খোলার উচিত, এতে স্ক্রিপ্ট নিজেই রয়েছে। শুধু cat $FD > /tmp/yourscript.shতা পুনরুদ্ধার করার জন্য যথেষ্ট হওয়া উচিত।


1
ওপি জিজ্ঞাসা করে যে প্রশ্নের উত্তর দেয় না তা সত্ত্বেও আমি এই উত্তরটিকে অগ্রাহ্য করেছি। ওপি জিজ্ঞাসা করেছিল কিভাবে ফাইল সিস্টেম থেকে নয়, র‌্যাম থেকে স্ক্রিপ্টটি পুনরুদ্ধার করা যায় । এই উত্তরটি ফাইল সিস্টেম ব্যবহার করে, স্ক্রিপ্ট ফাইলটি চূড়ান্ত রেফারেন্স গণনা শূন্য না হওয়া অবধি লিঙ্কযুক্ত হবে না এই নির্ভর করে।
জোনাথন বেন-অভ্রাহাম

1
প্রোক ফাইল সিস্টেমটি কেবল র‍্যামে থাকে এবং প্রত্যেকের কাছে এটি মাউন্ট থাকে।
দিয়েগো ওওয়েটসেন

2
/procFS র্যাম রক্ষিত হয় না। আসলে এটি কোথাও বাস করে না । Unix.stackexchange.com/questions/74713/… দেখুন । যদিও আপনি FD থেকে পেতে পারেন /proc, catFD ing FS থেকে ফাইল সার্চ, রাম না। সত্য, আপনি ফাইলটি মুছে ফেলেছেন, ইনোড রেফের গণনা হ্রাস করেছেন এবং এখন আর কেউ এটিকে দেখতে পাবে না, তবে স্ক্রিপ্টটি চালানো প্রক্রিয়াটি বন্ধ না হওয়া পর্যন্ত এটি আসলে fs থেকে মুছে ফেলা হয় না। স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা /2028874/ … দেখুন ।
জোনাথন বেন-অভ্রহাম

হ্যাঁ তুমিই ঠিক. ফাইলটি নিজেই ডিস্ক ফাইল সিস্টেম থেকে পড়ে। / proc র‌্যামে বিদ্যমান, এটি র‌্যামডিস্কের মতো নয়, তবে তথ্যটি র‌্যামে রয়েছে। / Proc / $ পিআইডি / এফডি ব্যতীত এবং অন্যান্য হতে পারে। যাইহোক, @ থমাস নর্ডকুইস্ট ফাইলটি পুনরুদ্ধার করতে চায় এবং এটি সহজ উপায়।
দিয়েগো ওওয়েটেন

আমার জন্য পরিশ্রম করেছি, কয়েকটি চেষ্টা করার পরে আমি সঠিক ফাইল বর্ণনাকারী পেয়েছি শেষ পর্যন্ত আমি প্রক্রিয়াটি বন্ধ করে চালিয়ে যেতে পারি
টমাস নর্ডকুইস্ট

16

ধরে নিই যে ওপিটি সত্যই র‌্যাম থেকে এসেছে এবং কোনও সম্ভাব্য উপায় নয় এবং ধরে নেওয়া যে স্ক্রিপ্টটি কার্যকর করা হয়েছিল সেই প্রক্রিয়াটিতে শূন্য কোর ফাইলের সীমা রয়েছে (যা সাধারণত ডিফল্ট সেটিংস হয় cat /proc/PID/limits), তারপরে আপনাকে প্রক্রিয়াটি সংযুক্ত করতে হবে এবং হয় প্রক্রিয়া চিত্র এবং মূল ফাইল উত্পন্ন করতে ABRT সিগন্যাল ব্যবহার করতে, বা gdbকোনও প্রক্রিয়া সংযুক্ত করতে পারে এবং র‌্যাম থেকে প্রক্রিয়াটির একটি মূল চিত্র উত্পন্ন করতে পারে এমন একটি সরঞ্জাম ব্যবহার করার জন্য প্রসেস চিত্র এবং ব্যবহারের জন্য ABRT সিগন্যালটি ব্যবহার করার জন্য যথেষ্ট পরিমাণে মূল সীমাটি সেট করুন ।

  1. ইনস্টল করুন gdb

চলমান স্ক্রিপ্ট বা মূলের মালিকানা হিসাবে একই মালিকানা সহ কিছু শেল:

  1. কি ps axপ্রক্রিয়া ID এটি (PID,)
  2. gdb -p PID

নোট করুন যে এটি প্রক্রিয়া সম্পাদন চালিয়ে যাওয়া থেকে বিরত রাখবে তবে প্রক্রিয়া টেবিল থেকে এটি সরবে না।

  1. জিডিবিতে, কমান্ডটি জারি করুন generate-core-file

জিডিবি এরকম কিছু দিয়ে Saved corefile core.15113জবাবদিহি করা উচিত , ধরে নিই যে পিআইডি 15113।

  1. জিডিবিতে, কমান্ডটি জারি করুন detach

আপনার স্ক্রিপ্ট চলতে থাকবে (পুনরায় শুরু)।

  1. জিডিবিতে, কমান্ডটি জারি করুন quit
  2. শেল ইন, চালান strings core.15113 > my_script.sh

my_script.shকিছু সম্পাদক খুলুন । আপনার স্ক্রিপ্ট পাঠ্যটি পরিবেশ বিভাগের আগে ফাইলটির শেষের দিকে হওয়া উচিত। স্ক্রিপ্টের আগে এবং পরে বিভাগগুলি খণ্ডন করতে সম্পাদক ব্যবহার করুন।

আপনি নিজের পুরষ্কার স্ক্রিপ্টে এটি ব্যবহার করার আগে এই সমাধানটি অন্য স্ক্রিপ্টে পরীক্ষা করুন। YMMV।

ক্রমটি এর মতো দেখাচ্ছে:

yba@tavas:~$ 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
yba@tavas:~$ 

এই সমাধানটিও কার্যকর হয়, তবে এখানে কিছু খনন জড়িত রয়েছে, আপনার সহায়তার জন্য ধন্যবাদ
টমাস নর্ডকুইস্ট

এই আমার জন্য কাজ করে সমাধান! আমি আসল ফাইলটি ওভাররাইট করেছি এবং আশা করেছি এটি এখনও স্মৃতিতে থাকবে। উন্মুক্ত এফডি (অন্যান্য উত্তর) আপডেট হওয়া ফাইলের দিকে ইঙ্গিত করেছে। আমাকে বাঁচিয়েছে!
সেভম্যান 71

0

স্ক্রিপ্টের অংশগুলির জন্য ওভারল্যাপিং অংশগুলিতে হার্ডডিস্ক পার্টিশন এবং গ্রেপ বাইনারি। আপনি যদি ভাগ্যবান হন তবে আপনার হার্ডডিস্ক বা এসএসডি-র লেখার চক্রটি সংরক্ষণ করতে গ্রিপ করার জন্য সেই অংশগুলিকে অস্থায়ী ডিরেক্টরিতে লিখুন। না, এটি 'মেষ থেকে' সমাধান নয়। এই বিষয়টি সম্পর্কে সচেতন হন যে বাইট স্ক্রিপ্টগুলি দ্বারা ডিস্ক বাইট পড়ার সময় utf-8 (বা অনুরূপ) চরসেট ফর্ম্যাটে থাকতে পারে, তাই গ্রেপ প্যারামিটারগুলিও মানিয়ে নিতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.