본문 바로가기
프로그래밍/리눅스

코딩 자율학습 리눅스 입문 with 우분투 학습 3일차 정리

by bantomak 2025. 1. 12.
반응형

4.1 파일 시스템

파일 시스템(file system)은 파일에 대한 정보를 관리하는 소프트웨어이다. 파일 시스템은 운영체제의 요청을 받아 파일을 저장 장치에 저장하고, 운영체제가 저장된 파일을 읽을 수 있게 한다. 그리고 원하는 파일을 빠르게 찾을 수 있도록 돕는다. 이를 위해 파일 시스템은 저장 장치의 특성에 따라 데이터를 논리적인 단위로 구분해 읽고 쓸 수 있는 기능을 지원한다. 또한 파일의 이름과 크기, 저장 위치를 관리하는 등 파일을 관리하기 위한 여러 기능을 제공한다. 

 

파일 시스템을 용도별로 구분하자면

  • 디스크 기반 파일 시스템
  • 네트워크 기반 파일 시스템
  • 가상 파일 시스템

디스크 기반 파일 시스템

디스크 기반 파일 시스템(disk-based file system)은 HDD나 SSD와 같은 저장 장치(보통 디스크라고 함)를 위한 파일 시스템으로, 가장 흔하게 사용된다. 보통 파일 시스템이라고 하면 디스크 기반 파일 시스템을 의미한다.

 

디스크 기반 파일 시스템은 컴퓨터에 물리적으로 연결된 저장 장치에 설치하고 사용할 수 있다. 저장 장치에 저장된 파일의 이름, 크키, 속성, 경로 등에 대한 정보와 실제 파일 내용이 저장되는 위치 정보를 관리한다. 그래서 사용자나 소프트웨어가 어떤 파일에 대한 속성을 조회하거나 파일 내용을 조회할 때 빠르게 대응할 수 있다.

 

포맷(format)은 저장 장치에 파일 시스템을 설치하는 것을 의미한다. 즉, 저장 장치를 사용하기 전에 파일 시스템을 설치해 파일을 저장할 수 있는 상태로 만드는 것이다. 저장 장치에 파일 시스템을 설치하면 기존 파일 시스템의 정보가 지워지므로 데이터는 모두 삭제된다. 리눅스 시스템의 디스크도 파일 시스템을 설치해야 사용할 수 있다. 리눅스에서 주로 사용하는 디스크 파일 시스템은 EXT4와 XFS이다. EXT4(Extended Filesystem 4)는 PC 환경에서 널리 쓰이는 파일 시스템으로 안정적이고 균형 잡힌 성능을 보여준다. XFS(Extendible File System)는 EXT4보다 대용량 파일에 최적화돼 있어 대용량 데이터 처리나 서버 환경에서 주로 사용된다.

포멧시에 파일 시스템 선택

EXT4 vs XFS

네트워크 기반 파일 시스템

네트워크 기반 파일 시스템(network-based file system)은 원격 컴퓨터(서버)에 연결된 저장 장치를 네트워크로 연결해 로컬 컴퓨터(클라이언트)에서 사용하는 파일 시스템이다. 네트워크 기반 파일 시스템이 제대로 작동하려면 네트워크를 통해 저장 장치를 제공하는 서버와 저장 장치를 제공받는 클라이언트에 적절하게 설정해야 한다. 서버는 서버 컴퓨터에 직/간접적으로 연결된 저장 장치의 일부를 네트워크 기반 파일 시스템에 제공할 수 있도록 설정한다. 클라이언트는 서버 컴퓨터의 네트워크 주소, 네트워크 기반 파일 시스템의 경로, 로컬 시스템의 경로 등을 설정한다. 서버와 클라이언트 모두 제대로 설정되면 클라이언트는 원격 저장 장치를 마치 로컬 저장 장치처럼 사용할 수 있다.

가상 파일 시스템

일반적인 파일 시스템은 사용자나 소프트웨어가 저장하려는 정보를 디렉터리와 파일로 구조화해 저장한다. 반면에 가상 파일 시스템(pseudo file system)은 파일이 실존하지 않는다. 소프트웨어가 노출하려는 정보(실시간 상태 등)를 디렉터리와 파일로 구조화해 노출한다. 리눅스에서 procfs와 sysfs가 대표적인 가상 파일 시스템이다.

 

