0630 Fundamentals 3 : 터미널로 배우는 리눅스 운영체제

운영체제의 구성 & 커널의 역할
터미널과 터미널 에뮬레이터, 셸의 차이점
리눅스 명령어


운영체제

컴퓨터의 하드웨어와 소프트웨어를 관리하는 시스템

운영체제 = 컴퓨터라는 집을 관리하는 집사

주인(최고관리자)의 권한을 위임받아 하녀, 정원사, 요리사 등 인원들에게 (어플리케이션) 재산을 (연산자원)을 분배하여 운영하고, 서로 권한을 침범할 수 없도록 관리한다

우리가 지금 사용하고 있는 것과 같은 프로그램의 종류를 셸(shell) 이라고 하며, 우리는 이 껍데기를 통해 운영체제의 알맹이인 커널(kernel)과 소통한다.

위 그림에서 CPU, Memory, SDD 등 각종 디바이스를 통합관리하면서 그 연산자원을 수많은 어플리케이션들에게 분배하는 자리에 있는 것은 바로 커널(Kernel)

운영체제=커널이라고 하기는 어렵지만
커널은 보안, 자원관리, 디바이스 인터페이스 추상화 등 바로 대저택의 집사와 같은 역할을 하는 운영체제의 가장 핵심적인 구성요소다.

운영체제의 내부 = 알맹이인 커널(kernel) + 껍데기인 셸(shell)

우분투의 커널은 리눅스이고, 마이크로소프트 윈도우(Windows)의 경우 2000 이후의 버전은 Windows NT라는 커널을 사용

bash를 기본 셸로 제공

셸 (shell)

그래픽 기반의 GUI(Graphical User Interface) 셸과 텍스트 기반의 CLI(Command Line Interface) 셸

GUI 셸의 경우, 윈도우에는 우리에게 친숙한 시작 버튼을 포함하는 셸을 Windows shell이 라 부르고

CLI 셸로는 윈도우 운영체제의 cmd.exe와 PowerShell이 있고, 우분투 및 맥 OS에서는 CLI 셸로서 기본으로 sh와 여기에 몇 가지 편의기능을 덧붙인 bash가 설치되어 있다


프로그램은 컴퓨터가 수행할 작업을 기록해 놓은 것

프로그램이 실제로 작업으로써 수행될 때 운영체제는 이를 프로세스(process)라는 단위로 관리한다.
운영체제는 프로세스 단위로 메모리와 CPU 연산 등 컴퓨팅 자원을 분배합니다.

프로세스는 운영체제가 메모리를 할당하는 작업단위라면, 스레드는 프로세스가 할당받은 메모리를 활용하는 실행단위


터미널 애뮬레이터

우분투에서 Cloud shell 열기를 누르면, 터미널 또는 콘솔이라고 부르는 창이 나온다.
이 환경은 CLI 셸

이 차을 여는 프로그램은 엄밀히 말하자면 터미널이 아니라, 그래픽 환경에서 터미널을 모사하는 터미널 애뮬레이터다

터미널이란 컴퓨터에 정보를 입력하고 출력하는 소프트웨어 및 하드웨어로써의 장치이며, 지금도 우리는 하나의 터미널(tty2)이라는 창구를 통해 컴퓨터 안의 세상을 그래픽으로써 들여다보고 있는 것


~가 홈 디렉토리를 가리키는 것처럼, .는 현재 폴더를, ..는 상위 폴더를 가리킨다.
참고로 리눅스에서 .으로 시작하는 이름을 가진 파일은 숨김 파일

echo: 뒤이어 입력한 내용을 출력

pwd: Present Working Directory. 
현재 내가 위치한 디렉토리 위치를 출력

ls: 현재 디렉토리 내의 파일 및 폴더들을 출력

cd: Change Directory.
뒤에 따라오는 폴더로 내가 있는 셸의 현재 위치를 이동시킴

$ cd .. # 상위 폴더로 이동

$ pwd
/aiffel

ps: 현재 터미널과 관련된 프로세스 목록을 출력

ps -ef: 모든 터미널에서 현재 실행중인 프로세스 목록 및 
부가정보를 출력

grep: 입력으로 전달된 내용에서 특정 문자열을 포함한 라인만 
선택해서 출력. 파이프(|)를 통해 다른 명령문 실행결과와 결합해서 
사용할 때 특히 유용하다.

sudo: 이어지는 명령을 최고 관리자 권한으로 실행

kill: PID에 해당하는 프로세스에 시그널을 보낸다

$ ps -ef | grep Xorg
root 71 66 0 07:54 pts/4 00:00:00 grep Xorg

프로세스 관리는 운영체제의 고유 권한이기 때문에, 우리는 커널의 도움이 필요하다.

우리가 CLI 셸에 kill 명령어를 입력하는 순간, 셸의 프로세스는 커널에게 이 명령을 전달하고, 커널은 권한 등을 확인한 후에 이를 수행한다.

이렇게 프로세스가 커널에게 요청을 전달하는 기능을 시스템 콜(system call)이라고 한다.

즉, 시스템 콜은 운영체제의 커널이 프로그램에 제공하는 인터페이스이며, 프로세스가 직접 할 수 없는 프로세스 제어(kill 등), 파일 조작(폴더 생성 mkdir, 파일 읽기 read 등), 장치 및 자원 관리, 네트워크 통신 등을 가능케 한다.

