리눅스에 대해 알아보자

sky.dev·2025년 4월 12일

Data&AI-Uni.

목록 보기
2/77
post-thumbnail

운영체제(Operating System, OS)
컴퓨터 하드웨어와 사용자 사이의 인터페이스 역할을 수행한다.
컴퓨터 시스템의 자원을 효율적으로 관리하고 사용자에게 편리한 환경을 제공하는 핵심 소프트웨어

운영체제의 주요 구성 요소

커널 (Kernel): 운영체제의 핵심으로, 컴퓨터의 모든 하드웨어 자원(CPU, 메모리, 입출력 장치 등)을 관리하고 프로세스 관리, 메모리 관리, 파일 시스템 관리, 장치 드라이버 관리 등 핵심적인 기능을 수행합니다.

시스템 호출 (System Call): 사용자 프로그램이 커널의 기능을 사용하기 위한 인터페이스입니다. 예를 들어, 파일을 읽거나 쓰는 동작, 새로운 프로세스를 생성하는 동작 등은 시스템 호출을 통해 커널에 요청됩니다.

셸 (Shell): 사용자와 커널 사이의 인터페이스 역할을 하는 명령어 해석기입니다. 사용자가 입력한 명령어를 해석하여 커널에 전달하고, 커널의 실행 결과를 사용자에게 출력합니다.

시스템 라이브러리 (System Library): 응용 프로그램 개발에 필요한 함수들의 모음입니다. 시스템 호출을 더 편리하게 사용할 수 있도록 추상화된 인터페이스를 제공합니다.

유틸리티 (Utilities): 시스템 관리, 파일 관리, 텍스트 처리 등 다양한 작업을 수행하는 프로그램들입니다. 예를 들어, 파일 복사, 디렉토리 생성, 사용자 관리 등의 기능을 제공합니다.

커널의 역할

커널은 운영체제의 심장부로서 다음과 같은 중요한 역할을 수행합니다.

프로세스 관리 (Process Management): CPU 시간을 여러 프로세스에 할당하고, 프로세스의 생성, 소멸, 상태 변화 등을 관리합니다. 스케줄링 알고리즘을 통해 어떤 프로세스를 먼저 실행할지 결정합니다.

메모리 관리 (Memory Management): 컴퓨터의 주기억장치(RAM)를 효율적으로 관리합니다. 각 프로세스에 필요한 메모리 공간을 할당하고 회수하며, 가상 메모리 기법을 통해 실제 메모리보다 더 큰 메모리 공간을 사용하는 것처럼 보이게 합니다.

파일 시스템 관리 (File System Management): 디스크 등의 저장 장치에 파일을 저장하고 접근하는 방식을 관리합니다. 파일과 디렉토리 구조를 유지하고, 파일의 생성, 삭제, 수정, 접근 권한 등을 제어합니다.

장치 드라이버 관리 (Device Driver Management): 키보드, 마우스, 프린터, 디스크 등 다양한 하드웨어 장치와 통신하기 위한 소프트웨어인 장치 드라이버를 관리합니다. 커널은 장치 드라이버를 통해 하드웨어에 접근하고 제어합니다.

네트워킹 (Networking): 네트워크 통신을 지원하고 관리합니다. TCP/IP와 같은 프로토콜 스택을 구현하여 네트워크 연결을 설정하고 데이터를 주고받을 수 있도록 합니다.

보안 (Security): 시스템의 보안을 유지하고 사용자 및 프로세스의 접근 권한을 관리합니다.

터미널과 터미널 에뮬레이터, 셸의 차이점 이해

터미널 (Terminal): 과거에는 컴퓨터와 직접 상호작용하기 위한 물리적인 장치였습니다. 키보드와 화면으로 구성되어 있으며, 사용자의 입력을 컴퓨터에 전달하고 컴퓨터의 출력을 화면에 표시하는 역할을 했습니다.

터미널 에뮬레이터 (Terminal Emulator): 오늘날 우리가 사용하는 대부분의 환경에서는 물리적인 터미널 대신 소프트웨어 형태로 제공되는 터미널 에뮬레이터를 사용합니다. 터미널 에뮬레이터는 그래픽 환경(GUI) 내에서 텍스트 기반의 인터페이스를 제공하며, 물리적인 터미널과 유사한 기능을 수행합니다. 예를 들어, macOS의 "터미널", Windows의 "명령 프롬프트" 또는 "PowerShell", 리눅스의 다양한 터미널 프로그램(GNOME Terminal, Konsole 등)이 터미널 에뮬레이터에 해당합니다.

셸 (Shell): 셸은 사용자와 운영체제 커널 사이의 인터페이스 역할을 하는 명령어 해석기입니다. 터미널(또는 터미널 에뮬레이터)을 통해 사용자가 입력한 명령어를 읽고 해석하여 커널에 전달하고, 커널의 실행 결과를 터미널에 출력합니다. 셸은 단순히 명령어를 실행하는 것 외에도 스크립트 프로그래밍, 환경 설정 등 다양한 기능을 제공합니다.

  • 사용자가 커널과 소통하는 인터페이스
  • GUI 셸: Windows shell, macOS Aqua
  • 명령줄 셸: bash, zsh, sh, PowerShell

필수 터미널 명령어

echo: 입력한 텍스트를 그대로 출력합니다
pwd: 현재 작업 중인 디렉토리 위치를 출력합니다
ls: 현재 디렉토리의 파일과 폴더 목록을 보여줍니다

ls -a 또는 --all: 숨김 파일 포함 모든 파일 표시
ls -l: 상세 정보(권한, 소유자, 크기 등) 표시

cd: 디렉토리 이동 명령어
cat: 파일 내용을 출력합니다
ps: 실행 중인 프로세스 목록을 보여줍니다
sudo: 관리자 권한으로 명령 실행
apt-get: 패키지 관리자를 통한 프로그램 설치/제거

리눅스 시스템 구조

주요 디렉토리 구조: /home, /root, /etc, /bin, /usr 등
파일 권한 체계: 소유자, 그룹, 기타 사용자에 대한 읽기(r), 쓰기(w), 실행(x) 권한
💎프로세스(Process) : 실행 중인 프로그램의 인스턴스
리눅스 시스템에서 실행되는 모든 프로그램은 하나 이상의 프로세스로 관리
각 프로세스는 독립적인 메모리 공간과 자원을 할당받아 실행되며, 자신만의 프로세스 ID(PID)를 가짐

💎스레드: 실행 흐름의 최소 단위
하나의 프로세스는 하나 이상의 스레드를 가질 수 있음

멀티프로세싱(Multiprocessing) : 하나의 프로그램 안 여러개 프로세스 활용
- 각 프로세스는 독립적인 메모리 공간을 가짐
- 상대적으로 많은 자원과 시간이 소요됨
- 병렬처리를 통해 성능 향상 기대가능

멀티스레딩(Multithreading) : 하나의 프로세스 안 여러개 스레드 활용
- 동일한 프로세스 안의 스레드들은 메모리 공간, 코드, 데이터, 파일 등을 공유
- 지원 공유 & 통신 비용 저렴

하드웨어 및 클라우드

CPU, GPU, TPU의 차이점
저장장치 유형(RAM, HDD, SSD)
클라우드 컴퓨팅 및 가상화 개념

0개의 댓글