
broken), 하드 링크는 살아있는 현상 확인.ls -i로 inode 번호가 같은지 확인.ln -s): 윈도우의 "바로가기". 원본이 지워지면 링크는 깨짐.ln): 하나의 파일 데이터(Inode)에 이름표를 하나 더 붙이는 "복제 없는 복제". 원본을 지워도 데이터는 살아있음.mkdir link_practice
cd link_practice
시스템에는 여러 버전의 파이썬이나 라이브러리가 깔려 있습니다. python이라고 쳤을 때 실행될 버전을 심볼릭 링크로 관리합니다.
Bash
# 실제 실행 파일은 복잡한 이름을 가짐
/usr/bin/python3.10
/usr/bin/python3.11
# 사용자는 그냥 'python'만 치면 됨 (링크가 최신 버전을 가리킴)
ln -s /usr/bin/python3.11 /usr/bin/python

웹 서버 설정에서 많이 씁니다. 실제 파일은 깊숙한 곳에 두고, 짧은 경로로 링크를 겁니다.
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에 파일이 있다고 착각하고 정상 작동함."데이터는 하나지만, 여러 곳에서 동시에 소유해야 할 때" 씁니다.
rsync 등을 이용한 증분 백업에서 핵심 기술입니다.
Bash
# 파일 내용은 똑같지만, 별도의 파일처럼 보임.
# 하지만 실제 디스크 용량은 0바이트 추가됨 (Inode 공유).
ln yesterday/big_file.iso today/big_file.iso


중요한 데이터베이스 파일이나 로그 파일을 실수로 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 남았기 때문)여러 프로젝트 폴더에서 공통으로 쓰는 거대한 데이터셋(예: AI 학습용 이미지 50GB)이 필요할 때.
Bash
project_A/dataset/ (50GB)
project_B/dataset/ (하드링크 생성)

project_A를 지워버려도 project_B의 데이터는 안전하게 유지됩니다. 각 프로젝트가 파일을 "독립적"으로 소유한 효과를 냅니다.| 상황 | 추천 | 이유 |
|---|---|---|
| 다른 드라이브로 연결해야 함 | 심볼릭 | 하드 링크는 파티션을 못 건너감. |
| 디렉터리(폴더)를 연결해야 함 | 심볼릭 | 하드 링크는 디렉터리 연결이 (거의) 불가능. |
| 백업/스냅샷을 만들고 싶음 | 하드 | 용량 차지 없이 독립된 파일처럼 동작. |
| 원본 삭제 시 같이 죽어야 함 | 심볼릭 | 바로가기니까 원본 없으면 무효. |
| 원본 삭제 돼도 데이터는 살려야 함 | 하드 | 마지막 하나가 지워질 때까지 데이터 생존. |