/ बिन / बैश की सामग्री क्या है, और अगर मैं गलती से उन्हें ओवरवोट कर देता हूं तो मैं क्या करूं


24

मैंने गलती से / बिन / बैश फ़ाइल को एक डंब स्क्रिप्ट के साथ ओवरवोट किया है जिसे मैंने / बिन फ़ोल्डर के अंदर डालने का इरादा किया था।

मुझे उस फ़ाइल की सामग्री वापस कैसे मिलेगी? क्या कोई ऐसा तरीका है जिससे मैं वेब पर सामग्री पा सकता हूं, और बस उन्हें वापस कॉपी कर सकता हूं? यहाँ मेरे विकल्प क्या हैं, यह देखते हुए कि टर्मिनल "बहुत सारे प्रतीकात्मक लिंक" के बारे में बात करने में त्रुटि देता है?

मैं अभी भी इस तरह की चीज के लिए एक नवागंतुक हूं, और मुझे मिलने वाली सभी मदद की सराहना करता हूं।

संपादित करें: मैं कलि 2.2 रोलिंग पर उल्लेख करना भूल गया, जो कुछ अतिरिक्त सुविधाओं के साथ बहुत अधिक डेबियन है।

संपादित करें 2: मैंने मशीन को फिर से शुरू किया, क्योंकि मुझे कुछ दिनों पहले तक अपनी गलती का एहसास नहीं हुआ था। जो इसे काफी कठिन बनाता है।


9
हटाए गए बैश? बस zsh :-) </ ट्रोल>
केविन


भौतिक या वी.एम.
बेन एवलिंग

9
अगली बार के लिए: सिस्टम निर्देशिकाओं में सामान न रखें । यदि आप कस्टम स्क्रिप्ट और सामान चाहते हैं, तो या तो अपने आप को एक बनाएं $HOME/.binऔर इसे अपने में जोड़ें PATHया उपयोग करें /usr/local/binयदि आपको सिस्टम-वाइड होने की आवश्यकता है। या, और भी बेहतर अभी तक, एक पैकेज का निर्माण।
स्पेक्ट्रास

जवाबों:


33

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

तो पहली बात यह होनी चाहिए कि अपने खोल को किसी सुरक्षित चीज़ में बदलना चाहिए। देखें कि आपने कौन से गोले लगाए हैं

cat /etc/shells

फिर अपने शेल को वहां सूचीबद्ध अन्य गोले में से एक में बदल दें, उदाहरण के लिए

chsh -s /bin/dash

अपडेट करें, क्योंकि आपने पहले ही रिबूट कर दिया था:

आप भाग्यशाली हैं कि आजकल बूट प्रक्रिया पर भरोसा नहीं होता है bash, इसलिए आपके सिस्टम बूट, आप बस एक कमांड लाइन प्राप्त नहीं कर सकते। लेकिन आप /etc/passwdशेल को संपादित करने और बदलने के लिए एक संपादक शुरू कर सकते हैंroot से लाइन /bin/bashके लिए /bin/dash। लॉग आउट करें और फिर से लॉग इन करें। बस उस फ़ाइल में कोई अन्य परिवर्तन न करें, या आप अपने सिस्टम को पूरी तरह से गड़बड़ कर सकते हैं।

फिर पुनः स्थापित करने का प्रयास करें bash के साथ

apt-get --reinstall install bash

यदि सब कुछ सफल रहा तो आप chshवापस आ सकते हैं bash

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


3
@ dr01: यह देखते हुए कि कैसे भागने से काम चलता है, यह एक गलत उद्धरण की बात हो सकती है। सोचें command > /bin/bash ...बनाम command > (/bin/bash ...)
एमएसलटर्स

7
वह अंतिम वाक्य कठोर था ... :)
जेम्स ने मोनिका पोल्क

6
@MSalters एक गलत उद्धरण रूट के रूप में चलता है । यही दो गलतियाँ हैं। दूसरा, ज़ाहिर है, अपने जटिल पाइपलाइनों को रूट के रूप में आज़मा रहा है, न कि एक विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में।
derobert

