Table of Contents
리눅스
- 대표적인 컴퓨터 운영체제 중 하나이다
- 1969년, AT&T의 벨 연구소에서 처음으로 유닉스(Unix)라는 운영체제를 개발했으나 이는 상업적 목적으로 사용되면서 사용이 제한되었다
- 1983년, 리처드 스톨먼에 의해 시작된 GNU 프로젝트에서 소스코드의 자유로운 사용과 수정이 가능한 오픈 소스 형태의 운영체제를 개발하게 되었다
- 1990년대 초, 운영 체제에 필요한 프로그램들 다수(예: 라이브러리, 컴파일러, 문서 편집기, 유닉스 셸, 윈도 시스템)가 완성되었으나 운영체제의 핵심이 되는 커널(kernel) 개발에 난항을 겪었다
- 1991년, 헬싱키 대학교 재학생이었던 리누스 토르발스는 자신이 사용하던 운영체제 미닉스의 라이선스 문제에 실망하고 직접 커널을 개발했다
- 이 후 스톨먼이 만들고 있던 운영체제와 토르발스의 커널이 만나 지금의 리눅스(Linux) 운영체제가 탄생하게 되었다
- 현재는 개인용 컴퓨터를 넘어 서버용 컴퓨터, 스마트폰, 임베디드 시스템 등 다양한 장치의 시스템 소프트웨어로 사용되고 있다
- 전 세계적으로 약 300여 가지의 리눅스 배포판이 존재한다
3개의 주요 리눅스 계열
- Debian
- Debian, Ubuntu, Mint Linux
- 오픈 소스, 안정성에 초점
- Red Hat/Fedora
- Fedora, Red Hat, CentOS, Amazon Linux
- 엔터프라이즈 서버 환경을 타겟
- openSUSE
- openSUSE, SUSE LInux Enterprise Server
- 오픈소스, 안정성에 초점
- 공통점
- GNU 소프트웨어
- 리눅스 커널
- 차이점
- 패키지 매니저(apt, yum, rpm, ..)
- 기본 파일 시스템
리눅스 커널
- 커널은 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램이다
- 운영 체제의 다른 부분, 응용 프로그램에 필요한 여러 가지 서비스를 제공한다
- (open, read, write, close, wait, fork, exec 등)
- 응용 프로그램이 하드웨어에 직접 접근하도록 허용하는 것은 위험하기 때문에 커널이 중간에서 그 역할을 담당한다
리눅스 커널 구조
- 모노리틱 커널
- 장점: 구현이 간단하다. 성능이 좋다(커널 문맥에서 많은 부분이 처리되어 시스템 자원을 효율적으로 사용)
- 단점: 커널 코드에 오류가 생기면 시스템 전체에 영향을 끼친다
리눅스 커널의 핵심 역할
- 하드웨어 관리 및 추상화
- 프로세스와 스레드 관리
- 메모리 관리
- I/O 관리
하드웨어 관리 및 추상화
- 서버 관리자 입장에서는 응용 프로그램이 서버의 하드웨어에 직접 접근하지 못하기 때문에 하드웨어 관리에 대한 부담이 없음
- 사용자 프로그램은 데이터가 디스크의 어느 위치에 있는지 몰라도 됨. 어떤 디바이스(HDD, SSD, USB 등)를 사용하는지 걱정하지 않아도 됨
프로세스와 스레드 관리
- 프로세스(또는 스레드)에 CPU 사용 시간을 적절히 할당해 줌으로써 멀티 태스킹을 가능하게 함
메모리 관리
- 개별 프로세스에 가상의 연속된 메모리 공간을 제공
- 물리 메모리보다 더 큰 크기의 프로그램을 실행 가능하도록 해줌
I/O 관리
- 모든 것은 파일(파일 디스크립터)이다
- VFS -> 하부 시스템 구성에 상관없이 파일 입출력 제어 가능
리눅스 쉘
- 사용자 또는 응용프로그램이 커널의 기능을 안전하고 쉽게 이용할 수 있도록 도와주는 인터페이스를 말한다
- (DB의 데이터에 접근하는 SQL문을 사용자가 직접 써서 DB의 데이터에 접근하지는 않는다)
- (사용자는 보통 API의 서버가 제공하는 엔드포인트로만 DB의 데이터에 접근한다)
- (이 때 API 서버의 엔드포인트가 쉘, SQL문이 커널, DB가 하드웨어라고 생각하면 된다)
- 대표적인 쉘로는 bash와 zsh이 있다
- 사용자 -> 터미널 프로그램 -> 쉘 -> 리눅스 커널 -> 하드웨어
기본 쉘 명령어
ls
cd
cd - : 이 전에 있었던 위치로 이동
man
pwd
cat: 파일 내용 읽기
head
tail
more
less
# 컨트롤 f 기능 리눅스에서 쓰는 방법
페이지 안에 들어가서(vim, more, less 같은걸로) / 누르고 검색하고 싶은 단어 입력하고 엔터치면 해당 단어있는 부분 하이라이트 된다
그 상태에서 계속 / 누르면 해당 단어 있는 곳으로 이동함
# 따옴표는 필수는 아니지만 띄어쓰기 있으면 필수로 써야함
grep '<찾고 싶은 문자열>' <파일명>
ls -al | grep '<찾고 싶은 문자열>'
find . "*.conf"
# find 라고만 치면 현재 위치 하위의 모든 파일명 출력한다 -> 이렇게 파이프와 grep 쓰는게 좀 더 편할 수 있다
find | grep conf
root 유저는 파일에 설정된 권한 같은 걸 모두 무시