2022. 5. 6. 18:57ㆍ강의 내용 정리/오픈소스SW개발
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
- 서버에 접근하다가 에러가 발생하다.
'강의 내용 정리 > 오픈소스SW개발' 카테고리의 다른 글
오픈소스 SW개발 (10) Cloud Computing (0) | 2022.06.22 |
---|---|
오픈소스 SW개발 (9) Virtualization (0) | 2022.05.13 |
오픈소스 SW개발 (7) Express (0) | 2022.05.03 |
오픈소스 SW개발 (6) NodeJS (0) | 2022.04.23 |
오픈소스 SW개발 (5), GitHub (0) | 2022.04.14 |