[TIL] Linux 3(임시)

나의 개발 일지·2024년 2월 26일

BootCamp

목록 보기
7/13

2024.02.26

오늘 학습한 내용 : 셸 스크립트, 원격 서버 구축,


셸 스크립트

셸 스크립트 작성

  • 셸 스크립트(Shell Script)는 리눅스나 유닉스 기반 시스템에서 사용되는 스크립트 언어

  • c언어와 유사하게 프로그래밍

  • 변수, 반복문, 제어문 사용 가능

  • 텍스트 파일 형태로 셸에서 바로 실행 가능 --> 따라서, vi,gedit 많이 사용

  • .sh 확장자 사용

    • #! : bash를 사용하겠다는 의미
    • echo : 화면에 출력하는 명령, "사용자 이름:"이라는 글자를 먼저 출력 후 $USER라는 환경 변수의 내용을 출력
    • exit 0 : 종료 코드를 반환. 적절한 종료 코드는 스크립트 호출 후 제대로 실행되었는 지 확인하는 용도. 마지막 행에서 성공(0)인지 실패인지(1)를 반환하는게 좋다
  • sh 스크립트파일.sh 명령어로 실행

  • '실행가능' 속성으로 변경한 후 실행

    • chmod + x : 현재 파일의 속성에 '실행 가능' 속성을 추가
  • ./스크랩트파일.sh에서 '.'은 현재 디렉토리를 의미. 즉, 현재 디렉토리의 스크립트 파일을 실행하라는 의미.

변수

  • 셸 스크립트에서는 변수를 미리 선언x, 처음 변수에 값이 할당되면 자동으로 변수 생성
  • 변수 이름은 대소문자 구분함
  • 변수를 대입할 때 testval=hello 처럼 공백이 없어야함

변수의 입력과 출력

  • 3행 : Hi Jinsu라는 정상 값 출력
  • 4행 : 2행과 동일
  • 5행 : '$myvar'이라는 문자열 출력
  • 6행 : $는 $를 글자로 취급하게 함. 즉, 5행과 동일
  • 8행 : 변수 myvar에 입력을 받음
  • var.sh 실행

숫자계산

  • 3행 : 문자열로 취급, 띄어쓰기하면 안됌
  • 5행 : 숫자로 취급해서 계산 , 각 단어마다 띄어쓰기 해야함
  • 7행 : 괄호와 * 앞에는 역슬래쉬(\)를 붙여야 한다

파라미터 변수

  • $0,$1,$2등의 형태를 가짐.
  • 실행하는 명령의 부분 하나하나를 변수로 지정함을 의미

조건문

if , case문

  • 기본 if문
  • 형태
    #!/bin/sh
    if \[ 조건 ]
    then 
       참일 경우 실행 
    else
       거짓인 경우 실행 
    fi
    exit0
    • 파일과 관련된 조건

case~esac문

  • 2행 : 첫 번째 파라미터 변수인 $1 값에 따라서 3,5,7,9행으로 분기하고 이외의 값은 *) 부분으로 분기
  • 4행 : start)일 경우 실행. 주의할 점은 뒤에 ;;을 붙여야한다는 점
  • 9행 : 그 외 모든 것

AND,OR 관계연산자

  • and는 '-a' 또는 '&&' 사용
  • or는 '-o' 또는 '||' 사용
  • 4행 : 입력한 파일 이름이 일반파일(-f)이고, 크기가 0이 아니라면(-s) 5행을 실행. then구문은 다음 줄에 작성해도 되고 ;다음에 바로 작성해도 된다. 세미콜론은 앞 뒤 구문을 행으로 구분하는 역할을 한다.
  • 4행은 if[\(-f $name\) -a \(-s $name\)];then과 동일하다

반복문

for문

  • 형식
     for 변수 in 값123
      do
      	반복 할 문장
      done
      
  • 실습 > 1~10에서 짝수인 것 반환하기
    • 2행 : for문을 사용하여 반복문 진행
    • 4행 : if문을 통해 짝수 판별하기
      %연산을 해야하기에 expr 사용, 변수를 사용해야하기에 $i
      -eq는 산술연산자 '같다면'을 의미

while문

  • 조건문이 참인 동안 계속해서 반복문 진행

