쉘(Shell)의 정의

쉘은 사용자와 운영체제 커널 사이에서 명령을 전달하는 인터페이스입니다.

리눅스에서 우리가 명령어를 입력하는 화면이 "쉘"입니다.

- 사용자 > 쉘에 명령어 입력 > 쉘이 커널에 전달 > 결과 출력

 

쉘의 종류

리눅스에는 다양한 종류의 쉘이 존재합니다.

쉘 종류 설명
sh (Bourne Shell) 가장 기본이 되는 쉘
bash (Bourne Again Shell) 대부분의 리눅스에서 기본 쉘, 가장 많이 사용
zsh 고급 자동 완성, 테마 등 편의 기능이 풍부
fish 친절한 문법과 컬러 하이라이팅
csh / tcsh C언어 스타일의 문법

 

내 쉘을 확인하는 방법

echo $SHELL

 

기본 쉘 변경

chsh -s /bin/bash # bash로 변경

 

쉘의 기본 기능

1. 명령어 실행

ls -l
cd /home
touch file.txt

 

2. 파이프 & 리디렉션

cat file.txt | grep "hello" # | : 앞 결과를 뒤에 전달
ls > list.txt # 출력 리디렉션
echo "test" >> list.txt # 덧붙이기

 

3. 환경 변수

echo $HOME
export MY_VAR="hello"
echo $MY_VAR

 

4. 명령어 기록 & 자동완성

history

 

 

유용한 Bash 기능 예시

기능 설명 예시
alias 명령어 단축 alias ll='ls-alF'
jobs, fg, bg 백그라운드 작업 관리 sleep 60 &
$(command) 명령어 결과를 변수처럼 사용 echo "오늘은 $(date)입니다."
.bashrc 쉘 설정 저장  자동 alias 등록 등

 

쉘을 배워야 하는 이유

- 서버에서는 GUI가 거의 없기 때문에 쉘은 필수 도구

- 리눅스 시스템 제어, 자동화, 모니터링 등에 광범위하게 활용

- DevOps/SysOps 분야에서는 쉘 스크립팅 능력이 기초이자 핵심

# 리눅스 커널은 무엇인가?

리눅스 커널은 리눅스 운영체제의 '핵심'입니다.

커널은 컴퓨터 하드웨어(CPU, 메모리, 디스크 등)와 소프트웨어(애플리케이션) 사이를 연결하는 다리 역할을 합니다.

커널이 없다면 우리가 입력하는 명령어나 프로그램은 하드웨어를 제대로 사용할 수 없게 됩니다.

 

# 리눅스 커널의 주요 역할

프로세스 관리 여러 프로그램을 동시에 실행할 때, CPU를 어떻게 분배할지 결정합니다.
메모리 관리 프로그램들이 필요한 메모리를 할당받고, 회수하는 작업을 담당합니다.
디바이스 제어 하드 디스크, 네트워크 카드, 그래픽 카드 등 하드웨어를 제어합니다.
파일 시스템 관리 파일 읽기/쓰기/권한 제어 및 디렉토리 구조 유지
네트워크 관리 인터넷, 서버 통신을 할 수 있도록 지원합니다.

 

# 커널은 그럼 눈에 직접 보일까?

일반 사용자는 커널을 직접 다루지 않습니다. 

우리가 사용하는 터미널(shell)이나 GUI(그래픽 유저 인터페이스)가 커널에 요청을 보내고, 커널은 이 요청을 받아서 하드웨어에 명령을 전달합니다. 자주 사용하는 'ls', 'cd', 'vim' 같은 명령어를 사용할 때도, 결국 이 모든 것이 커널을 통해 동작합니다.

 

# 리눅스 커널의 버전

리눅스 커널은 계속해서 발전해왔습니다.

버전을 확인하는 명령어는

uname -r

6.8 > 메이저 버전

0 > 마이너 버전

1024-aws > 디스트리뷰션에 맞게 커스터마이징된 정보라고 할 수 있습니다.

 

# 커널 업데이트해야 하나요?

