स्थानांतरित बिन और अन्य फ़ोल्डर! कैसे उन्हें वापस पाने के लिए?


13

मैंने गलती से सभी फ़ोल्डरों को रूट से सबफ़ोल्डर में स्थानांतरित कर दिया। ( /bin, /etc, /home, /lib, /usr, ... सब चले गए) केवल जो कि नहीं ले जाया गया, क्योंकि वे प्रयोग में थे, हैं /bak, /boot, /dev, /proc, /sys

अब, मैं जिस भी कमांड को निष्पादित करने की कोशिश करता हूं, वह बस नहीं होगा। मुझे लगातार "ऐसी कोई फ़ाइल या निर्देशिका नहीं मिलती"।

मैं ssh और ftp के माध्यम से जुड़ा हुआ हूं, लेकिन मैं ftp के माध्यम से फ़ाइलों को स्थानांतरित नहीं कर सकता, क्योंकि प्रत्यक्ष SU लॉगिन अक्षम है। अगर मुझे वहां से सीधे कुछ करने की जरूरत है तो मेरे पास वास्तविक सर्वर तक भी पहुंच है।

मैं मान रहा हूं कि मुझे यह बताने के लिए एक कॉन्फ़िगरेशन फ़ाइल को संपादित करने की आवश्यकता है कि यह कहां है कि /binफ़ोल्डर को ढूंढें और इससे मुझे फिर से एक्सेस करने में मदद मिलेगी, लेकिन मुझे नहीं पता कि यह कौन सी फाइल होगी या यह कैसे करना है (जब से मैं chmodअनुमतियाँ बदलने के लिए भी नहीं चलाया जा सकता)।

क्या फिर से स्थापित करने के अलावा इसके अलावा कोई रास्ता नहीं है?

मैं CentOS के पुराने संस्करण पर काम कर रहा हूं।

मैं लिनक्स की दुनिया के लिए बेहद नया हूं, इसलिए यह कार्रवाई और सवाल ...


आपकी समस्या का समाधान नहीं है जबकि मैं इसे पढ़ने की सलाह देता हूं: lug.wsu.edu/node/414 इसी तरह की स्थिति लेकिन उन्होंने वास्तव में हटा दिया / बिन।
स्ट्रिबिका

जवाबों:


33

यदि आपके पास अभी भी एक रूट शेल है, तो आपके पास अपने सिस्टम को सुधारने का मौका हो सकता है। मान लीजिए कि आप सभी आम निर्देशिका चले गए हैं ( /bin, /etc, /lib, /sbin, /usr- इन लोगों को है कि वसूली के लिए मुश्किल बना सकता है कर रहे हैं) के तहत /oops

mvयदि आप पूर्ण पथ निर्दिष्ट करते हैं, तो आप सीधे कमांड जारी नहीं कर पाएंगे /oops/bin/mv। ऐसा इसलिए mvहै क्योंकि गतिशील रूप से जुड़ा हुआ है ; क्योंकि आपने /libनिर्देशिका को स्थानांतरित कर दिया है , mvइसलिए नहीं चल सकता क्योंकि यह उन पुस्तकालयों को नहीं खोज सकता जो इसके कोड का हिस्सा हैं। वास्तव में, यह उससे भी बदतर है: mvनहीं मिल रहा है गतिशील लोडर /lib/ld-linux.so.2 (नाम अपने वास्तुकला और यूनिक्स संस्करण के अनुसार भिन्न हो सकते हैं, और निर्देशिका के रूप में एक अलग नाम हो सकता है /lib32या /lib64)। इसलिए, जब तक आप /libनिर्देशिका को वापस नहीं ले जाते, तब तक आपको लिंकर को स्पष्ट रूप से लागू करने की आवश्यकता होती है, और आपको स्थानांतरित पुस्तकालयों के लिए पथ निर्दिष्ट करने की आवश्यकता होती है। यहाँ डेबियन निचोड़ i386 पर परीक्षण किया गया आदेश है।

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /

आपको अन्य वितरण या आर्किटेक्चर के लिए इसे थोड़ा समायोजित करने की आवश्यकता हो सकती है। उदाहरण के लिए, x86_64 पर CentOS के लिए:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

