ラベル情報を作成するとき名前を変更する、私が見つけようとしているパッケージrename
コマンドがインストールされました。私はいつもdpkg -S
のように走った。この問題):
$ which rename
/usr/bin/rename
$ dpkg -S $(!!)
dpkg-query: no path found matching pattern /usr/bin/rename
私は通常、コマンドを手動でインストールするのではなく、/usr/bin
アクセス権を持つ別のコンピュータにrename
インストールします。最初の疑いは、このコマンドが一部のパッケージのインストール後の手順でコピーされたことです。
その後、1つを作成し、コマンドが実際にリンクであることをls -l /usr/bin/rename
知りました。 link target()をrename
試しましたが、パッケージ名も指定されていません。dpkg -S
/etc/alternatives/rename
dpkg -S /etc/alternatives/rename
追加の検索結果、このリンクチェーンの実際の実行可能ターゲットは/usr/bin/prename
次のとおりです。dpkg -S
フォローしないシンボリックリンクの動作に関するバグレポート。レポートは2003年に作成されたもので、シンボリックリンクを追跡するオプションが見つからず、dpkg
問題が解決しないようです。
コマンドがシンボリックリンクの場合、「実際の」実行可能ファイルを含むパッケージを簡単に見つけることができますか?
答え1
readlink
印刷リンクを使用して場所を指すことができます。オプションのない引数はreadlink
リンクでなければならず、ファイルに渡すと何も印刷されません。-f
リンクに再帰的に従うcoreutilsパッケージのオプションreadlink
そして引数がすでにファイルの場合でも、ファイル名が印刷されます。
これにより(-n
出力の末尾に改行文字が表示されないreadlink
):
dpkg -S "$(readlink -fn "$(which rename)")"
あなたは答えを得るでしょう:
perl: /usr/bin/prename
この場合、フォローするリンクがはっきりと表示されますが、prename
これが本当であるという保証はありません(たとえば、リンクがrename
$ PATHにないディレクトリの実行可能ファイルを指している場合など)。
realpath
@011cが示すように、すでにインストールされている場合は代替として使用できます。readlink -f