sudo dpkg --install some_stuff_all.deb
ファイルにパッケージをインストールしますsome_stuff_all.deb
。
sudo dpkg --remove some_stuff_all.deb
表示メッセージ:
dpkg: error: you must specify packages by their own names, not by quoting the names of the files they come in
...
Type dpkg-deb --help for help about manipulating *.deb files;
次に、個々のファイルを一覧表示します。
dpkg-deb --contents some_stuff_all.deb
.deb
ファイルにパッケージを一覧表示するには?
答え1
パッケージファイルに関する情報を取得するには:
dpkg -I some_stuff_all.deb
これにより、パッケージ:、バージョン:、依存関係:、説明:など、ファイルに関する利用可能なすべての情報が提供されます。
dpkg --help
参照オプションの概要と詳細を参照してくださいman dpkg
。これは-I
実際にはdpkg-deb
オプションですが、オプションを与えると自動的に実行されますdpkg
。そしてまた参照してください。dpkg-deb
dpkg-deb
dpkg-deb --help
man dpkg-deb
答え2
ファイルには1つのパッケージしかありません.deb
。
パッケージファイル名がある場合は、example_1.234.deb
パッケージ名もですexample
。(少なくとも一般的にそうです。誰かが理論的にファイル名を変更できます。)
dpkgを使用してパッケージを削除するには、次のものを使用する必要があります。
dpkg --remove example
まさかdpkg --remove example_1.234.deb
これは、パッケージファイルではなくインストールされたパッケージを削除しようとするためです。
答え3
パッケージ名が指定されていると仮定すると、次のオプションを使用してfoo.deb
パッケージの実際の名前(出力にリストされている他のすべてのフィールドと共に)を抽出できます。dpkg-deb -I foo.deb
dpkg-deb
-f
dpkg-deb -f foo.deb Package
-f foo.deb Package
Package
:パッケージからフィールドを抽出しますfoo.deb
。
user@user-X550CL ~/tmp % ls -l
totale 46316
-rw-rw-r-- 1 user user 47425034 ott 5 05:55 foo.deb
user@user-X550CL ~/tmp % dpkg-deb -f foo.deb Package
google-chrome-stable
dpkg-deb -f foo.deb Package
この機能を拡張すると、コマンド内で実行されるコマンド置換を使用して問題のあるパッケージを直接削除できますdpkg -r
。
sudo dpkg -r $(dpkg-deb -f foo.deb Package)
答え4
Debianベースのシステムを使用せずにこれらのツールにアクセスできない場合でも、ファイルはオープン形式を使用するため、dpkg
情報を抽出できます。deb
これは本質的にar
複数の圧縮tar
アーカイブを含むアーカイブで、そのうちの1つにはパッケージに関するすべてのメタデータ(から返されるもの(情報を取得するために独自に呼び出される))を含むcontrol.tar
ファイルが含まれています。control
dpkg -I
dpkg-deb -I
圧縮は現在またはをcontrol.tar
使用して使用できます。gzip
xz
libarchiveはbsdtar
これらすべてのアーカイブ形式(ar
、、、、 )をサポートしているためtar.gz
、tar.xz
次のことができます。
bsdtar xOf file.deb 'control.tar*' |
bsdtar xOf - ./control |
grep -Pom1 '^Package: \K.*'
最初のものは標準出力からファイルをbsdtar
抽出し、2番目の抽出器メンバーcontrol.tar
に提供します。 (ここではGNUと仮定)パッケージ名を抽出します。bsdtar
./control
grep
grep