다음과 같은 구성이 있다고 가정해 보겠습니다.
- 폴더 A
- 파일 1
- 파일 2
그런 다음 아래와 같이 폴더 A에 대한 소프트 링크를 만듭니다. ln -s A B
이제 다음과 같은 결과가 나왔습니다.
- 폴더 A
- 파일 1
- 파일 2
- 폴더 B(폴더 A에 대한 심볼릭 링크(소프트 링크))
- 파일 1
- 파일 2
이제 을 변경하면 B/file1
해당 변경 사항이 에 전파됩니다 A/file1
. 그러나 다음과 같이 나타납니다. - ls -l
in을 사용할 때 B
- that B/file1
및 B/file2
are아니요소프트 링크와 대체 A/file1
무슨 A/file2
일이 일어나고 있는 걸까요?
질문:이거 진짜야? B/file1
에 대한 하드 링크 A/file1
? 이를 묻는 또 다른 방법은 다음과 같습니다. 디렉토리를 소프트 링크할 때 해당 하위 파일이 원래 디렉토리의 하위 파일에 대한 하드 링크가 됩니까? 모든 것을 소프트 링크로 만드는 방법이 있나요?
답변1
두 가지 이유 때문에 하드 링크가 아닙니다.
- ls로 표시된 소프트 링크 디렉터리에 있는 파일의 하드 링크 개수는 1입니다. 파일이 하드 링크인 경우 개수는 2개 이상이 됩니다.
- 하드 링크는 파일 시스템에 걸쳐 있을 수 없지만 소프트 링크는 가능합니다. 하드 링크를 생성하려는 경우 파일 시스템 간에 디렉터리를 소프트 링크할 수 없습니다.
실제로 보고 있는 것은 다른 경로에서 동일한 디렉터리에 액세스하는 또 다른 방법일 뿐입니다. 디렉터리에 들어가거나 그 안에 있는 파일에 대해 작업을 수행하면 그 파일은 완전히 동일한 파일입니다(방에 문을 추가해도 내용은 변경되지 않지만 들어가는 새로운 방법이 있다고 상상해 보세요).
디렉토리의 내용을 소프트 링크로 만들려면 디렉토리 자체가 아닌 디렉토리의 각 파일에 대한 소프트 링크를 만들어야 하지만 이로 인해 디렉토리 목록이 약간 혼란스러워집니다. 소스와 대상에 대해 다른 이름을 갖는 것 외에 어떤 이점이 있는지 잘 모르겠습니다.
답변2
뭔가를 섞어 놓은 것 같습니다.
심볼릭 링크: 심볼릭 링크는 시스템의 다른 경로에 대한 포인터일 뿐입니다. 경로는 존재할 수도 있고 존재하지 않을 수도 있으며 중요하지 않습니다. 또한 절대 경로일 수도 있고 상대 경로일 수도 있습니다. 심볼릭 링크는 대상 파일과 아무 관련이 없으며 단지 대상 파일을 가리킬 뿐입니다. 다른 물리적 디스크에 위치할 수도 있습니다. 그것은 a와 비교될 수 있다하이퍼링크웹 사이트상에서.
하드 링크: 하드 링크는 파일에 대한 이름 할당입니다(정확히 말하면 파일의 inode 번호). 이 관계를 이라고 합니다사정. 각 파일에는 해당 inode 번호를 참조하는 하드 링크가 하나 이상 있습니다. inode 번호는 파일에 대한 참조입니다. 따라서 최신 파일 시스템에는 파일 이름과 실제 파일이 고정적으로 할당되어 있지 않습니다.
파일에 inode를 참조하는 2개의 하드 링크가 있고 그 중 하나가 시스템 unlink()
호출을 통해 삭제되면 하드 링크만 삭제되고 파일과 inode는 변경되지 않은 채로 유지됩니다(이것이 시스템 호출의 이름이 unlink()
not 인 이유입니다 delete()
). 하드 링크 수가 0으로 줄어들면 결국 inode가 삭제되고 파일도 삭제됩니다.
그것이 이론이다.
변경하면 B/file1
변경 A/file1
되므로 변경됩니다.동일한하드 링크 참조동일한Inode 번호 참조동일한문서. 실제 디렉토리가 아닌 A
디렉토리를 가리키는 심볼릭 링크를 탐색했을 뿐입니다 .B
B