파일/디렉토리 자체를 삭제하지 않고 rm 하드 링크

파일/디렉토리 자체를 삭제하지 않고 rm 하드 링크

하드 링크를 생성한다고 가정해 보겠습니다 ln x y.

링크를 만든 후 x에서 파일을 삭제하지 않고 y에서 링크를 삭제할 수 있는 방법이 있나요? y에 대해 작업을 수행했는데 x도 삭제한 것 같습니다 rm -rf. 가능하면 이 작업을 피하고 싶습니다. 하하.

답변1

$ echo 'hello' >name
$ ln name othername
$ ls -l
total 4
-rw-r--r--  2 kk  wheel  6 Jun 25 09:45 name
-rw-r--r--  2 kk  wheel  6 Jun 25 09:45 othername
$ cat othername
hello
$ rm name
$ ls -l
total 2
-rw-r--r--  1 kk  wheel  6 Jun 25 09:45 othername
$ cat othername
hello

하나의 하드 링크를 삭제하면서 다른 하드 링크도 삭제한다면 심각한 실수를 저지르는 것입니다. 이 경우 rm또는 가 사용되는 것은 중요하지 않으며 rm -rf어떤 이름이 제거되는지는 중요하지 않습니다.

하드 링크를 삭제하면 파일 이름 중 하나만 삭제됩니다. 내 생각에 rm -rf이 두 이름을 제거할 수 있는 유일한 방법은 이 두 이름과 일치하는 파일 이름 glob과 함께 사용하거나 두 이름이 모두 포함된 디렉터리를 삭제하는 것입니다.


의견을 보면 실제로 다음 항목에 대한 하드 링크를 생성하는 애플리케이션을 사용하고 있는 것으로 보입니다.목차. 특정 조건에서는 macOS HFS+ 파일 시스템에서 이것이 가능합니다. 일반적으로진짜하드 링크 디렉토리를 다루는 것은 지루하며, 그 사용은 주로 Apple의 TimeMachine 소프트웨어와 같은 것으로 제한됩니다.

관련 Stackoverflow 질문:OS X에서 디렉토리 하드 링크를 생성하는 Unix 명령은 무엇입니까?

unlink해당 질문에 대한 답변에서 언급했듯이 하드 링크된 디렉토리를 삭제 하는 rm -r대신 사용해야 합니다.rm -r콘텐츠(모든 이름으로).

또한보십시오:디렉토리 하드 링크를 강제로 생성하시겠습니까?

답변2

나는 이것이 오래된 게시물이라는 것을 알고 있지만 하드 링크는 파일에서만 작동하지만 하드 링크 옵션과 함께 복사를 사용하여 재귀 복사본을 만들 수 있으며 Mac OS에서도 작동하지만 Mac에서는 경고가 표시되지만 메시지는 무시할 수 있습니다.

cp -Ral x y

재귀를 나타내고 -R, -a속성을 나타내고, -l링크를 나타냅니다.

그 후에는 rm -rf x또는 을(를) 수행할 수 있으며 rm -rf y다른 하나는 그대로 유지됩니다.

답변3

링크는 동일한 파일을 가리키는 새로운 파일 이름입니다. 하드 링크를 만드는 것은 원본 파일의 inode를 가리키는 새 디렉토리 항목(파일 이름)을 만드는 것입니다. 이것이 파일 시스템 간에 하드 링크를 만들 수 없고 두 링크의 메타데이터(권한, xattrs 등)가 동일한 이유입니다. Linux에서는 디렉터리가 아닌 파일에 대해서만 하드 링크를 만들 수 있습니다.

디렉토리 항목 수는 inode의 링크 수로 추적됩니다. 하드 링크가 생성되면 링크 수가 증가합니다. 파일이 삭제되면 디렉토리 항목이 제거되고 링크 수가 감소됩니다. ls -l출력의 두 번째 열에서 링크 수를 확인할 수 있습니다 . 단일 디렉토리 항목(링크)을 삭제해도 다른 디렉토리 항목은 삭제되지 않습니다.

대상 파일이 포함된 동일한 디렉터리에 새 하드 링크를 생성하면 rm -rf *두 링크가 모두 삭제됩니다(링크 수가 0이 되면 파일이 사용하는 공간이 파일 시스템에서 회수됩니다).

관련 정보