심볼릭 링크
100%

파일 시스템 · 레슨 12

심볼릭 링크

심볼릭 링크와 하드 링크가 경로 해석, inode 식별 정보 및 파일 시스템 범위에서 어떻게 다른지 알아봅니다.

디렉터리 항목은 inode에 이름을 부여합니다. 하드 링크는 같은 inode를 위한 다른 디렉터리 항목을 만들고, 심볼릭 링크는 해석할 경로 이름을 내용으로 가진 별도의 inode를 만듭니다. 이 차이에 따라 식별 정보, 수명 및 파일 시스템 간 동작이 결정됩니다.

심볼릭 링크 만들고 검사하기

ln -s TARGET LINK_NAME으로 심볼릭 링크를 만듭니다.

$ printf '%s\n' 'example' > myfile
$ ln -s -- myfile myfilelink
$ ls -li myfile myfilelink
151   -rw-r--r-- 1 user user 8 ... myfile
93403 lrwxrwxrwx 1 user user 6 ... myfilelink -> myfile

심볼릭 링크는 자체 inode를 가지며 myfile이라는 텍스트를 저장합니다. 프로그램이 myfilelink를 따르면 경로 이름 해석이 대상으로 계속됩니다. 링크를 따르지 않고 저장된 텍스트를 표시합니다.

$ readlink myfilelink

대상 텍스트가 myfile인 심볼릭 링크 myfilelink를 만드는 명령은 무엇입니까?

상대 및 절대 심볼릭 링크 대상

절대 대상은 /에서 시작합니다. 상대 대상은 나중에 누군가 열 때 셸의 현재 디렉터리가 아니라 심볼릭 링크를 포함한 디렉터리를 기준으로 해석됩니다.

$ mkdir -p tree/data tree/current
$ printf '%s\n' 'value' > tree/data/item
$ ln -s ../data/item tree/current/item

tree 계층 전체를 옮기면 이 상대 관계가 유지됩니다. 링크나 대상만 옮기면 끊어질 수 있습니다. 심볼릭 링크는 존재하지 않는 대상을 포함할 수 있으며 이를 끊어진 링크라고 합니다.

상대 심볼릭 링크 대상은 어디를 기준으로 해석됩니까?

하드 링크 만들기

-s 없이 기존 일반 파일에 다른 이름을 만듭니다.

$ ln -- myfile myhardlink
$ ls -li myfile myhardlink
151 -rw-r--r-- 2 user user 8 ... myfile
151 -rw-r--r-- 2 user user 8 ... myhardlink

두 이름은 같은 파일 시스템과 inode 번호에 매핑됩니다. 링크 수는 2가 됩니다. 어느 이름도 본질적으로 “원본”은 아닙니다. 한 이름을 통해 내용을 변경하면 공유 객체가 바뀌고 이름 하나를 제거해도 다른 이름은 남습니다.

inode 번호는 해당 파일 시스템 안에서만 의미가 있으므로 하드 링크는 파일 시스템 경계를 넘을 수 없습니다. 리눅스는 순환과 보안 문제를 막기 위해 일반 사용자가 디렉터리에 하드 링크를 만들지 못하게 하고 자신이 소유하지 않은 파일의 링크도 제한할 수 있습니다.

일반 파일 하나를 가리키는 두 하드 링크가 공유하는 것은 무엇입니까?

수명과 삭제

심볼릭 링크를 제거하면 대상이 아니라 링크 객체가 제거됩니다.

$ rm -- myfilelink

하드 링크 이름을 제거하면 공유 inode의 링크 수가 감소합니다. 링크 수가 0이 되고 열린 파일 기술이나 다른 파일 시스템 참조도 객체를 유지하지 않을 때만 파일 시스템이 객체를 회수할 수 있습니다.

디렉터리를 가리키는 심볼릭 링크를 제거할 때는 끝에 슬래시를 붙이지 마십시오. 명령에 따라 끝 슬래시 경로 해석이 디렉터리 의미를 따를 수 있습니다. ls -ld -- LINK로 검사하고 링크 이름을 의도적으로 제거하십시오.

심볼릭 링크 자체를 제거하면 일반적으로 어떻게 됩니까?

안전하게 링크 따르기

심볼릭 링크는 특권 프로그램을 예상 디렉터리 밖으로 리디렉션하거나 검증과 사용 사이에 바뀔 수 있습니다. 안전한 프로그램은 확인한 뒤 여는 경로 이름 경쟁을 피하고 언어와 운영체제에 맞는 디렉터리 상대, 링크 비추적 또는 제한된 해석 인터페이스를 사용해야 합니다.

일반적인 검사에는 다음 명령을 사용합니다.

  • ls -ld LINK는 링크 자체를 보여 줍니다.
  • readlink LINK는 저장된 대상 텍스트를 출력합니다.
  • stat LINK는 일반적으로 링크 메타데이터를 보고하고 GNU coreutils의 stat -L LINK는 링크를 따릅니다.
  • find -L은 링크를 따라가므로 순환을 만날 수 있습니다. 의도한 경우에만 사용하십시오.

lrwxrwxrwx로 표시되는 권한은 일반적인 접근 허용을 뜻하지 않습니다. 접근은 디렉터리 순회, 링크 추적 정책 및 대상 권한에 따라 결정되며 일부 보호 디렉터리 규칙에서는 심볼릭 링크 소유권도 중요합니다.

readlink LINK는 기본적으로 무엇을 출력합니까?

레슨 완료

심볼릭 링크 완료

이제 올바른 종류의 파일 시스템 링크를 선택하고 검사할 수 있습니다.

  • 경로 기반 심볼릭 링크에는 ln -s TARGET LINK를 사용합니다.

  • 상대 대상은 링크를 포함한 디렉터리에서 해석합니다.

  • 같은 파일 시스템의 inode에 다른 이름을 만들 때는 ln EXISTING LINK를 사용합니다.

  • 심볼릭 링크 해제와 하드 링크 해제를 구분합니다.

  • 특권 또는 재귀 작업에서 안전하지 않은 링크 추적을 피합니다.

학습 진행 상황 저장

무료 계정을 만들어 이 레슨을 저장하고 어떤 기기에서든 계속 학습하세요.

무료 계정 만들기
파일 시스템(으)로 돌아가기