[Linux]- 리눅스 개요
1. 운영체제
1-1. 운영체제란?
💡 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램들의 모임이다.
운영체제는 컴퓨터 하드웨어와 사용자 간의 인터페이스로서 동작하는 시스템 소프트웨어의 일종으로, 다른 응용프로그램에 유용한 작업을 할 수 있도록 환경을 제공해 준다.
1-1-1. 프로그램
: 하드 디스크와 같은 보조기억장치에서 아무런 동작을 하지 않는 상태
1-1-2. 프로세스
: RAM과 같은 메인 메모리(주기억장치)에서 실해중인 프로그램
1-2. 운영체제의 구조
인터페이스 : GUI, CLI
시스템호출: 시스템 관련 서비스를 모아 함수 형태로 제공하며 사용자나 응용프로그램으로부터 컴퓨터의 자원을 보호하기 위해 자원에 직접 접근을 차단
커널: 하드웨어와 소프트웨어 컴포넌트 사이의 중요한 인터페이스 역할을 한다. 운영체제에 종속되어 리눅스, 윈도우, macOS 등 각각의 고유한 커널을 가지고 있어 운영체제의 특성과 성능을 결정 짓게 된다.
💡 커널의 역할
1. 리소스 관리: cpu,메모리,디스크 공간 등을 관리한다.
2. 프로세스 관리: 다양한 프로세스들 사이에 cpu 시간을 분배하고 프로세스의 생성과 종료를 관리
3. 메모리 관리: 프로그램들이 필요로 하는 메모리를 할당하거나 해제하여 메모리 누수나 오버플로우 같은 문제를 방지한다.
4. 장치 드라이버와의 인터페이스: 키보드,마우스,프린터,디스플레이와 같은 하드웨어 장치를 효과적으로 제어할 수 있다.
2. 리눅스
2-1. 리눅스란?
💡 오픈 소스 운영 체제로 컴퓨터 하드웨어와 소프트웨어 리소스의 관리 및 사용자와 프로그램 간의 인터페이스를 제공한다. 안정성, 보안성, 유연성 측면에서 우수하여 웹서버, 애플리케이션 서버, 데이터베이스 서버와 같은 다양한 용도로 사용된다.
리눅스를 다양한 서버로 사용하는 이유
1. 무료 오픈 소스 : 리눅스 배포판은 대부분 무료이며 오픈 소스이기 때문에 사용자가 필요에 따라 소스 코드를 수정하고 배포할 수 있다.
2. 안정성 및 신뢰성 : 매우 안정적인 운영체제로 오랜 시간 동안 재부팅 없이 실행 될 수 있다. 이는 서버 운영에 있어 중요한 요소이다.
3. 보안 : 기본적으로 보안이 강화된 설계를 가지고 있고 정기적인 업데이트와 커뮤니티의 지원을 통해 높은 보안성이 지속적으로 유지된다.
4. 성능 : 자원을 효율적으로 사용하여 시스템의 성능을 최적화 한다. 이 역시 서버 운영에서 중요하다.
5. 다양한 배포판 : 다양한 배포판이 있어 서버 용도에 맞게 선택할 수 있다. (Ubuntu, CentOS, Debian 등)
3. 쉘
3-1. 쉘이란?
💡 사용자와 운영체제 간의 중간 계층을 형성하는 프로그램 또는 환경을 말한다. 사용자가 키보드와 같은 입력 장치를 통해 명령어를 입력하면 쉘이 해당 명령어를 해석하고 커널에 전달한다. (커널의 인터페이스에 해당한다.) (커널을 감싸는 껍데기 역할을 하여 조개 껍질에 해당하는 shell이라는 이름이 붙여졌다.)
쉘은 명령어 실행, 파일 및 디렉토리 관리, 환경 변수 설정, 프로세스 관리 등 다양한 작업을 수행할 수 있다.
3-2. 쉘의 프롬프트
💡 ‘@’를 기준으로 앞(ohgirafffers)은 사용자 이름, 뒤(ohgiraffers-VirtualBox)는 호스트 이름에 해당한다.
일반 사용자의 프롬프트는 $으로 끝나고 슈퍼 사용자(root)는 #으로 끝나게 되며 리눅스 공식 문서 뿐 아니라 모든 책에서도 일반사용자는 $, 슈퍼사용자는 #로 ‘프롬프트’를 표시한다.
$나 # 이후의 명령어 입력 부분은 ‘커맨드 라인’이라고 한다.
3-2-1. 'su 계정명' 과 'su - 계정명'의 차이
## 슈퍼 사용자로 변환하기($ -> #)
## /root 경로의 디렉토리
$ sudo su
## 현재 사용자의 홈 디렉토리
$ sudo -s
## 셧다운 실행
# shutdown -h now
## 재부팅(reboot) 실행
# shutdown -r now
## 일반 사용자로 변환하기
## 현재 사용자를 로그아웃 하지 않은 상태에서 다른 사용자의 계정으로 전환
# su <계정명>
## 완전히 다른 사용자 계정으로 전환하고 전환한 사용자의 환경설정을 불러온다.(logout 가능)
# su - <계정명>
3-3. 쉘의 종류
3-3-1. 로그인 쉘
로그인과 동시에 사용자의 입력을 대기하는 쉘을 로그인 쉘이라고 부른다.
- 로그인 쉘 확인하기(로그인시 부여받은 기본 SHELL정보)
$echo $SHELL
- 변경 가능한 일반 쉘들 확인하기
$ cat /etc/shells
4. apt(Advanced Package Tool)
4-1-1. apt란?
💡 Debian 시스템에 포함된 핵심 도구들의 집합체로 우분투에서는 패키지를 관리하는 툴로 사용된다. 주로 apt-get과 apt-cache를 사용해 왔다. 요즘은 두 명령어를 통합하여 apt로 사용한다. apt는 apt-get/apt-cache를 완전히 통합하는 툴은 아니다. 사용자 편의성을 위해 주요 기능만 통합한 툴이다.
4-1-2. apt install
💡 패키지 설치 하는 명령어이다. 패키지 명을 여러 개 지정해서 한번에 설치도 가능하다. 패키지명 사이사이는 공백으로 띄어주어야 한다.
어떤 리눅스 환경이든 처음에는 apt update와 apt upgrade를 하자
$ sudo apt update $ sudo apt upgrade
💡 curl은 명령어를 입력하고 ‘ENTER’ 쳐주는 기능
$ sudo apt install curl
4-1-3. apt remove vs apt purge
💡 패키지를 제거하는 명령이다. remove 명령은 저장한 패키지만을 제거한다.
$ sudo apt remove <package_name>
💡 패키지와 설정파일까지 제거하는 명령어이다. purge 명령은 remove와 달리 패키지와 설정 파일 모두 제거하는 명령어다.
$ sudo apt purge <package_name>
4-1-4. apt autoremove
💡 사용하지 않는 패키지 제거하는 명령어이다. 해당 명령을 사용하면 현재 사용되지 않는 패키지를 제거한다.
$ sudo apt autoremove
4-1-5. apt search
💡 패키지 검색할 수 있는 명령어이다. apt 툴을 이용하여 설치할 수 있는 패키지 검색 명령이다.
$ apt search <package_name>
4-1-6. apt list
💡 패키지 목록 조회하는 명령어이다. apt list는 레포지토리에 등록된 패키지 목록을 조회하는 명령어다.
$ apt list
4-1-7. apt update
💡 현재 사용 가능한 패키지 리스트의 정보를 업데이트 해주는 명령어이다. 우분투의 /etc/apt/sources.list 파일이나 /etc/apt/sources.list.d 디렉토리에 별도로 구성된 파일에 구성되어 활성화된 소스들의 최신 패키지 정보를 다운로드 하는데 사용한다.(실제로 패키지를 다운로드하거나 설치는 안하고 정보만 업데이트 한다.)
4-1-7. apt upgrade
💡 모든 (업그레이드 가능한) 패키지를 새 버전으로 업그레이드한다.
5. 파일 시스템
5-1. 파일 시스템이란?
💡 파일 시스템은 파일에 이름을 붙이고 저장, 탐색을 위해 파일을 어디에 위치 시킬 것인지 나타내는 체계이다. 즉, 컴퓨터에서 자료들을 쉽게 발견하고 관리할 수 있게 하는 구조적인 시스템을 말한다. 사용자 영역이 아닌 커널 영역에서 동작한다. 파일을 빠르게 읽기, 쓰기, 삭제 등 기본적인 기능을 원활히 수행하기 위한 목적이다. 이는 리눅스 뿐만 아니라 거의 모든 OS(Operating System)가 지원하고 있다.
5-2. 리눅스 파일 구조 및 대표적인 디렉토리
5-2-1. 리눅스 기본 디렉토리
1. '/' ( 최상위 디렉토리 )
:리눅스 파일 체제의 최상의 디렉토리
2. '/bin'
: 시스템을 부팅하거나 복구 모드로 운영할 때 필요한 필수적인 바이너리 실행 파일(ls,cp,mv,cat)들이 들어있다.
3. '/dev'
: device’의 약자로, 시스템의 장치 파일( 하드 드라이브, USB 드라이브, 터미널, 키보드 등)이 위치하는 곳이다.
4. '/etc'
: 시스템 전반에 걸쳐 사용되는 설정 파일들이 저장되는 위치이다. 부팅 스크립트, 네트워크 설정 파일, 사용자 계정 정보 등이 포함된다.
5. '/home'
: 사용자의 개인 데이터와 설정 파일이 저장되는 디렉토리이다. 시스템에 있는 각 사용자 계정은 여기에 자신의 홈 디렉토리를 가지며, 사용자의 문서, 사진, 설정 파일 등이 이곳에 저장된다.
6.'/sbin'
: ‘system binary’의 약자로, 시스템 관리와 관련된 실행 파일들이 들어있는 디렉토리이다. 주로 시스템 관리자(root)에 의해 사용되며, 시스템 부팅, 복구, 관리 등에 필요한 명령어들이 포함된다.
7. '/tmp'
: 임시 파일을 저장하는 곳으로, 시스템이나 사용자가 일시적으로 사용하는 파일들을 위한 공간이다. 이 디렉토리의 내용은 보통 재부팅 시에 지워질 수 있다.
8. '/usr'
: ‘Unix System Resources’의 약자로, 사용자들에 의해 사용되는 응용 프로그램과 파일들이 위치하는 디렉토리이다. /usr/bin, /usr/lib, /usr/local등과 같은 하위 디렉토리들을 포함하고 있다.
9. '/var'
:‘variable’의 약자로, 자주 변하는 데이터를 저장하는 곳이다. 이곳에는 로그 파일, 메일 박스, 임시 파일 등이 저장되며 시스템 운영 중에 지속적으로 변할 수 있다.
5-2-2. window 폴더와 간단비교
6. 파일 관련 간단 명령어
6-1. 절대경로와 상대 경로
6-1-1. 절대 경로
💡 루트 디렉토리부터 해당 파일에 이르는 전체 경로를 표시하는 것을 절대 경로라고 한다.
6-1-2. 상대 경로
💡 현재 디렉토리의 위치를 기준으로 표기하는 경로를 상대 경로라고 한다.
pwd: root ~ 현재 디렉토리 전체 경로 출력
6-2. ls
## 시간순으로 나열하기
ls -lt
## 큰 사이즈 우선
ls -lSh
## 작은 사이즈 우선
ls -lSrh
## 인간이 보기 쉬운 용량
ls -lh
7. 파일 조작
7-1. mkdir
중간 경로가 없을 시에는 -p 옵션을 준다.
$ mkdir -p 디렉토리1/디렉토리2/...
7-2. rm
## -r 옵션을 주어 디렉토리를 삭제할 수 있다.
$ rm -r <삭제할 디렉토리1> <삭제할 디렉토리2> ...
## 추가 질문 없이 내용물이 삭제되므로 확인 문구를 띄우고 싶으면 -i 옵션을 준다.
$ rm -r -i <삭제할 디렉토리1> <삭제할 디렉토리2> ...
## 비어있는 디렉토리는 rmdir로도 지울 수 있다.
$ rmdir <삭제할 디렉토리1> <삭제할 디렉토리2> ...
7-3. cp
디렉토리 역시 cp로 복사가 가능하다. (단, 재귀 옵션인 -r을 주어야 한다.)
cp -r dir1 dir2
8. 텍스트처리
8.1 텍스트 처리 명령어
8-1-1. wc 명령어
💡 wc 명령어를 통해 파일의 행 수, 단어 수, 바이트 수를 출력할 수 있다.
## 행수, 단어수, 바이트 수, 파일 이름
$ wc fruit.txt
## 행만 표시
$ wc -l fruit.txt
## 단어만 표시
$ wc -w fruit.txt
## 바이트 수만 표시
$ wc -c fruit.txt
💡 파이프라인(Pipeline)
: ‘|’ 기호를 사용하여 구성하며 왼쪽 명령어의 출력을 오른쪽 명령어의 입력으로 전달한다. 다양한 명령어를 조합하여 복잡한 작업을 수행하기 위한 데이터 처리 및 변환에 사용된다.
8-1-2. sort 명령어
💡 -n 옵션을 추가하면 내용이 문자열이 아닌 숫자로 판단한다.
💡 -r 옵션을 추가하면 역순으로 정렬된다.
8-1-3. head와 tail명령어
💡 head 명령어를 사용하면 파일의 처음 부분을, tail 명령어를 사용하면 파일의 마지막 부분을 출력할 수 있다.
## 마지막 4행만 보여준다.
$ tail -n 4 /etc/passwd
$ cat /etc/passwd | tail -n 4
## 처음 4행만 보여준다.
$ head -n 4 /etc/passwd
$ cat /etc/passwd | head -n 4
8-1-4. uniq 명령어
💡같은 내용이 연속되어 있는 경우에만 중복을 제거한다.
-c 옵션을 주어 중복 데이터 개수를 셀 수도 있다.
## 연속된 중복 데이터 제거
$ uniq fruit.txt
## 연속된 중복 데이터 제거 후 정렬(연속되지 않은 중복은 제거 되지 않음을 확인)
$ uniq fruit.txt | sort
8-1-5. diff 명령어
💡 diff 명령어를 통해 두 파일의 차이점을 출력할 수 있다.
# fruit.txt와 fruit2.txt의 차이를 비교한다.
$ diff fruit.txt fruit2.txt
결과는 fruit.txt의 12번째 줄부터 16번째 행이 fruit2.txt의 12번째 줄부터 14번째 줄로 변경되었음을 나타낸다.
9. 쉘 스크립트 개요
9-1. 쉘 스크립트란?
💡 리눅스를 사용하다 보면 일련의 명령어를 반복적으로 실행해야 될 때가 있다. 이 때마다 길고 복잡한 커맨드 라인을 손으로 직접 입력하는 것은 번거롭기 때문에 미리 파일에 입력해 놓고 해당 파일을 쉘이 실행하도록 할 수 있다. 쉘에서 실행될 커맨드 라인을 입력해 놓은 파일을 쉘 스크립트라고 한다. 단순히 명령어 나열 뿐 아니라 복잡한 조건문이나 반복문과 같은 제어 구조도 활용할 수 있다.
9-2. 쉘 스크립트의 장점
- 쉘 스크립트를 작성해 두면 쉽게 재사용할 수 있다.
- 다른 사람에게 쉘 스크립트를 공유할 수 있다.
- 명령어 입력 실수를 줄일 수 있다.
💡 기본 shell 목록에서 명령어를 통해 원하는 계정의 원하는 쉘로 변경이 가능하다.
## 기본 shell 변경
$ chsh -s /bin/dash
## 특정 user의 shell을 변경할 수도 있다.
$ chsh -s /bin/dash username
## 아래 명령어로 계정별 shell들을 확인할 수 있다.
$ vim /etc/passwd
9-3.셔뱅
💡 아래와 같은 쉘 스크립트를 작성하여 실행해 보자.
## vim 편집기를 활용한 sh파일 생성 및 수정
$ vim test.sh
## 실행 권한 부여
$ chmod +x test.sh
## 셔뱅을 활용한 test.sh 쉘 스크립트 실행
$ ./test.sh
💡 첫 줄의 #!로 시작하는 행을 셔뱅이라고 하며 해시 기호와 느낌표(#!) 로 이루어진 문자 시퀀스로, 스크립트의 맨 처음에 온다.
#!/bin/bash는 /bin/bash를 사용한다고 명시적으로 선언한 것으로 /bin/bash를 입력하지 않아도 되고, 또한 사용중인 쉘이 bash가 아니어도 자동으로 /bin/bash가 스크립트를 실행하게 한다.
10. 아카이브와 압축
10-1. 아카이브(Archive)와 압축(Compress) 이란?
💡 윈도우에서는 압축(zip)을 하면 파일이나 폴더들을 한번에 묶으면서 동시에 압축한다. 반면 리눅스는 파일이나 폴더를 하나의 파일로 묶는 것(아카이빙(Archiving))과 압축을 진행해 용량을 줄이는 과정이 구분되어 있다.(gz)
1. Archiving: 하나의 파일에 파일과 폴더를 넣고 묶는 것으로 용량은 줄어들지 않음 (파일과 폴더를 묶어서 하나로 만들어 진 것을 아카이브라고 한다.)
2.Compression: 파일이나 아카이빙 된 아카이브를 알고리즘을 활용해 압축해서 용량을 줄이는 것
💡 TAR(Tape ARchives) 명령어란?
’테이프 아카이버(Tape Archiver)’를 줄인 말로 저장 장치로 백업하기 위해 하나의 파일로 합치는 프로그램을 의미한다. 용량은 줄어들지 않지만 여러 폴더와 파일을 하나로 관리하기 위해 존재한다.
하나로 묶이기 전의 링크나 폴더 구조를 그대로 가져갈 수 있다. 리눅스 용 프로그램이나 데이터, 소스 및 라이브러리 등을 배포하는 용도로 많이 사용한다.
# 현재 디렉토리의 모든 파일과 디렉토리를 tar로 묶기
$ tar cvf 파일명.tar *
# 대상 디렉토리를 포함한 모든 파일과 디렉토리를 tar로 묶기
$ tar cvf 파일명.tar [PATH]
# 파일을 지정하여 tar 아카이브로 묶기
$ tar cvf 파일명.tar [FILE_1] [FILE_2]
# tar 아카이브의 내용 확인하기
$ tar tvf 파일명.tar
# tar 아카이브를 현재 디렉토리에 풀기
$ tar xvf 파일명.tar
# tar 아카이브를 지정된 디렉토리에 풀기
$ tar xvf 파일명.tar -C [PATH]
# tar 아카이브 묶거나 풀 때 파일 별 진행 여부 확인하기
$ tar cvfw 파일명.tar *
# 현재 디렉토리를 tar로 묶고 gzip으로 압축하기
$ tar zcvf 파일명.tar.gz *
# gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기
$ tar zxvf 파일명.tar.gz
# 현재 디렉토리를 tar로 묶고 bzip2로 압축하기
$ tar jcvf 파일명.tar.bz2 *
# bzip2로 압축된 tar 아카이브를 현재 디렉토리에 풀기
$ tar jxvf 파일명.tar.bz2
10-2. 파일 압축
압축률: Z >lz>gzip>bzip2>lzma>xzip
압축 및 해제시간: xzip > lzma > lz >bzip2 > Z > gzip
10-3. 파일 압축 및 해제
💡 zip/unzip 명령어란?
LZMA2 알고리즘으로 데이터 손실 없이(무손실) 압축 시킬 수 있는 프로그램이다. 상대적으로 매우 높은 압축률을 가지고 있으며 사이트에서 압축 포맷 파일 배포 용도로 많이 사용되고 있다.
옵션 설명 -d 압축을 해제하기 위한 옵션
$ sudo apt-get install zip # zip 설치
$ zip [압축할 FILE명].zip [아카이브 또는 FILE명]
$ unzip [압축할 FILE명]
# mylog.log를 mylog.zip으로 압축하기(단일 파일 압축)
$ zip mylog.zip mylog.log
# mylog1.log, mylog2.log, mylog3.log를 mylog.zip으로 압축하기(다중 파일 압축)
$ zip mylog.zip mylog1.log mylog2.log mylog3.log
# 현 위치 디렉토리와 하위 디렉토리를 모두 test.zip으로 압축
$ zip -r test.zip ./*
# test.zip 압축 해제
$ unzip test.zip
11. 우분투 계정과 권한 명령어
11-1. 리눅스 접근 권한
11-1-1. Superuser란?
시스템 운영 관리자 계정이다.
일반적으로 리눅스에선 root 유저를 의미한다.
일반 사용자 계정의 권한과 슈퍼유저의 권한을 구분하여 사용해야 한다.
우분투의 경우 기본적으로 root 사용자를 비활성화한다.
11-1-2. whoami
💡 현재 로그인 되어 있는 사용자 계정을 확인하는 명령어이다.
11-1-3. id
💡 현재 사용자가 가지고 있는 권한(그룹 포함)을 확인하는 명령어이다. UID는 사용자의 아이디를 나타내며 0 ~ 32767 사이의 숫자로 나타내고 0은 슈퍼(root) 유저를 나타낸다.
11-1-4. 접근 권한 간단 정리
💡 접근 권한은 크게 유저 본인, GROUP, OTHER에 대해 설정할 수 있다.맨 앞 d(디렉토리)를 제외하고 차례대로 3단어씩 소유자의 권한, 소유주가 속한 그룹의 권한, 그 외 모든 이들의 권한이다.
r : read 권한(파일 리스트 취득 가능)w : write 권한(디렉토리 하위 파일 및 디렉토리에 작성 및 삭제 가능)x : executable 권한(디렉토리로 이동 가능)
- 1필드
- - : 파일
- d : 디렉토리
- l : 다른 파일을 가리키는 링크
- p : pipe. 두 개의 프로그램을 연결하는 파이프 파일
- b : block device. 블럭 단위로 하드웨어와 반응하는 파일
- c : character device. 스트림 단위로 하드웨어와 반응하는 파일
- 2~4필드
- 소유주(User) 권한
- 5~7필드
- 그룹(Group) 권한
- 8~10필드
- 나머지(Others) 권한
11-1-5.권한 대여하기
💡 사용자의 권한을 대여하는 명령어이다. (즉, 사용자로 로그인한 효과를 나타낸다.)
- su changuk : changuk 의 ID로 로그인(해당 유저의 PW 입력해야함)
- su - changuk : changuk 의 ID로 로그인, ohgiraffers 계정의 home 디렉토리도 사용
- sudo su - : 우분투에서도 root로 로그인(위험하니 자제할 것)
- 권한 대여 종료는 exit로 할 수 있다.
11-2. 계정 관련 명령
11-2-1. 사용자 추가하기 및 확인하기
$ sudo adduser changuk2
1. 사용자확인 /home 디렉토리에 사용자 폴더가 생겼는지로 확인 가능하다.
2. /etc/passwd에서 저장된 사용자 정보를 확인한다.
11-2-2. 사용자 삭제하기
$ sudo userdel changuk2
11-2-3. 그룹 추가하기
$ sudo groupadd [OPTIONS] [GROUP NUMBER] {groupname}
11-2-4. 그룹 삭제하기
$ sudo groupdel {groupname}
11-2-5. 유용한 Group 관련명령어
11-3-1. 파일 권한 (chmod)
$ chmod [OPTIONS] [MODE] {file/directory}
- 예시
- ug+r : 소유자와 그룹에 읽기 권한 추가
- +rw : 모든 사용자에게 읽기/쓰기 권한 추가
- u=rwx : 소유자에게 읽기, 쓰기, 실행 권한 부여
- u-x : 소유주에게 실행 권한 제거
- g+x,o+x : 그룹과 기타 사용자에게 실행권한 추가 (띄어쓰기는 넣지 X)
11-4-1. 파일 소유권 (chown)
$ sudo chown [OPTIONS] {바꾸고 싶은 username}:{바꾸고 싶은 groupname} {소유권을 변경하고자 하는 파일/디렉토리}
12. grep 명령어와 정규표현식
12-1. grep 명령어
💡 리눅스를 사용하다 보면 특정 문자나 패턴을 검색하는 경우가 발생한다. 그럴 때 grep 명령어를 활용할 수 있다. (grep은 global, regular expression, print에서 각각의 머릿글자를 따 온 것이다
- 대소문자를 구분하지 않고 검색
$ grep -ni abc test.txt
12-2. 리눅스 정규표현식
💡 문자열 검색에 정규표현식을 사용하게 되면 조건에 일치하는 문자열 집합을 표현하고 완전히 ‘동일’하지 않은 값도 검색해서 표현할 수 있다. 확장 정규 표현식은 ‘-E’ 옵션을 추가해 주어야 한다.
12-2-1. 메타문자
메타 문자: 문자 패턴을 표기하기 위한 규칙 문법에 해당하는 문자
1. 임의의 문자에 대한 메타 문자
2. 위치 지정 메타 문자
3. 기타 메타 문자
12-2-2. 정규 표현식 예시
1. ‘a’로 시작하고 ‘c’로 끝나는 라인 및 라인 번호
$ grep -n '^a.*c$' test.txt
2. 'a’ 뒤에 ‘b’가 없거나 여러 개 있고 그 뒤에 ‘c’가 오는 라인 및 라인 번호
$ grep -n 'ab*c' test.txt
3. ‘a’ 뒤에 ‘b’가 하나 이상 있고 그 뒤에 ‘c’가 오는 라인 및 라인 번호
$ grep -nE 'ab+c' test.txt
4. ‘a’ 로 시작하고 이후로는 ‘b’가 나오지 않는 라인 및 라인 번호
$ grep -nE '^a[^b]*$' test.txt
5. a’ 로 시작하고 이후로는 ‘b’가 나오지 않는 라인 및 라인 번호
$ grep -nE '^a[^b]*$' test.txt
6. ‘b’로 시작하고 다음에 숫자가 존재하는 라인 및 라인 번호
$ grep -nE '^b[0-9]+' test.txt
7. ‘a’ 뒤에 ‘b’가 정확히 두 번 나오고 ‘c’로 끝나는 라인 및 라인 번호
$ grep -nE 'ab{2}c$' test.txt => abbc
13. 레플리카 서버
13-1. Replication이란?
💡 MySQL 또는 MariaDB는 replication을 제공하며, 이는 DB를 복제하는 것을 나타낸다.
2대 이상의 DBMS를 master와 slave(또는 다중 slave) 구조로 나누어 비동기 복제 방식으로 데이터를 저장하는 것이다. master는 server-id를 1번으로 가지고 slave는 server-id를 2번 이상부터 가지게 되며 서로 고유하게 부여하여 작동 시켜야 된다.
13-2. Replication 이점
1. DB 서버의 부하를 분산시킬 수 있다.
2. 데이터 백업이 실시간으로 이루어진다.
master 서버 : 데이터의 변경에 대한 처리를 담당하며 변경 발생시 binary log에 기록하고 slave 서버로 전달한다.
slave 서버 : master 서버로부터 전달 받은 binary log를 통해 DB에 반영하고 조회의 부담을 담당한다.
binary log : DB에서 발생하는 모든 내역이 기록되는 파일로 default는 비활성이지만 활성화 시켜 활용할 수 있다.