-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
. 데드 링크를 가리키면 다음이 표시됩니다.-e
link2
> 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
스크립트 내의 링크에 관한 어떤 것도 결정하는 데 사용해서는 안 됩니다.