until문

  • while문과 비슷하나 until문은 조건식이 참일 때까지(=거짓인 동안) 계속 반복된다.
  • break,continue,exit,return 문 (실습 예제 이따 정리)
  • 중간 실습 > 구구단 만들기

기타 알아둘 내용

사용자 정의 함수

eval

  • 문자열을 명령문으로 인식하고 실행
    • 3행 : str변수의 값인 "ls-l eval.h"를 그대로 출력
    • 4행 : eval을 통해 str변수의 값을 명령문으로 인식하고 실행

네트워크 서버 구축 (실습위주)

텔넷 서버

  • 텔넷 서버(Telnet Server)는 텔넷(Telnet) 프로토콜을 사용하여 원격으로 컴퓨터나 장치에 접속할 수 있게 해주는 서비스.
  • 보안에 취약
  • 리눅스 서버에 텔넷 서버를 구축하면, 원격지에서 접속할 pc에는 텔넷 클라이언트 프로그램이 필요함

텔넷 서버 구축하기

[출처 : 한빛미디어-이것이 리눅스다]

1. 텔넷 서버 구축

  • rpm -qa telent-server 명령어를 통해 아무것도 안나오면 미설치를 의미
  • dnf install telnet-server : 텔넷 서버 설치

2. 텔넷 서비스 시작

  • systemstl start telnet.socket : 텔넷 서비스 시작
  • systemstl status telnet.socket : 텔넷 서비스 가동 유무 확인(active)
  • 23번 포트를 사용하고 있음 -> 방화벽 23번 포트를 열어야 함을 의미

3. 텔넷 전용 사용자 생성

  • adduser teluser1을 통해 텔넷 전용 사용자 생성 및 비밀번호 설정
  • telnet 192.168.111.100은 telnet에 접속하기 위함이어서 원래는 텔넷 클라이언트가 설치된 pc에서 접속해야하나 접속이 잘되는지 확인하기 위해 접속

4. 방화벽 설정(포트 열기)

  • firewall-config를 통해 방화벽 열기 (포트 설정)
  • 방화벽에서 [public]-[영구적]-[telnet 활성화]
  • 중요한 것은 '영구적'으로 설정해야 상시 telent이 활성화 된다는 것
  • 활성화 되지 않았다는 것은 telnet을 사용하지 않겠음을 의미하기에 활성화 해주어야 한다. (포트 활성화)
  • Firewall 다시 불러오기를 통해 설정을 확인 할 수 있음

5. 텔넷 서비스 상시 가동

  • systemctl enable telnet.socket을 통해 텔넷 서비스를 상시 가동

6. 클라이언트에서 접속

  • 윈도우의 [앱 및 기능]에서 텔넷 클라이언트 활성화

OpenSSH 서버

  • 텔넷과 용도는 동일하지만, 보안이 강화
  • 텔넷과 거의 동일하지만 데이터 전송 시 암호화 한다는 점이 다름
    • linux에는 sshd 서버가 거의 내재 되어 있음
    • windows에는 sshd 서버가 없기에 한글 putty 설치해야함

1. sshd 서버 구축

  • rpm -qa openssh-server를 한 결과 이미 linux에 내재되어 있음을 확인
  • systemctl status sshd를 통해 active, ssh 서버가 작동중임을 확인

2. 방화벽 설정

  • 방화벽도 이미 열려있다

**3. 리눅스 클라이언트에서 접속 및 windows 클라이언트에서 접속

  • 리눅스 클라이언트에서 접속
    • ssh teluser1@192.168.111.100을 통해 클라이언트 접속
    • ifconfig ens160
      • ifconfig ens160 명령을 실행하면 해당 네트워크 인터페이스인 ens160의 현재 설정 정보가 표시
      • ifconfig는 네트워크 인터페이스의 설정을 확인하고 제어하는 유틸리티
      • ens160은 네트워크 인터페이스의 이름, 시스템마다 다르다
  • Windows 클라이언트에서 접속
    • 한글 putty 다운로드 후 접속
    • 접속되는 것을 확인

3가지 원격 접속 서버 비교

