포스트

01 리눅스일반

리눅스의 이해


✓ 리눅스의 이해

  • 리눅스 개요, 리눅스 배포판의 특징, 오픈소스 라이선스

✓ 리눅스 설치

  • 리눅스 설치, 파티션과 파일 시스템, 부트 매니저

리눅스 개요

✓ 리눅스의 특징

  • 오픈소스 소프트웨어 → 소스코드와 관련 자료가 공개
  • 멀티유저(다중사용자), 멀티태스킹(다중작업) → 가상 터미널을 이용한 다중 작업
  • 다중 스레드 → 동시에 여러 개의 네트워크 작업, 웹서버와 같은 인터넷 기반 서비스 등을 설치해 운영하는 데 좋은 환경 제공
  • 다양한 파일 시스템 : 리눅스 파일시스템(EXT), 윈도우 파일 시스템(NTFS), 네트워크 파일 시스템(NFS)

✓ 리눅스의 장점

  • POSIX(Portable Operating System Interface) 표준 기반, 유닉스와 호환 가능
  • 상대적으로 안정적인 동작, 하드웨어 등 시스템 자원 효율성 → 많은 사용자가 동시에 접속해서 사용하는 서비스 운영에 유리
  • IT 인프라 서비스를 위한 운영체제 - 웹 서비스, 파일 기반 서비스, 기타 서비스를 설치해서 사용할 수 있는 기반 운영체제로 많이 사용

✓ 리눅스의 단점

  • 공개 운영체제로 기술 지원의 한계, 보안상 취약점 노출 가능성, 한글 지원 미흡 → 최근에는 많이 보완됨

리눅스 배포판의 특징

✓ 리눅스 배포판이란?

  • 리눅스 커널, GNU 소프트웨어, 응용 프로그램 등을 함께 묶어서 구성한 리눅스 운영체제 → 목적에 따라 다양한 배포판이 존재

✓ 리눅스 배포판의 종류와 특징

  • 슬랙웨어 리눅스(Slackware Linux) : 1992년 패트릭 볼커딩, 가장 먼저 대중화
  • 데비안(Debian) : 데비안 프로젝트, GNU의 공식 후원, apt 패키지 매니저를 이용한 소프트웨어 관리
  • 우분투(Ubuntu) : 데비안 GNU/리눅스에 기초, 유니티(데스크톱 환경), 사용자 편의성에 초점
  • 레드햇 : 미국 래드햇사, RHEL (기업용)과 페도라로 나뉨
  • RHEL (Red Hat Enterprise Linux) : 래드햇 사용 리눅스, 서브스크립션 형태의 요금, 출시 후 7년간 기술지원
  • 페도라 : 래드햇과 커뮤니티의 지원으로 개발, 6개월 마다 새로운 버전, 지원 기간은 13개월
  • CentoS : RHEL과 완벽하게 호환, 무료 운영체제
  • 수세(SuSe) : 독일에서 출시, 롤링 릴리즈 (Rolling Release)

리눅스의 역사

✓ 출제 예상 문제 대비

  • 켄 톰슨 (UNIX)
  • 데니스 리치 (UNIX C언어로 재개발)
  • 리처드 스톨먼 (GNU 프로젝트, FSF, GPL)
  • 앤드루 타넨바움 (MINIX)
  • 리누스 토발즈 (MINX 커널 수정, GNU 시스템 커널, 리눅스 커널)

오픈소스 라이선스

✓ GNU, FSF, 오픈소스 소프트웨어, 오픈소스 라이선스

  • GNU(GNU’s Not UNIX) : 리처드 스톨만의 자유 소프트웨어 재단 프로젝트, 완전한 유닉스 호환 시스템이 목적
  • FSF(Free Software Foundation) : 리처드 스톨만이 설립, 소프트웨어의 실행/복제/배포/학습/개작/개선의 자유, 유료/무료 배포 모두 포괄
  • 오픈소스 소프트웨어 (OSS) : 자유 소프트웨어 (Free Software) 대신 사용하게 된 용어, 자유와 무료의 용어 혼돈을 고려
  • 오픈소스 라이선스 : OsI(Open Source Initiative)가 주도, OSS 개발자와 이용자 간 사용 방법, 조건, 범위 등 명시한 계약

