Watch at Ease세상을 읽고, 일상의 답을 찾다.

기술 · 실용 가이드

Linux “Too many levels of symbolic links”? 삭제 전에 전체 경로를 추적하세요

원래 caller와 pathname을 고정하고 링크를 숨기지 않은 채 component별로 조사한 뒤 증명된 loop 또는 과도한 깊이만 고칩니다.

caller 기록, component 추적, link target 확인, ELOOP 분류를 보여 주는 원본 개념도.
원본 일러스트: symlink를 바꾸기 전에 첫 repeated transition을 찾습니다. Watch at Ease

“Too many levels of symbolic links”는 pathname 해석 결과이지 표시된 path를 삭제해도 된다는 뜻이 아닙니다. 직접 self-link, 더 긴 cycle, 또는 traversal limit을 넘은 유효 chain일 수 있습니다.

안전한 대응은 원래 failing caller에서 path chain을 감사하는 것입니다. 저장 target을 보존하고 첫 repeated transition을 찾아 한 곳만 고친 뒤 원래 작업을 다시 검증합니다.

원래 caller와 전체 pathname을 고정하세요

전체 오류, 명령, 사용자, 작업 디렉터리, PATH, 정확한 pathname을 보존하고 host shell, service, chroot, container, mount namespace 중 어디인지 기록합니다. 다른 환경의 성공은 동등한 증거가 아닙니다.

rm, rm -r, ln -sf로 시작하지 마세요. directory entry와 각 symlink의 저장 target부터 보존합니다. trailing slash와 PATH lookup은 kernel이 해석하는 component를 바꿀 수 있습니다.

링크를 숨기지 말고 component별로 추적하세요

정확한 path에 namei -l을 실행해 각 component의 type, owner, target을 기록합니다. 의심 지점은 dereference하지 않는 lstat/stat와 readlink로 확인하고 relative target은 링크의 부모 directory 기준으로 풉니다.

이미 본 component 또는 inode로 돌아가는 첫 transition을 표시합니다. A→A self-loop와 A→B→C→A cycle을 구분하고 부모 directory와 namespace도 원장에 남깁니다.

ELOOP 분기를 분류하세요

Linux는 한 pathname에서 40개가 넘는 symlink를 따라가도 ELOOP를 반환하므로 cycle이 없는 긴 chain도 실패합니다. 반복인지 단순 초과인지 증명하고 깊은 chain 단축과 cycle 제거를 구분합니다.

여러 명령이 실패하면 PATH의 각 directory를 독립 pathname으로 검사합니다. service나 container만 실패하면 root, mount, working directory를 host와 비교합니다.

증명된 transition만 고치세요

잘못된 link가 확인되면 이전 target을 기록하고 그 entry만 올바른 relative 또는 absolute target으로 바꿉니다. 모호한 link path에 rm -r을 쓰지 말고 link, directory, mount boundary 중 무엇인지 먼저 증명합니다.

유효하지만 너무 깊은 chain은 최종 object를 유지하며 줄입니다. PATH는 looping component만, namespace 차이는 정상 host link가 아니라 mount/deployment view를 수정합니다.

원래 caller로 acceptance를 재현하세요

namei -l을 다시 실행해 의도한 object에서 끝나고 반복 transition과 한도 초과가 없는지 확인한 뒤 같은 user, working directory, namespace에서 원래 명령을 재실행합니다.

구조와 caller 증거가 모두 필요합니다. chain이 올바르고 원래 작업이 성공하며 임시 우회, recursive deletion, 잘못된 target이 남지 않았는지 확인하고 전후 원장을 보존합니다.

증거 보존, 한 link의 정밀 수리, path 검증, 원래 caller 재실행을 보여 주는 원본 개념도.
원본 일러스트: 증명된 link만 고치고 원래 caller로 acceptance를 확인합니다. Watch at Ease