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

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

이것을 실행 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

pacman이 마침내 이 --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

너무 오래;

  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" Complete < file 2;

업데이트 중

  • --overwrite가 작동하려면(pacman이 패키지가 손상되지 않았음을 인식하도록 해야 함) 다음 구문이 필요합니다.

    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

관련 정보