✓ 오픈소스 라이선스의 종류와 특징

  • GNU GPL(General Public License) : FSF가 만든 Free 소프트웨어 라이선스, GPL 코드 사용시 해당 프로그램이 GPL로 공개된다.
  • GNU LGPL(Lesser/Library GPL) : LGPL 코드/라이브러리의 단순한 이용 시 해당 프로그램은 소스코드 공개 의무 없음
  • BSD(Berkeley Software Distribution): 버클리 캘리포니아 대학, 소스코드 공개 의무 없음, 상업 소프트웨어 사용 가능, OpenCV(이미지 처리 라이브러리) 등
  • 아파치(Apache) 라이선스 : 아파치 소프트웨어 재단, 파생된 프로그램 제작, 저작권 양도, 전송 가능, 상업적 사용 가능
  • MIT(Massachusetts Institute of Technology) 라이선스 : BSD 라이선스 계열, Node.js, X 윈도우 시스템 (X11) 등
  • MPL (Mozilla Public License) : 모질라 재단, 소스코드와 실행파일의 저작권 분리, MPL 소스코드를 수정한 2차 소스코드는 MPL로 공개 및 원저작자에게 수정 부분 통지, 실행파일은 독점 라이선스 가능

리눅스 주요 디렉토리의 특징

디렉터리저장 내용
/파일 시스템이 있는 최상위 디렉터리로 루트 디렉터리라고도 함, 모든 디렉터리의 출발점인 동시에 다른 시스템과의 연결점이 되는 디렉터리
/boot부트 디렉터리로 부팅 시 커널 이미지와 부팅 정보 파일 저장
/proc시스템 정보 디렉터리이며 커널 기능을 제어하는 역할, 현재 실행되는 프로세스와 실제로 사용되는 장치, 하드웨어 정보 저장(임시적인 디렉토리)
/lib공유 라이브러리 디렉터리, 커널 모듈 파일들과 프로그램 실행을 지원해 주는 라이브러리 저장
/bin기본적인 명령어가 저장된 디렉터리, root 사용자와 일반 사용자가 함께 사용할 수 있는 명령어 디렉터리
/dev시스템 디바이스 파일들을 저장하는 디렉터리, 하드디스크 장치 파일, CD-ROM 장치파일 같은 파일 저장
/etc시스템 환경 설정 파일 저장 디렉터리
/root시스템 관리자용 홈 디렉터리. 루트 계정으로 로그인하면 기본적인 나의 디렉토리가 루트 디렉토리가 됨
/sbin관리자용 시스템 표준 명령 및 시스템 관리와 관련된 실행 명령어 저장
/usr사용자 디렉터리로 사용자 데이터나 애플리케이션 저장
/home사용자 계정 디렉터리로 계정들의 홈 디렉터리가 위치, 일반 사용자들이 로그인 시 처음으로 위치하게 되는 디렉터리
/var가변 자료 저장 디렉터리로 로그 파일이나 메타 데이터 저장
/tmp각종 프로그램이나 프로세스 작업을 할 때 임시로 생성되는 파일 저장, 모든 사용자에 대해서 읽기와 쓰기가 허용, 스티키 비트(Sticky bit) 설정으로 파일의 소유자만이 자신의 소유 파일을 지울 수 있음
/mnt파일 시스템을 일시적으로 마운트(연결) 할 때 사용
/lost+found결함이 있는 파일에 대한 정보가 저정되는 디렉터리

리눅스 설치


리눅스 설치

