하드 링크와 심볼릭 링크
쉽게 말하면
파일에 바로가기를 만드는 두 방법이에요. 하드 링크는 같은 파일에 이름표를 하나 더 붙이는 것이라 원래 이름을 지워도 내용이 남아요. 심볼릭 링크는 '원본은 저기 있음'이라고 적은 쪽지라서 원본을 지우면 쓸모없어져요.
시험용 정의
하드 링크(ln 원본 링크)는 같은 inode에 이름을 하나 더 붙이는 것이고, 심볼릭(소프트) 링크(ln -s 원본 링크)는 원본의 경로를 담은 별도 파일(바로가기)이다.
비유로 이해하기
하드 링크는 한 사람에게 이름이 둘(본명과 예명) 있는 것, 심볼릭 링크는 "그 사람은 ○○동에 산다"라고 적힌 쪽지다. 이사 가면(원본 삭제·이동) 쪽지는 쓸모없어진다.
자세히
하드 링크 vs 심볼릭 링크
| 하드 링크 (ln) | 심볼릭 링크 (ln -s) | |
|---|---|---|
| 가리키는 것 | 같은 inode | 원본의 경로(이름) |
| inode 번호 | 원본과 같음 | 다름 |
| 링크 수 | 증가 | 변화 없음 |
| 원본 삭제 시 | 그대로 사용 가능 | 깨짐 |
| 디렉터리 | 불가 | 가능 |
| 다른 파일시스템(파티션) | 불가 | 가능 |
| ls -l 표시 | 일반 파일(-)과 같음 | l, 이름 -> 원본 |
| 크기 | 원본과 같음 | 경로 문자열 길이 |
시험에 이렇게 나와요
- 하드 링크
ln 원본 링크(같은 inode), 심볼릭 링크ln -s 원본 링크(경로를 가리킴) - 원본을 지우면 하드 링크는 그대로 읽히고 심볼릭 링크는 깨진다. 디렉터리·다른 파일시스템에는 심볼릭 링크만
확인 문제
Q1. original.txt에 하드 링크 hard.txt와 심볼릭 링크 soft.txt를 만든 뒤 original.txt를 지웠다. 어떻게 될까?
- 둘 다 내용을 읽을 수 없다
- soft.txt는 읽히고 hard.txt는 깨진다
- 둘 다 멀쩡하다
- hard.txt는 읽히고 soft.txt는 깨진다
정답 보기
4번 hard.txt는 읽히고 soft.txt는 깨진다
하드 링크는 원본과 같은 inode(실제 데이터)를 가리키는 또 하나의 이름이라, 이름 하나를 지워도 데이터는 남는다. 심볼릭 링크는 원본의 경로 이름을 가리키는 바로가기라, 원본 이름이 사라지면 가리킬 곳이 없어 깨진다.
Q2. 하드 링크에 대한 설명으로 틀린 것은?
- 다른 파티션의 파일에도 만들 수 있다
- 만들면 링크 수가 늘어난다
- 원본과 같은 inode를 가진다
- 원본을 지워도 내용이 남는다
정답 보기
1번 다른 파티션의 파일에도 만들 수 있다
inode 번호는 파일시스템 안에서만 유효해 파티션을 넘을 수 없다.
Q3. /usr/local/bin/python을 가리키는 심볼릭 링크 py를 만드는 명령은?
- ln /usr/local/bin/python py
- ln -s /usr/local/bin/python py
- ln -h py /usr/local/bin/python
- ln -s py /usr/local/bin/python
정답 보기
2번 ln -s /usr/local/bin/python py
ln -s 원본 링크이름. 순서 주의.
Q4. 파일의 inode 번호를 확인하는 ls 옵션은?
- -l
- -n
- -a
- -i
정답 보기
4번 -i
-i다. 파일 이름 앞에 inode 번호를 보여 준다. 하드 링크는 inode 번호가 같다.
헷갈리기 쉬운 O·X
심볼릭 링크를 만들면 원본 파일의 링크 수가 1 늘어난다.
정답 보기
X 하드 링크만 늘린다.
디렉터리에 하드 링크를 만들 수 없다.
정답 보기
O 순환 구조를 막기 위해 금지(심볼릭은 가능).
ln -s 링크이름 원본이 올바른 순서다.
정답 보기
X 원본(대상)이 먼저, 링크 이름이 나중. cp와 같은 순서.