다른 모든 답변 외에도 다음과 같은 중요한 속성을 지적하고 싶습니다.
소프트 링크는 실제 참조입니다. 즉, 경로 이름이 포함 된 작은 파일입니다. 소프트 링크 해결은 응용 프로그램에 투명하게 발생합니다. 프로세스가 파일을 열면, /this/path/here
이를 가리키는 심볼릭 링크 라고 말하면 /that/other/path
전체 열기 처리 /that/other/path
는 OS에 의해 수행됩니다. 또한 /that/other/path
심볼릭 링크 자체 인 경우 OS에서도 처리됩니다. 실제로 OS는 다른 파일 (예 : 일반 파일)을 찾을 때까지 또는 많은 항목에 도달 할 때까지 SYMLOOP_MAX
(링크 참조 sysconf(3)
) OS (심볼 : 해당 시스템 호출)에서 오류를 반환하고 errno
에 ELOOP
. 따라서 순환 참조 xyz -> xyz
는 프로세스를 중단시키지 않습니다. (Linux 시스템의 경우 자세한 내용 path_resolution(7)
을 참조 하십시오.)
프로세스는 경로 이름이 심볼릭 링크인지 아닌지를 확인 lstat(2)
하고 파일 속성 (아이 노드 테이블에 저장 됨)을 통해 lchown(2)
다른 속성을 수정할 수 있습니다 ( symlink(7)
전체 내용 참조 ).
이제 권한 측면에서 심볼릭 링크에는 항상 권한 rwxrwxrwx
기호 (777 )가 있음을 알 수 있습니다. 어쨌든 실제 파일에 액세스하여 다른 권한을 무시할 수 있기 때문입니다. 반대로, 심볼릭 링크의 777은 심볼릭 링크 된 파일을 처음에 액세스 할 수없는 경우 액세스 가능한 파일로 만들지 않습니다. 예를 들어, 권한 777을 가진 파일을 가리키는 권한 777을 가진 심볼릭 링크는 파일이 "다른"(일반인)에게 액세스 할 수 없게합니다. 다시 말해서, 파일 xyz
은 파일 이 직접 액세스 가능한 경우, 즉 간접적 인 경우에만 심볼릭 링크를 통해 액세스 할 수 있습니다. 따라서 심볼릭 링크의 권한은 보안에 아무런 영향을 미치지 않습니다.
하드 링크와 심볼릭 링크 (일명 소프트 링크)의 주요 차이점 중 하나는 심볼릭 링크가 파일 시스템에서 작동하지만 하드 링크는 하나의 파일 시스템으로 제한되어 있다는 것입니다. 즉, 파티션 A의 파일은 파티션 B에서 심볼릭 링크 될 수 있지만 거기서 하드 링크 할 수는 없습니다. 이것은 하드 링크가 실제로 파일 이름과 inode 번호로 구성된 디렉토리의 항목이며 inode 번호는 파일 시스템마다 고유하다는 사실에서 분명합니다.
하드 링크라는 용어는 실제로 다소 오해의 소지가 있습니다. 심볼릭 링크의 경우 소스와 대상을 명확하게 구분할 수 있지만 (심볼릭 링크는 inode 테이블에 고유 한 항목이 있음) 하드 링크에는 해당되지 않습니다. 파일에 대한 하드 링크를 만들면 원래 항목과 하드 링크를 처음에 있던 항목과 구별 할 수 없습니다. (동일한 inode를 참조하기 때문에 소유자, 권한, 타임 스탬프 등과 같은 파일 속성을 공유합니다.) 이는 모든 디렉토리 항목이 실제로 하드 링크이며 파일을 하드 링크하면 두 번째 ( 또는 세 번째 또는 네 번째 ...) 하드 링크. 실제로, 각 inode는 해당 inode에 대한 하드 링크 수에 대한 카운터를 저장합니다.
마지막으로 일반 사용자는 디렉토리를 하드 링크하지 않을 수 있습니다. 이것은주의를 기울여 수행해야하기 때문입니다.주의를 기울이지 않는 사용자는 엄격하게 계층적인 파일 트리에주기를 도입 할 수 있습니다.이 트리는 모든 일반적인 도구 (예 :) fsck
및 OS 자체가 처리 할 준비가되어 있지 않습니다.