एक विशिष्ट आईनोड से लिंक करें


14

मेरे पास एक फ़ाइल है जिसे हटा दिया गया था, लेकिन अभी भी एक कार्यक्रम द्वारा खुला रखा गया है। मुझे lsof का उपयोग करते हुए इनकोड संख्या मिली। मैं उस इनोड पर वापस कड़ी लिंक कैसे बना सकता हूं?

जवाबों:


31

आप इसके लिए लिंक नहीं बना सकते हैं, लेकिन आप इसे वापस ले सकते हैं। चलिए एक प्रयोग करते हैं:

$ echo blurfl >myfile.txt
$ tail -f myfile.txt &
$ rm myfile.txt

myfile.txt अब चला गया है, लेकिन पूंछ आदेश द्वारा इनोड को जीवित रखा गया है। अपनी फ़ाइल वापस पाने के लिए, पहले इनोड को रखते हुए प्रक्रिया की PID ढूंढें:

$ ps auxw | grep tail
sunny      409  0.0  0.0   8532   824 pts/5    S    18:07   0:00 tail -f myfile.txt

PID 409 है। chdir to / proc / 409 / fd / और सामग्री को सूचीबद्ध करें:

dr-x------ 2 sunny sunny  0 2009-07-24 18:07:18 .
dr-xr-xr-x 7 sunny sunny  0 2009-07-24 18:07:17 ..
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 0 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:33 1 -> /dev/pts/5
lrwx------ 1 sunny sunny 64 2009-07-24 18:07:18 2 -> /dev/pts/5
lr-x------ 1 sunny sunny 64 2009-07-24 18:07:33 3 -> /home/sunny/tmp/myfile.txt (deleted)

/ Proc / [PID] / fd / निर्देशिकाओं में उन सभी फाइलों के वर्णनकर्ता को सहानुभूति होती है जो प्रक्रिया का उपयोग करती है। इस मामले में सिमिंक "3" हटाए गए फ़ाइल को इंगित करता है। इसलिए, फ़ाइल को पुनर्स्थापित करने के लिए, सामग्री को एक नई फ़ाइल में कॉपी करें:

$ cat 3 >/home/mydir/saved_file.txt

मैंने दूर के अतीत में एक फाइलसिस्टम डिबगर के साथ ऐसा किया है (उदाहरण के लिए "डीबगफोर्स डंप"), लेकिन अवधारणा एक ही है।
जेराल्ड कंबल्स

1
अच्छा जवाब, +1
asdmin

यह मेरे लिए काम नहीं करता है। यह देखते हुए कि '3' एक झूलने वाला सिमलिंक है, न कि "वास्तविक" फाइल डिस्क्रिप्टर, यह हमेशा एक खाली फाइल बनाता है।
रोब चेंजर

4
@ रोब: नहीं, यह नहीं है। यदि फ़ाइल डिस्क्रिप्टर उपयोग में है, तो सिम्लिंक मान्य डेटा की ओर इशारा करता है, अन्यथा सिमलिंक पहले स्थान पर मौजूद नहीं होगा। जब फ़ाइल बंद हो जाती है, तो सिमलिंक गायब हो जाता है। आपके पास "3" के बाद एक जगह थी, है ना? यदि नहीं, तो आप वर्तमान शेल में फ़ाइल डिस्क्रिप्टर 3 की सामग्री को इसके बजाय आउटपुट करेंगे, और यह शायद खाली है।
525 बजे sun25256

1
इसके साथ एकमात्र समस्या यह है कि यदि फ़ाइल अभी भी लिखी जा रही है, तो आपके द्वारा बनाई गई प्रतिलिपि को काट दिया जाएगा। जब लेखन बंद हो जाता है और फ़ाइल ऐसा करने के लिए बंद हो जाता है, तो संभवत: कोई समय नहीं है ताकि आपको पूरी फ़ाइल मिल सके।
KayEss


-8

लिनक्स के तहत ऐसा करने का कोई पोर्टेबल तरीका नहीं है। सबसे अच्छा तरीका शायद फ़ाइल-सिस्टम पर सभी गतिविधि को रोकना होगा, फ़ाइल को खुले रखने वाले प्रोग्राम को मारना, फ़ाइल सिस्टम को अनमाउंट करना और एक निर्देशिका में फिर से संलग्न करने के लिए फ़ाइल-सिस्टम डीबगर का उपयोग करना। यदि आपके पास NFS के माध्यम से निर्यात की गई फ़ाइल प्रणाली है, तो NFS के कम से कम कुछ संस्करण आपको NFS में फ़ाइल डेटा पढ़ने की अनुमति दे सकते हैं।


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