pacman "फाइल सिस्टम पर मौजूद है" त्रुटि


38

मैं भागा sudo pacman -Syuऔर मुझे पढ़ने में कुछ गलतियाँ मिलीं:

त्रुटि: लेन-देन करने में विफल (विरोधाभासी फ़ाइलें)

और उसके बाद फाइलों की एक लंबी सूची exists in filesystem। पूर्ण आउटपुट यहां है: http://ix.io/lLw

ऐसा प्रतीत होता है कि इनमें से कई फाइलें एक पैकेज से जुड़ी नहीं हैं, जब मैंने उनके साथ pacman -Qo <path-to-file>जांच की थी, लेकिन मैंने उन सभी की जांच नहीं की। मेरे पास दौड़ने के दौरान एक कमजोर संबंध था pacman -Syu, लेकिन जब मैं बाद में अपडेट करता हूं तो मुझे वही त्रुटियां मिलती हैं: http://ix.io/lLx

मुझे क्या करना चाहिए? क्या मुझे सभी फाइलों की जांच करनी चाहिए और उन लोगों को हटा देना चाहिए जिनके पास संबद्ध पैकेज नहीं है? क्या मुझे अद्यतन करना चाहिए (साथ sudo pacman -S --force <package-name>?)

अद्यतन करें

मैंने दौड़ने की कोशिश की sudo pacman -S --force <package-name>और यह मिल गया:

[my-pc]/home/average-joe$ pacman -Qo /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info
error: No package owns /usr/lib/python3.5/site-packages/PyYAML-3.11-py3.5.egg-info

ऐसा लगता pacman -S --force <packageहै कि उन निर्देशिकाओं को अधिलेखित नहीं करता है जिनमें फाइलें हैं। आदमी से:

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

क्या मुझे परस्पर विरोधी निर्देशिकाओं को हटा देना चाहिए? (उनके पास संबद्ध पैकेज नहीं हैं)


5
आपके पास पहली बार परस्पर विरोधी फाइलें क्यों हैं? पैकेज मैनेजर का उपयोग करते समय, अपने पैर की उंगलियों पर टैप न करने की कोशिश करें (जैसे कि पैकेज मैनेजर उन जगहों पर सॉफ़्टवेयर स्थापित करके, जो सही तरीके से सोचते हैं कि यह उनका है; यदि आपको चीजों को मैन्युअल रूप से इंस्टॉल करना चाहिए, /usr/local/बल्कि इंस्टॉल करना है /usr/)
umläute

1
@ umläute मुझे बिल्कुल यकीन नहीं है कि परस्पर विरोधी फाइलें कहां से आई हैं, लेकिन मुझे संदेह है कि वे मेरे स्थापना -कार्य से संबंधित हैं जो मैंने sudo pip install -U docker-compose==1.5.0rc3 इस पृष्ठ पर उपयोग करके स्थापित किए हैं । शायद sudo pip installपैक्मैन से टकराव?
modulitos

2
@ umläute गलत -Sअपडेट (आंशिक इंस्टॉल, आदि) प्राप्त करना आपको वह परिदृश्य देगा। मेरे मामले में --forceहर समय काम किया।
erm3nda

जवाबों:


28

ठीक है, यह चलने वाले sudo pacman -S --force <package-name>कार्यों की तरह दिखता है , लेकिन यह परस्पर विरोधी निर्देशिकाओं को हल नहीं करता है। ऐसे मामलों में, sudo rm -rfपरस्पर विरोधी निर्देशिकाओं पर चलना , उसके बाद sudo pacman -S --force <package-name>काम करता है।

अब मेरा pacman -Syuसंकल्प अच्छा है।


6
- प्रवर्तन घटाया गया है; इसके बजाय --overwrite का उपयोग करें।
अंकित बाल्यान

6
--फोर्स मेरे लिए काम कर रहा है लेकिन -ओवरराईट नहीं है
इन्फर्नियन

2
sudo pacman -Syu --forceमेरे लिए काम किया, लेकिन ओवरराइट को मान्यता नहीं दी गई थी।
स्पिडन

21

tl; dr: दौड़ने से पहले परस्पर विरोधी एप्लिकेशन को अनइंस्टॉल करें pacman

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

मानक ./configure && make && sudo make installपैटर्न का उपयोग करके इंस्टॉल किए गए कई एप्लिकेशन का उपयोग करके अनइंस्टॉल किया जा सकता है sudo make uninstall। यदि आपने एप्लिकेशन को किसी अन्य तरीके से इंस्टॉल किया है तो आपको इसे अनइंस्टॉल करने के लिए कुछ और करना पड़ सकता है। सामान्य तौर पर यह एक अच्छा विचार हो सकता है कि स्थापना फ़ाइलों की एक प्रति (उदाहरण के लिए ~/install) उन्हें ऐसे मामलों में मज़बूती से स्थापना रद्द करने में सक्षम हो। बस विरोधाभासी फ़ाइलों को हटाने से शायद आस-पास पड़ी अन्य फाइलें निकल जाएंगी, जो अन्य समस्याओं का कारण बन सकती हैं।

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


2
ऊपर मेरी टिप्पणी देखें @umlaute मुझे लगता है कि संघर्ष एक sudo pip installआदेश से था । शायद मुझे सुडो के साथ पाइप का उपयोग करने से बचना चाहिए?
modulitos

