태그 보관물: directory-structure

directory-structure

/ 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이 시스템에 중요하지 않아야합니다. 나중에 이들은 임시 파일, 로그, 캐시 등이되어야합니다.

따라서 삭제 된 파일을 다시 만드는 방법이 있습니까?



답변

Filesystem Hierarchy Standard에 주어진대로 / var목적 을 살펴보면 다음과 같습니다.

/var가변 데이터 파일을 포함합니다. 여기에는 스풀 디렉토리 및 파일, 관리 및 로깅 데이터, 임시 및 임시 파일이 포함됩니다.

“일시적 및 임시”파일은 파일에 포함 된 것 중 하나 일뿐 입니다. “스풀 디렉토리 및 파일”과 “관리 및 로깅 데이터”도 포함합니다. 중요한 “관리 데이터”를 삭제했습니다.

계속 /var존재 하는 이유를 설명 합니다.

/var/usr읽기 전용 으로 마운트 할 수 있도록 여기에 지정되어 있습니다 . /usr설치 및 소프트웨어 유지 관리와 달리 시스템 작동 중에 쓰여진 모든 내용은에 있어야합니다 /var.

그것이 중요한 것입니다 /var: /usr소프트웨어의 추가 / 제거 / 업데이트시에만 변경되는 데이터와 달리 데이터가 변경됩니다.

추가 섹션에서는 다양한 하위 디렉토리에 대해 설명합니다 /var. 예를 들어, /var/lib삭제 한 파일이 라이브에 사용 된 위치에는 “프로그램이나 프로그램이 실행되는 동안 수정하고 하나의 특정 호스트와 관련된 데이터”로 정의 된 “응용 프로그램 또는 시스템과 관련된 상태 정보”가 있습니다.

당신은 정말 특정 파일가 무엇인지 모른 채 파일을 삭제하지 않아야합니다. 이러한 파일의 백업을하지 않는 한, 삭제 된 파일과 함께, 나는 유일한 백업 취 할 왼쪽 생각 /home, /etc등을 다시 설치합니다. 그렇게 할 때까지 dpkg(및 APT 등) 을 사용할 수 없습니다 . 그 외에는 시스템이 계속 작동해야합니다.


답변

/var/lib/dpkg/status명령을 실행한다는 의미에서 “재 작성”할 수 없으며 파일이 마술처럼 나타납니다. 아니요. 파일 백업을 사용해야하며 /var/lib디렉토리를 삭제하지 않는 방법을 배우십시오 .

sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status

이것은 당신에게 전날의 패키지 상태를 줄 것입니다. 다른 것을 깨뜨리지 말고기도를 시작하십시오.


답변

파일 /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는 적어도 dpkg직접 APT를 사용하여 패키지를 설치 한 적이있는 경우입니다 ( /var/lib/dpkg/status위의 명령 대신 int 대신 해당 파일 사용) . 그것도 삭제했다면 $(cd /usr/share/doc && ls), 대부분의 패키지는에 항목을 생성하기 때문에 대략적인 패키지 목록을 다시 작성할 수 있습니다 /usr/share/doc. 아마도 몇 가지 예외가있을 것입니다.

이 시스템의 패키지 관리에 대한 도움을 요청하지 마십시오. 시스템 핵심 파일 삭제에서 복구하는 것은 정확한 과학이 아닙니다. 백업에서 복원 할 수없는 경우 가능한 빨리 새롭고 깨끗한 시스템을 설치해야합니다.


답변

/var/lib/dpkg/available위해서 apt 데이터에서 재현 할 수 있습니다. 내가 사용 dselect하고 업데이트를 선택 하는 가장 쉬운 방법 . 업데이트 방법으로 선택한 경우에만 작동합니다. 다음과 같은 것 같습니다 dselect:

/bin/bash /usr/lib/dpkg/methods/apt/update /var/lib/dpkg apt apt

데비안 sarge 이후로 상황이 변경되었을 수 있습니다.

/var/lib/dpkg/status모든 패키지가 디렉토리에 디렉토리를 추가해야한다는 사실에 근거 하여 재 작성하는 요령이 있습니다 /usr/share/doc. http://linuxmafia.com/faq/Debian/package-database-rebuild.html의 게시물을 참조하십시오 . 필터링 된 / usr / share / doc 목록을 사용하여 설치된 패키지 목록을 만든 다음 모두 다시 설치하는 스크립트가 있습니다.


답변

글쎄, 당신이 파일을 비우고 다시 설치했을 때 처음 설치 한 것을 알고 있다고 가정하면 apt-get install long-list를 할 수 있다고 가정합니다.

apt-get을 실행할 수있는 가장 작은 패키지 세트에서 기본적 으로이 작업을 수행하는 고대 스크립트가 있습니다. 그것을 사용할 때 나는 선언되지 않은 수십 가지 종속성을보고하게되었습니다.

설치 한 모든 내용을 모르면 시스템을 다시 설치하십시오.


답변

Linux Mint 17에서 비슷한 소리 문제가 발생했습니다. 파일을 찾는 데 열심이 있었고 “관리-> 업그레이드 관리자”가 만족스럽지 않은 곳을 발견했습니다 …….

나를 위해 일한 해결책은 오류 메시지에 따라 “dpkg”라는 디렉토리를 작성하고 “status”라는 빈 파일을 작성하는 것이 었습니다.

그런 다음 Update Manager를 실행했습니다.

그것은 나를 위해 일했다 🙂


답변

‘roo’이외의 다른 사용자 계정이 있다면 그 중 하나에서 apt-get dist-upgrade를 시도 할 수 있습니다. Apt는 아카이브를 다운로드하지만 / var /에 디렉토리가 누락되어 설치를 중단합니다. 디렉토리가 표시됩니다. 그것들을 만들고 apt-get dist-upgrade를 새로 실행하십시오. 대체 계정 로그에서 루트 n으로 다시 작성하는 데 실패한 경우 여기에서 dirs를 작성한 후 apt를 다시 실행하십시오. logrotate 구성에 대한 프롬프트가 표시되고 Y n을 입력하는 몇 가지 다른 구성은 끝까지 진행 한 다음 apt dist-upgrade가 완료되면 재부팅합니다. 이제 모든 것이 정상으로 돌아 왔습니다.