본문 바로가기

클라우드(Cloud)

[스나이퍼팩토리] 카카오클라우드 AIaaS 마스터 클래스 4주차 - 리눅스(Linux) 개념 및 명령어 정리

 

https://fineproxy.org/ko/wiki/linux/

 

 클라우드 환경에서의 개발은 대부분 리눅스(Linux) 환경에서 이루어지므로 리눅스(Linux)에 대한 이해가 필수적이라고 할 수 있다. 

 

 실제로 AWS, GCP, Azure 등의 주요 클라우드 서비스 제공업체는 리눅스 기반의 가상 머신과 컨테이너 환경(예: EC2, GKE, AKS 등)을 중심으로 서비스가 구성되며, 서버 관리, 네트워크 설정, 자동화 스크립트 작성 등 핵심 작업들이 리눅스 명령어와 쉘 환경에서 수행되고 있다. 또한, Docker 및 Kubernetes 같은 클라우드 네이티브 기술 역시 리눅스와 밀접하게 연결되어 있어, 리눅스의 구조와 동작 원리를 이해하는 것이 중요하게 여겨지기에 리눅스(Linx)에 대한 이해를 먼저 하고자 한다. 


1️⃣ 리눅스 개념과 역사

 ✅ 리눅스(Linux)란?

  • 리눅스는 유닉스(UNIX)의 철학을 계승한 오픈소스 운영체제이다.
  • 1991년 리누스 토르발즈가 만든 커널에서 시작되었다. 
  • 현재는 서버, 클라우드, 모바일, 임베디드까지 폭넓게 사용하고 있다. 

 유닉스(Unix)는 범용성과 이식성을 목표로 개발된 운영 체제로, C언어로 작성되어 다양한 하드웨어에서 실행 가능하다는 혁신적 특징을 가졌다. 

✅ 유닉스(Unix) 철학

“작은 프로그램이 한 가지 일을 잘 하게 만들고, 이들을 조합해서 복잡한 작업을 한다.”

  • 명령어 하나하나는 단순하지만, 파이프라인(|)으로 연결해 강력한 기능을 수행한다. 

 리눅스(Linux)는 이러한 유닉스의 설계 철학 을 계승하면서 GNU 프로젝트의 도구 들과 결합하여 완전한 오픈 소스 운영 체제로 발전해왔다. 

 

 유닉스리눅스를 자세히 비교해보자.

항목 유닉스(Unix) 리눅스(Linux)
라이선스 상용 소프트웨어 → 라이선스 비용 발생 GNU GPL 기반의 오픈소스 → 무료 사용 가능
소스 코드 소스 코드 비공개 또는 제한적 접근 누구나 열람, 수정, 배포 가능
커널 구조 전통적인 모놀리식 커널
→ 모든 기능이 커널 내에 통합됨
모듈화된 모놀리식 커널
→ 필요한 기능만 동적으로 로드
대표 운영체제 Solaris, AIX, HP-UX 등 Ubuntu, CentOS, Fedora, Arch 등
사용 환경 기업용 서버, 메인프레임 등
→ 엔터프라이즈 위주
서버 + 데스크탑 + 클라우드 + IoT까지 전방위
지원 및 커뮤니티 벤더(예: IBM, HP)의 지원 전 세계 개발자 커뮤니티에 의해 유지 및 발전
패키지 시스템 자체 시스템 (벤더별 도구) APT (Debian), YUM/DNF (RedHat) 등 다양한 패키지 도구
개발자 자유도 제한적 (상용 환경) 매우 높음 (커스터마이징, 스크립트, 배포 가능)
교육/학습 자료 자료 접근 어려움, 특정 인증 필요 방대한 무료 자료와 실습 가능
역사 1970년대 AT&T 벨 연구소에서 개발 1991년 리누스 토르발즈의 커널 개발에서 시작됨

 

 가장 큰 차이점은 오픈소스인 리눅스에 비해 유닉스는 라이센스 비용이 발생하는 상용 소프트웨어이기에 사람들이 많이 사용하기 어렵다는 한계점이 있었다. 그러한 이유로 현재까지 리눅스를 많은 사람들이 사용하고 있다고 할 수 있다. 


2️⃣ 리눅스의 핵심 특징

✅ CLI 중심

  • 마우스 없이 키보드 명령어로 시스템 제어
  • 자동화, 원격접속에 필수

✅ 다중 사용자 & 다중 작업

  • 여러 사용자가 동시에 로그인 가능 (예: SSH 접속)
  • ps, top, jobs 명령어로 여러 작업 동시에 관리 가능

✅ 모든 것이 파일이다

  • 디렉토리도 파일
  • 하드웨어 장치도 파일(/dev/sda, /dev/null)
  • 명령어도 파일(/bin/ls)

3️⃣ 리눅스 커널 아키텍처

✅ 커널이란?

  • CPU, 메모리, 디스크 같은 하드웨어와 직접 소통하는 핵심 프로그램
  • 사용자 → 쉘 → 커널 → 하드웨어 흐름