커널 업데이트는 보안이나 성능에 중요한 영향을 줄 수 있습니다. 

특히 서버 환경에서는 보안 패치가 적용된 커널을 유지하는게 매우 중요합니다. 

 

Ubuntu 계열에서 커널 업데이트

sudo apt update
sudo apt install --install-recommends linux-generic

 

# 리눅스 커널의 구조 (구성 요소)

구성요소 설명
Process Scheduler 어떤 프로세스를 언제 실행할지 결정
Memory Manager 물리적/가상 메모리를 효율적으로 관리
File System Interface 다양한 파일 시스템 지원 (ext4,xfs 등)
Device Drivers 하드웨어 장치들과 통신하는 코드 모듈
Networking Stack TCP/IP 같은 네트워크 프로토콜 처리
System Call Interface (SCI) 사용자 공간 -> 커널 공간 진입 지점

 

# 커널은 언제 실행될까요?

- 시스템이 부팅될 때, BIOS/UEFI가 부트로더(grub)를 실행합니다.

- 부트로더는 커널 이미지(vmlinuz)를 메모리에 적재합니다.

- 커널이 로드되면, 디바이스 초기화 > init 프로세스 실행 > 사용자 로그인 가능.

 

# 커널은 운영체제인가요?

- 커널은 운영체제(OS)의 핵심 구성요소이지만, OS 전체는 아닙니다.

- OS는 커널 + 유틸리티 프로그램 + 셸 + 라이브러리 등을 모두 포함합니다.

- ex) 리눅스 OS = 리눅스 커널 + GNU 명령어들 + bash + 시스템 서비스 등

 

# 총 정리!!

리눅스 커널은 하드웨어를 직접 제어하면서, 사용자 프로그램이 하드웨어와 안전하게 상호작용할 수 있도록 중개합니다.

 

# 리눅스란 무엇인가요?

리눅스는 1991년, 핀란드의 리누스 토르발스가 개발한 오픈 소스 운영체제 커널입니다.

현재 서버, 클라우드, 모바일, 임베디드 시스템까지 광범위하게 사용되고 있습니다.

운영체제 커널 및 해당 커널을 탑재한 다양한 배포판을 아우릅니다.

 

# 리눅스 배포판

리눅스 배포판은 커널을 중심으로 여러 시스템 소프트웨어 및 응용 소프트웨어를 같이 묶어서 구성한 풀 커스텀 운영체제입니다.

주요 용도에 따라 데스크톱 용도, 서버 용도, 임베디드 용도 다용도 배포판 등이 존재합니다.

종류로는 대표적으로 데비안 계열과 페도라 계열이 있습니다.

출처: 나무위키

흔히 많이 사용하는 Amazon Linux, Red Hat Enterprise Linux, CentOS가 페도라 계열이고 ,패키지 형식은 .rpm이며 패키지 관리자로 yum/dnf를 사용하는 것이 특징입니다. 

 데비안 계열로는 대표적으로 Ubuntu, Kali Linux 등이 있습니다. 패키지 형식은 .deb이며 패키지 관리자는 apt를 사용합니다. 가장 많은 리눅스 배포판을 가지고 있는게 특징입니다.

 

# 구성요소

구성요소  설명 예시
커널 (Kernel) 하드웨어와 소프트웨어를 연결해주는 핵심, 프로세스 관리, 메모리 관리, 파일 시스템, 네트워크 관리 등을 담당 리눅스 커널 6.x, 5.x 버전 등
셸 (Shell) 사용자가 리눅스에 명령을 내리는 인터페이스, 명령어를 해석하고 커널에 전달 bash, zsh, fish 등
파일 시스템 (File System) 데이터를 저장하고, 구조화하는 방식, 파일/디렉토리로 구성 ext4, xfs, btrfs 등
유틸리티 및 어플리케이션 기본 명령어나 프로그램들, 파일 조작, 시스템 관리 네트워킹 등을 지원 ls, cp, mv, top, ss, systemctl 등

위 내용은 추후에 자세하게 다시 올릴 예정입니다.

+ Recent posts