/etc
패키지에서 제공하는 파일을 삭제했습니다 packageA
. 해당 파일이 어디에 있고 어떤 패키지가 이를 제공하는지 아는 한 해당 파일만 다시 설치할 수 있는 방법이 있습니까?
내 서버에서 Ubuntu 12.04 및 14.04를 실행하고 있습니다.
답변1
먼저, 어떤 패키지가 파일을 제공하는지 확인할 수 있습니다.
dpkg -S /path/to/file
그런 다음 패키지의 현재 버전을 다운로드할 수 있습니다.
apt-get download package-name
/var/log/apt/
어떤 이유로 원래 설치된 패키지 버전이 필요한 경우 APT 로그인에서 해당 버전 을 찾아야 합니다 /var/log/dpkg.log*
(아직 최신 버전이 아닌 경우). 버전 번호나 날짜를 확인한 후에는 다음을 수행할 수 있습니다.snapshot.debian.org(데비안) 또는발사대(우분투).
패키지를 다운로드한 후 .deb
다음 명령을 사용하여 임시 디렉터리에 압축을 풀 수 있습니다.
dpkg-deb -x package_name-1.42.deb
파일의 내용만 인쇄하고 싶다면 다음을 사용할 수 있습니다.
dpkg-deb --fsys-tarfile package_name-1.42.deb | tar xO ./path/to/file
콘텐츠를 제자리에 복사할 수 있지만 일부 파일에는 특정 권한이 필요하다는 점에 유의하세요. 올바른 권한으로 파일을 추출하려면 루트로 추출해야 합니다. dpkg-deb -x
그런 다음 다음을 사용하여 파일을 복사 할 수 있습니다 .
# as root
dpkg-deb -x package_name-1.42.deb
cp -p path/to/file /path/to/file
또는 tarball을 추출할 수 있습니다( 루트를 얻는 데 사용하는 방법 sudo
으로 대체).su
dpkg-deb --fsys-tarfile package_name-1.42.deb | sudo tar x -C / ./path/to/file
또는 전체 패키지를 다시 설치할 수 있습니다. 파일이 conffile인 경우(즉, 업그레이드 전반에 걸쳐 보존할 구성 파일로 표시된 경우) 수정되거나 누락된 파일을 복원하도록 dpkg에 지시해야 합니다. 다른 구성 파일에 대한 수정 사항을 보존하려고 할 수 있으므로 누락된 구성 파일을 처리하는 것이 더 쉽습니다. 따라서 파일이 수정한 conf 파일이고 원래 상태로 되돌리려는 경우 먼저 conf 파일이 존재하지 않도록 버전 이름을 바꾸십시오. 그런 다음 실행
dpkg -i --force-confmiss package_name-1.42.deb
apt-get
일회성 다운로드를 사용하고 패키지를 다시 설치할 수 있습니다 . 구성 파일을 복원하려면 apt-get
추가 옵션을 에 전달하도록 지정하십시오 dpkg
.
apt-get --reinstall -o 'DPkg::options="--force-confmiss"' install package_name
앞으로 이 문제와 다른 어려움을 피하려면 다음을 설치하십시오.관리자를 기다려주세요( apt-get install etckeeper
)에서 편집하여 /etc/etckeeper/etckeeper.conf
선호하는 지원 버전 제어 시스템을 선택한 다음 을 실행하십시오 etckeeper init
. 의 수정 사항은 /etc
버전 관리에 저장됩니다. etckeeper commit
구성 파일을 변경할 때 의미 있는 로그 메시지와 함께 실행하십시오. 그런 다음 수정 사항을 취소하려면 /etc
영향을 받은 파일의 이전 버전을 복원하면 됩니다.
답변2
짧은 대답은 '예'입니다. /etc에는 주로 구성 파일이 포함되어 있으므로 .deb 패키지를 다운로드하고, 파일을 추출하고, 해당 파일을 올바른 디렉터리에 복사할 수 있어야 합니다.
mkdir ~/temp
dpkg -x somepackage.deb ~/temp/
cp ~/temp/somefile /etc
원본 파일을 기본적으로 올바르게 구성할 수 있는지 여부는 또 다른 질문입니다.