🔥 포스팅 계기
깃에 올린 remote repository를 이클립스로 가지고 올 때 SSH/HTTP 방식으로 각각 url를 복사함
superPuTTY를 이용해 원격으로 서버 접속 시에도 SSH를 사용함
보안과 관련된 내용인 건 알겠는데 정확히 SSH가 뭔지 알고 싶었음
또한, SSH의 풀 네임이 Secure Shell(시큐어 셸)인 만큼
셸, 커널이라는 대표적인 리눅스 용어에 대해서도 이번 기회를 통해 공부하고자 포스팅 하게 됨
라고 기재하였으나 셸, 커널의 공부 내용이 길어졌고
내용상 시큐어 셸과는 따로 포스팅 하는 것이 맞는 것 같아서 포스팅을 나눔
시큐어 셸에 대한 포스팅은 위의 링크 클릭!
📍 컴퓨터는 어떻게 이루어져 있을까?
👉🏻 하드웨어 / 소프트웨어 커널 계층 / 소프트웨어 유저 계층인 3층으로 구성되어 있음
1️⃣ H/W - Physical
👉🏻 CPU + RAM + 주변기기(HDD, Sound, Video, NIC 등)와 같은 Divice
+ 가상화: Physical한 하드웨어를 소프트웨어로 구현한 것
2️⃣ S/W - Logical/Virtual
👉🏻 OS + Platform
👉🏻 Platform은 CPU, OS와 연관되어 있음
👉🏻 S/W은 Kernel/User 계층으로 세분화 됨
➡️ Kernel 계층 - Driver, 구성요소
➡️ User 계층(Service) - File
👉🏻 User계층은 service/application으로 한 번 더 세분화 됨
➡️ service - File(Interface)
➡️ application - Process
💡 printf("Hello World"); 를 사용자의 눈에 어떻게 보이게 할까?
1) Process에서 printf("Hello World");가 입력됨
2) User 계층에서 Application의 process와 입출력을 함(API)
3) User 계층에서 File(Interface)로 Kernel 계층에 진입하는 순간 System Call을 함
4) 입출력의 본질은 읽기/쓰기 중 하나이므로 print를 하기 위해서는 ~~~Write()라는 함수를 작동시킬 것
5) ~~~Write() 함수에 해당하는 Driver가 Device를 제어/관리 시작하면서 Interrupt 요청
6) 고유 번호를 가진 IRQ(인터럽트 요청)
7) CPU가 기존 프로세스를 잠깐 멈추고 요청된 인터럽트를 먼저 실행함
8) Device에 "Hello World"라는 정보가 내려가고 모니터에 해당 내용 표출
↓ (출력 끝) ↑ (반환 시작)
9) 해당 주변기기 장치가 다시 인터럽트 발생시킴
10) Device Driver가 Kernel 구성요소에 변화(완료) 알림
11) 함수 return
📍 OS(Operation System: 운영체제)
👉🏻 사람이 사용하는 운영 소프트웨어를 통해 컴퓨터 하드웨어를 컨트롤 할 수 있는 시스템 프로그램
👉🏻 즉, 하드웨어와 소프트웨어를 연결해 주는 매개체가 되는 소프트웨어
👉🏻 ex) windows, Mac, Unix, Linux, Solaris 등
👉🏻 커널과 셸은 운영체제의 두 가지 핵심 구성요소
커널, 셸, 파일 시스템
셸: 사람 명령을 기다림 / 명령을 받아 커널로 보냄 / 사람이 알아볼 수 있는 형태로 뿌려 줌
전달은 바이너리 형태로 와리가리
커널: 가장 핵심적인 존재 / 프로세스 관리, 하드웨어 자원 관리, 입출력 제어, 디바이스 사용
x.x.x.tar.gz
x: 커널의 주 버전
x: 커널의 부 버전
(짝수: 안정된 버전 / 홀수: 개발 버전)
x: 커널의 패치레벨
(안정/개발 상관없이 변화가 생기면 올라감)
💡 OS의 역할
👉🏻 기존 소프트웨어의 역할과 같으나 아래의 역할이 추가된 꼴임
1️⃣ Application의 process들이 잘 작동할 수 있게끔 도와줌(support)
👉🏻 멀티 태스킹(멀티 프로세스) 시스템으로 작용하는 컴퓨터에게 꼭 필요한 역할
👉🏻 프로세스 중 바이러스나 보안에 위협이 되는 것을 탐지하여 중지시키는 등의 행위를 함
2️⃣ H/W를 제어 및 관리함
📍 Shell(셸) = 명령어 해석기
✔️ [명] 껍데기, 운영체제의 인터페이스
👉🏻 사용자로부터 명령을 받아 커널의 기능을 실행하는 인터페이스
사용자 명령의 종류는 크게 CLI(Command Line Interface), GUI(Graphical User Interface)로 나뉨
👉🏻 명령어와 프로그램을 사용할 때 쓰는 인터페이스
커널과 사용자의 다리 역할
👉🏻 사용자로부터 명령을 받고 그것을 실행하는 역할
즉, 검은 바탕에 흰색 글씨를 쓰는 커맨드 입력 환경이라고 생각하면 보다 쉽게 이해 가능!
1️⃣ (가장 자주 쓰이는) 셸의 종류
Bourne shell : /bin/sh
👉🏻 본셸, 유닉스의 최초 셸
👉🏻 일반 유저의 셸 프롬프트: $, root
👉🏻 사용자의 프롬프트: #
Bourne Again shell : /bin/bash
👉🏻 현재 리눅스 표준으로 채택된 셸
C shell: /bin/csh
👉🏻 C언어를 기반으로 만들어진 셸
📍 Kernel(커널)
✔️ [명] 알맹이, 운영체제의 코어
👉🏻 사용자가 CPU, 메모리, 하드디스크 등의 하드웨어를 직접 제어할 수 없기 때문에 커널을 사용
👉🏻 즉, 하드웨어와 직접 상호작용 하는 운영체제의 핵심
👉🏻 입출력 관리, 소프트웨어의 요청을 하드웨어가 받아들일 수 있도록 변환, 시스템 자원 제어
👉🏻 컴퓨터 부팅 시 부트로더에 의해 항상 메모리에 상주함
1️⃣ 커널의 종류
👉🏻 Monolithic Kernel: 리눅스와 같은 운영체제는 커널이 하나의 덩어리로 이루어져 있음
👉🏻 MicroKernel: 각각의 커널을 하나로 뭉쳐서 사용
2️⃣ Windows와 Linux의 커널
Windows는 커널 내부를 공개하지 않기 때문에 오직 MS사만 수정 가능함
Linux의 경우 커널 내부 소스를 모두 공개하고 있기 때문에 Module(모듈)이라는 커널의 부분을 수정 가능함
👉🏻 초반에는 리눅스의 커널 변경 시 전체 커널을 컴파일해야 했지만 모듈이라는 개념이 도입된 후에는 필요한 커널의 부분만 수정하고 해당 모듈만 컴파일하면 사용 가능해졌기 때문에 시간 단축에 용이해짐
📍 사용자, 셸, 커널의 상호작용
사용자(명령) 👉🏻 셸(해석) 👉🏻 커널(명령 수행 후 결과 전송) 👉🏻 셸(해석) 👉🏻 사용자(결과 확인)
조금 더 디테일하게 설명하자면,
사용자가 원하는 방식을 CLI, GUI 등으로 표현
👉🏻 쉘이 이를 해석하고 커널이 알아듣는 언어로 변환 후 전송
👉🏻 커널이 쉘의 요청에 따라 하드웨어 상태 변경 후 결과 전송
👉🏻 셸이 사용자가 알아볼 수 있게끔 입출력장치의 변화로 표현
👉🏻 사용자가 확인
https://reakwon.tistory.com/135
[리눅스] 커널(kernel)과 쉘(shell)의 개념, 쉘을 이해해보자
리눅스 커널(Kernel) 리눅스 커널은 하드웨어와 가장 가까이 있는 일종의 프로그램입니다. 가장 핵심적인 프로그램으로 사용자는 커널을 통해서 하드웨어를 제어합니다. 함부로 하드웨어를 직접
reakwon.tistory.com
[컴퓨터 기초] 커널(Kernel)과 쉘(Shell) - jinShine
커널과 쉘 사용자가 입력한 명령어는 일련의 과정을 거쳐 하드웨어를 제어하게 됩니다. 사용자가 명령어를 작성하고 조작하기까지 이 사이에는 몇 가지의 과정을 거쳐서 수행을 하게 되는데,
jinshine.github.io
https://www.youtube.com/watch?v=P-uySN0r0Tc
https://www.youtube.com/watch?v=M9ZrQX1UgAU