리눅스에는 심볼릭 링크와 하드 링크가 있습니다. 이것들을 설명하기 위해서는 i_node라는 친구를 알아야 하는데요. 여기에서는 그냥 실제 디스크에 저장되어 있는 내용을 가리키는 무언가라고 생각하는 게 좋을 듯 싶네요. 나중에 자세히 언급할 듯 싶습니다.
먼저 폴더 안에 1.txt랑 2.txt를 생성합니다.
1.txt에는 chogahui is my dog라는 내용이 들어가 있습니다.
그리고 2.txt에는 그가 maltize라는 내용이 들어가 있습니다. 여기까지는 어렵지 않습니다.
저는, 1.txt를 심볼릭 링크로 연결하는 일명 soft랑, 2.txt를 하드 링크로 연결하는 hard를 생성하였습니다. 이것을 a 옵션과, l, i 옵션을 붙인 ls 명령어로 봅시다.
그러면 대충 이렇게 나오는 것을 볼 수 있는데요. 맨 앞에 붙어있는 숫자들은 inode를 의미합니다.
심볼릭 링크는 무엇일까요?
저는 soft라는 이름으로 생성했으니, 그 친구의 속성을 보겠습니다. 그러면 딱 봐도 링크 대상이 있는데요. 데이터 필드 안에, 1.txt에 link 하겠다는 정보가 들어가 있는 것으로 보입니다. 그러면 이 정보를 통해서, 실제로 가리키고 있는 파일을 열지 않을까? 라는 합리적인 의심을 할 수 있습니다.
그러면, 이렇게 정리를 해 볼 수 있어요. 심볼릭은, 내가 어디를 Link 하고 있는지 경로 데이터가 있을 겁니다. 그것을 얻어 온다면, 실제 내가 가리키고 있는 파일로 들어갈 수 있을 거에요. 즉, 윈도우의 바로가기와 비슷한 개념이라고 보시면 됩니다. 폴더 같은 것도 걸릴 거고요.
다만, 원본 파일이 삭제되거나 이동되면 조금 힘들지도 모르겠네요.
반면에 하드 링크는 이야기가 조금 다른데요.
2.txt와 hardlink의 inode가 같습니다.
즉, 이름만 다르지, 같은 파일을 공유한다는 겁니다. 즉, 2.txt의 alias는 hard이고, hard의 alias는 2.txt라고 봐도 된다는 겁니다. 그러면 여기에서, 명령어를 몇 개 수행해 봅시다. 2.txt를 삭제해 봅시다. rm 2.txt를 입력해 봅시다. 그러면 2.txt와 286991로 이어지는 링크가 하나 끊어질 건데요.
그럼에도 불구하고 286991을 가리키는 count는 아직 하나가 더 있기 때문에, 실제로 지워지지는 않습니다. 따라서, vi hard를 쳐 보면, ~ is maltize 라는 내용이 그대로 나오는 것을 볼 수 있습니다.
다만, 디렉토리 같은 몇 특수 파일들은 하드 링크를 할 수 없습니다.
정리해 봅시다. 심볼릭 link는 바로 가기라고 했습니다. 그러면 가리키는 파일과, 원본 파일. 이렇게 2개가 서로 다른 i_node, 그러니까 별개의 file일 겁니다. 고로, 원본의 inode 값은 증가하지 않아요. 그런데, hard는 이와 조금 다릅니다. aa를 bb가 hard link 해 버리면, 두 녀석의 inode가 같기 때문에, aa의 i_node 값이 하나 증가합니다. 같은 파일을 공유한다는 것은 당연한 거고요. bb가 aa의 alias다. 라는 것이 중요하겠네요.
일단 크게 이 정도만 정리하셔도 무난할 듯 싶습니다.
'OS > 리눅스' 카테고리의 다른 글
리눅스 fork 함수 : 프로세스를 생성한다. (2) | 2019.08.15 |
---|---|
리눅스 리다이렉션 : 입출력을 재지정 할 수 있다. (12) | 2019.08.13 |
리눅스 pwd 명령어 : 현재 작업 위치를 출력한다. (4) | 2019.07.26 |
절대 경로 vs 상대 경로 : 어디를 기준점으로 잡는가? (0) | 2019.07.26 |
리눅스 파이프 명령어 : 하나씩 차근차근 해석해 보자. (6) | 2019.07.22 |
최근댓글