✅ 커널 구성 요소

구성 역할
프로세스 관리 실행/중단/대기 스케줄링
메모리 관리 가상 메모리, 스와핑
파일 시스템 ext4, xfs 등 지원
네트워크 TCP/IP 처리
드라이버 장치 연결 (프린터, USB 등)

4️⃣ 실무 활용처

✅ 서버 운영

  • 리눅스는 웹서버의 표준 OS
  • Apache/Nginx + MySQL/PostgreSQL

✅ 클라우드 플랫폼

  • AWS EC2의 기본 OS는 리눅스
  • Terraform, Ansible도 리눅스 기반으로 자동화

✅ 컨테이너 기반 DevOps

  • Docker와 Kubernetes는 리눅스 커널 기능 사용 (namespace, cgroup)
  • CI/CD 자동화: GitHub Actions, GitLab CI에서 쉘 명령으로 작업함

5️⃣ 리눅스 기본 명령어

기능 명령어 예시
현재 위치 확인 pwd /home/ubuntu
폴더 목록 보기 ls -al 숨김 파일까지 보기
이동 cd /etc 디렉토리 이동
폴더 생성 mkdir test  
파일 삭제 rm file.txt  
복사 cp a.txt b.txt  
이동 mv a.txt dir/  
권한 설정 chmod +x run.sh 실행 가능하도록

 리눅스(Linux)는 기본적으로 명령어를 이해하고 알고 있어야 다룰 수 있다.

 위의 표에 간단한 명령어들을 적어두었지만 이 명령어들 말고도 많은 명령어가 있기때문에 아래에서 자세히 살펴볼 것이다. 

 

예시: 

리눅스 파일 시스템 및 기본 명령어

# 현재 작업 디렉토리 확인
pwd 

# 작업 디렉토리 변경
cd /tmp

# 새 디렉토리 생성
mkdir linux_test

# 디렉토리 이동
cd linux_test

# 파일 생성 및 내용 확인
echo "linux test" > test.txt
cat test.txt

# 파일 복사 및 이동
cp test.txt test_copy.txt
mv test_copy.txt test_backup.txt

# 파일 삭제 및 디렉토리 정리 
rm test.txt test_backup.txt
cd .. # ..은 상위 디렉토리로 이동
rmdir linux_test

예시:

쉘 스크립트 작성 및 실행

#!/bin/bash
echo "현재 날짜와 시간: $(date)"

# 사용자 입력 받아서 조건에 따른 메시지 출력
read -p "이름을 입력하세요: " name
if [ -z "$name" ]; then
  echo "이름을 입력하지 않았습니다."
else
  echo "안녕하세요, $name 님!"
fi
# 작성한 쉘 스크립트에 권한을 부여하고 실행
chmod +x myscript.sh
./myscript.sh

결과 예시

쉘 스크립트 관련해서는 아래에 간단한 설명이 첨부되어있다. 


예시:

패키지 관리자 활용 

# 패키지 목록 업데이트 / sudo는 관리자 권한으로 실행시킬 수 있는 명령어
sudo apt update

# 소프트웨어 설치 (curl 설치 예시) / -y: yes를 선택한다는 의미 
sudo apt install curl -y

# 설치된 패키지 확인 
curl --version

# 패키지 삭제 
sudo apt remove curl -y

 

 위의 예시는 ubuntu를 사용한다는 가정하에 작성된 예시이므로 만약 Fedora나 CentOS 등 다른 배포판 사용 시 yum update 또는 dnf install 명령어로 대체해야 한다. 


예시: 

컴파일러

// hello.c 파일을 생성

#include <stdio.h>

int main() {
    printf("Hello, Linux World!\n");
    return 0;
}
# gcc 컴파일 및 실행
gcc hello.c -o hello
./hello

 

 사람이 작성한 코드(예: C언어) 등은 컴퓨터가 이해하지 못하기때문에 컴파일이라는 과정을 통해 기계어로 번역을 해주는 과정을 거쳐야한다. 

여기서 예시로 사용한 gcc(GNU C Compiler)로 리눅스 환경에서 C언어를 컴파일 할 수 있는 도구이다. 


예시:

시스템 모니터링 및 프로세스 관리

# 현재 실행중인 프로세스 목록 확인 
ps aux

# 실시간 시스템 모니터링 
top 

# top과 유사하지만 가독성의 차이
htop

# 메모리 및 스왑 사용량 확인
free -h

결과 예시


예시:

/proc 파일 시스템 탐색

# 커널 버전 확인
cat /proc/version

# cpu 정보 확인
cat /proc/cpuinfo | grep "model name" | uniq

# 메모리 정보 확인 
cat /proc/meminfo | head -n 10

결과 예시

해당 예시에서 말하는 /proc 파일 시스템은 리눅스 커널과 관련된 정보를 제공하는 역할이라고 이해하면 된다. 


예시:

파일 권한 및 사용자/그룹 관리

# 현재 디렉토리 파일 권한 확인
ls -l

