오픈소스 SW개발 (8) LINUX

2022. 5. 6. 18:57강의 내용 정리/오픈소스SW개발

728x90
반응형

LINUX

1. Linux란?

컴퓨터 하드웨어에 접근하고 어플리케이션에게 인터페이스를 제공하는 운영체제다.


 

1) Kernel

OS의 핵심적인 역할을 수행하는 것


(1) 커널이란?

- 컴퓨터 하드웨어 리소스를 추상화한다. 예를 들어 코어를 프로세스로 추상화하거나 디스크를 파일로 추상화한다.

- 시스템 자원을 관리한다.

- 보안기능을 제공하거나 하나의 어플리케이션이 다른 곳에 침범하지 않도록 도와주는 역할을 진행한다.

- 어플리케이션의 요청에 응답하는 것을 한다.

 

(2) 커널의 목표

- 성능이 좋아야한다. 커널의 성능이 느리면 어플리케이션이 느리게 동작한다.

- 안정성이 높아야한다. 커널의 안정성이 낮으면 어플리케이션이 동작하지 않을 수 있다. 혹은 진행 중인 작업이 날라 갈수도 있다.

- 기능이 다양해야한다.

- 보안이 있어야한다.

- 다른 아키텍쳐로 확장할 수 있는 확장성이 있어야한다.

 

(3) Kernel 구조

- 하드웨어와 어플리케이션의 인터페이스를 제공하는 것을 확인할 수 있다.

 


2) Linux의 역사

- 리눅스는 유닉스에 뿌리를 갖고 있다.

- 일반적으로 개발 관련 영역에서는 대부분 리눅스를 사용한다.

 


3) Unix와 Linux

- 리눅스는 유닉스를 모티브로 하기에 둘은 비슷하다.

- 리눅스가 오픈소스의 이점을 받아서 리눅스가 많이 사용하고 있지만 과거의 레거시를 중요시하면 유닉스를 많이 사용하기도 한다.

 


4) Why Linux?

- 다른 사람들이 리눅스를 사용하기에 리눅스를 사용해야한다. 

- 리눅스는 무료이고, 오픈소스이기에 언제든지 사용할 수 있다.

- 다양한 CPU 아키텍쳐(플랫폼)에서 동작한다.

- 많은 사람들이 사용하면서 발생하는 이슈를 리포팅하며 안정성이 매우 높아졌다.

 


5) 리눅스의 특징

- Monolithic Kernel: 모듈이 하나로 묶여서 존재한다. <-> Micro Kernel

cf) Micro Kernel: 모듈을 독립적으로 만들어서 통신을 통해 동작한다. 하지만 통신은 오버헤드가 커서 지금은 잘 사용하지 않는다.

- Multitasking이 가능하다.

- Multiprocessing도 지원한다.

 


6) Linux Distribution

 


2. File and Directory

1) 파일 시스템

(1) 파일 시스템이란?

- 데이터를 효율적으로 저장하고 읽을 수 있도록 돕는 커널에 종속된 소프트웨어이다.

 

 

(2) 파일시스템 종류

 

(3) 파일

일반적인 데이터의 집합


- 리눅스는 하드웨어를 파일 형태로 표현하고자 한다. 예를들어 키보드도 파일의 형태로 생각해서 입력/출력 등에 대한 기능들을 다루도록 한다. 이는 special file 종류에 포함된다.

- 리눅스는 디렉토리도 파일로 여긴다.

 

 

(4) 파일 이름

- 어떤 OS를 사용하느냐에 따라 조금 다르다.

- 기본적으로는 알파벳문자를 기본으로 사용된다.

- 파일에 특수기호는 대부분 사용 불가능하다. 이는 쉘 내에서 특수한 용도로 사용되기 떄문이다.

- +/-로 시작할 수 없고, 대소문자는 구문한다.

- 숨김 처리를 위해서 .을 앞에 붙여줄 수 있다.

 


2) Directory 구조

- 트리 형태이다.

- 최상단 루트가 존재하며 아래와 같은 의미를 가진 하위 디렉토리가 존재한다.

 

 

(1) boot

- 부팅을 위해 필요한 파일을 가진 디렉토리

- 이게 깨지면 부팅을 할 수 없기에 안정성이 중요하다.

 

 

(2) bin

- 디렉토리를 조작하는 프로그램이 위치한 디렉토리

 

