获取文件的包版本

获取文件的包版本

/etc我已经删除了package 提供的文件packageA。有没有一种方法可以让我只重新安装该文件,只要我知道它在哪里以及哪个包提供它?

我在我的服务器上运行 Ubuntu 12.04 和 14.04。

答案1

首先,您可以找出哪个包提供了该文件:

dpkg -S /path/to/file

然后您可以下载该包的当前版本。

apt-get download package-name

如果由于某种原因您需要最初安装的软件包版本,则必须在 APT 登录中查找它/var/log/apt//var/log/dpkg.log*(如果它们尚未过时)。确定版本号或日期后,您可以在快照.debian.org(Debian)或发射台(乌班图)。

下载该.deb软件包后,您可以使用以下命令将其解压到临时目录中

dpkg-deb -x package_name-1.42.deb

如果你只想打印一个文件的内容,你可以使用

dpkg-deb --fsys-tarfile package_name-1.42.deb | tar xO ./path/to/file

您可以将内容复制到位,但请注意某些文件需要具有特定权限。要以正确的权限提取文件,您需要以 root 身份提取它。您可以使用dpkg-deb -x然后复制该文件:

# as root
dpkg-deb -x package_name-1.42.deb
cp -p path/to/file /path/to/file

或者您可以提取 tarball(替换sudosu或任何您用来获取 root 的方法):

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

原始文件是否能够立即正确配置是另一个问题。

相关内容