![하드 링크와 파일의 차이점은 무엇입니까?](https://linux55.com/image/106005/%ED%95%98%EB%93%9C%20%EB%A7%81%ED%81%AC%EC%99%80%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
ㅏ하드 링크inode에 대한 포인터로 정의됩니다. ㅏ소프트 링크, 또한 ~으로 알려진심볼릭 링크, 다른 링크를 가리키는 별도의 파일로 정의되며 하드 링크의 제한이 적용되지 않습니다.
파일과 하드 링크의 차이점은 무엇입니까? 하드 링크는 inode를 가리키는데, 파일이란 무엇입니까? inode 항목 자체? 아니면 하드 링크가 있는 inode인가요?
터치를 통해 파일을 생성한다고 가정해 보겠습니다. 그런 다음 inode에 inode 항목을 만듭니다.인덱스 노드 테이블. 파일과 동일한 inode 번호를 가진 하드 링크를 만들었습니다. 그럼 새 파일을 만들었나요? 아니면 파일이 inode로 정의되어 있습니까?
답변1
매우 짧은 대답은 다음과 같습니다.
- 파일은 익명의 데이터 블록입니다.
- 하드 링크는 파일 이름입니다.
- 심볼릭 링크는 내용이 경로 이름인 특수 파일입니다.
Unix 파일 및 디렉토리 작업정확히실제 파일 및 디렉터리와 같습니다(그리고아니요좋다폴더실제 세계에서는) Unix 파일 시스템은 (개념적으로) 다음과 같이 구성됩니다.
- 파일은 이름이 없고 숫자(inode)만 있는 익명의 데이터 블록입니다.
- 디렉토리는 이름과 파일(보다 구체적으로 inode)의 매핑을 포함하는 특수 파일입니다. 디렉토리는 단지 파일이므로 디렉토리 항목이 있을 수 있습니다. 이는 재귀가 구현되는 방식입니다. 시스템, 이건아니요분명히 당시 많은 운영 체제에서는 디렉터리에 디렉터리가 포함되는 것을 허용하지 않았습니다.
- 이러한 디렉토리 항목을하드 링크
- 심볼릭 링크는 내용이 경로 이름인 또 다른 특수 유형의 파일입니다. 경로 이름은 다른 파일의 이름으로 해석됩니다.
- 다른 유형의 특수 파일은 소켓, fifo, 블록 장치, 문자 장치입니다.
이러한 비유를 염두에 두고 특히 Unix 디렉토리는 실제 디렉토리와 동일하게 작동한다는 점을 기억하십시오.아니요실제 폴더와 마찬가지로 초보자가 자주 접하는 "이상한" 여러 가지를 설명합니다. 다음과 같이 쓰기 권한이 없는 파일을 삭제할 수 있는 이유는 무엇입니까? 우선, 파일을 삭제하는 것이 아니라 파일에 대해 가능한 많은 이름 중 하나를 삭제하는 것이므로 파일이 아닌 디렉터리에 대한 쓰기 권한만 있으면 됩니다. 현실 세계와 마찬가지로.
아니면 왜 매달린 심볼릭 링크가 있을 수 있나요? 음, 심볼릭 링크에는 경로 이름만 포함됩니다. 실제로 해당 이름을 가진 파일이 있어야 한다는 것을 나타내는 것은 없습니다.
내 질문은 파일과 하드 링크의 차이점이 무엇입니까?
파일과 하드 링크의 차이는 귀하와 귀하의 이름이 포함된 전화번호부 라인의 차이와 같습니다.
하드 링크는 inode를 가리키는데, 파일이란 무엇입니까? inode 항목 자체? 아니면 하드 링크가 있는 inode인가요?
파일은 익명의 데이터 조각입니다. 그게 다야. 파일이 inode가 아니라 파일입니다.가지다색인 노드는 마치 사회보장번호가 아닌 것처럼가지다사회보장번호.
하드 링크는 파일 이름입니다. 파일 이름은 여러 개일 수 있습니다.
터치를 사용하여 파일을 생성한 다음 Inode 항목을 생성한다고 가정합니다.인덱스 노드 테이블.
예.
파일과 동일한 inode 번호를 가진 하드 링크를 만들었습니다.
아니요. 하드링크는 파일이 아니기 때문에 inode 번호가 없습니다. 파일에만 inode 번호가 있습니다.
하드 링크는 이름을 inode 번호와 연결합니다.
그럼 새 파일을 만들었나요?
예.
아니면 파일이 Inode로 정의되어 있습니까?
아니요. 파일에는 inode가 있습니다.아니요인덱스 노드.
답변2
하드 링크는 디렉토리 항목입니다. 파일의 이름이 다르거나 다른 디렉토리에 있는 경우 파일에 여러 디렉토리 항목이 있을 수 있습니다. 디렉토리 항목이 동일한 파일에 대한 다른 디렉토리 항목과 관련되어 있는 경우 해당 디렉토리 항목을 "하드 링크"라고 합니다.
inode에는 이름과 콘텐츠(콘텐츠 위치, 권한, 타임스탬프 등)가 아닌 파일의 메타데이터가 포함되어 있습니다. 각 파일에는 하나의 inode가 있습니다. (모든 파일 시스템이 "inode"라고 부를 수 있는 디스크의 명확하게 식별 가능한 공간에 메타데이터를 배치하는 것은 아니지만 이는 일반적인 아키텍처입니다.) 디렉토리 항목은 이름을 inode에 연결합니다. 여러 디렉터리 항목이 동일한 인덱스 노드에 연결될 수 있으므로 "링크"라는 용어가 사용됩니다. 이러한 링크는 "이 이름에 대해 이 inode를 사용하십시오"라고 말하지 않고 "이 이름에 대해 다른 이름을 찾으십시오"라고 말하는 "소프트 링크" 또는 "심볼릭 링크"와 반대되는 "하드 링크"라고 합니다.
파일을 방으로, 디렉토리 항목을 문으로 생각하십시오. "파일 열기 /foo/bar
"는 "복도로 가다 /foo
, 방으로 가다 bar
"라는 의미입니다. "Go to room bar
"은 실제로 "표시된 문을 열고 bar
방에 들어가다"를 의미하지만, "go to room bar
"은 같은 내용을 더 짧게 말하는 설명 없는 방법입니다. 같은 방으로 통하는 문이 두 개 이상 있을 수도 있습니다.
기존 파일( )에 대한 하드 링크를 생성하면 ln existing new
동일한 파일에 대한 두 번째 링크가 생성됩니다. 즉, 기존 파일에 연결된 새 디렉토리 항목이 생성됩니다. 일단 생성되면 두 디렉토리 항목은 동일한 상태를 갖습니다. 둘 다 "기본"도 아니고 하나도 "보조"가 아니며 동일한 파일을 가리키는 링크일 뿐입니다.
파일 자체를 삭제하지 않고도 파일에 대한 모든 링크를 제거할 수도 있습니다. 프로그램에 파일이 열려 있는 동안 파일을 삭제하면(예: 모든 디렉터리 항목 삭제) 이런 일이 발생할 수 있습니다. 파일은 파일 시스템에 남아 있으며 파일을 연 마지막 프로세스가 파일을 닫을 때만 실제로 삭제됩니다. 방과 문에 비유하자면 문이 없는 방도 여전히 공간을 차지합니다.
답변3
다른 모든 답변 외에도 다음과 같은 중요한 속성을 지적하고 싶습니다.
소프트 링크는 실제 참조입니다. 즉, 경로 이름이 포함된 작은 파일입니다. 소프트 링크 해결은 애플리케이션에 투명합니다. 프로세스가 파일을 열면 해당 파일이 /this/path/here
가리키는 심볼릭 링크라고 가정하고 /that/other/path
전체 열기 처리 /that/other/path
는 운영 체제에서 수행됩니다. 또한 /that/other/path
심볼릭 링크 자체인 경우 운영 체제도 이를 처리합니다. 실제로 운영 체제는 다른 항목(예: 일반 파일)이 발견될 때까지 또는 많은 항목에 도달할 때까지 SYMLOOP_MAX
(참조 sysconf(3)
) 기호 링크 체인을 따릅니다. 이 경우 운영 체제(보다 정확하게는 해당 시스템 호출)는 다음을 반환합니다. 오류가 발생하고 errno
로 설정되었습니다 ELOOP
. 따라서 유사한 순환 참조로 인해 xyz -> xyz
프로세스가 중단되지는 않습니다. (Linux 시스템의 경우 path_resolution(7)
자세한 내용은 참고자료를 참조하세요.)
프로세스는 를 사용하여 경로명이 심볼릭 링크인지 여부를 확인할 수 있으며 lstat(2)
다른 방법으로 파일 속성(inode 테이블에 저장됨)을 수정할 수 있습니다(전체 내용은 참고자료 참조).lchown(2)
symlink(7)
이제 권한에 관한 한 심볼릭 링크에는 항상 권한 777( rwxrwxrwx
기호 표기법)이 있다는 것을 알 수 있습니다. 어쨌든 실제 파일에 액세스하면 다른 권한을 우회할 수 있기 때문입니다. 반대로, 심볼릭 링크 파일이 처음부터 접근 가능하지 않다면, 심볼릭 링크는 그 파일에 접근 가능하도록 만들지 않을 것입니다. 예를 들어, 권한 640이 있는 파일을 가리키는 권한 777이 있는 심볼릭 링크는 "다른 사람"(공개)이 액세스할 수 없습니다. 즉, xyz
파일에 직접 액세스할 수 있는 경우에만(즉, 간접 참조 없이) 심볼릭 링크를 통해 파일에 액세스할 수 있습니다. 따라서 기호 링크의 권한은 보안에 영향을 미치지 않습니다.
하드 링크와 심볼릭 링크(소프트 링크라고도 함) 사이의 주요 차이점 중 하나는 심볼릭 링크가 파일 시스템 전체에서 작동하는 반면 하드 링크는 하나의 파일 시스템으로 제한된다는 것입니다. 즉, 파티션 A의 파일은 파티션 B에 심볼릭 링크될 수 있지만 파티션 B에서는 하드 링크될 수 없습니다. 이는 하드 링크가 실제로 파일 이름과 inode 번호로 구성된 디렉토리의 항목이고 inode 번호는 각 파일 시스템마다 고유하다는 사실에서 분명해집니다.
하드 링크라는 용어는 실제로 다소 오해의 소지가 있습니다. 기호 링크의 소스와 대상은 명확하게 구별 가능하지만(기호 링크는 inode 테이블에 자체 항목이 있음) 하드 링크의 경우는 그렇지 않습니다. 파일에 대한 하드 링크를 생성하는 경우 원래 항목과 하드 링크는 처음에 존재했던 것과 구별할 수 없습니다. (동일한 inode를 참조하기 때문에 소유자, 권한, 타임스탬프 등과 같은 파일 속성을 공유합니다.) 이는 각 디렉토리 항목이 실제로 하드 링크이고 하드 링크된 파일은 단순히 다음을 의미한다는 설명으로 이어집니다. 두 번째(또는 세 번째, 네 번째...) 하드 링크입니다. 실제로 각 인덱스 노드에는 해당 인덱스 노드에 대한 하드 링크 수를 기록하는 카운터가 저장됩니다.
마지막으로, 일반 사용자는 디렉토리를 하드링크할 수 없다는 점에 유의하십시오. 이는 매우 주의해서 수행해야 하기 때문입니다. 부주의한 사용자는 모든 일반적인 도구(예: fsck
)와 운영 체제 자체가 처리할 준비가 되어 있지 않은 엄격한 계층적 파일 트리에 루프를 도입할 수 있습니다.
답변4
Unix 초기에는 파일 내부의 파일이 특정 디스크 드라이브의 inode였습니다. 파일 이름은 파일에 액세스하는 더 친숙한 방법입니다.
하드 링크는 하나의 inode에 여러 파일 이름을 할당합니다. 파일을 만들고 두 번째 이름을 여기에 하드 링크한 다음 첫 번째 이름을 삭제할 수 있습니다. 이는 처음에 두 번째 이름으로 파일을 만드는 것과 다르지 않습니다.
실제로 프로그램이 파일을 삭제하기 위해 사용해야 하는 시스템 호출은 "unlink(2)"입니다. 성이 인덱스 노드에서 연결 해제될 때까지 데이터는 사라지지 않습니다. (그리고 inode는 어딘가의 프로세스에 의해 열리지 않습니다)
이렇게 하면 프로그램을 실행하는 동안 Linux를 더 쉽게 업그레이드할 수 있습니다. 프로세스가 실행 파일을 실행 중이고 업데이트가 발생하는 경우 프로그램 이름은 재사용되지만 이전 버전을 포함하는 inode는 여전히 존재하므로 계속 실행할 수 있습니다. 이전 버전을 실행하는 마지막 프로세스가 중지되면 이전 버전 저장소가 해제됩니다.
여러 마운트 지점이 있는 단일 파일 트리가 있는 경우 한 하드 드라이브에서 다른 하드 드라이브의 inode로 하드 링크를 만들 수 없기 때문에 소프트 링크가 발생합니다. 그래서 소프트 링크가 발명되었습니다.