लिनक्स के तहत एक हटाए गए फ़ाइल को कैसे पुनर्प्राप्त करें?


65

दुर्घटना से, मैंने rmएक ऐसी फ़ाइल का उपयोग किया जिसे मैं हटाना नहीं चाहता था। वहाँ एक रास्ता है कि मैं इसे लिनक्स के तहत वापस मिल सकता है?


@Nav, rmएक "खतरनाक" UNIX / Linux कमांड है (पढ़ें $ man rm)। अत्यधिक सावधानी के साथ इसका उपयोग करें । इसके साथ ही कहा, यह उन फ़ाइलों को हटाने का एक त्वरित तरीका है जिनके बारे में आप निश्चित हैं। आधुनिक लिनक्स और यूनिक्स डेस्कटॉप वातावरण "ट्रैश कैन" के समाधान के साथ प्रदान करते हैं , जिससे उपयोगकर्ता आसानी से गलती से हटाए गए फ़ाइलों को पुनर्प्राप्त कर सकता है।
जोस एलेरा

1
कुछ और अप-टू-डेट उत्तर: unix.stackexchange.com/questions/122305/…
बेन क्रॉवेल

यदि आप भविष्य में फ़ाइलों को पुनर्स्थापित करना चाहते हैं, तो "rm" का उपयोग न करें। इसके बजाय "rm-कचरा" उपयोगिता का उपयोग करें: github.com/nateshmbhat/rm-trash
Natesh bhat

जवाबों:


51

पाठ फ़ाइलों को पुनर्प्राप्त करने के लिए निम्नलिखित सामान्य कदम हैं।

  1. उपयोगकर्ता को यह बताने के लिए पहले दीवार कमांड का उपयोग करें कि सिस्टम एकल उपयोगकर्ता मोड में नीचे जा रहा है:

    # wall
    System is going down to .... please save your work.
    

    संदेश भेजने के लिए CTRL + D दबाएं।

  2. एकल उपयोगकर्ता मोड में सिस्टम लेने के लिए init 1 कमांड का अगला उपयोग:

    # init 1
    
  3. फ़ाइलों को पुनर्प्राप्त करने के लिए grep (पारंपरिक UNIX तरीका) का उपयोग करना

    निम्नलिखित grep सिंटैक्स का उपयोग करें:

    grep -b 'search-text' /dev/partition > file.txt
    

    या

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    कहाँ पे,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    "NixCraft" शब्द के साथ / dev / sda1 पर शुरू होने वाली पाठ फ़ाइल को पुनर्प्राप्त करने के लिए आप निम्नलिखित आदेश आज़मा सकते हैं:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. फ़ाइल का उपयोग करने के लिए अगला vi का उपयोग करें।

    यह विधि केवल उपयोगी है यदि डिलीट की गई फाइल टेक्स्ट फाइल है। यदि आप ext2 फाइल सिस्टम का उपयोग कर रहे हैं, तो रिकवरी कमांड को आजमाएं।

Http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html पर मिला


16
वर्थ नोटिंग आप इस उपयोगकर्ता की एकल मोड को बंद नहीं कर सकते, नेटवर्किंग बंद कर देता है
Quinma

1
यह विधि पाठ फ़ाइलों के लिए अद्भुत काम करती है, धन्यवाद! इसके बारे में मुझे जो पसंद है वह यह है कि यह फाइलसिस्टम की पत्रिका (जैसे एक्स्टेंडेलेट) पर निर्भर नहीं करता है, लेकिन यह वास्तव में इसके बजाय पूरे ड्राइव के कच्चे बाइट्स को स्कैन करता है। यदि यह कमांड आपकी फ़ाइल नहीं ढूंढती है, तो कुछ भी नहीं होगा।
बेंजामिन बी।

1
@ क्विंमा, यह विधि केवल मामूली संशोधनों के साथ दूरस्थ रूप से काम कर सकती है ... चलाने के बजाय init 1, मैन्युअल रूप से हर सिस्टम डेमॉन को छोड़कर sshd। मुझे भी लगता है कि इस बिंदु पर आपको सभी फाइल सिस्टम आरओ को रिमूव करना चाहिए और टेम्प्स को सेव करना होगा (यह मानकर कि आपके टेम्प फाइल राम में फिट होंगे) फाइल को टेंपर्ड डेटा से ओवरराइट करने से बचें। आपको निश्चित रूप से इसे बाद में कहीं और कॉपी करना होगा, या तो किसी रिमोट सर्वर पर या फिर स्थानीय फाइल सिस्टम में आरडब्ल्यू को रिमूव करने के बाद।
थॉमस गयोट-साइनेस्ट