네임 서버 설치와 운영

  • DNS(Domain Name System)서버
  • 도메인 이름을 IP주소로 변환시켜 주는 역할
    • ex. www.hanbit.co.kr -> 218.38.58.195
  • 네임 서버의 필요성
    • 초기
      • 컴퓨터가 몇 대 안됨
      • 사용자가 ip주소를 기억하고 접근이 가능
    • 인터넷에 연결된 컴퓨터가 수백대로 늘어남
      • hosts 파일(URL과 IP주소를 기록한 파일)을 통해 네트워크 접속
      • Windows > ex. c:Windows\system32\drivers\etc\hosts
      • 리눅스 > ex. /etc/hosts
    • 현재
      • 기하급수적인 네트워크상의 컴퓨터 ip 감당이 어려움
      • 이를 전문적으로 처리하는 서버 컴퓨터 등장
      • 네임서버 : 인터넷 상의 모든 서버의 URL,IP주소를 실시간 제공하기에 사용자는 URL만 알면 네트워크 접속이 가능해짐

1. 현재 PC의 네임서버의 IP정보 확인

  • 'nslookup'을 통해 네임서버를 확인 할 수 있다
  • server를 입력하면 네임서버의 ip를 알 수 있다
  • 특정 URL을 입력하면 해당 URL의 ip를 알 수 있다
  • 서버 ip는 바뀔 수 있다.

2. 네임서버의 ip정보 확인 및 네임서버 무력화 하기

  • cat /etc/resolv.conf
    * 네임서버의 ip주소를 알 수 있다.
  • vi /etc/resolv.conf를 통해 네임서버의 ip를 무력화
  • 네임서버의 ip를 무력화 즉, 네임서버를 사용하지 못하면 URL을 통한 네트워크 접속이 불가능해짐. 인터넷이 안되는 것이 아님. ip주소로 입력하면 접속 가능.
  • 네임서버를 무력화한 이유는 hosts 파일을 사용해보기 위함

3. host파일을 통해 네트워크 접속하기

  • 네임서버를 무력화한 상태에서 host 파일에 ip에 맞는 url을 write하여 저장 하고 인터넷에서 url로 접속하면 어떻게 될까?
  • host파일로 인해 네임서버가 없어도 ip주소에 맞는 url의 정보가 있기에 url을 통한 네트워크 접속이 가능함을 확인하였다. (네임서버 등장 이전의 네트워크 접속 방식)
  • 그렇다면 host파일에 url은 한빛미디어 url ,ip는 서강대학교 홈페이지 ip를 저장하면 어떻게 될까? 한빛미디어 url로 서강대학교 홈페이지에 접속하게 된다. 즉, host파일에 저장된 url ip에서 url은 의미가 없는 일종의 도구이다.

4. IP주소를 얻는 내부 흐름

메일 서버(SMTP, POP3, IMAP 개념만 보고 넘어감)

  • Email 송수신에서 사용되는 프로토콜
    • SMTP(Simple Mail Transfer Protocol) : 클라이언트가 메일을 보내거나, 메일 서버끼리 메일을 주고 받을 때
    • POP3(Post Office Protocol) : 메일 서버에 도착되어 있는 메일을 클라이언트로 가져올 때
    • IMAP(Internet Mail Access Protocol) : POP3와 동일
      [출처: 한빛미디어 - 이것이 리눅스다]

데이트베이스 서버 구축과 운영

1. MariaDB 서버 및 클라이언트 다운로드 및 설치

  • MariaDB_이것이 리눅스다에서 MariaDB 파일을 다운로드 한다.
    • cd 다운로드를 통해 다운로드 경로로 이동한다. (사진은 이미 mariaDB를 설치한 상태)
    • tar xfz mariadb10.10.tgz를 통해 다운로드 한 파일의 압축을 푼다
    • dnf -y install *.rpm을 통해 다운로드 받은 rpm 패키지 파일을 설치한다

2. MariaDB 서비스 시작

  • systemctl restart mariadb를 통해 mariadb 서버 재시작
  • systemctl enable mariadb를 통해 mariadb 상시 가동을 설정
  • systemctl status mariadb를 통해 mariadb의 실시간 상태를 파악-active이므로 실시간 가동중임을 파악

3. 방화벽(포트) 설정

  • firewall-config를 통해 mysql 포트를 활성화 한다.

4. MariaDB 클라이언트로 서버 접속

  • 'mysql'을 통해 MariaDB 클라이언트로 서버 접속한다. ( 4:51 듣는중 동영상)

웹 서버 설치와 운영

0개의 댓글