ln -T
효과 는 무엇입니까 ? 나는 플래그가 BSD 버전에는 존재하지 않고 GNU 버전에만 존재한다는 것을 알고 있으며 " 항상 일반 파일로 처리 ln
됩니다"라는 문서를 읽었지만 이것이 의미하는 바는 무엇이며 왜 그렇지 않습니까? BSD 버전에도 존재하나요?ln
LINK_NAME
답변1
GNU -T
( ) 옵션은 스크립트에 유용할 수 있는 보안 기능을 제공합니다.--no-target-directory
ln
외부 소스에서 새 이름이 제공될 수 있는 $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
예를 들어, 누군가가 패치를 보내는 것을 보고 이를 메일링 리스트에 추가하는 것입니다.