आपका_पार्टी क्या है ??? मेरे पास त्रुटि है: / dev / sda1: ऐसी कोई फ़ाइल या निर्देशिका नहीं है
coolcool1994

1
@ क्यूबैक, मैं वास्तव में नहीं जानता। जैसा कि कहा गया है, मैंने केवल चरण-दर-चरण का पालन किया है। लेकिन init 1 का मतलब प्रशासनिक कार्यों के लिए है, और हो सकता है कि मारने की प्रक्रिया उस रनवे परिदृश्य से संबंधित न हो। हार्डडिस्क का उपयोग करने से रोकने में मदद कर सकता है, उस फ़ाइल को अधिलेखित करना जिसे आप पुनर्प्राप्त करने का प्रयास कर रहे हैं।
गेब्रियल एल। ओलिवेरा

13
  • यदि यह बहुत महत्वपूर्ण है, तो कंप्यूटर से डिस्क लें और इसे आपके लिए करने के लिए एक कंपनी किराए पर लें।
  • यदि यह केवल बहुत महत्वपूर्ण है, तो डिस्क को केवल पढ़ने के लिए माउंट करें, पूरे विभाजन को एक फ़ाइल का उपयोग करके कॉपी करें ddऔर इसके भीतर फ़ाइल का उपयोग करने का प्रयास करें (उपयोग करते हुए grep, या एक संपादक)।

संपादित करें: कभी-कभी इससे ddrescueबेहतर काम करता है dd


1
"इसके भीतर फ़ाइल खोजने का प्रयास करें" मैं उलझन में हूं, कि कोई 15 जीबी की फ़ाइल को कैसे खोलेगा और इस जानवर को grep में खोज या पाइप करेगा? और जब आपने पाठ पाया तो आप क्या करेंगे? पृथ्वी पर यह रिकवरी कैसे है?
एल.एल.क्यू.

1
अनिश्चित परिणाम के लिए बहुत अधिक नकदी जलाने से पहले कुछ सामान्य साधनों की कोशिश करना पहली बात है। BTW, grep वास्तव में मदद नहीं करेगा, photorec या ext3grep करेगा।
वाजोक्स


8

Testdisk में एक undelete विकल्प है जिसे लिनक्स के साथ काम करना चाहिए।

नहीं है लिनक्स के लिए एक पूर्वाभ्यास । ध्यान दें कि यह ext2 , ext3 और ext4 के लिए काम करता है ।


1
अगर एक्स्ट्रीम 3/4 है, तो एक्स्टेंडेलेट भी आसान है। हालांकि, पहली बात यह है कि विभाजन को अनमाउंट करना शायद है।
Billc.cn

5
  • एकमात्र सही उत्तर है: अपनी फ़ाइल को बैकअप से पुनर्स्थापित करें। हर किसी के पास बैकअप होना चाहिए। वास्तव में महत्वपूर्ण फाइलों के लिए, आपके पास दो बैकअप होने चाहिए। तुम नहीं? ठीक है, बहुत बुरा है, यहाँ एक सबक सीखा गया है (कठोर ध्वनि के लिए क्षमा करें, लेकिन मैं डेटा स्टोरेज में हूं, और लोग तब तक पीछे नहीं हटते हैं जब तक वे कुछ महत्वपूर्ण डेटा नहीं खो देते हैं, यह एक दिया गया तथ्य है। हां, आप बेवकूफ दिखते हैं, लेकिन ऐसा लगभग सभी लोग करते हैं)।

  • ठीक है, आपके पास कोई बैकअप नहीं है। आपको फ़ाइल सिस्टम का उपयोग करना बंद करना चाहिए जिसमें फ़ाइल राइट नाउ है । कोई भी लेखन गतिविधि निश्चित रूप से उस फ़ाइल डेटा को नली कर सकती है जो केवल ( डिस्क पर) रह सकता है

  • यदि आपने रूट फाइल सिस्टम और / होम दोनों के रूप में केवल एक विभाजन का उपयोग करने के लिए दुखद त्रुटि की है, तो इसका मतलब है कि आपको किसी अन्य डिवाइस से बूट करना होगाअब

  • यदि आपकी फ़ाइल कुछ सामान्य प्रारूप (Word फ़ाइल, JPG, आदि) की है, तो Photorec का उपयोग करें । Photorec सबसे आम फ़ाइल स्वरूपों को पुनः प्राप्त कर सकता है।

  • आप पहले से प्रस्तावित "ext3 undelete" विधि की कोशिश कर सकते हैं, लेकिन आपको कमांड लाइन के साथ सहज होने की जरूरत है, बुनियादी लिनक्स आंतरिक कामकाज आदि को समझें।

  • यदि आपकी फ़ाइल कुछ विशेष प्रारूप की है, तो कठिन किस्मत। मैंने एक बार कुछ विशेष फ़ाइलों के लिए एक ड्राइव को स्कैन करने के लिए एक पर्ल प्रोग्राम लिखा था, और इसने बहुत अच्छा काम किया; लेकिन आपको ऐसा करने के लिए कुछ प्रोग्रामिंग जानने की आवश्यकता होगी, और लिनक्स के साथ काफी सहज भी होना चाहिए।