✓ 리눅스 설치의 개요

  • 해당 배포판의 홈페이지에서 설치 파일 다운로드, 배포판에 따라 설치 환경 및 과정이 다름
  • 리눅스 설치 유형: Minimal (필수 패키지만 포함), Desktop (개인용 패키지, 문서 작성 SW등), Server (기본서버, DB서버, Web 서버), Laptop (노트북용 패키지), 가상 호스트 (KVM, XEN), Software Development Workstation (소스코드 컴파일, 개발 도구), 사용자 설정 시스템
  • 디스크 파티션 시 모든 파일 삭제 → 설치 전 모든 파일 백업 필요
  • 부팅 드라이브(OS를 탑재, 로딩해서 실행하게끔 함) 다시 파티션이 되므로 부트로더 재설치, 운영체제 전체 재설치

✓ 리눅스 설치 위한 하드웨어 정보와 호환성 점검

  • 하드웨어 정보 : CPU, Memory, HDD/SDD 및 Interface, 네트워크 장치 및 주소 설정 값, 모니터, 프린터, 키보드, 마우스 등
  • 하드웨어 호환성 : 장치 웹사이트 (장치 드라이버, 설명서, 호환성 목록), PNP 기능 도작하지 않을 경우 대비
  • 네트워크 설정 정보 : 호스트명, 도메인명, IP 주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소, 무선 네트워크 SSID/보안키

✓ 리눅스 설치 단계

① 설치 초기 화면 (기본)

  • Install CentOS7
  • Test this media & install CentOS7(파일 이상여부 체크 후 설치)

② 설치 초기 화면 (Troubleshooting)

  • Rescue a CentOS System
  • Run a Memory test
  • Boot from local drive

③ 언어선택 : 한국어, 영어

img

④ 설치요약 확인 : 현지화(시간, 언어, 키보드), SECURITY, 소프트웨어 (설치소스, 소프트웨어 선택), 시스템 (파티션, 네트워크)

⑤ 날짜와 시간 : 수동 설정 가능, NTP(Network Time Protocol) → 서버에 연결 후 시간 정보를 가져와 my pc와 동기화를 이루는 시간 동기화(일치) 필요 (장애대응, 분석/로깅 등에 필수)

⑥ 설치소스 : 저장소(Repository) 서버 주소 (선택사항), yum이 업데이트 파일을 다운받기 위한 저장소 서버 주소

⑦ 설치대상 : 설치 시 사용할 특수 저장장치 (선택사항), SAN / FCOE / iSCSI, Multipath 등

⑧ 수동으로 파티션 설정 : 기본 저장 장치 (HDD/SDD 파티션 설정 (필수사항), 자동 혹은 수동 파티션 → 루트(/)와 Swap(RAM의 2배)

⑨ 소프트웨어 선택 : 리눅스 사용 목적에 따른 환경 결정, 최소 설치 / 인프라 서 버 / 기본 웹 서버 / 가상화 호스트 / GNOME 데스크톱 등 패키지 그룹 결정

img

⑩ K DUMP 설정(선택)

  • 커널 충돌(Crash) 발생 시 정보 수집 위한 데이터 저장 및 확인, 물리적 메모리 설정

⑪ 네트워크 설정 및 호스트명 지정

  • 고정 주소 / 유동 주소, IP 주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소 등

img

⑫ 사용자 설정

  • ROOT 암호
    • 리눅스의 경우 루트 계정명을 변경할 수 없으나, PW는 변경 가능
  • 사용자 생성 (암호지정)
    • 필요에 따르지만, 권장사항

파티션과 파일 시스템

✓ 파티션(Partition)의 개요 - 개념

  • 파티션 : 물리적 디스크 → 여러 개의 논리적 디스크로 분할
  • 파티션마다 독립적 파일 시스템 생성 가능 → 관리 효율성 (부팅 시간, 오류 점검 시간, 백업/복구), 관리 안전성 (시스템 손상 시 영향 최소화)
  • 상태 정보 확인 : /proc/partitions

✓ 파티션(Partition)의 구분 - 종류

주 파티션 ↓부팅이 가능한 기본 파티션, 하나의 하드디스크에 최대 4개의 주 파티션 분할 가능, 하드디스크를 4개 이상의 파티션으로 사용해야 할 때 하나의 확장 파티션을 설정하여 확장 파티션 안에 여러 개의 논리 파티션을 분할하여 데이터 저장
확장 파티션 ↓주 파티션 내에 생성, 하나의 물리적 디스크에 1개만 생성, 파티션 번호는 1~4번이 할당, 데이터 저장 영역을 위한 것이 아니라 논리 파티션을 위해 생성
논리 파티션 ↓확장 파티션 안에 생성되는 파티션, 논리 파티션은 12개 이상 생성하지 않는 것을 권고하며 5번 이후의 번호가 붙여짐
스왑 파티션하드디스크의 일부를 메모리처럼 사용하는 영역, 주 파티션 또는 논리 파티션에 생성, 프로그램 실행 시 부족한 메모리 용량을 하드디스크로 대신 리눅스 설치 시에 반드시 설치되어야 하는 영역, 스왑 영역의 크기는 메모리의 2배를 설정하도록 권고

✓ 디스크와 장치명

  • 파티션 이름 : 디스크의 장치 파일명 + 숫자
  • 디스크와 장치명의 예: /dev/hda3 → /dev +/hd + a(첫 번째 라인, 버스) +3
  • /dev : 시스템 디바이스 파일들이 저장되는 디렉터리
  • /hd : IDE 혹은 ATA(AT Attached) 방식 /sd : SCSI(Small Computer System Interface) 혹은 USB 방식
  • a: 하나의 케이블에 연결된 디스크의 우선순위
  • 3 : 파티션 번호 1~4 : primary 혹은 extended 파티션 5~ : logical 파티션
  • 마운트(mount)시 지정된 장치명을 사용 : 예) /dev/fd0, /dev/hda

