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

11. shell - 리눅스 파일 시스템

by devraphy 2021. 9. 9.

1. 파일 시스템이란?

- 이전에 운영체제 포스팅에서 파일 시스템에 배운적이 있다. 

- 우선 파일 시스템이 무엇인지 복습을 해보자.

 

- 파일과 관련된 대표적인 명령어 4가지 (open, read, write, close)가 있다. 

- 일반적으로 파일을 읽고(read) 쓰기(write) 위해 사용되는 경우가 많다.

- 하지만, 네트워크의 입장에서 파일을 읽고 쓴다는 것은 무슨 의미일까? 

- 이는 네트워크를 통해 다른 서버로부터 데이터를 가져와 읽거나, 다른 서버로 데이터를 입력(쓰기)하는 것을 의미한다.

- 이러한 관점에서 생각해보면, 외부장치도 데이터를 읽거나 쓰는 과정을 공통적으로 필요로 한다. 

   ex) CD, USB, 마우스, 키보드, 모니터 etc.

- 이와 같은 이유로, 각 장치에 따른 별도의 인터페이스를 만드는 것이 아니라 

- Virtual File System 이라는 공통 인터페이스를 통해, 각 형식에 맞는 파일 시스템을 제공하는 방식으로 발전해왔다. 

 

 

a) 이런 개념은 어디서 파생된 것일까?

▶ 유닉스의 철학

   - 모든것은 파일이다.

   - 모든 연결(interaction), 모든 디바이스는 파일을 읽고 쓰는 것처럼 이루어져있다. 

   - 그러므로 모든 자원에 대한 추상(abstract) 인터페이스를 이용해 파일 인터페이스로 활용한다. 

 

잠깐 쉬어가기!!!

- 지금 배우는 지식은 기본중의 기본 지식이기에 온전히 이해하고 소화하는 것이 중요하지만,

- 현업에서 개발자로 일하다 보면 계속해서 끊임없이 새로운 기술에 대한 이해를 필요로 할 것이다. 

- 그때도 지금처럼 근본을 파고들어 기술에 대해서 세부적으로 이해한다면 참 좋겠지만, 

- 매번 새로운 기술에 대해서 그렇게 공부하기는 힘들고 고통스러운 과정을 거칠 것이다. 

- 그러므로 핵심에 대해서만 이해하고, 그 기술이 어떤 input을 받아서 어떤 output을 반환하는지에 대한 이해를 하려고 하자.

- 여기서 어떤 기술의 핵심이라 함은, input을 받아서 어떤 과정을 거쳐 output을 만드는지에 대한 것이다. 

- 이 또한 깊게 이해하는 것이 아니라, 전반적으로 이해하면 된다. 

- 이런 방식으로 새로운 기술을 익히는 과정을 추상화라고 한다. 

 


2. 리눅스 파일 시스템 

a) /dev

- dev는 device를 의미한다. 

- dev 디렉토리는 여러가지 디바이스를 파일처럼 접근할 수 있도록, 파일형태로 보관하는 디렉토리다. 

- 위의 사진에서 볼 수 있듯이 굉장히 많은 파일들이 있다.

- 대표적으로 net은 네트워크를 의미하고, tty는 터미널을 의미한다. 

- 다른 파일들에 비해 tty로 시작하는 파일이 굉장히 많다. 왜 그럴까? 

   ▶ 터미널에 접속할 때마다, 터미널 환경이 가상 디바이스처럼 생성된다.  

    그렇게 생성된 각각의 터미널 디바이스가 각 파일을 할당받게 되는 것이다. 

 

- 그렇다면 tty 파일에는 무엇이 들어있을까?

- cat 명령어를 이용하여 tty 파일을 읽어보았는데, 아무런 내용도 담겨있지 않다. 왜그럴까?

   ▶ 그 이유는 현재 터미널과 tty파일이 연결되어 있기 때문이다. 

   ▶ tty 폴더는 가상파일시스템 인터페이스를 통해 가상 터미널로서 동작을하고, 키보드로부터 입력을 받는다.

 

- 그럼 무언가를 입력한다면 어떻게 될까? 

- 위의 사진처럼, 입력한 내용이 화면에 출력된다.

- 즉, 키보드로 입력한 내용이 가상파일시스템을 통해 tty파일에 저장이 되는 것이다. 

- 그러므로 cat 이라는 명령어를 통해 실시간으로 화면에 출력되는 것이다. 이해가 되는가?

- 이처럼 터미널도 가상파일시스템을 통해 파일로서 다뤄지는 것을 확인할 수 있었다. 

 


 3. 슈퍼블록, inode와 파일

- 파일 시스템의 예시를 간단하게 만들어보자. 

  ▶ 40GB짜리 SSD를 컴퓨터에 연결을 시킨다. 

  ▶ 그리고 SSD의 공간을 20GB씩 나눠서 /A와 /B라는 디렉토리와 연결시켜서 파일시스템을 구성한다.

 

- 이렇게 구성된 파일시스템은 무엇으로 이루어져 있을까? 

 

  ▶ 슈퍼블럭 

     - 파일시스템의 정보를 가지고 있다. 

     - 여기서 파일시스템의 정보란, 각각의 파일시스템의 용량, 파일 시스템의 구성방식, 파일시스템의 알고리즘 등을 의미한다. 

 

  ▶ inode

   - 파일시스템 내부에는 다양한 파일이 존재한다. 그렇다면 이 파일들은 무엇으로 처리할까?

   - 파일을 처리하기위해 사용하는 것이 inode다. 

   - inode는 "파일이름 : inode번호"의 형태로 파일을 매핑한다.

   - 여기서 inode는 pid와 같이 각 파일을 구분하기 위한 고유번호를 말한다 

   - 이를 기반으로 파일을 조작하고 처리할 수 있다. 

 

  ▶ 메타데이터

    - 프로세스도 PCB라는 프로세스의 상태정보를 저장하는 별도의 공간이 존재한다. 

    - 이처럼 inode도 파일의 상태정보를 저장하는 공간이 있는데, 이를 메타데이터 라고 부른다.

    - 메타데이터에는 파일권한, 파일의 소유자 정보, 파일 사이즈, 생성시간, 데이터 위치 등 파일에 대한 정보를 가진다.

리눅스에서 사용하는 ext 파일시스템 알고리즘의 구조

 

 

  ▶ disk 블럭

    - 각 inode 파일이 가진 메타데이터를 구성하는 데이터를 일정한 크기로 분리하여 저장하는데, 이 단위를 말한다. 

    - 바로 위의 사진에서 data라고 분리되어 있는 것을 말한다. 

 

댓글