ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION699 / 1500

심볼릭 링크의 target 경로가 바뀌면 같은 이름을 열어도 다른 inode가 나옵니다. symlink와 hard link의 traversal·identity 차이는 무엇인가요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

symlink는 target inode에 alias를 추가하지 않고 target pathname 문자열을 저장하는 별도 filesystem object입니다. data → v1이면 data 자체의 link object와 v1 inode가 서로 다르며 v1의 hard-link count를 올리지 않습니다. open("data") 같은 일반 pathname lookup은 symlink를 따라가 v1을 찾으므로, data의 binding을 v2로 교체한 뒤 새로 open하면 v2 inode를 얻게 됩니다. 반면 hard link는 a → inode42처럼 directory entry가 inode를 직접 가리키므로 다른 이름의 target 문자열을 바꿔도 inode identity가 변하지 않습니다. 시간순으로 보면 첫 open 뒤 FD1 → v1, symlink 교체 후 새 open은 FD2 → v2, FD1은 여전히 v1입니다. 즉 경로 lookup 시점과 open file reference 수명을 분리해야 합니다. readlink("data")는 link 객체 안의 문자열을 반환하고 target을 열지 않지만, open은 보통 마지막 component를 follow합니다. 모든 pathname API가 같은 follow 정책을 갖는다고 단정할 수 없고, no-follow 옵션과 보안 검사도 확인해야 합니다. 상대 symlink는 link가 있는 directory를 기준으로 해석될 수 있으며 target이 없거나 권한이 없으면 link 생성은 성공했어도 open은 실패할 수 있습니다. release 디렉터리를 symlink로 바꾸는 운영에서는 원자적인 이름 교체와 target bytes의 내구성을 별도 검증합니다. hard link는 같은 filesystem inode를 공유해 mount 경계를 넘지 못하고, symlink는 pathname lookup이 다른 mount로 넘어갈 수 있지만 target 접근 권한을 보장하지 않는다는 차이가 선택 기준입니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • symlink object가 target pathname을 저장하고 hard link가 inode를 직접 가리킨다는 identity 차이를 말합니다.
  • FD1→v1, link 교체, FD2→v2라는 open 시점별 상태를 제시합니다.
  • readlink의 문자열 조회와 open의 일반적인 follow 동작을 분리합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • symlink가 target inode의 hard-link count를 증가시킨다거나 기존 FD가 새 target으로 이동한다고 말하면 안 됩니다.
  • 모든 pathname API가 항상 follow한다고 단정하지 않고 no-follow 의미를 확인합니다.
  • symlink 생성 성공을 target 존재·권한·mount 유지의 증거로 해석하지 않습니다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 상대 경로 기준 directory와 dangling target을 별도 테스트합니다.
  • 원자적인 link 이름 교체와 target bytes의 내구성을 서로 다른 검증으로 둡니다.
  • 보안 경로 처리에서는 traversal 권한과 no-follow 옵션까지 확인합니다.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

← 전체 질문 보기