내가 시도한 모든 것(항상 수퍼유저 권한으로)이 실패했습니다.
# rm -rf /path/to/undeletable
rm: cannot remove ‘/path/to/undeletable’: Is a directory
# rmdir /path/to/undeletable
rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy
# lsof +D /path/to/undeletable
lsof: WARNING: can't stat(/path/to/undeletable): Permission denied
lsof 4.86
latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Use the ``-h'' option to get more help information.
슈퍼유저 권한 없이 위의 작업을 시도하면 결과는 기본적으로 동일합니다. 유일한 차이점은 lsof
명령의 초기 경고 메시지 Input/output error
가 Permission denied
.
이 디렉터리를 어떻게 삭제할 수 있나요?
답변1
# rm -rf /path/to/undeletable rm: cannot remove ‘/path/to/undeletable’: Is a directory
rm
디렉터리(삭제될 예정 )인지 파일(삭제될 예정 ) stat(2)
인지 확인하기 위해 호출됩니다 . 호출이 실패하므로(이유는 나중에 살펴보겠습니다) 오류 메시지를 설명하는 를 사용하기로 결정합니다 ./path/to/undeletable
rmdir(2)
unlink(2)
stat
rm
unlink
# rmdir /path/to/undeletable rmdir: failed to remove ‘/path/to/undeletable’: Device or resource busy
"디렉토리가 비어 있지 않습니다." 대신 "장치 또는 리소스가 사용 중입니다." 따라서 문제는 해당 디렉토리가 포함된 파일이 아닌 다른 항목에서 사용된다는 것입니다. "뭔가에 의해 사용되는" 가장 분명한 것은 그것이 마운트 지점이라는 것입니다.
# lsof +D /path/to/undeletable lsof: WARNING: can't stat(/path/to/undeletable): Permission denied
이는 stat
디렉터리 오류를 확인합니다. 루트에 권한이 없는 이유는 무엇입니까? 이는 FUSE의 제한 사항입니다. allow_other
이 옵션을 사용하여 설치하지 않으면 FUSE 파일 시스템은 FUSE 드라이버를 제공하는 프로세스와 동일한 사용자 ID를 가진 프로세스에서만 액세스할 수 있습니다. 뿌리까지도 영향을 받습니다.
따라서 루트가 아닌 사용자가 FUSE 파일 시스템을 마운트했습니다. 뭐하고 싶어?
아마도 당신은 이 디렉토리에 짜증이 나서 제거하고 싶을 것입니다. 뿌리는 이것을 할 수 있습니다.
umount /path/to/undeletable
마운트 지점을 제거하고 마운트 지점을 유지하려면 Move it 을 사용하세요
mount --move
. (리눅스에만 해당)mkdir /elsewhere/undeletable chown bob /elsewhere/undeletable mount --move /path/to/undeletable /elsewhere/undeletable mail bob -s 'I moved your mount point'
해당 파일 시스템에서 파일을 삭제하려면
su
다른 방법을 사용하여 해당 사용자로 전환하고 파일을 삭제하십시오.su bob -c 'rm -rf /path/to/undeletable'
마운트를 중단하지 않고 마운트 지점에 의해 숨겨진 파일을 삭제하려면 마운트 지점을 포함하지 않는 다른 보기를 만들고 여기에서 파일을 삭제하세요. (리눅스에만 해당)
mount --bind /path/to /mnt rm -rf /mnt/undeletable/* /mnt/undeletable/.[!.]* /mnt/undeletable/..?* umount /mnt