소프트 링크와 하드 링크
게시일: 2008/01/17 | 글쓴이: doa | 13180 번 | 프린트 | 메일


링크(Link)라는 개념은 Windows 사용자에게는 상당히 낯선 개념이다. 얼핏 보면 Windows에서 사용하는 바로 가기(Shortcut)와 비슷한 것 같지만 바로 가기는 Windows 탐색기에서 .LNK 확장자를 같는 파일에 파일이나 폴더에 대한 경로 정보를 저장해서 실행하는 것을 말한다. 반면에 링크는 Windows 탐색기와 같은 파일 관리자가 아니라 파일 시스템에서 지원하는 기능이다. 유닉스(Unix)에서는 아주 오래 전부터 보편적으로 사용되는 기능이다.

소프트 링크(Symbolic Link)

링크는 소프트 링크(Soft Link)와 하드 링크(Hard Link)로 구분된다. 보통 링크라고 하면 소프트 링크를 의미하며 기호적 링크(Simbolic Link)라고도 한다. 파일에 대한 심볼릭 링크는 윈도우의 바로 가기와 상당히 비슷하다. 차이점은 Windows의 바로 가기가 항상 .LNK라는 확장자를 같는 반면 심볼릭 링크는 원본과 같은 확장자를 같는다. 즉 nt.exe라는 파일에 대해 심볼릭 링크를 만들려면 4nt.exe라는 심볼릭 링크를 만들어야 실행이 가능하다.

이런 소프트 링크는 여러 디렉토리에서 실행되는 서로 다른 소프트웨어에서 같은 DLL 파일을 요구할 때 유용하게 사용할 수 있다. 이 경우 사용할 수 있는 방법은 지금까지는 다음과 같다.

  1. 필요한 DLL 파일을 System32 폴더에 복사
  2. 필요한 DLL 파일을 각각의 폴더에 복사


첫번째 방법은 시스템 폴더가 너저분해지기 때문에 필자는 프로그램은 수동으로 설치하며 필요한 DLL은 각 프로그램 폴더에 복사해 두곤한다. 그러나 이렇게 DLL 파일을 각각의 폴더에 복사해 두면 같은 파일이 여러 폴더에 저장되는 문제가 발생한다. 이때 유용하게 사용할 수 있는 기능이 바로 소프트 링크 기능이다.

소프트 링크는 원본 파일에 대한 링크만 파일 시스템에 저장되기 때문에 별도의 공간을 차지하지 않고 마치 여러 폴더에 존재하는 것처럼 사용할 수 있기 때문이다. 한가지 주의할 점은 Unix는 확장자에 영향을 받지 않지만 Windows는 확장자에 영향을 받기 때문에 소프트 링크를 생성할 때에는 꼭 원본 파일의 확장자와 같은 확장자를 붙여 주어야 하며, 원본이 삭제된 경우 링크를 사용할 수없는 문제가 발생한다.

하드 링크(Hard Link)

소프트 링크가 단순히 단순히 원본 파일에 대한 링크 정보만을 가지고 있다면 하드 링크는 그 이름에서 알 수 있듯이 원본 파일을 복사한다. 그러나 일반 복사와의 차이점은 일반적으로 복사한 파일은 서로의 연결성이 없기 때문에 따로 따로 동작하는 반면에 하드 링크된 파일은 정확히 같은 파일로 동작한다. 즉 A라는 파일을 B라는 파일로 하드 링크한 뒤 A라는 파일의 내용을 바꾸면 B라는 파일의 내용도 바뀌며, B라는 파일의 내용을 바꾸면 A라는 파일의 내용도 바뀐다.

파일에 대한 연결 정보와 내용을 모두 복사한 것이기 때문에 설사 원본을 지운다고 해도 하드 링크는 정상적으로 동작한다. 다만 하드 링크는 서로 다른 파티션에는 만들 수 없다. 따라서 서로 다른 드라이브에서 하드 링크를 만들려고 하면 다음과 같은 오류 메시지가 발생한다.

오류 메시지
The system cannot move the file to a different disk drive.
시스템은 파일을 다른 디스크 드라이브로 옮길 수 없습니다.


링크는 단순히 파일에만 사용할 수 있는 것은 아니다. 폴더에도 그대로 사용할 수 있다. Windows에서는 소프트 링크를 디렉토리 링크로 표현하며 하드 링크는 정션(디렉토리 교차점)으로 표현하고 있다.

파일의 소프트 링크와 하드 링크
하드 링크는 연결점만 가지고 있을 뿐 완전히 별개의 파일로 취급되기 때문에 dir 명령으로는 표시되지 않는다.
netlimit_h.exe는 nl_2010_pro_64.exe의 하드 링크이며, netlimit_s.exe는 소프트 링크이다. netlimit_s.exe는 소프트 링크이기 때문에 0 바이트밖에 되지 않지만 netlimit_h.exe는 하드 링크이기 때문에 nl_2010_pro_64.exe와 파일 크기를 비롯한 모든 점이 같다.
왼쪽은 소프트 링크에 대한 파일 속성이며, 오른쪽은 하드 링크에 대한 파일 속성이다. 그림에서 알 수 있듯이 소프트 링크는 바로 가기로 인식하며 하드 링크는 파일로 인식하는 것을 알 수 있다.


디렉토리의 소프트 링크와 하드 링크
디렉토리에 대한 소프트 링크와 하드 링크는 파일과는 다르게 표현된다. dir /al 명령으로 확인해 보면 디렉토리는 소프트 링크와 하드 링크 모두 표시된다. 소프트 링크는 SYNLINKD로 표시되며 하드 링크는 JUNCTION으로 표시된다. 파일은 내용이 바뀌면 바뀌지만 디렉토리는 디렉토리의 목록이 바뀌면 바뀌기 때문에 복사를 하지 않고 링크만 사용한다. 따라서 디렉토리의 하드 링크는 원본이 삭제되면 사용할 수 없다.
왼쪽은 소프트 링크에 대한 폴더 속성이며, 오른쪽은 하드 링크에 대한 폴더 속성이다. 그림에서 알 수 있듯이 폴더에 대한 소프트 링크는 바로 가기로 인식하며 폴더에 대한 하드 링크는 완전한 폴더로 인식하는 것을 알 수 있다.


비스타에서 심볼릭 링크 만들기 부제: mklink 사용법 비스타(Windows Vista)는 기... (13708) 2008-01-17
64 비트 운영체제의 시스템 폴더 리다이렉팅 문제(Vista) 부제1: 32 비트 프로그램에서... (8982)2008-01-17

QAOS.com에 게시된지 1년 이상된 자료와 관리자가 공개한 자료는 누구나 제한없이 읽을 수 있습니다.
그러나 QAOS.com의 자료를 퍼가는 것은 금지하고 있습니다.

이 정보가 유용하다고 생각되시면 QAOS.com과 많은 다른 사람들을 위해 퍼가기 보다는 링크로 알려주시기 바랍니다.

세상사는 이야기



RSS 구독 (익명 | 회원 | 강좌 | 포럼)
(C) 1996 ~ 2017 QAOS.com All rights reserved.