저는 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
자, 미스터리는 해결되었습니다. 의견을 보내주신 모든 분들께 감사드립니다!