728x90
반응형

링크


아이노드에 대해 설명하기 전에 먼저 알아야 할 것이 있습니다.


바로 파일 테이블 입니다.





파일테이블 이란?


Windows는 파일 보기가 굉장히 편하게 되어있습니다.


하지만 그 사이에는 상당한 작업들이 들어가 있다는 거.. 대충 눈치 채시겠죠?


배우면서 느끼는 거지만 컴퓨터는 생각보다 대단한 놈입니다.


우리가 어느 폴더를 클릭하면 폴더가 바로바로 슉슉 이동되고


내부 폴더로 이동하고 ..


그런 것 이 바로 파일테이블 이라고 생각하시면 됩니다.


테이블 이라고 생각하시면 좀 쉽죠?


Windows에 깔려있는 프로그램들은 전부 하드에 저장되어 있습니다.


근데 우리가 육안으로 보고있는 (탐색기 처럼 예쁘게 정리) 화면 처럼 정리 되어있을까요?


아닙니다.. 하드 분해 해보신 분은 알겁니다. 얇은 Cd 들이 겹겹이 쌓여 있습니다.


다 집어치우고 하드웨어만 던져주고 여기서 내폴더에 있는 abc 라는 텍스트 파일을 찾아봐


찾을수 있는 분 있나요?


그래서 OS 가 존재하는 것이고(연결) 파일테이블이라는 기능이 존재하는 것입니다.

 


하드 내부의 Cd가 돌아가면서 컴퓨터가 인식하는 겁니다. 그 과정이 우리에게는 더블클릭 하나만으로 이동되는 과정입니다.

 


탐색기 처럼 예쁘게 정리되어 눈앞에 나타나져있는 화면. 그것을 파일테이블 이라고 합니다.






Inode





파일의 위치주소(하드디스크 내부 에서)가 아이노드선을 타고 파일테이블에 보여집니다.


방금 위에서 프로그램들은 하드디스크에 저장 된다고 설명 드렸습니다.


Inode는 이를 찾아가는데 쓰이는 고유 번호와 정보를 가지고 있습니다.


예를 들어 우리가 파일테이블에서 a.txt 라는 텍스트 파일을 만든다고 칩시다. 용량은 10kb 라고 하겠습니다.


그렇다면 a.txt 라는 파일은 하드디스크 어딘가에 저장되어 있을겁니다.


파일테이블에서 이 텍스트를 보여주기 위해선 하드디스크에 a.txt 가 저장되어 있는 위치의 주소값과 연결해야 합니다.


하드디스크에 있는 a.txt는 주소값이 있을겁니다. 그 주소값이 inode 고유 번호와 연결 되어있고,


inode 고유 번호가 파일테이블의 a.txt 파일과 이어져 있습니다. 링크 라고 생각하시면 됩니다.


a.txt 파일을 실행하면 inode 번호를 따라 하드디스크에 a.txt가 저장되어있는 주소로 이동하여 실행합니다.


파일마다 고유의 inode 번호가 있습니다. 그리고 inode 번호는 순차적으로 쌓입니다.


방금 만든 파일의 inode 번호가 100번이면 그 이후에 만든 파일은 101번이 되겠지요. ^^




inode 에 대해서 알게 되면 파일의 삭제/복구에 대해서도 알 수 있습니다.


사실상 하드디스크에는 삭제라는 기능이 없습니다.


하지만 우리가 보는 삭제는? 바로 inode 연결선을 끊어 버리는 겁니다.


그러면 컴퓨터는 연결선을 끊어버림으로 인해 10kb을 차지하고 있던 a.txt의 공간을 빈공간으로 인식하여 버립니다.


그로인해 우리는 하드디스크 용량을 10kb를 얻게 되는겁니다.


그리고 우리가 새로 생성하거나 다운받는 파일들이 그곳을 덮어 버립니다. 우선순위로 덮어버리는 것은 아니구요 물론.





하드디스크 복구 라는 말을 들어보셨을 겁니다.


하드디스크 복구는 inode 를 연결선을 다시 이어주는 작업입니다.


