[linux] 심볼릭 링크와 하드링크란?


심볼릭 링크와 하드링크란?


심볼릭 링크 (Symbolic or Soft link)

Symbolic link는 soft link라고도 불리우는데 여기에서는 Symbolic으로 명칭하겠습니다.

원본 파일의 이름을 가르키는 링크로서 원본 파일이 사라지면 역할을 수행할 수 없습니다.
윈도우의 '바로가기' 기능과 비슷하다고 생각하시면 됩니다.

윈도우의 '바로가기' 기능은 파일 관리자가 담당하는 기능인 반면, 리눅스의 링크는 파일 시스템 차원에서 제공되기에 차이점은 분명히 존재합니다.
이해를 돕는 차원으로 윈도우의 '바로가기' 기능과 비슷하다고 생각하셔야하며 똑같은 개념이 아닙니다.

Symbolic Link를 만들어보겠습니다.

test라는 디렉토리를 생성합니다.
$ mkdir test

test 디렉토리에 들어갑니다.
$ cd test

Test symbolic link in linux라는 문구가 들어있는 original.file을 생성합니다.
$ echo "Test symbolic link in linux" > original.file

original.file의 내용 확인합니다.
$ cat original.file
# Test symbolic link in linux

symbolic link 파일을 생성합니다.
$ ln -s original.file symbolic_link.file

symbolic link 파일의 내용을 확인합니다.
$ cat symbolic_link.file
# Test symbolic link in linux
symbolic file은 original file과 똑같은 파일내용을 가지지만 inodes와 file permissions이 다른 걸 확인할 수 있습니다.
orginal: file permissions -rw-r--r--, inodes 5120901
symbolic: file permissions lrwxr-xr-x, inodes 5120948
original.file의 권한을 변경했습니다.
$ chmod 666 original.file

original file의 권한을 변경해도 symbolic file은 변경되지 않았습니다.
현재 두 파일의 내용은 동일합니다.
$ cat original.file
# Test symbolic link in linux

$ cat symbolic_link.file
# Test symbolic link in linux

original.file의 내용을 변경합니다.
$ cat > original.file
Change symbolic link in linux

original.file과 symbolic_link.file의 내용을 출력합니다.
$ cat original.file
# Change symbolic link in linux
$ cat symbolic_link.file
# Change symbolic link in linux

original의 내용을 변경 했을 경우 symbolic 파일의 내용도 변경되었습니다.
original.file을 삭제합니다.
$ rm original.file
$ cat symbolic_link.file
# cat: symbolic_link.file: No such file or directory

original file을 삭제하니 symbolic file을 열 수 없습니다.
symbolic은 original file의 link만 가짐을 알 수 있습니다.



하드 링크 (Hard link)

원본 파일의 이름을 가르키는 링크로서 사본을 생성합니다. 이는 원본파일이 사라져도 원본과 동일한 내용의 파일을 가질 수 있음을 의미합니다.

Hard Link를 만들어보겠습니다.

Test hard link in linux라는 문구가 들어있는 original.file을 생성합니다.
$ echo "Test hard link in linux" > original.file

original.file의 내용을 출력합니다.
$ cat original.file
# Test hard link in linux

hard link 파일을 생성합니다.
$ ln original.file hard_link.file

hard_ link 파일의 내용을 확인합니다.
$ cat hard_link.file
# Test hard link in linux
hard file은 orginal file과 똑같은 파일 내용을 가지면 inodes와 file permissions 또한 똑같음을 확인할 수 있습니다.

orginal: file permissions -rw-r--r--, inodes 5147487
hard: file permissions -rw-r--r--, inodes 5147487
original.file의 권한을 변경했습니다.
$ chmod 666 original.file

original.file 권한을 변경하면 hard_link.file도 변경됨을 확인할 수 있습니다.
현재 두 파일의 내용은 동일합니다.
$ cat original.file
# Test hard link in linux

$ cat hard_link.file
# Test hard link in linux

$ cat > original.file
Change hard link in linux

original의 내용을 변경 했을 경우 hard 파일의 내용도 변경되었습니다.
original.file을 삭제합니다.
$ rm original.file
$ cat hard_link.file
# Change hard link in linux

original file을 삭제해도 hard_link file을 열 수 있습니다.
hard link는 original file의 실제 주소를 가진다는 것을 알 수 있습니다.



symbolic link와 hard link 차이점


위 그림을 보시면
original file로 symbolic link를 만들면 original file은 inode A를, symbolic link는 inode B를 가르킵니다.
inode B는 original file을 가르키며 original file은 Original Text Data를 가르키게 됩니다.
그렇기 때문에 original file을 삭제하면 symbolic link는 No such file or directory라는 문구를 출력합니다.

original file로 hard link를 만들면 hard link는 original file과 동일한 inode A를 가르킵니다.
inode A는 Original Text Data를 가르키기 때문에 original file이 삭제되더라도 Original Text Data에 접근이 가능합니다.


참고문헌

[1] http://www.metalpen.net/blog/?p=439
[2] https://www.ostechnix.com/explaining-soft-link-and-hard-link-in-linux-with-examples/
[3] https://www.leafcats.com/141



댓글

이 블로그의 인기 게시물

[opencv-python] 이미지 크기조절(resize) 하는 법

[python]파이썬: csv reader header skip (첫번째 행 무시하기, 안읽기)

[python] selenium close와 quit 차이점