[리눅스] 데이터와 리눅스?

jul ee·2025년 3월 28일

데이터 성장기

목록 보기
1/139
post-thumbnail

🖇  리눅스
🖇  운영체제 일반 개론
🖇  리눅스 기반 운영체제
🖇  하드웨어 & 클라우드와 가상화


데이터 분석과 데이터 사이언스를 목표로 공부하는 입장에서, 리눅스와 운영체제에 대한 이해도가 충분해야 한다는 것은 안다.

그렇다면 어떨 때 왜 필요한 것일까?

우리는 데이터를 분석하고 모델링하는 것에만 그치지 않고, 데이터를 다루는 환경까지 이해해야 한다.
분석 환경을 스스로 구성하거나 대용량 데이터를 효율적으로 처리하고, 클라우드나 원격 서버 환경에서 직접 작업을 수행해야 할 상황이 생길 것이다.

대부분이 리눅스 기반 환경에서 이루어지기 때문에 관련 명령어나 시스템 구조를 제대로 알고 있어야 한다.

   실제로
   데이터가 저장된 서버에 접근하거나,
   터미널을 통해 파이썬 또는 분석 도구 환경을 구성하거나,
   주기적인 배치 작업을 자동화하고,
   Docker, Hadoop, Spark 등의 도구를 활용하여 분산 처리 환경을 구성할 때

리눅스 명령어 사용과 운영체제 구조에 대한 이해가 작업의 효율성과 직결된다는 사실을 알게 되었다.


특히 인상 깊었던 부분은
프로세스와 스레드, 메모리 구조, 사용자 권한 관리 등의 개념이 단지 이론에 머무는 것이 아니라, 실제로는 모델 학습 시 리소스 활용을 최적화하거나 시스템 성능 저하 원인을 파악하는 데 직접적으로 연결될 수 있다는 점이었다.

이러한 내용을 학습한 후 핵심 개념 및 주요 명령어를 정리하는 목적으로, 나만의 언어로 작성해 보았다.
앞으로 데이터를 통해 가치를 창출해 나갈 수 있는 발판이 될 것이라 생각한다.



🖇  리눅스

리눅스

  • UNIX 운영체제를 본떠 만들어짐
  • 리눅스에서는 설정값 또한 파일이며, 키보드 등의 하드웨어 기기들도 파일로서 접근 가능
  • 리눅스에서 모든 것은 파일이며, 디렉토리(폴더)도 파일의 한 종류

/ : 최상위 디렉토리

~ : 홈 디렉토리

. : 현재 디렉토리

cf. . 으로 시작하는 이름을 가진 파일 → 숨김 파일

.. : 상위 디렉토리

# cloud shell 터미널
root@___:~#

root: 현재 로그인한 사용자 명
___: 컴퓨터 이름, 호스트 명
~: 현재 위치(홈 디렉토리)
#: 현재 로그인한 사용자가 최고 관리자 계정(root)인 경우
$: 현재 로그인한 사용자가 일반 사용자인 경우
  • 단축키
    Ctrl+Shift+↑/↓ 한줄씩 위/아래로 스크롤

    Shift+PageUp/PageDown 한 페이지씩 위/아래로 스크롤


리눅스 명령어

⇒ 파일/폴더 관련

명령어설명
echo [내용]입력한 내용 출력
pwd현재 위치한 디렉토리의 전체 경로 출력
ls현재 디렉토리 내의 파일/폴더 목록 출력
ls -a 또는 ls --all숨김 파일까지 모두 출력
mkdir [폴더명]새로운 디렉토리 생성
rm [파일명]파일 삭제
rm -r [폴더명]디렉토리와 그 안의 모든 내용을 재귀적으로 삭제
rmdir [폴더명]비어 있는 디렉토리 삭제
touch [파일명]빈 파일을 생성
cat [파일명]텍스트 파일의 내용 출력
cp [원본] [대상]파일/디렉토리 복사
mv [원본] [대상]파일/디렉토리를 이동하거나 이름 변경
find [경로] -name [파일명]경로에서 해당 이름을 가진 파일 찾기
chmod [권한] [파일명]파일/디렉토리의 권한을 변경
chown [사용자] [파일명]파일/디렉토리의 소유자를 변경

