[linux] 디렉토리에 대한 심볼릭 링크 제거

중요한 디렉토리에 대한 심볼릭 링크가 있습니다. 디렉토리를 유지하면서 해당 심볼릭 링크를 제거하고 싶습니다.

나는 rm다시 시도했다 rm: cannot remove 'foo'.
나는 시도 rmdir하고 돌아왔다 rmdir: failed to remove 'foo': Directory not empty
나는 다음을 통해 진행 rm -f, rm -rf그리고sudo rm -rf

그런 다음 백업을 찾기 위해 갔다.

목욕물로 아기를 버리지 않고 symlink를 제거하는 방법이 있습니까?



답변

# this works:
rm foo
# versus this, which doesn't:
rm foo/

기본적으로 디렉토리를 삭제하지 말고 파일 을 삭제하도록 지시해야합니다 . 나는 차이점 생각 과는 방식 때문에 C 라이브러리 취급 각각의 차이 존재한다.rmrmdir

어쨌든 첫 번째는 작동하지만 두 번째는 foo가 디렉토리라는 불평을해야합니다.

위와 같이 작동하지 않으면 권한을 확인하십시오. 파일을 제거하려면 포함 디렉토리에 대한 쓰기 권한이 필요합니다.


답변

확인 “연결 해제”명령을 사용하게 하지 끝에 /를 가지고

$ unlink mySymLink

unlink ()는 파일 시스템에서 이름을 삭제합니다. 해당 이름이 파일에 대한 마지막 링크이고 파일을 연 프로세스가없는 경우 파일이 삭제되고 사용중인 공간을 재사용 할 수있게됩니다.
이름이 파일에 대한 마지막 링크이지만 프로세스가 여전히 파일을 연 경우 파일을 참조하는 마지막 파일 디스크립터가 닫힐 때까지 파일은 계속 존재합니다.

올바르게 읽으면 문제가 될 수 있습니다.

이름이 심볼릭 링크를 참조하면 링크가 제거됩니다.

이름이 소켓, fifo 또는 장치를 참조하는 경우 해당 이름은 제거되지만 오브젝트가 열린 프로세스는 계속 사용할 수 있습니다.

https://linux.die.net/man/2/unlink


답변

rm은 심볼릭 링크를 제거해야합니다.

skrall@skrall-desktop:~$ mkdir bar
skrall@skrall-desktop:~$ ln -s bar foo
skrall@skrall-desktop:~$ ls -l foo
lrwxrwxrwx 1 skrall skrall 3 2008-10-16 16:22 foo -> bar
skrall@skrall-desktop:~$ rm foo
skrall@skrall-desktop:~$ ls -l foo
ls: cannot access foo: No such file or directory
skrall@skrall-desktop:~$ ls -l bar
total 0
skrall@skrall-desktop:~$


답변

사용 rm symlinkname하지만 끝에 슬래시를 포함하지 마십시오 ( 사용 하지 마십시오 🙂 rm symlinkname/. 그런 다음 심볼릭 링크를 제거 할 것인지 묻는 메시지가 표시됩니다 y.


답변

실제로 심볼릭 링크라고 가정하면,

$ rm -d symlink

그것을 알아 내야하지만 더 이상 존재하지 않지만 여기서 올바른 일을하는 다른 경우를위한 잠재 코드를 사용할 수 없기 때문에 가능합니다.


답변

rm이 심볼릭 링크를 제거 할 수없는 경우 심볼릭 링크가 포함 된 디렉토리의 권한을 확인해야합니다. 디렉토리 항목을 제거하려면 포함 디렉토리에 대한 쓰기 권한이 필요합니다.


답변

설정이 다음과 같다고 가정하면 아무런 문제없이 ln -s /mnt/bar ~/foo할 수 있어야합니다 rm foo. 당신이 할 수없는 경우, 당신은의 소유자이고 foo파일을 작성 / 실행 권한 이 있는지 확인하십시오 . 재귀 적으로 수행하지 않는 한 제거 foo는 터치 bar하지 않습니다 .