✓ 파일 시스템 (File System)의 개요

  • 파일 시스템 : 디스크의 파티션에 파일을 사용할 수 있도록 구성해 놓은 것 혹은 구성 방식 → 규칙, 구조
    • 실제 파티션을 구성해 놓아도 바로 파일을 저장할 수 있는 것은 아니므로 파일을 관리할 수 있는 형식인 파일 시스템을 생성해야함
  • 파일 시스템의 유형
    • 리눅스 전용 : ext1, ext2, ext3, ext4
    • 저널링 파일 시스템 : JFS, XFS
      • 파일 시스템에 문제가 생겼을 시 복구가 가능하도록 관리하는 시스템
    • 네트워크 파일 시스템 : SMB, NFS
      • 나의 pc에 존재하는 파일 시스템을 다른 pc에 존재하는 파일 시스템을 내 것처럼 사용할 수 있도록 마운트해서 사용할 수 있는 시스템(remote)
    • 클러스터링 파일 시스템 : GFS
    • 장치 파일 시스템: IS9660, UDF
      • CDROM, DVD와 관련
    • 운영체제별 파일 시스템 : FAT32, NFTS(윈도우), HPFS(맥)

LVM (Logical Volume Manager)

✓ LVM 의 개요

  • LVM : 다수의 물리적인 하드디스크(HDD, SSD)를 논리적으로 통합하여 나의 파일 시스템으로 구성하여 사용하는 방식 → 큰 용량의 저장장치, 파티션 구성에 유연성
    • 디스크의 파티션을 나누고 파일 시스템을 구축하기 전에 물리적인 디스크 자체를 논리적으로 재구성하여 활용하는 방법도 있음
    • 마치 하나인 것처럼 만들고 필요한만큼 분할을 해서 하나의 파일 시스템으로 구성해서 사용하는 방식
  • LVM 구성 볼륨의 종류
    • 물리 볼륨 : 개별 물리적인 디스크
    • 볼륨 그룹 : 여러 개의 물리 볼륨을 하나의 그룹으로 구성
    • 논리 볼륨 : 볼륨 그룹의 일부를 논리 그룹으로 나누어 사용

img

RAID (Redundant Array of Independent Disks)

