주변의 일부 파일을 삭제했습니다 /var/lib/dpkg/
. 즉:
/var/lib/dpkg/status
/var/lib/dpkg/available
/var/lib/dpkg/info/*
나는 데비안이 설치된 패키지에 대한 일부 정보를 유지하기 위해 이 파일을 사용한다는 것을 알고 있습니다. 이제 그렇게 하면 apt-get update
다음과 같은 오류가 발생합니다.
Reading package lists... Error!
E: Could not open file /var/lib/dpkg/status - open
(2: No such file or directory)
E: The package lists or status file could not be parsed or opened.
제가 이해한 바에 따르면FHS, 에 있는 파일은 /var
시스템에 중요한 파일로 간주되지 않습니다. 임시 파일, 로그, 캐시 등을 평가해야 합니다.
그렇다면 삭제된 파일을 다시 생성할 수 있는 방법이 있습니까?
답변1
당신이 보면파일 시스템 계층 표준에 지정된 /var의 목적, 그것은 말한다 :
/var
가변 데이터 파일이 포함되어 있습니다. 여기에는 스풀 디렉터리 및 파일, 관리 및 로깅 데이터, 임시 및 임시 파일이 포함됩니다.
"일시적 및 임시" 파일은 단지하나그 안에 들어 있는 것들 중. 또한 "스풀 디렉터리 및 파일"과 "관리 및 로깅 데이터"도 포함되어 있습니다. 중요한 "관리 데이터"를 삭제했습니다.
계속해서 /var
존재 이유를 설명합니다.
/var
/usr
읽기 전용 으로 마운트할 수 있도록 여기에서 지정됩니다 ./usr
시스템 작동 중에(설치 및 소프트웨어 유지 관리가 아닌) 기록된 모든 항목은 에 있어야 합니다/var
.
이것이 핵심입니다 . (소프트웨어를 추가/제거/업데이트할 때만 변경되는) /var
것과는 달리 데이터가 변경됩니다 ./usr
추가 섹션에서는 의 다양한 하위 디렉토리를 설명합니다 /var
. 예를 들어 /var/lib
(삭제한 파일이 원래 있던 곳)에는 "프로그램이 실행되는 동안 수정하고 하나의 특정 호스트와 관련된 데이터"로 정의된 "응용 프로그램 또는 시스템과 관련된 상태 정보"가 들어 있습니다.
너정말특정 파일의 용도를 모르고 파일을 삭제하면 안 됩니다. 삭제하신 파일들에 대해서는 백업해 두지 않는 한, 등을 백업해 두고 다시 설치하는 일밖에 남지 않은 것 /home
같습니다 /etc
. 그렇게 하기 전까지는 dpkg
APT 등을 사용할 수 없습니다 . 그 외에는 시스템이 계속 작동해야 합니다.
답변2
에 있는 파일은 /var
시스템에 매우 중요합니다. 예를 들어 /var/mail
또는 /var/spool/mail
사용자의 이메일을 포함합니다. 이웃의 우편함에 불을 붙이는 것보다 더 이상 그것을 삭제하지 않을 것입니다. 의 특정 하위 디렉터리에 있는 파일만 /var
일시적인 파일을 포함합니다. 즉, 의 로그 파일 /var/log
, 에서 일반적으로 다시 생성될 수 있는 캐시 /var/cache
, 의 임시 파일(사용 중 삭제하면 안 됩니다!)입니다 /var/tmp
.
데이터는 /var/lib
매우 중요할 수 있습니다. 예를 들어, MySQL은 일반적으로 기본적으로 데이터베이스를 저장하도록 구성됩니다 /var/lib/mysql
. 이를 지우면 데이터베이스도 지워집니다. Dpkg는 자체 데이터베이스 /var/lib
도 아래에 배치합니다. /var/lib/dpkg/status
하나입니다.
/var/lib/dpkg/status
설치된 패키지에 대한 정보가 포함되어 있습니다. 해당 항목을 삭제한 경우 백업에서 복원해야 합니다. 백업이 완전히 최신 상태가 아닌 경우 /var/log/apt
및 에서 최근 패키지 조작 로그를 확인하세요 /var/log/dpkg.log
. dpkg
작동하려면 먼저 해당 파일을 만들어야 합니다 .
/var/lib/dpkg/available
인터넷에서 다운로드한 데이터로 구축되었습니다. apt-get update
그것을 재건해야합니다.
/var/lib/dpkg/info
데비안 패키지와 함께 제공되는 파일이 포함되어 있습니다. 패키지를 다시 설치하면 이러한 파일을 복원할 수 있습니다. 물론 이를 위해서는 설치된 패키지 목록이 필요합니다. 을 복원한 경우 /var/lib/dpkg/status
거기에서 패키지 목록을 추출할 수 있습니다.
apt-get install --reinstall $(</var/lib/dpkg/status sed -n 's/^Package://p')
을(를) 잃어버린 경우 빈 파일을 만든 다음 패키지 목록에서 /var/lib/dpkg/status
실행하여 다시 만들 수 있습니다 . apt-get install --reinstall
패키지 목록도 저장되는 한 곳은 /var/lib/apt/extended_states
적어도 APT를 사용하여 패키지를 설치한 적이 있는 경우(직접 설치가 아닌 ) 위의 명령 dpkg
대신 해당 파일을 사용하는 것입니다 . /var/lib/dpkg/status
해당 항목도 삭제한 경우 $(cd /usr/share/doc && ls)
대부분의 패키지가 항목을 생성하므로 를 사용하여 대략적인 패키지 목록을 다시 작성할 수 있습니다 /usr/share/doc
. 아마도 몇 가지 예외가 있을 것입니다.
이 시스템의 패키지 관리에 대한 도움을 요청하지 마십시오. 시스템에 중요한 파일 삭제를 복구하는 것은 정확한 과학이 아닙니다. 백업에서 복원할 수 없는 경우 가능한 한 빨리 깨끗한 새 시스템을 설치해야 합니다.
답변3
/var/lib/dpkg/status
단지 명령을 실행하면 파일이 마술처럼 나타난다는 의미에서는 "다시 만들" 수 없습니다 . 아니요. 파일 백업을 사용해야 하며 /var/lib
디렉터리의 항목을 삭제하지 않는 방법을 배워야 합니다.
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
그러면 전날의 패키지 상태가 표시됩니다. 다른 것이 깨지지 않았는지 기도하기 시작하세요.
답변4
누군가가 "/var/lib/dpkg"를 누킹하게 되면:
sudo mkdir -p /var/lib/dpkg/updates
sudo mkdir -p /var/lib/dpkg/info
sudo mkdir -p /var/lib/dpkg/alternatives
sudo cp /var/backups/dpkg.status.0 /var/lib/dpkg/status
sudo cp /var/backups/dpkg.statoverride.0 /var/lib/dpkg/statoverride
sudo cp /var/backups/dpkg.diversions.0 /var/lib/dpkg/diversions
sudo cp /var/backups/dpkg.arch.0 /var/lib/dpkg/arch
sudo dpkg --clear-avail
sudo apt update
sudo apt upgrade # If needed.