Search
🖊️

General

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