하드링크와 심볼릭 링크에 대해 알기 전에, 먼저 아이노드에 대한 기본적인 이해가 필요하다. 아이노드에 대해 간단하게 알아보자.
아이노드
유닉스 계열 파일 시스템에서 파일이나 디렉토리에 대한 메타데이터를 저장하는 데이터 구조체이다. 각 파일이나 디렉토리는 고유한 inode 번호를 가지고 있으며, 파일의 실제 데이터와는 별도로, 파일의 속성 정보(파일 메타데이터)를 관리하는 역할을 한다.
# -i 옵션을 통해 확인 가능
ls -li
아이노드가 포함하는 정보
- 파일 유형: 일반 파일, 디렉토리, 심볼릭 링크 등의 유형
- 파일 크기: 파일의 크기 정보
- 소유자 및 그룹 정보: 파일의 소유자와 그룹
- 파일 권한: 읽기, 쓰기, 실행 권한
- 파일의 생성/수정/접근 시간: 파일의 타임스탬프 정보
- 링크 수: 해당 inode를 참조하는 하드 링크의 수
- 파일 데이터의 위치: 파일의 실제 데이터가 저장된 블록에 대한 포인터
즉, 우리는 inode의 번호를 통해 데이터에 접근하고 있었던 것이다. (맨 왼쪽이 inode번호)
하드 링크
하드 링크는 원본 파일과 동일한 inode 번호를 공유하는 다른 이름으로, 파일 시스템 내에서 같은 데이터 블록을 참조하는 방식이다. 하드 링크는 원본 파일에 대한 직접적인 참조를 제공하며, 원본 파일이 아닌 또 다른 이름을 통해 파일에 접근하게 된다.
특성:
- 하드 링크는 원본 파일과 동일한 inode 번호를 가지고있다. 이로 인해, 하드 링크는 원본 파일과 동일한 데이터 블록에 직접 접근한다.
- 원본 파일이 삭제되더라도 하드 링크는 여전히 해당 데이터를 참조하므로, 데이터가 손실되지 않는다. 모든 하드 링크가 삭제되어야만 데이터가 실제로 제거된다.
- 하드 링크는 동일한 파일 시스템 내에서만 생성할 수 있다
- 하드 링크는 디렉토리에 생성할 수 없다. (루트 디렉터리와 같은 특별한 경우 제외).
- 하드 링크를 통해 파일을 수정하면 원본 파일에도 변화가 반영된다. 즉, 하드 링크와 원본 파일은 실질적으로 동일한 파일로 간주된다.
하드 링크 생성과 삭제
mkdir orignal
cd orignal
vi file # 아무 값이나 입력 후 저장
# file에 대한 하드 링크 생성
# ln [대상파일] [심볼릭링크파일]
ln file hardlink
다음과 같이 동일한 inode 번호를 가진 하드 링크 파일이 생성된 것을 확인할 수 있다. 또한 파일의 종류는 -로 표시되며, 하드 링크 수가 증가한 것을 볼 수 있다
하드 링크 삭제
하드 링크는 rm으로 삭제 가능하며,원본 파일이 삭제되더라도 여전히 동일한 inode를 공유하기 때문에 데이터에 접근할 수 있다.
# 원본 파일과 하드 링크 둘 다 rm 명령어로 삭제 가능
rm -f [하드 링크명]
하드 링크는 열쇠 복사에 비유할 수 있다. 원본 열쇠가 하나 있고, 이 열쇠의 복사본을 여러 개 만들어 사용한다. 복사본으로도 원본과 똑같이 잠금을 열 수 있으며, 원본 열쇠가 없어도 복사본이 있으면 여전히 잠금을 열 수 있다. 즉, 복사본은 원본과 같아서 원본이 사라져도 데이터가 손실되지 않는다.
심볼릭 링크
심볼릭 링크는 소프트 링크(Soft Link)라고도 불리며, 파일이나 디렉토리의 경로를 가리키는 역할을 한다. 심볼릭 링크는 원본 파일이나 디렉토리의 경로 정보를 저장하고, 그 경로를 통해 원본 파일에 접근을 하게 된다.
특성:
- 심볼릭 링크는 원본 파일의 경로를 참조한다. 심볼릭 링크는 원본 파일과 다른 inode를 생성하며, 이 inode는 원본 파일의 경로를 가리키게 된다.
- 원본 파일이 삭제되거나 이동되면, 심볼릭 링크는 더 이상 유효하지 않아 깨진 링크가 된다.
- 서로 다른 파일 시스템 간에도 심볼릭 링크를 만들 수 있다.
- 심볼릭 링크는 디렉토리에도 사용할 수 있다. (하드 링크는 파일만 참조 가능)
- 심볼릭 링크는 원본 파일의 경로를 참조하고 있기 때문에, 심볼릭 링크를 통해 파일을 수정하면 원본 파일에도 변화가 반영된다.
- 파일의 종류를 l로 표현
심볼릭 링크 생성과 삭제
mkdir orignal
cd orignal
vi file # 아무 값이나 입력 후 저장
# file에 대한 심볼릭 링크 생성
# ln -s [대상파일] [심볼릭링크파일]
ln -s file symlink
다음과 같이 생성되는 것을 볼 수 있다.
ls -li로 확인해 보면
원본 파일과 심볼릭 링크의 inode 값이 다르고, 심볼릭 링크는 파일의 종류를 l로 표현하는 것을 알 수 있다.
심볼릭 링크 삭제
심볼릭 링크를 삭제하면 원본 파일에는 지장이 없지만, 원본 파일을 삭제하면 해당 파일을 참조하고 있는 심볼릭 링크는 깨진 링크가 된다. 즉, 심볼릭 링크는 여전히 존재하지만, 원본 파일에 접근할 수 없게 된다.
# 원본 파일과 심볼릭 링크 둘 다 rm 명령어로 삭제 가능
rm -f [심볼릭 링크명]
심볼릭 링크는 원본 파일이 있는 위치를 가리키는 '지도'와 비슷하다. 이 지도는 원본 파일의 경로를 알려주지만, 지도 자체는 파일이 아니다. 만약 원본 파일이 사라지면, 지도는 더 이상 유효하지 않게 되어 버린다.
하드 링크와 심볼릭 링크의 특성을 표로 정리하면 다음과 같다:
특성 | 하드 링크 | 심볼릭 링크 |
정의 | 원본 파일과 동일한 inode를 공유하는 다른 이름 | 원본 파일의 경로를 참조하는 별도의 파일 |
inode | 원본 파일과 동일한 inode를 가짐 | 별도의 inode를 가짐 |
데이터 접근 | 원본 파일과 동일한 데이터 블록에 직접 접근 | 원본 파일의 경로를 통해 간접적으로 접근 |
데이터 손실 방지 | 원본 파일 삭제 시에도 데이터 유지 | 원본 파일 삭제 시 링크가 깨짐 (유효하지 않은 경로) |
생성 가능 파일 시스템 | 동일한 파일 시스템 내에서만 가능 | 서로 다른 파일 시스템 간에도 가능 |
디렉토리 링크 | 일반적으로 디렉토리에 생성 불가 | 디렉토리에 생성 가능 |
수정 반영 | 수정 시 원본 파일에 변화가 반영됨 | 수정 시 원본 파일에 변화가 반영됨 (링크가 유효한 경우) |
표시 | 파일 목록에서-로 표시 | 파일 목록에서l로 표시 |
참고
'Linux' 카테고리의 다른 글
crontab이란? (0) | 2024.11.12 |
---|---|
디스크 입출력 성능과 dd 명령어 (0) | 2024.10.23 |
profile과 bashrc (0) | 2024.09.23 |
tar 압축 (0) | 2024.09.10 |
scp (0) | 2024.09.09 |