[Linux] Linux Shell과 Linux 파일 시스템

[Linux] Linux Shell과 Linux 파일 시스템

Linux Shell에 대한 개념적 이해와 Linux의 파일 시스템에 대해 정리한 글입니다.


Linux Shell

Shell이란?

출처: https://unstop.com/blog/linux-shell

Shell(쉘)은 운영체제의 커널(kernel)과 사용자 간의 명령어 전달을 담당하는 인터페이스를 의미한다.

  • 사용자 : Shell을 통해 운영체제에 명령을 내리고 결과를 받을 수 있음
  • 커널 : Shell로부터 받은 사용자의 명령을 수행하고, 그 결과를 Shell을 통해 사용자에게 전달

Shell의 주요 역할

  • 사용자의 명령어를 해석하고 실행
  • 프로세스를 관리하고 입출력을 제어
  • 스크립트를 통해 작업 자동화를 지원

Shell의 종류

넓은 의미에서 Shell은 CLI Shell (Command-Line Interface Shell)과 GUI Shell (Graphic User Interface Shell)로 구분할 수 있다.

Command-Line Interface Shell (CLI Shell) Graphic User Interface Shell (GUI Shell)
✅ 텍스트 기반으로 명령어 입력
✅ 키보드를 통한 텍스트 입력
✅ 반복적 작업과 자동화에 효율적
✅ 빠르고 신속하게 명령 실행 가능
✅ 그래픽 기반 환경
✅ 마우스 클릭, 터치, 키보드 입력 등을 통핸 시각적 조작
✅ 직관적으고 사용이 쉬움
✅ 사용자 친화적이지만 상대적으로 느릴 수 있음
일반적으로 Shell은 리눅스 시스템에서 사용하는 CLI 기반의 Shell을 의미한다. 리눅스의 GUI Shell은 보통 데스크탑 환경(Desktop Environment)으로 불린다.

리눅스 CLI Shell의 종류

  • sh (Bourne Shell) : 최초로 개발된 Unix Shell로서 표준화된 기본적인 기능만 제공
  • bash (Bourne Again Shell) : 가장 널리 사용되는 기본 Shell이며, 다양한 기능과 확장성을 제공해 사용자 친화적
  • zsh (Z Shell) : bash를 개선하여 더욱 편리한 자동 완성과 강력한 스크립팅 기능을 제공
  • csh, tcsh (C Shell) : C언어와 비슷한 문법을 가진 Shell로서, 프로그램 개발자들이 선호
현재 대부분의 리눅스 배포판은 기본적으로 bash를 사용한다.

Shell의 주요 기능

명령어 해석과 실행

  • 사용자가 입력한 명령어를 해석하여 실행 가능한 형태로 바꾸고, 커널에 전달
  • 입력된 명령은 내장 명령(built-in) 또는 외부 프로그램으로 구분

환경 변수 관리

  • 환경 변수(Environment Variables)를 설정하거나 변경하여 시스템 환경을 제어

입출력(I/O) 리다이렉션

  • 명령어의 표준 입출력 흐름을 변경할 수 있음

파이프라인(Pipeline) 처리

  • 여러 명령어의 결과를 연결하여 효율적으로 처리할 수 있도록 지원

작업 자동화: Shell Script

  • 반복적이고 복잡한 작업을 자동화하여 관리할 수 있음

Linux Shell과 Linux File System

  • 리눅스는 모든 것이 파일 형태로 관리되는 철학(Everything is a file)을 가지고 있음
  • Shell은 파일 시스템을 탐색(navigation), 조작(manipulation), 관리(management)할 수 있는 명령어를 제공

Linux File System

파일 시스템(File System)이란, 운영체제가 저장 장치에 데이터를 저장, 관리하고 접근할 수 있도록 해주는 체계 및 구조를 의미한다.

리눅스 파일 시스템의 특징

  • 계층적 구조(Hierachical Structure)를 가진 트리 형태의 구조
  • 모든 요소가 파일로 취급 ("Everything is a File")
    • 파일, 디렉토리, 장치, 프로세스 등 모든 요소가 파일로 간주됨
  • 단일 루트(Single Root) 구조로 모든 파일은 최상위 디렉터리인 /에서 시작
  • 권한 및 소유권(Ownership)을 통해 파일 접근 및 관리 제어 가능

리눅스 파일 시스템 구조

