簡単な質問:使用できるシェルコマンド(またはGUIメソッド)はありますか?システム上のファイルへのパスを指定すると、どのパッケージにそこに配置されているかがわかりますか?ファイルが実際にパッケージから来たと仮定すると、それはそうです。
おまけの質問:システムにインストールされていないファイルの場合はどうなりますか?たとえば、ファイルを検索し、どのパッケージが提供されているかを確認できるWebサイトがありますか?
dpkg
コマンドを使用して、どのインストール済みパッケージがファイルを所有しているかを確認できます。
man dpkg
から:
-S、--search filename-search-pattern ... インストール済みパッケージからファイル名を検索します。
例:
$ dpkg -S /bin/ls
coreutils: /bin/ls
完全パスまたはファイル名のみで検索できます。
コンピューターにまだインストールされていないファイルを検索する場合は、 buntuパッケージ検索 を使用できます。
apt-file
コマンドは、コマンドラインからこれを行うことができます。ソースからパッケージをビルドするときに頻繁に使用します。システムにすでにインストールされているパッケージによって提供されるファイルの場合、 apt-cache
が別の選択肢です。
apt-file
をインストールするには、次のようにします。
Sudo apt-get install apt-file
次に、データベースを更新する必要があります。
apt-file update
そして最後に、ファイルを検索します。
$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h
ただし、はるかに使いやすい方法は、 buntuパッケージ検索 Webサイトを使用することです。特定のファイル名を「パッケージの内容を検索する」オプションがあります。
また、インストールされていないパッケージ内のファイルを検索するためのapt-fileもあります。例えば:
apt-file list packagename
buntuパッケージ Webサイトで、さまざまなUbuntuリリースに含まれるパッケージの内容を検索できます。 「 パッケージの内容を検索 」という見出しの下を見てください。
たとえば、lucid(10.04)のlibnss3.soの検索結果は次のとおりです。
つまり、どのアプリケーションではなく、どのパッケージですか。アプリケーションは、パッケージマネージャーです。 Software Center
。
dpkg
を使用:
dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs
例
% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
apt-file
を使用:
apt-file search /usr/lib/tracker/tracker-store
または可能:
apt-file search --regex /tracker-extract$
apt-file search --regex /tracker-miner-fs$
例
% apt-file search /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
またはオンライン ここ 、セクションSearch the contents of packages
で。
例
これは Alexx Rocheの優れた答え の拡張です。私はその答えを編集しようとしましたが、 拒否されました (Alexxによるものではありません)
システムにwhich
をインストールしたものを追跡しようとしていました。少し作業した後、/usr/local/bin/apt-whatprovides
を作成しました
#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
BINARY="$(realpath $(which $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"
ただし、インストールされているほとんどのTHINGには、次のものを使用できます。
apt-file search $(realpath $(which THING)) | grep 'THING$'
インストールされていないものについては、以下を使用できます。
apt-file search THING | grep '/THING$'
apt-whatprovides
スクリプトは、システム上にあるファイルとシステム上にないファイルに対して機能します。たとえば、私のシステムにはDig
がありませんでしたが、ping
がありました。
pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping
pi@raspberrypi:~ $ apt-whatprovides Dig
Searching for Dig
dnsutils: /usr/bin/Dig
epic4: /usr/share/epic4/script/Dig
epic4-help: /usr/share/epic4/help/8_Scripts/Dig
knot-dnsutils: /usr/bin/Dig
Searching for
はping
(インストール済み)の完全なパスであり、Dig
のバイナリ名のみがインストールされていないことに注意してください。これにより、検索に行く必要なくdnsutils
をインストールする必要があることがわかりました https://packages.ubuntu.com/#search_contents
システムにwhich
をインストールしたものを追跡しようとしていました。少し作業した後、apt-whatprovidesを作成しました
#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
BINARY=$(realpath $(which $@))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}
ほとんどの場合は使用できますが
apt-file search $(realpath $(which THING))|grep 'THING$'
これをしなければならない理由の1つは、すでにubuntuパッケージがあるソフトウェアをコンパイルしている場合、apt-get build-dep $PACKAGENAME
を実行できることです。 $PACKAGENAME
のコンパイルに必要なすべてのパッケージがインストールされます。