삭제할 수 없습니다: 해당 파일이나 디렉터리가 없습니다.

삭제할 수 없습니다: 해당 파일이나 디렉터리가 없습니다.

방금 파일을 생성하고 콘텐츠로 채운 곳에 작성한 프로그램을 실행했습니다. 그러나 이름 생성에 문제가 발생하여(또는 적어도 예상대로 작동하지 않음) 이제 폴더에 "존재하지 않기" 때문에 삭제할 수 없는 4개의 파일이 있습니다.

명령의 출력은 다음과 같습니다.

ls -li:

ls: cannot access één: No such file or directory
ls: cannot access wetenschap­pen.: No such file or directory
ls: cannot access verantwoor­delijk: No such file or directory
ls: cannot access woord wordt: No such file or directory
total 0
? -????????? ? ? ? ?            ? één
? -????????? ? ? ? ?            ? woord wordt
? -????????? ? ? ? ?            ? verantwoor­delijk
? -????????? ? ? ? ?            ? wetenschap­pen.

rm -i -- *:

rm: remove regular file `één'? y
rm: cannot remove `één': No such file or directory
rm: remove regular file `woord wordt'? y
rm: cannot remove `woord wordt': No such file or directory
rm: remove regular file `verantwoor­delijk'? y
rm: cannot remove `verantwoor­delijk': No such file or directory
rm: remove regular file `wetenschap­pen.'? y
rm: cannot remove `wetenschap­pen.': No such file or directory

rm -rf folder: ("폴더"는 파일이 위치한 폴더입니다)

rm: cannot remove `folder': Directory not empty

find . -type f -delete: (Uditha Desilva의 답변)

find: cannot delete `./één': No such file or directory
find: cannot delete `./wetenschap­pen.': No such file or directory
find: cannot delete `./verantwoor­delijk': No such file or directory
find: cannot delete `./woord wordt': No such file or directory

strace -o out rm -f -- *:아웃 콘텐츠

이 파일을 어떻게 삭제할 수 있나요?
참고로 저는 루트 액세스 권한이 없으므로 루트 액세스가 필요하지 않은 옵션을 선호합니다.

답변1

UI에서 "휴지통으로 이동"으로 파일을 삭제하면 됩니다. 그런 다음 휴지통으로 이동하여 거기에서 삭제하십시오. 이 프로세스는 Linux 시스템에서 파일을 영구적으로 삭제합니다.

답변2

이 동작은 디렉터리에 실행 권한이 없기 때문에 발생합니다. 사용자는 작업을 수행할 수 없지만 stat()디렉터리 항목을 읽을 수 있습니다.

이를 방지하려면 chmod 700홈 디렉토리로 뭔가를 할 수 있습니다.

이 동작을 다시 재현하려면 임의의 디렉터리에서 chmod 600또는 를 수행할 수 있으며 chmod 400동일한 문제가 발생합니다.

$ chmod 400 folder
$ ls - ltr folder
-????????? ? ? ? ?            ? omd
-????????? ? ? ? ?            ? file5
-????????? ? ? ? ?            ? file4
-????????? ? ? ? ?            ? file3.txt
-????????? ? ? ? ?            ? file2.txt

$ chmod 700 folder
$ ls - ltr folder
-rw-rw-r-- 1 tachomi tachomi  2 Mar  2 08:53 file4
-rw-rw-r-- 1 tachomi tachomi  2 Mar  2 08:53 file5
-rw-rw-r-- 1 tachomi tachomi  0 Mar  2 08:53 omd
-rw-rw-r-- 1 tachomi tachomi  2 Mar  2 09:01 file1.txt
-rw-rw-r-- 1 tachomi tachomi  2 Mar  2 09:01 file2.txt

시도 해봐

답변3

이는 디렉토리의 파일이 아니라 디렉토리 inode 자체에 가비지를 성공적으로 쓴 것과 거의 같습니다. 하지만 한번 시도해 보세요.

find . -type f -delete

파일의 쉘 확장을 시도하지 않으므로 성공할 수도 있습니다.

편집: tachomi의 답변이 가장 가능성 있는 설명인 것 같지만 400 모드에서 디렉토리에 "cd"하거나 디렉토리에 있는 내용을 나열하는 것은 불가능하므로 다음 중 하나에도 정확히 맞지 않습니다.

$ chmod 400 test
$ ls -li test
ls: cannot access test/Pictures: Permission denied
ls: cannot access test/Music: Permission denied
ls: cannot access test/Shows: Permission denied
ls: cannot access test/TV: Permission denied
ls: cannot access test/Movies: Permission denied
total 0
? -????????? ? ? ? ?            ? Movies
? -????????? ? ? ? ?            ? Music
? -????????? ? ? ? ?            ? Pictures
? -????????? ? ? ? ?            ? Shows
? -????????? ? ? ? ?            ? TV
$ cd test
bash: cd: test: Permission denied
$ chmod 700 test
$ cd test
$ ls -li
total 0
267447 -rw-r--r-- 1 abcd abcd 0 Mar  3 19:45 Movies
267448 -rw-r--r-- 1 abcd abcd 0 Mar  3 19:45 Music
267449 -rw-r--r-- 1 abcd abcd 0 Mar  3 19:45 Pictures
267451 -rw-r--r-- 1 abcd abcd 0 Mar  3 19:45 Shows
267450 -rw-r--r-- 1 abcd abcd 0 Mar  3 19:45 TV

그러나 GUI 삭제 프로세스가 삭제 전에 "배후에서" 디렉터리 권한을 변경하는 경우 삭제가 작동할 수 있습니다.

관련 정보