심볼릭 링크(Symlink)는 다른 파일을 직접 가리키는 파일로, 리눅스 시스템에서는 흔히 바로가기(숏컷) 역할을 합니다.
'심링크(symlink)'라는 용어는 '심볼릭(symbolic)'과 '링크(link)'를 합친 말로, 이러한 파일이 다른 대상에 대한 상징적 참조 역할을 한다는 특성을 잘 보여줍니다.
소위 '하드 링크(hard link)'는 문자 그대로의 링크라기보다 참조 대상 파일의 복사본에 가깝습니다. 반면 '소프트 링크', 즉 심볼릭 링크는 단순히 대상 파일을 가리키기만 합니다. 심볼릭 링크를 삭제해도 원본 파일에는 아무런 영향이 없으며, 필요한 만큼 얼마든지 여러 개를 만들 수 있습니다. 덕분에 서로 다른 파일시스템과 파티션에 걸쳐 있는 파일을 가리킬 때도 유용하게 활용됩니다.
심볼릭 링크의 활용
하나의 애플리케이션이 더 효율적으로 동작하도록 파일시스템의 기본 구조 자체를 변경하는 것은 매우 번거로운 작업입니다. 대신 심볼릭 링크를 활용하면 원본 파일의 위치를 그대로 유지한 채 프로그램이 참조할 수 있는 인위적인 파일 계층 구조를 만들어 문제를 훨씬 간단하게 해결할 수 있습니다.
심볼릭 링크를 사용하면 다양한 프로그램의 요구 사항을 수용하기가 쉬워지지만, 그만큼 파일시스템 분석은 더 복잡해진다는 점도 기억해야 합니다.
심볼릭 링크의 문제점
심볼릭 링크가 정상적으로 작동할 때는 실제로 존재하는 파일까지의 명확한 경로를 제공합니다. 하지만 실패한 심볼릭 링크는 존재하지 않거나 이미 삭제된 파일을 가리킵니다. 이런 깨진 심볼릭 링크는 사람 사용자와 링크의 정확성에 의존하는 프로그램 모두에게 혼란을 일으킵니다.
심볼릭 링크가 가리키는 파일이 교체되면, 링크는 내용물과 상관없이 새 파일을 계속 가리킵니다. 이러한 '무조건 신뢰' 방식 덕분에 링크 체이닝(link chaining)과 상대 링크(relative link)가 가능해집니다.
특히 링크 체이닝에서는 한 링크가 다른 링크를 참조하고, 그 링크가 다시 첫 번째 링크를 되돌아가는 경우 무한 루프에 빠지는 순환 링크(cyclic link)가 발생할 수 있습니다.
이런 문제는 반드시 사람의 실수 때문만은 아닙니다. 비효율적인 장치 마운트 표준이나 특정 자동화 프로세스도 소위 '데드 링크(dead link)'라고 불리는 깨진 링크를 의외로 많이 만들어내는 원인이 됩니다. 바로 이 지점에서 체계적인 관리 기술이 필요합니다.
심볼릭 링크 관리하기
리눅스 시스템에는 심볼릭 링크를 처리하기 위한 다양한 유틸리티가 기본으로 제공됩니다. coreutils에 기본 포함된 ln 명령어는 터미널에서 링크를 생성할 때 사용됩니다.
하지만 심볼릭 링크를 완전하게 관리하려면 링크를 빠르게 찾고 분석할 수 있어야 합니다. 이를 위한 간단한 커맨드라인 도구로는 이름 그대로 symlinks가 적격입니다.
Fedora처럼 이 도구가 기본 설치되어 있는 배포판도 있지만, Ubuntu 같은 배포판에는 포함되어 있지 않습니다. 우분투에서 'symlinks'를 설치하려면 터미널 창을 열고 다음 명령어를 입력하세요:
sudo apt install symlinks
심볼릭 링크 생성하기
리눅스에서는 터미널에서 손쉽게 심볼릭 링크를 만들 수 있습니다. 아래 코드를 입력하고, 'original-file.txt'를 원하는 대상 파일의 이름과 확장자로, 'linkname'을 원하는 링크 이름으로 바꾸면 됩니다.
ln -s original-file.txt linkname
ln 유틸리티는 링크를 생성하는 도구로, 실행하면 즉시 링크가 만들어집니다. 위 명령어에 포함된 -s 옵션은 생성되는 링크를 심볼릭 링크로 지정합니다.
같은 명령어에 -r 옵션을 추가하면 다음과 같이 상대 경로 기반의 심볼릭 링크도 만들 수 있습니다:
ln -rs original-file.txt linkname
상대 링크는 마운트 지점이 변경되더라도 계속 정상적으로 작동한다는 장점이 있습니다.
심볼릭 링크 찾기
앞서 소개한 symlinks 유틸리티를 사용하면 특정 디렉터리 내의 심볼릭 링크를 간단히 찾을 수 있습니다. 명령어는 다음과 같습니다. ('directory-name'을 검색하려는 디렉터리의 전체 경로로 바꾸세요.)
symlinks -v directory-name
여기에 r 옵션을 추가하면 지정한 디렉터리 내부의 파일들을 재귀적으로 검사합니다:
symlinks -rv directory-name
순환 링크 문제가 걱정된다면 재귀 옵션 사용에 주의하세요. 순환 링크는 스스로를 잘못 참조하여 무한히 반복되는 링크로, symlinks 유틸리티가 무한 구조를 탐색하느라 멈추는(hang) 현상을 일으킬 수 있습니다.
재귀 옵션 없이 실행한 명령은 순환 링크를 단순히 'dangling', 즉 깨진 링크로 표시해 줍니다. symlinks 도구가 가진 분석 능력 덕분에 이렇게 깨진 링크를 실제로 복구할 수 있습니다.
심볼릭 링크 수정하기
symlinks 유틸리티를 사용하면 특정 디렉터리의 심볼릭 링크를 비교적 간단하게 수정할 수 있습니다. 사용 명령어는 다음과 같습니다:
symlinks -cds directory-name
위 명령어는 여러 작업을 한 번에 수행합니다. 발견한 절대 링크를 상대 링크로 변환하고, 깨진(dangling) 링크를 삭제하며, 경로에 '../'가 많이 포함된 '긴' 링크를 축약합니다.
작업 결과가 걱정된다면, 실제로 변경하지 않고 -c 옵션만 적용했을 때 어떤 변화가 생기는지 미리 확인할 수 있습니다:
symlinks -t directory-name
이제 심볼릭 링크가 무엇인지, 그리고 이를 효율적으로 관리하는 방법을 더 잘 이해하게 되었기를 바랍니다. symlinks 유틸리티의 나머지 기능들도 살펴보면 파일시스템에서 더욱 세밀한 작업을 수행할 수 있습니다.