인프라 기초 1 복습
- 인프라란? 데이터를 처리하기 위한 장치. 기반 시설
인프라가 데이터를 처리하기 위해서는 cpu, memory, disk, network가 필요하다.
- IaaS: 인프라를 제공해주는 클라우드 서비스. Infrastructure as a Service
IaaS 예시) EC2, VPC 등
- 서버: 컴퓨터. 서비스를 제공해주는 역할
* 흔히 사람들이 말하는 컴퓨터는 데스크탑이다.
- 데스크탑: 업무를 처리하기 위한 역할을 하는 장치
* 우리는 서버를 구축하고 설계하는 방법을 알아야 한다.
* 실습을 통해 특정 OS를 사용하고 서비스를 이용해보자.
- OS: 커널을 통해 프로세스를 실행하고 데이터를 처리하기 위해 여러가지 작업을 실행
컴퓨터는 OS가 꼭 필요하다. 왜?
인프라 자원들이 올바르게 작동하기 위해서는 커널(Kernel)이 꼭 필요하다. OS는 이를 포함하고 있다.
커널이란? 프로세스를 실행시켰을 때 CPU, Memory, Devices에 데이터를 전달할 수 있는 기능을 가지고 있음
리눅스
- 서버 측에서 많이 사용되는 OS의 한 종류
- 리눅스에서 사용되는 프로그램은 c/c++로 구성
* 6.1 버전 이후 'Rust'를 사용한 라이브러리가 추가되었다.
- 데스크탑용 리눅스는 Ubuntu를 사용한다.
리눅스의 장점
- 오픈 소스로 누구나 자유롭게 무료로 사용 가능 (라이센스를 구입해서 사용하는 것도 존재하긴 하다.)
- Apache http server, MySQL Database 등에 사용
- 적은 리소스를 가진 시스템에서도 사용 가능 -> 대부분 CLI 환경이기 때문에 라이브러리 적게 사용
- 높은 이식성. UNIX와 호환 가능
- multi-user, multi-tasking
리눅스의 단점
- Windows, macOS에 비해 상용 애플리케이션이 많지 않다.
- 소프트웨어에 따라 인코딩 문제가 있을 수 있다. 한글 깨짐
리눅스의 파일 구성
- 리눅스는 파일로 구성되어 있다. 모든 것을 파일로 다루기 때문에 파일 조작 방법을 익히는 것이 중요하다.
디렉터리란?
- 여러 개의 파일을 담아 정리하는 것. = 폴더
* 파일 시스템(File System[FS])이란?
- 파일을 구성하고 관리하는 데 사용하는 구조. 리눅스는 트리구조를 사용하고 있다.
윈도우는 NTFS( New Technology File System), 리눅스는 주로 ext4, xfs를 사용한다.
- 그 외 FAT32, exFAT, ext3
* 윈도우와 리눅스의 파일 시스템을 호환시키고 내용을 공유할 수 있는 samba 프로토콜도 존재한다.
* 리눅스에서는 디렉터리 구조가 모두 똑같다. ex. /bin, /etc, /tmp 등
이를 FHS(Filesystem Hierachy Standard)라고 한다.
* 최상위 디렉터리는 /, 루트 디렉터리라고 한다.
리눅스 디렉터리 종류
- /bin: 명령어 실행 파일 배치. 시스템과 관련된 중요도가 높은 명령어 포함
- /dev: 디바이스 파일 배치. 디스크, 키보드 등 하드웨어를 다루기 위한 특수 파일 ex) sda1, sda2
* 리눅스 디스크 이름은 sda이다. 윈도우로 따지면 c 드라이브
* sda가 1, 2로 나뉜 이유: 부팅 관련 정보를 따로 저장하여 파티셔닝함.
- /etc: 애플리케이션 설정 파일 배치. 리눅스 운영 및 관리 위한 파일들이 배치되어 있다.
- /home: 사용자별로 할당되는 홈 디렉터리 배치. ex) /home/user01
- /sbin: 실행 파일 및 관리자용 명령어 배치 ex) shotdown
- /tmp: 임시 파일 저장. 정기적으로 /tmp 디렉터리를 삭제하는 배포판도 있으니 중요한 내용이 담긴 파일을 이곳에 보관 X
- /usr: 설치 애플리케이션 실행 파일, 문서, 라이브러리 등 저장. /usr 안에도 /bin, /sin, /etc 등 존재 -> 루트 디렉터리와 구조 비슷
- /var: 변화하는(variable) 데이터 저장. 실행 중 생성된 데이터, 로그, 메일 등 저장. 많은 파일이 기록되므로 용량 부족해질 수도 있으니 주의해야함.
Shell
shell이란 무엇인가?
- 커널과 사용자를 연결해주는 인터페이스.
즉, 사용자가 입력한 명령에 대해 읽고 해석한 뒤 프로그램을 실행시킨다.
* 쉘과 커널이 분리되어 있는 이유
- 리눅스는 '한 프로그램에 너무 많은 기능을 넣지 않는다'라는 철학을 가지고 있기 때문에 셸과 커널이 분리되어 있다.
- 쉘은 메모리 관리, 커널은 프로세스 관리 수행
프롬프트의 구조
- [사용자 이름@호스트 이름] # or $
예시) [root@localhost ~] #, [user01@localhost ~] $
프롬프트 $ 기호와 # 기호의 차이점
- $: 일반 사용자
- #: 루트 사용자
쉘 변수
- 쉘은 변수를 선언할 수 있다.
- 변수 설정 방법: 변수명=값
- 변수에 할당된 값을 확인하고 싶을 때는 echo 명령어를 활용 => echo =$변수명
ex. echo $var1
퍼미션
- 누구에게 어떤 권한을 허가할지에 대한 정보
알파벳 의미
r | 읽기(read) |
w | 쓰기(write) |
x | 실행(execute) |
소유자/소유 그룹/기타사용자
디렉터리의 경우 맨 앞쪽에 d가 붙는다.
- sybolic mode: chmod [ugoa] [+-=][rwx]〈파일 이름〉
+, - 기호를 사용하여 권한을 추가할지 삭제할지 정한다. ex. u+w: 사용자에게 쓰기 권한 부여
- octal mode (numeric mode): 8진수로 모드 설정 ex. 644, 755
프로세스(process)
- 커널에서 명령어 입력 시 발생하는 내부 동작 과정
- 리눅스 커널 입장에서 바라본 프로세스 처리 단위
> 커널이 디스크에 있는 해당 파일을 읽어 메모리에 올린 뒤, CPU가 프로그램을 실행하는 과정이 진행됨
여기서 메모리에 올린 프로그램을 프로세스라고 한다.
- PID: 프로세스가 가지고 있는 고유 번호
- ps 명령어를 사용하면 현재 디렉터리에 존재하는 프로세스 목록을 확인할 수 있다.
- 모든 사용자의 프로세스를 상세하게 확인하고 싶을 경우 aux, xf 옵션을 사용한다.
- 모든 프로그램을 확인하고 싶을 경우? ax 옵션
잡(job)
- 셸에서 바라본 프로세스 처리 단위
- Ctrl + z를 눌러 일시 중지된 프로세스를 jobs 명령어로 확인 가능하다.
잡 동작 방식 2가지
- foreground: 잡 종료 시점 까지 다른 명령어 수행 X. 대기 상태로 전환됨
- background: 잡을 종료하지 않아도 동시에 다른 명령어 실행 가능. = 멀티 태스킹(multi-tasking)
* 멀티 태스킹이란?
- 동시에 다른 명령어 실행하는 것
- 잡이 여러 개가 있을 경우 fg %[잡 번호]로 돌아갈 수 있다.
- 그냥 fg 명령어 사용 시 가장 최근에 중지한 잡이 실행됨
- 잡 종료하는 방법은 kill 명령어 사용. kill % [잡 번호]
* kill 명령어는 프로세스를 종료할 때도 사용한다. kill [PID]
소프트웨어 패키지
프로세스가 동작을 할 때 프로세스를 실행하기 위해서는 라이브러리 필요
명령어 입력하기 위해서
리눅스같은 경우는 바이너리만 있으면 파일을 실행할 수 있음
복합적인 명령어를 실행하려고 함.
예를 들어 리눅스에서 vscode를 실행하려고 하면 gui 라이브러리가 더 필요할 수 있다.
이러한 프로세스를 실행하기 위해서는? 바이너리만 있으면 되는 게 아니다.
[binary + library]가 필요함!!!
라이브러릴들과 바이너리를 함께 모아 => [package]
패키지는 binary+library이다.
실제 프로세스는 여러 패키지를 설치, 이 패키지에 있는 바이너리를 실행했을 때 동작할 것이다.
패키지 객체를 생성해야 함.
RedHet 계열에서는 RPM(redhat package maanger)를 사용
.rpm 확장자의 패키지 파일을 사용.
이러한 패키지 파일을 관리하는 방법은?
> dnf/yum 패키지 관리 도구를 사용하여 .rpm 파일을 관리
- yum은 RHEL 8 버전까지 기본으로 사용
- dnf는 RHEL 9 버전부터 기본으로 사용되도록 채택되었음. 동작 과정은 거의 똑같다.
예시) git 패키지 설치
dnf install git
appstream은 레포지토리 정보이다.
레포지토리의 정보가 담긴 url이 /etc/yum.repos.d/ 디렉터리에 있는 rocky.repo 파일에 담겨져있다.
이 url의 미러 사이트에 담겨 있는 정보들을 가지고올 수 있다.
패키지 파일을 관리하는 이유가 무엇일까? => 종속성
각 라이브러리마다 다양한 버전을 가지고 있고, 각 버전마다 호환될 수 있는 것들이 전부 다르기 때문이다.
http 패키지를 다운 받아 http 연결을 할 수 있다.
> systemctl start httpd
* 방화벽 내리는 방법
> systemctl stop firewalld
리눅스 기본 명령어 실습
가상 머신을 '헤드 리스로 시작'한 후, mobaXTrem으로 가상 머신 터미널 실행
date
- 현재 날짜, 시간 출력
echo
- 인자로 지정한 문자열 출력
- $ 기호를 사용하여 변수를 지정하고 값을 출력할 수도 있다.
- pwd 명령과 같은 값을 출력함
hostnamectl [호스트 네임]
- 호스트 이름 변경
history
- 사용한 명령어 목록 출력
cd
- 디렉터리 이동
- 경로를 적지 않고 cd 명령어를 사용할 경우, 현재 로그인한 사용자의 홈 디렉터리로 이동한다. (cd ~)
ls
- 현재 위치한 디렉터리(워킹 디렉터리)에 있는 파일과 디렉터리를 출력
- '-a' 옵션은 모든 목록 출력
mkdir
- 디렉터리 생성
- 'p' 옵션을 이용해 디렉터리의 하위 디렉터리도 생성 가능
- 디렉터리가 이미 있을 경우에는 기존에 있던 디렉터리 경로 이용
touch
- 파일 생성
rm, rmdir
- 파일과 디렉터리 삭제.
- rm은 파일, 디렉터리가 모두 삭제할 수 있다. '-r' 옵션을 이용하여 디렉터리 삭제 가능한다.
- rmdir은 거의 사용 X
- 여러 파일을 지우기 위해서는 -f(false) 옵션 사용하여 문구 안 띄우게 할 수 있다.
- 'rm -r' 명령어는 다 삭제를 해버리기 때문에 중요한 파일을 지우지 않게 사용할 때 조심해야 한다.
cat
- 파일 내용 출력
less
- 파일 첫 부분부터 페이지별로 출력
- 엔터 누르면 한 줄씩, 스페이스 누르면 한 페이지씩 이동
- q 누르면 less 명령어 종료
- / 입력 후 원하는 단어 검색하면 해당 단어만 검색할 수 있다. 차례대로 보고 싶으면 n을 눌러 넘기기
cp
- 파일 복사. copy and paste
- cp file1 file2: file1을 file2로 복사
mv
- 파일 이동. cut and paste이기 때문에 기존에 있던 파일은 없어진다.
- -i 옵션을 사용하여 덮어 쓰기 경고문을 띄울 수 있다. 왜? 기존 파일이 사라지기 때문에 사용하는 것을 추천
ln
- 링크 생성
* 링크란?
- 파일에 별명을 붙이는 것. '링크를 생성한다'라고 이야기 한다.
* 링크 종류 2가지
1. 심볼릭 링크
- 윈도우의 '바로가기'와 유사. 생성되어 있는 다른 파일이나 디렉터리를 가리킨다.
- ln -s [원본파일/경로] [새로 생성하는 파일or링크 경로]
- A파일과 B파일이 있을 때, B에 A 링크를 생성하였다. 이 때 링크된 파일인 A 파일을 삭제되면 링크가 깨지면서 접근할 수 없게 된다.
2. 하드 링크
- 같은 기능을 하는 파일이나 디렉터리를 생성하게 된다.
- 옵션 없이 사용하면 하드 링크 생성
ls -l
- 파일, 디렉터리에 존재하는 파일/디렉터리의 정보 확인
chmod
- 파일, 디렉터리에 대한 접근에 대해 수정
vi 편집기 활용 실습
vim 편집기는 최소한의 손동작으로 문서를 편집할 수 있도록 설계되어 있다.
- vi [파일 이름]
vim mode 3가지
- normal mode: 처음 진입했을 때. 입력할 수 없는 상태이다. esc키를 누르면 노멀 모드 진입 가능
- insert mode: 입력 모드. a, o, i를 입력하면 진입할 수 있음. 입력이 완료되면 esc를 눌러 노멀 모드로 돌아갈 수 있다.
- command line mode: 콜론 입력 시 좌측 하단에 명령어 입력 가능하다. w: 저장, q나가기
'클라우드 컴퓨팅 > 인프라 기초' 카테고리의 다른 글
[24.07.04] 인프라 기초 4 Docker와 컨테이너, 레지스트리 (0) | 2024.07.04 |
---|---|
[24.07.03] 인프라 기초 3 (0) | 2024.07.03 |
[24.07.01] 인프라 기초 1 (0) | 2024.07.01 |