ले जाया गया / बिन सामग्री / usr / बिन, पूर्ववत करने के लिए संभव है?


18

उबंटू 17.04 चल रहा है, मैं गैर-रिपॉजिटरी वितरण से एक सॉफ्टवेयर स्थापित कर रहा था, मुझे सॉफ्टवेयर बिन-फोल्डर सामग्री को / usr / बिन पर ले जाना चाहिए था (जो पहले से ही iffy सलाह थी)

यह उन दिनों में से एक है, इसलिए मैंने इसके बजाय क्या किया:

mv /bin/* /usr/bin

इसलिए मैं खराब हो गया और मैंने गलती से बिन / usr / bin और / bin में सभी फाइलें खाली कर दीं। चूँकि मैं ले जाता हूं / बिन सिस्टम क्रिटिकल, त्वरित उपाय के लिए, मैंने कॉपी / usr / बिन सामग्री को / बिन में कॉपी किया।

अब मेरी / बिन और / usr / बिन सामग्री समान है और दोनों में मूल रूप से / bin और / usr / bin अलग की गई फाइलें हैं।

  1. क्या मेरा उबंटू अब टूटी अवस्था में है? (अभी तक कंप्यूटर को रिबूट करने की कोशिश नहीं की, अभी सब कुछ अभी भी काम करने लगता है)
  2. क्या यह जानने का कोई तरीका है कि कौन सी फाइलें हाल ही में / usr / bin में स्थानांतरित / कॉपी की गई हैं, इसलिए मैं केवल स्थिति का ध्यान रख सकता हूं? 2.1 क्या आमतौर पर / bin और / usr / bin में ओवरलैपिंग फाइलें होती हैं
  3. क्या मेरे द्वारा किए गए पूर्ववत करने के अन्य तरीके हैं?

मेरे पास टाइमशिफ्ट स्थापित नहीं है, इसलिए बैकअप बहाल करना एक विकल्प नहीं है, लेकिन वर्तमान में कंप्यूटर पर कुछ भी महत्वपूर्ण नहीं है, इसलिए मैं सिर्फ पूरे लिनक्स विभाजन को फिर से स्थापित करने के लिए स्वीकार कर सकता हूं।


2
dpkg-query -l | awk '{system ("dpkg-query -L" $ 2 "| grep -E \" ^ / usr / bin /.*$ \ "")}' यह आपको शुरुआत में सभी फाइलें / usr / bin आधारित देगा। संकुल स्थापित किया गया
रमन सायपाल गोपाल

7
@ Sat @Katsura /binसिस्टम क्रिटिकल है। इसकी सामग्री जल्द से जल्द बूट चरणों में मौजूद होनी चाहिए। आप विभाजन ( /usrयहाँ) के लिए एक प्रतीकात्मक लिंक नहीं बनाना चाहते हैं जो कि बूट पर आरोहित न हो।
xhienne

1
@xhienne मैंने कभी नहीं कहा कि यह एक रिबूट बच जाएगा। सिस्टम को ठीक करने में सक्षम होने के लिए पर्याप्त कार्यक्षमता प्राप्त करना एक अस्थायी समाधान है।
सातु कटसरा

1
@xhienne जो इस बात पर निर्भर करता है कि आपने डिस्ट्रो कैसे सेट किया है। उदाहरण के लिए, आर्क /binडिफ़ॉल्ट रूप से एक अलग बनाए नहीं रखता है । उबंटू का डिफ़ॉल्ट विभाजन अलग /usrविभाजन नहीं बनाता है । मैं उत्सुक हूं कि /usrआधुनिक डिस्ट्रो के साथ वास्तव में कितने लोग अलग होते हैं।
मुरु

1
@ मेरी एक सामान्य के रूप में मेरी टिप्पणी ले लो। विभाजन की संख्या पर आप जो चाहें मान सकते हैं, मुझे पसंद नहीं है और मैं लिंकिंग / यूएसआर / बिन / * टू / बिन के खिलाफ चेतावनी दे रहा हूं, जो कि पूरी तरह से बेकार है और सबसे खराब सिस्टम को अगले बूट पर बेकार कर सकता है । FHS का अनुसरण करने वाली कोई भी प्रणाली में / usr / bin के लिए सहानुभूति नहीं होनी चाहिए। ओपी को फाइलों को कॉपी करने की सलाह दी गई।
xhienne

जवाबों:


19

क्या मेरा उबंटू अब टूटी अवस्था में है?

हां, आपका उबंटू टूट गया है

आपने पैकेज प्रबंधन के लिए कुछ महत्वपूर्ण गड़बड़ कर दी ।

तो व्यवहार में, अपने महत्वपूर्ण डेटा (कम से कम /etcऔर /home) का बैकअप लें , शायद स्थापित पैकेजों की सूची जैसे कि dpkg -lउबंटू का आउटपुट और फिर से इंस्टॉल करें।

(एक गैर-नौसिखिया प्रबंधन करने की कोशिश कर सकता है - जैसे अन्य उत्तरों में - लेकिन फिर उसने इतनी बड़ी और बुनियादी गलती नहीं की होगी)

मैं सिर्फ पूरे लिनक्स विभाजन को फिर से स्थापित करने के लिए स्वीकार कर सकता हूं।

शायद यही वह है जो आपके समय का कम उपभोग करेगा। अन्य उत्तरों की सहायता से अपनी वर्तमान प्रणाली को बनाए रखना बहुत ही गन्दी स्थिति में है (जो आपको भविष्य में सिरदर्द देगा)।

चूंकि आप अपनी डिस्क को सुधार रहे हैं, /homeइसलिए एक अलग विभाजन में डालें (ताकि भविष्य में ऐसी गलतियाँ आपके डेटा को खो न दें)। के उत्पादन में कागज पर कि प्रिंट करने से पहले df -hऔर df -hiऔर fdisk -l(वे डिस्क स्थान -both का इस्तेमाल किया और उपलब्ध- ... के बारे में जानकारी दें)। एक बड़ा पर्याप्त सिस्टम विभाजन (रूट फ़ाइल सिस्टम) होने के लिए बुद्धिमान बनें; यदि आप इसे वहन कर सकते हैं 100 Gbytes पर्याप्त से अधिक है।

मुझे सॉफ्टवेयर बिन-फोल्डर सामग्री को / usr / bin में ले जाना चाहिए था

(शब्दावली: यूनिक्स की निर्देशिकाएं हैं, "फ़ोल्डर" नहीं)।

यही कारण है कि ( चलती करने के लिए /usr/bin/) बहुत गलत है। या तो अपने में सुधार $ पथ सबसे ऐड में (अधिमानतः) या सिमलिंक में /usr/bin/और अधिमानतः के लिए कदम (या सिमलिंक जोड़ने) करने के लिए निष्पादन योग्य /usr/local/bin/

बुद्धिमान दृष्टिकोण कभी नहीं बदलने के लिए है /usr/bin/, /bin, /sbin, /usr/sbin/ पैकेज प्रबंधन उपकरणों के बाहर (जैसे dpkg, apt-get, aptitude, आदि ...)। FHS पढ़ें ।


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

1
जैसा कि /binऔर /usr/binअब समान है, मुझे यकीन नहीं है कि पैकेज प्रबंधन को खराब क्यों किया जाएगा। वहाँ वास्तव में एक मामले में जहां है /bin/fooऔर /usr/bin/fooदोनों एक पैकेज (रों) द्वारा प्रदान की जाती हैं। यदि नहीं, तो बस कुछ अतिरिक्त फाइलें तैर रही हैं।
स्ट्रॉन्गबैड

3
@Basile नहीं यह दुखी नहीं होगा; पैकेज प्रबंधन केवल उन फाइलों के बारे में परवाह करता है जिनके बारे में वह जानता है, यह उन फाइलों के बारे में शिकायत नहीं करेगा जिनके बारे में वह नहीं जानता है। यहां तक ​​कि फाइलों के बारे में यह भी पता है कि यह विशेष रूप से परेशान नहीं होगा अगर वे बदल गए हैं ...
स्टीफन किट

2
@ बासील मैं बाद के हिस्से पर भी भरोसा नहीं करता "(एक गैर-नौसिखिया प्रबंधन करने की कोशिश कर सकता है - जैसे अन्य उत्तरों में - लेकिन फिर उसने इतनी बड़ी और बुनियादी गलती नहीं की होगी)" सच;; यहां तक ​​कि विशेषज्ञ कभी-कभी फिसल जाते हैं!
स्टीफन किट

1
एफडब्ल्यूआईडब्ल्यू मेरी मुख्य प्रणाली का /विभाजन 12 जीबी है और मैं इसे केडीई (पढ़ें नहीं-सबसे पतला) पर विकास (रीड हेडर फाइल और कई टूल्स) कार्यालय और डिजाइन (पढ़ें भारी उपकरण) के लिए उपयोग करने के बावजूद अंतरिक्ष के मुद्दे पर कभी नहीं भागा। यदि आप विभाजित नहीं करते हैं /var, तो 4GB अधिक में फेंकें , यदि आप मेरे पास जितना बड़ा मार्जिन चाहते हैं, तो 25% बढ़ाएँ, और 20GB पर आप अच्छे से अधिक हैं।
स्पेक्ट्रास

36

लिनक्स पर (और अधिकांश अन्य प्रणालियों पर, हालांकि POSIX आपको वह गारंटी नहीं देता है, जब तक कि यह कदम फाइल सिस्टम के पार नहीं था), जिसने उनके समय को अपडेट कर दिया होगा, इसलिए यह मानते हुए कि अन्य लोगों में से कोई भी /usr/binपिछले 24 घंटों में स्पर्श नहीं किया गया है। , आप उन्हें वापस ले जाने में सक्षम होना चाहिए:

find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
   echo mv -i "$@" /bin' sh {} +

echoयदि सही लगे तो निकालें । ध्यान दें कि आप फ़ाइलों कि में इसी नाम से अस्तित्व में ठीक करने के लिए सक्षम नहीं होगा /binऔर /usr/bin(में मूल लोगों को /usr/binहोगा खो दिया गया है)

एक संभावित कैविएट: यदि कुछ फ़ाइलों को दोनों में कड़ी मेहनत से जोड़ा गया /binऔर /usr/bin, सभी हार्ड लिंक को /usr/binस्थानांतरित कर दिया जाएगा /bin

अब, आप सोच सकते हैं कि कब से /binऔर /usr/binडिफ़ॉल्ट में हैं $PATH, और कम से कम /binउपलब्ध /bootहोने से पहले /usrमाउंट किया गया है, इससे कोई फर्क नहीं पड़ना चाहिए कि क्या निष्पादनयोग्य /binइसके बजाय हैं /usr/bin

लेकिन यह अनदेखी होगी कि कई आदेशों को क्रियान्वित करने के मार्ग को कठिन कोड देते हैं और उनसे कुछ विशिष्ट मामलों में होने की उम्मीद करते हैं। एक आम मामला है वह धमाकेदार। सभी स्क्रिप्ट्स:

#! /usr/bin/env bash

काम करने के लिए असफल आप कर के बाद होगा mv /usr/bin/env /bin/env। उस संबंध में, दोनों स्थानों में आदेश सुरक्षित हैं, यह उन लिपियों को नहीं तोड़ेगा।


3
जैसा कि ऊपर उल्लेख (मैं अपने टिप्पणी हटा के रूप में यह एक गंभीर त्रुटि है कि नाम वाली निर्देशिका के लिए सब कुछ ले जाने की कोशिश होता था iकि के बारे में --sorry!) Ubuntu की तरह जीएनयू / लिनक्स सिस्टम पर किसी एक का उपयोग कर सकते हैं find /usr/bin/. ! -name . -prune -ctime -1 -exec echo mv -it /bin {} +के बाद से GNU coreutilsmv का समर्थन करता है -t। अन्य OSes आम तौर पर इसका समर्थन नहीं करते हैं , न ही यह व्यस्त बॉक्स द्वारा उपलब्ध कराए गए विकल्पmv में काम करता है ।
एलियाह कगन

17
  1. आपकी स्थापना ज्यादातर ठीक होनी चाहिए; एक ही नाम वाली ( /usrऔर /usr/binआपके 2.1 का जवाब देने वाली) अलग-अलग फाइलें नहीं होनी चाहिए , ताकि दोनों में सभी फाइलें हों /binऔर /usr/binकुछ भी टूट न जाए (जब तक कि आप पैकेज को अपग्रेड न करें)। एकमात्र समस्या जो अब आपके पास हो सकती है, वह है टूटी हुई सीमलिंक, यदि आप एक बाइनरी को सिम्पीनल के साथ ओवरवोट करते हैं। इसे ठीक करने के लिए, टूटे हुए सीमलिंक देखें:

    find -L /bin /usr/bin -type l -ls
    

    और सूचीबद्ध फ़ाइलों के अनुरूप किसी भी पैकेज को फिर से स्थापित करें (उदाहरण के लिए, यदि /usr/bin/zshटूटे हुए के रूप में दिखाता है , तो dpkg -S /bin/zsh /usr/bin/zshआपको बताएगा कि फ़ाइल किस पैकेज से आई है; इसे पुनर्स्थापित करें apt --reinstall install zsh)।

  2. आप उन फ़ाइलों को देखने के लिए समय-समय पर दिखा सकते हैं और सॉर्ट कर सकते हैं, जिन्हें हाल ही में बदला गया था (जिसमें आपके द्वारा स्थानांतरित की गई फ़ाइलें शामिल होंगी):

    ls -ltc /bin
    
  3. आपने जो cruftपैकेज किया है उसका उपयोग करने के लिए सबसे अच्छा तरीका है और इसमें मिलने वाली फाइलों को हटा दें /binया /usr/binजो पैकेज से न आए:

    sudo apt install cruft
    sudo cruft -d "/ /usr"
    

    जब तक फाइलें फ़ाइलों के लिए सहानुभूति नहीं होती हैं /etc/alternatives(जिस स्थिति में आपको उन्हें अकेला छोड़ देना चाहिए)।


उन लिपियों को छोड़कर, जो इसके साथ #! /bin/shया इसके समान शुरू होती हैं।
सातु कटसरा

@ Sat @Katsura वे अभी भी ठीक काम करेंगे अगर shदोनों में है /binऔर /usr/bin(सभी फ़ाइलों को अब दोहराया गया है)।
स्टीफन किट

1
cruftइस काम के लिए एक विशेष टूलक आवश्यक नहीं है क्योंकि पैकेज प्रबंधक भी स्थापित फ़ाइलों का ट्रैक रखता है। Unix.stackexchange.com/questions/153260/… देखें ।
नेड 64

1
comm -12 <(ls /bin) <(ls /usr/bin)एक उबंटू प्रणाली पर कुछ प्रविष्टियाँ दिखाते हैं जिन्हें मैंने इस पर परीक्षण किया है। /bin/foo -> /usr/bin/fooजिसके कुछ साधन fooखो गए होते।
स्टीफन चेज़लस

@ स्टीफन आह हाँ, इस लिंक को हिलाने से मूल ...
स्टीफन किट

6

यह विस्तृत हो सकता है कि आपकी प्रणाली क्यों , अधिक या कम हद तक, 'टूटी हुई' हो, विस्तृत है ।

  1. जैसा कि @ basile-starynkevitch बताते हैं, पैकेज प्रबंधन प्रणाली में बहुत उलझन होने की संभावना है अगर यह बायनेरिज़ को खोजने के लिए /binजब वे अंदर होना चाहिए /usr/bin, और इसके विपरीत।
  2. कुछ (संभवतः महत्वपूर्ण) लिपियों को एक निर्देशिका या दूसरे में किसी विशेष बाइनरी को खोजने के लिए हार्ड-वायर्ड किया जा सकता है (कुछ परिस्थितियों में यह अच्छा अभ्यास है, उदाहरण के लिए सुरक्षा के दृष्टिकोण से, सामग्री पर भरोसा करने के लिए नहीं$PATH )।
  3. इस कारण से अंतर होता है /binऔर /usr/binयह है कि पूर्व संभवतः एक विभाजन पर हो सकता है जो बूट के पहले चरण में मुहिम की जाती है। इस संदर्भ में (यानी, सिस्टम को बूट करते समय), न केवल /bin/xxxबायनेरिज़ को संभवतः पूर्ण पथ द्वारा संदर्भित किया जाएगा, लेकिन /usr/binउस बिंदु पर सिस्टम पर निर्देशिका उपलब्ध नहीं हो सकती है। (यदि आप df /binऔर df /usr/bin, आप एक ही फाइलसिस्टम को सूचीबद्ध या अलग-अलग देख सकते हैं, तो संभवत: अधिकांश डिफ़ॉल्ट इंस्टॉल होते हैं, इन दिनों, दोनों निर्देशिकाओं को एक ही विभाजन में छोड़ दें)।

इस प्रकार आप देखते हैं कि, यदि आपके पास doubless कर सकते हैं एक ही दोनों में बाइनरी /binऔर /usr/bin, फिर समस्याओं 2 और 3 घटित नहीं होगा, और 1 से होने वाले नुकसान मामूली हो सकता है। 1, उदाहरण के लिए, संकुल को ठीक से अनइंस्टॉल नहीं किया जा सकता है यदि आप उन्हें हटाने की कोशिश करते हैं; और अपग्रेड सही तरीके से हो सकता है, अगर अपग्रेड कॉपी को 'सही' जगह पर अपग्रेड करने की कोशिश करता है, लेकिन 'गलत' जगह पर कॉपी को नजरअंदाज कर देता है। इस प्रकार, यदि उपरोक्त उपचार बहुत अधिक कठोर या जटिल लगते हैं, तो आप इस अवस्था में सिस्टम को छोड़ कर भाग सकते हैं।

लेकिन अगर यह एक महत्वपूर्ण प्रणाली है, तो मैं वास्तव में उस पर बैंक नहीं करूंगा।

एक सामान्य नियम (फिर से @ basile-starynkevitch) की गूंज कभी भी बंदर के साथ नहीं होती है /usr/bin, /binऔर दोस्तों - वे वितरण के लिए 'संबंधित' हैं - और एक पैकेज जो इसके सामान्य इंस्टॉल के हिस्से के रूप में ऐसा करने का सुझाव देता है ... एक अच्छा पैकेज नहीं है।

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

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