私はUbuntu 11.04、Gnome 2を使用しています。ある時点でAdobe Reader()をインストールしましたが、acroread
「ツリーの外側」(非標準の場所) - ちょうどこの実行可能ファイルで奇妙な点が見つかりました。
1.which
レポート:
$ which acroread
/media/mydisk/AdobeReader/Adobe/Reader9/bin/acroread
いいですね。システムルートとは異なるパーティションにあります/
。この場合、 のようにこれへのacroread
シンボリックリンクが必要です。それでは一度試してみましょう:$PATH
/usr/bin
locate
$ 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
さて、謎は解決しました。ご意見をお寄せいただきありがとうございます。