readlink -f 및 -e 옵션이 명확하게 설명되지 않았습니다.

readlink -f 및 -e 옵션이 명확하게 설명되지 않았습니다.
-f, --canonicalize
canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist
-e, --canonicalize-existing
canonicalize by following every symlink in every component of the given name recursively, all components must exist

-f 또는 -e가 무엇을 하는지 이해할 수 없나요? 문구가 전혀 명확하지 않습니다. 정식 이름은 기본적으로 가장 짧고 고유한 절대 경로입니다. 그러나 이름의 구성 요소는 무엇을 의미합니까? 하위 디렉토리를 의미합니까? 여기서 "재귀적"이란 무엇을 의미합니까? 내가 이해한 바에 따르면, 특정 정식 이름의 각 하위 디렉터리는 재귀적으로 검색됩니다. 그러나 심볼릭 링크에는 적합하지 않습니다.

다음으로, "-e" 옵션에서 모든 구성 요소가 있어야 한다는 것은 무엇을 의미합니까? 여기에 구성 요소는 무엇입니까?

누군가 간단한 예를 들어 도와줄 수 있나요? 감사해요

답변1

여기서 첫 번째 구성 요소는 경로의 요소를 나타냅니다. 예:

/home/user/.ssh => <component1>/<component2>/<component3>

1-다음과 같은 디렉토리 구조가 있다고 가정합니다.

lols
├── lol
├── lol1 -> lol
└── lol2 -> lol1

여기에 존재하지 않는 디렉터리는 lols/lol3이므로 각 명령의 출력을 비교할 수 있습니다.

readlink -f lols/lol1 : /lols/lol
readlink -e lols/lol1 : /lols/lol

경로의 모든 구성 요소가 존재하므로 여기의 출력은 동일합니다.

readlink -f lols/lol8 : lols/lol8
readlink -e lols/lol8 : <empty outpyt>

여기의 출력은 다음과 같습니다.-에프있기 때문에 결과가 표시됩니다.구성 요소존재하다적어도경로에 있습니다그리고-이자형모든 경로가 비어 있으므로 출력은 비어 있습니다.구성요소가 존재해야 합니다..

마지막은 존재하지 않는 디렉터리가 여러 개 있다는 것입니다.

readlink -f lols/lol8/lol10 : <empty output>
readlink -e lols/lol8/lol10 : <empty output>

맵 페이지에 명시된 대로 여기의 출력은 비어 있습니다. -f : 마지막 구성 요소를 제외한 모든 구성 요소가 존재해야 함 => 존중되지 않음 -o : 모든 구성 요소가 존재해야 함 => 존중되지 않음

2- 그냥 사용하지 않는 이유 ls -l :

file1이라는 파일을 생성하고 link1이라는 파일에 대한 심볼릭 링크를 생성하고 link1에서 또 다른 심볼릭 링크 link2를 생성한다고 가정합니다.

touch file1 : file1 
ln -s file1 link1 : link1 -> file1
ln -s link1 link2 : link2 -> link1

그러면 ls -l link2출력은 다음과 같습니다: link2 -> link1 사용하는 경우 readlink link2출력은 다음과 같습니다: link1 ; ls -l 과 동일하지만 사용하는 경우 readlink -f|-e link2출력은 다음을 가리킵니다.원천문서.

그래서 언제 사용하는가링크 읽기바꾸다엘에스? 중첩이 있을 때심볼릭 링크(재귀적으로 읽습니다). 파일/디렉토리가 다른 위치에 있는 경우.

그래서 더 잘 활용하고 있어요링크 읽기바꾸다엘에스오류를 피하기 위해.

답변2

이는 최종 목적지까지 두 개 이상의 홉 경로를 따르는 링크에 적합합니다. 예를 들어:

touch test_file

ln -s test_file test_link
ln -s non_existing_target dead_link

ln -s test_link link1
ln -s dead_link link2

위에서는 link1파일에 링크하는 것으로 끝나 test_link므로 동일한 결과가 나타납니다 -f. 데드 링크를 가리키면 다음이 표시됩니다.-elink2

> readlink -e link2
> readlink -f link2
/home/thanasis/temp/non_existing_target

dead_link"마지막 구성 요소를 제외한 모든 구성 요소가 있어야 합니다"라는 표현에서 "마지막 구성 요소"입니다. -f존재하지 않는 대상으로 해결하고 -e출력을 제공하지 않습니다.


man readlink추천드리는 점 참고해주세요

realpath정규화 기능에 선호되는 명령입니다.

이 예에서 realpath -m( --missing)는 동일한 출력을 제공합니다 readlink -f. 일반적으로 realpath -e이는 링크가 기존의 최종 개체 파일로 확인될 수 있는지 테스트하는 방법이며, 여기에 예상되는 오류가 반환됩니다.

> realpath -e link2
realpath: link2: No such file or directory

모든 결과는 반환 되지만 ls -l작동하지 않는 링크에 대해서는 빨간색 출력이 있을 수 있습니다. -L링크를 역참조하고 해당 대상을 표시하는 옵션도 있습니다 . 이는 사람이 읽을 수 있는 것이므로 ls스크립트 내의 링크에 관한 어떤 것도 결정하는 데 사용해서는 안 됩니다.

관련 정보