在我們的系統上安裝新的 deb 包之前的典型問題是實際安裝的文件是什麼以及新文件的位置。 當一個不需要的文件被替換而你不想替換它時,就會出現危急情況。 所以今天在本教程中,我將重點介紹您作為系統的步驟 admin 可以在安裝軟件包之前查看文件並確保您是安全的。 我們將在本文中使用 Ubuntu 18.04,它應該適用於所有其他支持 deb 包的 Linux 發行版。
要列出未安裝包的內容,我們需要一個 .deb 包。 讓我們 下載一個 Ubuntu 包 用於我們的測試。
讓我們來 ‘curl’ 包作為 example.
去下載 curl:
$ sudo wget https://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 2018-03-15 17:50 ./
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/bin/
-rwxr-xr-x root/root 223304 2018-03-15 17:50 ./usr/bin/curl
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/doc/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/doc/curl/
-rw-r--r-- root/root 10955 2018-01-25 01:57 ./usr/share/doc/curl/copyright
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/man/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/man/man1/
-rw-r--r-- root/root 38989 2018-03-15 17:50 ./usr/share/man/man1/curl.1.gz
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/zsh/
drwxr-xr-x root/root 0 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/
-rw-r--r-- root/root 12851 2018-03-15 17:50 ./usr/share/zsh/vendor-completions/_curl
lrwxrwxrwx root/root 0 2018-03-15 17:50 ./usr/share/doc/curl/NEWS.Debian.gz -> ../libcurl4/NEWS.Debian.gz
lrwxrwxrwx root/root 0 2018-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
下面是直接瀏覽包存儲庫的最佳方式。
https://packages.debian.org/[distro_name]/全部/[package_name]/文件列表
例子:
https://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 文件名:使用名為 filename 的存檔文件。
$ 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
以上都是您可以查看包的步驟,希望您發現本教程有用。 請評論您知道的其他方法並繼續閱讀即將發布的教程。