그 빈공간을 아직 다른 파일이 덮어버리지 않았을 경우 다시 inode를 이어준다면 그 파일이 돌아오게 되겠죠


그러니까 뭔가 중요한 파일을 손상하거나 삭제했을 경우 데이터를 덮어쓰지 않도록 사용을 자제하고 복구를 하는것이 좋겠죠 ^^






Hard Link & Symbolic Link




링크라는 시스템에 대해선 다들 아시지요?


'바로가기' 기능이지요.





 

하드 링크

 

  • 동일한 inode 사용
  • 원본 수정시 하드링크도 수정됨
  • 원본 삭제 시 살아 잇음
  • 원본의 이동이나 삭제 시 남아 있음
  • 파일 복사와 차이는 공간을 차지하지 않음


 

리눅스에는 링크 시스템이 2개가 있습니다.


하나는 심볼릭 링크이고, 하나는 하드링크 입니다.


하드링크는 그냥 복제본 이라고 생각하시면 됩니다. 원본 파일과 똑~같습니다.


하드에 있는 실제 파일을 거점으로 똑같은 복제본이 만들어 진겁니다. 동일한 inode를 공유하기 때문에


원본을 수정하면 하드링크도 수정이되고, 하드링크를 수정하면 원본도 수정됩니다.


그리고, 원본파일이 지워지거나 삭제하거나 하더라도 하드링크 파일은 아무런 관련을 받지 않습니다.


위에 그림에서 보시면 알겠지만 하나의 원본의 선이 끊어져봤자 하드링크는 아무런 영향을 받지 않습니다.


원래 링크파일은 용량이 매우 작습니다. 링크만 걸어주는 거니까요.


하지만 하드링크는 원본파일과 용량이 같습니다. 하지만 그렇다고 해서 , 하드링크와 원본 갯수가 합쳐서 2개라고 해서


용량이 2배가 되는것은 아닙니다. Inode 를 공유하기 때문에 용량은 그대로 이고, 그냥 표시해주는 값일 뿐입니다.

 


심볼릭 링크

 

  • Windows 바로가기 아이콘과 비슷
  • 주로 사용자가 많이 사용
  • 긴 디렉토리명 이동시 유용
  • 원본을 다른곳으로 이동시키면 사용못함
  • 새로운 inode 생성
  • 원본 자체 포인터 역할 뿐이므로, 원본 수정시 수정된 파일이 안보임
  • 원본의 삭제 시 링크가 끊김

 


게임실행을 예로 들어보겠습니다.


링크파일을 클릭하면 게임실행파일 원본으로 이동해서 게임이 실행되지요. 그것이 심볼릭 링크입니다.


윈도우즈에서는 심볼릭 링크를 사용합니다.


심볼릭링크에서는 링크파일과 원본파일이 별개이므로,


원본파일이 삭제,이동 하면 링크가 끊겨 버리게 됩니다.


그리고 별개파일이므로 inode 또한 별개입니다. 


그림에서 보시다 시피 아이노드선을 타고 갔을때 원본 포인터에 도착합니다.


그러므로 원본으로 가게되어 아이노드선을 타고 진짜 하드디스크 내부에 잇는 원본을 실행하게 되지요.





링크 명령어


Hard link : ln [링크 원본파일] [링크 파일명]


Symbolic link : ln -s [링크 원본파일] [링크 파일명]


이렇게 하시면 링크파일이 생성 됩니다.


 



abc 라는 원본 파일에 대해 hardabc 라는 하드링크 파일을 만든뒤, 두 파일을 비교하였습니다.


완전 똑같네요. 권한 마져도.


2 라는 표시는 하드링크,원본파일 합쳐서 2개 있다는 뜻입니다.




이번엔 거기에 이어 심볼릭링크인 symabc 파일을 만들었습니다.


딱봐도 완전 틀린 파일이지요?




ls -il (아이노드를 보는 명령어) 를 통해 inode를 확인한 결과입니다.


inode도 틀리지요? 하지만 하드링크와 원본파일은 inode가 같네요.

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,