[Linux] 하드링크와 심볼릭링크(ln)

하드링크와 심볼릭링크(ln)

하드링크와 심볼릭링크는 링크를 만들때 사용한다.

하드링크 예제
ex. ln file link
ln 원본파일명 하드링크파일명


심볼릭링크 예제
ex. ln -s file link
ln -s 원본파일명 하드링크파일명


링크에대해서 알기위해 'innode' 라는 리눅스의 파일시스템에서 사용하는 자료구조를 알 필요가 있다.
모든 파일과 디렉터리는 한개씩 inode를 가지고 있으며 여기에는 해당 파일의 허가권, 소유권, 파일의 실제 위치 등 중요한 정보들이 들어있다. inode가 모여 있는 공간을 inode block 이라고 한다. inode block이 차지하는 공간은 매우 작으며, 실제 데이터가 저장되는 block이 디스크의 대부분을 차지한다. inode는 데이터의 우편번호 역할을 한다고 볼 수 있다.

하드링크란?
월래 파일의 데이터에 대한 또 다른 접근경로이다. 하드링크는 원본파일의 innode를 직접적으로 가리키게 되는데 그래서 원본파일이 삭제 되더라도 데이터를 남아있게된다. 
즉,
하드링크 -> 파일시스템 데이터 <- 원본파일 와 같이 하드링크는 파일시스템 데이터를 가리킨다

심볼릭링크란?
윈도우의 바로가기 아이콘과 매우 흡사하다. 심볼릭링크는 원본 파일이 삭제될경우 링크대상이 사라져서 사용할 수 없게된다. 이를 링크가 깨졌다라고 표현한다.
즉,
심볼릭링크 -> 원본파일 -> 파일시스템 데이터 와 같이 심볼릭링크는 원본파일을 가리킨다.

하드링크와 심볼릭링크의 차이
하드링크에는 2가지 제약조건이 있다.
1. 파일시스템 외부에 있는 파일을 참조 할 수 없다. 즉 하드링크는 같은 디스크 파티션에 있는 파일이 아니면 참조할 수 없다.
2. 디렉토리는 링크 할 수 없다.
위의 조건이 있을경우 하드링크가 아닌 심볼릭링크를 사용해야한다.