"cp -as"를 사용하여 디렉터리를 복사했는데 이제 "rm -rf"로 생성된 디렉터리가 원본 디렉터리를 삭제할 수 있으므로 걱정됩니다.

"cp -as"를 사용하여 디렉터리를 복사했는데 이제 "rm -rf"로 생성된 디렉터리가 원본 디렉터리를 삭제할 수 있으므로 걱정됩니다.

디렉토리를 복사했는데 그 안의 파일이 삭제될까봐 cp -as /media/user/dir symlinks두렵습니다.rm -rf symlinks/media/user/dir

디렉토리 구조와 심볼릭 링크만 삭제하는 안전한 방법은 무엇입니까symlinks 아니요아무거나 만지시나요 /media/user/dir?

테스트로 다음과 같이 했습니다.

$ mkdir test
$ touch test/file
$ mkdir test/dir
$ touch test/dir/file2
$ cp -as test syms
$ rm -rf syms         

이 테스트에서는 원래 디렉토리를 건드리지 않았습니다 test. 이게 완전한 테스트인가요? 항상 이런가요?

백업할 공간이 없어요/media/user/dir

답변1

원본 파일도 삭제될 것이라는 걱정 없이 심볼릭 링크가 포함된 디렉터리를 삭제할 수 있습니다.

rm이 유틸리티에 대한 POSIX 사양다음과 같이 말합니다(심볼릭 링크를 만났을 때 무슨 일이 일어나는지에 대해):

유틸리티 rm는 기호 링크를 따라 계층의 다른 부분으로 디렉토리를 이동해서는 안 되지만 링크 자체를 제거해야 합니다.

그런 다음 나중에 (이유 섹션에서):

설명에 따르면 rm기능에 대한 종속성으로 인해 유틸리티는 참조하는 파일이 아닌 심볼릭 링크 자체를 삭제합니다. 계층 구조를 unlink()사용 -r하거나 제거할 때 -R다음 기호 링크는 명시적으로 금지되어야 합니다.

GNU rm매뉴얼은 이에 대해 아무 말도 하지 않지만, 이 점에 있어서 POSIX를 위반하지 않는다고 가정해야 합니다. 다른 시스템의 매뉴얼에는 때때로 이 약속이 명시적으로 포함되어 있습니다. 이것은OpenBSD에서(FreeBSD와 NetBSD는 같은 표현을 사용합니다):

rm유틸리티는 링크에서 참조하는 파일이 아닌 기호 링크를 삭제합니다.

... 그리고AIX에서(Solaris에도 비슷한 작성 방법이 있습니다):

파일이 기호 링크인 경우 링크는 제거되지만 기호 링크가 참조하는 파일이나 디렉터리는 그대로 유지됩니다.

rm심볼릭 링크와 관련된 동작은 로컬에서 쉽게 테스트할 수 있습니다.

$ touch file
$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Feb 26 09:32 file
$ ln -s file link
$ ls -l link
lrwxr-xr-x  1 myself  wheel  4 Feb 26 09:32 link -> file
$ rm link
$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Feb 26 09:32 file

디렉토리의 기호 링크를 사용하여 유사한 연습을 수행할 수 있습니다.

답변2

제거 프로세스에 대한 자신감을 얻는 방법은 다음과 같습니다.

디렉터리, 기호 링크 및 일반 파일을 포함하는 테스트 설정(예: ./Delete_test/)을 만듭니다.
그런 다음 테스트 설정에 CD를 넣으십시오.
이제 실행 strace rm -rf ./* 2> /tmp/strace.rm하고 출력을 캡처합니다.

/tmp/strace.rmvim또는 를 사용 하여 grepfstat 및 unlink와 같은 문자열을 찾으면 및 fstatat와 같은 시스템 호출 unlinkat도 표시되어야 합니다 AT_SYMLINK_NOFOLLOW. AT_FDCWD이것은 의미한다"심볼릭 링크를 따르지 마세요"그리고 "CWD 사용";이는 심볼릭 링크의 경우 원래 디렉터리와 파일이 제거 프로세스에 참여하지 않으며 안전하다는 것을 알려줍니다.

일부 참고자료:
https://linux.die.net/man/2/unlink
https://linux.die.net/man/2/unlinkat
https://linux.die.net/man/2/fstat
https://linux.die.net/man/2/fstatat

관련 정보