Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스 ln 명령어로 심볼릭 링크(소프트 링크) 만드는 방법

이 튜토리얼에서는 리눅스에서 ln 명령어를 사용하여 심볼릭 링크(symbolic link), 흔히 말하는 '소프트 링크(Soft Link)'를 만드는 방법을 알아봅니다.

윈도우 환경에 익숙한 분이라면 바로 가기(Shortcut) 개념을 잘 알 것입니다. 바로 가기 파일에는 실제 데이터가 전혀 들어 있지 않고, 접근하려는 실제 파일이나 폴더를 가리키는 링크 정보만 담겨 있습니다.

이러한 링크는 단순히 편의를 위해 존재하기도 합니다(중첩된 폴더를 매번 클릭해서 들어가는 수고를 덜기 위해). 또는 출력 경로를 우회하는 용도로도 쓰입니다. 예를 들어 프로그램이 특정 디렉터리에 파일을 출력하도록 하드코딩되어 있는데, 그 결과물을 다른 위치로 보내고 싶은 경우가 그렇습니다.

리눅스의 소프트 링크(심링크)도 본질적으로 동일한 목적으로 사용됩니다.

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

  • 소프트 링크(심볼릭 링크 또는 심링크라고도 함)는 파일 시스템상 다른 파일이나 폴더의 '위치'를 참조합니다.
    • 따라서 링크 대상 파일이 삭제되면, 소프트 링크는 존재하지 않는 파일을 가리키게 되므로 무의미해집니다.
    • 소프트 링크는 링크된 파일의 위치를 참조할 뿐이므로 서로 다른 파일 시스템에 걸쳐 존재할 수 있습니다.
    • 권한(permission)은 링크와 대상 간에 공유되지 않습니다.
  • 하드 링크는 대상 파일의 미러 복사본과 같으며, 두 항목 모두 저장 장치의 동일한 데이터를 가리킵니다.
    • 따라서 하드 링크된 파일 중 하나를 삭제해도 데이터 자체는 삭제되지 않으며, 나머지 하드 링크가 여전히 파일 시스템에 남아 있습니다.
      • 파일 시스템은 디스크의 해당 파일을 참조하는 참조(reference) 수를 계속 추적합니다. 모든 하드 링크가 삭제되어 참조 카운트가 0이 되면 그때 비로소 파일이 삭제되고, 해당 데이터 공간은 회수되어 다른 파일 저장에 재사용될 수 있습니다.
    • 동일한 데이터에 대한 두 개의 참조이므로 반드시 같은 파일 시스템 안에 존재해야 합니다.
    • 권한은 공유됩니다. 링크와 대상은 사실상 디스크상 같은 파일을 두 곳에서 참조하는 것이기 때문입니다.

기본 문법

ln [OPTIONS] SOURCE_PATH LINK_PATH

참고할 점:

  • SOURCE_PATH에는 파일과 폴더 모두 지정할 수 있습니다.
  • 소프트 링크는 LINK_PATH 위치에 생성됩니다.

주요 옵션

ln 명령어에 사용할 수 있는 옵션은 다음과 같습니다:

옵션 설명
-F 생성하려는 링크(link_name)가 이미 존재하고 디렉터리인 경우, 링크 생성을 위해 해당 디렉터리를 제거합니다. -F 옵션은 -f 또는 -i 옵션과 함께 사용해야 하며, 아무것도 지정하지 않으면 -f가 적용됩니다. -s 옵션이 함께 지정되지 않으면 -F는 아무 동작도 하지 않습니다.
-h link_name 또는 link_dirname이 심볼릭 링크인 경우 이를 따라가지 않습니다. 디렉터리를 가리킬 수 있는 심볼릭 링크를 교체할 때 -f 옵션과 함께 쓰면 가장 유용합니다.
-f 생성하려는 링크(link_name)가 이미 존재하면 이를 unlink(연결 해제)하여 새 링크가 생성되도록 합니다. (-f 옵션은 앞서 지정한 -i 옵션보다 우선합니다.)
-i 생성하려는 링크가 이미 존재하면 표준 에러(standard error)로 확인 메시지를 출력합니다. 표준 입력의 응답이 y 또는 Y로 시작하면 기존 링크를 unlink하여 새 링크를 생성하고, 그렇지 않으면 링크를 시도하지 않습니다. (-i 옵션은 앞서 지정한 -f 옵션보다 우선합니다.)
-n -h와 동일하며, 다른 ln 구현체와의 호환성을 위해 제공됩니다.
-s 심볼릭 링크를 생성합니다.
-v 처리 과정에서 파일들을 상세히(verbose) 출력합니다.

위 옵션들과 ln 명령어에 대한 전체 세부 내용은 다음 명령으로 사용자 매뉴얼에서 확인할 수 있습니다:

man ln

실습 예제

간단한 심볼릭 링크(줄여서 심링크)를 만들어 보겠습니다. 먼저 파일을 하나 생성합니다:

touch test_file.txt

그다음 이 파일에 대한 소프트 링크를 만듭니다:

ln -s test_file.txt link_to_test_file

다음 명령으로 링크가 잘 생성되었는지 확인할 수 있습니다:

ls -l

실행 결과는 대략 다음과 같습니다:

-rw-r--r--  1 user  staff        0  2 Jan 01:31 test_file.txt
lrwxr-xr-x  1 user  staff        9  2 Jan 01:32 link_to_test_file -> test_file.txt

출력 결과를 해석해 보면:

  • 첫 번째 열의 문자들은 파일/폴더의 유형과 권한을 나타냅니다.
  • 그다음 숫자는 포함된 파일(링크) 수입니다.
  • user/staff는 해당 파일·폴더에 대한 권한을 가진 사용자/그룹입니다.
  • 이후 파일 크기, 수정 날짜, 이름 순으로 표시됩니다.
  • 행 맨 앞의 l 문자가 보이나요? 이것이 링크(link)라는 의미입니다.
  • 또한 끝부분의 -> 표시는 이 파일이 test_file.txt에 연결되어 있음을 보여줍니다.
  • 즉, 확실히 링크라는 뜻입니다.

마무리

대부분의 시스템에 로그인하면 사용자 홈 디렉터리로 바로 진입하게 됩니다. 매번 긴 경로를 타이핑하는 대신, 그날 작업할 디렉터리(예: 배포 중인 웹 앱의 파일이 있는 디렉터리)에 대한 소프트 링크를 홈 디렉터리에 만들어 두면, 다시 돌아갈 때마다 전체 경로를 입력할 필요가 없어 편리합니다.

이처럼 심볼릭 링크는 실무에서 꽤 유용하게 활용됩니다.

리눅스가 처음이라면? 오늘 배운 내용을 바로 실습해 보세요!