Resolver a localização / registro de um executável no sistema?

1

Estou no Ubuntu 11.04, Gnome 2. Em certo momento, instalei o Adobe Reader ( acroread ), no entanto, "off-tree" (em um local não padrão) - e notei algo estranho sobre isso executável.

Primeiro, which relatórios:

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

Ok, então está em uma partição diferente da raiz do sistema / ; Neste caso, esperaria que um symlink para este acroread estivesse presente algures no $PATH , por ex. em código%. Então, vamos tentar /usr/bin :

$ 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

Estranho - nada aqui parece relacionado, exceto por locate . Lembro-me que no Gnome, é possível "registrar" um aplicativo colocando um arquivo acroread.desktop em um diretório de sistema respectivo; mas se eu verificar .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

... não há nada sobre acroread.desktop location ?! Na verdade, esse arquivo /media/mydisk parece um ícone pré-preparado, que iniciaria o instalador se você clicasse nele!

Então como é que .desktop encontra este executável - numa partição diferente da do sistema? Talvez seja meu which ?:

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

Não, nada lá.

Então - como o sistema sabe que quando digito .bashrc no terminal, ele deve rodar acroread - e ainda não há nenhum link simbólico no caminho do sistema, nenhuma menção em /media/mydisk/.../acroread , e nem mesmo qualquer arquivos relevantes do Gnome ~/.bashrc no sistema de arquivos raiz,?

EDIT: O shell que eu uso é .desktop e bash relatórios:

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

Eu também tentei isso:

$ 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

mas o type não contém muito sobre a localização:

$ 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: como @MichaelHomer observou, o motivo pelo qual o shell pode chamar esse executável é que o diretório estava no gnome-vfs.applications :

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

No entanto, o estranho agora é: como este diretório acabou em $PATH ? Como mencionado anteriormente, certamente não sendo adicionado ao meu $PATH - ou, nesse caso, em qualquer .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)...

... então a questão agora é: como este diretório acabou no caminho?

    
por sdaau 25.01.2015 / 00:03

1 resposta

1

Bem, eu esperava poder encontrar uma resposta para isso, sem passar por todo o sistema de arquivos; mas aparentemente isso era impossível - especialmente porque esta adição ao PATH é aparentemente minha execução :)

Portanto, primeiro percorri todo o sistema de arquivos raiz, certificando-me de não cruzar os limites do sistema de arquivos ( -xdev ) e aplicando o modo binário ( -ao ) para acroread ou Adobe como característica em o caminho completo para o executável - salvando os resultados em um sistema de arquivos diferente:

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

Depois de obter os resultados encontrados, inspecionei-os visualmente e descobri que esse comando para percorrer o arquivo de resultados found.txt acabaria dando a resposta:

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)

... e a resposta é:

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

Portanto, aparentemente também há um arquivo ~/.profile , onde adições ao PATH também são registradas / executadas - e aparentemente eu tinha anexado (bem, prefixado) o diretório do Adobe Reader à variável de ambiente PATH lá .

Bem, mistério resolvido - obrigado a todos por seus comentários!

    
por 25.01.2015 / 01:57