리눅스 커널은 수많은 정보를 관리한다. 응용 프로그램은 커널이 관리하는 데이터에 직접 접근할 수 없고, 커널이 제공하는 인터페이스를 통해서만 접근할 수 있다. 이때 커널이 제공하는 인터페이스가 바로 procfs와 sysfs이다. 커널은 응용 프로그램에 제공할 정보를 디렉터리와 파일로 구조화한다. 응용 프로그램은 커널이 구조화한 디렉터리와 파일에 접근해 데이터를 읽거나 쓸 수 있다. 응용 프로그램이 가상 파일 시스템의 어떤 파일을 읽으면 커널은 해당 파일의 핸들러 함수(handler function, 파일에 대한 동작을 정의한 함수)를 호출한다. 핸들러 함수는 커널 정보를 바탕으로 파일 내용을 실시간으로 만들어 응용 프로그램이 읽어가게 한다. 이러한 방식으로 커널은 가상 파일 시스템을 이용해 커널의 실시간 정보를 응용 프로그램에 제공한다.

프로세스 ID 324에 대한 프로세스 정보 표시

4.2 리눅스의 파일 계층 구조

윈도우에는 드라이브(drive)라는 개념이 있다. 윈도우에 연결된 물리 디스크나 논리 디스크는 각 드라이브로 연결된다. 즉, 드라이브는 각각의 디스크를 의미한다. 각 드라이브를 클릭하면 하위에 여러 폴더가 표시된다. 폴더를 클릭하면 폴더에 포함된 파일 목록과 폴더 하위에 존재하는 또 다른 폴더가 보인다.

 

리눅스의 파일 계층 구조는 윈도우와 다르다. 디스크별로 드라이브라는 개념이 도입한 윈도우와 달리 리눅스는 모든 파일이 하나의 계층 구조로 관리된다. 시스템에는 하나의 루트 디렉터리(/)만 존재한다. 시스템상 존재하는 모든 파일은 루트 디렉터리 하위 어딘가에 존재한다.

 

[Linux/Unix] 절대경로와 상대경로

절대 경로(Absolute Path) 표시법절대 경로는 파일의 root로부터 해당 파일에 이르기까지의 전체 경로(URL)를 의미한다. 절대 경로는 보통 다른 사람의 문서나 파일을 이용할 때 사용한다. 절대 경로는

jettstream.tistory.com

물리 디스크나 논리 디스크가 리눅스 시스템에 연결되면 리눅스 커널은 디스크별로 이름(예: /dev/sda)을 붙인다. 해당 디스크를 운영체제에 연결하려면 디스크에 파일 시스템을 설치해야 한다. 파일 시스템을 설치하고 나면 디스크를 리눅스 시스템에 마운트 한다. 마운트(mount)는 파일 시스템이 설치된 디스크를 특정 디렉터리에 연결하는 작업이다. 가상 파일 시스템에서 언급한 것처럼 procfs는 /proc 디렉터리에, sysfs는 /sys 디렉터리에 마운트 된다. 간단한 예를 들어보자. 디스크 3개가 있다. 디스크 이름은 각각 /dev/sda, /dev/sdb, /dev/hda이고, ext4와 xfs 파일 시스템이 설치됐다. disk1은 루트 디렉터리(/)에, disk2는 /mnt 디렉터리에, disk3은 /data 디렉터리에 각각 마운트 되는 식이다.

 

리눅스는 모든 파일이 단일 계층 구조를 이루므로 윈도우의 드라이브 개념보다는 이해하기 어렵울 수 있다. 하지만 단일 계층 구조라서 더 유연하게 시스템을 구성할 수 있다.

 4.3 파일 종류

리눅스는 일반 파일뿐만 아니라 여러 대상을 파일로 표현한다. 리눅스에서 지원하는 파일의 종류는 다음과 같다.

파일 종류별 표시 문자

  • - 일반 파일
  • d 디렉터리
  • l 심볼릭 링크
  • b 블록 디바이스 파일
  • c 문자 디바이스 파일
  • p 파이프 파일
  • s  소켓 파일

4.4 디렉터리

