하드 링크가 존재하는 이유는 무엇입니까?

하드 링크가 존재하는 이유는 무엇입니까?

하드링크가 뭔지 알아요그런데 왜 사용해야합니까? 하드 링크의 용도는 무엇입니까?

답변1

하드 링크의 가장 큰 장점은 소프트 링크에 ​​비해 크기나 속도 저하가 없다는 것입니다. 소프트 링크는 일반적인 파일 액세스 위에 추가되는 간접 계층입니다. 파일을 열 때 커널은 링크를 역참조해야 하며, 이 작업에는 약간의 시간이 걸립니다. 또한 링크는 링크 텍스트를 저장하기 위해 디스크에서 약간의 공간을 차지합니다. 이러한 처벌은 파일 시스템 구조에 내장되어 있으므로 하드 링크에는 존재하지 않습니다.

내가 아는 한, 이것을 보는 가장 좋은 방법은 다음과 같습니다.

$ ls -id .
1069765 ./
$ mkdir tmp ; cd tmp
$ ls -id ..
1069765 ../

-i옵션을 사용하면 사용할 수 ls있습니다아이노드 번호파일. 위의 예를 준비한 시스템에서는 우연히 inode 번호가 1069765인 디렉터리에 있었지만 정확한 값은 중요하지 않습니다. 이는 특정 파일/디렉토리를 식별하는 고유한 값일 뿐입니다.

이것이 의미하는 바는 하위 디렉토리로 가서 다음을 보면다른파일 시스템 항목은 ..이전에 얻은 것과 동일한 inode 번호를 갖는 이라고 합니다. 이는 ..MS-DOS 및 Windows에서 발생하는 것과 마찬가지로 쉘이 이를 해석하기 때문에 발생하지 않습니다 . Unix 파일 시스템에서는 ..실제 디렉토리 항목이 있으며 이는 이전 디렉토리에 대한 하드 링크입니다.

하드 링크는 파일 시스템의 디렉터리를 함께 연결하는 링크입니다. 옛날 옛적에 유닉스에는 하드 링크가 없었습니다. Unix의 원래 버전을 변경하기 위해 추가되었습니다.플랫 파일 시스템계층적 파일 시스템을 입력합니다.

(이에 대한 자세한 내용은 다음을 참조하세요."/"에 ".." 항목이 있는 이유는 무엇입니까?.)

Unix 시스템에서는 동일한 실행 파일이 여러 다른 명령을 구현하는 것이 일반적입니다. Linux에서는 더 이상 그렇지 않은 것 같지만 과거에 사용했던 시스템에서는 , cpmvrm모두 동일한 실행 파일이었습니다. 생각해 보면 이것이 의미가 있습니다. 볼륨 간에 파일을 이동할 때 실제로는 복사한 다음 삭제하므로 mv다른 두 명령의 기능은 이미 구현되어야 합니다. 실행 파일은 이를 호출하는 이름이 전달되므로 제공할 작업을 결정할 수 있습니다.

임베디드 리눅스에서 흔히 볼 수 있는 또 다른 예는 다음과 같습니다.바쁜 상자, 단일 실행 파일 구현많은주문하다.

대부분의 파일 시스템에서는 사용자가 디렉토리에 대한 하드 링크를 만드는 것이 허용되지 않는다는 점을 지적하고 싶습니다. .항목은 ..일반적으로 커널의 일부인 파일 시스템 코드에 의해 자동으로 관리됩니다. 실수로 디렉토리 하드 링크를 생성하고 사용하는 경우 심각한 파일 시스템 문제가 발생할 수 있기 때문에 이러한 제한이 존재합니다. 이는 소프트 링크가 동일한 위험을 안고 존재하는 많은 이유 중 하나입니다.

답변2

증분 백업을 위해 rsync와 함께 하드 링크를 매우 유용하게 사용합니다. 많은 공간을 절약하고 복구 프로세스를 매우 쉽게 만듭니다. 내 서버의 백업에는 이 방법을 사용합니다.

시간을 내어 읽어보세요이 설명.

답변3

용도가 많습니다. 저는 이를 파일 기반 잠금을 생성하는 데 사용합니다. 대부분의 다른 시스템 호출과 달리 link(2) 시스템 호출은 원자적입니다.

또 다른 용도는 하드 링크를 사용하여 시간이 지남에 따라 백업을 만들어 디스크 공간을 줄이는 rsnapshot입니다. 파일이 변경되지 않은 경우 파일의 이전 인스턴스에 하드 링크되고 변경된 파일이 다시 복사됩니다.

또한 이를 사용하여 서버의 구성 파일을 교환합니다. rm file.cfg && ln ~/tmp/file.cfg file.cfg그러면 ~/tmp/* 파일을 안전하게 삭제할 수 있습니다.

답변4

이 Wikipedia 페이지를 읽은 후 "내가 왜 그것을 사용합니까?"라는 질문이 있다면 하드 링크가 무엇인지 이해하지 못한 것입니다.

협회디스크의 블록을 가리키는 디렉터리 항목입니다. 즉, 시스템의 모든 파일에는 최소한 하나의 링크가 있습니다. 파일을 생성할 때 rm실제 시스템 호출은 unlink()디렉토리 항목을 삭제합니다. 디스크의 블록은 변경되지 않았지만 링크가 사라져 파일이 디렉터리 목록에서 사라집니다.

하드 링크를 개인적으로 사용할 수는 없지만 시스템 전체에 걸쳐 있습니다. 예를 들어:

$ ls -li /bin | grep 53119771
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bunzip2
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzcat
53119771 -rwxr-xr-x 3 root root  26292 2010-08-18 10:15 bzip2

보시다시피 bunzip2bzcatbzip동일한 inode를 사용합니다. 기본적으로 세 개의 이름을 가진 파일입니다. 너할 수 있다이 문서의 사본이 3개 있는데, 그 이유는 무엇입니까? 불필요하게 디스크 공간만 소모합니다.

관련 정보