리눅스는 유닉스 계열의 운영체제로, 핀란드 출신의 프로그래머 리누스 토르발스가 1991년 공개한 운영체제입니다. 학부생 신분으로 지도교수가 만든 운영체제를 사용하면서 마음에 안 드는 부분을 반영해서 새롭게 만들어낸 것으로 알려져있고, 최초 공개 후 여러 개발자들이 참여하는 집단 프로젝트로 변모해서 1994년 최초 버전이 완성되었습니다.
본 절에서는 리눅스 운영체제의 구조, 기본 명령어, 파일 시스템에 대해 설명합니다.
1.1.1. 리눅스 운영체제의 구조¶
리눅스 운영체제는 크게 커널(Kernel), 셸(Shell), 파일 시스템(File System)으로 구성됩니다.
커널은 운영체제의 핵심 부분으로 리누스 토르발스가 개발한 부분입니다. 통상 다양한 버전의 배포판이나 리눅스를 기반으로 파생된 안드로이드, 스팀OS 등을 "리눅스"로 통칭하는 이유는 모든 종류의 운영체제가 리누스 토르발스가 개발하고 지금까지 관리하고 있는 커널을 기반으로 작동하기 때문입니다. 커널은 하드웨어와 운영체제를 연결하는 역할을 합니다. CPU, RAM, 저장장치, 네트워크 장치 등 하드웨어 자원을 인식하고, 관리하고, 작업을 배분하고, 기능을 조정하는 등 모든 역할을 담당하는, 운영체제의 두뇌이자 핵심 역할을 합니다. 커널에 직접 연결된 쉘을 tty(TeleType), 원격으로 연결된 쉘을 pty(pseudo TTY)라고 부릅니다.
쉘은 사용자가 입력하는 명령어를 해석하고 커널에 전달하는 역할을 담당하는, 일종의 커뮤니케이션 중재자입니다. 리눅스 운영체제에서 사용자가 화면을 통해 확인하고 명령어를 입력하고, 결과물이 출력되는 창을 터미널(terminal)이라고 부르는데, 이 터미널 속에서 실행되는 프로그램을 쉘이라고 이해하면 됩니다. 쉘에서는 정해진 문법에 따라서 사용자가 운영체제에 명령어를 입력하고, 이 명령어를 쉘의 방식으로 해석해서 커널에 전달하는 역할을 합니다. 쉘에는 여러 종류가 있는데 가장 널리 사용하는 쉘은 bash(Bourne Again SHell)이고, macOS에서는 zsh(Z shell)를 기본 쉘로 사용합니다.
파일 시스템은 운영체제에서 파일을 관리하는 규칙을 의미합니다. 리눅스는 일반적인 저장매체뿐만 아니라 하드웨어 자원, 네트워크 장치, 작업 프로세스 등 운영체제에서 관리하는 모든 자원을 '파일’로 인식하고 관리합니다. 따라서, 리눅스에서 운영체제가 어떤 하드웨어를 인식하고 어떤 방식으로 관리하고 있는지를 파일 시스템을 통해서 확인할 수 있습니다. 리눅스의 파일 시스템은 계층적 구조를 가지고 있으며, 최상위 디렉토리를 루트 디렉토리(root directory)라고 부르며, 루트 디렉토리 내에 하드웨어에 관한 정보, 사용자 정보, 시스템 설정에 관한 정보, 작업 프로세스에 관한 정보 등 운영체제의 모든 것이 담겨있습니다. 이 때문에 루트 디렉토리에 있는 파일은 일반 사용자가 접근할 수 없고 최상위 관리자인 루트 사용자(root)만 접근할 수 있습니다.
1.1.2. 기본 명령어¶
1.1.3. 사용자 및 권한¶
리눅스의 파일 시스템은 다중 사용자 환경(multi-user environment)을 지원합니다. 즉, 여러 사용자가 동시에 하나의 리눅스 시스템에 접속해서 사용할 수 있습니다. 이를 위해 리눅스는 각 사용자에게 고유한 사용자 계정(user account)을 부여하고, 각 사용자 계정에 대한 권한(permission)을 설정합니다. 사용자 계정은 사용자 이름(username)과 사용자 ID(user ID, UID)로 구분됩니다. 사용자 ID는 각각의 사용자별로 고유한 숫자로 표시됩니다. 루트 사용자의 UID는 0이고, 일반 사용자의 UID는 1000번부터 시작하여 부여됩니다.
통상 리눅스 운영체제에 접속할 때에 입력하는 id와 비밀번호를 기준으로 사용자를 식별하고, 로그인한 사용자의 권한으로 시스템을 이용합니다. 최초 로그인을 하면 각각 사용자의 최상위 디렉토리인 /home/[USERNAME] 디렉토리에서 작업을 시작합니다.
모든 디렉토리와 파일에는 소유자(owner), 소유 그룹(group)이 정해져있습니다. 소유자와 소유 그룹은