디렉터리(directory)는 파일 시스템을 계층화할 때 사용하는 도구이다. 디렉터리로 여러 개념을 동등한 수준에서 수평적으로 분리할 수 있다. 또한, 디렉터리 하위에 다른 디렉터리를 구성해서 상하 개념을 만들 수도 있다.

루트 디렉터리(/)

루트 디렉터리(root directory)는 파일 시스템의 최상단에 위치하는 디렉터리로, /로 표기한다. 시스템의 모든 파일과 디렉터리가 루트 디렉터리 하위에 구성된다. 루트 디렉터리의 바로 아래에 생성된 디렉터리는 전통적으로 그 이름과 역할이 정해져 있다. 반드시 지켜야 하는 규칙은 아니지만 전통적으로 그래 왔고, 앞으로도 그럴 것이다. 대표적인 디렉터리를 다음과 같다.

루트 디렉터리 하위의 주요 디렉터리

현재 작업 디렉터리(.)

Bash는 언제나 특정 디렉터리를 기준으로 실행된다. Bash가 실행 중인 디렉터리가 현재 작업 디렉터리이다. 터미널에서 pwd 명령어를 실행하면 현재 작업 디렉터리를 확인할 수 있다.

홈 디렉터리(~)

홈 디렉터리(home directory)는 리눅스에 사용자를 추가하면 사용자별로 할당하는 디렉터리로, 추가한 사용자를 위한 공간이다. 일반 사용자는 모두 사용자만의 홈 디렉터리가 존재한다. 홈 디렉터리에는 사용자별 설정이나 데이터가 저장된다. 사용자가 터미널을 실행하거나 SSH로 리눅스 시스템에 접속하면 로그인한 사용자의 홈 디렉터리를 현재 작업 디렉터리로 설정해 시작한다. 리눅스를 부팅한 직후 터미널에서 pwd 명령어를 실행하면 홈 디렉터리를 확인할 수 있다.

 

Bash에는 홈 디렉터리를 나타내는 특수한 표현이 있다. 바로 ~(tilde, 물결표)이다. ~사용자_이름은 해당 사용자의 홈 디렉터리를 나타낸다. 사용자 이름 없이 ~만 사용하면 현재 사용자의 홈 디렉터리를 나타낸다. 루트 디렉터리로 이동했다가 cd ~를 실행해 보자.

상대 경로

상대 경로(relative path)는 현재 작업 디렉터리를 기준으로 파일 경로를 나타낸다. 현재 작업 디렉터리는 변경될 수 있어서 파일 위치를 상대 경로로 표시하면 현재 작업 디렉터리의 위치에 따라 표시 방법이 달라진다.

 

파일을 상대 경로로 표시할 때 사용하는 표기법은 .과 ..이다.

  • .은 현재 작업 디렉터리를 나타낸다.
  • ..은 현재 작업 디렉터리의 상위 디렉터리를 나타낸다.

그래서 현재 작업 디렉터리를 현재 작업 디렉터리의 상위 디렉터리로 옮기는 명령은 cd ../ 혹은 cd .. 이라고 입력하면 된다.

절대 경로

절대 경로(absolute path)는 루트 디렉터리를 기준으로 파일 경로를 나타낸다. 모든 파일은 루트 디렉터리 하위에 존재한다. 따라서 모든 파일은 하나의 절대 경로로 표시할 수 있다. 절대 경로는 항상 루트 디렉터리(/)부터 시작한 파일 경로를 적는다.

 

절대 경로를 간단히 사용해 보자. 먼저 현재 작업 디렉터리를 확인한다. 그리고 절대 경로를 이용해 루트 디렉터리로 이동한다.

다시 홈 디렉터리로 이동해 보자.

정리하자면

경로를 표기하는 2가지 방법을 살펴봤다. 상대 경로와 절대 경로 중 어떤 방법이 좋은 방법일까? 정답은 '그때그때 다르이다'이다. 예제에서 보듯이 상대 경로가 편한 경우도 있고, 절대 경로가 편한 경우도 있다. 파일 위치가 현재 작업 디렉터리와 가깝다면 상대 경로로 표시하는 것이 더 편하다. 루트 디렉터리와 가깝거나 현재 작업 디렉터리와 멀다면 절대 경로로 표시하는 것이 더 편하다. 그때그때 적합한 방법을 선택해 보자.

댓글