• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    미해결

Directory Entry, 하드링크, 원본파일?

21.06.29 01:09 작성 조회수 205

1

안녕하세요.

강의를 보다가 궁금한 점이 있어 질문 남깁니다.

만약 /aaa 디렉토리가 있고 그안에 aaa.txt, bbb.txt, ccc.txt 라는 파일이 있을때요.

/aaa 라는 디렉토리 안에 aaa.txt, bbb.txt, ccc.txt 라는 파일이 있는줄 알수 있는 이유가 inode가 가르키는 File Data 란곳에 aaa.txt, bbb.txt, ccc.txt 라는 파일의 각각의 Directory Entry 가 3개가 배열이나 리스트로 저장되어 있기 때문인가요?  (만약 디렉토리 별로 . 이랑 ..  까지 있다고 한다면 5개가 되겠네요 <- 이것도 질문입니다)

만약 그렇다면 inode가 가르키는 File Data 라는 부분에는 텍스트파일이나 이진파일같은 일반파일 같은경우 실제 데이터가 저장되어 있는거고 만약 디렉토리라면 그안에 들어있는 Directory Entry 목록을 가지고 있다고 생각하면 될까요?

그리고 하드링크랑 원본파일이랑 차이점이 있나요? 그냥 링크의 개념을 설명하기 위해 나눈건가요?

만약 차이가 없다면 예를 들어 touch originalFile 이라고 했을때 이 원본파일을 하드링크파일이라고 말해도 되는 건가요? 아님 명시적으로 ln 명령을 이용해서 하드링크를 만든 파일만 하드링크파일이라고 불러야 하는건가요?

답변 1

답변을 작성해보세요.

1

안녕하세요. 보물섬님.

directory entry라는 용어가 "directory에 포함된 개체"라고 생각하시면 됩니다. directory 내의 파일을 관리하는 곳에서 directory entry의 목록을 관리하고 있다고 생각하시면 됩니다. 그래서 어떤 디렉터리 내의 파일 목록을 조회할 수 있는 것입니다.

"."과 ".."은 각각 현재 디렉터리와 부모 디렉터리를 나타내는 것으로 모든 디렉터리에서 조회가 됩니다. 그런데 이것들은 directory entry로 존재하는 것은 아닙니다. 모든 디렉터리에 필요한 개념인 것이지 모든 디렉터리에 파일로 존재하는 것은 아닙니다. 따라서 질문의 예제에서는 3개의 directory entry가 존재하겠네요.

file data 영역은 실제 커널 자료구조 상에 보이는 것은 아닙니다. 개념적으로 파일의 내용이 저장된 곳이라는 의미에요. 그런 의미에서 file data 영역에 directory entry 목록이 있다라고 이해하셔도 될 것 같습니다.

원본 파일과 하드링크 된 파일은 차이가 없습니다. 구분할 수도 없구요. 일반적으로 하나의 파일은 하나의 링크(하드링크)를 갖고 있습니다. 거기에 하드 링크를 하나 추가하면 링크가 둘 인 파일이 됩니다. 이 과정에서 먼저 만든 파일을 원본 파일, 하드 링크를 생성한 파일을 하드 링크 파일이라고 부르지만, 말씀하신 대로 그 두 파일 간의 차이가 없기 때문에 뭐라고 불러도 상관은 없습니다. 그냥 두 파일이 하드링크로 연결되어 있다고만 말할 수 있으면 될 것 같습니다. 

더 궁금한 내용 있으시면 추가 질문 남겨주세요~