Linux 심볼릭 링크 활용법: 쉽고 간단한 설명
여기에서는 심볼릭 링크에 대해 학습합니다.
심볼릭 링크란, 특정 파일이나 디렉토리의 경로를 저장하여 이를 통해 실제 경로에 접근할 수 있게 하는 것입니다.
또한, ln 명령어나 unlink 명령어를 사용하여 심볼릭 링크를 편집할 수 있습니다.
심볼릭 링크란?
특정 파일 또는 디렉토리의 링크 경로를 저장한 별도의 파일을 말합니다.
심볼릭 링크에 접근하면 저장된 링크 경로로 이동할 수 있습니다.
UNIX 계열 OS에서는 일반적으로 ln 명령어를 사용하여 심볼릭 링크를 생성할 수 있습니다. 파일 시스템 상에서는 본체의 위치가 기록된 0바이트 크기의 파일이 나타납니다.
심볼릭 링크를 지정하여 작업을 수행하면, 작업 내용은 자동으로 본체에 반영됩니다.
반면, 심볼릭 링크를 삭제해도 본체에는 영향을 미치지 않습니다.
또한, 다른 파일 시스템이나 장치에 있어도 참조가 가능하며, 특정 파일이나 디렉토리가 존재하지 않거나 존재 여부를 알 수 없는 경우에도 심볼릭 링크를 생성할 수 있습니다.
단, 본체의 원래 위치가 변경되거나 파일명 및 디렉토리명이 변경된 경우에는 참조가 불가능해질 수 있습니다.

하드 링크는 심볼릭 링크와 비슷한 기능을 가지고 있습니다.
하드 링크는 특정 파일이나 디렉토리에 대해 여러 개의 이름(경로)을 설정할 수 있습니다.
심볼릭 링크처럼 링크 파일에서 접근하는 것이 아니라, 파일 자체에 대해 직접 작업을 할 수 있기 때문에 삭제하거나 위치나 이름이 변경되어도 참조할 수 있지만, 반드시 파일 시스템 내에 존재하는 파일이어야 설정할 수 있습니다.

