OS 및 스토리지/운영체제

[링크] 하드링크/소프트링크의 개념과 사용 방법

Cloud Engineer 2021. 8. 29. 14:36

개요

Windows에서 특정 실행 파일을 바탕화면에 바로가기로 만드는 것과 같이 리눅스에서도 링크를 통해 특정 파일에 대한 바로가기를 만들어야되는 상황이 발생할 수 있습니다. Linux에서 Windows의 바로가기와 같은 기능을 하는게 링크(정확히 말하면 소프트링크)입니다. 리눅스를 사용하다보면 이러한 링크라는 개념을 자주 맞닥드리게 되는데요. 본 포스팅에서는 리눅스 운영자가 알고 있어야 할 링크의 개념과 하드링크와 소프트링크가 차이가 무엇이며, 사용하는 방법에 대해 알아보겠습니다.

아이노드 : 파일의 메타데이터를 담고있는 자료구조

본격적으로 링크에 대한 개념을 알아보기에 앞서 아이노드라는 개념에 대해 알아보겠습니다. Linux에 구성된 파일시스템 내에 모든 파일은 고유한 아이노드에 파일에 대한 메타데이터를 담고 있고 있습니다.

아이노드 개념

  • 정규 파일 및 디렉터리 정보 등 파일시스템에 대한 정보를 담고 있는 자료구조
  • 메타 데이터를 소유 : 소유자 그룹, 접근 모드(읽기, 쓰기, 실행 권한), 파일 형태, 아이노드 숫자(inode number) 등
    • 단, 파일 이름은 가지고 있지 않음을 유의!
  • 파일시스템 내의 파일들은 고유한 아이노드 숫자를 통해 식별 가능

초기에 리눅스를 구성 중에 파일 시스템을 생성할 때, 일반적으로 약 1%의 공간을 아이노드에 할당합니다. 따라서, 파일시스템이 가질 수 있는 파일의 최대 개수도 해당 공간의 크기만큼 생성이 가능합니다.

하드링크와 소프트링크의 차이

링크 이름 설명
하드링크 동일한 파일인데, 이름만 다름 (원본 파일을 삭제하더라도, 하드링크 파일에 아무런 영향이 없음)
소프트링크 특정 파일을 가리키는 파일 (원본 파일을 삭제하면, 소프트링크 파일의 링크가 끊어짐)

정의만 봤을 때는 직관적으로 이해가 되지 않을 수 있으니 아래 그림을 보면서 설명을 드리겠습니다.

하드 링크의 소프트 링크의 차이

즉, 하드 링크는 원본 파일과 동일한 아이노드를 가리키고 있기 때문에 파일 이름만 다르고 동일한 파일이라고 할 수 있습니다. 

링크 작성

링크는 ln이라는 명령어(link)를 통해 링크 파일을 생성할 수 있습니다. 아래 예제를 통해 어떻게 링크를 생성할 수 있는지 알아보겠습니다. 먼저 링크로 연결할 파일을 임의로 생성하여 실습 환경을 구성하겠습니다.

# ln 실습을 위한 원본 파일 생성
$ ln pwd
/home/tmp_user/tmp/

$ ls -alrt >> sample

$ cat sample  
total 0
drwxr-xr-x  6 tmp_user  staff  192  2  7 20:55 ..
-rw-r--r--  1 tmp_user  staff    0  2  7 20:55 sample
drwxr-xr-x  3 tmp_user  staff   96  2  7 20:55 .

 

주의사항!

소프트링크와 하드링크 파일을 생성할 때 source 파일과 destination 파일을 반드시 절대 경로로 지정해주어야 합니다!

 

이제 sample이라는 파일을 /home/tmp_user라는 path에 소프트링크/하드링크로 연결해보겠습니다.

소프트링크

# sample 파일을 가리킬 소프트링크 생성 (생성 경로: /home/tmp_user)
$ ln -s /home/tmp_user/tmp/sample /home/tmp_user

# 소프트링크 파일 확인
$ ls -alrt /home/tmp_user
total 16
drwx------@ 32 tmp_user  staff  1024  2  6 18:06 ..
drwxr-xr-x   3 tmp_user  staff    96  2  7 20:55 tmp
lrwxr-xr-x   1 tmp_user  staff     6  2  7 20:59 sample -> /home/tmp_user/tmp/sample
drwxr-xr-x   7 tmp_user  staff   224  2  7 20:59 .

# 파일에 대한 정보 확인
$ file /home/tmp_user/sample
sample: ASCII text

# 파일 내용 확인
$ cat sample
total 0
drwxr-xr-x  6 tmp_user  staff  192  2  7 20:55 ..
-rw-r--r--  1 tmp_user  staff    0  2  7 20:55 sample
drwxr-xr-x  3 tmp_user  staff   96  2  7 20:55 .

# 만약 아래와 같은 에러 메세지와 함께 파일 내용 확인이 불가하다면 소프트링크 경로를 상대경로가 아닌, 절대경로로 입력하시면 해결됩니다.
cat: sample: Too many levels of symbolic links

하드링크

# sample 파일을 가리킬 하드링크 생성 (생성 경로: /home/tmp_user)
$ ln /home/tmp_user/tmp/sample /home/tmp_user

# 하드링크 파일 확인
$ ls -alrt /home/tmp_user
total 16
drwx------@ 32 tmp_user  staff  1024  2  6 18:06 ..
drwxr-xr-x   3 tmp_user  staff    96  2  7 20:55 tmp
-rw-r--r--   2 tmp_user  staff   167  2  7 20:55 sample
drwxr-xr-x   7 tmp_user  staff   224  2  7 20:59 .

# 파일에 대한 정보 확인
$ file /home/tmp_user/sample
sample: ASCII text

# 파일 내용 확인
$ cat sample
total 0
drwxr-xr-x  6 tmp_user  staff  192  2  7 20:55 ..
-rw-r--r--  1 tmp_user  staff    0  2  7 20:55 sample
drwxr-xr-x  3 tmp_user  staff   96  2  7 20:55 .

정리

하드링크와 소프트링크는 이름에서 직관적으로 알 수 있듯이 하드링크는 링크와 원본 파일의 연결고리를 하드하게 연결한다는 느낌으로 가져가고, 소프트링크는 링크와 원본 파일의 연결고리를 소프트하게 가져간다는 느낌으로 생각하고 있으면 될 것 같습니다.

  하드링크 소프트링크
정의 동일한 파일인데, 이름만 다르다. 특정 파일을 가리키는 파일
아이노드 동일한 아이노드를 가짐 별도의 아이노드를 가짐
원본 삭제 시 링크 파일 영향 영향 없음 링크가 끊어짐

출처

- https://ko.wikipedia.org/wiki/%EC%95%84%EC%9D%B4%EB%85%B8%EB%93%9C

- https://hoyoung2.tistory.com/51