(3) dev

- 하드웨어관련된 파일을 담고 있는 디렉토리

- 리눅스는 하드웨어를 추상화한다. 이를 어떻게 액세스하냐에 따라 컨트롤 할 수 있다.

- 우리가 직접적으로 건드릴 일은 없다.

 

(4) etc

- 설정과 관련된 디렉토리

 

 

(5) home

- 사용자가 사용하는 디렉토리

- 각각 사용자를 위한 디렉토리가 존재한다. -> 기본적으로 해당 사용자만 디렉토리를 사용할 수 있다.

 

(6) lib

- 프로그램에서 필요로 하는 라이브러리에 관한 디렉토리

- 프로그램이 실행될 때마다 링크된다.

 

(7) proc

- 특수한 목적을 가지는 Proc 파일 시스템을 사용한다.

- 관리를 위한 목적으로 사용한다.

 

(8) root

- 루트의 홈디렉토리

 

(9) sbin

- 권한이 높은 실행파일이 있는 프로그램이 있는 디렉토리

 

(10) tmp

- 캐쉬 파일데이터를 만드는 디렉토리

 

(11) usr

- 시작할 때 사용하는 디렉토리?

 

 

(12) var

- 데이터가 매번 바뀔 수 있는 디렉토리

 

 

3) Permission

(1) Owner

(2) Group

(3) All

 

각각의 비트마다 권한이 존재해 rwx에 대해 비트값으로 값을 전달할 수 있다.

 


3. Utility for File and Directory

1) 명령어

(1) pwd

- 현재 디렉토리의 위치를 출력한다.

 

(2) cd

- 디렉토리를 움직이기 위해 사용한다.

 

(3) ls

- 현재 디렉토리에 있는 파일 정보를 출력한다.

 

(4) mkdir

- 디렉토리를 만든다.

 

 

(5) rmdir

- 디렉토리를 지운다.

 

(6) mv

- 파일이나 디렉토리를 옮길 때 사용한다.(존재하는 디렉토리)

- 디렉토리의 이름을 바꿀 때도 사용한다.(존재하지 않는 디렉토리)

 

 

(7) rm

- 옵션에 따라 파일이나 디렉토리를 지운다.

 

(8) cat

- 파일이 가진 컨텐츠를 출력한다.

 

 

(9) cp

- 복사한다.

(10) chmod

- 권한 준 것을 변경할 떄 사용한다.

- 왼쪽에 있는 것인 Permission에 대한 내용이다.

 

(11) Metacharacter

- *: 어떤 것이든지 상관 없다는 표현으로 단독으로 쓰이거나 어떤 문자 이전/이후에 사용될 수 있다.

- ?: 중간에 삽입하여 시작과 끝을 알린다.

 


4. Process

리눅스는 각각의 프로그램을 프로세스로 표현한다.


1) 프로세스 특징

- 커널에서는 프로세스마다 PID를 붙여준다.

 

2) 프로세스의 유형

(1) Init process: 모든 프로세스의 조상

(2) Demon: 실행이 끝나고 죽지않는다.

 

3) Attribute process

- 어떤 그룹의 권한을 가지는지 나타낸다.

 

4) Heredity

- 리눅스 프로세스는 부모 자식을 가진다. 구체적인 예시를 보면 다음과 같다.

5) 프로세스 ID

- 커널도 프로세스를 가진다. 이에 따라 Init 프로세스 위에서 동작한다.

 

 


5. Utility for Process

1) 명령어

(1) top

- 현재 실행중인 프로세스의 정보를 리포팅한다.

 

(2) ps

- 현재 프로세스를 보여준다.

 

(3) pstree

- 현재 프로세스의 트리를 보여준다.

 

(4) kill

- 프로세스에게 신호를 보낸다.

- 9번 시그널: 프로그램을 종료시킨다.

 

(5) command &

- 수행중인 프로세스를 백그라운드에서 돌게할 수 있다.

 

 

(6) Ctrl + C

- 수행중인 프로세스를 종료시킨다.

 

(7) Ctrl + Z

- 수행중인 프로세스를 중지시킨다.

 

(8) bg

- 수행중인 프로세스를 background에서 실행시킨다.

 

(9) fg

- 수행중인 프로세스를 foreground에서 실행시킨다.

- bash

- 서버에 접근하다가 에러가 발생하다.

728x90
반응형