팩맨 "파일 시스템에 존재합니다" 오류

팩맨 "파일 시스템에 존재합니다" 오류

나는 달렸다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파일이 포함된 디렉터리를 덮어쓰지 않는 것 같습니다 . 남자에게서:

--force를 사용하면 디렉토리를 파일로 덮어쓰거나 파일 및 디렉토리가 충돌하는 패키지를 설치할 수 없습니다.

충돌하는 디렉터리만 삭제해야 합니까? (관련 패키지가 없습니다)

답변1

--force팩맨이 마침내 이 옵션을 더 이상 사용하지 않고 대리자를 만든 후--overwrite 옵션이 예상대로 작동하도록 만든 후에는 다음 사용 패턴에 유의해야 합니다.

--force충돌하는 모든 항목을 맹목적으로 덮어쓰는 옵션을 재현하는 명령은 다음과 같습니다.

sudo pacman -S --overwrite \* <package_name>

또는

sudo pacman -S --overwrite "*" <package_name>

까다로운 부분은 쉘이 먼저 확장하는 것을 막기 위해 와일드카드를 이스케이프 처리하는 것입니다.

답변2

좋아, 실행이 작동하는 것처럼 보이지만 sudo pacman -S --force <package-name>충돌하는 디렉터리는 해결되지 않습니다. 이러한 경우 sudo rm -rf충돌하는 디렉터리에서 실행한 다음sudo pacman -S --force <package-name> 작업을 수행합니다.

이제 나는 pacman -Syu잘 결심했습니다.

답변3

tl;dr: 실행하기 전에 충돌하는 애플리케이션을 제거하세요 pacman.

pacman(및 기타 패키지 관리자)는패키지 및 파일 색인그들이 관리하는 것(pacman --query --list ). 구성과 같은 일부 파일은 수정 가능한 것으로 표시되며 업그레이드 중에 덮어쓰여지지 않습니다(일반적으로 패키지 관리자가 새 파일을 생성하기 전에 이전 파일을 이동하는 특별한 상황은 제외). 다른 파일은 수정할 수 없는 것으로 표시됩니다.다른 응용 프로그램이 그에 따라 인덱스를 업데이트하지 않고 어떤 방식으로든 해당 파일을 변경하는 경우 패키지 관리자는 업그레이드 중에 해당 파일을 어떻게 처리할지 알 수 없습니다.

표준 ./configure && make && sudo make install패턴을 사용하여 설치된 많은 애플리케이션은 다음을 사용하여 제거할 수 있습니다.sudo make uninstall. 다른 방법으로 애플리케이션을 설치한 경우 이를 제거하려면 다른 방법을 사용해야 할 수도 있습니다. 일반적으로 다음을 수행하는 것이 좋습니다.설치 파일의 복사본을 보관하세요~/install그러한 경우에는 안정적으로 제거할 수 있는 어딘가(예 : )가 있어야 합니다. 충돌하는 파일을 제거하는 것만으로도 다른 파일이 남게 되어 다른 문제가 발생할 수 있습니다.

다른 패키지 관리자를 사용하여 소프트웨어를 설치할 때 해당 패키지를 시스템 파일에서 격리하는 방법이 있습니다. 이는 예를 들어 소프트웨어 개발 중에 버전을 일관되게 유지하고 다른 소프트웨어와의 충돌을 피하려는 확립된 모범 사례입니다. 예는 다음과 같습니다:

답변4

TLDR;

  1. 문제가 있는 파일 목록을 가져옵니다(팩맨의 출력을 파일에 복사하여 붙여넣기).
  2. 사용파일 경로를 제외한 모든 것을 새 목록으로 제거합니다.
  3. 사용~하는 동안목록에 따라 문제가 되는 파일을 다른 곳으로 이동합니다.
  4. 다시 뛰어 sudo pacman -Syu.

    TLDR을 추가하고 오타를 수정하도록 편집되었습니다.

내가 어리석은 짓을 한 것은 아니라고 확신하지만 Manjaro를 사용한 이후로 업데이트를 시도할 때마다 이 문제가 발생했습니다. 두 달 안에 서너 번. 요점은 이것이 문제를 해결한다는 것입니다.

파일 목록을 가져옵니다.

터미널 창에서 업데이트가 실패하면 다음과 같은 메시지가 표시됩니다.

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

  • 정말로 삭제하고 싶다면 그렇게 할 이유가 없습니다(위험 위험):-r 파일을 읽는 동안; sudo rm -- "$file"; 완료 < 파일 2

업데이트 중

  • pacman이 패키지가 손상되지 않았음을 인식하도록 하기 위해 수행해야 하는 --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 심볼릭 링크를 삭제하면 아무 것도 작동하지 않고 다시 넣었을 때 "exists on filesystem" 오류가 발생하는 귀여운 문제가 있었습니다. 위의 --overwrite가 나에게 도움이 된 전부입니다.

  • 마지막으로:

    sudo pacman -Syu

관련 정보