티스토리 뷰

SYSTEM/LINUX

8) Link

chrisysl 2018. 2. 21. 15:57

# 리눅스 파일의 구성. 

 - 파일명 + 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함