긴 경로의 파일을 매번 찾아가기 귀찮으셨나요? 리눅스(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

 

심볼릭 링크는 리눅스에서 파일 관리를 효율적으로 해주는 강력한 도구입니다. 처음에는 간단한 바로가기부터 만들어보고, 점차 시스템 관리나 개발 환경 구성에 활용해보세요. 한번 익숙해지면 없어서는 안 될 필수 기능이 될 거예요. 이 포스트가 여러분의 리눅스 시스템 관리 운영에 도움이 되었으면 합니다. 🙂

 

댓글 남기기