리눅스 링크의 기본 개념 이해하기
리눅스를 포함한 유닉스 계열 운영체제에는 "모든 것은 파일이다"라는 철학이 바탕이 되어 있습니다. 그리고 파일은 근본적으로 아이노드(inode)에 대한 링크입니다. 아이노드란 파일의 이름과 실제 내용을 제외한 나머지 모든 메타데이터를 저장하는 자료 구조입니다.
하드 링크(hard link)는 다른 파일과 동일한 아이노드를 가리키는 파일을 의미합니다. 파일 하나를 삭제하면 해당 아이노드를 참조하는 링크가 하나 줄어들 뿐입니다. 반면 심볼릭 링크(symbolic link, 소프트 링크라고도 함)는 파일시스템에 존재하는 다른 파일 이름을 가리키는 링크입니다.
두 링크 유형의 또 다른 중요한 차이점은 하드 링크는 같은 파일시스템 안에서만 생성할 수 있지만, 심볼릭 링크는 서로 다른 파일시스템 사이에서도 사용할 수 있다는 점입니다.
리눅스에서 하드 링크 생성하는 방법
리눅스에서 하드 링크를 만들려면 ln 유틸리티를 사용합니다. 예를 들어 다음 명령어는 topprocs.sh 파일에 대한 하드 링크 tp를 생성합니다.
$ ls -l $ ln topprocs.sh tp $ ls -l
위 출력 결과를 보면 ls 명령어로 확인했을 때 새로 생성된 파일이 링크로 표시되지 않고 일반 파일처럼 나타납니다. 즉, tp는 topprocs.sh와 동일한 아이노드를 가리키는 또 하나의 일반 실행 파일인 것입니다.
만약 대상이 심볼릭 링크라면, 링크가 가리키는 원본이 아니라 심볼릭 링크 자체에 대한 하드 링크를 만들 때 -P 옵션을 사용합니다.
$ ln -P topprocs.sh tp
리눅스에서 심볼릭 링크 생성하는 방법
심볼릭 링크를 만들 때도 동일한 ln 유틸리티에 -s 옵션을 함께 사용합니다. 예를 들어 다음 명령어는 topprocs.sh 파일을 가리키는 심볼릭 링크 topps.sh를 생성합니다.
$ ln -s ~/bin/topprocs.sh topps.sh $ ls -l topps.sh
출력 결과의 파일 권한 부분을 살펴보면 topps.sh 항목 앞에 l 문자가 표시되어 있습니다. 이는 해당 항목이 다른 파일 이름을 가리키는 링크임을 나타내는 표시입니다.
만약 같은 이름의 심볼릭 링크가 이미 존재한다면 오류가 발생할 수 있습니다. 이럴 때 -f 옵션을 사용하면 기존 심볼릭 링크를 강제로 삭제한 후 새로 생성하게 됩니다.
$ ln -s ~/bin/topprocs.sh topps.sh $ ln -sf ~/bin/topprocs.sh topps.sh
명령 실행 과정을 더 자세히 확인하고 싶다면 -v(verbose) 옵션을 추가해 보세요. 링크된 각 파일의 이름이 출력에 표시되어 무엇이 처리되었는지 한눈에 파악할 수 있습니다.
$ ln -sfv ~/bin/topprocs.sh topps.sh $ ls -l topps.sh
마무리
이번 글에서는 리눅스에서 하드 링크와 심볼릭 링크의 차이점을 이해하고, ln 명령어를 활용해 두 종류의 링크를 생성하는 방법을 알아보았습니다. 더 깊이 있는 학습을 원한다면 아래 관련 주제도 함께 확인해 보세요.
- fdupes – 리눅스에서 중복 파일을 찾아 삭제하는 커맨드 라인 도구
- 리눅스에서 파일 형식과 시스템 시간을 관리하는 5가지 유용한 명령어
하드 링크와 심볼릭 링크를 잘 활용하면 파일 관리 효율이 크게 향상됩니다. 궁금한 점이나 의견이 있다면 언제든지 피드백으로 공유해 주세요.