5

मैंने यह कुछ साल पहले किया था। मेरा दृष्टिकोण सीधे तौर पर, हारने का समय नहीं था, विभाजन को अनमाउंट करने और फिर

dd if=/dev/hda1 of=backup_image.ext3

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

तब यह सिर्फ पाठ स्निपेट के बाद उबाऊ खोजों का प्रदर्शन करने के लिए था जो मुझे विभाजन सामग्री के सूप में कहीं होने की उम्मीद थी। उदा। शीर्ष-फाइलें खोजने के लिए, मैं भाग गया

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

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

साथ ही कमांड stringsआउटपुट से बाइनरी कचरा हटाने में सहायक था, लेकिन अगर मैं सही ढंग से याद करता हूं तो इसने सभी नए समाचारों को भी छीन लिया, जो एक समस्या हो सकती है।

उसी तरह से बाइनरी फ़ाइलों को खोजने के लिए, किसी को एक विशिष्ट हेडर या एक निश्चित फ़ाइल के कुछ खोजने में सफलता मिल सकती है, लेकिन मैं इसे एक बड़ा साहसिक होने की कल्पना करता हूं।


संक्षिप्त तकनीकी नोट: डिस्क रिकवरी और एक्सट्रीम 3/4 के साथ तकनीकी दिक्कतें हैं। यह समझाने के लिए एक लंबी बात है, लेकिन संक्षेप में (और अपर्याप्त रूप से): एक्सट्रीम / 4 "मार्कर" को हटा देता है जो ओएस को बताता है कि फाइलें डिस्क पर स्थित हैं जब आप उन्हें हटाते हैं। फ़ाइलों को स्क्रब नहीं किया जाता है, लेकिन किसी को नहीं पता कि डिस्क पर वे कहाँ से शुरू होते हैं और अब समाप्त हो जाते हैं, और कभी-कभी वे कई स्थानों पर खंडित भी होते हैं। कुछ अन्य फाइल सिस्टम फाइल के स्टेटस को "डिलीट" करने के लिए सेट करते हैं, लेकिन लोकेशन डेटा को बनाए रखते हैं। तब इस ध्वज के साथ फ़ाइल बिंदुओं को देखने के लिए undelete कठिन नहीं है (वे अभी भी उपलब्ध होने चाहिए यदि बहुत अधिक गतिविधि नहीं हुई है), और फिर आशा करते हैं कि उनकी सामग्री को अधिलेखित नहीं किया गया है।

सबसे अच्छा क्या है? मेरे विचार से बयानबाजी। बार-बार बैकअप इन सभी समस्याओं का जवाब है। एक स्वचालित बैकअप प्रणाली के बिना महत्वपूर्ण डेटा एक दुर्घटना होने की प्रतीक्षा कर रहा है, IMHO।


अनिवार्य व्यक्तिगत किस्सा: मैं दूर करने के लिए जा रहा था foo\ foo*से ~। मैंने लिखा

rm -r foo<Tab>*

, जो दुख की बात है, क्योंकि fooजाहिरा तौर पर एक सिमलिंक था और एकमात्र फ़ाइल जो इस से मेल खाती थी, शेल में बनाया गया था

rm -r foo\ foo *