✓ RAID 의 개요

  • RAID : 여러 개의 물리적 디스크를 하나의 논리적 디스크로 구성하여 사용하는 방법 → 데이터 분할 저장, 데이터 중복 저장, 오류 관리 → 고용량, 신뢰성, 성능 향상
  • RAID 구성 방식 (RAID 0~ RAID 6 등)
    • RAID 0 : 스트라이핑, 디스크에 나누어 저장 → 고용량, 빠른 I/O, 고장에 취약
    • RAID 1 : 미러링, 디스크에 중복 저장 → 결함허용, 2배의 저장 공간 필요
    • RAID 0 + 1: 스트라이핑 후 미러링, 빠른 I/O, 느린 복구 시간
    • RAID 1 + 0 : 미러링 후 스트라이핑, 손실된 데이터의 빠른 복원

fdisk - 파티션 관리 명령어

✓ fdisk - 파티션을 관리하는 명령어

  • 주요 기능 : 파티션의 생성, 수정, 삭제
  • 기본 사용법 : fdisk 장치명 → fdisk sdb
    • a : 부팅 파티션 설정
    • l : 지원하는 파티션 목록 표시
    • n : 새로운 파티션 생성
    • t: 파티션 종류 변경
    • w : 파티션 정보 저장
    • p : 파티션 정보 확인
    • q : 종료

img

리눅스 부팅 과정

✓ 리눅스의 부팅 과정의 주요 순서

① ROM-BIOS : POST(Power On Self Test), 부트로더 (LILO, GRUB) 로딩

  • 전원을 인가하면(on) 컴퓨팅 시스템이 동작하기에 문제가 없는지 점검
  • 리로, 그룹을 메모리에 적재하고 로딩하는 역할을 함

② 부트로더 : 리눅스 커널 선택 및 로딩, 커널에 의한 부팅 시작, 스와퍼 프로세스 호출

  • 부트로더가 로딩되면, 부팅에 사용할 리눅스 커널을 선택해 로딩하고 그 이후에 커널에 의한 부팅이 시작됨

③ 스와퍼 프로세스 : 장치 드라이브 초기화, init 프로세스 수행

  • 여러 시스템 장치들이 있을텐데, 잘 동작하는 장치 드라이브 소프트웨어를 초기화하고 구동시킴

④ init 프로세스 : etc/inittab 설정파일 내용에 따라 필요한 프로세스를 실행

⑤ 부팅 레벨 결정

⑥ rc.sysinit 스크립트 : /etc/rc.d/rc.sysinit 스크립트 실행 → 시스템 초기화 작업

⑦ rcx.d 스크립트 : /etc/rc.d/rcX.d 스크립트 실행 → 부팅 레벨에 따른 스크립트 순차 실행

⑧ X 윈도우 : 부팅 레벨이 5일 경우 X 윈도우 실행 (GUl)

부트로더 (bootloader)

✓ 부트로더(bootloader, bootstrap loader, boot manager)의 개요

  • 운영체제를 주기억장치로 적재하는 프로그램 → 필요한 초기 작업, 운영체제 (멀티부팅)를 주 메모리로 복사, 운영체제 실행
    • 리눅스라는 데스크탑, 서버용 운영체제 뿐만 아니라 일반적으로 많이 통용되는 용어
    • 운영체제를 주기억장치 메모리로 적재. 읽어들여서 메모리에 올리고 실행할 수 있게 하는 것
    • 필요에 따라 여러 개의 운영체제 중 하나를 선택해서 메인 메모리로 올리고(주메모리로 복사하고) 실행하게 만드는 역할
  • 임베디드 시스템 부트로더 : PC BIOS와 OS Loader 기능 수행
  • 부트로더의 저장 위치 : MBR(Master Boot Record), 하드디스크의 첫번째 섹터 (부트 섹터), 512 바이트, 주 파티션마다 고유의 부트 섹터가 할당됨.

✓ 부트로더의 종류

  • LILO(Linux Loader) : 리눅스 전용
  • GRUB2 (Grand Unified Bootloader version 2)
    • 편리한 설정 및 사용, 대화형 UI, /boot/grub2/grub.cfg 읽기전용 설정파일 (/etc/grub2.cfg로 링크)
      • 부팅 가운데 설정파일 수정하여 부팅 기능 제공
      • etc 폴더는 주로 설정파일들이 저장되며, 연결되어있는 상태
    • /etc/default/grub과 /etc/grub.d 로 환경 설정 → grub2-mkconfig 로 적용
    • 부팅 시 부트 정보 수정 지원, 멀티부팅, 디스크 안의 파일 시스템과 커널 실행 형식 자동 인식 후 부팅

