[Linux] 파일 링크 실습

mommers·2026년 1월 30일

Linux

목록 보기
8/59


파일 링크 (ln)

  • 학습: 하드 링크 vs 심볼릭 링크(바로가기)의 결정적 차이 (inode 개념).
  • 실습(1h):
    • 원본 파일 생성 후 하드 링크와 심볼릭 링크 각각 생성.
    • 원본 파일 삭제 시 심볼릭 링크는 깨지고(broken), 하드 링크는 살아있는 현상 확인.
    • ls -i로 inode 번호가 같은지 확인.
  • 심볼릭 링크 (ln -s): 윈도우의 "바로가기". 원본이 지워지면 링크는 깨짐.
  • 하드 링크 (ln): 하나의 파일 데이터(Inode)에 이름표를 하나 더 붙이는 "복제 없는 복제". 원본을 지워도 데이터는 살아있음.
mkdir link_practice
cd link_practice

  • *"경로(Path)를 가리키는 이정표"**가 필요할 때 씁니다.

프로그램 버전 관리 (가장 흔함)

시스템에는 여러 버전의 파이썬이나 라이브러리가 깔려 있습니다. python이라고 쳤을 때 실행될 버전을 심볼릭 링크로 관리합니다.

Bash

# 실제 실행 파일은 복잡한 이름을 가짐
/usr/bin/python3.10
/usr/bin/python3.11

# 사용자는 그냥 'python'만 치면 됨 (링크가 최신 버전을 가리킴)
ln -s /usr/bin/python3.11 /usr/bin/python

  • 장점: 원본을 덮어쓰지 않고 링크만 바꿔서 버전을 스위칭할 수 있음.

복잡한 경로 단축 & 설정 관리 (Nginx/Apache)

웹 서버 설정에서 많이 씁니다. 실제 파일은 깊숙한 곳에 두고, 짧은 경로로 링크를 겁니다.

Bash

# 실제 프로젝트 위치 (너무 깊음)
/home/user/projects/my-web-app/config/nginx.conf

# 시스템이 읽는 표준 위치로 링크
ln -s /home/user/projects/my-web-app/config/nginx.conf /etc/nginx/sites-enabled/myapp
  • 장점: 파일을 복사하지 않으므로, 원본(projects/...)을 수정하면 서버 설정도 즉시 반영됨.

용량 부족 해결 (파티션 건너뛰기)

하드 링크는 다른 파티션(드라이브)으로 못 만들지만, 심볼릭 링크는 가능합니다.

Bash

# /home (SSD) 용량이 꽉 참.
# /data (HDD)에 큰 로그 폴더를 옮겨두고 링크만 걸어둠.
mv /home/user/logs /data/large_hdd/logs
ln -s /data/large_hdd/logs /home/user/logs
  • 장점: 프로그램은 여전히 /home/user/logs에 파일이 있다고 착각하고 정상 작동함.

"데이터는 하나지만, 여러 곳에서 동시에 소유해야 할 때" 씁니다.

공간 절약형 백업 (Time Machine 원리)

rsync 등을 이용한 증분 백업에서 핵심 기술입니다.

  • 어제 백업 파일: 100GB
  • 오늘 백업 파일: 어제와 똑같음.
  • 이때 파일을 복사하는 게 아니라 하드 링크를 겁니다.

Bash

# 파일 내용은 똑같지만, 별도의 파일처럼 보임.
# 하지만 실제 디스크 용량은 0바이트 추가됨 (Inode 공유).
ln yesterday/big_file.iso today/big_file.iso

  • ID 같은것을 확인할 수 있다.
  • 장점: 100GB 파일이 10개 있어도 디스크는 100GB만 차지함.

실수 방지용 '안전장치'

중요한 데이터베이스 파일이나 로그 파일을 실수로 rm 하는 것을 막기 위해 사용합니다.

Bash

# 원본 데이터
/var/www/critical_data.db

# 관리자 홈에 하드 링크 생성
ln /var/www/critical_data.db /root/backup/critical_data_hardlink
  • 장점: 누군가 실수로 /var/www/critical_data.db를 삭제해도, /root/...에 링크가 남아있기 때문에 데이터는 디스크에서 삭제되지 않고 살아있습니다. (Inode 참조 카운트가 1 남았기 때문)

여러 프로젝트에서 동일 파일 공유 (Read-Only)

여러 프로젝트 폴더에서 공통으로 쓰는 거대한 데이터셋(예: AI 학습용 이미지 50GB)이 필요할 때.

Bash

project_A/dataset/ (50GB)
project_B/dataset/ (하드링크 생성)

  • 장점: 심볼릭 링크와 달리, project_A를 지워버려도 project_B의 데이터는 안전하게 유지됩니다. 각 프로젝트가 파일을 "독립적"으로 소유한 효과를 냅니다.

정리

상황추천이유
다른 드라이브로 연결해야 함심볼릭하드 링크는 파티션을 못 건너감.
디렉터리(폴더)를 연결해야 함심볼릭하드 링크는 디렉터리 연결이 (거의) 불가능.
백업/스냅샷을 만들고 싶음하드용량 차지 없이 독립된 파일처럼 동작.
원본 삭제 시 같이 죽어야 함심볼릭바로가기니까 원본 없으면 무효.
원본 삭제 돼도 데이터는 살려야 함하드마지막 하나가 지워질 때까지 데이터 생존.
profile
임베디드 개발자가 되기 위해 공부중입니다!

0개의 댓글