🖇 리눅스
🖇 운영체제 일반 개론
🖇 리눅스 기반 운영체제
🖇 하드웨어 & 클라우드와 가상화
데이터 분석과 데이터 사이언스를 목표로 공부하는 입장에서, 리눅스와 운영체제에 대한 이해도가 충분해야 한다는 것은 안다.
그렇다면 어떨 때 왜 필요한 것일까?
우리는 데이터를 분석하고 모델링하는 것에만 그치지 않고, 데이터를 다루는 환경까지 이해해야 한다.
분석 환경을 스스로 구성하거나 대용량 데이터를 효율적으로 처리하고, 클라우드나 원격 서버 환경에서 직접 작업을 수행해야 할 상황이 생길 것이다.
대부분이 리눅스 기반 환경에서 이루어지기 때문에 관련 명령어나 시스템 구조를 제대로 알고 있어야 한다.
실제로
데이터가 저장된 서버에 접근하거나,
터미널을 통해 파이썬 또는 분석 도구 환경을 구성하거나,
주기적인 배치 작업을 자동화하고,
Docker, Hadoop, Spark 등의 도구를 활용하여 분산 처리 환경을 구성할 때
리눅스 명령어 사용과 운영체제 구조에 대한 이해가 작업의 효율성과 직결된다는 사실을 알게 되었다.
특히 인상 깊었던 부분은
프로세스와 스레드, 메모리 구조, 사용자 권한 관리 등의 개념이 단지 이론에 머무는 것이 아니라, 실제로는 모델 학습 시 리소스 활용을 최적화하거나 시스템 성능 저하 원인을 파악하는 데 직접적으로 연결될 수 있다는 점이었다.
이러한 내용을 학습한 후 핵심 개념 및 주요 명령어를 정리하는 목적으로, 나만의 언어로 작성해 보았다.
앞으로 데이터를 통해 가치를 창출해 나갈 수 있는 발판이 될 것이라 생각한다.
/ : 최상위 디렉토리
~ : 홈 디렉토리
. : 현재 디렉토리
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 -h → ls -lahls -lah
: 숨김 파일 포함, 상세 정보, 보기 쉬운 크기로 표시
ls -alrt
: 시간 순 + 역순으로 숨김 파일 포함 정렬
ls --all aiffel
: aiffel 폴더 안의 파일 확인⇒ 디렉토리 이동 관련
| 명령어 | 설명 |
|---|---|
cd [디렉토리명] | 해당 디렉토리로 셸의 현재 위치를 이동 |
cd (~) | 홈 디렉토리(~)로 이동 |
cd .. | 한 단계 상위 디렉토리로 이동 |
pwd | 현재 위치(경로) 출력 |
# 상대 경로
- 현재 위치를 기준으로 경로를 지정
- cd ..
- cd aiffel/data
# 절대 경로
- 루트(/)부터 시작하는 전체 경로
- cd /home/user/aiffelhttps://modulabs.co.kr/blog/introducing-os
운영체제(Operating System)
대표적인 운영체제
커널(Kernel)
커널의 종류와 특징
| 운영체제 | 사용하는 커널 | 특징 |
|---|---|---|
| Ubuntu | 리눅스 | 유닉스 기반, 오픈소스 |
| Windows | Windows NT | 마이크로소프트 독자 커널 |
| macOS / iOS | XNU (XNU is Not Unix) | 유닉스 기반, BSD + Mach 기반 혼합형 커널 |
| Android, ChromeOS | 리눅스 | 리눅스 기반 모바일/경량화 OS |
셸(Shell)
sh 기본적인 셸bash 많이 쓰이는 기본 셸zsh 테마, 플러그인 등 꾸미기 쉬움fish, csh 등 echo $SHELL 내가 쓰는 셸 확인하기
프로세스와 스레드
메모리 관리
- 각 프로세스는 가상 메모리(Virtual Memory)를 사용
- 운영체제는 프로세스에 실제 메모리의 일부를 가상 메모리로 떼어서 제공
- 다른 프로세스의 메모리에 접근 불가 → 보안 및 안정성 확보
=> 프로세스 격리
=> 통신이 필요한 경우 IPC(Inter-Process Communication) 기법 사용
: 다른 프로세스의 메모리에는 접근할 수 없기 때문에 프로세스들이 서로 소통하기 위해서는 별도로 허용된 프로세스 간 통신 기법을 사용해야 한다
CPU 자원 관리
- (메모리는 주소로서 프로세스에 제공되지만,) CPU는 코어 단위로 프로세스에게 할당된다
- 한 프로세스는 기본적으로 하나의 스레드(thread)를 가지고 시작
- 개발자가 여러 스레드를 설계하면 멀티코어 CPU 성능 극대화 가능
멀티프로세싱(Multiprocessing)
멀티스레딩(Multithreading)
대용량 데이터를 전처리하거나 모델을 학습하는 데 시간이 오래 걸릴 경우, multiprocessing, joblib, concurrent.futures 등의 파이썬 라이브러리를 사용해 병렬 처리를 구성할 수 있다고 한다.
이때 내부적으로 CPU 코어를 어떻게 나누어 쓸지 결정하기 위해 프로세스와 스레드의 차이와 자원 공유 구조를 이해하는 것이 중요하다.
터미널
터미널 에뮬레이터
tty
/dev/tty2CLI 셸 : 텍스트로 명령을 입력해 조작하는 환경
GUI 셸 :마우스와 버튼으로 조작하는 그래픽 환경
⇒ 실행 중인 프로세스 확인
| 명령어 | 설명 |
|---|---|
ps | 현재 터미널과 관련된 프로세스 목록 표시 |
ps -e | 시스템 전체에서 실행 중인 프로세스 목록 표시 |
ps -ef | 모든 프로세스 + 상세 정보 출력 (UID, PID, TTY, CMD 등) |
| `ps -ef | grep [문자열]` |
$ 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 | 강제 종료 (기회 없이 즉시 종료) |
INT | Ctrl+C를 누르면 전달되는 신호 |
TERM | 프로세스 종료 전에 해당 프로세스에게 해명할 기회를 줌 |
sudo | 관리자 권한으로 실행 |
시스템 콜(System Call)
kill), 폴더 생성(mkdir), 파일 읽기 등명령어의 두 종류
/bin/lscd, echowhich [명령어]# /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
사용자와 그룹
sudo)을 실행하려면 그 사용자는 sudo 그룹에 포함되어 있어야 함./etc/group : 현재 그룹 목록 파일로 확인파일/디렉토리의 소유자와 권한
소유자 | 소유그룹 | 기타 사용자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
숫자 권한 예시
| 권한 | 이진수 | 십진수 |
|---|---|---|
| rwx | 111 | 7 |
| rw- | 110 | 6 |
| r-- | 100 | 4 |
| r-x | 101 | 5 |
chmod 755 aiffel_test → 소유자 rwx, 그룹 r-x, 기타 사용자 r-x마더보드(Motherboard)
[출처] https://en.wikipedia.org/wiki/Motherboard명령어 집합 (Instruction Set)
CPU와 메모리
CPU 성능과 발전
CPU 외 연산 장치
| 장치 | 설명 |
|---|---|
| GPU (Graphics Processing Unit) | 병렬 연산에 최적화, 딥러닝에도 많이 활용 |
| TPU (Tensor Processing Unit) | 구글이 딥러닝 전용으로 설계한 연산 장치 |
| ASIC | 특정 목적 전용 집적회로 (ex. 비트코인 채굴 등) |
| FPGA | 사용자가 직접 회로 설계 가능한 유연한 하드웨어 |
저장 장치
저장 속도 비교
| 저장 장치 | 실제 지연 시간 | 인간 시간 비유 |
|---|---|---|
| L1 캐시 접근 | 0.9ns | 2초 |
| L2 캐시 | 2.8ns | 7초 |
| RAM 접근 | ~100ns | 4분 |
| SSD 입출력 | 50~150μs | 1.5~4일 |
| HDD 입출력 | 1~10ms | 1~9개월 |
| 인터넷 통신 | 65~141ms | 5~11년 |
딥러닝과 저장장치
클라우드 컴퓨팅
가상화
가상화 종류
게스트들이 호스트의 운영체제 커널을 공유
커널의 기능만 공유할 뿐, 프로세스나 자원 등은 서로 철저히 격리하여 서로 간섭할 수 없도록 하는 것이 핵심
e.g., Docker(컨테이너 가상화를 쉽게 제공하는 프로그램)
⇒ 가상화는 클라우드 전용이 아님
⇒ 내 컴퓨터에서 Anaconda, VirtualEnv 등도 일종의 가상 환경
가상환경(virtual environment)