dpkg -s
自動インストールによるプログラムによる使用
私のようなdpkg -s
それはステータスで終了して1
パッケージのいずれかがインストールされていない場合、自動化することが簡単にそれを作ります、:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg
残念ながら終了ステータスを文書化していませんが、それに依存することは合理的に安全であるべきだと思います:
-s, --status package-name...
Report status of specified package.
注意すべきことの1つは、実行しているということです。
sudo apt remove <package-name>
一部のパッケージでは必ずしもすべてのファイルがすぐに削除されるわけではありませんが(他のパッケージでは削除されますが、理由は不明ですか?)、パッケージに削除のマークを付けるだけです。
この状態では、パッケージはまだ使用可能であるように見え、ファイルはまだ存在していますが、後で削除するようにマークされています。
たとえば、次のコマンドを実行した場合:
pkg=certbot
sudo apt install -y "$pkg"
dpkg -s "$pkg"
echo $?
sudo apt remove -y "$pkg"
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
sudo apt remove --purge certbot
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
次に:
最初の2つのecho $?
出力0
、3つ目の出力のみ1
最初の出力には以下dpkg -s certbot
が含まれます。
Status: deinstall ok installed
2番目は言う:
Status: deinstall ok config-files
そして、それはパージ後にのみ消えます:
dpkg-query: package 'certbot' is not installed and no information is available
ファイル/etc/logrotate.d/certbot
はシステムにまだ存在していますが、後apt remove
にはありません--purge
。
ただし、ファイル/usr/lib/python3/dist-packages/certbot/reporter.py
はの後でもまだ存在してい--purge
ます。
私は理由を理解していないが、とhello
パッケージ秒dpkg
後apt remove
、彼はパッケージ化することを示しているが、すでにずに削除されました--purge
:
dpkg-query: package 'hello' is not installed and no information is available
ドキュメントも非常に不明確です。例:
sudo apt dselect-upgrade
削除しなかったcertbot
として、それがマークされたときdeinstall
にもかかわらず、man apt-get
ことを示していると思われます。
dselect-upgrade
従来のDebianパッケージフロントエンド、dselect(1)と組み合わせて使用されます。dselect-upgradeは、dselect(1)によって利用可能なパッケージのStatusフィールドに加えられた変更に従い、その状態を実現するために必要なアクション(古いパッケージの削除や新しいパッケージのインストールなど)を実行します。
以下も参照してください。
Ubuntu 19.10でテスト済み。
Python apt
パッケージ
と呼ばれるプリインストールされたPython 3パッケージがあります apt
Ubuntu 18.04には、Python aptインターフェースを公開するます。
パッケージがインストールされているかどうかをチェックし、インストールされていない場合にインストールするスクリプトは、python-apt APIを使用してパッケージをインストールする方法にあります。
参考のためにここにコピーを示します。
#!/usr/bin/env python
# aptinstall.py
import apt
import sys
pkg_name = "libjs-yui-doc"
cache = apt.cache.Cache()
cache.update()
cache.open()
pkg = cache[pkg_name]
if pkg.is_installed:
print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
pkg.mark_install()
try:
cache.commit()
except Exception, arg:
print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))
PATH
代わりに実行可能ファイルがあるかどうかを確認します
参照:Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?