하드 링크를 삭제하면 어떻게됩니까?


답변:


110

유닉스에서 모든 일반 파일은 하드 링크입니다. 유닉스 (및 대부분 (모두)) 파일 시스템의 하드 링크는이라는 것을 가리 킵니다 inode. (가) inode참조 카운터를 가지고 사용하면, 세번째, 네번째, 등등의 링크 제를 만들 때, 카운터는 1이다 (통상의 수법이다) 파일에 대한 하나의 "링크"를 가질 때, 카운터 (상승) 각을 증가 하나씩 시간. rm링크 를 삭제 ( )하면 카운터가 1 씩 감소 (감소)됩니다. 링크 카운터가 0에 도달하면 파일 시스템은를 제거하고 inode사용 가능한 공간을 표시합니다.

즉, 마지막 링크를 삭제하지 않는 한 파일은 유지됩니다.

Edit:마지막 링크가 제거 되더라도 파일은 유지 됩니다 . 이것은 파일에 포함 된 데이터의 보안이 다른 프로세스에 액세스 할 수 없도록하는 방법 중 하나입니다. 파일 시스템에서 데이터를 완전히 제거하는 것은 메타 데이터에 지정된대로 데이터에 0 개의 링크가 있고 프로세스에서 사용하지 않는 경우에만 수행됩니다.

IMHO는 하드 링크 (및 소프트 링크와의 차이점)를 이해하는 가장 쉬운 방법입니다.


7
또한 파일 삭제를위한 시스템 호출은 unlink()입니다.
mouviciel

1
마지막 링크가 열릴 때 파일이 열린 상황에는 적용되지 않습니다 unlink.
cjm

5
@OrangeDog는 하드 링크가 파일 시스템을 통과 할 수 없으며 /proc별도의 (가상) 파일 시스템 이기 때문에 정확하게는 아닙니다 .
CJM

2
/ proc는 또한 커널의 내부 데이터 구조를 미러링합니다 (리눅스 커널이 커널 메모리에 대한 모든 직접 액세스를 제공하지 않고 특정 데이터를 합리적으로 정의 된 형식으로 노출시키는 방법입니다). 따라서 커널이 파일이 열려 있다는 사실을 추적하고 procfs를 통해 해당 정보를 공개한다고 말하는 것이 더 정확합니다.
CVn

1
그리고 네, unlink()파일을 삭제 하라는 호출 은 1990 년대 상반기에 MS-DOS에서 C 프로그래밍으로 게임을 시작했을 때 끝이 없었습니다. :)
CVn

12

테스트는 생각보다 쉽습니다. 텍스트 파일을 만든 다음 하드 링크했습니다. 하드 링크를 삭제해도 하드 링크 된 파일은 삭제 되지 않으며 연결된 파일은 원래 위치에 남아 있습니다.


1
이것은 사실이지만 완전한 그림은 아닙니다
xenoterracide

3
핵심은 텍스트 파일을 만들면 하드 링크도 추가한다는 것입니다. * NIX 파일 시스템에서 모든 파일 (inodes)은 디렉토리 구조에 적어도 한 번 하드 링크되어야합니다.
OrangeDog

0

디스크의 모든 파일은 실제로 드라이브의 실제 데이터에 대한 포인터입니다. 여기에 이미지 설명을 입력하십시오

해당 파일에 대한 하드 링크를 만들면 하드 링크 파일은 원본 파일이 가리키는 것과 동일한 데이터를 가리 킵니다.

여기에 이미지 설명을 입력하십시오

이 예에서와 같이 a.txt는 드라이브에있는 파일의 데이터 (바이트)를 가리키고 있습니다. 하드 링크 b.txt가 만들어지면 a.txt가 가리키는 것을 가리 킵니다.

따라서 이들 중 하나를 제거하면 서로 분리 된 다른 하나에 영향을 미치지 않습니다.

그러나 두 가지를 모두 제거하면 시스템에 디스크에있는 데이터에 해당 파일을 가리키는 파일이 없다는 것을 알 수 있으므로 시스템은이를 빈 공간으로 간주하여 원할 때 덮어 씁니다.


2
특히 a 와 a를 불렀을 때 와 FILE "A.txt"동일 하다는 것을 분명히하는 것이 중요하다고 생각합니다 . 링크는 실제로 검은 색 화살표입니다. LINK "B.txt"FILELINK
roaima

예, b.txt가 하드 링크 된 파일이라는 것이 확실하지 않다고 생각했습니다 ...
ZOLDIK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.