जब आप किसी चीज़ को खराब कर देते हैं /lib, तो यह एक सांख्यिकीय रूप से जुड़े टूलबॉक्स के चारों ओर लेटने में मदद करता है। कुछ वितरण (मैं CentOS के बारे में पता नहीं है) की एक स्थिर से जुड़े प्रति उपलब्ध बिजीबॉक्स । इसमें सैश भी है , एक स्टैंडअलोन शेल जिसमें कई कमांड बिल्ट-इन हैं। यदि आपके पास इनमें से एक है, तो आप अपनी वसूली वहां से कर सकते हैं। यदि आपने उन्हें इस तथ्य से पहले स्थापित नहीं किया है, तो बहुत देर हो चुकी है।

# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit

यदि आपके पास अब कोई रूट शेल नहीं है, लेकिन आपके पास अभी भी SSH डेमॉन सुनने की सुविधा है और आप सीधे ssh पर रूट के रूप में लॉग इन कर सकते हैं, और आपके पास इन स्टैटिकली-लिंक्ड टूलबॉक्स में से एक है, तो आप इसमें ssh कर सकते हैं। काम कर सकते हैं अगर आप चले गए हैं /libऔर /bin, लेकिन नहीं /etc

ssh root@broken.example.com /oops/bin/sash
root@broken.example.com's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /

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

यदि आपके पास रूट शेल नहीं है और सावधानी नहीं बरती गई है, तो आपको लिनक्स लाइव सीडी / यूएसबी से बूट करने की आवश्यकता होगी (जब तक यह हाल ही में आपके डिस्क और फाइल सिस्टम तक पहुंचने में सक्षम होने के लिए पर्याप्त है) और फ़ाइलों को वापस ले जाएं।


1
शुक्रिया गिल्स। आपने भविष्य में मुझे क्या सावधान रहना चाहिए, इसके बारे में कुछ बहुत उपयोगी जानकारी प्रदान की है।
मेनेलास जूल

धन्यवाद गिल्स! इससे मैं बच गया। मैंने 64-बिट linux env के लिए एक एड जोड़ा है। मेरे मामले में, 64-बिट CentOS 7
CompEng88

@ ComputerEngineer88 धन्यवाद, लेकिन जब आप संपादन करते हैं, तो कृपया "EDIT" मार्कर न जोड़ें या उन्हें उस पोस्ट के अंत में न जोड़ें जहां वे नहीं हैं। पाठ का प्रवाह बनाए रखें। पोस्ट का एक संपादित इतिहास है यदि लोग जानना चाहते हैं कि पोस्ट पहले क्या थी। जब लोग पोस्ट को सामान्य रूप से पढ़ते हैं, तो वे इस बात की परवाह नहीं करते हैं कि बाद में कुछ बिट जोड़ा गया था।
गाइल्स का SO- बुराई से दूर

वास्तव में? मैं हमेशा संपादन पर ध्यान केंद्रित करता हूं। मतलब कुछ नया सीखा गया था और मेरे लिए वह सबसे महत्वपूर्ण था। सभी समान - जब तक लोग लाभान्वित होते हैं!
CompEng88

@ ComputerEngineer88 जब मैं स्टैक ओवरफ्लो का उपयोग करना शुरू कर रहा था तो मेरे पास एक ही पलटा था। लेकिन वास्तव में एक स्टैक एक्सचेंज पोस्ट कई तरह से एक चर्चा मंच पर एक पोस्ट की तुलना में एक विकिपीडिया लेख के करीब है। आप उम्मीद करते हैं कि लोग पोस्ट किए जाने के तुरंत बाद फ़ोरम पोस्ट को पढ़ेंगे, इसलिए यह समझ में आता है कि यदि उन्हें एडिट किया गया है, तो एक दृश्य संकेत है। लेकिन मान लें कि कोई व्यक्ति इस धागे को 2027 में देखता है: वे परवाह नहीं करेंगे कि क्या 2011 के बाद से एक पैराग्राफ था या 2019 में जोड़ा गया था।
गिल्स एसओ- बुराई को रोकें '

11

