如何在安装前列出Deb软件包的文件

时间:2020-03-05 15:28:47  来源:igfitidea点击:

在我们的系统上安装新的deb软件包之前,典型的问题是实际安装了哪些文件以及新文件位于何处。

当替换了我们不想替换的不需要的文件时,就会引发严重的情况。
因此,今天在本教程中,我将着重介绍作为系统管理员可以在安装软件包之前查看文件并确保安全的步骤。
我们将在本文中使用Ubuntu 18.04,它应可用于支持deb软件包的所有其他Linux发行版。

要列出未安装软件包的内容,我们将需要一个.deb软件包。
让我们下载一个Ubuntu软件包进行测试。

让我们以“ curl”包为例。

要下载curl:

$sudo wget http://archive.ubuntu.com/ubuntu/pool/main/c/curl/curl_7.58.0-2ubuntu3_amd64.deb
$ls

curl_7.58.0-2ubuntu3_amd64.deb DEBIAN桌面文档下载examples.desktop音乐图片公共模板视频

dpkg包装

我们可以通过'dpkg -I'来获取有关软件包的信息。
但是它不会告诉我们内容。
dpkg是基于Debian的系统的软件包管理器。

要查看内容,请对dpkg命令使用选项'--contents'或者'-c'。

$dpkg -c curl_7.58.0-2ubuntu3_amd64.deb

#或者 ##

dpkg-deb -c curl_7.58.0-2ubuntu3_amd64.deb
drwxr-xr-x root/root         0 2016-03-15 17:50 ./
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/bin/
-rwxr-xr-x root/root    223304 2016-03-15 17:50 ./usr/bin/curl
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/doc/
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/doc/curl/
-rw-r--r-- root/root     10955 2016-01-25 01:57 ./usr/share/doc/curl/copyright
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/man/
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/man/man1/
-rw-r--r-- root/root     38989 2016-03-15 17:50 ./usr/share/man/man1/curl.1.gz
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/zsh/
drwxr-xr-x root/root         0 2016-03-15 17:50 ./usr/share/zsh/vendor-completions/
-rw-r--r-- root/root     12851 2016-03-15 17:50 ./usr/share/zsh/vendor-completions/_curl
lrwxrwxrwx root/root         0 2016-03-15 17:50 ./usr/share/doc/curl/NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
lrwxrwxrwx root/root         0 2016-03-15 17:50 ./usr/share/doc/curl/changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz

在上面我们可以看到给定软件包内容的详细信息。
缺点是我们必须下载受人尊敬的.deb软件包。

要查找特定的.deb文件来自哪个软件包,请执行以下操作:

$sudo dpkg -S curl
libcurl3:amd64: /usr/share/doc/libcurl3/NEWS.Debian.gz
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/changelog.Debian.gz
bash-completion: /usr/share/bash-completion/completions/curl
libpython2.7-stdlib:amd64: /usr/lib/python2.7/macurl2path.py
libcurl3:amd64: /usr/share/doc/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4.4.0
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/copyright
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls/NEWS.Debian.gz
gnupg: /usr/lib/gnupg/gpgkeys_curl
python3-pycurl: /usr/lib/python3/dist-packages/curl
libcurl3:amd64: /usr/share/lintian/overrides/libcurl3
python3-pycurl: /usr/share/doc/python3-pycurl/copyright
libcurl3:amd64: /usr/share/doc/libcurl3/changelog.Debian.gz
libpython3.5-stdlib:amd64: /usr/lib/python3.5/macurl2path.py
python3-pycurl: /usr/share/doc/python3-pycurl/changelog.Debian.gz
libcurl3:amd64: /usr/share/doc/libcurl3/copyright
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.4
libcurl3:amd64: /usr/lib/x86_64-linux-gnu/libcurl.so.3
python3-pycurl: /usr/lib/python3/dist-packages/curl/__init__.py
python3-pycurl: /usr/lib/python3/dist-packages/pycurl.cpython-35m-x86_64-linux-gnu.so
libcurl3-gnutls:amd64: /usr/share/lintian/overrides/libcurl3-gnutls
libcurl3-gnutls:amd64: /usr/share/doc/libcurl3-gnutls
python3-pycurl: /usr/lib/python3/dist-packages/pycurl-7.43.0.egg-info
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
libcurl3-gnutls:amd64: /usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.4.0
....

使用选项-L时,我们要求dpkg通过提供已安装的软件包的软件包名称来列出其内容。

