하드 링크 (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 명령어와의 차이점)
하드 링크 파일을 지워도 원본 파일에 상관없이 내용을 찾아갈 수 있다.
심볼릭 링크
원본 파일을 가리키는 파일을 만든다.
원본 파일이 사라지면 심볼릭 링크 파일의 역할을 할 수 없다.
하지만 원본 파일을 같은 이름으로 생성해준다면 다시 역할을 하게 된다.
주로 복잡한 경로의 디렉토리를 쉽게 접근할 때 사용하고 확장자를 하나로 통일할 때 사용할 수 있다.
- 참고 사이트 -
'리눅스 > Linux' 카테고리의 다른 글
centos7 네트워크 설정 파일 - ifcfg 파일 (0) | 2021.09.12 |
---|---|
centos7 yum update error - [Errno 14] HTTP Error 404 - Not Found (0) | 2020.12.16 |
리눅스 hostname 변경하기 (centos7) (0) | 2020.10.12 |
리눅스가 설치된 노트북 덮개를 덮어도 안 꺼지는 방법 (CentOS 7) (0) | 2020.09.25 |
리눅스 파일 권한 (Permission) (0) | 2020.09.16 |