런레벨 (Run Level)

✓ 런레벨의 개요

  • 서비스(프로그램)의 실행을 단계별로 구분, 0~6의 총 7개의 레벨로 구성 → /etc/inittab에 설정들이 포함되어 있음, init 프로세스가 참고
    • 리눅스가 부팅(동작)하는 가운데 프로그램의 실행을 구분
      • 런레벨 0 : Halt, 시스템 중지, 기본값으로 설정 불가 (init 0과 동일)
      • 런레벨 1 : Single User mode, 네트워크 등 사용하지 않음, 시스템 복구 등 관리 목적, root 계정으로 로그인
      • 런레벨 2 : Multi-User, without NFS(네트워크파일시스템), 네트워크를 사용하지 않음
      • 런레벨 3: Full Multi-User(완전한 멀티유저 모드), CLI, 일반적인 다중 사용자 모드
        • 일반적인 여러 명의 사용자가 콘솔로 접근해서 사용하는 모드
      • 런레벨 4 : Unused(현재 사용x), 사용자가 정의해서 사용
      • 런레벨 5 : X11, GUI 다중 사용자, 최근 리눅스의 기본값
        • 서비스만 동작시킬 상황이라면 굳이 GUI가 불필요하나, 일반 사용자들도 편하게 사용할 수 있는 GUI 방식을 많이 선호하므로 기본값임
      • 런레벨 6 : Reboot, 시스템 재 부팅, 기본값으로 설정 불가 (init 6과 동일)
  • /etc/inittab 형식
    • id(코드/이름) : runlevel : action(프로세스 실행 지시어) : process (실행 프로세스) → runlevel 명령으로 레벨 확인

로그인과 로그아웃

✓ 리눅스의 로그인

  • 로그인 과정

    ① 패스워드 확인 → /etc/passwd의 패스워드 필드

    ② Shell 설정 실행 → PATH경로, Terminal설정, 환경변수, 로그인 시 실행 명령, 로그인 메시지 출력

    ③ 로그인 Shell 실행 → /etc/passwd의 마지막 필드

  • 로그인 메시지 설정 파일
    • /etc/issue (로그인 전 콘솔 접속 시), /etc/issue.net (로그인 전 원격 접속 시)
    • letc/motd (로그인 후 메시지)
  • Shell의 종류와 프롬프트
    • sh (본셸, $), csh (C셸, %), ksh (콘셸, $), bash (배시셸, $)
    • Shell 프로그램 저장 위치: /bin/
      • 쉘은 사용자에게 명령을 입력 받아서 커널에 처리를 요청하고 커널이 처리하면 다시 사용자에게 그 결과를 알려줄 수 있는 역할을 하는 프로그램
      • 여러 개의 종류가 있으며, 각각 프롬프트 명령을 입력받기 위해 표시되는 프롬프트가 다르게 됨
      • 쉘도 프로그램이므로 어딘가에 저장되어 있을 것 → 빈 폴더 밑에 저장되어 있음 → /bin/bash

✓ 리눅스의 로그아웃

  • 로그아웃 방법 : logout, exit, CTRL+D
  • 전체 사용자 로그아웃 타임아웃 : /etc/profile 의 TMOUT 값 설정 (초 단위)
    • 강제 로그아웃
  • 특정 사용자 로그아웃 타임아웃 : ~/.bashrc의 TMOUT 값 설정 (초)
    • 틸다는 사용자 home 폴더를 말함
  • source 명령으로 설정 값 적용
    • 위에서의 설정 파일 수정 후엔 source 명령으로 그 설정 값을 실제 적용시켜야 함
    • 자동 적용되는 것이 아닌 source 뒤에 설정 파일 이름을 파라미터로 주어서 설정 파일에 수정된 내용이 반영되도록 해야함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.