मैंने एंटर दबाया और कमांड को देखते हुए वहीं बैठ गया, जिसे एक सेकंड में लेना चाहिए था। थोड़े समय के बाद rmमुझसे पूछा गया कि क्या मैं "लिखना-संरक्षित फ़ाइल 'कुछ' को निकालना चाहता हूं"। काफी जल्दी मुझे ठंड लग रही थी और धीरे-धीरे और बहुत ही नियंत्रित मैंने दबाया Ctrl+c। ~ मेरा आधा ~हटा दिया गया था, लेकिन मैं ऊपर वर्णित grepping और कुछ और कम या वर्तमान बैकअप के माध्यम से वापस मूल्य का सब कुछ प्राप्त करने में कामयाब रहा। मेरे पास कुछ व्यक्तिगत रूप से बहुत मूल्यवान था (पढ़ा: समय लेने वाला) और डिस्क पर बहुत हालिया माप डेटा जो खो गया था, लेकिन मैंने चौगुना बैकअप बना लिया था। यहां से एक गायब हो गया, स्कूल में सिस्टम आउटेज के कारण एक और, दूसरा भ्रष्ट था, और पहली बार में मैं चौथा नहीं ढूंढ सका, क्योंकि मैंने गलती से इसे गलत फ़ोल्डर में डाल दिया था :-D। नही थाrm -rराइट-प्रोटेक्टेड फाइल पर अटक गया, चौथा खाया गया क्योंकि उस फ़ोल्डर को मेरे द्वारा sshfs के माध्यम से माउंट किया गया था ~। मैं उस तरह के सामान के बारे में बहुत अधिक सावधान हूं।


5

यदि यह मानक आरएम है , तो मुझे आशा है कि आपके पास एक बैकअप है। हटाए गए फ़ाइल को पुनर्प्राप्त करने की प्रक्रिया प्रत्येक फ़ाइल सिस्टम के लिए अलग होगी, अगर यह बिल्कुल भी किया जा सकता है। लिनक्स में एक अंतर्निहित "रीसायकल बिन" नहीं है; एक बार जब आप किसी फ़ाइल को हटा देते हैं, तो यह सब हो जाता है।

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


4

अपनी उम्मीदों को कम करें। यदि 'हटाए गए' डेटा पर कुछ भी लिखा गया था, तो आप इसे खो देंगे।

मैंने थोड़ी मात्रा में रिकवरी की है और मुझे जो सबसे अच्छे उपकरण मिले हैं वे अक्सर कुछ प्रारूपों के लिए डिज़ाइन किए गए थे। उदाहरण के लिए 'फोटोरेक' महान था जब मैं चाहता था कि हजारों जेपेग बरामद हों।

रिकुवा ने अब से पहले भी मेरी मदद की है और आपकी सबसे अच्छी पसंद हो सकती है। (यह मुफ़्त है, उनके विज्ञापनों द्वारा भुगतान करने में धोखा नहीं मिलता)

दिन के अंत में, यदि आपने जो खोया है वह महत्वपूर्ण है, ड्राइव को ऑफ़लाइन ले जाएं और उसे लिखना बंद कर दें। पुनर्प्राप्ति सॉफ़्टवेयर के प्रत्येक टुकड़े का उपयोग करें, जब तक आप अपना डेटा वापस नहीं पा लेते हैं या इसके लायक होना बंद हो जाता है। यदि यह वास्तव में महत्वपूर्ण है, तो इसे उच्च मूल्य पर पेशेवरों को भेजें।

यदि आपको पहले एक उपकरण के साथ भाग्य मिला है, तो इसे फिर से देखें क्योंकि आप इससे परिचित हैं। दिन के अंत में, उन्हें डिस्क पर लिखना नहीं चाहिए और इसलिए आप सॉफ़्टवेयर का उपयोग कर सकते हैं जब तक कि आप एक काम नहीं करते।


2

यहां आपके लिए एक बेहतरीन दस्तावेज है। आपको वहां व्यावहारिक सुझावों का भार मिलेगा।

BTW, लोगों के दो समूह हैं:

  1. जो लोग बैकअप करते हैं
  2. जो बैकअप करेंगे

बधाई हो, आपने अपने आप को समूह 2 में बढ़ावा दिया।; ;-)


2

