긴 경로의 파일을 매번 찾아가기 귀찮으셨나요? 리눅스(Linux) 심볼릭 링크(Symbolic Link)를 사용하면 윈도우 바로가기처럼 어디서든 쉽게 파일에 접근할 수 있습니다. 실무에서 바로 써먹을 수 있는 핵심 내용만 정리했습니다.
1. 심볼릭 링크가 뭔가요?
심볼릭 링크는 다른 파일이나 폴더를 가리키는 ‘바로가기’입니다. 원본 파일의 위치만 기억하고 있어서, 링크를 클릭하면 원본으로 이동됩니다.
하드 링크 vs 심볼릱 링크 차이점
- 하드 링크: 원본과 완전히 동일한 파일 (원본 삭제해도 살아있음)
- 심볼릭 링크: 원본 위치만 기억하는 바로가기 (원본 삭제하면 깨짐)
대부분의 경우 심볼릭 링크를 사용합니다.
2. 심볼릭 링크 생성하기
기본 명령어
ln -s [원본경로] [링크이름]
파일 링크 생성
# 설정 파일 바로가기 만들기
ln -s /etc/nginx/nginx.conf ~/nginx_config
# 로그 파일 바로가기
ln -s /var/log/apache2/error.log ~/web_error
# 현재 폴더에 있는 파일 링크
ln -s config.txt my_config
# 절대경로로 링크 생성 (권장)
ln -s /home/user/documents/important.txt ~/important
디렉터리 링크 생성
# 프로젝트 폴더 바로가기
ln -s /var/www/html/myproject ~/work
# 외부 드라이브 연결
ln -s /media/external_drive ~/external
# 공유 폴더 링크
ln -s /opt/shared-files ~/shared
유용한 생성 옵션들
ln -sf # 기존 링크가 있어도 강제로 덮어쓰기
ln -sv # 생성 과정 자세히 보여주기
ln -sfv # 강제 덮어쓰기 + 과정 표시
3. 심볼릭 링크 수정하기
기본 명령어
ln -sfn [새로운_원본경로] [기존_링크이름]
기존 링크 대상 변경
# 기존 링크를 새로운 대상으로 변경
ln -sfn /new/target/path existing_link
# 디렉터리 링크 대상 변경
ln -sfnT /new/directory existing_dir_link
실무 예시: 버전 관리
# Java 버전 변경
ln -sf /usr/lib/jvm/java-11-openjdk /usr/local/current-java
ln -sf /usr/lib/jvm/java-17-openjdk /usr/local/current-java
# Node.js 버전 스위칭
ln -sf /usr/local/node-v16.20.0 /usr/local/node
ln -sf /usr/local/node-v18.17.0 /usr/local/node
# 웹사이트 버전 배포
ln -sf /var/www/mysite-v2.1 /var/www/current-site
링크 대상 확인 후 수정
# 현재 링크가 어디를 가리키는지 확인
readlink existing_link
# 확인 후 수정
ln -sf /new/path existing_link
4. 심볼릭 링크 삭제하기
기본 명령어
rm [링크이름]
# 또는
unlink [링크이름]
기본 삭제 방법
# rm 명령으로 삭제 (원본은 안전)
rm symbolic_link
# unlink 명령 사용 (더 명확)
unlink symbolic_link
# 여러 링크 동시 삭제
rm link1 link2 link3
안전한 삭제 방법
# 링크인지 먼저 확인
ls -l my_link
# 확인 후 삭제
if [ -L "my_link" ]; then
rm my_link
echo "링크 삭제 완료"
else
echo "심볼릭 링크가 아닙니다"
fi
주의사항: 디렉터리 링크 삭제
# 올바른 방법 (링크만 삭제)
rm folder_link
# 잘못된 방법 (원본 폴더 내용 삭제 위험!)
rm folder_link/
rm -r folder_link/
깨진 링크 찾아서 삭제
# 현재 디렉터리에서 깨진 링크 찾기
find . -type l -exec test ! -e {} \; -print
# 깨진 링크 자동 삭제
find . -type l -exec test ! -e {} \; -delete
# 특정 경로에서 깨진 링크 삭제
find /home/user -type l -exec test ! -e {} \; -delete
5. 자주 사용되는 심볼릭 링크 예시
웹서버 관리
# Nginx 사이트 활성화/비활성화
ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/mysite # 비활성화
버전 관리
# Java 버전 관리
ln -s /usr/lib/jvm/java-11-openjdk /usr/local/current-java
# Node.js 버전 변경
ln -sf /usr/local/node-v18.17.0 /usr/local/node
개발 환경
# 현재 작업 프로젝트 바로가기
ln -s /home/dev/projects/current-sprint ~/work
# 자주 쓰는 설정파일들
ln -s ~/.vimrc ~/configs/vim
ln -s ~/.bashrc ~/configs/bash
6. 심볼릭 링크 확인하고 관리하기
링크 확인하기
# 링크인지 확인
ls -l my_link
# lrwxrwxrwx 1 user user 15 Jan 15 10:30 my_link -> /path/to/original
# 실제 경로 찾기
readlink -f my_link
깨진 링크 찾기
# 현재 폴더에서 깨진 링크 찾기
find . -type l -exec test ! -e {} \; -print
# 깨진 링크 자동 삭제
find . -type l -exec test ! -e {} \; -delete
모든 심볼릭 링크 찾기
# 전체 시스템에서 심볼릭 링크 찾기
find / -type l 2>/dev/null
# 홈 디렉터리에서만 찾기
find ~ -type l -ls
7. 알아두면 도움 되는 팁들!
상대경로 vs 절대경로
# 절대경로 (추천: 어디서든 작동)
ln -s /home/user/file.txt ~/link
# 상대경로 (링크 위치가 바뀌면 깨질 수 있음)
ln -s ../file.txt link
배치로 링크 만들기
#!/bin/bash
# 여러 설정파일 한번에 링크하기
files=(
"/etc/nginx/nginx.conf:nginx"
"/etc/mysql/my.cnf:mysql"
"/var/log/syslog:system_log"
)
for file in "${files[@]}"; do
source=${file%%:*}
target=${file##*:}
ln -sf "$source" ~/"$target"
echo "링크 생성: $target"
done
깨진 링크 정기 체크
# 매일 오전 9시에 체크하도록 cron 등록
# crontab -e 로 다음 라인 추가:
# 0 9 * * * find /home/user -type l -exec test ! -e {} \; -print
심볼릭 링크는 리눅스에서 파일 관리를 효율적으로 해주는 강력한 도구입니다. 처음에는 간단한 바로가기부터 만들어보고, 점차 시스템 관리나 개발 환경 구성에 활용해보세요. 한번 익숙해지면 없어서는 안 될 필수 기능이 될 거예요. 이 포스트가 여러분의 리눅스 시스템 관리 운영에 도움이 되었으면 합니다. 🙂