리눅스 기본 개념
리눅스 개념 정리
Linux란
대표적인 오픈소스 운영체제(
OS)이고, CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어. OS는 애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결함
리눅스의 구조
리눅스의 특징과 종류
유닉스 운영체제를 기반으로 높은 안정성과 보안성, 높은 신뢰성과 성능이 특징임
시스템의 자원을 효율적으로 관리하고 사용가능
멀티 유저와 멀티 태스킹을 지원함
대부분의 리눅스는 CLI(명령어창)와
GUI(그래픽)를 모두 지원
다양하고 강력한 네트워킹 기능 덕분에 서버 OS로 적합
성능이 낮은 PC에서도 작동
파일의 확장자는 시스템에 아무런 상관이 없음(더 보기 쉽게 하기 위함)
활용 분야
라우터나 AP와 같은 곳에서 사용하는 네트워크 서버장비, 라즈베리파이와 같은 임베딩시스템과 IoT, TV 셋톱박스, 정밀 의료기기, 리눅스 개발 서버 등
권한(sudo)
리눅스 파일 시스템
파일 시스템이란, 저장 장치 내에서 데이터를 읽고 쓰기 위해 미리 정한 약속을 말함
대부분의 파일 시스템은 디렉토리와 파일 형태로 구성
리눅스의 파일 시스템은 root 파일 아래에 계층적으로 모든 파일과 디렉토리가 만들어짐
파일시스템의 종류
FAT(File Allocate Table) : 파일 할당 테이블이라고 말하며 카메라의 메모리카드나 수많은 컴퓨터 시스템에 널리 쓰이는 파일 시스템의 종류
장점으로는 높은 호환성
단점으로는 단순한 자료구조때문에 작은 파일이 여러개 있을 경우 공간 활용을 제대로 하지 못한다는 단점이 있음
NTFS(New Technology File System) : FAT구조를 대체하기 위해 만들어짐
시스템 고장 및 손상시, 디스크 볼륨을 재구성하여 일관성있는 상태로 복구가 가능하여 안정성이 높고, 보안성도 FAT보다 향상된 파일 시스템
EXT(EXTended file system) : 확장 파일 시스템의 준말로 리눅스의 기본 파일 시스템
mount
물리적인 저장장치를 디렉토리에 연결시켜주는것 ex) 하드,USB등의 보조기억장치를 연결하면 자동으로 디렉토리에 연결
USB를 꽃자마자 사용할 수 있게되는 것을 PnP라고 하며, 리눅스의 경우 PnP 기능이 작동하지 않음
때문에 보조기억장치를 설치했을때 mount작업을 수행 필요
리눅스 프로세스
프로세스의 특징
모든 프로그램은 실행될 때 하나 이상의 프로세스를 갖음
병행적으로 실행이 가능
부모(PPID), 자식(fork를 통해 복사된 것) 프로세스가 있게 됨
커널(kernel)에 의해 관리
모든 프로세스에는 소유자(리눅스 계정)가 있음
프로세스마다 식별을 위한 ID(PID)가 부여
대소문자 구별
커널에 의해 수행되는 task
프로세스 스케쥴링 - 여러 프로세스가 동시에 메모리에 존재하며 어떤 프로세스가 CPU 자원을 얼마나 할당받을지를 관리하는것을 프로세스 스케쥴링이라고 함
메모리 관리 - 메모리는 커널에 의해 여러 프로세스에서 공유하며 사용되는 한정적 자원
리눅스도 가상 메모리를 통해 메모리를 관리하고 독립성을 보장
프로세스의 일부분만 메모리에 보관하여 메모리에 좀 더 많은 프로세스들이 상주할 수 있도록 한다는 장점을 제공
파일시스템 제공 - 커널은 디스크에 대한 파일시스템을 제공하며 파일이 생성, 추출, 업데이트, 삭제 될 수 있도록 함
프로세스 생성과 종료 - 새로운 프로그램을 메모리에 로드하고 실행에 필요한 리소스를 제공
실행되는 프로그램은 프로세스에 해당되는데, 프로세스가 실행을 끝내면, 커널이 리소스를 거둬들여 다른 프로세스가 사용할 수 있도록함
디바이스에 대한 접근 - 커널은 인터페이스가 포함된 프로그램을 제공하여 디바이스에 대한 접근을 단순화하고 표준화
네트워킹 - 사용자의 프로세스를 대신해 네트워크 메시지의 송수신을 담당
리눅스 디렉토리 구조
Unix 디렉토리처럼 Tree 모양의 계층 구조를 가지고 있으며 이를 FHS(Filesystem Hierarchy System)라고 함
최상위 디렉토리 - /
모든 디렉토리들의 시작점으로 일반적인 데이터를 저장하지 않음
기본 명령어가 있는 바이너리 디렉토리 - bin
binaryse의 약어로 리눅스의 기본 명령어(binary)들이 들어있는 디렉토리
시스템을 운영하기 위한 기본적인 명령어들이 모여있음 (ls, cp, mv, rm 등과 같은 명령어들의 실행파일이 바로 이곳이 존재)
부트 디렉토리 - boot
시스템 설정 파일 디렉토리 - etc
시스템 환경 설정 파일이 있는 디렉토리
시스템 및 설치한 프로그램의 환경설정 또는 스크립트 파일이 저장
네트워크 관련 설정 파일, 사용자 정보 및 암호정보, 파일 시스템 정보, 보안 파일 등등
디바이스 디렉토리 - dev
사용자 계정 디렉토리 - home
공유 라이브러리 디렉토리 - lib
시스템 정보 디렉토리 - proc
현재 동작중인 프로세스들의 정보가 저장
현재 메모리에 존재하는 모든 작업들이 파일 형태로 존재
프로그램 정보 그리고 하드웨어적인 정보들이 저장
디스크에 실제 존재하는 것이 아니고 메모리상에 존재하므로 “가상 파일 시스템” 이라고 불림.
실제 물리적인 디스크에 존재하는 것이 아니라 메모리에 저장
시스템 관리에 관련된 바이너리 파일이 있는 디렉토리 - sbin
bin 디렉토리와 유사하지만 오직 루트유저만 실행할 수 있는 프로그램들이 있는 디렉토리
부팅, 복원, 복구 및 수리를 위한 중요한 명령어 디렉토리
가변 자료 저장 디렉토리 - var
로그파일, 데이터베이스 캐싱파일, 웹서버 이미지 파일등이 위치
기타 모든 다용도로 사용될 수 있는 파일들이 저장
파일의 크기가 추후 계속 확장될 수 있을경우 더욱 적합
사용자 디렉토리 - usr
기본 실행파일과 라이브러리 파일, 헤더 파일등의 파일이 저장되어있는 디렉토리
대부분의 응용프로그램과 파일이 저장되어 있음
GCC, Apache, MySQL, PHP등의 응용프로그램이 이곳에 설치
시스템이 아닌 일반 사용자들이 주로 사용하는 디렉터리
시스템 디렉토리 - sys
Multi-User
Multi-Tasking
리눅스 배포판
init 프로세스
시스템 부팅 시, 커널에 의해서 init이라는 특별한 프로세스를 생성
init프로세스는 /sbin/init에 존재하는 프로그램으로 부터 얻고, 모든 프로세스들의 부모 프로세스에 해당
시스템의 모든 프로세스는 init에 의해 생성되거나, init의 자손 중에 하나에 의해 생성
init은 슈퍼유저 권한을 가지고 실행
killed가 불가능하고 시스템이 종료될때만 끝남
init의 주요 일은 실행되는 시스템에 의해 요구되는 여러 프로세스들을 생성하고 모니터링하는것
데몬 프로세스
데몬 프로세스의 특징
오랜 기간 실행됨. 보통 시스템 부팅 시 실행되어 시스템 종료 시까지 실행되게 됨
백그라운드에서 실행됨. input을 읽거나 output을 write할 컨트롤 터미널을 가지지 않음
예로, 시스템 로그를 기록하는 syslogd나 웹 서버인 httpd 등이 해당
셸이란
인터페이스를 통해 사용자의 명령어를 커널에 전달하여 시스템 자원들을 관리를 도와주는 시스템(사용자 ←– 셸 —> 리눅스 커널)
리눅스 Bash는 CLI방식의 장치이므로, 리눅스 명령어를 익힌다는 것은 결국 bash가 제공하는 명령어를 배우는 것
리눅스 커널을 조작하기 위한 셸의 종류
셸이름 | 실행 명령 | 설명 |
Bourne Shell | sh | 많은 셸 스크립트의 기반이 되는 셸 |
C Shell | csh | C언어 구문과 유사, Bourne Shell 을 확장하여 히스토리, 작업제어, 엘리어스 등 기능 추가 개발자들에게 유용한 기능들을 제공 |
TC Schell | tcsh | C Shell 에 명령 행 완성 과 명령 행 편집 기능을 추가 |
Korn Shell | ksh | Bourne Shell 가 호환되며 C Shell 의 많은 기능을 포함, Unix 계열에서 많이 사용 |
Bourne Again Shell (bash) | bash | 리눅스에서 가장많이 사용되는 셸로 Bourne 셀을 토대로 C셸과 Korn Shell 의 기능들을 통합시켜 개발 |
셸 확인 및 변경
$ chsh #명령어 입력(Changing shell)
Password: #사용자계정ID 비밀번호 입력
New shell [/bin/bash]: /bin/csh #새로 사용할 셸
Shell changed. #변경완료.
$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
셸 스크립트란
셸 스크립트의 장단점
장점
셸 스크립트를 기록하는 것은 다른 프로그래밍 언어의 같은 코드로 쓰인 것보다 훨씬 더 빠른 경우가 많음
다른 해석 언어에 비해, 셸 스크립트는 컴파일 단계가 없기 때문에 스크립트는 디버깅을 하는 동안 빠르게 실행 가능
단점
실행되는 각 명령에 대한 잠재적으로 새로운 하부 프로세스의 수많은 필요에 따라 속도가 느려질 수 있음
복잡한 셸 스크립트는 셸, 유틸리티, 다른 필수 요소 간의 약간의 차이가 많은 경우 실패할 가능성이 있음
다양한 셸이 문제를 개선할 목적으로 고품질의 코드와 확장을 기록하기 힘들 수 있음
셸 스크립트 기본 문법
스크립트 텍스트 파일은 다음과 같이 시작함(#!/bin/bash) - bash의 쉘 명령어들을 사용하겠다는 의미
셸 활용법 - 모니터링, 데이터 백업, 복구, 알림, 보안, 인증, 특정 시간에 프로그램 돌리기 등