Computer >> 컴퓨터 >  >> 시스템 >> Linux

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

리눅스를 처음 접하는 사용자라면 배워야 할 정보의 산을 마주하게 됩니다. 터미널은 대체 무엇이고, 소프트웨어 업데이트는 어떻게 실행하며, 어떤 배포판을 선택해야 할까요? 이런 질문들은 누구나 한 번쯤 던지는 흔한 질문들입니다. 하지만 경험 많은 리눅스 사용자들조차 여전히 헷갈려 하는 질문이 하나 있습니다. 바로 "리눅스 가상 디렉터리 시스템에서 각 디렉터리에는 무엇이 들어 있는가?"입니다. 이 글에서는 루트("/")부터 "/boot"까지, 리눅스 가상 디렉터리 시스템의 모든 것을 하나씩 살펴보겠습니다.

리눅스 가상 디렉터리 시스템이란?

가상 디렉터리 시스템(Virtual Directory System)은 운영체제에서 파일과 디렉터리를 체계적으로 조직화하는 방식입니다. '가상'이라고 불리는 이유는 실제 물리적 구성 요소가 없기 때문입니다. 윈도우에서는 "C:" 드라이브, "D:" 드라이브처럼 각 물리적 드라이브가 독립적으로 존재하지만, 리눅스에서는 모든 물리적 디스크가 가상 디렉터리 시스템 안의 하나의 파일로 취급됩니다. 여기서 유명한 문구인 "모든 것은 파일이다(everything is a file)"가 나옵니다. 심지어 운영체제가 설치되어 현재 작동 중인 시스템 디스크조차 하나의 파일로 처리됩니다.

가상 디렉터리 시스템 이해하기

루트 디렉터리: /

가장 기본이 되는 곳부터 시작해 보겠습니다. "/"(루트) 디렉터리는 시스템의 모든 것을 담고 있는 최상위 디렉터리입니다. cd / 명령어를 실행하면 시스템에서 최대한 확대해서 볼 수 있습니다. "/" 디렉터리로 이동한 후 ls 명령어를 실행해 보면 무슨 말인지 바로 이해될 것입니다. "Documents", "Downloads", "Pictures" 같은 폴더 대신 "bin", "dev", "home" 같은 이름들이 보입니다. 배포판에 따라 조금씩 다르지만, 거의 항상 존재하는 핵심 디렉터리들이 있습니다. 이후 소개할 모든 디렉터리 경로 앞에는 "/"가 붙는데, 그 이유는 이곳이 모든 것의 시작점, 즉 '뿌리(root)'이기 때문입니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

바이너리 디렉터리: /bin

"/bin" 디렉터리에는 시스템의 모든 바이너리 프로그램이 들어 있습니다. 이곳을 들여다보면 앞서 사용한 cd, ls 같은 일반적인 명령어들을 확인할 수 있습니다. which cd 또는 which ls 명령어로도 위치를 찾아볼 수 있습니다. 최신 배포판에서는 대부분 "/bin" 디렉터리가 "/usr/bin" 디렉터리에 연결(link)되어 있습니다. "/usr" 디렉터리는 뒤에서 자세히 다루겠지만, 간단히 말해 시스템과 관리자용 바이너리는 "/bin"에, 일반 사용자용 바이너리는 "/usr/bin"에 분리하기 위해 사용됩니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

부트 디렉터리: /boot

"/boot" 디렉터리에는 시스템이 부팅될 때 필요한 가장 기본적인 정보가 모두 담겨 있습니다. 시스템에 설치된 모든 커널, 커널 설정 파일, Grub 부트로더 정보 등이 여기에 포함됩니다. 매우 중요한 디렉터리이며, 시스템과 별개의 EFI 시스템 파티션으로 취급됩니다. 그래서 수동으로 파티션을 나눌 때 최소한 "/"와 "/boot"를 각각 따로 만들어야 하는 것입니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

디바이스 디렉터리: /dev

