Original article: Symlink Tutorial in Linux – How to Create and Remove a Symbolic Link

심링크(symlink) 또는 심볼릭 링크(symbolic link)는 리눅스의 파일의 한 종류로, 컴퓨터의 다른 파일이나 폴더를 가리킵니다. 심링크는 윈도우 운영체제의 '바로가기'와 유사합니다.

심링크는 리눅스(Linux)/유닉스(UNIX) 시스템의 링크의 한 종류인 "소프트 링크(soft link)"라고도 불리는데, 이는 "하드 링크(hard link)"의 반대 개념입니다.

소프트 링크와 하드 링크의 차이

소프트 링크는 '바로가기'와 유사하며 어떤 파일 시스템에서든 이미 생성되어 있는 다른 파일이나 디렉터리를 가리킬 수 있습니다.

하드 링크 역시 파일이나 폴더의 '바로가기' 역할을 하지만, 다른 파일 시스템에서는 만들어질 수 없습니다.

심링크를 생성하고 삭제하는 과정을 살펴봅시다. 깨진 링크가 무엇인지, 어떻게 이를 삭제하는지도 살펴보려고 합니다.

심링크를 생성하는 방법

심링크를 생성하는 문법은 아래와 같습니다.

ln -s <연결하고자 하는 원본 파일/폴더의 경로> <새로 생성하는 링크의 경로>

ln은 링크 명령어입니다. -s 옵션은 해당 링크를 소프트 링크로 만들어줍니다. -s 옵션은 -symbolic으로도 대체할 수 있습니다.

기본적으로 ln 명령어는 하드 링크를 생성합니다. 다음 인자(argument)는 연결하려고 하는 파일이나 폴더의 경로입니다. (즉, '바로가기'를 하려고 하는 파일이나 폴더를 말합니다.)

마지막 인자는 링크 경로 그 자체로, '바로가기'를 말합니다.

파일의 심링크를 생성하는 방법 - 예시 명령어

ln -s /home/james/transactions.txt trans.txt

위 명령어를 실행하고 나면, trans.txt/home/james/transactions.txt에 접근 가능합니다. trans.txt를 수정해도 그대로 원본 파일에 반영됩니다.

위 명령어는 링크 파일인 trans.txt을 현재 디렉터리 내부에 생성한다는 점을 기억해 두세요. 연결된 파일을 폴더 링크 안에 생성할 수도 있습니다.

ln -s /home/james/transactions.txt my-stuffs/trans.txt

현재 디렉터리에 "my-stuffs"라는 폴더가 이미 존재해야 합니다. 그렇지 않으면 명령어는 에러를 낼 것입니다.

폴더의 심링크를 생성하는 방법 - 예시 명령어

위와 유사하며, 아래와 같이 사용합니다.

ln -s /home/james james

이는 /home/james의 내부 콘텐츠를 포함한 심링크된 폴더인 'james'를 생성합니다. 연결된 폴더에 대한 어떤 변경 사항이든 원본 폴더에 영향을 줍니다.

심링크를 삭제하는 방법

심링크를 제거하기 전에, 파일들을 괜히 손대기 전에 파일이나 폴더가 심링크인지 확인하고 싶을 것입니다.

아래 명령어로 실행해 볼 수 있습니다.

ls -l <심링크라고 생각되는 경로>

터미널에 이 명령어를 실행하면 파일의 속성들이 표시될 것입니다. 그 결과로 나타나는 첫 문자가 소문자 L("l")이라면 파일/폴더가 심링크라는 의미입니다.

심링크가 가리키는 파일/폴더를 가리키는 화살표(->)를 확인할 수도 있습니다.

심링크를 삭제하는 두 가지 방법이 있습니다.

문법은 아래와 같습니다.

unlink <심링크 경로>

위 과정이 성공적으로 끝나면 심링크가 삭제됩니다.

폴더 형태의 심링크라 하더라도, '/'를 넣지 마세요. 리눅스는 이것이 디렉터리라고 간주하며, unlink는 디렉터리를 삭제하지 못합니다.

rm을 사용해 심링크를 삭제하는 방법

위에서 본 것과 같이 심링크는 원본 파일/폴더를 가리키는 또 다른 파일/폴더입니다. 이를 관계를 지우고 싶다면, 연결된 파일을 삭제하면 됩니다.

따라서 문법은 아래와 같습니다.

rm <심링크 경로>

예를 들어,

rm trans.txt rm james

리눅스는 'james/'를 디렉터리로 간주해 rf 같은 옵션이 필요하므로 rm james/를 실행한다면 에러가 날 것입니다. 이런 에러를 방지하기 위해서는 심링크가 폴더의 형태라도, (/ 없이) 폴더의 이름만 써주면 됩니다.

unlink보다 rm이 좋은 이유는 마치 파일처럼 한 번에 여러 심링크를 삭제할 수 있다는 것입니다.

깨진 링크(Broken Link)를 찾고 삭제하는 방법

깨진 링크는 심링크가 가리키던 파일이나 폴더의 경로가 변경되거나 삭제될 때 생깁니다.

예를 들어보자면, 'transactions.txt'가 /home/james에서 /home/james/personal로 이동할 경우 'trans.txt' 링크는 깨집니다. 파일에 접근하려고 하면 '해당 파일이나 디렉터리가 존재하지 않습니다'라는 에러를 낼 것입니다. 링크가 가지고 있는 정보가 없기 때문입니다.

깨진 링크를 발견하면, 파일을 쉽게 삭제할 수 있는데, 깨진 링크를 찾는 가장 쉬운 방법은 아래와 같습니다.

find /home/james -xtype l

이 명령어는 파일에서부터 디렉터리, 그 서브 디렉터리까지 돌면서 james 디렉터리의 모든 깨진 링크를 출력합니다.

-delete 옵션을 전달하면 아래처럼 해당 파일들을 삭제합니다.

find /home/james -xtype l -delete

마무리

심볼릭 링크는 리눅스와 유닉스 시스템의 흥미로운 기능입니다.

바로 접근하기에 불편한 파일 또는 폴더를 쉽게 열 수 있게 해주는 심링크를 생성할 수 있습니다. 조금만 연습하면 직관적인 수준에서 작동 원리를 이해할 수 있을뿐더러 파일 시스템을 더 효율적으로 관리할 수 있을 것입니다.