—help 옵션

옵션(축약)설명
-a숨김 파일 포함해서 모두 표시
-l파일의 상세 정보(권한, 소유자, 크기, 수정일 등) 표시
-h사람이 읽기 쉬운 크기 단위(K, M, G 등)로 표시
-t파일 수정 시간 순으로 정렬 → 최신 파일이 위쪽으로 표시
-r역순 정렬
-rt시간순 + 역순 → 최신 파일이 아래쪽으로 표시
-A...은 제외하고 숨김 파일 표시
  • 여러 인자(옵션)를 함께 쓰는 법
    • ls -l -a -hls -lah
      ls -lah
      	: 숨김 파일 포함, 상세 정보, 보기 쉬운 크기로 표시
      ls -alrt
      	: 시간 순 + 역순으로 숨김 파일 포함 정렬
      ls --all aiffel
      	: aiffel 폴더 안의 파일 확인

⇒ 디렉토리 이동 관련

명령어설명
cd [디렉토리명]해당 디렉토리로 셸의 현재 위치를 이동
cd (~)홈 디렉토리(~)로 이동
cd ..한 단계 상위 디렉토리로 이동
pwd현재 위치(경로) 출력
  • 상대 경로 vs 절대 경로
    # 상대 경로
    - 현재 위치를 기준으로 경로를 지정
    	- cd ..
    	- cd aiffel/data
    
    # 절대 경로
    - 루트(/)부터 시작하는 전체 경로
    	- cd /home/user/aiffel


🖇  운영체제 일반 개론

운영체제

https://modulabs.co.kr/blog/introducing-os

운영체제(Operating System)

  • 운영체제는 컴퓨터의 모든 하드웨어와 소프트웨어 자원을 관리하고, 사용자와 컴퓨터 하드웨어 사이를 중재해주는 시스템 소프트웨어
  • 자원 관리, 사용자 인터페이스 제공, 응용 프로그램 실행, 하드웨어 제어 및 보호 등 ⇒ 커널(알맹이) + 셸(껍데기)

대표적인 운영체제

  • 리눅스 계열: Ubuntu, CentOS
  • 마이크로소프트: Windows
  • 애플: macOS, iOS
  • 구글: Android, ChromeOS

커널(Kernel)

  • 하드웨어 자원을 직접 관리하는 운영체제의 핵심
    • 자원을 실제로 나누고, 장치를 관리하고, 프로세스를 실행시킨다
    • 보안, 프로세스 관리, 장치 드라이버, 메모리 관리 등 수행
    • CPU, Memory, SDD 등 각종 디바이스를 통합 관리하면서 그 연산 자원을 수많은 어플리케이션들에 분배한다
  • 사용자와 하드웨어의 중간 관리자 역할

커널의 종류와 특징

운영체제사용하는 커널특징
Ubuntu리눅스유닉스 기반, 오픈소스
WindowsWindows NT마이크로소프트 독자 커널
macOS / iOSXNU (XNU is Not Unix)유닉스 기반, BSD + Mach 기반 혼합형 커널
Android, ChromeOS리눅스리눅스 기반 모바일/경량화 OS


셸(Shell)

  • 사용자와 운영체제(커널) 사이를 이어주는 입력 인터페이스
  • GUI(Graphical User Interface) 셸
    • 마우스, 버튼 등 시각적 요소로 작동하는 그래픽 기반 셸
    • Windows shell, macOS의 Aqua, GNOME, Unity 등
  • CLI(Command Line Interface) 셸
    • 명령어 입력으로 작동하는 텍스트 기반 셸
      • sh 기본적인 셸
      • bash 많이 쓰이는 기본 셸
      • zsh 테마, 플러그인 등 꾸미기 쉬움
      • fish, csh
    • 대부분의 리눅스와 macOS는 bash 또는 zsh를 기본 셸로 사용

        echo $SHELL 내가 쓰는 셸 확인하기