# 파일의 읽기, 쓰기, 실행 권한 변경
chmod 755 파일명
chmod u=rwx,go=rx 파일명

# 파일의 소유자 변경 
sudo chown 사용자명 파일명

# 파일의 그룹 변경 
sudo chgrp 그룹명 파일명

# 신규 사용자 추가 
sudo useradd -m 새사용자명
sudo passwd 새사용자명

# 신규 그룹 추가 및 사용자 할당
sudo groupadd 새그룹명
sudo usermod -aG 새그룹명 사용자명

 

권한과 관련된 내용 짧게 다루기 힘들어서 추후 따로 학습 후 다룰 예정이다. 


예시:

Crontab 및 스케줄러 활용

 

Crontab 및 스케줄러에 관한 내용을 다루기 전에 Cron과 Crontab이 무엇인지에 대해 알아보면, 

 

Cron: 리눅스에서 주기적으로 어떤 작업을 자동으로 실행해주는 백그라운드 서비스(데몬)

Crontab: Cron Table의 줄임말로, Cron 작업을 설정하는 설정 파일 or 명령어

 

#!/bin/bash
echo "$(date): Hello, Cron!" >> ~/cron_test.log
# 저장한 스크립트 파일에 실행 권한을 부여
chmod +x cron_test.sh

# Crontab 편집(edit)
crontab -e

# 매분 실행될 수 있도록 코드 수정
* * * * * /home/사용자명/cron_test.sh

# 현재 등록된 Crontab 작업 확인
crontab -l

# 등록된 Crontab 작업의 로그 확인 
tail -f ~/cron_test.log

cron 스크립트 작성 및 권한 설정


예시:

네트워크 관리 및 진단 

# 자신의 IP 주소 확인 
ip addr show

ifconfig # 해당 명령어도 IP 주소를 확인할 수 있음

# 원격 서버 ping test
ping -c 4 google.com

# 현재 열려있는 포트 및 관련 프로세스 확인 
netstat -tulnp

# DNS 조회 
nslookup google.com

dig google.com # DNS 조회가 가능하나 설치가 필요

예시:

백그라운드 작업 및 프로세스 제어

# 300초동안 대기하는 작업을 백그라운드에서 실행 / &: 백그라운드 실행 
sleep 300 & 

# 백그라운드 작업 목록 확인
jobs 

# 백그라운드 작업을 포그라운드로 가져오기 / %1: 1번째 작업을 선택하는 것을 의미 
fg %1

# 백그라운드 작업 중지 및 재개
kill %1

# 특정 프로세스 종료 / |: 앞의 작업을 실행한 후 뒤의 작업이 실행되는 것을 의미 
ps aux | grep sleep
kill PID번호

예시:

로그 파일 탐색 및 분석

대표적으로 로그 파일은 /var/log 에 위치하고 있다. 

# 시스템 메시지 확인
less /var/log/syslog

# 실시간 로그 확인
tail -f /var/log/syslog

# 특정 키워드 검색
grep "error" /var/log/syslog

# 다른 로그 확인
dmesg | tail -n 20

6️⃣ 쉘 스크립트와 자동화

✅ 쉘 스크립트란?

  • 명령어들을 .sh 파일로 저장하고 자동 실행 가능하도록 하는 스크립트 
#!/bin/bash echo "안녕!" >> hello.log

✅ 실행 방법

chmod +x script.sh ./script.sh

7️⃣ 크론(Cron)으로 작업 자동화

✅ Crontab 작성

crontab -e

✅ 시간 설정 형식

# 분 시 일 월 요일 순서
* * * * * 명령어

✅ 예시

* * * * * /home/ubuntu/backup.sh

→ 매분마다 백업 스크립트 실행


 8️⃣ 오픈소스와 라이센스

라이센스 특징 예시
GPL 수정하면 소스 공개 의무 리눅스 커널
MIT 거의 제약 없음 React, jQuery
Apache 2.0 특허 조항 포함 Hadoop, Kafka

오픈소스는 협업과 투명성 중심, 클라우드 시대에는 라이센스 갈등도 존재함 (Redis, MongoDB 등)


9️⃣ 리눅스 배포판(Distro)

계열 대표 배포판 패키지 시스템
Debian Ubuntu, Mint APT (.deb)
RedHat RHEL, CentOS, Fedora YUM/DNF (.rpm)
기타 Arch, Slackware, Gentoo 다양

실무에선 Ubuntu Server 또는 Amazon Linux, CentOS를 많이 사용함


🔟 부팅 과정 & Init 시스템

  1. 전원
  2. BIOS/UEFI → 하드웨어 초기화
  3. 부트로더(GRUB) → 커널 실행
  4. init(systemd) → PID 1 → 서비스들 실행 시작

systemctl 명령어로 서비스 상태 관리 가능


1️⃣1️⃣ 파이프라인

  • | : 출력을 다음 명령어의 입력으로 전달
cat file.txt | grep "error" | wc -l

error가 몇 번 나왔는지 확인 가능함

여러 명령어 조합으로 복잡한 데이터 처리 가능

 


본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.