Разрешение местоположения / регистрации исполняемого файла в системе?

Я на Ubuntu 11.04, Gnome 2. У меня в определенный момент был установлен Adobe Reader ( acroread ), однако «вне дерева» (в нестандартном месте) – и я только что заметил что-то странное об этом исполняемом файле.

Во-первых, в which сообщается:

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

Итак, он находится на другом разделе, чем системный root / ; в этом случае я ожидаю, что символическая ссылка на этот 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 location?! На самом деле этот файл .desktop выглядит как предварительно подготовленный значок, который запускает установщик, если вы нажмете его ?!

Итак, как получилось, which этот исполняемый файл – на другом разделе, кроме системного? Может, это мой .bashrc ?:

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

Нет, ничего нет.

Итак – как система знает, что, когда я acroread в терминале, он должен запускать /media/mydisk/.../acroread – и все же нет символической ссылки в системном пути, не упоминается в ~/.bashrc и даже никаких соответствующих файлов Gnome .desktop в корневой файловой системе?

EDIT: оболочка, которую я использую, – 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 

EDIT2: как заметил @MichaelHomer, причина, по которой оболочка может вызывать этот исполняемый файл, заключается в том, что каталог находился в $PATH :

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

Тем не менее, странная вещь сейчас – как этот каталог оказался в $PATH ? Как упоминалось ранее, конечно, не .bashrc к моему .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)... и $ 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)... и $ 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)... 

… так что теперь вопрос: как этот каталог оказался в пути?

  • Как я могу узнать, какую версию Linux я использую?
  • Что происходит, когда я открываю и читаю / proc?
  • One Solution collect form web for “Разрешение местоположения / регистрации исполняемого файла в системе?”

    Ну, я надеялся, что смогу найти ответ на этот вопрос, без grepping через всю файловую систему; но, по-видимому, это было невозможно – тем более, что это добавление к PATH по-видимому, это мое дело :)

    Итак, сначала я прошел через всю корневую файловую систему, не перекрещивая границы файловой системы ( -xdev ) и grepping в двоичном режиме ( -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 

    Как только у меня были найденные результаты, я осмотрел их визуально и обнаружил, что эта команда для grepping через 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 , в котором также добавлены дополнения к PATH и выполняются – и, видимо, я добавил (в дополнение, добавленный) каталог Adobe Reader к PATH окружения PATH .

    Ну, тайна решена – спасибо всем за их комментарии!

    Linux и Unix - лучшая ОС в мире.