프로세스와 스레드

프로세스와 스레드

  • 프로그램: 컴퓨터가 수행할 작업이 기록된 정적인 파일
  • 프로세스(Process): 프로그램이 실행되어 운영체제가 메모리를 할당하는 작업단위 → 운영체제는 프로세스 단위로 메모리, CPU 자원을 분배한다
  • 스레드(Thread): 프로세스가 할당받은 메모리를 활용하는 실행 단위
메모리 관리

- 각 프로세스는 가상 메모리(Virtual Memory)를 사용
    - 운영체제는 프로세스에 실제 메모리의 일부를 가상 메모리로 떼어서 제공
- 다른 프로세스의 메모리에 접근 불가 → 보안 및 안정성 확보
    => 프로세스 격리
    => 통신이 필요한 경우 IPC(Inter-Process Communication) 기법 사용
       : 다른 프로세스의 메모리에는 접근할 수 없기 때문에 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스 간 통신 기법을 사용해야 한다


CPU 자원 관리

- (메모리는 주소로서 프로세스에 제공되지만,) CPU는 코어 단위로 프로세스에게 할당된다
- 한 프로세스는 기본적으로 하나의 스레드(thread)를 가지고 시작
- 개발자가 여러 스레드를 설계하면 멀티코어 CPU 성능 극대화 가능

멀티프로세싱(Multiprocessing)

  • 하나의 프로그램이 여러 개의 프로세스를 생성하여 처리

멀티스레딩(Multithreading)

  • 하나의 프로세스 안에서 여러 스레드가 동시에 작업 수행

대용량 데이터를 전처리하거나 모델을 학습하는 데 시간이 오래 걸릴 경우, multiprocessing, joblib, concurrent.futures 등의 파이썬 라이브러리를 사용해 병렬 처리를 구성할 수 있다고 한다.
이때 내부적으로 CPU 코어를 어떻게 나누어 쓸지 결정하기 위해 프로세스와 스레드의 차이와 자원 공유 구조를 이해하는 것이 중요하다.



🖇  리눅스 기반 운영체제

터미널

터미널

  • 사용자 입력을 받아 실행하고 결과를 출력하는 입출력 장치 또는 소프트웨어

터미널 에뮬레이터

  • 그래픽 환경 안에서 터미널을 흉내 낸 프로그램 e.g., Cloud Shell 창 - CLI 셸 (그래픽 창 안에 CLI를 띄운 형태)

tty

  • 터미널 장치를 가리키는 리눅스 시스템 내 파일명
    e.g., /dev/tty2

CLI 셸 : 텍스트로 명령을 입력해 조작하는 환경

GUI 셸 :마우스와 버튼으로 조작하는 그래픽 환경


프로세스 관리와 시스템 콜

⇒ 실행 중인 프로세스 확인

명령어설명
ps현재 터미널과 관련된 프로세스 목록 표시
ps -e시스템 전체에서 실행 중인 프로세스 목록 표시
ps -ef모든 프로세스 + 상세 정보 출력 (UID, PID, TTY, CMD 등)
`ps -efgrep [문자열]`
$ ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 01:50 ?        00:00:00 /bin/sh -c jupyter notebook  --NotebookApp.token=$DEFAULT_J
root           7       1  1 01:50 ?        00:00:02 /opt/conda/bin/python /opt/conda/bin/jupyter-notebook --Not
root           8       1  0 01:50 ?        00:00:00 ttyd -p 8887 /bin/bash
root          13       7  0 01:50 ?        00:00:00 /opt/conda/bin/python -m ipykernel_launcher -f /aiffel/.loc
root          31       8  0 01:54 pts/0    00:00:00 /bin/bash
root          33      31  0 01:54 pts/0    00:00:00 ps -ef

