ln 명령어 사용법

파일이나 디렉터리에 하드 링크 또는 심볼릭 링크를 만드는 명령어입니다.

파일·디렉터리 관리연결 실습 문제 5개Rocky Linux 8 기준 · 실행 결과는 실습 컨테이너에서 확인

기본 문법

ln [옵션] 대상 [링크이름]
ln [옵션] 대상... 디렉터리

ln 은 이미 존재하는 파일이나 디렉터리에 또 다른 이름을 붙여 주는 명령입니다. 기본 동작은 하드 링크로, 원본과 같은 inode 를 공유하는 이름을 하나 더 만듭니다. -s 옵션을 붙이면 심볼릭 링크가 되며, 이는 대상 경로 문자열을 담고 있는 별도의 특수 파일입니다.

하드 링크는 같은 inode 를 가리키므로 어느 쪽 이름으로 내용을 바꿔도 결과가 같고, 원본을 지워도 링크 수가 남아 있는 한 데이터는 유지됩니다. 다만 파일시스템 경계를 넘을 수 없고 디렉터리에는 만들 수 없습니다. 심볼릭 링크는 이런 제약이 없어 다른 파일시스템이나 디렉터리도 가리킬 수 있지만, 대상이 사라지면 깨진 링크가 됩니다.

실무에서는 /srv/releases/current 처럼 버전 디렉터리를 가리키는 링크를 바꿔 배포본을 전환하거나, 설정 파일의 최신본을 current.conf 로 노출하는 데 씁니다. 리눅스마스터·LPIC 시험에서도 하드 링크와 심볼릭 링크의 inode·링크 수 차이, ls -li 로 확인하는 방법을 자주 다룹니다.

자주 쓰는 옵션

옵션의미
-s하드 링크 대신 심볼릭(소프트) 링크를 만든다ln -s /srv/releases/v2 /srv/releases/current
-f링크 이름이 이미 있으면 지우고 새로 만든다ln -sf /srv/releases/v2 /srv/releases/current
-n링크 이름이 디렉터리를 가리키는 심볼릭 링크일 때 그 안으로 따라 들어가지 않고 링크 자체를 교체 대상으로 본다ln -sfn releases/v2 /srv/versioned/latest
-r대상 경로를 링크가 놓일 위치 기준의 상대 경로로 변환해 심볼릭 링크를 만든다(-s 와 함께 사용)ln -sr /srv/releases/v2 /srv/releases/current
-v만들어진 링크를 화면에 출력한다ln -sv config_v2.conf current.conf
-i링크 이름이 이미 있으면 덮어쓸지 확인을 묻는다ln -si a.txt b.txt
-b덮어쓰기 전에 기존 파일의 백업(이름~)을 남긴다ln -sbf config_v2.conf current.conf
-T링크 이름을 디렉터리로 취급하지 않는다. 링크 이름이 이미 디렉터리이면 그 안에 만들지 않고 오류를 낸다ln -sT /srv/releases/v2 /srv/releases/current
-t 디렉터리지정한 디렉터리 안에 링크들을 만든다ln -st /tmp/demo/links /tmp/demo/a.txt /tmp/demo/b.txt
-P대상이 심볼릭 링크여도 따라가지 않고 그 링크 자체에 하드 링크를 만든다ln -P /tmp/demo/current.conf /tmp/demo/keep.conf

실무 예시

하드 링크 만들고 inode 확인

준비: mkdir -p /tmp/demo/releases; cd /tmp/demo/releases; echo 'release 2026' > release-2026.txt

$ cd /tmp/demo/releases && ln release-2026.txt current-release.txt && ls -li release-2026.txt current-release.txt
1305659 -rw-r--r--. 2 root root 13 Sep 16 10:54 current-release.txt
1305659 -rw-r--r--. 2 root root 13 Sep 16 10:54 release-2026.txt

두 파일의 inode 번호가 같고 링크 수가 2로 올라간 것을 확인할 수 있습니다. 하드 링크는 같은 실체에 이름만 하나 더 붙인 것입니다. inode 번호와 날짜는 환경마다 다르며, 권한 뒤의 점(.)은 SELinux 컨텍스트가 있다는 표시입니다.

