서버에 접속하면 한 화면 안에서 여러 이름을 만난다.

Ubuntu 26.04 LTS
Linux server 6.x
bash
user@server:~$

사람들은 이 환경 전체를 흔히 “리눅스 서버”라고 부른다. 하지만 Linux, Ubuntu, Bash와 지금 보고 있는 터미널은 같은 것이 아니다. 이 경계를 알아야 애플리케이션이 어디에서 실행되고 누구에게 자원을 요청하는지 설명할 수 있다.

본문 이미지 1 / 계층 Linux 서버를 이루는 층
장면 설명Linux 커널은 하드웨어를 관리하는 한 층이고, 배포판은 그 위의 도구와 환경까지 묶은 전체 구성이다.

Linux 커널

엄밀한 의미의 Linux는 커널이다. 커널은 CPU 시간을 배분하고, 프로세스의 메모리를 관리하며, 장치와 파일 시스템 및 네트워크에 접근하는 공통 인터페이스를 제공한다.

커널은 사용자가 직접 문서를 작성하거나 웹 페이지를 제공하는 애플리케이션이 아니다. 여러 프로그램이 같은 하드웨어를 안전하게 사용하도록 실행과 자원의 경계를 관리한다.

서버 프로그램이 read()를 호출하면 Linux 커널은 파일 디스크립터와 메모리 범위를 확인하고 실제 입출력 대상에 요청을 연결한다. 앞의 두 글에서 본 운영체제의 자원 관리가 구체적인 Linux 구현과 만나는 지점이다.

Linux 배포판

커널을 부팅했다고 우리가 사용하는 서버 환경이 모두 갖춰지는 것은 아니다. 프로그램을 설치하고 시스템을 설정하며 명령을 실행하려면 라이브러리, 기본 도구, 패키지 관리자와 서비스 구성이 필요하다.

Debian이나 Ubuntu 같은 Linux 배포판은 Linux 커널에 이런 사용자 공간 소프트웨어와 설치 및 관리 체계를 조합한다. 배포판마다 선택한 패키지, 기본 설정, 업데이트 정책과 지원 방식이 다르다.

따라서 “Linux는 커널이다”와 “Ubuntu는 Linux 운영체제다”라는 말은 문맥에 따라 함께 성립한다. 앞 문장은 구성 요소의 정확한 경계를 말하고, 뒤 문장은 Linux 커널을 중심으로 구성된 완성된 사용 환경을 가리킨다.

셸

터미널에서 다음 명령을 입력해 보자.

ls -l /var/log

문자열을 읽어 명령 이름과 인자를 구분하고 프로그램 실행을 준비하는 것은 셸이다. Bash는 널리 사용되는 셸 가운데 하나다. 셸은 변수, 파이프, 리다이렉션과 스크립트 문법도 제공한다.

셸 역시 커널이 아니라 사용자 공간에서 실행되는 프로그램이다. ls를 실행하거나 파일을 열어야 할 때 프로세스 생성과 파일 시스템 기능을 커널에 요청한다.

본문 이미지 2 / 명령 전달터미널에 입력한 명령이 프로그램이 되는 과정
장면 설명터미널은 입출력 창이고 셸은 명령을 해석해 프로그램 실행으로 연결하는 사용자 공간 도구다.

터미널과 사용자 공간

터미널은 셸과 동일하지 않다. 터미널 프로그램은 사용자의 키 입력을 전달하고 프로그램이 출력한 문자를 화면에 표시하는 인터페이스다. 그래픽 환경의 터미널 에뮬레이터나 원격 접속 화면이 여기에 해당한다.

터미널 안에서 Bash를 실행할 수도 있고 다른 셸을 실행할 수도 있다. 반대로 셸은 스크립트 파일을 비대화형으로 실행할 수 있으므로 항상 눈에 보이는 터미널이 필요한 것도 아니다.

사용자가 터미널에 명령을 입력하면 셸이 해석하고, 셸이 프로그램을 실행하며, 프로그램은 필요할 때 커널에 시스템 콜을 요청한다.

사용자
→ 터미널
→ 셸과 애플리케이션
→ 시스템 라이브러리
→ Linux 커널
→ CPU, 메모리와 장치

이 구조에서 셸, 라이브러리와 애플리케이션이 실행되는 영역을 사용자 공간이라고 부른다. 커널과 분리된 주소 공간과 제한된 권한에서 실행된다는 뜻이다.

핵심 개념

Linux를 이루는 구성 요소

리눅스Linux
1991년 시작되어 여러 CPU 구조와 장치를 지원하도록 발전한 자유 소프트웨어 운영체제 커널이다.
리눅스 커널Linux Kernel
Linux 프로젝트가 개발하는 커널로, 프로세스와 메모리, 장치, 파일 시스템과 네트워크 같은 핵심 자원을 관리한다.
리눅스 배포판Linux Distribution
Linux 커널에 시스템 라이브러리, 도구, 패키지와 설치 및 업데이트 정책을 조합한 사용 가능한 운영체제 구성이다.
셸Shell
명령을 읽고 해석하여 프로그램 실행과 입출력 연결을 구성하는 명령 언어 해석기다.
터미널Terminal
사용자 입력과 프로그램의 문자 출력을 연결하는 인터페이스다. 현대 환경에서는 주로 터미널 에뮬레이터를 뜻한다.
사용자 공간User Space
일반 애플리케이션과 라이브러리가 커널보다 제한된 권한으로 실행되는 메모리 및 실행 영역을 가리킨다.