# 출력 정보
PID: 프로세스 ID
TTY: 연결된 터미널 (예: pts/0, ?는 터미널 없음)
CMD: 실행 중인 명령어 (예: /bin/bash, python 등)

⇒ 프로세스 종료하기

명령어설명
kill프로세스에 종료 신호를 보냄
KILL강제 종료 (기회 없이 즉시 종료)
INTCtrl+C를 누르면 전달되는 신호
TERM프로세스 종료 전에 해당 프로세스에게 해명할 기회를 줌
sudo관리자 권한으로 실행

시스템 콜(System Call)

  • 프로세스가 운영체제 커널에 명령을 전달하는 기눙 프로세스 종료 요청(kill), 폴더 생성(mkdir), 파일 읽기 등
  • 일반 프로그램은 시스템 콜을 통해서만 커널의 기능을 사용할 수 있음
    • 각 프로세스는 커널을 통하지 않고서는 파일이나 장치, 또는 다른 프로세스에 간섭할 수 없다

프로그램과 환경 변수

명령어의 두 종류

  • 실제 프로그램: 파일로 존재하는 실행 프로그램 /bin/ls
  • 셸 내부 명령어: 셸(bash 등)이 자체적으로 제공하는 명령 cd, echo
  • which [명령어]
    • 해당 명령어가 실제 프로그램인지 확인할 때 사용
# /bin 디렉토리에 설치된 ls라는 프로그램
$ which ls
/bin/ls

# 셸(bash)은 프로그램
$ which bash
/bin/bash

# cd는 프로그램이 아니라 셸에서 제공하는 명령어
$ which cd

환경변수

  • 셸에서 단어 앞에 $가 붙으면 환경 변수(environment variable)를 의미
  • 파이썬의 변수처럼, 환경 변수는 운영체제가 프로세스 단위로 사용하는 변수
  • 해당 이름을 가진 프로그램 명령어가 실제로 설치되어 있는지 확인

# - 셸은 $PATH에 정의된 디렉토리들을 앞에서부터 순서대로 검색해서 해당 프로그램을 실행
# - 콜론(:)으로 구분된 디렉토리 경로 리스트

# PATH라는 이름의 환경 변수($)의 값을 출력(echo)
# PATH: 셸이 프로그램을 실행할 때 참조할 경로들을 나타내는 환경 변수
$ echo $PATH    # 참조 경로 목록 출력

# export: 셸 변수나 함수를 현재 환경으로 내보낸다
# PATH 환경변수에 디렉토리 경로를 추가하면 셸이 특정 프로그램을 실행할때 참조할 수 있다
$ export PATH=/aiffel:$PATH    # 경로 추가
$ echo $PATH

$ env    # 현재 설정된 모든 환경 변수 출력

패키지 관리자

패키지 관리자(package manager)

  • 리눅스 기반 운영체제에서 프로그램(소프트웨어)을 쉽게 설치, 업데이트, 삭제할 수 있도록 도와주는 도구

  • 공인 저장소에서 프로그램과 라이브러리를 패키지 단위로 설치하고 관리할 수 있도록 하는 프로그램

  • APT(Advanced Packaging Tool) : 우분투의 기본 패키지 관리자

    e.g., APT, Snap, YUM, RPM, 파이썬의 pip 등

  • apt-get PT 패키지 관리자를 통해 공인 저장소에서 패키지를 가져다 설치하거나 제거

     # 등록된 공인 저장소에 있는 패키지 목록을 최신 버전으로 가져오기
     $ sudo apt-get update
     
     # 패키지 목록을 읽고, 해당 패키지가 의존하는 다른 패키지 등을 자동으로 확인한 뒤, 설치 진행
     $ sudo apt-get install htop
     
     # 프로그램만 삭제
     $ sudo apt-get remove htop
     
     # 해당 프로그램의 설정 파일까지 모두 삭제
     $ sudo apt-get purge htop

