Как восстановить один файл из пакета?

19

Как я могу сделать это без переустановки остальных файлов?

Георг Шолли
источник

Ответы:

21

Скачайте пакет, например transmission-daemon, с

sudo apt-get --download-only install transmission-daemon

распаковать пакет с

mkdir ~/dummy
dpkg-deb -x /var/cache/apt/archives/transmission-daemon_*.deb ~/dummy

восстановить файл, например /etc/init.d/transmission-daemon

sudo cp ~/dummy/etc/init.d/transmission-daemon /etc/init.d

удалить каталог

rm -rf ~/dummy
enzotib
источник
2
Также следует отметить, что apt-get downloadзагружается в текущий рабочий каталог.
4
Вы можете избежать извлечения всего архива, используя конвейер, включающий dpkg-deb --fsys-tarfileи tar, например, так:dpkg-deb --fsys-tarfile "$package"*.deb | tar -x ./path/to/file
Кодзиро
1
/tmp/dummyкажется более удобным, что ~/dummyи необходимость его удалить.
Карл Рихтер
Предпочтение, apt-get downloadпоскольку apt-get --download-only installостановится, если пакет уже установлен. Как указано в ответе Камипая.
Жюльен Карсик
Для того, чтобы расширить свое присутствие на комментарии Кодзиро, я должен был смотреть на то , что значение по умолчанию nginx«S worker_processesустановок на ряде машин. Поэтому я придумал следующую команду: for f in /var/cache/apt/archives/nginx-common*; do dpkg-deb --fsys-tarfile "$f" | tar xO ./etc/nginx/nginx.conf | grep worker_processes; done.
x-yuri
12

Я знаю, что это немного устарело, но вот мое улучшение:

$ sudo apt-get download <package-name>

вместо того

$ sudo apt-get --download-only install <package-name>

У меня была ситуация, когда пакет уже был установлен (следовательно, предлагаемое решение не работало), и я хотел восстановить только один файл конфигурации, чтобы решить проблему.

ура

camypaj
источник
3
если у вас уже установлен пакет, он обычно находится в нем, /var/cache/apt/archives/и вам не нужно его загружать.
Ахмед Масуд
2
Да, но только если пакет был установлен относительно недавно, а архивы не были очищены вручную или автоматически.
Joeytwiddle