리눅스는 최상위 루트(/)에서부터 모든 파일과 디렉터리가 시작되는 계층 구조를 가지고 있다.

  1. /bin (Binary)
    • 리눅스 기본 명령어(binary)들이 포함된 디렉토리
    • 모든 사용자(일반 사용자 및 관리자)가 사용할 수 있는 필수 실행 파일들이 위치함
    • 예시 명령어) ls, cp, mv, rm, cat, echo, pwd
  2. /boot
    • 부팅과 관련된 파일이 저장된 디렉토리
    • 커널 이미지(vmlinuz), 부트로더(ex. GRUB) 관련 파일들이 포함
    • 삭제하면 시스템 부팅이 불가능해질 수 있음
  3. /dev (Device)
    • 리눅스 시스템에서 장치를 파일처럼 다루기 위한 장치 파일이 저장된 디렉토리
    • 모든 하드웨어 장치(하드디스크, USB, 프린터, 키보드 등)가 파일로 표현
    • 예시) /dev/sda (첫 번째 하드디스크) /dev/null (아무 데이터도 저장되지 않는 특수 장치) /dev/tty (터미널 인터페이스)
  4. /etc (Etcetera)
    • 시스템의 주요 설정(Configuration) 파일들이 저장되는 디렉토리
    • 사용자 계정, 네트워크 설정, 데몬(백그라운드 서비스) 설정 파일 등이 포함
    • 예시) /etc/passwd (사용자 계정 정보) /etc/shadow (사용자 비밀번호 정보) /etc/fstab (자동 마운트 설정) /etc/hosts (호스트 네임 설정)
  5. /home
    • 일반 사용자들의 개인 디렉토리가 저장되는 디렉토리
    • 사용자의 데이터(문서, 다운로드, 데스크톱 환경 설정 등)가 여기에 저장됨
    • 예시) /home/user1 (user1 사용자의 홈 디렉토리)
  6. /media
    • USB, CD-ROM 등 이동식 저장 장치가 자동으로 마운트되는 위치
    • 사용자가 USB를 연결하면 /media/usb 같은 디렉토리에 자동으로 연결
  7. /mnt (Mount)
    • 임시로 마운트할 디렉토리
    • 수동으로 디스크를 마운트할 때 사용됨
  8. /root
    • 슈퍼 유저(root)의 홈 디렉토리
    • 일반 사용자의 홈 디렉토리(/home/user)와는 다르게 관리자(root)만 접근 가능
  9. /sbin (System Binary)
    • 시스템 관리자가 사용하는 필수 시스템 명령어들이 저장된 디렉토리
    • 일반 사용자는 실행할 수 없으며, root 권한이 있어야 실행 가능
    • 예시 명령어) fdisk (디스크 파티션 관리) shutdown (시스템 종료) reboot (시스템 재부팅) ifconfig (네트워크 설정)
  10. /sys (System Information)
    • 커널이 관리하는 시스템 정보 및 가상 파일 시스템이 포함
    • /proc과 유사하지만, 보다 동적인 시스템 정보를 제공
    • 시스템 하드웨어 정보(/sys/devices), CPU 정보(/sys/devices/system/cpu) 등이 저장
  11. /tmp (Temporary)
    • 임시 파일이 저장되는 디렉토리
    • 시스템이나 사용자 프로그램이 일시적으로 데이터를 저장하는 공간
    • 부팅 시 자동으로 삭제될 수 있음
  12. /usr (User Binaries and Libraries)
    • 사용자 프로그램 및 라이브러리가 저장되는 디렉토리
    • /bin/sbin에는 필수 명령어들이 있지만, /usr/bin/usr/sbin에는 추가적인 유틸리티 프로그램들이 포함
    • 주요 하위 디렉토리
      • /usr/bin : 사용자 명령어(prep, vim, nano 등)
      • /usr/sbin : 관리자 명령어 (apachectl, postfix 등)
      • /usr/lib : 라이브러리 파일
      • /usr/share : 메뉴얼, 문서, 아이콘 등
  13. /var (Variable)
    • 로그 파일, 캐시, 임시 파일 등이 저장되는 디렉토리
    • /tmp와 유사하지만, /var의 데이터는 시스템이 재부팅되어도 유지됨
    • 주요 하위 디렉토리
      • /var/log : 시스템 및 애플리케이션 로그 (syslog, dmesg, auth.log 등)
      • /var/tmp : 일시적인 파일 저장소 (/tmp보다 장기 저장)
      • /var/spool : 메일 대기열, 프린터 대기열 등

리눅스 파일 시스템 종류

  • 일반 파일 (Regular File)
    • 텍스트 문서, 이미지, 바이너리 등 일반적인 데이터 저장
  • 디렉터리 (Directory)
    • 파일과 다른 디렉터리 목록을 담고 있는 특수한 파일
  • 장치 파일 (Device File)
    • 하드웨어 장치(ex. HDD, SSD, USB)를 나타내는 특수 파일
  • 가상 파일 시스템 (Virtual File System)
    • 실제 파일이 아닌, 시스템과 관련된 정보를 제공하는 파일 시스템
    • /proc, /sys 디렉터리에 위치하며, 시스템 정보를 동적으로 제공

리눅스에서의 파일 경로

리눅스에서 파일 위치를 표현할 때 절대 경로(absolute path)와 상대 경로(relative path)를 사용한다.

절대 경로 (absolute path)

  • 루트 디렉터리(/)로부터 시작하여 목적지까지 전체 경로를 표기
  • ex) /home/user/Documents/report.txt

상대 경로 (relative path)

  • 현재 작업 디렉터리를 기준으로 상대적으로 목적지까지 경로를 표기
  • ex) 현재 디렉터리가 /home/user일 때, 상대경로로 ./Documents/report.txt라고 표현 가능

주요 리눅스 파일 시스템 형식

파일 시스템 특징
ext4 ✅ 리눅스 기본 파일 시스템, 성능과 안정성 우수
XFS ✅ 대용량 파일 관리에 특화된 고성능 파일 시스템
Btrfs ✅ 스냅샷, 볼륨 관리 지원하는 최신 파일 시스템
NTFS, FAT32 ✅ windows 시스템 호환성 확보