/var/lib/dpkg/status를 다시 만드는 방법은 무엇입니까?

/var/lib/dpkg/status를 다시 만드는 방법은 무엇입니까?

주변의 일부 파일을 삭제했습니다 /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. 그렇게 하기 전까지는 dpkgAPT 등을 사용할 수 없습니다 . 그 외에는 시스템이 계속 작동해야 합니다.

답변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.

관련 정보