यदि आपके पास एक आवेदन खुला है जो वर्तमान में फ़ाइल को पढ़ रहा है, जैसे कि वीएलसी या लिबरऑफिस, तो इस भयानक एलएंडयूएसओ जवाब ने मुझे इस गड़बड़ से बाहर निकालने में मदद की। यहाँ एक ही करने के लिए एक वैकल्पिक तरीका है

सामान्य विचार लिंक को खोजना है /proc/PID/fd/DESCRIPTOR_NUMBERऔर इसे अपने मूल स्थान पर वापस कॉपी करना है। ps aux | grep APP_NAMEPID को खोजने के लिए और फिर ls -la /proc/PID/fd/उचित DESCRIPTOR_NUMBER को खोजने के लिए उपयोग करें ।


1

"सही" उत्तर यह माना जाता है कि मज़बूती से पुनर्प्राप्त करने के लिए एक विधि नहीं है, और इसके बजाय बैकअप या क्लोन सिस्टम या पुनर्स्थापना से पुनर्स्थापित करें।

TestDisk एक बेहतरीन टूल है, और फ़ाइल सिस्टम और डिलीट होने की रीति के आधार पर फिजिकल ड्राइव से कुछ डेटा को सॉल्व करने में सक्षम होने के अन्य तरीके भी हैं, लेकिन इसमें शामिल समय और दर्द बहुत बढ़िया हो सकता है, इसलिए KEEP BACKUPS (और टेस्ट भी करें वे मान्य और आरामदायक हैं)!


1

यदि यह अन्य उपयोगकर्ताओं द्वारा अधिलेखित नहीं है, तो आप भाग्यशाली हैं। मैंने गलती से अपनी cpp सोर्स फाइल को डिलीट कर दिया और सबसे आगे नामक एक टूल का उपयोग किया , जिसने मुझे डिस्क से 60G cpp मलबे को बहाल करने में मदद की। अंत में, मैंने अपनी फ़ाइल को उन मलबे के टुकड़े को टुकड़े से इकट्ठा करके बरामद किया। मुझे लगता है कि यह विशिष्ट फ़ाइल प्रकार के लिए कुछ पैटर्न को स्कैन करता है और फ़ाइलों को पुनर्प्राप्त करने के लिए डिस्क पर सभी इनोड को ट्रैवर्स करता है! बस एक कोशिश है!


0

अगर गलती से आपने लिनक्स से फाइल डिलीट कर दी है तो आप इस कमांड का उपयोग कर सकते हैं:

find /root -name "search text" -type f  -exec mv {} "/home" \;

के स्थान पर search textआप फ़ाइल का नाम रख सकते हैं और निर्देशिका निर्दिष्ट कर सकते हैं जहाँ आप के स्थान पर पुनर्स्थापित करना चाहते हैं /home


2
हाय संतोष। कृपया अपनी पोस्ट में भ्रामक लिंक न जोड़ें। इसे हटा दिया गया है।

0

आप इस स्क्रिप्ट को आज़मा सकते हैं। अच्छी तरह से काम करता है और इसका उपयोग आरएम और आईएल के बड़े पैमाने पर इस्तेमाल किया जा रहा है।

https://github.com/nateshmbhat/safe-rm

विशेषताएं :

  • rm के स्थान पर उपयोग करने के लिए
  • आरएम ले सकता है कि सभी तर्कों को संभालता है
  • फ़ाइलों का नाम टकराव ट्रैश में पहले से मौजूद फ़ाइलों से संभालता है
  • कुछ अनुमति समस्याओं को स्वचालित रूप से संभालता है
  • अगर rm को किसी अन्य स्क्रिप्ट से या अप्रत्यक्ष रूप से कहा जाता है तो सिस्टम 'rm' कमांड स्वचालित रूप से उपयोग किया जाता है
  • उन लोगों की तरह उचित त्रुटि संदेश दिखाता है जो अंदर उठते हैं rm

-2

मुझे पिछले हफ्ते भी यही समस्या थी और मैंने बहुत सारे कार्यक्रमों की कोशिश की, जैसे डीबगफ, फोटोरेक, एक्सट्रेग्रेप और एक्स्टेंडेनेट। ext3grep फ़ाइलों को पुनर्प्राप्त करने के लिए सबसे अच्छा कार्यक्रम था। सिंटैक्स बहुत आसान है:

ext3grep image.img --restore-all

या:

ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’

यह वीडियो शो एक मिनी ट्यूटोरियल है जो आपकी मदद कर सकता है।

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