리눅스(Linux)에 대한 이해
리눅스의 역사와 특징에 대하여
개발에 필수적인 명령어 라인 사용법과 운영체제를 익히기 위해 리눅스 강의를 수강하며 리눅스에 대해 정리해본다.
리눅스란
리눅스(Linux)는 유닉스(Unix)를 기반으로 만들어진 운영체제(Operating System)의 커널, 혹은 리눅스 커널을 사용하는 운영체제를 의미한다. 그렇다면 이게 무엇을 의미하는지 하나씩 살펴본다.
유닉스
먼저 유닉스(Unix)란 무엇인가. 유닉스는 동시 다중 사용자 및 다중 작업의 실행을 지원하는 대화식 운영체제이다. 1970년대 초반 AT&T Bell Lab에서 Ken Thompson, Dennis Ritche, Douglas McIlroy등이 주축이 되어 개발했다. (Tmi. Ken Thompson, Dennis Ritche는 C언어를 만든 사람이기도 하다. Ken Thompson는 아직도 구글에서 개발 중이며 Dennis Ritche는 스티브잡스가 타개하던 해에 돌아가셨다.) 주로 서버용 컴퓨터에 사용되는 운영체제이며 보안성이 매우 뛰어난 특징을 가지고 있다.
유닉스가 다양한 변종으로 발전하면서, 표준화의 필요성으로 나타난게 POSIX(Portable Operating System Interface)이다. 이는 IEEE에서 제안하였으며 유닉스도 이를 따르고 있다. (Tmi. 약자에는 X가 있는데 뜻에는 X가 없다. 이는 POSI라고 하면 발음하기도, 모양도 좀 그래서 추가한 알파벳이라고 한다.)
리눅스의 역사
위 그림처럼 리눅스는 유닉스의 계보를 따라 나온 운영체제이다. 1991년 핀란드 헬싱키 대학의 Linus Tovalds가 개발한 오픈소스 OS로 유닉스를 경량화한 미닉스(Minix)를 만든 교수님 지도 아래 대학원에 있을 때, 미닉스를 보며 이렇게 저렇게 기능을 추가하다가 혼자 리눅스를 만들었다고 한다. (Tmi. 이 사람은 Git을 만든 천재이다. 리눅스 버전 관리 시스템의 필요성으로 혼자 만들었다고 한다.) 그의 이름 Linus에 Unix의 ix를 합성한 Linux의 최초 모습을 만들었다.
Copyright과는 반대로 지식과 정보는 소수에게 독점되어서는 안된다는 Copyleft를 주장하는 Richard Stallman이라는 사람이 있는데, 이 분은 GCC 등을 개발했으며 자유 소프트웨어 재단에서 진행하는 GNU 프로젝트를 주도하고 있다. Linus Tovalds가 이 분을 만나 GNU 프로젝트에 참여하면서 리눅스를 오픈소스로 공개하였고 수많은 개발자들이 개발에 동참하여 빠르게 발전하였다. (Tmi. GNU 프로젝트 덕분에 리눅스가 발전하게 되었으므로 Linus Tovalds는 원형만 제시했을 뿐 현대의 Linux는 GNU/Linux로 불리길 바라는 세력이 있다고 한다.)
즉, 리눅스가 짧은 역사를 가지고 있는 운영체제임에도 많은 인기를 얻게 된 이유는 오픈소스였기 때문이라 할 수 있다. 역사상 가장 많은 참여자가 관여하고 있는 오픈소스 프로젝트이다.리눅스 커널을 사용하여 다양한 배포판이 파생되었으며, 데스크톱, 웹 서버, 클라우드, 모바일 운영체제인 안드로이드, 게임, 수퍼컴퓨터 등 각종 임베디드 기기를 구동하는 운영체제로 다양한 곳에서 높은 점유율을 보이며 발전하고 있다.
리눅스의 특징
- 유닉스와 마찬가지로 다중 동시 사용자 시스템이다.
- 유닉스가 통신 네트워크를 지향해 설계된 것 처럼 리눅스 역시 서버로 작동하는데 최적화 되어있다. 따라서 서버 및 임베디드 시스템 분야에서 많은 발전을 하고 있다.
- 안정적이며 안전한 운영체제이다.
- 리눅스는 오픈소스로 누구나 소스 코드를 활용하여 수정 및 재배포가 가능하기 때문에 지속적인 업그레이드가 이루어진다.
- 리눅스를 기반으로 300가지가 넘는 배포판이 개발되었는데 대표적으로 RedHat, Ubuntu, Debian, Fedora 등이 있다.
- 리눅스는 명령어 라인(Command Line Interface)을 통해 컴퓨터에 직접 액세스한다. 따라서 운영체제의 학습을 위해서 사용할 수 있다.
리눅스의 구조
커널
커널(kernel)이란 운영체제의 핵심으로 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리하는 컴퓨터 프로그램이다. 시스템의 모든 것을 완전히 통제하고 메모리 관리, 프로세스 관리, 장치 관리 등 컴퓨터의 모든 자원을 제어하는 기능을 한다.
쉘
쉘(shell)이란 커널과 사용자가 대화하는 공간으로 키보드로 입력한 명령어를 운영체제에 전달하여 그 명령어를 실행하고, 수행 결과를 전송해주는 프로그램을 말한다. 즉, 커널과 사용자 간의 중간 다리 역할을 하는 프로그램이다. 의미는 껍데기라는 뜻인데, 사용자와 운영체제의 내부(커널) 사이의 인터페이스를 감싸는 층이기 때문에 그러한 이름이 붙여졌다.
최초 유닉스 쉘 프로그램인 sh의 확장판인 Bash 쉘을 리눅스 운영체제에 기본 쉘로 사용한다. macOS의 경우 터미널을 실행시키면 보이는 모습이 Bash였으나 최근 기본 쉘이 Zsh로 변경되었다.
디렉토리
디렉토리는 파일을 가지고 있는 그룹을 의미하며 이는 파일 시스템에 의해 관리된다. 리눅스에서 파일 시스템을 아는 것이 굉장히 중요한데, 왜냐하면 리눅스는 모든 것을 파일로 보기 때문이다. 파일 시스템이란 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 의미한다. 리눅스에서 일반적으로 사용되는 파일 시스템은 ext(extended file system, 확장 파일 시스템)이다.
리눅스는 위와 같은 계층적인 디렉토리 구조로 파일을 구성한다. 최상위 디렉토리를 루트(root)디렉토리라고 하며 / 로 표현한다. 드라이브를 여러 개로 분할하여 사용할 수 있는 윈도우즈와 달리 리눅스는 단일 파일 시스템으로 관리한다.
현대의 운영체제는 다중 사용자 개념을 제공한다. 이 때, 운영체제는 각 사용자에게 개별적으로 부여된 고유한 디렉토리를 제공하는데 이를 사용자 디렉토리(user directory)라고 하며 이는 일반 사용자를 위하여 읽고 쓰기 권한이 부여된 유일한 공간이다. Linux의 홈 디렉터리(home directory) 아래에 위치하며 경로는 /home/User_name
으로 표현한다.
참고로 경로(path)란 파일 시스템 상에서 디렉터리나 파일의 위치를 표현 또는 표기하는 방법이다. 리눅스는 /
(슬래시)로 계층을 구분하며 윈도우즈는 \
(백슬래시)로 구분한다.
다음 편에서는 리눅스 쉘 명령어와 스크립트에 대해 알아본다.