"/dev" 디렉터리에는 시스템의 모든 장치(device) 파일이 들어 있습니다. 여기에는 하드웨어 구성 요소들과 함께 "null", "random" 같은 중요한 가상 장치들도 포함됩니다. 이곳을 살펴보면 "cpu", "sda", "tty", "stderr", "stdin", "stdout" 같은 항목들을 발견할 수 있습니다. 이것들은 매일 사용하게 되는 중요한 장치 파일들입니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

설정 디렉터리: /etc

"/etc" 디렉터리(발음은 'Etsy'와 비슷합니다)에는 시스템 전반의 설정 파일들이 모여 있습니다. SSH, PipeWire, systemd, Firefox 등 대부분의 프로그램 설정 파일이 이곳에 위치합니다. 가상 디렉터리 시스템의 '잡동사니 서랍' 같은 곳으로, 매우 중요하지만 원하는 파일을 찾는 것이 다소 번거로울 수 있습니다.

홈 디렉터리: /home

"/home" 디렉터리에는 사용자들의 개인 파일이 저장됩니다. 새 사용자 계정이 생성되면 일반적으로 고유한 "/home" 디렉터리가 부여되며, 해당 사용자는 자신의 홈 디렉터리 내 파일만 수정할 권한을 갖습니다. 일부 사용자에게는 관리자 권한이 주어지는데, 이것이 바로 sudo로 얻을 수 있는 권한입니다. 다만 이는 근본적으로 root 사용자의 권한을 빌려 쓰는 것일 뿐입니다. whoamisudo whoami를 연달아 실행해 보면 그 차이를 확인할 수 있습니다. 아마 여러분이 가장 익숙한 디렉터리일 것입니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

라이브러리 디렉터리: /lib, /lib32, /lib64

"/lib" 디렉터리들은 "/bin" 또는 "/sbin"(뒤에서 설명)의 프로그램들이 사용하는 특정 라이브러리들을 담고 있습니다. 펌웨어와 커널 및 커널 모듈 설치에 필요한 라이브러리들도 이곳에 저장됩니다. 자매 디렉터리인 "/lib32"와 "/lib64"는 각각 32비트 및 64비트 운영체제용 버전을 담고 있으며, 기본 "/lib" 디렉터리와 거의 동일합니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

미디어 디렉터리: /media와 /mnt

이 두 디렉터리는 비슷한 용도로 사용되므로 함께 설명하겠습니다. "/media" 디렉터리는 CD, DVD, USB 등 이동식 미디어의 내용물이 마운트되는 곳입니다. USB 드라이브를 꽂으면 대부분의 시스템에서 "/media" 아래에 나타나는 것을 확인할 수 있습니다.

"/mnt" 디렉터리는 장기간 유지되는 마운트에 사용됩니다. 예를 들어 시스템에 SSD를 추가했다면 "/mnt" 디렉터리에 영구적인 마운트 지점을 설정할 수 있습니다. 또는 집에 NAS가 있다면 해당 스토리지를 "/mnt" 디렉터리에 마운트하는 방식으로 활용할 수도 있습니다.

/opt

"/opt" 디렉터리에는 사용자가 추가로 설치한 서드파티 소프트웨어 패키지가 저장됩니다. 생각보다 규모가 작은 경우가 많습니다. 필자의 시스템에는 Brave, Google Chrome, Sublime Text 파일만 들어 있습니다. 특정 소프트웨어의 저장소(repository)를 추가하면 그 결과물이 "/opt"에 생성되는 경우가 많습니다.

/proc

"/proc" 디렉터리에는 하드웨어 정보와 진행 중인 프로세스 정보가 담깁니다. 시스템이 하드웨어 구성을 파악하면서 그 정보가 이곳에 저장됩니다. 예를 들어 cat /proc/cpuinfo 명령어를 실행하면 CPU에 대해 상상했던 것보다 훨씬 많은 정보를 얻을 수 있습니다.

/root

이곳은 root 사용자를 위한 "/home" 디렉터리라고 생각하면 됩니다. root 계정으로 많은 작업을 한다면 이 디렉터리에서 관련 파일들을 찾을 수 있습니다.

