처음 리눅스를 접하면 낯선 전문 용어와 익숙하지 않은 표현들을 마주하게 됩니다. 어떤 사용자에게는 새로운 것을 배울 좋은 기회이지만, 다른 사용자에게는 불필요한 전문 용어들이 리눅스와 오픈소스 세계를 더욱 어렵고 복잡하게 느끼게 만드는 요인이 되기도 합니다.
만약 여러분도 비슷한 상황에 처해 있지만 도망치기보다는 리눅스만의 독특함을 받아들이고 싶다면, 이 글이 큰 도움이 될 것입니다. 리눅스로의 전환을 최대한 매끄럽게 만들 수 있도록 가장 자주 사용되는 리눅스 용어들을 정리했습니다.
1. 리눅스(Linux)
가장 대표적인 용어부터 시작해 보겠습니다. 바로 '리눅스'입니다. 리눅스를 설치한 사람이라면 당연히 그것이 무엇인지 알 것이라고 생각하기 쉽지만, 실제로는 그렇지 않은 경우가 많습니다. 일부 사용자는 리눅스를 운영체제라고 잘못 알고 있습니다. 하지만 엄밀히 말해 리눅스는 1991년 리누스 토르발스(Linus Torvalds)가 개발한 무료 오픈소스 커널입니다. 그렇다면 커널이란 무엇일까요?
2. 커널(Kernel)
커널은 운영체제가 하드웨어와 상호작용할 수 있도록 돕는 컴퓨터의 핵심 부분입니다. 마우스로 화면의 버튼을 클릭하거나 키보드의 키를 누를 때마다 해당 정보는 커널을 거쳐 운영체제에 전달되고, 운영체제는 이를 입력 데이터로 받아들여 모니터 같은 하드웨어를 통해 결과물을 출력합니다.
3. GNU
GNU는 'GNU's Not Unix'의 재귀 약자로, 누구나 무료로 사용할 수 있는 오픈소스 도구 모음입니다. 개발자들은 이를 활용해 자신만의 앱과 운영체제를 만들 수 있습니다. 리처드 스톨먼(Richard Stallman)이 설립한 GNU 프로젝트는 소프트웨어를 자유롭게 개발하고 배포하는 것을 목표로 하며, 모든 개발자에게 오픈소스 도구를 제공합니다.
리눅스 커널은 GNU의 GPL(일반 공중 사용 허가서) 라이선스를 따르기 때문에 GNU/Linux라고도 불립니다. 오픈소스 GNU 도구와 리눅스 커널을 사용해 개발된 모든 운영체제는 리눅스 배포판에 속합니다. 그런데 배포판이란 정확히 무엇일까요?
4. 배포판(Distributions, Spins, Flavors, Remixes)
앞서 언급했듯이, 리눅스 커널을 사용해 컴퓨터 하드웨어와 통신하는 모든 운영체제를 리눅스 배포판이라고 부릅니다. '배포판(distribution)', 줄여서 '디스트로(distro)'라는 단어는 리눅스 기반 운영체제를 무료로 나눠주고 '배포한다'는 의미에서 유래했습니다.
개발자들과 리눅스 애호가들은 주류 리눅스 배포판의 스핀(spin)과 리믹스(remix) 버전도 출시합니다. '스핀' 또는 '리믹스'란 원본 운영체제를 커스터마이징하거나 파생시킨 버전을 의미합니다. 일반적으로 원본 OS와 스핀 버전의 차이는 데스크톱 인터페이스나 패키지 구성, 혹은 그 둘 모두에 있습니다.
우분투(Ubuntu)를 예로 들어 보겠습니다. 우분투에는 Xubuntu, Lubuntu, Kubuntu 등 여러 파생 버전이 있으며, 각각 서로 다른 데스크톱 환경을 사용합니다. 비슷하게 페도라(Fedora)는 비공식 파생 버전을 '스핀'이라고 부릅니다. 결국 스핀, 리믹스, 플레이버(flavor)는 모두 같은 의미로 사용됩니다.
5. 데스크톱 환경(Desktop Environments)
사용자가 컴퓨터를 더 쉽게 다룰 수 있도록 운영체제는 시스템을 그래픽 방식으로 관리할 수 있는 데스크톱을 제공합니다. 윈도우와 macOS는 각각의 시그니처 데스크톱으로 유명하지만, 리눅스는 완전히 다른 방식으로 접근합니다.
리눅스에서는 무료로 설치할 수 있는 다양한 데스크톱, 즉 '데스크톱 환경'을 찾아볼 수 있습니다. 데스크톱 환경은 보통 창 관리자 프로그램과 여러 앱, 위젯을 함께 포함하고 있으며, 이들이 결합되어 풍부한 사용자 경험을 제공합니다. 대표적인 데스크톱 환경으로는 GNOME, KDE Plasma, XFCE, Pantheon, LXDE 등이 있습니다.
6. 창 관리자(Window Managers)
창 관리자는 화면 위 창들의 위치와 이동을 제어하는 프로그램입니다. 창 관리자는 보통 데스크톱 환경과 함께 백그라운드에서 작동하지만, 리눅스 머신에서 단독으로 사용하는 것도 가능합니다. 다만 비전공자에게는 설정이 다소 복잡할 수 있어 모든 사람이 선호하지는 않습니다.
창 관리자는 불필요한 앱과 위젯을 포함하지 않기 때문에 데스크톱 환경보다 가볍고 성능이 뛰어납니다. 창 관리자를 선택하면 독립형 메뉴와 컴포지터(compositor)도 직접 설치해야 하는 경우가 많습니다.
i3wm, bspwm, awesome, Fluxbox 등이 인기 있는 창 관리자입니다. 참고로 KDE Plasma와 GNOME 데스크톱은 내부적으로 각각 KWin과 Mutter라는 창 관리자를 사용합니다.
7. 터미널(Terminal)
리눅스 초보자라면 텍스트가 가득한 검은 창을 한 번쯤 본 기억이 있을 것입니다. 그것이 바로 리눅스 터미널이며, 명령줄(command line)이라고도 불립니다.
터미널은 운영체제의 셸(shell)을 제어하는 데 사용되는 프로그램입니다. 셸은 데스크톱과 상호작용하기 위해 사용하는 텍스트 기반 또는 그래픽 인터페이스입니다. 리눅스 터미널은 윈도우의 명령 프롬프트와 유사하며, 관리자가 시스템을 효율적으로 제어하고 관리하는 데 도움을 줍니다.
다른 운영체제들이 오래전부터 터미널 에뮬레이터 사용을 줄여왔지만, 리눅스 기반 운영체제에서는 여전히 명령줄이 널리 활용되고 있습니다.
8. 루트(Root)
리눅스에서 루트(root)는 두 가지 의미를 지닙니다. 하나는 루트 디렉터리이고, 다른 하나는 루트 사용자입니다. 루트 디렉터리는 시스템의 모든 파일과 폴더를 담고 있는 최상위 부모 디렉터리입니다. 명령어에서 와일드카드 '/'(슬래시)를 사용해 루트 디렉터리를 표시할 수 있습니다.
반면 루트 사용자는 슈퍼유저(superuser)라고도 불리며, 모든 관리자 권한을 가진 계정입니다. 루트 사용자는 어떤 파일이든 열람하고 수정할 수 있고, 시스템이나 다른 사용자에게 변경 사항을 적용할 수 있으며, 심지어 전체 디렉터리 구조를 삭제할 수도 있습니다. 요컨대, 가장 높은 수준의 제어 권한을 가진 리눅스 사용자입니다.
9. 패키지 관리자(Package Managers)
리눅스에서 앱은 패키지 형태로 배포되며, 사용 중인 배포판의 공식 저장소에서 제공됩니다. 패키지 관리자는 리눅스 시스템에서 패키지를 관리하는 프로그램으로, 배포판 저장소 같은 소스에서 패키지를 추가하거나 삭제할 수 있게 해줍니다. 필요하다면 서드파티 저장소를 추가로 등록하는 것도 가능합니다.
APT, RPM, pacman은 리눅스 배포판에서 가장 널리 사용되는 세 가지 패키지 관리자입니다. 데비안과 우분투 계열 배포판은 APT를, 페도라, CentOS, RHEL은 RPM을, 아치 리눅스와 그 파생 배포판은 pacman을 사용합니다.
10. 소스 패키지와 바이너리 패키지(Source & Binary Packages)
리눅스에서 패키지란 프로그램의 실행 또는 설치에 필요한 파일들을 담고 있는 아카이브를 의미합니다. 리눅스 소프트웨어는 보통 패키지 형태로 배포되며, 사용자가 이용할 수 있는 패키지에는 두 가지 종류가 있습니다. 바로 소스 패키지와 바이너리 패키지입니다.
소스 패키지는 프로그램의 소스 코드를 포함하고 있어, 사용자가 직접 컴파일하고 설치해야 소프트웨어를 실행할 수 있습니다. 반면 바이너리 패키지는 미리 빌드되고 컴파일된 실행 파일을 포함하고 있어 즉시 사용할 수 있습니다.
11. 저장소(Repositories)
소프트웨어 저장소는 패키지 모음과 관련 메타데이터를 함께 저장하는 원격 서버입니다. 모든 리눅스 배포판은 자체 저장소 세트를 갖추고 있거나, 부모 배포판의 저장소를 사용해 사용자에게 소프트웨어를 제공합니다.
12. 부트로더(Bootloader, GRUB)
부트로더는 컴퓨터를 부팅하는 역할을 담당하는 프로그램입니다. 일반적으로 운영체제와 그 데이터는 HDD 같은 비휘발성 저장 장치에 저장되며, 부트로더는 부팅 시점에 올바른 운영체제를 로드하고 초기 프로세스를 메모리에 올리는 역할을 합니다.
GRUB은 윈도우와 리눅스를 멀티부팅할 때 가장 많이 사용되는 부트로더 중 하나입니다. 그 외에도 LILO, BURG, Syslinux 등이 있습니다.
13. 프로세스(Process)
시스템에서 실행하는 모든 프로그램은 백그라운드에서 프로세스의 집합으로 작동합니다. 프로세스는 실행 중인 프로그램의 기본 단위로, 컴퓨터에서 실질적인 연산을 수행합니다.
방금 인터넷 검색을 위해 연 웹 브라우저도 하나 또는 여러 개의 프로세스를 실행시켜 사용자와의 상호작용과 인터넷 탐색을 돕습니다. 마찬가지로 시스템의 파일 관리자, 터미널, 미디어 플레이어 등 모든 프로그램이 결과물을 만들어내기 위해 프로세스에 의존합니다.
14. 셸(Shells: Bash, Zsh 등)
앞서 언급했듯이 셸은 사용자가 시스템과 상호작용할 수 있게 돕는 인터페이스입니다. 터미널처럼 명령줄 인터페이스일 수도 있고, GNOME Shell처럼 그래픽 인터페이스일 수도 있습니다. 또한 셸은 터미널에 입력된 명령을 해석하는 명령 해석기 역할도 수행합니다.
리눅스에는 여러 종류의 셸을 설치할 수 있습니다. Bash, Zsh, Fish, sh, Ksh 등이 대표적이며, 각 셸의 역할은 동일합니다. 사용자와 프로세스가 시스템의 다른 프로세스들과 상호작용하도록 돕는 것입니다.
15. 셸 스크립팅(Shell Scripting)
여러 리눅스 명령어를 모아 하나의 파일로 묶으면 그 결과물을 '셸 스크립트(shell script)'라고 부릅니다. 셸 스크립팅은 리눅스 명령어를 사용해 스크립트를 작성하는 과정이며, 작성된 스크립트는 시스템에 설치된 셸이 해석하여 실행합니다. 윈도우의 배치(batch) 스크립트가 리눅스 셸 스크립트에 해당한다고 볼 수 있습니다.
셸 스크립팅의 가장 인기 있는 형태는 Bash 스크립팅으로, Bash 셸을 사용해 스크립트를 작성하고 실행하는 것을 말합니다. 셸 스크립트는 리눅스 머신에서 반복 작업을 자동화할 수 있는 강력한 도구로, 사용자에게 훨씬 더 간편하고 재미있는 컴퓨팅 경험을 제공합니다.
리눅스에 대해 배울 것은 아직 많습니다!
용어와 전문 표현을 익히는 것은 리눅스 파워 유저가 되는 목표에 한 걸음 더 가까워지는 과정입니다. 리눅스의 잠재력을 최대한 끌어내려면 명령줄에 능숙해지고, 운영체제 문제를 스스로 해결하는 방법을 알아야 합니다. 시스템이 여러분을 위해 작동하도록 만드는 것이지, 그 반대가 되어서는 안 됩니다.