티스토리 뷰
# 리눅스 파일의 구성.
- 파일명 + inode + 데이터블록 //매우 중요한 개념이다.
파일명
- 파일의 이름이 접근시의 기준이 된다.
inode (= index node)
- 추상화 된 구조체. 약간 어려운 개념이다.
이름을 제외한 모든 정보가 inode라는 테이블에 존재.
데이터 블록
- 실제 데이터가 블록이라는 단위로 분할되어 저장됨.
#> ls-i 사용시 아이노드 번호가 출력된다.
# 이렇게 사용이 가능하다.
아이노드의 번호는 개인별로 다 다르다.
아이노드 번호를 가지고 실제 파일에 접근하는 과정을 한번 이해해보자.
#> cat /root/A 라는 명령어 입력시의 과정을 살펴보자.
우리가 실제로 확인 가능한 부분은 User 부분 뿐이다.
커널에서의 과정은 추상화 된 그림을 참고하여 반드시 이해하고 있어야 한다.
# inode를 통해 디렉토리에 접근하는 과정
만약 root/A 파일을 cat명령어로 찾으려고 한다면, root 디렉토리가 A라는 파일의 정보를
가지고 있다. 근데 root 디렉토리도 inode 를 가지고 있기 때문에, inode를 통해
root디렉토리에서 A파일에 대한 정보가 들어있는 주소(pointer)를 확인한다.
해당 주소에서 A의 inode를 확인한 뒤,
# 다시한번 유사한 과정을 거친다. 대신 이번에는 디렉토리가 아니라 파일이다.
아이노드를 통해 해당 데이터 A의 데이터블록의 주소(pointer)를 얻어와서 데이터를 가져온다.
# 따라서 좌측 파랑박스에 해당되는 이름을 제외한 상세한 정보는 아이노드 테이블에서 제공하고,
우측 빨강박스에 해당하는 이름은 해당 디렉토리에서 제공을 한다.
# 그다음 ln 이라는 명령어를 진행하려면 우선 실습 환경을 구성해야한다.
# practice 하위에 link_test 라는 디렉토리를 생성하고 그 안에 etc/resolv.conf 파일을 FILE-A 라는 이름으로 변경하여 복사한다.
# 파일의 내용을 확인해본다. 잘 복사 되어서 위치하고있다.
윈도우의 바로가기와 대응되는 개념이 리눅스의 링크 이다.
링크를 사용해보면 위에 언급한 파일과 inode 의 관계를 확인 해 볼 수 있다.
이를 통해 리눅스가 파일을 어떻게 다루는지 알아보자.
#> ln [option] [target_file] [link_file]
[option]
-s : 심볼릭(Symbolic)링크 파일을 생성한다.
- 아무 옵션 지정하지 않을 시, 하드(Hard)링크 파일을 생성.
- 이 링크의 장점 중 하나는, 파일 및 디렉토리의 이름이 긴 경우 단축시킬 수 있다는 것이다.
- 또한 경로를 단축시켜 사용도 가능하다.
- 링크를 이해해야만 링크파일들을 다룰 수 있다.
# ln 명령어 실습1
ln -s 명령어를 통해 심볼릭 링크를 생성하면, 우리가 만든 FILE-LINK 가 FILE-A를 가르키고 있음을 확인 할 수 있다.
가르키고 있기 때문에 그 둘의 내용은 동일하다.
또한, 가르키는 용도로만 다시말해 원본파일의 경로만 저장하고 있기때문에 용량이 매우 작다.
윈도우즈의 바로가기 아이콘도 용량이 상당히 작다.
# ln 명령어 실습2
#> ln -s /etc/sysconfig/network-scripts /network 를 통해 최상위에 network 심볼릭링크 생성
# 즉, /etc/sysconfig/network-scripts 처럼 긴 경로를 줄여서 사용이 가능하다는 것.
# 가르키고 있는 정보도 나타난다.
따라서 network로 접근을 하던, 전체경로로 접근을 하던 결국 결과는 같다.
# 심볼릭 링크 실습
우측 그림은 심볼릭 링크를 통해 파일에 접근하는 과정이다.
# 심볼릭링크가 본인이 가르키고있는 원본파일이 이동했기때문에, 문제가 있음을 나타내고 있다.
다시 원래대로 옮겨놓으면 살아난다.
# 하드링크 파일생성 실습
#> ln [target_file] [link_file] 과 같이 선언한다.
# 그림과 함께 이해하면 수월하다.
inode 번호가 동일하다 즉, 원본파일과 동일한 데이터를 가르키고 있다는 것이다.
# 각각의 파일에는 inode 가 부여되어 있다. 각각의 아이노드는 중복되지 않는다.
FILE-2 의 inode : 522246
HARD-1 의 inode : 522246
SOFT-1 의 inode : 522247
아이노드 번호가 다르다? 서로 다른 데이터블록을 가르키고 있다는 것.
즉 같은파일이 아니라는것이다.
그러나 HARD-1은 원본파일과 아이노드 번호가 동일하다.
즉 원본이 가르키고있는 데이터블록의 주소를 같이 쓴다는것.
그림을 참고하여 다시 말하자면
심볼릭링크 : 원본의 경로를 담고있는 데이터블록이 존재하고
이를 거쳐 원본의 데이터블록으로 접근
하드링크 : 가르키고 있는곳이 원본의 데이터블록
# 그렇다면 하드링크로 생성된 파일과 원본파일의 용량이 서로 동일하기때문에
각각 4M 씩 용량을 가진것처럼 보이지만 그게 아니다.
4M 에 해당하는 데이터블록을 둘다 가르키고 있을 뿐이라는것이다.
이름만 다를뿐 같은 아이노드와 같은 데이터블록을 가르키고있다.
모든 파일은 하나의 하드링크를 가지고있다. 따라서 rm이라는 명령어를 이용해서
파일을 삭제한다는 것은 그 하드링크를 끊겠다는 의미이다.
따라서 하드링크를 끊으면 이름은 사라지지만 데이터블록은 그대로 존재한다.
해당 데이터 블록 위에 다른 데이터로 덮어씌우면 새로운 데이터를 이용할 수 있는것이고,
끊긴 하드링크를 다시 연결시켜주는것을 데이터복구 라고 한다.
실제로는 지워지지않고 겉으로만 지워졌다 라고 보여진다는 것이다.
# 이부분이 하드링크의 개수를 의미한다.
하드링크 개수가 하나인 파일을 제거하면 더이상 해당 데이터블록에
접근할수가 없다는 의미이다.
cp(copy)와 ln(link)의 차이를 인지하고 있어야한다.
'SYSTEM > LINUX' 카테고리의 다른 글
10) Redirection, Pipe (0) | 2018.04.22 |
---|---|
9) VI (0) | 2018.02.22 |
7) Grep&Regular-Expression (0) | 2018.02.17 |
6) Basic Command2 (0) | 2018.02.15 |
5) Basic Command1 (0) | 2018.02.14 |