심볼릭 링크를 계속 따라가시겠습니까?

심볼릭 링크를 계속 따라가시겠습니까?

나는 종종 심볼릭 링크를 사용하지만 원본 파일을 이동한 후 심볼릭 링크를 추적하지 못했습니다. 또한 동일한 디렉토리에 있는 일부 파일을 추적하기 위해 심볼릭 링크를 사용했지만 다시 추적을 잃었습니다.

  • 어떤 변경 사항을 적용하더라도 심볼릭 링크를 추적할 수 있는 방법(도구/방법)이 있습니까? 하드 링크가 유일한 방법입니까?
  • 원본 파일과 링크가 포함된 디렉터리를 이동할 때 링크가 작동하도록 상대적인 방식으로 심볼릭 링크를 만드는 방법이 있습니까?

답변1

두 번째 질문과 관련하여 상대 경로를 사용하여 심볼릭 링크를 만든 다음 전체 디렉터리 구조를 이동하면 여전히 작동합니다. 다음 터미널 세션을 고려하십시오.

~$ mkdir test
~$ cd test/
~/test$ mkdir test2
~/test$ cd test2/
~/test/test2$ touch testfile; echo "hello, world" > testfile
~/test/test2$ cat testfile 
hello, world
~/test/test2$ cd ..
~/test$ ln -s ./test2/testfile testfileln
~/test$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
~/test$ cd ..
~$ mv test/ testfoo
~$ cd testfoo/
~/testfoo$ ls -l
total 8
drwxr-xr-x 2 xxxx xxxx 4096 2010-09-09 09:18 test2
lrwxrwxrwx 1 xxxx xxxx   16 2010-09-09 09:18 testfileln -> ./test2/testfile
/testfoo$ cat testfileln 
hello, world

첫 번째 질문의 경우, 파일의 원래 위치로 무엇을 하든 동일한 파일을 참조하는 링크를 정말로 원한다면 하드 링크가 아마도 당신이 원하는 것일 것입니다. 하드 링크는 기본적으로 동일한 인덱스 노드를 참조하는 또 다른 이름입니다. 따라서 하드 링크와 "원본 파일" 사이에는 차이가 없습니다. 그러나 파일 시스템 간에 연결해야 하는 경우 일반적으로 하드 링크가 작동하지 않으며 일반적으로 디렉터리에 대한 하드 링크를 만들 수 없습니다. 또한 특정 파일 작업을 수행할 때 몇 가지 차이점을 발견할 수 있습니다. 특히 원본 파일을 삭제해도 파일은 삭제되지 않습니다. 하드 링크는 여전히 파일을 가리키며 액세스할 수 있습니다.

답변2

readlink 명령을 사용하여 (지금은 끊어진) 링크가 원래 가리키는 것이 무엇인지 검색/검사한 다음 파일의 새 이름/위치를 가리키도록 수정할 수 있습니다. 또는 파일 이름을 바꾸고 파일에 대한 모든 링크를 검색하고 복구하는 쉘 스크립트를 통해 파일 이름을 바꿀 수 있습니다. 어느 쪽이든 다음을 얻게 됩니다.

find . -type l | while read L
do
    if readlink $L | grep -q "^$OLDNAME\$"
    then
        ln -sf $NEWNAME $L
    fi
done

그러나 계속해서 이 작업을 수행하면 심볼릭 링크를 사용해야 할 대상이 아닐 수 있습니다.

관련 정보