주어진 경로에서 발견된 모든 심볼릭 링크에 대한 설명을 얻는 방법은 무엇입니까?
다음과 같은 출력이 예상됩니다.
$ linksinfo ~/.nix-profile/lib/libQt5OpenGL.so
/home is a directory
/home/nix is a directory
/home/nix/.nix-profile -> /home/nix/.nix-profile -> /nix/var/nix/profiles/default
/nix/var/nix/profiles/default/lib is a directory
/nix/var/nix/profiles/default/lib/libQt5OpenGL.so -> /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so
/nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so -> libQt5OpenGL.so.5.3.1
/nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so.5.3.1 is a file
답변1
간단한 스크립트를 만들어 보겠습니다.
#!/bin/bash
mypath=$1
while [[ "${#mypath}" -gt 1 ]]; do
file "$mypath"
mypath="$(dirname $mypath)"
done
시험:
$ ./linksinfo /usr/src/linux/kernel/../../../../bin/sh
/usr/src/linux/kernel/../../../../bin/sh: symbolic link to `bash'
/usr/src/linux/kernel/../../../../bin: directory
/usr/src/linux/kernel/../../../..: directory
/usr/src/linux/kernel/../../..: directory
/usr/src/linux/kernel/../..: directory
/usr/src/linux/kernel/..: directory
/usr/src/linux/kernel: directory
/usr/src/linux: symbolic link to `linux-3.14.14-gentoo'
/usr/src: directory
/usr: directory
편집하다
이것은 모든 경로 구성 요소를 확인/표시하지는 않지만 질문의 출력도 그렇게 하지 않습니다. 예를 들어 이후
/home/nix/.nix-profile -> /nix/var/nix/profiles/default
/nix
, 또는 중 하나는 /nix/var/
그 자체 로 링크일 수 있습니다 . 그러나 출력에서는 이 단계를 건너뛰고 확인만 수행합니다./nix/var/nix
/nix/var/nix/profiles
/nix/var/nix/profiles/default
/nix/var/nix/profiles/default/lib
/nix/var/nix/profiles/default/lib/libQt5OpenGL.so -> /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so
이번에도 출력에는 /nix/store
및 에 대한 언급이 없습니다 /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1
. 간단히 말해서, 나는 이것을 다시 생각하고 당신이 정말로 달성하고 싶은 것이 무엇인지 생각해 보는 것이 좋습니다. 어쩌면 간단 readlink [-f]
하거나 충분 할까요 realpath [-e]
?