ln — 링크 만들기

Linux / 파일 및 디스크 관리 / ln.html

파일 및 디스크 관리원문등록 2026-10-18

💬 "ln 명령어"

ln은 파일에 별명(링크)을 붙입니다. -s가 없으면 하드 링크, 있으면 심볼릭 링크입니다.

실무에서는 현재 버전을 가리키는 심볼릭 링크(예: current → release-20261018)를 만들어 무중단 배포에 씁니다.

  • 개념: 링크는 파일을 복사하지 않고 같은 내용을 다른 이름으로 가리킵니다.
  • 왼쪽 열: ls -l에서 심볼릭 링크는 l로 시작하고 이름 -> 대상이 표시됩니다.
  • 하드 링크: 같은 inode를 공유합니다. 삭제해도 다른 이름이 남아 있으면 데이터가 유지됩니다.
  • 심볼릭 링크: 경로를 담은 특수 파일입니다. 대상이 사라지면 깨진 링크가 됩니다.

자주 쓰는 옵션

옵션설명
-s심볼릭(소프트) 링크를 만듭니다 — 실무 기본
-f기존 링크가 있으면 덮어씁니다
-n대상이 디렉터리 링크일 때 링크 안이 아니라 링크 자체를 교체
-v무엇을 만들었는지 출력합니다

필수 명령어 조합 3가지

  • ln -sfn /opt/app/releases/20261018 /opt/app/current — 현재 버전 포인터를 원자적으로 교체
  • ln -s /var/www/html/index.php /etc/nginx/html/index.php — 설정 경로에서 실제 파일을 심볼릭으로 연결
  • ls -l /opt/app/current — 링크가 어디를 가리키는지 확인

💬 "실제 고객 문의를 받았을 때 확인 순서 알려줘"

실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.

1단계 · 새 버전 디렉터리 준비

새 릴리스를 별도 디렉터리에 풀어 둡니다.

tar -xzf /tmp/release.tgz -C /opt/app/releases/20261018

2단계 · 포인터 교체

-sfn으로 current 링크를 새 버전으로 바꿉니다. 교체는 원자적이라 순간적으로 끊기지 않습니다.

ln -sfn /opt/app/releases/20261018 /opt/app/current

3단계 · 확인

링크 대상과 서비스 응답을 확인합니다.

ls -l /opt/app/current && curl -sI https://example.com | head -1

실무에서는 이렇게 씁니다

1. 무중단 배포 포인터 교체

상황 — 웹 서버가 /opt/app/current 를 바라보고 있을 때 새 버전으로 전환해야 합니다.

ln -sfn /opt/app/releases/20261018 /opt/app/current

결과 — current 링크가 새 릴리스를 가리키고, 새 요청부터 새 코드가 서비스됩니다.

포인트 — 디렉터리를 통째로 복사하는 방식보다 순단이 짧고 롤백이 링크 교체 한 번으로 끝납니다.

2. 설정 파일 공유

상황 — 여러 앱이 같은 설정 파일을 참조해야 합니다.

ln -s /etc/app/common.env /srv/app1/.env

결과 — 한 곳만 수정해도 모든 앱에 반영됩니다.

포인트 — 앱이 설정을 쓸 때는 예상치 못한 동기화가 생길 수 있으니 읽기 전용 공유에 주로 씁니다.

주의할 점

  • -f 없이 기존 링크를 덮으려 하면 실패합니다. -sfn 조합이 가장 안전합니다.
  • 디렉터리 링크에 -n을 빠뜨리면 링크 안에 링크가 만들어질 수 있습니다.
  • 상대 경로 심볼릭 링크는 작업 디렉터리에 따라 깨질 수 있어 절대 경로를 권장합니다.
  • 삭제할 때는 링크만 지우는지, 원본까지 지우는지 확인합니다.

실제 실행 화면

current 링크가 새 릴리스를 가리키는지 확인한 결과입니다.

ln 명령어 실행 결과: 심볼릭 링크 대상 확인

실제 운영 중인 서버

이 문서는 화면 표시용 가상 디렉터리의 항목입니다. 실제 서버 파일시스템과 연결되지 않으며, 파일 실행이나 시스템 명령을 수행하지 않습니다.