반대로 보면, 각 프로세스는 커널을 통하지 않고서는 파일이나 장치, 또는 다른 프로세스에 간섭할 수 없다는 뜻이 된다.

여태까지 셸에서 여러 명령어를 실행해 보았지만, 사실 우리가 실행했던 명령어들의 진짜 정체는 두 가지
1) 실제 프로그램과 2) 셸에서 제공하는 셸 명령어

which : 정체 밝히기

which: 명령어의 전체 경로를 출력합니다.

export: 셸 변수나 함수를 현재 환경으로 내보냅니다.

env: 명령어가 제공된다면 해당 명령어를 새로운 환경에서 실행합니다.
명령어가 제공되지 않은 경우 현재 환경의 정보를 출력합니다.

apt-get: APT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 
설치하거나 제거합니다.

cat: 하나 이상의 텍스트 파일을 순서대로 출력합니다.
- concatenate(이어붙이다)의 약자

chown: 대상 파일의 소유 사용자와 그룹을 변경합니다.

셸에서 단어 앞에 $가 붙으면 환경 변수(environment variable) 를 의미

우분투 운영체제는 공식적으로 APT(Advanced Packaging Tool)라는 패키지 관리자(package manager) 를 제공


sudo

유닉스 계열 운영체제

모든 권한은 사용자를 기준으로 인증한다. 운영체제에서 어떤 작업을 실행하기 위해서는 어떤 사용자 이름으로 실행할지 미리 정해져 있어야 한다는 의미이다.

보안 및 시스템 안정성을 위해 완전한 권한은 운영체제에 기본으로 설정된 최고 관리자(superuser) 계정만이 가지고 있으며, 윈도우에서는 이 계정을 Administrator이라고 부르고, 유닉스 계열 운영체제에서는 root라는 아이디를 가지고 있다.

윈도우에서 무언가를 설치할 때 가끔 보게 되는 "관리자 권한으로 실행" 경고창이나, 유닉스 계열 운영체제에서 사용하는 sudo(Switch User Do) 명령어가 바로 이 역할을 하며, 일반 사용자가 잠시 최고 관리자(또는 다른 사용자) 권한으로 행동할 수 있게 해준다.

CPU

CPU 칩이 처리할 수 있는 명령어는 기계어라고도 하며, 우리가 사용하는 프로그래밍 언어와는 많이 다릅니다. 기계어로 프로그램을 직접 짜기에는 워낙 복잡하고 비효율적이기에 C, C++, Python 등 인간이 이해할 수 있는 프로그래밍 언어들이 만들어졌다.
이렇게 인간이 이해할 수 있는 언어로 짠 프로그램을 CPU에서 실행할 수 있는 기계어로 번역하고 최적화하는 과정이 바로 컴파일

CPU의 성능을 판단하는 주요 척도 중 하나는 초당 처리 속도의 기준인 클럭(clock)
하지만 요새 나오는 CPU를 보면 클럭이 4GHz에서 더 이상 발전하기보다는, 동시에 더 많은 스레드를 처리할 수 있도록 코어 수를 늘리는 방향으로 제조되고 있다.
이는 처리 속도를 높이기 위해 소비 전력을 높였다가는 물리적으로 냉각시키기가 너무 어려워지고, 그렇다고 전압을 낮춰서 낮은 전력으로 동작시키기에는 전류가 밖으로 누설되고, 그러면 전력과 전압을 모두 적절하게 유지하면서 집적도를 높이기에는 공정이 너무 미세해지면서(1~5 나노미터) 수율도 떨어지고, 현재의 소재들로는 양자 터널링 현상으로 인해 전자가 닫혀있는 게이트를 그냥 뛰어넘어버리게 되는 복잡한 물리적인/경제적인 이유 때문이다.

GPU

그래픽 연산을 위한 GPU(Graphical Processing Unit)

CPU보다 이해할 수 있는 명령어는 훨씬 적지만, 코어 수를 훨씬 늘리는 방법으로 다차원 행렬 연산에 특화되었다.

비유하자면
8 코어 CPU = 수학 박사 8명
GPU = 초등학생 3,000명 (사칙연산만 가능하지만 계산은 틀리지 않음)

복잡한 수식을 처리한다면 박사들이 유리하겠지만, 초등학교 수학 전집 100권을 빠르게 처리하기에는 초등학생들이 더 유리하다

RAM, HDD, SSD

컴퓨터의 주 저장장치는 RAM(Random Access Memory)
RAM은 비싸서 용량을 쉽게 늘리기도 어렵고, 전원이 꺼지면 데이터가 사라진다.

반면에 보조 저장장치인 HDD(Hard Disk Drive) 나 SSD(Solid State Drive) 는 가격도 비교적 저렴하고, 전원이 꺼져도 데이터는 그대로 보존된다.

가상화

아마존 웹 서비스(Amazon Web Services) 라는 자회사를 설립하여, 수요에 따라 그때그때 서버를 빌렸다가 반납하는 서버 임대업을 시작했다.
하지만 이 서버 임대업은 데이터센터에 위치한 물리적인 서버를 임대하는 것이 아니었다. 아마존은 한 대의 물리적인 서버를 여러 개의 가상 서버로 쪼개어 판매하기 시작했다.

가상화(virtualization) 는 이처럼 하나의 컴퓨터를 쪼개어 여러 대의 컴퓨터가 있는 것처럼 사용하게 하는 기술이다.

좋은 웹페이지 즐겨찾기