1. CLI로 서버를 제어하는 이유는 무엇인가?
무거운 프로그램을 최적의 성능으로 구동하고 작업을 효율적으로 수행할 수 있음
•
무거운 프로그램에 최적화, CLI로 서버를 제어하면 컴퓨터 자원(CPU, MEM)을 효율적으로 사용하여 프로그램을 실행할 수 있음
•
작업의 효율화, 복합적인 일을 한번에 명령할 수 있음.
ex) why라는 폴더를 만들고, 현재 경로를 why로 설정함.
CLI의 경우, mkdir why;cd why 입력으로 끝.
GUI의 경우, 폴더 생성 버튼 누르고 why라는 폴더명을 입력하고 why를 더블클릭해야 함
2. 서버에서 리눅스로 어떻게 작업하는가?
서버의 주요 작업은 Script 파일로 프로그램하여 처리됨
가. Script 예시
•
day로 시작하는 16개의 폴더 중 파일 확장자가 .cs로 끝나는 파일을 찾고, .cs 파일 내 2020년 회계장부의 연말결산이라는 키워드가 포함되어 있다면 zip으로 압축해서 /backup 파일에 저장할 것
나. VIM 편집기를 활용하여 Script 파일을 작성함
3. VIM은 어떻게 사용하는가?
가. 쓰기
•
i: 커서의 바로 앞에서부터 입력 시작
•
a: 커서의 바로 뒤에서부터 입력 시작
•
I: 커서가 위치한 줄의 맨 앞에서부터 입력 시작
•
A: 커서가 위치한 줄의 맨 마지막에서부터 입력 시작
나. 삭제
•
x: 커서 위치의 한 문자 삭제
•
X: 커서 왼쪽 한 문자 삭제
4. Shell Script는 어떻게 작성하는가?
가. shell script란?
•
command-line interprter에 의해 실행되도록 고안된 프로그램으로, 다양한 shell script의 dialects(방언?)는 scripting language로 사용됨
•
scripting language: 특별한 런타임 환경에서 실행되도록 고안된 프로그래밍 언어로 특정 작업을 자동화하는 목적으로 사용됨.
나. 기본 문법
•
#!/bin/bash 삽입
→ 무슨 의미?
•
출력: echo(출력 후 자동 개행), printf(출력 후 개행 X)
→ 개행명령: '\n'
•
변수
→ 변수 선언 시, = 사용하며 띄어쓰지 않는다
•
조건문
→ if 다음에 space ; 다음에 space 삽입
→ ex) if [조건]; then
→ space가 없으면 unexpected token 에러 발생
다. 스크립트 작성 및 실행
•
파일 생성
•
실행권한 부여: 1은 읽기, 2는 쓰기, 4는 실행 권한
ex) chmod 731 파일명
→ 파일 소유자는 읽고, 쓰고, 실행할 수 있음
→ 파일 소유자 그룹은 읽고 쓸 수 있음
→ 그 외 사용자는 읽기만 가능
ex) chmod 400 파일명
→ 파일 소유자는 실행만 할 수 있음
→ 그 외 사용자는 아무 권한 없음
•
파일 실행: ./스크립트파일명
라. bash 기본 명령어
•
echo: 텍스트 출력
•
echo >: 새로운 파일 생성, 기존 파일이 있다면 제거하고 새롭게 생성
•
echo >>: 파일의 기존 내용 유지한 상태에서 새로운 문자열 추가(자동 개행)
•
cat: 파일 내용 보기, 파일 내용이 길다면 위의 내용은 생략하고 마지막 부분만 볼 수 있음
•
more: 파일 내용 보기, 한 화면 만큼만 보여주고 내려가면서 전체 볼 수 있음
•
lsof: list open files, 현재 실행 중인 프로세스의 목록 조회
•
grep: 파일에서 특정 문자열 찾기
ex) lsof | grep 3000, 현재 실행 중인 프로세스 중에서 3000이라는 문자열이 포함된 것 조회
5. 에러 해결
가. '어댑터에 브리지' 설정으로 네트워크 연결
•
현상: Local pc(windows 10)에서 VM pc(Ubuntu)으로 ping X
•
처음에는 ssh 연결이 안되어서 ping을 날려보니 응답이 없는 것을 확인
•
이하 URI 참고하여 네트워크 설정을 NAT → Bridge로 변경
•
이후 ping과 ssh 연결 정상
나. 'NAT' 설정 + portforwarding으로 네트워크 연결
•
현상: 위와 같음
•
현상이해: VM에 올라온 Ubuntu는 가상머신이기 때문에 실제 네트워크 상 존재하지 않음. 따라서 local에서 vm으로 ping을 날려도 통신이 되지 않음.
•
네트워크 통신(인터넷 포함) 시, ip 192.168.35.207의 22222번 포트로 들어오는 데이터는 강제로 ip 10.0.2.15의 22번 포트로 전달함
→ local pc의 ip: 192.168.35.207, vm pc의 ip: 10.0.2.15
•
local pc에서 vm pc의 서버로 원격접속(SSH)할 때, portForwarding에 작성한 호스트 ip와 port를 입력함
→ 외부(인터넷 포함)의 데이터는 192.168.35.207:22222와 mapping된 10.0.2.15:22로 연결되어 송수신됨.
6. 스케줄링(crontab)
가. 실행 주기 구조
•
요일의 경우, 0 또는 7이 일요일 / 1이 월요일
* * * * *
분(0-59) 시간(0-23) 일(1-31) 월(1-12) 요일(0-7)
Bash
복사
나. 실행 주기 실행
•
x 간격 반복 실행: */x
→ */10 * * * *: 10분 간격 실행
•
로그 남기기: * * * * * /run.sh > /run.sh.log 2>&1
•
로그 안남기기: * * * * * /run.sh > /dev/null 2>&1
Reference
•
•
SSH 접속, https://dora-guide.com/ssh-접속/
•
shell script 정의, https://en.wikipedia.org/wiki/Shell_script