728x90
반응형

하드 링크 (hard link)

원본 파일과 동일한 inode 를 가진다.
따라서, 원본 파일이 삭제 되더라도 원본 파일의 inode 를 갖고 있는 링크 파일은 사용이 가능하다.
사실 같은 inode 를 가리키는 파일이기 때문에 이름만 다를 뿐 같다고 생각하면 된다.

inode ?
파일 시스템 내에서 파일이나 디렉토리는 고유한 inode를 가지고 있다.
inode는 파일의 소유권, 권한, 파일 내용이 들어있는 물리 주소, 링크 수, 형태, 크기, 시간 등 파일에 대한 정보를 가지고 있다.

예를 들어, 하나의 파일을 생성해보자.

$ ls -li
total 8
9395905 -rw-r--r--  1 jaynam  staff  15 12 13 23:46 A

inode의 값은 ls 명령어의 -i 옵션으로 확인할 수 있다.
A 라는 파일의 inode 값은 9395905 인 것을 확인할 수 있다.

그럼 이제 하드 링크로 파일을 생성해보자.

$ ls -li
total 8
9395905 -rw-r--r--  1 jaynam  staff  15 12 13 23:46 A

// ln 명령어를 통해 링크를 걸 수 있다.
$ ln A hard_link_A

$ ls -li
total 16
9395905 -rw-r--r--  2 jaynam  staff  15 12 13 23:46 A
9395905 -rw-r--r--  2 jaynam  staff  15 12 13 23:46 hard_link_A

하드 링크로 hard_link_A 라는 파일을 생성한 후 inode 의 값을 확인해보았다.
확인해보니 A 파일과 hard_link_A 파일의 inode 값이 같다는 것을 알 수 있었다.
따라서, 하드 링크는 동일한 파일을 하나 더 생성한다고 생각하면 된다.
그리고 링크의 수가 1 에서 2 로 증가한 것을 확인할 수 있다. (jaynam 계정 앞에 링크 수 확인)
파일 용량의 경우 동일한 크기의 링크 파일이 생성된 것처럼 보이지만 차지하는 용량은 파일 하나의 용량밖에 되지 않는다.

$ ls -rlt
total 16
-rw-r--r--  2 jaynam  staff  15 12 13 23:46 hard_link_A
-rw-r--r--  2 jaynam  staff  15 12 13 23:46 A

$ du -sh A
4.0K	A

$ du -sh hard_link_A 
4.0K	hard_link_A

$ du -sh ./
4.0K	./

cp 명령어와 다를 것이 없다고 생각할 수 있지만
cp 명령어를 통해 파일을 복사하게 되면 하나의 파일이 생성되기 때문에 용량은 배로 늘어난다.
이런 부분에서 cp 명령어와의 차이점을 확인해볼 수 있다.

$ cp A copy_A

$ ls
A           copy_A      hard_link_A

$ du -sh A
4.0K	A

$ du -sh hard_link_A 
4.0K	hard_link_A

$ du -sh copy_A 
4.0K	copy_A

// cp 명령어를 통해 복사했기 때문에 용량이 배로 늘어난 것을 확인할 수 있다.
$ du -sh ./
8.0K	./

 

심볼릭 링크 (symbolic link)

원본 파일의 이름을 가리키는 링크라고 생각하면 된다.
따라서 원본 파일이 사라지게 되면 파일이 제대로된 역할을 할 수 없다.
심볼릭 링크의 장점은 전혀 다른 파일이라도 원본 파일과 이름이 같다면 계속 사용할 수 있다.
다시 말해, 원본 파일을 지워도 같은 이름으로 파일을 다시 생성해 주면 링크 파일을 사용할 수 있다.
주로 경로가 복잡한 디렉토리를 심볼릭 링크를 통해 편하게 사용할 수 있다.
윈도우에서 바로가기라고 생각할 수 있다.

심볼릭 링크로 파일을 하나 생성해보자.

$ ls -li
total 8
9396273 -rw-r--r--  1 jaynam  staff  19 12 14 00:06 B

$ ln -s B symbolic_B

