디렉터리 항목은 inode에 이름을 부여합니다. 하드 링크는 같은 inode를 위한 다른 디렉터리 항목을 만들고, 심볼릭 링크는 해석할 경로 이름을 내용으로 가진 별도의 inode를 만듭니다. 이 차이에 따라 식별 정보, 수명 및 파일 시스템 간 동작이 결정됩니다.
파일 시스템 · 레슨 12
심볼릭 링크
심볼릭 링크와 하드 링크가 경로 해석, 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는 기본적으로 무엇을 출력합니까?
리눅스 파일과 디렉터리 관리하기에서 폐기 가능한 파일로 링크를 연습하고 inode 번호를 비교해 보십시오.
레슨 완료
심볼릭 링크 완료
이제 올바른 종류의 파일 시스템 링크를 선택하고 검사할 수 있습니다.
경로 기반 심볼릭 링크에는
ln -s TARGET LINK를 사용합니다.상대 대상은 링크를 포함한 디렉터리에서 해석합니다.
같은 파일 시스템의 inode에 다른 이름을 만들 때는
ln EXISTING LINK를 사용합니다.심볼릭 링크 해제와 하드 링크 해제를 구분합니다.
특권 또는 재귀 작업에서 안전하지 않은 링크 추적을 피합니다.