이런 스크립트가 있어요
ln /myfile /dev/${uniquename}/myfile
/dev/somename/myfile
링크 수를 줄이기 위해 링크를 제거하고 싶습니다 .
어떻게 해야 하나요?
답변1
요약하자면... rm
필요하지 않은 파일 이름( 을 사용하여)을 제거하세요.
위의 명령이 수행하는 작업인 하드 링크를 생성하면 동일한 저장 영역을 가리키는 두 개의 이름이 생성됩니다. 다른 이름이나 저장 공간에 영향을 주지 않고 이름 중 하나를 삭제할 수 있습니다. 저장 영역은 성이 삭제된 경우에만 해제됩니다.
- 를 사용하여 생성된 소프트 링크 와 비교해 보면 ln -s
링크는 저장소에 대한 포인터가 아니라 원래 이름에 대한 포인터라는 점에서 다릅니다. 원본 이름의 파일을 삭제하면 소프트 링크가 삭제된 콘텐츠를 가리키므로 링크는 여전히 존재하지만 끊어집니다.
답변2
답변3
무슨 뜻인지 잘 모르겠지만 스크립트가 /myfile
하드 링크를 생성 /dev/…/myfile
한 다음 후자를 삭제하려는 것 같습니다.
이것이 맞다면 링크를 연결한 다음 링크를 제거하는 대신 파일을 직접 이동하여 두 명령(ln 및 rm) 대신 단일 명령(mv)으로 동일한 결과를 생성할 수 있습니다.
mv /dev/…/myfile /
답변4
대부분의 기존 답변은 rm
파일을 삭제하지 않기 때문에 완전히 정확합니다. 링크를 삭제하고 파일에 대한 마지막 링크가 삭제되고 마지막으로 열린 파일 설명자가 닫히면 파일도 삭제됩니다. ).
그러나 알아야 할 또 다른 유틸리티인 가 있습니다 unlink
. 이 유틸리티에는 옵션이 없으며 rm
항상 암시적인 -f
옵션이 있습니다(일종이지만 파일이 누락되면 실패합니다). 좋은 점은 적어도 이론적으로는 대시로 시작하는 파일을 삭제할 수 있다는 것입니다.
unlink
...Linux 시스템을 사용하지 않는 한 GNU가 명령줄 옵션 지원을 추가하여 유틸리티를 무력화시키기 때문에 이 작업을 수행할 수 없습니다 ! 따라서 Linux 시스템이나 GNU coreutils를 사용하는 다른 시스템에서 이름이 지정된 파일은 unlink -t
삭제되지 않습니다 .-t
(예, 저는 이것이 효과가 있다는 rm -- -t
것을 알고 있습니다 unlink -- -t
. 이에 대해 언급할 필요가 없습니다.)