본문 바로가기
Develop/Server

[Linux] linux Link 이해하기

by 코딩의성지 2020. 7. 21.

파일의 링크는 하드링크와 심볼릭링크(소프트링크)로 나눠진다.

 

먼저 링크를 만드는 방법을 소개하면 아래와 같다.

 

하드링크
ln 링크대상파일이름 링크파일이름

 

심볼링링크(소프트링크)
ln -s 링크파일대상이름 링크파일이름

 

그림을 보면서 간단하게 설명해주도록 하겠다.

 

위의 그림을 이해하고 있어야 링크를 이해할 수 있다. 가운데 inode라는게 있는데 이 inode는 리눅스/유닉스의 파일 시스템에서 사용하는 자료구조이다. 여기에는 파일이나 디렉토리의 여러가지 정보가 있다.

 

모든파일이나 디렉터리들은 각자 한개씩 inode가 있다. 각 inode에는 파일의 소유권, 허가권, 파일종류 등의 정보와 해당파일의 실제 데이터가 어디있는지 주소정보 등이 있다. 이러한 inode가 모여있는 공간을 inode block 이라고 부른다. 일반적으로 전체 디스크의 1% 정도만 차지하고 나머지는 data block이 차지한다. data block은 실제 데이터가 저장되어 있는 디스크 공간으로 전체 디스크의 대부분을 차지한다.

 

그림을 보면 원본파일이 inode1을 사용하는데, 만약 여러분이 하드링크를 생성하면 하드링크파일이 하나만 생성되고 같은 inode1을 사용하게 된다. 반면에 심볼릭링크를 생성하면 새로운 inode2가 만들어지고 데이터는 원본파일과 연결되는 포인터를 통해 단지 연결만 되는 효과를 가지게 된다.

 

보통 실무에서는 심볼릭링크만 사용하니 이것도 잘 기억해두자.

 

실습

 

먼저 실습할 디렉토리와  원본파일을 하나 만들어 놓자. 나는 basefile.txt라고 하나 만들었다.

 

아래 명령어를 통해 하드링크와 심볼릭링크를 해보고 파일을 확인해보자.

 

ln basefile.txt hadrlink.txt
ln -s basefile.txt symboliclink.txt
ls -il
cat hardlink.txt
cat symboliclink.txt

원본파일(basefile.txt) 는 inode 번호가 4601이다. 하드링크파일(hardlink.txt) 역시 그림과 마찬가지로 406번이다. 그런데 심볼릭링크파일 (symboliclink.txt) 파일은 3066번으로 원본파일과 다르다. 그리고 크기를 보면 원본파일과 하드링크파일은 10바이트로 크기가 같은 반면 심볼릭링크파일은 12로 크기가 다르다. (원본파일에 대한 포인터를 갖기 때문에 크기가 다름) 

그리고 -> 화살표를 통해서 심볼릭링크파일이 원본파일을 징정한다는것도 보여주고 있다.

 

 

 

 

그리고 원본 파일을  앞 디렉토리로 옮긴 뒤 심볼릭링크파일을 다시 확인해보면 연결이 끊어지는 것을 확인할 수 있다.

 

 

 

 

 

마지막으로 다시 원본파일을 원복하면 다시 정상적으로 복구되는 것도 확인해보자.

 

끝!

반응형

댓글