사용자와 권한

sudo

  • 일반 사용자가 관리자 권한이 필요한 작업을 할 때 실행
  • root 계정(최고 권한)을 잠깐 빌려주는 것

사용자와 그룹

  • 리눅스에서는 같은 권한을 가진 사용자(user)들을 그룹(group) 단위로 묶어 관리
  • 특정 명령(sudo)을 실행하려면 그 사용자는 sudo 그룹에 포함되어 있어야 함.
  • /etc/group : 현재 그룹 목록 파일로 확인

파일/디렉토리의 소유자와 권한

  • 모든 파일과 디렉토리는 소유자와 소유 그룹이 존재
  • 권한은 3부분으로 나뉜다: 소유자 | 소유그룹 | 기타 사용자
    • r: 읽기 (read)

    • w: 쓰기 (write)

    • x: 실행 (execute)
      - 프로그램: 실제 실행할 수 있다는 것을 나타낸다
      - 디렉토리: 해당 폴더 안으로 cd로 이동할 수 있는지 여부를 나타낸다

      # 권한 확인
      $ ls -lah
      
      # 권한 정보 해석
      -rwxr--r--
      -: 해당 파일이 디렉토리(d)인지 또는 일반 파일(-)인지 여부
      소유자: rwx (읽기, 쓰기, 실행 가능)
      그룹: r-- (읽기만 가능)
      기타 사용자: r-- (읽기만 가능)
    • chown: 대상 파일의 소유 사용자와 그룹 변경

      $ ls -lah
      drwxr-xr-x 1 root root 4.0K Jun  7 08:34 .
      
      $ sudo chown root:adm .
      $ ls -lah
      drwxr-xr-x 1 root adm  4.0K Jun  7 08:34 .
      
      # 디렉토리 내의 모든 파일들에 대해 적용하려면 -R 옵션 사용해야 한다
    • chmod: 대상 파일의 권한 변경

      $ ls -lah
      drwxr-xr-x 1 root root 4.0K Jun  7 09:27 .
      
      $ chmod 744 aiffel_test
      -rwxr--r-- 1 root root 60K Dec 21  2021 aiffel_test
    • 숫자 권한 예시

      권한이진수십진수
      rwx1117
      rw-1106
      r--1004
      r-x1015
      • chmod 755 aiffel_test → 소유자 rwx, 그룹 r-x, 기타 사용자 r-x


🖇  하드웨어 & 클라우드와 가상화

하드웨어

마더보드(Motherboard)

  • CPU Socket: CPU가 장착되는 자리
  • Memory Slots: RAM(메모리) 장착 슬롯
  • PCI/PCI Express: 그래픽카드나 기타 확장 카드 장착 슬롯
  • SATA / IDE: 저장장치(HDD, SSD 등) 연결
  • CMOS Battery: BIOS 설정 유지용 전원
  • I/O Panel: 모니터, USB 등 외부 장치 연결 포트
    [출처] https://en.wikipedia.org/wiki/Motherboard

기계어란?
  • CPU가 직접 이해하고 실행하는 명령어 (0과 1의 이진수)
  • 사람이 이해하기 어려워서 ‘고급 언어 → (컴파일) → 기계어’ 로 변환

명령어 집합 (Instruction Set)

  • CPU가 이해할 수 있는 명령어 모음
  • 데스크탑: Intel, AMD → 주로 CISC
  • 모바일: ARM → 주로 RISC (전력 적고 효율 높음)

CPU와 메모리

  • 32bit vs 64bit CPU: 주소 지정 범위가 달라진다
    • 32bit: 약 4GB RAM까지만 직접 접근 가능
    • 64bit: 훨씬 많은 메모리 사용 가능

