[리눅스] 하드 링크와 심볼릭 링크 차이점과 파일 용량
ETC./Linux

[리눅스] 하드 링크와 심볼릭 링크 차이점과 파일 용량

뉴비뉴 2024. 2. 5.

 

 안녕하세요.

리눅스 공부를 하다가 하드 링크와 심볼릭 링크의 차이점과 파일 용량과 관련 된 내용을 배워보겠습니다.

하드 링크(hard link)란

  • 하드 링크는 원본 파일과 동일한 inode를 직접적으로 가리킨다.
  • 원본 파일이 사라지더라도 데이터만 살아 있다면 원본 파일에 접근이 가능하다.
  • 디렉터리 링크는 생성이 불가능하다. 즉 파일시스템만 가능하다.
  • 원본 파일과 하드 링크된 파일은 완전히 같다.
  • 하드 링크는 동일한 inode를 공유하기 때문에 별도의 저장 공간을 필요로 하지 않습니다. 
    따라서 용량 증가 없이 새로운 파일명을 생성할 수 있습니다.
  • 하드 링크를 생성할 땐 ln 을 사용합니다.
  • 원본 파일을 삭제하거나 이름을 바꾸거나 이동해도 하드 링크는 기본 inode에 연결되므로 영향을 받지 않습니다.
  • 디렉터리 항목만 차지하므로 디스크 공간을 덜 차지할 수 있습니다.

copy란

  • `cp` 명령어를 사용하여 파일을 복사하면 새로운 파일이 생성됩니다.
  • 원본 파일과 복사본 모두 독립된 파일이므로 저장 공간이 2배가 됩니다.
    즉, 복사된 파일의 용량은 원본 파일과 동일합니다.
    EX] 원본 파일이 100MB이면 `cp` 명령어를 사용하여 복사된 파일도 100MB가 됩니다.

심볼릭 링크(symbolic link)란

  • 심볼릭 링크의 경우 만들게 되면 또 다른 inode 를 생성해서 원본 파일의 변경 사항을 반영합니다.
  • 심볼릭 링크를 생성할 땐 ln -s 옵션을 사용합니다
  • 원본 파일이 사라지면 해당 데이터에 접근할 수 없습니다.
  • 특정 데이터에 접근할 때, 심볼릭 링크를 통해 접근할 경우 다시 원본 파일을 거치게 된다.
  • 가리키는 이름을 저장하기 위해 자체 inode가 필요합니다.

실습

$ echo "111" > a
$ ln a b # 하드 링크
$ ln -s a c # 심볼릭 링크

 

"a", "b" 및 "c" 의 출력은 다음과 같습니다.

$ cat a --> 111
$ cat b --> 111
$ cat c --> 111

 

이제 "a" 파일을 제거하고 "a", "b" 및 "c" 의 출력이 어떻게 되는지 살펴보겠습니다.

$ rm a
$ cat a --> No such file or directory
$ cat b --> 111 # 하드 링크
$ cat c --> No such file or directory # 심볼릭 링크

$ ls -li

 

 

hard link 의 경우 inode 값이 같은 걸 확인할 수 있습니다.

하지만 symbolic link 의 경우 대표 사진처럼 inode 값을 새로 생성 했습니다.

 

그리고 파일 용량을 한번 확인해보겠습니다.

du -sh *

 

b가 안보이는 이유는 아직 찾지 못했습니다.

 

 

 하지만 확인할 수 있는 것은 사진과 같이 타이핑 하면 4.0 K 라는 값이 나옵니다.

하드 링크, 심볼릭 링크에 대한 문서를 아무리 찾아봐도 용량을 잡아 먹는 다는 말은 없었습니다.

 

그럼 a 를 한번 삭제해보고 용량을 확인하면 어떻게 될까요?

$ rm a
$ du -sh *

 

 b 용량이 나온 걸 확인할 수 있습니다.

즉, a와 b의 inode의 값은 동일 했습니다.

하지만 원본 파일이 삭제되자 b 는 원본 파일로 대체되지 않았나 생각이 듭니다.

 

현재 a 라는 파일이 삭제되어 있고, 심볼릭 링크는 No such file or directory 에러를 띄우고 있습니다.

그러면 다시 a 라는 파일을 만들어보고 b와 c를 확인해보겠습니다.

 

$ echo "777" > a
$ cat c # 777
$ cat b # 111

 

심볼릭링크의 경우 입력한 값을 제대로 출력하지만 하드 링크 b 의 경우 이전의 a 파일의 내용을 갖고 있습니다.

그러면 다시 용량을 확인해볼까요?

 

 

 즉, b 라는 값은 하드 링크로 생성이 되었지만 현재는 이전 a의 inode 를 가지고 있는 그냥 파일로 남게 되었습니다. 따라서 파일 "a" 가 삭제되면 더 이상 inode를 가리키지 않지만, 파일 "b" 가 이전 "a"의 inode를 가지고 있으므로 하드 링크 "b" 가 "a" 에 속한 모든 내용을 계속 저장합니다.

 

더 궁금한 점이나 잘못 설명되어 있는 내용은 댓글로 알려주시면 반영하겠습니다.

감사합니다.

 

 

'ETC. > Linux' 카테고리의 다른 글

DAY 10  (0) 2018.05.09
DAY 9  (0) 2018.05.03
DAY 5  (0) 2018.04.04
DAY 4  (0) 2018.03.28
DAY 3  (0) 2018.03.21

댓글

💲 추천 글