1강
리눅스 일반 1. 리눅스의 이해 - 리눅스 개요, 리눅스 배포판의 특징, 오픈소스 라이선스
- 리눅스 설치
- 리눅스 설치, 파티션과 파일 시스템, 부트 매니저
ㅇ리눅스 개요 1. 특징 - 오픈 소스 - 멀티유저, 멀티태스킹, 가상 터미널을 이용한 다중 작업 - 다중 스레드 - 동시에 여러 개의 네트워크 작업, 인터넷 서비스 - 다양한 파일 시스템 : 리눅스/윈도우/네트워크 파일 시스템
- 장점
- POSIX(Protable Operating System Interface) 표준 기반, 유닉스와 호환 가능
-
안정적 동작, 시스템 자원 효율성 -> 다중 사용자 서비스 운영에 유리
-
단점
- 공개 운영체제로 기술 지원의 한계, 보안상 취약점 노출 가능성, 한글 지원 미흡 -> 최근에는 많이 보완됨 ㄴ사실상 시험용.. 실제로는 커뮤니티나 공동체의 지식 나눔을 통해 많이 보완된 부분들
ㅇ 리눅스 배포판 1. 리눅스 배포판이란? - 리눅스 커널, 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) - 리누스 토발즈 (MINIX 커널 수정, GNU 시스템 커널, 리눅스 커널)
ㅇ 오픈소스 라이선스 1. 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로 공개 및 원저작자에게 수정 부분 통지, 실행파일은 독점 라이선스 가능
ㅇ 디렉토리 1. 특징 - / : 파일 시스템이 있는 최상위 디렉터리로 루트 디렉터리라고도 함 : 모든 디렉터리의 출발점인 동시에 다른 시스템과의 연결점이 되는 디렉터리 - /boot : 부트 디렉터리로 부팅 시 커널 이미지와 부팅 정보 파일 저장 - /proc : 시스템 정보 디렉터리이며 커널 기능을 제어하는 역할 : 현재 실행되는 프로세스와 실제로 사용되는 장치, 하드웨어 정보 저장 - /lib : 공유 라이브러리 디렉터리 : 커널 모듈 파일들과 프로그램 실행을 지원해 주는 라이브러리 저장 - /bin : 기본적인 명령어가 저장된 디렉터리 : root 사용자와 일반 사용자가 함께 사용할 수 있는 명령어 디렉터리 - /dev : 시스템 디바이스 파일들을 저장하는 디렉터리 : 하드디스크 장치 파일, CD-ROM 장치파일 같은 파일 저장 - /etc : 시스템 환경 설정 파일 저장 디렉터리 - /root : 시스템 관리자용 홈 디렉터리 - /sbin : 관리자용 시스템 표준 명령 및 시스템 관리와 관련된 실행 명령어 저장 - /usr : 사용자 디렉터리로 사용자 데이터나 애플리케이션 저장 - /home : 사용자 계정 디렉터리로 계정들의 홈 디렉터리가 위치 : 일반 사용자들이 로그인 시 처음으로 위치하게 되는 디렉터리 - /var : 가변 자료 저장 디렉터리로 로그 파일이나 메일 데이터 저장 - /tmp : 각종 프로그램이나 프로세스 작업을 할 때 임시로 생성되는 파일 저장 : 모든 사용자에 대해서 읽기와 쓰기가 허용 : 스티키 비트(Sticky bit) 설정으로 파일의 소유자만이 자신의 소유 파일을 지울 수 있음 - /mnt : 파일 시스템을 일시적으로 마운트 할 때 사용 - /lost+found : 결함이 있는 파일에 대한 정보가 저장되는 디렉터리
ㅇ 리눅스 설치 1. 리눅스 설치의 개요 - 해당 배포판의 홈페이지에서 설치 파일 다운로드, 배포판에 따라 설치 환경 및 과정이 다름 - 리눅스 설치 유형 : Minimal(필수 패키지만), Desktop(개인용 패키지, 문서 작성 SW등), Server(기본서버, DB서버, Web 서버), Laptop(노트북용 패키지), 가상 호스트(KVM, XEN), Software Development Workstation(소스코드 컴파일, 개발도구), 사용자 설정 시스템 - 디스크 파티션 시 모든 파일 삭제 -> 설치 전 모든 파일 백업 필요 - 부팅 드라이브 다시 파티션 -> 부트로더 재설치, 운영체제 전체 재설치
- 설치를 위한 하드웨어 정보와 호환성 점검
- 하드웨어 정보 : CPU, Memory, HDD/SDD 및 Interface, 네트워크 장치 및 주소 설정 값, 모니터, 프린터, 키보드, 마우스 등
- 하드웨어 호환성 : 장치 웹사이트(장치 드라이버, 설명서, 호환성 목록), PNP 기능 동작하지 않을 경우 대비
-
네트워크 설정 정보 : 호스트명, 도메인명, IP 주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소, 무선 네트워크 SSID/보안키
-
설치 단계 1) 설치 초기 화면 (기본)
- Install CentOS7
- Test this media & install CentOS7 (파일 이상여부 체크 후 설치) 2) 설치 초기 화면 (Troubleshooting) => 메모리 테스트, HDD/SDD 테스트 수행
- Rescue a CentOS System
- Run a Memory test
- Boot from local drive 3) 언어선택 : 한국어, 영어 4) 설치요약 확인 : 현지화(시간,언어,키보드), SECURITY, 소프트웨어(설치소스, 소프트웨어 선택), 시스템(파티션, 네트워크) 5) 날짜와 시간 : 수동 설정, NTP(Network Time Protocol)=>서버에 연결해서 시간정보를 가져온 다음에 동기화 -> 시간 동기화(일치) 필요 (장애대응, 분석/로깅 등에 필수) 6) 설치소스 : 저장소(Repository) 서버 주소(선택사항), yum이 업데이트 파일을 다운받기 위한 저장소 서버 주소 7) 설치대상 : 설치 시 사용할 특수 저장장치(선택사항), SAN / FCoE/ ISCSI, Multipath 등 8) 수동으로 파티션 설정 : 기본 저장 장치 (HDD/SDD 파티션 설정(필수사항), 자동 혹은 수동 파티션 -> 루트(/)와 swap(RAM의 2배)) swap은 보통 램의 두배로 권장 9) 소프트웨어 선택 : 리눅스 사용 목적에 따른 환경 결정, 최소 설치 / 인프라 서버 / 기본 웹 서버 / 가상화 호스트 / GNOME 데스크톱 등 패키지 그룹 결정 10) K DUMP 설정
- 커널 충돌(Crash) 발생 시 정보 수집 위한 데이터 저장 및 확인, 물리적 메모리 설정 11) 네트워크 설정 및 호스트명 지정
- 고정 주소 / 유동 주소, IP 주소, 서브넷 마스크, 게이트웨이 주소, DNS 서버 주소 등 12) 사용자 설정
- ROOT 암호 => ROOT 이름 변경 불가, PW만 변경 가능
- 사용자 생성(암호지정)
ㅇ 파티션과 파일 시스템 1. 파티션(Partition)의 개요 - 파티션 : 물리적 디스크 -> 여러 개의 논리적 디스크로 분할 - 독립적 파일 시스템 -> 관리 효율성 (부팅 시간, 오류 점검 시간, 백업/복구시간 줄음), 관리 안정성 (시스템 손상 시 영향 최소화) - 상태 정보 확인 : /proc/partitions
- 파티션(Partition)의 구분
- 주 파티션 : 부팅이 가능한 기본 파티션 : 하나의 하드디스크에 최대 4개의 주 파티션 분할 가능 : 하드디스크를 4개 이상의 파티션으로 사용해야 할 때 하나의 확장 파티션을 설정하여 확장 파티션 안에 여러 개의 논리 파티션을 분할하여 데이터 저장
- 확장 파티션 : 주 파티션 내에 생성, 하나의 물리적 디스크에 1개만 생성 : 파티션 번호는 1~4번까지 할당 : 데이터 저장 영역을 위한 것이 아니라 논리 파티션을 생성
- 논리 파티션 : 확장 파티션 안에 생성되는 파티션 : 논리 파티션은 12개 이상 생성하지 않는 것을 권고 하며 5번 이후의 번호가 붙여짐
-
스왑 파티션 : 하드디스크의 일부를 메모리처럼 사용하는 영역 : 주 파티션 또는 논리 파티션에 생성 : 프로그램 실행 시 부족한 메모리 용량을 하드디스크로 대신 리눅스 설치 시에 반드시 설치되어야 하는 영역 : 스왑 영역의 크기는 메모리의 2배를 설정하도록 권고
-
디스크와 장치명
- 파티션 이름 : 디스크의 장치 파일명 + 숫자
- 디스크와 장치명의 예 : /dev/hda3 -> /dev + /hd + a + 3
- /dev : 시스템 디바이스 파일들이 저장되는 디렉터리
- /hd : IDE 혹은 ATA(AR 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
- 네트워크 파일 시스템(내 거가 아니라 remote 다른 PC에 있는 거를 내 것처럼 쓸 수 있음음) : SMB, NFS
- 클러스터링 파일 시스템 : GFS
- 장치 파일 시스템(CD-ROM 관련) : IS9660, UDF
- 운영체제별 파일 시스템 : 윈도우에서 많이 사용(FAT32, NFTS), 맥OS(HPFS)
ㅇ LVM(Logical Volume Manager) 1. LVM의 개요 - LVM : 다수의 물리적인 하드디스크를 논리적으로 통합하여 하나의 파일 시스템으로 구성하여 사용하는 방식 -> 큰 용량의 저장장치, 파티션 구성에 유연성 ㄴ그러니까 재구성해서 필요한 만큼 필요에 따라서 논리적 볼륨으로 구성할 수 있다는 것 - LVM 구성 볼륨의 종류 - 물리 볼륨 Physical Volume : 개별 물리적인 디스크 - 볼륨 그룹 Volume Group : 여러 개의 물리 볼륨을 하나의 그룹으로 구성 - 논리 볼륨 Logical Volume : 볼륨 그룹의 일부를 논리 그룹으로 나누어 사용
ㅇ RAID(Redundant Array of Independent Disks) 1. RAID의 개요 - RAID : 여러 개의 물리적 디스크를 하나의 논리적 디스크로 구성하여 사용하는 방법 -> 데이터 분할 저장, 데이터 중복 저장, 오류 관리 -> 고용량, 신뢰성, 성능 향상 - RAID 구성 방식 (RAID 0 ~ RAID 6 등) - RAID 0 : 스트라이핑, 디스크에 나누어 저장 -> 고용량, 빠른 I/O, 고장에 취약 - RAID 1 : 미러링, 디스크에 중복 저장 -> 결함 허용, 2배의 저장 공간 필요 - RAID 0 + 1 : 스트라이핑 후 미러링, 빠른 I/O, 느린 복구 시간 - RAID 1 + 0 : 미러링 후 스트라이핑, 손실된 데이터의 빠른 복원
ㅇ fdisk 파티션 관리 명령어 1. fdisk - 파티션을 관리하는 명령어 - 주요 기능 : 파티션의 생성, 수정, 삭제 - 기본 사용법 : fdisk 장치명 -> fdisk sdb - a : 부팅 파이션 설정 - l : 지원하는 파티션 목록 표시 - n : 새로운 파티션 생성 - t : 파티션 종류 변경 - w : 파티션 정보 저장 - p : 파티션 정보 확인 - q : 종료
ㅇ 리눅스 부팅 과정 1. 주요 순서 1. ROM-BIOS : POST(Power On Self Test), 부트로더(LILO, GRUB) 로딩 2. 부트로더 : 리눅스 커널 선택 및 로딩, 커널에 의한 부팅 시작, 스와퍼 프로세스 호출 3. 스와퍼 프로세스 : 장치 드라이브 초기화, init 프로세스 수행 4. init 프로세스 : /etc/inittab의 내용에 따라 필요한 프로세스를 실행 5. 부팅 레벨 결정 6. rc.sysinit스크립트 : /etc/rc.d/rc.sysinit 스크립트 실행 -> 시스템 초기화 작업 7. rcX.d 스크립트 : /etc/rc.d/rcX.d 스크립트 실행 -> 부팅 레벨에 따른 스크립트 순차 실행 8. X윈도우 : 부팅 레벨이 5일 경우 X 윈도우 실행 (GUI)
ㅇ 부트로더 1. 부트로더(boorloader, 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/grub.cfg로 링크)
- /etc/default/grub와 /etc/grub.d로 환경 설정 -> grub2-mkconfig로 적용
- 부팅 시 부트 정보 수정 지원, 멀티부팅, 파일 시스템과 커널 실행 형식 인식 후 부팅
ㅇ 런레벨(Run Level) 1. 런레벨의 개요 - 서비스(프로그램)의 실행을 단계별로 구분, 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, 사용자가 정의해서 사용 - 런레벨 5 : X11, GUI 다중 사용자, 최근 리눅스의 기본값 - 런레벨 6 : Reboot, 시스템 재부팅, 기본값으로 설정 불가 (init 6과 동일) - /etc/inittab 형식 - id(코드/이름) : runlevel:action(프로세스 실행 지시어):process(실행 프로세스) -> runlevel 명령으로 레벨 확인
ㅇ 로그인과 로그아웃 1. 리눅스의 로그인 - 로그인 과정 1. 패스워드 확인 -> /etc/passwd의 패스워드 필드 2. Shell 설정 실행 -> PATH경로, Terminal설정, 환경변수, 로그인 시 실행 명령, 로그인 메시지 출력 3. 로그인 Shell 실행 -> /etc/passwd의 마지막 필드 - 로그인 메시지 설정 파일 - /etc/issue (로그인 전 콘솔 접속 시), etc/issue.net (로그인 전 원격 접속 시) - /etc/motd (로그인 후 메시지) - Shell의 종류와 프롬프르 - sh(본셸, $), csh(C셸, %), ksh(콘셸, $), bash(배시셸, $) - Shell 프로그램 저장 위치 : /bin/
- 리눅스의 로그아웃
- 로그아웃 방법 : logout, exit, CTRL+D
- 전체 사용자 로그아웃 타임아웃 : /etc/profile의 TMOUT값 설정(초)
- 특정 사용자 로그아웃 타임아웃 : ~/.bashrc의 TMOUT값 설정(초) -> source 명령으로 설정 값 적용