반응형
ln
ln은 link를 생성하는 명령으로 리눅스에서 파일을 복사하지 않도 다른 경로에서 동일한 파일을 참조하고 싶을 때 사용할 수 있는 명령어다.
ln [옵션] <원본> <링크이름>
✓ 하드 링크와 심볼릭 링크
리눅스 파일 시스템에서는 두 가지 종류의 링크가 존재한다.
| 하드 링크 (Hard link) | 심볼릭 링크 (Symbolic link) | |
| 링크 대상 | 원본의 inode | 원본의 파일 경로 |
| 제약 | 동일 파티션 내에서만 가능 | 다른 파티션도 가능 |
| 원본 삭제 시 | 링크 및 내용 유지 | 링크 깨짐 |
| 디렉토리 링크 | 불가능 | 가능 |
| 확인 명령 | ls -li i 옵션을 사용하면 파일의 inode가 함께 출력된다. 두 파일의 inode 번호가 서로 같은 경우 하나는 하드 링크 파일임을 알 수 있다. |
ls -l 파일 목록을 상세 출력하여 타입이 l로 시작하면 심볼릭 링크 파일이며, 링크 이름과 대상 경로가 화살표(->) 관계 표시된다. |
사용 가능한 옵션
- -s : 심볼릭 링크를 생성한다. -s 옵션 없이 ln 명령을 사용하면 디폴트로 하드 링크를 생성한다.
- -f : <링크이름>의 기존 파일이 있을 경우 강제로 덮어 쓴다.
- -n : <링크이름>의 심볼릭 링크가 이미 존재하고 그게 디렉토리를 가리키는 경우에, 그 링크를 따라가서 원본 디렉토리 안쪽에 새 심볼릭 링크 파일을 만들지 말고 <링크이름> 자체를 덮어쓴다.
- -T : <링크이름> 이미 존재하고 그게 디렉토리일 경우, 디렉토리 내부에 새 링크를 만들지 말고 디렉토리 그 자체를 링크로 교체한다.
- -v : 명령 수행 과정을 자세히 출력한다.
사용 예시
1. 하드 링크 생성
리눅스 파일 시스템에서 실제 데이터는 inode라는 구조체에 저장되고 파일 이름은 그 inode를 가리키는 path에 불과하다. 다음과 같이 하드 링크를 생성하면 그 inode를 가리키는 또 다른 alias를 만드는 것과 같은 개념이며, 하드 링크가 생성된 이후에는 원본과 링크의 구분이 없어진다.
즉, 동일한 inode를 가리키는 두 파일 중 어느 하나를 수정하면 다른 쪽에도 반영이 되며, 둘 중 하나를 삭제하더라도 inode에 대한 참조는 유지되니 남아있는 파일의 내용은 온전히 유지된다.
$ ln test.c test_link.c
$ ls -li
24918 -rw-r--r-- 2 jo jo 533 Sep 29 20:41 test.c
24918 -rw-r--r-- 2 jo jo 533 Sep 29 20:41 test_link.c
2. 심볼릭 링크 생성 (상대 경로 또는 절대 경로)
심볼릭 링크는 파일 경로를 가리키는 바로가기(shortcut) 파일을 만드는 것과 같다.
$ ln -snf main.c main_symlink.c
$ ls -l
-rw-r--r-- 1 jo jo 533 Sep 29 20:41 test.c
lrwxrwxrwx 1 jo jo 6 Sep 29 20:50 test_symlink.c -> test.c
참고로 ln -snf는 Makefile 등에서 빌드 후 심볼릭 링크를 갱신할 때 사실상 표준처럼 쓰이는 옵션 조합이다.
ln -snf <원본> <링크이름>
한편, ln 명령은 지정한 문자열 그대로 저장한다. 즉, 심볼릭 링크 생성 시 <원본> 위치에 상대경로를 쓰면 상대경로를 해석하여 치환하지 않고 그대로 링크 파일에 저장한다. 따라서 프로젝트 디렉토리를 통째로 다른 곳에 복사해도 내부 링크가 깨지지 않도록 하려면 상대경로로 링크를 생성하면 된다.
ln -snf /opt/myapp/bin/app /usr/local/bin/app # 절대경로로 심볼릭 링크 생성
ln -snf ../build/libmylib.so ./lib/libmylib.so # 상대경로로 심볼릭 링크 생성
# lrwxrwxrwx 1 user user 11 Sep 29 libmylib.so -> ../build/libmylib.so
✓ 심볼릭 링크의 원본 대상을 찾을 때 사용할 수 있는 명령: readlink
readlink <심볼릭링크> # 링크가 가리키는 경로 출력
readlink -f <심볼릭링크> # 링크가 가리키는 경로를 따라가서 최종 절대 경로 출력반응형
'운영체제 > Linux' 카테고리의 다른 글
| Linux ] journalctl 사용법 (systemd-journald) (0) | 2025.11.21 |
|---|---|
| Linux ] watch 명령어 사용법 (0) | 2025.11.18 |
| Linux ] top 명령어 사용법 (0) | 2025.11.09 |
| Linux ] ps 명령어 사용법 (0) | 2025.10.30 |
| Linux ] NAS 마운트 방법 (0) | 2025.10.12 |