[질문] 하드링크가 위험한 이유는?

hidRomeo의 이미지

리눅스(유닉스 파일시스템) 발표자료 준비중에...
"디렉토리에 대한 하드링크는 위험하므로 root 이외에는 호출이 금지되어있다"
라는 내용에 대해서 설명을 붙이려고 합니다.

리눅스 시스템상에서 실험을 해봤지만,
Permission now allowd 라는 메시지만 뿌려주네요.
리눅스에서는 기본적으로, 디렉토리에 대한 하드링크는 지원하지 않는 듯...

심볼릭링크가 있기에 써먹을 일은 없겠지만,
디렉토리 하드링크의 위험성에 대해서 알고 싶습니다.
도움 주시면 감사하겠습니다.

advanced의 이미지

위험한 이유가 무엇인지

저도 정확히 어디서 본적은 없습니다만

글을 읽고 생각해 보았습니다.

많은 이유가 있겠지만 생각해본 대략적인 위험요소는 이렇습니다

유닉스의 파일시스템에서는 존재하는 파일들의

inode 를 inode 리스트에 저장하고 있죠

그런데 inode 의 link 계수가 0 이 되면 실질적인 inode 를 지워주게

됩니다.

이러면 파일이 삭제되는거죠

그런데 하드 링크는 inode 만 여러 이름으로 link 해서 사용하게 됩니다

이러한 이유로 디렉토리를 하드링크하였다면

만약 어떤 디렉토리 구조에서 같은 inode 를 링크한 디렉토리가

두개가 있다고 한다면

그 디렉토리 구조의 삭제등에서 문제가 생길 소지가 충분히 있는것 같습니다.

또한 하드 링크된 디렉토리들의 하위 디렉토리간의 계속적으로 하드 링크가 난잡하게 된다면

디렉토리 구조가 엉망진창이 될것두 갖구요(전혀 계층적이지 않은 디렉토리구조가 될듯)

저도 더 자세히 알고 싶은데 더 잘 아시는 분이 정확한 답변을 올려주시면

감사하겠네요

- advanced -

myroot의 이미지

리눅스 커널의 이해에서 본 건데요....

Quote:

Users are not allowed to create hard links for directories. This might transform the
directory tree into a graph with cycles, thus making it impossible to locate a file
according to its name.

이렇다는데요... ( 어설프게 해석하는 거보다 원문을 올리는게 나을것 같아서 ;;;; )

oosap의 이미지

좋은 답변 정확한 통찰인 것 같아요...
거울 두개를 마주보게 하면 끝없이 반복하게 된다는 얘기같네요...
이런걸 뭐라 부르죠? 무한루프는 아닌데 ... 리커시브콜의 위험성!과 같은 얘기인거죠? 아마도..

Thanks for being one of those who care for people and mankind.
I'd like to be one of those as well.

익명 사용자의 이미지

그건 symbolic link라도 생기는 문제인데
거기에는 아무 제약이 없네요.
설명이 좀 적절하지 않은듯.

planetarium의 이미지

symbolic link의 경우는 원본과 링크를 구분하기 때문에,
디렉토리 구조를 파고 들어가다가 열몇개 이상의 symlink를 거치게 되면
"something wrong" 판단하고 멈추게 됩니다.

hard link는 원본의 개념 자체가 사라지기 때문에 이런 접근법이 불가능하죠.

Necromancer의 이미지

하드링크의 또다른 제약이 있다면 하드링크는 타 파티션에 존재하는 파일에
대해서는 못걸죠.

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.