본문 바로가기

Computer Science/Embedded Software

[Embedded Software] Linux Basic

+ 한국항공대학교 최차봉 교수님의 임베디드 SW 과목 내용을 정리한 글입니다.

 

Linux Torvalsminix를 통해 80386 PC를 위한 커널로 처음 개발했다.

 

대표적인 리눅스 배포판 (Kernel, Shell, Free SW Packages)

- Debian(1993), Fedora(2003), CentOS(2004), Ubuntu(2004)


Linux의 구조

Hardware - Hardware Interface - Kernal Space - System Call Interface - User Space

 

Hardware Interface

- Hardware 장치와 소프트웨어 간 상호작용을 가능하게하는 연결점 역할 (USB, HDMI 등)

 

Kernel Space

- OS(운영체제): Process Manager, Memory Manager, File System Manager, Device Manager, Net Manager..

 

System Call Interface

- OS의 여러 시스템에서 제공하는 함수들을 사용할 수 있도록 하는 역할

 

User Space

- Application, Shell (사용자로 하여금 OS를 사용할 수 있게 해주는 역할: Command Interpreter)

 


Linux Directory(= 폴더) 구조 (트리 구조)

리눅스 디렉토리 구조

- bin: 기본적인 명령 파일들을 저장한 디렉토리

- opt: 추가 패키지가 설치되는 디렉토리

- boot: 부팅에 필요한 정보를 가진 파일들을 저장한 디렉토리

- root: 시스템 관리자인 root 계정의 홈 디렉토리

- dev: 장치 파일들이 저장된 디렉토리

- sbin: 부팅에 필요한 시스템을 운영, 관리를 위한 명령 파일들을 저장한 디렉토리

- etc: 리눅스 설정을 위한 각종 파일들이 저장된 디렉토리

- srv: FTP나 Web 등 시스템 서비스의 데이터가 저장된 디렉토리

- home: 사용자 홈 디렉토리

- tmp: 시스템 사용 중 발생한 임시 데이터가 저장된 디렉토리

- lib: 라이브러리가 저장된 디렉토리

- usr: 기본 실행 파일, 라이브러리 파일, 헤더 파일 등이 저장된 디렉토리

- media: CD-ROM이나 USB 같은 외부 장치가 연결된 디렉토리

- var: 시스템 운영 중에 발생한 데이터와 로그가 저장된 디렉토리

- mnt: 파일 시스템을 임시로 연결(마운팅)하는 디렉토리 (mnt 디렉토리 하위에 저장)

- proc: 프로세스 정보 등 커널 관련 정보를 저장한 디렉토리 (CPU도 파일처럼 표현)

- sys: 리눅스 커널 관련 정보를 저장한 디렉토리

- run: 실행 중인 서비스와 관련된 파일들이 저장된 디렉토리


Kernel과 Shell

Kernel

HW와 Application 간 상호작용을 돕는 핵심이다.

 

커널 버전 확인: uname -r

Shell

Unix 계열 시스템의 대화형 Interface이다. (일종의 인터프리터, 스크립트 언어)

 

사용자가 입력한 명령을 받아 해석하고, 커널에 전달하여 결과를 반환한다.

 

대표적인 Shell의 종류

- sh: Unix의 최초 Shell. Steve Bourne이 개발했다.

- bash(Bourne-Again Shell): 가장 많이 사용되는 Shell이다. (Linux에서 사용)

- 그 외: csh(C Shell), ksh(Korn Shell), tcsh, zsh, fish 등

 

사용 중인 Shell 버전 확인: echo $SHELL

- echo: 화면에 보여줘, $: 변수의 내용을

 

사용 가능한 Shell 확인: cat /etc/shells (bash 외 다른 Shell들을 확인할 수 있다.)


프로세스 (Process)

Program vs Process vs Processor

1. Program: 코딩한 결과가 Disk안에 저장된 정보. (실행을 위에서는 Memory로 Load시켜야 한다.)

2. Process: Memory에서 실행 중인 코드. (실행 중인 프로그램의 상태)

3. Processor(CPU): Process가 실행 중인 장소. 

 

Foreground Process

키보드와 디스플레이(화면)를 사용하여 실행되고 있는 프로세스

 

- 명령 실행 후 종료될 때까지 다른 작업을 할 수 없다. (Multi Tasking 불가능)

 

- ctrl + c: 종료 (종료되지 않는 경우는 kill 명령어를 활용)

 

- ctrl + z: 일시 중단 후 Background로 전환

 

예) sleep 1000 (1000초 동안 정지. Foreground에서 실행하기 때문에 기다려야 한다.)

Background Process

사용자와 대화 없이 실행되는 프로세스

 

- 명령 실행 중 다른 작업을 할 수 없다. (Multi Tasking 가능)

 

- 명령 뒤에 '&'을 입력하면 Background로 실행된다.

sleep 1000 & (1000초 동안 정지. Background에서 실행하기 때문에 기다리지 않아도 된다.)

 

- Terminal이 종료되면 Background Process도 종료된다.

=> 종료되지 않게 하는 명령어: nohup sleep 1000 &

=> Background에서 실해되는 Process를 강제 종료하는 명령어: kill %[작업(job)번호]

+ job 번호, PID 두 가지로 종료가 가능하다.

 

Job(작업): 현재 터미널(Shell)에서 실행 중인 프로그램 

jobs -l: job의 번호를 확인하는 명령어 (-l은 long으로 자세히 봐야 job번호가 보인다.)

 

ps -e: PID(Process ID)를 확인하는 명령어 (현재 실행 중인 프로세스 모두 확인)

 


Package Manager

리눅스의 주요 모듈 설치를 돕는 시스템

- Package 간의 의존성을 확인하여 자동으로 설치한다. (인터넷 필요)

종류

- yum: RedHat 계열 (CentOS)

- apt: Debian 계열 (Ubuntu)

명령어

- apt -h: 사용법을 출력 (-h는 일반적으로 help, 사용법을 알려준다.)

- apt list [패키지명]: 설치할 수 있는 패키지의 버전 출력

- apt install [패키지명]: 패키지 설치

- apt search [패키지명]: 패키지 검색

- apt update: 설치된 패키지 업데이트

- apt update [패키지명]: 패키지 업데이트

- apt upgrade: 설치된 패키지 업그레이드

- apt remove [패키지명]: 패키지 삭제