해킹을 공부하고자 하는 많은 사람들이 가장 처음으로 만나는 장벽 중 하나는 **리눅스(Linux)**일 것이다.
2024년 5월 기준으로 전 세계 데스크톱 컴퓨터의 점유율은 윈도우 73.9%, Mac OS 14.91%인 반면 리눅스는 3.77%에 불과한 만큼 리눅스는 개인 사용자들이 일반적으로 쓰는 **운영체제(Operating System)**는 아니기에 익숙하지 않기 때문이다.
그러나 서버가 사용하는 운영체제로 넘어가면 상황은 달라지는데, 2024년 기준 서버 운영체제의 62.7%가 리눅스 기반으로 과반을 점유하고 있다. 또한 리눅스와 같이 현대의 많은 운영체제가 **유닉스(Unix)**에 뿌리를 두고 있기 때문에 리눅스 사용법을 익힌다면 다른 여러 운영체제의 사용법도 수월하게 익힐 수 있다.
**리눅스(Linux)**는 Linus Torvalds에 의해 개발된 Unix-like 운영체제이다. 현재는 Linus뿐만 아니라 다수의 기여자들이 리눅스의 발전에 기여하고 있다.
리눅스는 대부분의 컴퓨터 사용자가 사용하는 Windows, macOS와 달리 오픈 소스이며 사용자는 자유롭게 코드를 변경하여 사용할 수 있다. 이런 특징 때문에 다른 일반적인 클로즈 소스 운영체제와 달리 배포판이 존재한다.
배포판이란 기본적인 리눅스를 바탕으로 각기 다른 기능과 패키지, 사용자 인터페이스 등을 제공하는 운영 체제를 의미한다. 대표적인 배포판으로는 Ubuntu, CentOS, Debian, Fedora, Arch Linux 등이 있다.
운영체제는 크게 2가지 수준으로 나누어지며 각각 **유저 레벨(User Level)**과 **커널 레벨(Kernel Level)**로 구분된다. 이 중 사용자가 조작할 수 있는 부분은 유저 레벨이며 커널 레벨은 일반 사용자가 조작할 수 없다.
따라서 사용자가 운영체제를 온전히 사용하기 위해서는 커널과 유저 사이를 연결해주는 프로그램이 필요하다. 이를 **셸(Shell)**이라 부르며 일반 사용자가 커널과 소통하기 위한 프로그램을 의미한다.
모든 컴퓨터 사용자는 나름대로의 셸을 사용하고 있으며, 특정한 형태가 정해져 있지 않고 그 종류도 매우 다양하다. 대표적인 예로 컴퓨터를 켜자마자 보이는 바탕 화면도 셸의 한 종류이며, 많은 사람들이 해킹하면 떠올리는 검은 터미널 화면도 셸의 한 종류이다.
이처럼 각 운영체제는 사용자의 수요에 따라 많은 종류의 셸을 구비하고 있으며 사용자는 용도에 맞추어 편하게 사용할 수 있는 셸을 선택하면 된다.
**셸(Shell)**은 영어로 껍질이라는 의미를 가지며, 컴퓨터 공학에서는 사용자가 운영체제와 상호작용할 수 있는 인터페이스를 제공하는 소프트웨어를 의미한다.
사용자가 셸에 명령을 입력하면 셸은 이를 해석하여 동작을 수행한다. 이때 셸은 커널과 사용자를 이어주는 인터페이스 역할을 하며 마치 운영체제의 핵심을 감싸는 껍데기(Shell)처럼 보이기 때문에 이러한 명칭이 붙었다.
셸은 크게 **Graphical User Interface Shell (GUI Shell)**과 **Command-Line Interface Shell (CLI Shell)**로 나눌 수 있다.