[Linux] Link
- Linux
- 2021. 3. 1.
이번 글에서는 Linux에서 Link Command 를 사용하는 방법에 대해 알아보겠습니다.
1. INode
link 를 이해하기 위해선 먼저.. INode 에 대해 이해할 필요가 있습니다.
linux 에서 파일이 생성되면 해당 파일의 type, size, permission, owner's name, group name, ACL, links 등등 관련된 meta data 들이 생성 & 할당 됩니다.
이러한 metadata 는 128 bytes 의 tiny storage 에 저장되며, 이러한 값들이 저장되어 있는 space 를 'INode(index node)' 라고 합니다.
이후 INode 는 각 파일에게 numeric indentifer 를 부여하며, 부여된 identifier 를 사용해 kernel 은 파일 관련 작업을 수행하게 됩니다.
다시 말하자면.. linux 에서 각각의 파일은 사실 INode 이며. 각 INode 에 human readable 하게 이름을 붙인 것 들을 file 으로 이해할 수 있습니다.
파일의 INode 를 확인하기 위해선 다음과 같이 입력합니다.
ll -i file1
맨앞에 numeric value 가 해당 파일의 numeric identifier 입니다.
2. Link
다시 link 로 돌아와 보겠습니다. link 는 일종의 short cut 으로 이해할 수 있습니다.
linux 에서는 soft & hard 두 종류의 link 를 제공합니다.
2-1) soft link
soft 는 window 에서 제공하는 short cut 와 유사하게 동작합니다.
soft link 를 생성하기 위해 다음과 같이 입력합니다.
ln -s file1 file2
위의 명령어는 file1 에 대한 soft link로 file2 를 생성합니다. 즉 이때의 original file 은 file1 이며.. 이를 가르키는 short cut (soft link) 은 file2 입니다.
soft 링크의 original file 이 삭제될 경우. 해당 soft link 는 더이상 사용할 수 없는 link 가 됩니다. 왜냐면.. soft link 가 가르키고 있었던 파일이 더이상 존재하지 않기 때문입니다.
ls 명령어로 확인해보면 다음과 같이 차이점을 확인할 수 있습니다.
soft link 를 생성할 경우 해당 link 는 permission 의 맨앞에 'l' 이 표시되어 있습니다.
다음의 숫자 '1' 은 해당 link 가 가르키고 있는 파일의 갯수입니다.
2-2) hard link
soft link 가 short cut 개념으로 사용되었던 것 과 달리.. hard link 는 동일한 inode number 를 공유하며 마치 동일한 파일처럼 동작합니다.
hard link 를 생성하기 위해 다음과 같이 입력합니다.
ln file1 file3
파일 생성후 ll -i 명령어로 확인해보면
ll -i file*
soft link 와 달리 hard link 는 동일한 inode number 를 공유하고 있는 것을 확인할 수 있습니다.
이를 통해.. hard link 는 단순히 short cut 이 아닌 동일한 파일이라고 이해할 수 있습니다.
또다른 차이점으로는 hard link 는 original file 이 삭제되더라도 hard link 그 자체로써 의미 있는 파일로 사용될 수 있습니다.
rm 명령어로 file1 을 삭제한 뒤 확인해보면.. soft link 는 file2 가 더이상 사용할 수 없으므로 붉게 표시되는 반면, hard link 인 file3 는 별 이슈 없이 온전한 파일의 형태로 남아있는 것을 확인할 수 있습니다.
가능하면 link 를 생성할 때에는 hard link 를 사용하는 것이 성능면에서 빠릅니다. 하지만, hard link 는 오직 해당 시스템 내부의 파일만을 link 할 수 있으므로. 상황에 따라서 외부 시스템을 link 해야 할 경우에만 soft link 를 사용하는 것을 추천합니다.
'Linux' 카테고리의 다른 글
[Linux] Grep (0) | 2021.03.01 |
---|---|
[Linux] Input & Ouput & Error Redirection (0) | 2021.03.01 |
[Linux] Wild Card (0) | 2021.03.01 |
[Linux] Command History (0) | 2021.03.01 |
[Linux] Head & Tail (0) | 2021.03.01 |