टर्मिनल सत्र से एक रनिंग स्क्रिप्ट पुनर्प्राप्त करें


35

इसलिए मैं कई रनिंग स्क्रिप्ट / प्रोग्राम प्रबंधित करने के लिए GNU स्क्रीन का उपयोग कर रहा हूं । मल्टीप्लेक्सिंग और डिटैचबिलिटी काफी मददगार है।

मैंने एक स्क्रिप्ट को डिस्क से हटा दिया है और अब मुझे बैकअप खोजने में थोड़ी परेशानी हो रही है। हालाँकि, टर्मिनल सत्रों में से एक फ़ाइल को हटाने से पहले स्क्रिप्ट निष्पादित कर रहा था और यह अभी ठीक काम करना जारी रखता है।

क्या टर्मिनल सत्र को हाईजैक करने का एक तरीका है जो वर्तमान में इस फ़ाइल की सामग्री को पुनर्प्राप्त करने के लिए स्क्रिप्ट चला रहा है?


जवाबों:


61

स्क्रिप्ट का उपयोग करके देखें ps

ps -ef|grep script.sh
Fdo  8983  8463  0 12:28 pts/2    00:00:00 /bin/bash ./script.sh

जांच /proc/$PID/fd/; स्क्रिप्ट फ़ाइल का टूटा हुआ लिंक cat होना चाहिए , लेकिन काम करना चाहिए (जबकि स्क्रिप्ट चल रही है!):

cat /proc/8983/fd/255 
#!/bin/bash
# script contents!

सौभाग्य!


@ मुझे लगता है कि वह काम करता है, क्योंकि फाइलों की सामग्री, स्मृति में भरी हुई है
c4f4t0r

महान सुझाव! इसकी एक चेतावनी यह भी है कि @fdo को एक अच्छा बैकअप रूटीन सेट करने की आवश्यकता है, क्योंकि अगली बार वह इतना भाग्यशाली नहीं हो सकता है।
क्रिग्गी जूल

12
@ c4f4t0r इसका मेमोरी में लोड होने या न होने से कोई लेना देना नहीं है। लिनक्स स्पष्ट रूप से एक फ़ाइल (इनोड) को नहीं हटाएगा, जबकि खुले हैंडल हैं - फ़ाइल डिस्क पर बनी हुई है, स्थान ले रही है। rmऔर अन्य टूल फ़ाइल को अनलिंक करते हैं, फ़ाइल नाम से लिंक को वास्तविक डेटा (संदर्भित इनोड) से हटाते हैं , लेकिन जब तक एक संदर्भ मौजूद होता है (हार्ड लिंक या ओपन हैंडल) इनोड डिलीट नहीं होता है।
बॉब

बस जिज्ञासु ... आप fd 255 की जांच करना कैसे जानते हैं? या यह केवल एक उदाहरण है?
बागीचा

2
@gardenhead इसका उदाहरण है।
user253751
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.