리눅스 쉘 프로그래밍
운영체제(OS, Operating System)
컴퓨터 시스템에서 하드웨어 자원을 효율적으로 관리하고, 응용 프로그램 및 사용자와 하드웨어 자원 간의 인터페이스를 제공하는 소프트웨어 프로그램
Operating Syetem = *Application + *Shell + *Kernel
- *Application(응용 프로그램) : 컴퓨터를 사용하기 위한 다양한 소프트웨어를 의미
ex) 워드프로세서, 웹 브라우저, 게임 등
- *Shell(쉘) : 운영 체제와 사용자 간의 인터페이스 역할을 하는 소프트웨어
ex) Unix/Linux에서 사용되는 bash, Windows에서 사용되는 cmd 등
- *Kernel(커널) : 운영 체제의 핵심 부분, 컴퓨터의 하드웨어와 소프트웨어 자원을 관리하고, 다른 응용 프로그램들이 컴퓨터 자원을 효율적으로 사용할 수 있도록 제어 및 조정
ex) Unix(오픈 소스 운영 체제), Windows(MS에서 개발), Linux(오픈 소스 기반),
Android(리눅스 기반), MacOS(유닉스 기반) 등
Linux에 App, Shell을 추가하여 만든 하나의 Operating System을 “리눅스 배포판(Linux distribution)” 이라고 함 - 대표적인 것이 우분투(Ubuntu)
우분투 리눅스 다운로드
공식 사이트에서 설치하면, 속도가 느림 → 미러 사이트(ex. 카카오미러, 카이스트미러)에서 설치
- cd : image를 의미
- 10년 전에도 쓰인 기술이 요즘도 쓰이고 있기 때문에, 임베디드는 최신이 정답이 아님
- GUI 기능이 포함된 desktop version 설치
VirtualBox 다운로드
호스트 컴퓨터에서 가상 머신(Virtual Machine)을 생성하고 실행할 수 있게 해줌
VirtualBox 홈페이지 접속 → Windows hosts → 프로그램 다운로드 후 실행시켜 setup까지 진행
VM을 이용하여 .iso 설치
- [전문가 모드]에서, 이름, 종류, 버전을 위와 같이 맞춰서 설정
- 메모리 4GB로 설정
- 파일 크기 50GB로 설정 + [VDI] + [전체 사이즈 동적 할당]
화면이 잘려서 다음으로 넘어가는 버튼이 안보이는 경우
> Alt + F7을 누른 후, 마우스 또는 키보드 화살표키로 창을 이동시키면 해결
대표적인 Linux package 관리 시스템
1. Ubuntu software (패키지 설치)
- GUI용 App (Chrome, VS code 등)를 설치 가능
2. APT
- Shell에 "sudo apt install [설치할 패키지 명]"
- Ubuntu or Customizing된 리눅스 배포판에서 “승인”된 버전 설치
- 의존성 패키지들을 같이 설치해준다. (이전 패키지 관리 시스템인 dpkg는 같이 설치해주지 않았음)
- 버전 이슈가 있을 수 있다.
- 패키지 삭제 : "sudo apt purge [설치된 패키지 명]"
3. 홈페이지
- Binary or Source code를 다운받아서 설치
*패키지 설치 도구끼리 독립적으로 관리 (APT로 설치하면, Ubuntu software는 설치된 지 모름)
*설치 시 인증 - sudo 라는 권한을 가진 계정만 설치 가능 (다수의 유저가 접속해서 작업하는 시스템이므로)
A를 설치하면, A를 동작시키기 위한 B, C, D를 같이 업데이트
→ 따라서 업데이트 도중 종료 시, OS부터 다시 설치해야 할 수eh 있다.
리눅스 파일 시스템
파일 시스템
운영 체제에서 파일을 저장하고 관리하는 방법
- 윈도우 파일 시스템
- C: 같은 드라이브에서 파일 관리가 시작
- 리눅스 파일 시스템
- “ / ” : Root 라고 하는 부모 노드가 존재
- 리눅스는 확장자 개념이 없음 - 모든 것(명령어 포함)이 파일이다.
- 파일의 종류 4가지
- Regular file : 파일 시스템에 저장되는 데이터
- Directory : 파일과 다른 디렉토리를 포함하는 컨테이너
- Device file : 시스템에 연결된 하드웨어 디바이스나 가상 디바이스를 나타내는 파일
- Symbolic link : 다른 파일이나 디렉토리를 가리키는 파일
Linux의 사용처
- 2020년 기준, Unix + Linux가 서버의 약 70% 차지
- Unix : C 언어 제작자가 만든 OS, 이 계열로 대표적으로 iOS, macOS, Linux 등이 있음
- Linux : Unix 계열 운영체제, 리누스 토르발스가 Unix를 토대로 만든 OS
- 모바일 OS
- iOS : Unix 계열
- Android : Linux 계열, 시장의 대부분을 차지
- 슈퍼 컴퓨터 OS
- 현재 Linux가 거의 대부분 점유
임베디드 OS
- Non-OS(Non-Operating System) : 하드웨어와 소프트웨어가 직접 상호작용하여 제어
- 소규모 임베디드 시스템에서 사용 : 센서 데이터를 수집하여 처리 or 단순한 제어 장치와 같은 역할
- RTOS(Real-Time Operating System) : 정해진 시간 안에 정확한 결과를 내야 하는 시스템(실시간 시스템)에서 사용되는 운영 체제
- 이벤트 기반 시스템, 인터럽트 처리, 멀티태스킹, 우선순위 스케줄링 등의 기능을 제공
- Linux : 고성능 임베디드 장치에 자주 쓰임
임베디드 회사
1. Linux를 쓴다면, 쓰는 이유
- Reference(개발 자료, 소스코드, 문서 등)이 많이 존재
- 유명한 OS이므로, 개발자를 구하기 쉬움
- 무료 + 검증된 안전성
2. Linux를 안 쓴다면, 안 쓰는 이유
- 간단한 기능을 만들 때는, Linux 없이 프로그래밍이 가능
- Linux가 동작하는 HW를 구성하는 데, 제품 단가가 올라감
Shell의 이해
사용자가 운영 체제의 기능과 서비스를 사용할 수 있도록 인터페이스를 제공하는 프로그램
커널을 감싼단 의미에서 “shell(=껍데기)” 라는 용어를 사용
*프로그램(Program) : 0/1 로 구성된 파일 // *프로세스(Process) : 프로그램을 실행한 결과
*인터페이스(interface) : 두 가지 다른 시스템 또는 구성 요소 간에 상호 작용을 하기 위한 방법
ex) 사용자 & 컴퓨터 간의 인터페이스 → 화면, 키보드, 마우스 등을 포함
- CLI Shell : 글자 기반 인터페이스
- GUI Shell : 그래픽 기반 인터페이스
임베디드에서의 Shell
- Shell은 OS에 반드시 포함되어야 하는 것은 아님
- 전자제품들은 컴퓨팅 장치이다 → 전자제품들은 (Firmware 또는 OS)를 포함
Windows Shell 종류
- Windows Shell : 흔히 쓰는 GUI Shell
- Power Shell : Unix처럼 System 관리 가능한 다양한 기능이 붙은 쉘
- 스크립트 언어 제공 → .net Framework 기반 자동화 스크립팅 가능
- ls (리눅스 명령어) 등을 지원
- apt 같은 패키지 설치 도구가 없음
- Command Prompt(cmd)
Linux Shell 종류
- GNOME Shell : GUI Shell, LTS 기준 18.04부터 “GNOME 3”
- GNOME3의 그래픽 라이브러리 : GTK
- Bash : CLI Shell
라즈베리파이용 쉘 : LXDE
- 가볍게 만든 GUI 환경
- GTK+ 라이브러리와 Openbox 윈도우 매니저를 기반으로 구성
GNOME 꾸미기 - Mac 환경처럼 Setup
1. Tweak 설치
sudo apt install gnome-tweak-tool
검색창에 “tweak” 입력 → 기능 개선 → 모양새 > 테마 > Yaru 에서 다른 테마로 변경 가능
2. Firefox 확장 도구 설치 (GNOME Shell integration)
https://addons.mozilla.org/ko/firefox/addon/gnome-shell-integration/
GNOME Shell integration – 🦊 Firefox용 확장 기능 (ko)
Firefox용 GNOME Shell integration 부가 기능을 다운로드하세요.
addons.mozilla.org
3. Extension 설치
a. OpenWeather
그놈 쉘 확장
extensions.gnome.org
- 목록에서 OpenWeather 찾기 → 플러그인 검색 후 “OFF” → “ON”
- GUI Shell 새로고침 : ALT + F2, 이후 “r” 입력
b. 같은 방식으로 User Themes, Dash to Dock 설치
임베디드 리눅스 개발자가 CLI를 써야 하는 이유
- GUI가 지원이 되지 않는 경우가 많음
- 키보드는 연결할 수 있지만, 마우스 연결이 힘든 경우가 많음 (UART, SSH 등 터미널 접속으로 임베디드 리눅스 원격 제어 시, 마우스 사용 힘듦)
- 프로그램 세팅 / 설치 / 실행이 편하다
- 리눅스 버전 업이 되더라도, 명령어가 변경 될 일은 거의 없다.
CLI 기본 명령어
CLI 창 열기
Ctrl + Alt + T
CLI 기본 명령어
# 현재 절대경로 확인하기
$ pwd
# 디렉토리 목록 보기
$ ls
# 숨겨진 디렉토리까지 모두 보기
$ ls -al
# 파일 생성시간까지 보기
$ ls -al [파일명]
# 화면 지우기
$ clear
# 상위 디렉토리로 이동
$ cd ..
# 해당 디렉토리로 이동
$ cd [디렉토리 절대경로]
# 홈 디렉토리로 이동
$ cd ~
# Root 디렉토리로 이동
$ cd /
# 이전 디렉토리로 이동
$ cd -
# 디렉토리 생성
$ mkdir [디렉토리명]
# 디렉토리 하위메뉴까지 모두 한꺼번에 생성
$ mkdir -p ./aaa/bbb/ccc/ddd
# 디렉토리 삭제
$ rmdir [디렉토리명]
# 디렉토리 하위메뉴까지 모두 삭제
$ rm -R [디렉토리명]
# 빈 파일 생성
# 이미 있는 파일이라면, 수정 시간을 현재 시간으로 바꾼다.
$ touch [파일명]
# 다른 디렉토리에 파일 생성
$ touch [디렉토리 경로]/[파일명]
# 새로운 파일 여러 개 생성
$ touch [파일명 1] [파일명 2] [파일명 3]
# 파일 삭제
$ rm [파일명]
$ rm ./[파일명]
# 파일 여러 개 삭제
$ rm [파일명 1] [파일명 2] [파일명 3]
# 파일 옮기기
mv [파일] [옮길 경로]
# 파일 이름 변경하기
mv [파일] [파일 이름]
# 파일 복사하기
cp [파일] [경로]
# 디렉토리 복사하기
cp -r [파일] [경로]
리눅스 관련 단축키
# 새 탭 열기
Ctrl + Shift _ t
# 탭 전환
Alt + 1, 2, 3 ...
# 탭 닫기
Ctrl + Shift + W
# 복사
Ctrl + Insert
# 붙여넣기
Shift + Insert
# 터미널 멈추기 / S는 STOP이라는 뜻
Ctrl + S
# Ctrl + S를 실수로 누른 경우, Start하는 방법
Ctrl + Q
# 자동 완성 기능
Tab