Linux / 명령어 / ln - 하드 링크와 심볼릭 링크 생성
ln은 파일 사이에 하드 링크 또는 심볼릭 링크를 만드는 명령입니다. 기본 동작은 하드 링크 생성이고, -s를 사용하면 대상 경로 문자열을 저장하는 심볼릭 링크를 만듭니다.
이 글에서는 두 링크의 구조적 차이, 기본 문법, 상대·절대 심볼릭 링크 선택, 기존 링크 교체와 링크 상태 확인 방법을 설명합니다.
ln 명령어란?
하드 링크는 같은 파일 시스템의 동일한 inode를 가리키는 또 하나의 이름입니다. 심볼릭 링크는 다른 경로를 가리키는 별도 파일이며 파일 시스템 경계를 넘거나 디렉터리를 가리킬 수 있습니다. 원본 이름을 삭제해도 하드 링크가 남으면 데이터는 유지되지만, 심볼릭 링크의 대상 경로가 사라지면 깨진 링크가 됩니다.
기본 문법
ln [옵션] 대상 링크이름 ln [옵션] 대상 ... 디렉터리
파일명이나 경로에 공백이 있으면 따옴표로 감싸고, 하이픈으로 시작하는 이름은 가능한 경우 -- 뒤에 지정합니다. 지원 옵션은 배포판과 GNU Coreutils 버전에 따라 다를 수 있으므로 ln --help와 man ln으로 현재 시스템의 설명을 확인하세요.
ln 기본 사용법
하드 링크 만들기
옵션 없이 대상과 새 이름을 지정합니다. 두 경로는 같은 inode를 가리키며 한쪽 내용을 수정하면 다른 이름에서도 같은 내용이 보입니다.
ln original.txt hard-link.txt stat -c '%i %h %n' original.txt hard-link.txt
심볼릭 링크 만들기
-s를 사용합니다. 링크에 저장되는 대상 문자열은 실제 존재 여부와 관계없이 만들 수 있습니다.
ln -s /opt/myapp/current app-current readlink app-current
여러 링크를 디렉터리에 만들기
여러 대상을 지정하고 마지막에 디렉터리를 두거나 -t로 대상 디렉터리를 지정합니다.
ln -s file1 file2 links/ ln -s -t links file1 file2
심볼릭 링크가 가리키는 경로 확인하기
ln -s는 보통 성공 메시지를 출력하지 않습니다. 링크 안에 기록된 대상 문자열은 readlink로 확인합니다.
printf 'demo\n' > original.txt ln -s original.txt shortcut.txt readlink shortcut.txt
예시 출력은 original.txt입니다. 상대 경로는 링크가 놓인 디렉터리를 기준으로 해석되므로 링크를 다른 위치로 옮기면 대상이 끊어질 수 있습니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-s, --symbolic |
하드 링크 대신 심볼릭 링크를 만듭니다. |
-r, --relative |
링크 위치를 기준으로 상대적인 심볼릭 링크를 만듭니다. -s와 함께 사용합니다. |
-f, --force |
기존 대상 링크 이름을 제거하고 새 링크를 만듭니다. |
-i |
기존 링크 이름을 교체하기 전에 확인합니다. |
-n |
대상이 디렉터리를 가리키는 심볼릭 링크일 때 링크 자체로 처리합니다. |
-T |
링크 이름을 디렉터리가 아니라 정확한 경로로 취급합니다. |
-b |
교체할 기존 파일의 백업본을 만듭니다. |
-v |
생성한 링크를 출력합니다. |
긴 옵션은 의미를 파악하기 쉽고 스크립트 검토에도 도움이 됩니다. 다만 이식성이 중요한 스크립트에서는 대상 시스템이 해당 GNU 확장 옵션을 지원하는지 먼저 확인하세요.
실전 활용 예제
상대 심볼릭 링크 만들기
같은 디렉터리 트리를 다른 위치로 옮길 수 있어야 한다면 상대 링크가 유용합니다. 상대 경로는 현재 셸 위치가 아니라 링크 파일이 놓일 디렉터리를 기준으로 해석됩니다.
ln -s ../releases/2026-09 app/current ln -sr /srv/app/releases/2026-09 /srv/app/current
기존 링크 안전하게 교체하기
배포 포인터처럼 링크를 바꿀 때는 기존 경로가 실제 디렉터리인지 심볼릭 링크인지 먼저 확인하세요. -sfnT 조합은 GNU 환경에서 정확한 링크 경로를 교체하는 데 쓰일 수 있지만 대상 검증이 먼저입니다.
readlink current ln -sfnT releases/2026-10 current readlink current
링크 종류와 대상 확인하기
ls -l, readlink, stat을 함께 사용하면 링크 문자열과 최종 대상, inode 관계를 확인할 수 있습니다.
ls -l app-current readlink app-current readlink -f app-current stat app-current
ln와 관련 명령 비교
| 명령·방법 | 주요 역할 | 적합한 상황 |
|---|---|---|
| 하드 링크 | 같은 inode의 또 다른 이름 | 같은 파일 시스템의 일반 파일 |
| 심볼릭 링크 | 대상 경로 문자열을 저장하는 별도 파일 | 디렉터리·다른 파일 시스템·배포 포인터 |
cp |
독립된 데이터 복사본 | 원본과 별개로 변경해야 할 때 |
| 바인드 마운트 | 경로를 다른 위치에 마운트 | 파일 시스템 수준의 디렉터리 노출이 필요할 때 |
사용할 때 주의할 점
인수 순서를 기억한다
기본 형식은 ln 대상 링크이름입니다. 자연어의 복사 방향과 혼동하면 의도와 다른 링크가 생길 수 있습니다.
상대 링크의 기준은 링크 위치다
현재 디렉터리에서 보이는 상대 경로를 그대로 넣어도 링크가 다른 디렉터리에 생성되면 깨질 수 있습니다. ln -sr 또는 계산된 상대 경로를 사용하세요.
하드 링크는 파일 시스템 경계를 넘지 못한다
하드 링크는 같은 파일 시스템의 inode를 공유하므로 다른 마운트 지점으로 만들 수 없습니다. 디렉터리 하드 링크도 일반적으로 제한됩니다.
FAQ
ln의 기본값은 심볼릭 링크인가요?
아닙니다. 기본값은 하드 링크이며 심볼릭 링크를 만들려면 -s가 필요합니다.
원본 파일을 삭제하면 하드 링크도 사라지나요?
아닙니다. 같은 inode를 가리키는 다른 하드 링크가 남아 있으면 데이터는 유지됩니다.
심볼릭 링크가 깨졌는지 어떻게 확인하나요?
readlink 링크로 저장된 경로를 보고, readlink -e 또는 test -e로 최종 대상 존재 여부를 확인할 수 있습니다.
절대 링크와 상대 링크 중 무엇이 좋나요?
링크를 포함한 트리를 함께 이동해야 하면 상대 링크가, 링크 위치가 바뀌어도 고정된 시스템 경로를 가리켜야 하면 절대 링크가 적합할 수 있습니다.