설정 파일 심볼릭 링크 만들기

준비: mkdir -p /tmp/demo/linklab/releases; echo 'port=8080' > /tmp/demo/linklab/releases/config_v2.conf

$ cd /tmp/demo/linklab && ln -s releases/config_v2.conf current.conf && ls -l current.conf
lrwxrwxrwx. 1 root root 23 Sep 16 10:54 current.conf -> releases/config_v2.conf

current.conf 가 releases/config_v2.conf 를 가리키는 심볼릭 링크로 만들어집니다. 맨 앞의 l 문자와 -> 표시로 심볼릭 링크임을 알 수 있습니다. 크기 23은 대상 경로 문자열의 길이입니다.

링크가 가리키는 내용 읽기

준비: mkdir -p /tmp/demo/linklab/releases; echo 'port=8080' > /tmp/demo/linklab/releases/config_v2.conf; ln -sf releases/config_v2.conf /tmp/demo/linklab/current.conf

$ ln -sfn releases/config_v2.conf /tmp/demo/linklab/current.conf && cat /tmp/demo/linklab/current.conf
port=8080

심볼릭 링크를 읽으면 대상 파일의 내용이 그대로 나옵니다. -f 로 기존 링크를 덮어써도 결과는 동일합니다.

디렉터리 latest 링크 전환하기

준비: mkdir -p /tmp/demo/versioned/releases/v1 /tmp/demo/versioned/releases/v2; ln -s releases/v1 /tmp/demo/versioned/latest

$ cd /tmp/demo/versioned && ln -sfn releases/v2 latest && ls -l latest
lrwxrwxrwx. 1 root root 11 Sep 16 10:54 latest -> releases/v2

-n 을 함께 쓰면 기존 심볼릭 링크 안으로 들어가지 않고 링크 자체를 새 대상으로 교체합니다. 배포본 전환에 쓰는 방법입니다.

하드 링크로 같은 내용의 파일 합치기

준비: mkdir -p /tmp/demo/dedupe; echo 'same content' > /tmp/demo/dedupe/fileA.log; cp /tmp/demo/dedupe/fileA.log /tmp/demo/dedupe/fileB.log

$ cd /tmp/demo/dedupe && ln -f fileA.log fileB.log && stat -c '%i %h %n' fileA.log fileB.log
201981533 2 fileA.log
201981533 2 fileB.log

내용이 같은 두 파일을 하드 링크로 묶어 디스크 사용량 중복을 없앱니다. stat 출력의 첫 값(inode)이 서로 같고, 둘째 값(링크 수)이 2로 표시됩니다. -f 는 기존 fileB.log 를 지우고 덮어쓰므로, 내용이 정말 같은지 먼저 확인해야 합니다.

주의할 점

  • ln 은 기본이 하드 링크입니다. -s 를 빠뜨리면 심볼릭 링크 문제에서 오답이 되니 항상 확인하세요.
  • 상대 경로로 심볼릭 링크를 만들면 기준은 현재 디렉터리가 아니라 링크가 놓인 디렉터리입니다. 잘못하면 깨진 링크가 됩니다.
  • 디렉터리를 가리키는 링크를 교체할 때 -n 없이 -sf 만 쓰면 링크 안쪽에 링크가 생깁니다. -sfn 을 쓰세요.
  • 하드 링크는 디렉터리에 만들 수 없고 다른 파일시스템으로도 걸 수 없습니다. 이 경우 심볼릭 링크를 써야 합니다.
  • -f 는 확인 없이 기존 링크 이름을 지웁니다. 중요한 파일을 링크 이름으로 지정하면 그 파일이 사라지므로, 불안하면 -i 나 -b 를 함께 쓰세요.
  • 하드 링크로 묶은 파일은 하나만 수정해도 다른 이름으로 본 내용이 함께 바뀝니다. 독립된 사본이 필요하면 하드 링크를 쓰면 안 됩니다.

이 명령어로 풀 수 있는 실습 문제

브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.

관련 명령어

마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.