"." 및 '..'만 포함되어 있는데 rm이 비어 있지 않다고 말하는 디렉토리를 어떻게 삭제할 수 있습니까?

"." 및 '..'만 포함되어 있는데 rm이 비어 있지 않다고 말하는 디렉토리를 어떻게 삭제할 수 있습니까?

이 두 파일은 Office 2011의 제품이며 "Contents" 디렉터리가 삭제되는 것을 방지합니다. 어떻게 제거하나요?

sh-3.2# ls -l -a
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 14 23:40 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      1
sh-3.2# cd Contents
sh-3.2# ls -l -a
total 0
drwxrwxr-x@  3 Beef  staff   96 Aug 25  2010 .
drwx------+ 15 Beef  staff  480 Jan 14 23:32 ..

구체적으로는 위의 "."과 콘텐츠 디렉터리의 ".." 파일입니다. 저는 Mac 터미널에서 bash 쉘을 사용하고 있습니다. 뿌리를 내렸어요.

감사해요!

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# rmdir Contents
rmdir: Contents: Directory not empty
sh-3.2# rmdir -p Contents
rmdir: Contents: Directory not empty

이 디렉토리를 어떻게 제거합니까?

sh-3.2# ls -a -l
total 21496
drwx------+ 15 Beef  staff      480 Jan 14 23:32 .
drwxr-xr-x+ 19 Beef  staff      608 Jan 15 00:19 ..
-rw-r--r--@  1 Beef  staff    10244 Jan 10 10:36 .DS_Store
-rw-r--r--   1 Beef  staff        0 Dec 25 23:13 .localized
drwxrwxrwx  47 Beef  staff     1504 Jan  2 00:01 CSC119 - 1228
drwxrwxrwx   7 Beef  staff      224 Jan  1 22:50 Chris 1228
drwxrwxr-x@  3 Beef  staff       96 Aug 25  2010 Contents
drwxrwxrwx@  5 Beef  staff      160 Dec 28 12:09 Lily 1228
drwxrwxrwx  29 Beef  staff      928 Jan  3 21:48 Old Dell Laptop
lrwxr-xr-x   1 Beef  staff       29 Dec 26 02:51 Relocated Items -> /Users/Shared/Relocated Items
-rwxrwxrwx@  1 Beef  staff  1554944 Jan  8  2019 SanDisk Flashback.pdf
drwxrwxrwx   4 Beef  staff      128 Jan  8  2019 SanDiskSecureAccess
-rwxrwxrwx   1 Beef  staff  8600360 Nov  4  2016 SanDiskSecureAccessV3.01_win.exe
drwxr-xr-x@  9 Beef  staff      288 Jan 10 11:41 Scanned Docs
drwxrwxrwx   4 Beef  staff      128 Dec 19 10:04 google
sh-3.2# sudo rm -r -f Contents
rm: Contents: Directory not empty

그래도 삭제되지 않습니다.

답변1

당신의 디렉토리것 같다비어 있지만 ls출력에는 다음이 있다고 나타납니다.디렉토리의 링크 수가 2가 아닌 3이기 때문입니다(APFS 파일 시스템의 빈 디렉토리는 링크 수가 2여야 함).

이는 파일 시스템이 일관되지 않은 상태가 되었으며 fsck해당 시스템에서 실행되어야 함을 의미합니다. macOS에서는 디스크 유틸리티 애플리케이션을 통해 Disk First Aid를 실행하여 이 작업을 수행합니다. 기본 시동 디스크(적어도 기본적으로 "Macintosh HD"라고 함)에 문제가 있는 경우 복구 모드에서 이 작업을 수행해야 합니다.

만약 이것이라면나는 같은 문제에 직면했다, 그러면 그럴 것이다아마도복구 모드에서 디스크에 응급 처치를 실행하기 전에 먼저 최신 버전의 macOS(2019년 3월 이후)를 사용하고 있는지 확인하면 이 문제를 해결할 수 있습니다.

Cmd+R컴퓨터를 다시 시작한 후 클릭하여 복구 모드로 들어갑니다. 복구 모드에 들어가면 메뉴에서 디스크 유틸리티를 실행할 수 있습니다.

답변2

디렉토리 항목은 UNIX가 실제로 작은 시스템에서 실행되고 코드도 작아야 했던 1970년대 초반의 유물입니다 ....

.그래서 사람들은 및라는 이름의 디렉토리에 대한 실제 하드 링크를 만듭니다 ... 이 잘못된 생각으로 인해 빈 디렉토리에 대한 하드 링크 수가 2가 됩니다.

오늘날 이것은 말도 안되는 소리입니다. 1988년 이후 POSIX 정의는 이러한 항목이 존재할 필요가 없다는 것입니다. 그들의 행동은 모방되어야 합니다. 이는 경로 이름에 .또는 ..가 나타나면 파일 시스템이 올바른 방식으로 작동한다는 것을 의미합니다.

최신 파일 시스템에는 디렉터리에 항목이 없으며 ., ..빈 디렉터리의 하드 링크 개수는 2가 아닙니다.

ZFS는 이런 방식으로 구현되지만 잘못 작성된 프로그램이 실패하는 것을 방지하기 위해 기록 동작을 위조합니다. 따라서 ZFS는 이러한 항목이 존재하지 않는 경우에도 .and를 제공합니다...readdir()

최신 파일 시스템을 사용하는지, 과거 파일 시스템을 사용하는지에 관계없이 이러한 항목은 삭제할 수 없습니다.

이제 링크 개수는 2개입니다...

기록 파일 시스템에서 운영 체제는 일반적으로 링크 수가 2보다 큰 디렉토리를 하위 디렉토리가 있는 것으로 간주하므로 삭제할 수 없습니다.

디렉터리의 링크 수가 확장 속성 파일이 나열된 숨겨진 "속성 디렉터리"의 결과가 아닌 경우 이는 파일 시스템의 버그로 인한 결과임에 틀림없습니다.

운영 체제에서 이 프로그램을 사용하여 디렉토리를 삭제할 수 없는 경우 을 unlink실행해야 합니다.rmrootfsck

답변3

내 첫 번째 추측은 파일이 삭제되었지만 실행 중인 프로세스에 의해 열린 상태로 유지되었다는 것입니다. 사용 sudo lsof | grep Contents- 이름에 "Contents"라는 단어가 포함된 모든 열려 있는 파일의 PID를 제공해야 합니다. 다음은 헤더를 표시하는 출력의 처음 몇 줄입니다.

$ sudo lsof | head
COMMAND    PID  TID             USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd      1                  root  cwd       DIR              253,1      4096          2 /
systemd      1                  root  rtd       DIR              253,1      4096          2 /
...

디렉토리에 무언가를 열어두는 프로세스를 제거하면 해당 프로세스를 삭제할 수 있습니다.

답변4

다시 시작해 보세요. 프로세스 중 하나가 Contents삭제된 파일을 디렉터리에 아직 열어두었을 수 있습니다. 다시 시작하면 파일이 해제되고 디렉터리를 삭제할 수 있습니다.

관련 정보