$ ls -li
total 8
9396273 -rw-r--r--  1 jaynam  staff  19 12 14 00:06 B
9396288 lrwxr-xr-x  1 jaynam  staff   1 12 14 00:06 symbolic_B -> B

$ cat B
symbolic link file

$ cat symbolic_B
symbolic link file

링크 파일을 확인해보니
B 파일의 inode 값과 symbolic_B 파일의 inode 값이 다른 것을 볼 수 있었다.
심볼릭 링크로 만들 파일에 -> 를 통해 링크 파일이 가리키는 원본 파일을 표시해주고 있다.
그리고 심볼릭 링크 파일의 경우 파일 권한을 나타내주는 상태 l 이라는 문자로 표시되어있는 것을 알 수 있다. (lrwxr-xr-x)

만약 원본 파일이 사라진다면 어떻게 될까?

$ rm B 

$ ls -li
total 0
9396288 lrwxr-xr-x  1 jaynam  staff  1 12 14 00:06 symbolic_B -> B

$ cat symbolic_B
cat: symbolic_B: No such file or directory

심볼릭 링크를 만든 파일이 제대로된 역할을 할 수 없게 된다.
하지만 원본 파일의 이름으로 다시 새로운 파일을 생성해준다면 심볼릭 링크 파일로 제대로된 역할을 하게 된다.

$ echo "original file" > B 

$ ls -rlt
total 8
lrwxr-xr-x  1 jaynam  staff   1 12 14 00:06 symbolic_B -> B
-rw-r--r--  1 jaynam  staff  14 12 14 00:19 B

$ ls -li 
total 8
9396521 -rw-r--r--  1 jaynam  staff  14 12 14 00:19 B
9396288 lrwxr-xr-x  1 jaynam  staff   1 12 14 00:06 symbolic_B -> B

$ cat symbolic_B 
original file

심볼릭 링크의 원본 파일이 수정되었기 때문에 당연히 심볼릭 링크 파일의 내용도 수정된다.

정리

하드 링크

같은 이름이 파일을 하나 더 만든다.
원본 파일과 하드 링크 파일의 inode 값이 같다.
하드 링크로 만들어진 파일의 용량은 같지만 실제로 늘어난 용량은 없음 (용량도 늘어나는 cp 명령어와의 차이점)
하드 링크 파일을 지워도 원본 파일에 상관없이 내용을 찾아갈 수 있다.

심볼릭 링크

원본 파일을 가리키는 파일을 만든다.
원본 파일이 사라지면 심볼릭 링크 파일의 역할을 할 수 없다.
하지만 원본 파일을 같은 이름으로 생성해준다면 다시 역할을 하게 된다.
주로 복잡한 경로의 디렉토리를 쉽게 접근할 때 사용하고 확장자를 하나로 통일할 때 사용할 수 있다.

 

- 참고 사이트 -

hack-cracker.tistory.com/95

 

[ Linux - CentOS ] 심볼릭 링크, 하드 링크

linux 기초 심볼릭 링크, 하드링크(feat.cp)   CP ( #>cp [원본] [대상] ) cp 명령어는 파일을 복사하는 명령어이다. 용량 20M인, 파일 A라는 파일을 파일 B라는 파일로 복사한다면  ( #>cp A B ) -> A( 20M..

hack-cracker.tistory.com

sungpil94.tistory.com/181

 

Linux_리눅스 심볼릭링크 / 하드링크

리눅스 심볼릭링크/하드링크 - 오라클 가상 머신 사용 - CentOS6 <심볼릭링크 / 하드링크> #1 심볼릭링크와 하드링크의 차이            하드링크                          ..

sungpil94.tistory.com

itdexter.tistory.com/302

 

리눅스 - inode, 하드링크, 심볼릭링크

Inode란? 사용자는 커널을 통하여 디스크의 파일을 접근하는데, 이를 위해 커널 내에는 현재 사용중인 파일에 대한 자료 구조를 갖고있다. 커널 내에서 파일 시스템과 관련하여 중요한 자료구조

itdexter.tistory.com

 

728x90
반응형
복사했습니다!