システム上の実行可能ファイルの場所/登録を解析しますか?

システム上の実行可能ファイルの場所/登録を解析しますか?

私はUbuntu 11.04、Gnome 2を使用しています。ある時点でAdobe Reader()をインストールしましたが、acroread「ツリーの外側」(非標準の場所) - ちょうどこの実行可能ファイルで奇妙な点が見つかりました。

1.whichレポート:

$ which acroread
/media/mydisk/AdobeReader/Adobe/Reader9/bin/acroread

いいですね。システムルートとは異なるパーティションにあります/。この場合、 のようにこれへのacroreadシンボリックリンクが必要です。それでは一度試してみましょう:$PATH/usr/binlocate

$ locate acroread
~/.icons/All-blacks/scalable/apps/acroread.png
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/__init__.py
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/__init__.pyc
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/script.py
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/script.pyc
/usr/share/app-install/desktop/acroread.desktop
/usr/share/app-install/icons/acroread.png
/usr/share/pyshared/orca/scripts/apps/acroread
/usr/share/pyshared/orca/scripts/apps/acroread/__init__.py
/usr/share/pyshared/orca/scripts/apps/acroread/script.py
/usr/share/scribus-trunk/icons/acroread16.png
/usr/share/scribus-trunk/icons/acroread22.png
/usr/share/scribus-trunk/icons/acroread32.png

変だ - それ以外には関連性がないようだacroread.desktop。 Gnomeは、.desktopそのシステムディレクトリにファイルを配置してアプリケーションを「登録」できることを覚えていますacroread.desktop

$ cat /usr/share/app-install/desktop/acroread.desktop
[Desktop Entry]
X-AppInstall-Package=acroread
X-AppInstall-Proprietary=true
X-AppInstall-Channel=natty-partner
X-AppInstall-LicenseUri=/usr/share/app-install/channels/natty-partner.eula
X-AppInstall-Architectures=i386,amd64
Encoding=UTF-8
Name=Adobe Reader 9
Icon=acroread.png
Terminal=false
Type=Application
Categories=Application;Office;Viewer;
StartupNotify=true

/media/mydisk...そこの場所に関する情報はありませんか? !実際、この.desktopファイルは、クリックするとインストーラが実行されるように事前に準備されたアイコンのように見えます。 !

それでは、whichこの実行可能ファイルがシステムパーティション以外のパーティションにあるのはなぜですか?たぶん私のものでしょうか.bashrc? :

$ grep 'acro\|Adobe' ~/.bashrc
$ 

いいえ、そこには何もありません。

acroreadそれでは、端末に入力すると実行する必要があることをシステムがどのように知ることができますか/media/mydisk/.../acroread?ただし、システムパスにシンボリックリンクがなく、に記載されているものがなく、ルートファイルシステムに関連するGnomeファイルも~/.bashrcありません。.desktop

編集:私が使用しているシェルはbashであり、type以下を報告します。

$ type acroread 
acroread is hashed (/media/mydisk/AdobeReader/Adobe/Reader9/bin/acroread)

私もこれを試しました:

$ while read line; do if [ -f "${line}" ]; then grep -rH 'acroread' "${line}"; fi; done < <(locate applications)
/usr/share/application-registry/gnome-vfs.applications:acroread
/usr/share/application-registry/gnome-vfs.applications: command=acroread

ただし、gnome-vfs.applications場所に関する多くの情報は含まれていません。

$ grep -A7 acroread /usr/share/application-registry/gnome-vfs.applications 
acroread
    command=acroread
    name=Adobe Acrobat Reader
    can_open_multiple_files=true
    expects_uris=false
    requires_terminal=false
    mime_types=application/pdf

applix

編集2:@MichaelHomerが指摘したように、シェルがこの実行可能ファイルを呼び出すことができる理由は、ディレクトリが次の場所にあるためです$PATH

$ for path in ${PATH//:/ }; do echo "$path" | grep 'Adobe\|acro'; done
/media/mydisk/AdobeReader/Adobe/Reader9/bin

しかし、今奇妙なことは、このディレクトリがどのように表示されたかです$PATH。前述のように、確かに私の項目に追加したり、.bashrc次の項目に追加したりすることはありませんbashrc

$ while read fnline; do if [ -f "${fnline}" ]; then echo "...(${fnline})..."; grep -rH 'acro\|Adobe' "${fnline}"; fi; done < <(locate bashrc)
...(/etc/bash.bashrc)...
...(/etc/skel/.bashrc)...
...(~/.bashrc)...
...(~/.bashrc-orig)...
...(~/.bashrc_mine)...
...(/home/aaa/.bashrc)...
...(/home/bbb/.bashrc)...
...(/usr/share/base-files/dot.bashrc)...
...(/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc)...
...(/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc)...

...今の質問は、このディレクトリがパスでどのように終わるかということです。

答え1

まあ、ファイルシステム全体を閲覧しなくてもこの質問に対する答えを見つけることができたらと思いますが、明らかにそれは不可能です。特にそれがPATH私がすることなので、もっとそうです。:)

したがって、最初にファイルシステムの境界を超えないように、ルートファイルシステム全体をgrepし(-xdev-ao実行可能ファイルのフルパスacroreadまたはAdobe

find / -xdev -type f -print0 2>/dev/null \
  | xargs -0 grep -Hao 'acroread\|Adobe....' 2>/dev/null \
  | tee /media/mydisk/found.txt

結果を見つけた後、視覚的に調べたfound.txt結果ファイルをインポートするこのコマンドが最終的に答えを提供することがわかりました。

while read tline; do \
  IFS=":"; declare -a arrIN=($tline); \
  grep -H Adobe/ "${arrIN[0]}" \
  | grep '\$PATH'; \
done < \
  <(grep Adobe/ /media/mydisk/found.txt | sort | uniq)

...正解は:

~/.profile:PATH="/media/mydisk/AdobeReader/Adobe/Reader9/bin:$PATH"

~/.profileしたがって、追加のエントリも登録/実行されるファイルがはっきりしています。明らかに、Adobe Readerディレクトリを環境変数PATHに追加しました。PATH

さて、謎は解決しました。ご意見をお寄せいただきありがとうございます。

関連情報