3

मैं पैकेजों को स्थापित कर रहा था जो मैं आमतौर पर इस वजह से पीकमैन के माध्यम से पाइप के साथ स्थापित करता हूं। लेकिन कुछ पैकेज पीकमैन रिपोज में पाए जाते हैं। मुझे लगता है कि हमें सुडो विशेषाधिकार और आइसटेड के साथ पाइप स्थापित करने से बचना चाहिए:

pip install pillow --user

--user फ्लैग आपके होम डायरेक्टरी के बजाय पाइप इंस्टाल पैकेज बनाता है, जिसके लिए किसी विशेष विशेषाधिकार की आवश्यकता नहीं होती है। https://stackoverflow.com/questions/42988977/what-is-the-purpose-pip-install-user


2

TLDR;

  1. आपत्तिजनक फ़ाइलों की सूची प्राप्त करें (एक फ़ाइल में पैक्मैन के आउटपुट को कॉपी और पेस्ट करें)।
  2. सब कुछ छीनने के लिए awk का उपयोग करें लेकिन फ़ाइल एक नई सूची में जाती है।
  3. का प्रयोग करें , जबकि सूची के आधार पर रास्ते से बाहर हमलावर फ़ाइलों को स्थानांतरित करने,।
  4. sudo pacman -Syuफिर से दौड़ो ।

    TLDR को जोड़ने और टाइपो को ठीक करने के लिए संपादित किया गया

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

अपनी फ़ाइलों की एक सूची प्राप्त करें।

जब अद्यतन आपके टर्मिनल विंडो में विफल रहता है, तो आपको यह मिलता है:

error: failed to commit transaction (conflicting files)
evilfile: /usr/bin/evilfile exists in filesystem
libx000: /usr/lib/libx000.so.f.u.loser exists in filesystem
accountsservice: /usr/share/locale/ru/LC_MESSAGES/accounts-service.mo.yu.dnt.evn.spk.russian exists in filesystem

... और भी काफी।

  • टर्मिनल से आउटपुट कॉपी करें, और इसे एक फ़ाइल में डालें। मैंने नैनो का उपयोग किया , और मेरा नाम "फाइलों", जैसा कि ~ / काम / फाइलों में है

  • पट्टी बाहरी जानकारी:

    cat files | awk '{print $2}' >> ~/work/files2

    यह प्रत्येक पंक्ति से दूसरा "शब्द" लेता है और इसे files2 में प्रिंट करता है।

फाइलों से निपटें

  • आप उन्हें हटा सकते हैं, उन्हें स्थानांतरित कर सकते हैं या उनका नाम बदल सकते हैं।

  • यदि कुछ टूटता है, तो इसे ठीक करना आसान है यदि हम इसे हटाने या नाम बदलने के बजाय इसे स्थानांतरित करते हैं:
    mkdir ~/work/oldfiles while read -r file; do sudo mv -- "$file" ~/work/oldfiles/$file; done < files2

  • यदि आप वास्तव में उन्हें हटाना चाहते हैं, जो करने का कोई कारण नहीं है ( DANGER DANGER ): जबकि रीड -r फ़ाइल; do sudo rm - "$ फ़ाइल"; किया <files2

अद्यतन कर रहा है

  • काम करने के लिए --overwrite प्राप्त करने के लिए, जिसे हमें पैकेज के टूटने का एहसास करने के लिए पैकिमैन करने की आवश्यकता है, आपको निम्न सिंटेलिक की आवश्यकता है:

    sudo pacman -S package_name --overwrite /location/of/thing

    • मेरे मामले में: sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
    • उदाहरण के बाद: sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
  • मुझे एक प्यारी सी समस्या थी जहाँ अगर मैंने libidn2.so.0 सिमिंक को हटा दिया, तो कुछ भी काम नहीं किया, और जब मैंने इसे वापस रखा, तो मुझे "फाइल सिस्टम पर मौजूद" त्रुटि मिली। उपरोक्त, के साथ --overwrite, वह सब है जो मेरे लिए काम करता है।

  • आखिरकार:

    sudo pacman -Syu


0

यदि आपके पास मेरे रूप में कई फाइलें हैं,

sudo pacman --force -Syyu  

सभी मुद्दों को हल करता है।


विकल्प - प्रवर्तन घटाया गया है; का प्रयोग करें
महमूद खालिद

- अधिलेखित लगता है कि क्या अधिलेखित करने के लिए निर्दिष्ट करना चाहिए। वर्तमान में उपयोग
xsilen T

0

पेसमैन ने आखिरकार --forceविकल्प को हटा दिया और सरोगेट --overwriteविकल्प को उम्मीद के मुताबिक काम करने के लिए , फॉलो यूज़ पैटर्न पर ध्यान दिया जाना चाहिए।

--forceविकल्प को पुन: उत्पन्न करने के लिए एक समतुल्य आदेश जो संघर्ष को आँख बंद करके कुछ भी लिख देगा:

sudo pacman -S --overwrite \*

या

sudo pacman -S --overwrite "*"

पहले खोल का विस्तार करने से बचने के लिए मुश्किल हिस्सा ग्लोब से बच रहा है।

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