列出软件包安装的文件:

$sudo dpkg -L curl
/.
/usr
/usr/bin
/usr/bin/curl
/usr/share
/usr/share/doc
/usr/share/doc/curl
/usr/share/doc/curl/copyright
/usr/share/zsh
/usr/share/zsh/vendor-completions
/usr/share/zsh/vendor-completions/_curl
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/curl.1.gz
/usr/share/doc/curl/changelog.Debian.gz
/usr/share/doc/curl/NEWS.Debian.gz
...

使用apt-file列出文件

“ apt-file”软件包,该软件包列出了存储库中软件包的内容,并允许我们在所有可用软件包中搜索特定文件。

要安装“ apt-file”:

$sudo apt install apt-file
$sudo apt-file update

现在列出任何软件包的内容:

$sudo apt-file list

范例1:

$sudo apt-file list curl
curl: /usr/bin/curl
curl: /usr/share/doc/curl/NEWS.Debian.gz
curl: /usr/share/doc/curl/changelog.Debian.gz
curl: /usr/share/doc/curl/copyright
curl: /usr/share/man/man1/curl.1.gz
curl: /usr/share/zsh/vendor-completions/_curl

范例2:

$sudo apt-file list ssh
ssh: /usr/share/doc/ssh/NEWS.Debian.gz
ssh: /usr/share/doc/ssh/changelog.Debian.gz
ssh: /usr/share/doc/ssh/copyright
ssh: /usr/share/lintian/overrides/ssh

以下是直接浏览软件包存储库的最佳方法。

http://packages.debian.org/[distro_name]/all/[package_name]/filelist

例子:

http://packages.debian.org/wheezy/all/transmission-common/filelist

要将some_package.deb的文件提取到目录中:

$sudo mkdir some_dir
$sudo dpkg -x some_package.deb some_dir

例子:
对于“ curl”包装

$sudo mkdir curl_extracts
$sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_extracts
$tree curl_extracts
curl_extracts/
└── usr
	├── bin
	│   └── curl
	└── share
    	├── doc
    	│   └── curl
    	│   	├── changelog.Debian.gz -> ../libcurl4/changelog.Debian.gz
    	│   	├── copyright
    	│   	└── NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
    	├── man
    	│   └── man1
    	│   	└── curl.1.gz
    	└── zsh
        	└── vendor-completions
            	└── _curl
9 directories, 6 files

要将some_package.deb的控制数据(包脚本,元数据等)提取到目录中:

$sudo mkdir some_dir
$sudo dpkg -e some_package.deb some_dir

例子:
对于“ curl”包装

$sudo mkdir curl_control_data
$sudo dpkg -x curl_7.58.0-2ubuntu3_amd64.deb curl_control_data
$tree curl_control_data
curl_control_data/
├── control
└── md5sums
0 directories, 2 files

ar vx命令

GNU ar程序从存档中构建,修改和提取。
一个具有其他文件集合的单个文件,在一个结构中可以检索原始的单个文件(称为存档的成员),称为存档。

通过直接解压缩.deb文件本身来检查内容。

$sudo ar vx curl_7.58.0-2ubuntu3_amd64.deb

此命令将解压缩.deb文件并生成以下3个输出。

x - debian-binary
x - control.tar.xz
x - data.tar.xz

GNU/tar或者BSD/tar是一个归档程序,旨在存储和从称为tar文件的存档文件中提取文件。
我们可以创建tar文件或者压缩的tar文件(.tar)。
但是,有时我们需要在提取所有文件之前在屏幕上列出tar或者tar.gz文件的内容。

让我们提取第三个文件,例如:data.tar.xz以查看.deb文件的内容。

其中:

t:列出存档的内容。

v:详细列出已处理的文件(显示详细信息)。

z:通过gzip过滤归档文件,以便我们可以打开压缩(解压缩).gz tar文件。

J:通过bzip2过滤存档,用于解压缩.bz2文件。

f文件名:使用称为文件名的存档文件。

$tar -xvJf data.tar.xz
./
./usr/
./usr/bin/
./usr/bin/curl
./usr/share/
./usr/share/doc/
./usr/share/doc/curl/
./usr/share/doc/curl/copyright
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/curl.1.gz
./usr/share/zsh/
./usr/share/zsh/vendor-completions/
./usr/share/zsh/vendor-completions/_curl
./usr/share/doc/curl/NEWS.Debian.gz
./usr/share/doc/curl/changelog.Debian.gz