readlink 명령의 옵션 설명

readlink 명령의 옵션 설명

readlink누군가 다음 명령 옵션을 간단한 언어로 설명해 줄 수 있습니까?

   -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

   -m, --canonicalize-missing
      canonicalize by following every symlink in  every  component  of
      the  given  name recursively, without requirements on components
      existence

답변1

이건 설명이 필요 없을 것 같아서 모호하게 들리는 부분은 잘 모르겠습니다... 예를 들어보겠습니다.

--표준화

$ mkdir /tmp/realdir
$ mkdir /tmp/subdir
$ ln -s /tmp/realdir /tmp/subdir/link
$ cd /tmp

$ readlink -f ./subdir/link/nonexistentdir/
/tmp/realdir/nonexistentdir

$ readlink -f ./subdir/link/nonexistentfile.txt
/tmp/realdir/nonexistentfile.txt

옵션이 무엇이든 다음을 readlink수행합니다. - 상대 경로를 절대 경로로 변환 - 심볼릭 링크 이름을 실제 경로로 변환

위에서 볼 수 있듯이 를 사용하면 -f경로 readlink의 마지막 부분(여기 nonexistentfile.txt)이 존재하는지 여부는 상관하지 않습니다.

경로의 다른 부분이 존재하지 않으면 readlink아무 것도 출력되지 않으며 반환 코드는 0(오류가 발생했음을 의미)과 다릅니다. 바라보다:

$ readlink -f /tmp/fakedir/foo.txt
$ echo $?
1

--기존 표준화

같은 것을 시도하면 -e:

$ readlink -e ./subdir/link
/tmp/realdir

$ readlink -e ./subdir/link/nonexistentfile.txt
$ echo $?
1

사용 시 -e경로 구성 요소가 없으면 readlink아무것도 출력되지 않으며 반환 코드는 0과 다릅니다.

--표준화 부족

-m옵션은 반대입니다 -e. 경로의 구성요소가 존재하는지 확인하기 위한 테스트는 수행되지 않습니다.

$ readlink -m ./subdir/link/fakedir/fakefile
/tmp/realdir/fakedir/fakefile

$ ln -s /nonexistent /tmp/subdir/brokenlink

$ readlink -m ./subdir/brokenlink/foobar
/nonexistent/foobar

답변2

나를 혼란스럽게 하는 것은 왜 누군가에게 -e 및 -m 옵션이 필요합니까?

커널 소스 코드 ./scripts/kconfig/merge_config.sh에서(이 스크립트는 구성 조각 값 목록을 가져와 하나씩 병합합니다):

if [ -z "$KCONFIG_CONFIG" ]; then
    if [ "$OUTPUT" != . ]; then
        KCONFIG_CONFIG=$(readlink -m -- "$OUTPUT/.config")
    else
        KCONFIG_CONFIG=.config
    fi
fi

KCONFIG_CONFIG는 아직 존재하지 않을 수 있는 .config 파일에 대한 경로를 받습니다.

관련 정보