"ln -t"는 무엇을 합니까?

"ln -t"는 무엇을 합니까?

ln -T효과 는 무엇입니까 ? 나는 플래그가 BSD 버전에는 존재하지 않고 GNU 버전에만 존재한다는 것을 알고 있으며 " 항상 일반 파일로 처리 ln됩니다"라는 문서를 읽었지만 이것이 의미하는 바는 무엇이며 왜 그렇지 않습니까? BSD 버전에도 존재하나요?lnLINK_NAME

답변1

GNU -T( ) 옵션은 스크립트에 유용할 수 있는 보안 기능을 제공합니다.--no-target-directoryln

외부 소스에서 새 이름이 제공될 수 있는 $newname파일의 새 이름을 생성 한다고 가정해 보겠습니다 .$filename

주문하다

ln -T "$filename" "$newname"

그러면 그럴 것이다실패하다if는 $newname실수로 해당 디렉토리에 이름을 생성하는 대신 이미 존재하는 디렉토리입니다 $filename(이로 인해 추가 작업이 재미있는 방식으로 실패할 수 있음).

이게 바로가기야그것은 마치

if [ ! -e "$newname" ]; then
    ln "$filename" "$newname"
else
    printf 'failed to create hard link "%s": File exists\n' "$newname" >&2
    # Further code to handle failure to create link here.
fi

마찬가지로 -t( --target-directory)는 파일의 새 이름이 다른 곳이 아닌 기존 디렉터리에 실제로 생성되도록 하는 방법을 제공합니다.

게다가 만약에지적작성자: Stephen Kitt 의견에서 대상/"링크 이름"의 파일 형식에 대한 테스트를 유틸리티 자체로 이동하면 대상이 존재 여부 테스트 및/또는 대상이 변경되는 경쟁 조건의 영향을 받을 위험을 줄일 수도 있습니다. . 또는 링크를 입력하고 실제로 생성합니다.

POSIX나 BSD -T또는 가 아닌 이유는 무엇입니까 -t? 음, GNU 도구는 일반적으로많은추가된 확장 기능은 다음과 같습니다.편리한. -T옵션은 그 중 일부 -t입니다 . ln그것들 없이는 할 수 없는 일을 실제로 할 수 없으며 기능을 추가하지도 않습니다. BSD와 같은 일부 시스템은 추가를 고려조차 하지 않았거나 추가를 고려했지만 추가 아이디어를 거부했습니다(잘 모르겠습니다.기억이 안나요openbsd-tech예를 들어, 누군가가 패치를 보내는 것을 보고 이를 메일링 리스트에 추가하는 것입니다.

관련 정보