12
@JamesKPolk नहीं, यह बिल्कुल कठोर नहीं है। यह सरल सत्य है। काली एक पेशेवर उपकरण है जिसका उपयोग विशेषज्ञों द्वारा किया जाता है । वे अपने वेबपेज पर भी अधिक से अधिक बताते हैं । यदि आप एक विशेषज्ञ नहीं हैं, तो आपके पास वास्तव में काली चलाने वाला कोई व्यवसाय नहीं है।
टेराडो

3
अंतिम वाक्य कठोर नहीं है । यह सादा सच है।
एंड्रिया लज्जाज़ारो

65

अपनी मशीन बंद मत करो।

क्या आपके पास अभी भी एक रनिंग शेल है? क्या यह बैश है? यदि हां, तो आप ठीक हैं। (लेकिन फिर से ऐसा न करें।)

चलाएँ:

sudo cp /proc/$$/exe /bin/bash

वोइला, सब ठीक है।


चूंकि टिप्पणियों में किसी को संदेह है कि यह काम करता है:

[vagrant@localhost ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[vagrant@localhost ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[vagrant@localhost ~]$ echo $0
-bash
[vagrant@localhost ~]$ sudo rm /bin/bash
[vagrant@localhost ~]$ bash
-bash: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo su -
su: /bin/bash: No such file or directory
[vagrant@localhost ~]$ sudo cp /proc/$$/exe /bin/bash
[vagrant@localhost ~]$ bash
[vagrant@localhost ~]$ exit
[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# logout
[vagrant@localhost ~]$ 

18
किसी भी मामले में, इसके बाद, अपने वितरण से बैश को फिर से स्थापित करने की सिफारिश की जाती है, उदाहरण के लिए सही अनुमतियों के लिए (कुछ रूटकिट शिकारी वहां परिवर्तनों से आश्चर्यचकित हो सकते हैं), हार्ड लिंक या सिमिलिंक (जैसे /bin/shया rbash) को पुनर्स्थापित करने के लिए
गियाकोमो कैटज़ाज़ी

4
@GiacomoCatenazzi, वास्तव में, यह विधि अनुमतियों को संरक्षित करती है- जब यह rootरन होता है तो डिफ़ॉल्ट होता है cp। हार्ड लिंक एक अच्छा बिंदु है, हालांकि।
वाइल्डकार्ड

1
मशीन को फिर से चालू किया गया। मैं एक सामान्य शेल नहीं खोल सकता, लेकिन मैं GUI के माध्यम से सामग्री को संपादित कर सकता हूं। जैसा कि पहले कहा गया था, मुझे "बाल प्रक्रिया / बिन / बैश को निष्पादित करने में विफल" (प्रतीकात्मक लिंक के बहुत अधिक स्तर) बताते हुए एक त्रुटि मिलती है।
गरुड़अपेक्स

5

यदि आप लॉगिन कर सकते हैं, लेकिन आप एक टर्मिनल नहीं खोल सकते हैं या अन्यथा शेल खोल सकते हैं, लेकिन आप GUI के माध्यम से फ़ाइलों तक पहुंच सकते हैं, तो उन फ़ाइलों को खोजें /bin, जिनके नाम sh(लेकिन नहीं .sh) के साथ समाप्त होते हैं और एक (डबल क्लिक करके) चलाते हैं या राइट-क्लिक)। विशेष रूप से, निम्नलिखित के लिए देखें:

  • sh
  • dash
  • ash
  • ksh (या kshएक नंबर के बाद; उदाहरण के लिए  ksh93)
  • zsh
  • yash

या, अंतिम उपाय के रूप में,

  • tcsh या
  • csh

यदि आप एक शेल चला सकते हैं, तो फिलिपोस के उत्तर की कोशिश करें

एक अन्य दृष्टिकोण इन निर्देशों का पालन ​​करते हुए एकल-उपयोगकर्ता मोड में बूट करना है लेकिन init=/bin/shइसके बजाय (या अन्य गोले में से एक) निर्दिष्ट करें init=/bin/bash

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