CPU 성능과 발전

  • 클럭 속도(Clock): 초당 처리 속도 기준 (ex. 4GHz)
  • 최근에는 속도보다 코어 수 증가 & 멀티스레드 처리로 성능 향상
  • 공정이 미세화되며 물리적 한계에 다다름 (1~5nm 수준, 양자 터널링 문제)

CPU 외 연산 장치

장치설명
GPU (Graphics Processing Unit)병렬 연산에 최적화, 딥러닝에도 많이 활용
TPU (Tensor Processing Unit)구글이 딥러닝 전용으로 설계한 연산 장치
ASIC특정 목적 전용 집적회로 (ex. 비트코인 채굴 등)
FPGA사용자가 직접 회로 설계 가능한 유연한 하드웨어

저장 장치

  • 주 저장장치 - RAM (Random Access Memory)
    • 빠른 속도, 전원이 꺼지면 데이터가 사라진다(휘발성)
    • 장점: CPU에 가까운 속도로 접근 가능
    • 단점: 용량을 늘리기 어렵고 가격이 비쌈
  • 보조 저장장치 – HDD & SSD
    - HDD (Hard Disk Drive):
    - 가격 저렴, 속도 느림, 기계식 부품
    - SSD (Solid State Drive):
    - 빠른 속도, 가격은 HDD보다 비쌈, 전원이 꺼져도 데이터 보존

저장 속도 비교

  • 저장장치의 속도 차이는 수십만 배 이상
  • RAM은 빠르지만 비싸고, SSD는 RAM보단 느리지만 HDD보다 훨씬 빠르다
저장 장치실제 지연 시간인간 시간 비유
L1 캐시 접근0.9ns2초
L2 캐시2.8ns7초
RAM 접근~100ns4분
SSD 입출력50~150μs1.5~4일
HDD 입출력1~10ms1~9개월
인터넷 통신65~141ms5~11년

딥러닝과 저장장치

  • GPU를 사용해도 학습이 느린 경우, 병목 지점이 GPU/CPU가 아니라 데이터 로딩 속도일 수 있다
    • 저장장치를 SSD로 교체하거나,
    • 학습 데이터를 미리 여러 개의 스레드를 사용하여 RAM에 올려두기
      ⇒ 아무리 GPU가 빨라도, 데이터가 느리게 공급되면 학습이 느려진다
      ⇒ 저장장치 선택이 성능에 큰 영향을 미친다

클라우드와 가상화

클라우드 컴퓨팅

  • 서버를 필요할 때 빌려쓰는 기념
    e.g., AWS(Amazon Web Services)

가상화

  • 물리적인 컴퓨터 1대를 여러 개의 가상 컴퓨터처럼 분할해서 사용하는 기술
  • 호스트(host): 실제 물리 서버
  • 게스트(guest): 그 안에서 동작하는 가상 서버

가상화 종류

  • 가상 머신(VM)
    • 게스트 자체에 운영체제가 돌아간다 (게스트 자체 OS 보유)
  • 컨테이너(Container)
    • 게스트들이 호스트의 운영체제 커널을 공유

    • 커널의 기능만 공유할 뿐, 프로세스나 자원 등은 서로 철저히 격리하여 서로 간섭할 수 없도록 하는 것이 핵심

      e.g., Docker(컨테이너 가상화를 쉽게 제공하는 프로그램)

⇒ 가상화는 클라우드 전용이 아님
⇒ 내 컴퓨터에서 Anaconda, VirtualEnv 등도 일종의 가상 환경

가상환경(virtual environment)

  • 하나의 운영체제 안에서 독립된 개발 환경을 만드는 것
  • 컴퓨터에 설치된 패키지 간의 충돌 또는 패키지 버전에 의한 이슈 등을 방지하기 위해 가상으로 나누어서 사용하는 환경

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글