/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(替换sudo
为su
或任何您用来获取 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
原始文件是否能够立即正确配置是另一个问题。