우분투 실전 명령어 | ln -s 심볼릭 링크 안전 교체
배포 경로를 자주 바꾸는 서비스는 실제 파일을 직접 덮어쓰기보다 심볼릭 링크로 현재 버전을 가리키는 방식이 훨씬 안전합니다. ln -s를 제대로 쓰면 롤백이 빨라지고, 운영 중 실수를 줄일 수 있습니다.
언제 쓰는가
- 릴리스 디렉터리를 날짜/버전 단위로 분리해 운영할 때
- 설정 파일 위치를 표준 경로(
/etc/...)에 고정하고 실제 파일은 다른 경로에 둘 때 - 블루그린 배포처럼 현재 활성 버전을 링크 하나로 전환하고 싶을 때
바로 쓰는 명령어
# 기본 심볼릭 링크 생성
ln -s /opt/myapp/releases/2026-02-19 /opt/myapp/current
# 링크 대상 확인
ls -l /opt/myapp/current
readlink -f /opt/myapp/current
# 기존 링크를 새 릴리스로 안전하게 교체
ln -sfn /opt/myapp/releases/2026-02-20 /opt/myapp/current
# 링크 교체 후 서비스 재시작
systemctl restart myapp
systemctl status myapp --no-pager
핵심 옵션/패턴
-s는 심볼릭 링크를 만듭니다. 디렉터리나 파일 모두 다룰 수 있어 배포에 가장 많이 씁니다.-f는 기존 파일/링크가 있으면 덮어씁니다.-n은 대상이 디렉터리 링크일 때 링크 자체를 교체하게 해 줍니다.- 운영에서는
ln -sfn <new> <current>패턴을 표준으로 고정해 두면 실수 확률이 크게 줄어듭니다.
명령 출력 예시
$ ls -l /opt/myapp/current
lrwxr-xr-x 1 root root 33 Feb 19 01:30 /opt/myapp/current -> /opt/myapp/releases/2026-02-20
$ readlink -f /opt/myapp/current
/opt/myapp/releases/2026-02-20
자주 하는 실수
ln -s만 쓰고 교체 시-f -n을 빼서 링크가 중첩되거나 의도와 다르게 생성되는 경우- 상대 경로 링크를 만들어 작업 디렉터리가 바뀌면 깨지는 경우
- 링크만 바꿔 놓고 서비스 재기동이나 헬스체크를 생략해 장애를 늦게 발견하는 경우
검증 방법
# 1) 링크 대상 확인
readlink -f /opt/myapp/current
# 2) 바이너리/설정 접근 확인
test -x /opt/myapp/current/bin/start.sh && echo OK
# 3) 서비스 상태 및 최근 로그 확인
systemctl status myapp --no-pager
journalctl -u myapp -n 50 --no-pager
링크 대상이 기대한 릴리스와 다르면 즉시 이전 릴리스로 다시 ln -sfn 하여 롤백하고, 로그로 초기화 실패 원인을 확인합니다.
운영 팁
- 릴리스 디렉터리는 불변으로 두고
current링크만 변경하세요. 변경 이력이 명확해집니다. - 배포 스크립트에
readlink -f검증 단계를 강제로 넣으면 사람 실수를 초기에 차단할 수 있습니다. - 롤백 절차를 문서화해 두면 야간 장애에서도 복구 시간이 크게 줄어듭니다.
출처
- GNU coreutils manual
- Ubuntu Manpage: ln(1)
- The Linux Documentation Project