아니요, 하드 링크는 완전히 다릅니다. 소프트 링크는 Windows 바로 가기에 더 가깝습니다 (중요한 차이점이 있지만 기호 링크는 하드 링크보다 Windows 바로 가기와 더 유사합니다). 하드 링크는 다른 것이며 거의 필요하지 않은 링크입니다.
다음 명령으로 소프트 링크가 생성됩니다.
ln -s foo bar
그런 다음을 실행하면 다음 ls -l
이 표시됩니다.
lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
->
수단 bar
에 대한 링크입니다 foo
. 그래서, 개방 bar
, 예를 들어, 텍스트 편집기, 실제로 별도의 파일을 엽니 다 foo
. 그러나 bar
삭제하면 바로 가기 만 삭제되며 파일에는 영향을 미치지 않습니다 foo
.
반면에 하드 링크는이 명령으로 작성됩니다.
ln foo bar
이제를 실행 ls -l
하면 파일 간의 관계가 표시되지 않습니다.
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo
그러나 이것은 매우 중요 합니다 . 실제로 동일한 파일 입니다. Unix 파일 시스템의 파일은 inode를 사용하여 저장됩니다 . inode는 기본적으로 파일 시스템이 파일 이름을 실제 하드 드라이브의 특정 위치에 매핑하는 방식입니다. 따라서 하드 링크는 대상 과 동일한 inode 를 가리키는 파일입니다 . 이것을 넣는 또 다른 방법은 모든 파일이 실제로 inode를 가리키는 하드 링크라는 것입니다. 파일에 대한 하드 링크를 만들면 파일 시스템에서 동일한 inode를 가리키는 새 포인터 (파일)가 만들어집니다. 각 inode는 여러 파일을 가리 키거나 하나를 가리 키거나 전혀 가질 수 없습니다.
이것을 더 명확하게 이해하려면 ls -i
파일과 관련된 inode를 보여주는를 사용 하십시오. 소프트 링크와 하드 링크를 만들어서 어떻게되는지 봅시다 :
ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo
이제 inode를 확인하십시오.
위에서 볼 수 있듯이, 모두 foo
와 HardLinkToFoo
SoftLinkToFoo 다른 하나 (16648036)을 가지고있는 동안 같은 아이 노드 (16648029)가 있습니다.
로 이름 foo
을 바꾸면 어떻게됩니까 mv foo bar
?
붉은 색은 소프트 링크가 끊어져서 대상을 더 이상 찾을 수 없음을 나타냅니다. 소프트 링크는 파일의 이름이 아니라 inode를 가리 키기 때문입니다. 이름을 변경하더라도 inode는 동일하게 유지되므로 하드 링크가 제대로 작동하지만 여전히 작동합니다.
요약하면, 하드 링크는 실제로 동일한 파일 의 두 가지 표현입니다 . 이들은 디스크의 동일한 섹션에 대한 포인터입니다. 소프트 링크는 바로 가기입니다. 실제와 유사하게, 하드 링크는 동일한 전화선에 대해 두 개의 다른 전화 번호와 같으며 소프트 링크는 같은 집에 두 개의 서로 다른 전화선을 갖는 것과 같습니다.