Here is the translation of the provided content to Korean:
왜 필요한가? 위 설명의 밑줄 부분에서도 알 수 있듯이, 실제 현장에서 다른 파일이나 장치에서도 참조할 수 있다는 점이 크게 도움이 됩니다.
예를 들어, 어떤 프로젝트의 개발을 위해 가상 환경을 구축했다고 가정해봅시다.
테스트로 코드를 로컬에서 작성하고 싶을 때 등이 발생할 수 있습니다. 이런 경우, 기본적으로 직접 가상 환경의 파일이나 디렉터리에 접근할 수 없습니다.
왜냐하면, 가상 환경과 호스트 환경은 완전히 다른 것처럼 취급되기 때문입니다.
이 문제를 해결해주는 것이 바로 심볼릭 링크입니다.
하지만 단순히 심볼릭 링크를 만들었다고 해서 해결되는 것은 아니며, 다음과 같은 작업이 필요합니다.
특정 파일 또는 디렉터리 경로
링크 대상 본체에 대한 접근 권한 부여
물론 외부 환경에 접근하기 때문에, 접근하고자 하는 장소를 지정하고 접근할 수 있는 상태로 만들어 두는 것이 전제조건이 됩니다.
ln 명령어 심볼릭 링크의 생성 및 변경을 수행하는 명령어입니다.
생성 시 -s 옵션을 사용합니다.
기본 구문은 다음과 같습니다.
ln -s 링크원본 등록명
test 디렉터리 안에 test.txt가 있다고 가정해봅시다.
ls
test.txt
home 디렉터리에서 testFile이라는 이름으로 심볼릭 링크를 만듭니다.
생성할 때는 -s 옵션을 사용합니다.
ln -s test/test.txt testFile
ls -l로 심볼릭 링크를 확인해봅시다.
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
testFile이 test/test.txt를 참조하고 있다는 것을 알 수 있습니다.
또한, 파일 속성이 lrwxrwxrwx로 되어 있으며, 맨 앞의 l이 심볼릭 링크를 나타냅니다.
심볼릭 링크는 바로가기와 같은 개념이므로, 당연히 내용도 확인할 수 있습니다.
test.txt의 내용이 아래와 같다고 가정합니다.
# test.txt
testtest01
home 디렉터리에서 방금 만든 심볼릭 링크의 파일명을 사용해 cat 명령어로 내용을 표시해봅시다.
cat testFile
testtest01
이렇게 다른 디렉터리에 있는 파일에 접근할 수 있습니다.
주의 사항 심볼릭 링크를 만들 때 -s 옵션을 사용한다고 했습니다.
그렇다면, 옵션 없이 수행하면 어떻게 될까요?
옵션 없이 작업하면 하드 링크가 생성됩니다.
ln test/test.txt test01
ls -l test01
-rw-r--r-- 2 envader envader 11 2월 15 18:38 test01
파일 속성의 맨 앞에 아무것도 표시되지 않는 것을 확인할 수 있습니다.
심볼릭 링크를 만들려고 했지만 하드 링크가 생성된 것입니다. 이런 실수를 방지하려면 주의해야 합니다.
주요 옵션
옵션 | 설명 |
|---|---|
-s | 심볼릭 링크 생성 |
-f | 기존 심볼릭 링크의 내용을 덮어씌움 |
-n | 링크의 대상이 디렉터리일 경우, 참조 대상에 링크를 만들지 않고 심볼릭 링크 자체를 덮어씀 |
-i | 덮어쓸 때 확인 메시지가 표시됨 |
-v | 링크를 등록할 때, 등록할 이름과 링크 대상을 표시함 |
-b | 기존의 심볼릭 링크의 원본 링크를 백업하고 새로 등록함 |
--backup[=CONTROL] | 기존 심볼릭 링크의 원본 링크를 CONTROL에서 지정한 방법으로 백업하고 새로 등록함 |
-S[SUFFIX] | 백업된 원본 등록명의 뒤에 SUFFIX에서 지정한 문자를 추가함 |
-f 옵션 기존의 심볼릭 링크와 같은 이름으로 새로운 링크를 등록하려고 하면 에러가 발생합니다.
같은 이름을 사용해 다른 링크 대상을 등록하려면 -f 옵션을 사용하여 등록 내용을 덮어쓸 수 있습니다.
예시) testFile이라는 심볼릭 링크의 내용을 TEST 디렉터리의 TEST.txt로 덮어쓰기
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
# -f 옵션 없이
ln -s TEST/TEST.txt testFile
ln: failed to create symbolic link 'testFile': File exists # 에러 발생
# -f 옵션 사용
ln -fs TEST/TEST.txt testFile
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt # 덮어쓰기 완료
-n 옵션 심볼릭 링크 또는 하드 링크를 만들 때 참조 대상이 디렉터리일 경우, 심볼릭 링크 자체를 덮어씌웁니다 (-f 옵션과 함께 사용).
ls -l testFile
lrwxrwxrwx 1 envader envader 5 2월 15 18:19 testFile -> test/ # 참조 대상이 디렉터리
ln -fs TEST/TEST.txt testFile # 덮어쓰기
ls -l testFile
lrwxrwxrwx 1 envader envader 5 2월 15 18:19 testFile -> test/ # 덮어쓰기 되지 않음
참조 대상이 디렉터리인 심볼릭 링크를 다른 참조 대상으로 변경하려면 옵션을 -nfs로 설정합니다.
ln -nfs TEST/TEST.txt testFile
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt # 덮어쓰기 완료
-i 옵션
-f 옵션에서는 강제로 덮어쓰기가 진행되지만, 덮어쓸지 말지 확인 메시지를 받고 싶다면 -i 옵션을 사용합니다.
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
ln -i -s TEST/TEST.txt testFile
ln: replace 'testFile'? y # 확인 메시지 출력, y로 덮어쓰기 허용
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
-v 옵션
등록한 링크가 제대로 생성되었는지 확인하려면 이 옵션을 사용합니다.
ln -vs test/test.txt testFile
'testFile' -> 'test/test.txt' # 링크 생성 시 파일명과 링크 대상 표시
-b 옵션
기존의 심볼릭 링크와 동일한 이름으로 다른 링크를 등록할 때 덮어쓰지 않고 백업 파일을 만든 후 새로 등록하는 옵션입니다.
예시) 기존의 testFile이라는 심볼릭 링크를 백업하고, 동일한 이름으로
TEST/TEST.txt에 대한 심볼릭 링크를 생성하기
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
ln -bs TEST/TEST.txt testFile
ls -l testFile*
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 13 2월 19 18:19 testFile~ -> test/test.txt
백업 파일은 이름 끝에 ~ (틸다)가 추가됩니다.
따라서 파일을 검색하거나 표시할 때는 파일명 뒤에 * (별표)를 붙이면 표시됩니다.
--backup[=CONTROL] 옵션 이 옵션은 CONTROL에 파라미터를 설정하여 백업 파일의 세부 설정을 할 때 사용합니다.
아래는 번역된 내용입니다:
파라미터 종류
none 또는 off
백업을 명시적으로 생성하지 않도록 설정할 때 사용합니다.
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
ln --backup=none -s TEST/TEST.txt testFile
ln: failed to create symbolic link 'testFile': File exists
# 번역) 심볼릭 링크 생성 실패: 파일이 이미 존재합니다.
위와 같이 덮어쓰기와 함께 진행되며, 이미 testFile이라는 심볼릭 링크가 있기 때문에 에러가 발생합니다.
numbered 또는 t
백업 파일을 번호가 붙은 형태로 생성할 때 사용합니다.
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
ln --backup=numbered -s TEST/TEST.txt testFile
ls -l testFile*
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~1~ -> test/test.txt
백업 파일명이 testFile.1로 나타나듯이, 파일명 뒤에 1이 붙습니다.
번호가 붙은 백업 파일은 숨김 속성이 설정되어 있어, GUI 파일 관리자에서 링크를 확인하려고 할 때 기본 설정에서는 숨겨지게 됩니다.
existing 또는 nil
이미 백업된 이름에 번호가 붙은 백업 파일이 있을 경우, 연속 번호가 붙은 백업 파일을 생성할 때 사용합니다.
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
ln --backup=numbered -s TEST/TEST.txt testFile
ls -l testFile*
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 13 2월 19 18:19 testFile.~1~ -> test/test.txt
ln --backup=existing -s test/test2.txt testFile
ls -l testFile*
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test2.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~1~ -> test/test.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~2~ -> TEST/TEST.txt
simple 또는 never
이미 번호가 붙은 백업 파일이 있는 상태에서, 번호가 붙지 않은 동일한 이름의 백업 파일을 생성할 때 사용합니다.
ls -l testFile*
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test3.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~1~ -> test/test.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~2~ -> test/test2.txt
ln --backup=simple -s TEST/TEST.txt testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~1~ -> test/test.txt
lrwxrwxrwx 1 envader envader 14 2월 15 18:19 testFile.~2~ -> test/test2.txt
lrwxrwxrwx 1 envader envader 14 2월 15 18:19 testFile~ -> test/test3.txt
simple 파라미터를 사용하면, 파일명 뒤에 ~만 추가됩니다. 그 후 existing 파라미터를 사용하여 백업 파일을 생성하면, 연속 번호가 계속 추가됩니다.
ln --backup=existing -s test/test4.txt testFile
ls -l testFile*
lrwxrwxrwx 1 envader envader 14 2월 15 18:19 testFile -> test/test4.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~1~ -> test/test.txt
lrwxrwxrwx 1 envader envader 14 2월 15 18:19 testFile.~2~ -> test/test2.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile.~3~ -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 14 2월 15 18:19 testFile~ -> test/test3.txt
-S [SUFFIX] 옵션
이 옵션은 임의의 문자를 백업 파일에 추가할 수 있습니다.
ln -s test/test.txt testFile
ln -S Envader -s TEST/TEST.txt testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> TEST/TEST.txt
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFileEnvader -> test/test.txt
디렉토리의 의미가 있는 *, / 등의 일부 기호 문자는 사용할 수 없다는 점에 유의해야 합니다.
unlink 명령어
이 명령어는 심볼릭 링크나 하드 링크를 삭제할 때 사용됩니다.
ln -s test/test.txt testFile
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
unlink testFile
ls -l testFile
ls: cannot access 'testFile': No such file or directory
주의사항
링크를 삭제할 때 심볼릭 링크가 아닌 원본 링크를 삭제하면, 해당 원본 파일 또는 디렉토리가 삭제될 수 있으므로 주의해야 합니다.
ln -s test/test.txt testFile
ls -l testFile
lrwxrwxrwx 1 envader envader 13 2월 15 18:19 testFile -> test/test.txt
unlink test/test.txt # 원본 링크
ln test/test.txt testFile # -s 옵션을 추가하지 않고 하드 링크를 만들어 보세요.
ln: failed to access 'test/test': No such file or directory
# 번역) 심볼릭 링크 생성 실패: 파일 또는 디렉토리가 존재하지 않습니다.
unlink 명령어를 사용할 때는 반드시 삭제 대상이 심볼릭 링크 또는 하드 링크인지 확인해야 합니다.
요약
이번에는 심볼릭 링크와 ln 명령어, unlink 명령어에 대해 배웠습니다. 이를 잘 활용하면 파일이나 디렉토리 접근이 용이해지고, 여러 시스템을 넘나드는 접근도 용이해지므로 다양한 방법을 시도하면서 사용법을 익혀 보세요.