/run

"/run" 디렉터리는 "/proc"과 다소 비슷하지만, 하드웨어가 아닌 소프트웨어에 초점을 맞춘다는 차이가 있습니다. 두 디렉터리 모두 '휘발성 런타임 데이터(volatile runtime data)'를 저장합니다. 즉, 시스템을 재부팅하면 대부분 초기화되지만, 운영체제가 시스템과 사용 환경을 학습하는 동안 유용한 데이터를 임시로 보관하는 역할을 합니다.

/sbin

"/sbin" 디렉터리에는 root 사용자만 실행할 수 있어야 하는 바이너리 프로그램들이 들어 있습니다. 예를 들어 시스템을 종료하는 poweroff 같은 프로그램은 "/sbin"에 위치하는 것이 적절합니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

/srv

이 디렉터리는 웹 접근 가능한 서비스(Web-accessible services)와 관련된 사이트별 데이터를 저장합니다. FTP, HTTP 같은 서비스를 운영한다면 관련 정보가 이곳에 저장됩니다. 필자는 이런 서비스를 운영하고 있지 않아서 "/srv" 디렉터리가 비어 있습니다.

/sys

"/sys" 디렉터리에는 시스템의 핵심 장치 정보가 담겨 있습니다. 필자의 시스템에서는 "/sys/dev", "/sys/firmware", "/sys/kernel" 같은 항목들을 확인할 수 있습니다. "/dev" 디렉터리에 있는 수많은 장치 중에서 특히 중요한 하드웨어 장치들만 골라 담은 곳이라고 이해하면 됩니다.

리눅스 가상 디렉터리 구조 완벽 가이드 – 루트(/)부터 /boot까지

/tmp

"/tmp" 디렉터리는 시스템의 여러 프로그램이 생성하는 임시 데이터를 저장하는 데 사용됩니다. 재부팅하지 않아도 며칠 후에는 정보가 삭제되며, 다른 저장 공간을 확보하기 위한 임시 잠금 용도로 활용됩니다. 일반 사용자가 "/tmp" 디렉터리에서 직접 해야 할 일은 많지 않습니다.

/usr

"/usr" 디렉터리는 점점 더 중요해지고 있습니다. 요즘은 "/bin", "/lib", "/sbin" 같은 디렉터리들이 "/usr" 안의 해당 디렉터리들에 연결되어 있습니다. 시스템에서 ll 명령어를 실행해 보면 이를 직접 확인할 수 있습니다.

이 링크들은 심볼릭 링크(soft link)이므로 연결을 해제할 수도 있지만, 결국 시스템은 "/bin"이나 "/sbin" 대신 "/usr/bin" 또는 "/usr/sbin" 디렉터리에서 프로그램을 읽어 옵니다. 이는 디렉터리 계층 구조를 단순화하고 프로그램을 더 쉽게 찾을 수 있도록 하기 위함입니다. 리눅스와 유닉스 간 전환을 용이하게 하고, 바이너리 위치가 고정되지 않도록 하는 편의성 개선이기도 합니다.

/var

"/var" 디렉터리는 "/tmp"와 비슷하지만 데이터를 좀 더 오래 보관합니다. 로그 파일이나 KVM 가상 머신 디스크 이미지 같은 데이터도 이곳에 저장됩니다.

지금까지 살펴본 것처럼, 리눅스 가상 디렉터리 시스템은 시스템이 사용하는 파일들을 체계적으로 정리하고 관리·운영을 더욱 쉽게 만들기 위해 설계되었습니다. 물론 리눅스의 매력대로 이 구조를 자유롭게 변경할 수도 있지만, 대부분의 데스크톱 사용자라면 기본 구조를 그대로 두는 것이 가장 좋습니다. 리눅스에 더 깊이 관심이 있다면 2021년 기준 리눅스에 가장 적합한 파일시스템이 무엇인지 알아보는 것도 추천합니다.