방금 파일을 생성하고 콘텐츠로 채운 곳에 작성한 프로그램을 실행했습니다. 그러나 이름 생성에 문제가 발생하여(또는 적어도 예상대로 작동하지 않음) 이제 폴더에 "존재하지 않기" 때문에 삭제할 수 없는 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 삭제 프로세스가 삭제 전에 "배후에서" 디렉터리 권한을 변경하는 경우 삭제가 작동할 수 있습니다.