IT_Study/Operating System

Operating System (1) : 운영체제, VM을 이용한 Ubuntu 설치, 파일 시스템, OS 현황, Shell 종류, CLI 명령어

__Vivacé__ 2023. 3. 16. 17:11

리눅스 쉘 프로그래밍

 

운영체제(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. 카카오미러, 카이스트미러)에서 설치

 

[ ubuntu-cd ] - [ 20.04.5 ] - [ ubuntu-20.04.5-desktop-amd64.iso ] 설치

  • cd : image를 의미
  • 10년 전에도 쓰인 기술이 요즘도 쓰이고 있기 때문에, 임베디드는 최신이 정답이 아님
  • GUI 기능이 포함된 desktop version 설치

 

 

VirtualBox 다운로드

호스트 컴퓨터에서 가상 머신(Virtual Machine)을 생성하고 실행할 수 있게 해줌

VirtualBox 홈페이지 접속 → Windows hosts → 프로그램 다운로드 후 실행시켜 setup까지 진행

 

 

VM을 이용하여 .iso 설치

[새로 만들기] 클릭

 

  • [전문가 모드]에서, 이름, 종류, 버전을 위와 같이 맞춰서 설정
  • 메모리 4GB로 설정
  • 파일 크기 50GB로 설정 + [VDI] + [전체 사이즈 동적 할당]

 

만들어진 인스턴스에 우클릭 - [설정] 클릭

 

[시스템] - 프로세서 개수 4개로 설정

 

[저장소] 에서, IDE 속성 - [광학 드라이브] - [IDE 세컨더리 마스터] - [디스크 파일 선택] - iso 파일 선택
설정 완료 후, [시작] 누름

 

화면이 잘려서 다음으로 넘어가는 버튼이 안보이는 경우

>  Alt + F7을 누른 후, 마우스 또는 키보드 화살표키로 창을 이동시키면 해결

 

디스크 지우고, 우분투 설치
위 화면과 같이 진행 / 비밀번호는 까먹을 수 있으니, 간단하게 (본인은 1)

 


대표적인 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 : 다른 파일이나 디렉토리를 가리키는 파일

 

 

https://coding-factory.tistory.com/499

 

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

https://extensions.gnome.org/

 

그놈 쉘 확장

 

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