일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 시스템
- hashicorp
- 앤서블
- SSH OTP
- 유닉스
- auth methods
- DATA 백업
- 리눅스
- SHR
- key/value
- vault agent
- 차분 백업
- Role
- REST API
- Secret Engine
- Vault
- backend storage
- VIRT
- kv
- 커널 파라미터
- 구성관리
- devops
- 자동화
- 통합 풀 백업
- 파일시스템
- 인프라
- IAC
- secret engines
- 전체 백업
- 백업
- Today
- Total
클라우드 아카이브
[링크] 하드링크/소프트링크의 개념과 사용 방법 본문
개요
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
'OS 및 스토리지 > 운영체제' 카테고리의 다른 글
[Redhat][패키지 관리자] Local YUM Repository 등록/삭제 (0) | 2021.11.20 |
---|---|
[운영체제] 운영체제의 개념 (0) | 2021.08.22 |