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 그대로 유지할 수 있다.
- 그러므로 저장공간의 제약이 있는 환경에서 유용하게 사용할 수 있는 기술이다.
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
15. 시스템 프로그래밍 핵심개념 (0) | 2021.09.10 |
---|---|
14. shell - 소프트링크와 특수파일 (0) | 2021.09.10 |
12. shell - 리눅스 파일 시스템 탐색 (0) | 2021.09.10 |
11. shell - 리눅스 파일 시스템 (0) | 2021.09.09 |
10. shell - 프로세스 관리 및 제어 (0) | 2021.09.09 |
댓글