3개월만에 쓰는 명령어 시간입니다. ln 명령어는 저번에, 하드링크와 심볼릭 링크를 언급했을 때, 언급을 한 적이 있었습니다.

 

 

[관련글]

[리눅스/명령어] - 하드 링크 vs 심볼릭 링크 : 어느 것을 가리키는가?

 

 

 복습도 다시 한 번 해 보시는 것도 괜찮을 듯 싶네요. 링크에 대해서 조금 더 보는 것도 괜찮고요. -s를 붙이면 윈도우에서 말하는 '바로가기'를, 그렇지 않으면 하드 링크를 생성합니다. 예제를 보겠습니다.

 

 


 먼저, 파일이 이렇게 있어요. 저는 -i 옵션을 주어서 inode 번호만을 출력을 했습니다. 1.txt의 번호와, 2의 번호가 같아요. 282861로요. 그러면, 1.txt와 2는 같은 파일을 가리키는 것이라고 봐도 무난합니다. alias라고 생각하시면 좋겠습니다.

 

 

 이것을 그림으로 그리면 위와 같습니다. 1.txt에는 12345가 들어가 있다고 한다면요. 심볼릭 링크를 작성하기 위해서는, 아래와 같이 작성합니다.

 

 그러면, 이것은 링크 파일이 원본 파일의 '바로가기' 가 됩니다. 예를 들어서, 아래와 같이 명령어를 입력했습니다.

 

 

 그러면 파일 3은, 1.txt의 바로가기가 됩니다. ls -i 명령어로 파일들을 봅시다.

 

 

 그러면, 3의 inode 번호가 283561이 됩니다. 이는 1.txt의 inode 번호와는 별개입니다.

 

 

 그림으로 그리면 위와 같이 됩니다. 즉 3번 파일은, 1.txt의 경로 정보에 대한 것을 가지고 있을 겁니다. 이를 토대로 1.txt에 접근을 할 수 있는 셈입니다. 일종의 '바로가기'와 같습니다.

 

 


 하드 링크는 -s 옵션을 붙이지 않으면 됩니다.

 

 

 이것은 원본파일에 대한 '링크파일' 이라는 이름으로 하드링크를 만들겠다는 겁니다. 예를 들자면, 아래와 같은 명령어를 입력했다고 하면, 이는 1.txt의 하드링크가 4가 되는 것입니다.

 

 

 이를 그림으로 표현하면 아래와 같이 됩니다.

 

 

 따라서, 1.txt와 4는 같은 inode 번호를 가질 겁니다. 정말 이게 맞는지, ls -i 명령어로 확인을 해 봅시다.

 

 

 그러면 파일 4의 inode 번호가 282861로 1.txt와 같다는 것을 확인할 수 있습니다. 이제 보너스로 rm 명령어를 이용해서 장난을 조금 쳐 보도록 하겠습니다. 저는 4, 1.txt 순으로 삭제를 하고, 파일 2의 내용을 보겠습니다.

 

 

 

 먼저, rm 4를 입력해 봅시다. 그러면 파일 4가 삭제가 될 거에요. 그런데 이것이 삭제되어도, 12345가 저장이 되어 있는 블록은 1.txt와 2가 가리키고 있습니다. 이를 그림으로 그려 봅시다.

 

 

 그런가요? 따라서, 12345의 내용은 지워지지는 않아요.

 

 

 실제로 rm 4를 한 다음에 ls -i 명령어를 수행하면, 4에 대한 정보만 지워졌음을 알 수 있습니다. 다음에 rm 1.txt를 해 봅시다.

 

 

그러면, 12345가 저장되어 있는 실제 내용은, 파일 2가 가리키고 있어요. 그렇지만, 1.txt가 사라졌기 때문에 바로가기 3은 제대로 동작하지 않습니다. 1.txt를 찾을 수 없기 때문입니다.

 

 

 ls -i로 확인해 보면, 3에 빨간색이 쳐져 있음을 볼 수 있어요. 그러면 여기서 cat 2를 하면 어떤 결과가 나올까요?

 

 

 당연하게도, 12345가 그대로 출력됩니다. 내용 '12345'를 가리키는 포인터가 1개 이상이기 때문입니다.