आप शायद रिबूट किए बिना ठीक हो सकते हैं, इसलिए तब तक रिबूट न ​​करें जब तक आप कुछ अन्य चीजों की कोशिश नहीं करते क्योंकि यह बूट नहीं होगा। यदि आपके पास अभी भी अपना SSH सत्र खुला है, तो ये आज़माएँ:

  • जहाँ से चलने वाले प्रोग्राम $ PATH चर का उपयोग करके सेट किया जाता है। आप अपने नए बिन स्थान को रनिंग पथ से जोड़ सकते हैं export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"। आपको संगत sbin निर्देशिकाओं को भी जोड़ना पड़ सकता है । आप प्रोग्राम को मैन्युअल रूप से उनके पूर्ण पथ के माध्यम से भी चला सकते हैं /path/to/mv [from] [to]उदाहरण के लिए, भले ही mv एक अलग स्थान पर हो। मुश्किल हिस्सा यह है कि अधिकांश कमांड्स सामान्य पुस्तकालयों का उपयोग करना चाहते हैं और आप कहते हैं कि आप /libस्थानांतरित हो गए हैं, इसलिए आपको उस स्थान के लिए एक चर सेट करने की आवश्यकता है।export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib

  • एक बार जब आप कुछ बुनियादी कमांड निष्पादित कर सकते हैं, तो सामान वापस ले जाएं! mv /path/to/subfolder/* /क्रम में होगा! एक बार जब सब कुछ वापस आ जाता है तो सिस्टम को सामान्य रूप से व्यवहार करना चाहिए।

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


SSH के माध्यम से काम करना विफल रहा, इसलिए मैंने एक लाइवसीडी डाउनलोड किया और मैं काम करने के लिए चीजें प्राप्त करने की कोशिश कर रहा हूं। मैं ग्रब पर हूं और ड्राइव को माउंट करने की कोशिश कर रहा हूं, लेकिन यह मुझे नहीं होने देगा क्योंकि कर्नेल लोड नहीं हुआ है। और मौजूदा रास्तों की सटीक राह नहीं देख पा रहा है, यह स्पष्ट रूप से कठिन बना रहा है ...
मेनेलाओस

1
रहने के लिए बूट करें, अपनी डिस्क को माउंट करें, चीजों को उनके उचित स्थानों पर वापस ले जाएं, अपने सिस्टम को रीबूट करें ... और शुभकामनाएं।
कालेब

2
यह सेट करने के लिए पर्याप्त नहीं है LD_LIBRARY_PATH, आपको गतिशील लोडर को स्पष्ट रूप से लागू करने की आवश्यकता है, उदाहरण के लिए LD_LIBRARY_PATH=/newpath/to/lib /newpath/to/lib/ld-linux.so.2 /newpath/to/bin/mv
गाइल्स 'एसओ- बुराई को रोकना'

4

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


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

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

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

2

गाइल्स का बहुत बहुत धन्यवाद, 5 साल बाद और आपके पदों ने अभी भी मेरा दिन बचाया, अगर सप्ताह नहीं।

मेरा मतलब सबफ़ोल्डर की सामग्री को चालू फ़ोल्डर में ले जाने का mv sub/* .था mv sub /* ., लेकिन इसके बजाय , मैंने किया , इसलिए मैंने सब कुछ चालू फ़ोल्डर में स्थानांतरित कर दिया। सौभाग्य से मुझे यह उत्तर मिला, और मैं अपनी मशीन को सापेक्ष आसानी से ठीक कर पाया। हालाँकि, मुझे आदेशों को थोड़ा समायोजित करना पड़ा क्योंकि मैं Ubuntu 16.04 पर चलने वाली x86_64 मशीन पर काम कर रहा हूं। अगर कोई संघर्ष कर रहा है, तो मैं यहां निर्देश छोड़ना चाहूंगा:

export LD_LIBRARY_PATH=/oops/lib:/oops/lib/x86_64-linux-gnu
/oops/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /

0

आधुनिक सिस्टम के लिए Ktipr का उत्तर (x86_64 मशीन यूनिक्स चलाने के लिए) लागू करने के बाद मैं कुछ और कमांड जोड़ना चाहूंगा , मैं निर्देशिकाओं को प्राप्त करने में सक्षम नहीं था "आदि" त्रुटि के रूप में दिखाया गया

Error : Directory not empty

इसलिए मुझे इस्तेमाल करना पड़ा

rsync -a source_file target_location

यह सुनिश्चित करने के लिए कि मैं सब कुछ वापस पाने में सक्षम था। यदि आपके पास यह पहले से स्थापित नहीं है, तो आपको इसे पहले स्थापित करना होगा।

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