서버는 리눅스로 되어있다. 백엔드 개발자가 아니더라도 서버에 대한 이해는 필요하다.
터미널을 통해 서버에 접속하고 원하는 작업을 할 수 있도록 친숙해질 필요가 있다.
켄 톰슨
& 데니스 리치
제작리누스 토르발즈
제작
유닉스 시스템 구조는 다음과 같이 구성되어 있다.
커널 (Kernel)
유닉스의 핵심이라고 할 수 있다. 좁은 의미로는 OS가 곧 커널이다. CPU 스케줄링, 기억장치 관리, 파일 관리, 입출력 관리, 프로세스 간 통신, 데이터 전송 및 변환 등 여러 기능을 수행한다.
커널은 컴퓨터가 부팅되면 주기억장치에서 실행된다. 항상 메인메모리에 존재하면서, 하드웨어를 추상화하여 사용자 레벨 프로세스에게 서비스를 제공한다. 프로그램과 하드웨어 간의 인터페이스 역할을 하는 셈이다.
이때, 서비스를 제공하는 통로가 바로 **시스템 콜(System Call)**이다. 아래 이미지처럼, 사용자 프로세스가 실행되면 시스템 콜이 요청되고 커널에서 실행된다. 그리고 커널에서 시스템 콜을 통해 서비스를 프로세스로 전송한다. 이미지 출처(2차)
그리고 시스템 콜을 호출하기 위한 커널 API가 바로 CLI이다.
# CLI에서 아래와 같은 명령을 입력하면 아래와 같은 시스템 콜이 발생할 수 있다.
cp a.txt b.txt
가능한 모든 시스템 콜은 아래 이미지 참고. 이미지 출처(2차)
쉘 (Shell)
커널과 사용자를 이어주는 역할을 한다. 커널을 감싸고 있는 껍데기라고 생각하면 된다. 그러니 커널과 소통하기 위해서는 쉘을 통해야하는 것.
쉘에는 GUI와 CLI가 있다.
🎨 GUI (Graphical User Interface) - 맥으로 치자면 Finder
💬 CLI (Command Line Interface) - 맥의 Terminal
사용자는 Shell을 통해 명령을 입력하고, 쉘은 사용자의 명령을 해석하여 커널에 전달한다.
쉘은 메모리에 상주하지 않고 필요 시에 로드되어 일종의 응용프로그램으로 간주된다.