본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

13. shell - 하드링크

by devraphy 2021. 9. 10.

0. 시작하기전에 

- 지금까지 리눅스의 파일시스템에 대해서 배웠다. 

- 이번 포스팅에서는 리눅스 시스템에만 존재하는 독특한 링크라는 개념에 대해서 알아보자. 


1. 추가적인 파일 시스템 명령어 

a) cp 명령어 

- cp는 copy를 지칭하는 명령어로, 복사 기능을 가진 명령어다.

- cp 명령어는 다음과 같은 방법으로 사용할 수 있다. 

cp 복사할파일명 부여할이름

- 위의 사진은 link.txt라는 프로그램을 link2.txt라는 이름으로 복사한 예시다.

 

b) cp - rf 옵션

- 어떤 디렉토리를 복사한다고 할 때, 해당 디렉토리의 내부 파일 또는 디렉토리 또한 복사하고 싶을 것이다. 

- 이 경우 rf옵션을 사용한다. (r = 재귀적으로 적용한다는 의미, f = 묻지말고 다 복사하라는 의미)

cp -rf 복사할디렉토리이름 부여될디렉토리명

 

c) rm

- rm은 remove를 지칭하는 명령어로, 삭제 명령어다. 

- 파일을 삭제하는 경우, 다음과 같이 작성한다. 

rm 파일명

 

d) rm - rf옵션

- 주로 디렉토리를 삭제할 때 사용한다.

- 디렉토리 내부의 모든 파일 또는 내부 디렉토리를 함께 삭제해야하기 때문에 사용한다.  


2. 하드링크

- 윈도우 기반의 컴퓨터를 사용해보면 바로가기 기능이 있다. 

- 리눅스에서도 마찬가지로 바로가기 기능을 지원하는데, 이를 2가지 방식(하드, 소프트)으로 제공한다. 

 

a) ln 명령어 

- 하드링크와 소프트링크 모두 ln이라는 명령어를 기반으로 동작한다. 

- ln은 link를 지칭하는 명령어다. 

- ln 명령어를 사용하면 어떤 파일의 바로가기를 생성하는데, 원본 파일을 가리키게 된다. 

- ln 명령어의 사용법은 다음과 같다. 

ln 근본파일 바로가기의이름

- 위의 예제는 link.txt를 hard.txt라는 이름으로 바로가기 파일을 만든 것이다. 

- 그렇다면 하드링크와 cp(복사)와 차이점이 무엇일까?

 

 

b) 하드링크와 cp의 차이점

- 하드링크는 바로가기로 생성된 파일이 원본파일의 메모리 주소를 가리키게된다.

- 더불어, 하드링크로 생성한 바로가기 파일은 원본 파일과 동일한 inode 번호를 가리킨다.  

- 즉, 동일한 주소를 가리키는 파일이 하나 더 생기는 것이다. 

- cp 명령어는 원본파일을 가리키는 것이 아니라, 아예 새로운 파일로써 새로운 메모리 주소를 할당받게 된다.  

- 하드링크가 진짜로 동일한 파일을 가리키는지 확인해보고 싶다면 다음의 명령어를 사용할 수 있다. 

ls -i
# 파일의 pid를 보여주는 명령어와 옵션

- 위의 예시는 cp와 하드링크를 비교하기위한 예시다. 

- 하드링크를 이용해 link.txt의 바로가기 hard.txt를 만들었다.

- cp를 이용하여 link.txt를 복사한 cplink.txt를 만들었다. 

- inode번호를 확인해보면, 하드링크로 생성된 hard.txt는 link.txt와 동일한 inode 번호를 갖는다. 

- 반대로 cp로 생성된 cplink.txt는 link.txt와 다른 inode번호를 갖는다.  

 

 

c) 원본의 내용이 바뀌면 하드링크도 바뀐다. 

- 하드링크는 원본의 내용이 변하면 하드링크의 내용도 변한다. 하드링크가 원본파일과 동일한 메모리 주소값을 가리키기 때문이다. 

- 반대로 cp는 원본 파일의 내용이 바뀌더라도, 복사된 파일의 내용이 변하지 않는다. 각 파일이 서로다른 메모리 주소값을 갖기 때문이다. 

 

 

d) 원본이 삭제되어도 하드링크는 살아있다. 

- 상식적으로 생각해보자.

- 바로가기의 원본파일이 삭제되면 바로가기 또한 삭제되거나, 존재한다고 하더라고 재기능을 하지 못할 것이다. 

- 하지만 리눅스는 그렇지 않다. 하드링크의 원본이 삭제되더라도 하드링크는 원본파일처럼 그대로 남아있게 된다. 

- 심지어 원본파일의 inode 번호를 그대로 유지된다.

- 어떻게 가능할까? 아래의 그림을 살펴보자. 

- 하드링크와 원본파일은 동일한 메모리 주소를 가리킨다. 

- 원본파일이 삭제된다고 하더라도, 해당 메모리 주소는 hardlink와 여전히 매핑이 되어있다. 

- 이와 같은 이유로 하드링크는 원본파일이 삭제되더라도 살아있게 된다. 

- 아직 이해가 안될 수도 있다. 그렇다면 이렇게 생각해보자. 

- 하드링크는 원본파일과 동일한 메모리 주소를 가리키는 것이지, 원본파일을 가리키는 것이 아니다. 

 

 

e) 하드링크를 사용하는 이유

- 하드링크는 하나의 메모리 주소를 여러개의 파일을 이용해 가리킬 수 있는 기능이다. 

- 여러개의 파일이 존재하지만 동일한 메모리 주소를 가리키므로, 메모리 공간 효율을 증가시킨다. 

- 예를 들어, 10GB 크기의 파일을 복사(cp)하면 총 20GB의 저장공간을 필요로한다.

- 그러나 하드링크(ln)을 이용하면 10GB 그대로 유지할 수 있다. 

- 그러므로 저장공간의 제약이 있는 환경에서 유용하게 사용할 수 있는 기술이다.  

댓글