리눅스 파일 링크의 동작원리?

조회수 791회

이미지 CentOS 8, VM 버추얼박스에서 실행중입니다. 먼저 data1을 만들고 이에 대한 심볼릭 링크인 data1.sl을 만들었습니다. 그리고 data1을 삭제 후 cat data1.sl을 실행하니 '그런 파일이나 디렉터리가 없습니다'라고 뜹니다. 그런데 ln -s data1.cp data1.sl 명령을 입력하면 파일이 있다고 합니다. 물론 그러려니 하고 잘 해결할 수 있는 문제지만 왜 이렇게 작동하는지 문득 궁금해지네요.

고수 리눅서분들의 도움을 기다립니다

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 고수 리눅서는 아니지만... 간단한 얘기니까 아는체를 해보겠습니다.

    먼저 data1을 만들고 이에 대한 심볼릭 링크인 data1.sl을 만들었습니다.

    이 시점에서 data1.cp 파일과 data1.sl 파일은 모두 존재합니다. 그리고 data1.sldata1.cp를 가리키는 특수한 파일이라는 사실을 잊지 맙시다.

    그리고 data1을 삭제 후 cat data1.sl을 실행하니 '그런 파일이나 디렉터리가 없습니다'라고 뜹니다.

    당연한 일입니다. cat data1.sl 실행시 OS는 data1.sl이 가리키고 있는 파일이 data1.cp임을 알아낸 뒤 cat data1.cp를 실행하려고 시도합니다. 그리고 data1.cp는 삭제되었으므로, 그런 파일이 없다는 에러가 발생합니다.

    그런데 ln -s data1.cp data1.sl 명령을 입력하면 파일이 있다고 합니다

    당연한 일입니다. ln -s A B를 실행하면 기본적으로 B 파일을 만들게 되는데 그 파일은 심볼릭 링크 파일이며 그 링크가 가리키는 것은 A가 됩니다. 그러니 OS는 data1.sl을 만들려고 시도하겠죠. 그런데 이미 data1.sl은 있습니다. (삭제된 건 data1.cp뿐입니다.) 그러니 파일이 있(어서 또 만들 수 없)다는 오류가 반환됩니다.

    어렵지 않지요?
    더 알아보기: "심볼릭 링크" 위키백과

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)