Gom3rye 2025. 5. 27. 17:48

네트워크 관리 프로토콜 및 서버

원격 접속

  • telnet
  • SSH: 최근에는 SSH를 주로 이용

파일 송수신

외부에서 telnet 프로토콜로 원격 접속을 하는 것

data는 평문으로 보낸다.

→ 보안을 위해 SSH를 사용해서 데이터를 암호화해서 전송하기로 했다. But, 이것도 해독 가능. 해독하는데 시간만 좀 걸릴 뿐.

백그라운드와 데몬은 다른 개념이다.

백그라운드는 사용자의 요청과 상관 없다.

데몬은 대기하고 있다가 사용자의 요청이 오면 그때 일을 하는 것. 동작만 백그라운드에서 하는 것

파일을 송수신 하기 위해선 파일 서버가 있어야 한다.

(웹 서버로도 할 수 있지만 파일이 많아지면 오버헤드 때문에 속도가 느려진다.)

  • FTP (File Transfer Protocol) : 파일 송수신 프로토콜
  • 서버 설치하기
    • 패키지 이름: vsftpd
    • 설정 파일: /etc/vsftpd.conf
    • 데몬 이름: vsftpd
      • 항상 데몬을 확인하는 명령어는 systemctl status 데몬이름
    • 서버 동작 확인: telnet 0 21 (trying ~ 이라고 나오면 접속이 된 것!)
  • FTP 클라이언트 사용
    • 접속: ftp 주소
    ftp 10.0.2.15
    

  • 명령어
    • cd: 디렉토리 변경
    • lcd: 로컬의 디렉토리로 이동
    • pwd: 원격 호스트의 디렉토리 출력
    • !pwd: 로컬의 디렉토리를 호출
    • ls: 파일 목록을 출력
    • !ls: 로컬의 파일 목록을 출력
    • mkdir
    • get 원격 파일명: 원격 호스트의 파일 1개를 다운로드
    • mget 원격 파일명: 여러 개의 파일을 다운로드
    • put: 업로드
    • mput: 여러 개의 파일 업로드
    • prompt: 파일 전송 여부를 확인
    • bin: 바이너리 파일을 송수신 한다는 것을 지정
    • bye: 종료
    • open: 호스트를 다시 입력
    • user: 사용자를 다시 입력
    • ? 또는 help: 명령에 대한 도움말을 출력

메일 송수신

  • 패키지: mailutils
    • 설치: sudo apt install mailutils
  • 기본 포트가 25 (ftp는 기본 포트가 21이었음)
  • 서버 구동 중인지 확인: telnet 0 25
  • 메일 클라이언트 설정: /usr/bin/mail

mailx [옵션] [이메일 주소]

메일 보내기 및 읽기 명령

  • 옵션
    • -s: 메일 제목 지정
  • 메일 보내기
    • ex. user1에게 전송
    mailx 사용자이메일주소
    mailx user1
    

DB Server

MariaDB 패키지: mariadb-server

sudo apt install mariadb-server

MariaDB 서비스 이름: mariadb.server

systemctl status mariadb.service

→ 서비스가 실행 중인지 확인하는 게 정말 중요!

로컬에서 접속: mysql이나 maridb

sudo mysql

→ 로컬에서는 아이디 물어보지 않는다.

mysqladmin [옵션]

데이터베이스 관리 명령

  • 옵션
    • version
    • status
    • password 암호 (루트의 패스워드를 정할 수 있다.)

  • 일반 유저 접속
mysql -u 유저명 -p
sudo mysql -u root -p
  • mariadb 외부 접속 허용
    • ls /etc/mysql/mariadb.conf.d/ 이 mariadb 설정 파일
    • mariadb이지만 mysql 폴더에 들어가있다. (이름만 mysql로 되어 있는 것)
    • /etc/mysql/mariadb.conf.d/50-server.cnf 에 들어가서
      bind-address = 127.0.0.1 (→ 로컬에서만 접속할 수 있다.) 이렇게 되어 있는 걸
                                0.0.0.0 으로 해야지 모두 다 접속할 수 있다.
      sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
    • sudo systemctl restart mysqld
      • 설정 파일을 수정하면 항상 재시작을 해줘야 한다.
  • virtualbox에 가상 머신으로 설치했을 때는 포트 포워딩을 해야만 외부에서 접속 가능하다.
  • 계정에서도 외부에서 사용할 수 있도록 설정을 추가해줘야 한다.

Web Server

apache web server

  • 설치
sudo apt install apache2
  • 서비스 이름: apache2
systemctl status apache2 #로 active 상태인지 확인
  • 방화벽 해제
sudo ufw disable # 해제
sudo ufw enable # 활성화
sudo utw status # 상태 확인

들어오는 것을 막는 것: firewall - Out bound

나가는 것을 막는 것: firewall -In bound

                             : proxy server: 외부로 나갈 때 이 서버를 거쳐서 나가도록 한다.

ajax: java script 비동기 요청

→ SOP 적용 (Same Origin in Policy)

→ 서버 쪽에 CORS 정책 설정을 해주면 가능하다.

  • welcome 파일 위치: /var/www/html 디렉토리의 index.html

이 파일을 바꿔주면 welcome 파일이 바뀐다.

셸 프로그래밍

  • 셸 스크립트는 Unix나 Linux 또는 POSIX(Portable Operating System Interface)를 지원하는 운영체제인 Mac OS 등에서 일반적으로 사용하는 명령어들과 if, for 와 같은 프로그래밍적인 요소로 이루어진 인터프리터 기반의 스크립트 언어
  • 셸 스크립트는 물리 서버나 가상 서버 또는 컨테이너에서도 사용 가능
  • 셸 스크립트는 시스템 엔지니어와 리눅스나 유닉스를 다루거나 인프라와 개발을 담당하는 데브옵스 엔지니어들이 주로 사용한다.

기본 문법

  • 기본 작성 및 실행
    • 작성할 때 확장자는 대부분 sh를 사용한다.
#!/bin/bash

echo "hello world"

→ #!/bin/bash 는 주석이 아니고 셔뱅이라고 해서 이 파일의 설정을 알려주는 것

→ 지금은 bash 셸 스크립트라고 알려줌

→ 파이썬에서는 인코딩 방식을 적어주는 경우가 있음

  • 기본 작성 및 실행

1. sh 또는 bash 파일 경로

sh myshell.sh
bash myshell.sh # sh는 함수 인지를 못한다.

2. 실행 권한을 부여하고 파일 경로를 직접 적어서 실행

ls -l myshell.sh # -rw-rw-r-- 1 kyla kyla 32 May 27 03:20 myshell.sh
chmod +x myshell.sh # 없던 실행 권한 주기

→ 단독 실행 하려면 path에 있어야 하는데 지금은 없으니까 myshell.sh 라고만 쓰면 안되고 ./myshell.sh로 써줘야 한다.

  • 변수 생성

리눅스는 공백이 의미를 갖는다. 함수 또는 명령어의 인자를 구분할 때 공백을 사용한다.

변수명 = 값

  • 변수 사용
    • $변수명

  • 변수 사용해서 디렉토리 만들기
#!/bin/bash

dirname="Korean"
mkdir $dirname

→ Korean이라는 디렉토리 생성됨

  • 변수의 종류
    • 함수: 특정한 동작이나 목적을 위해 만든 코드의 집합
      • 함수를 이용하면 스크립트의 줄 수를 줄여주고 좀 더 효율적으로 스크립트를 만들 수 있다.
      • 함수를 작성해서 실행 (→ bash 파일 이름.sh 로 실행하거나 2번째 방법인 실행 권한을 부여하고 파일 경로를 직접 적어서 실행 해야 한다.)
    #!/bin/bash
    
    function print(){
    echo $1
    }
    print "I am Function."
    
    • 전역 변수: 함수 외부에서 만들어져서 함수 내부나 외부 모든 곳에서 사용할 수 있는 변수
    • 지역 변수: 함수 내부에서 local이라는 예약어와 함께 선언해서 함수 내부에서만 사용 가능한 변수
    #!/bin/bash
    
    globalvar="Korea"
    
    function lean() {
        echo $globalvar
        local localvar="English"
        echo $localvar
    }
    
    function print() {
        echo $1
    }
    
    print "I am Function."
    lean
    echo $globalvar
    echo $localvar
    
    ### 결과
    I am Function.
    Korea
    English
    Korea
    
    → 스크립트 언어는 줄 단위로 번역하면서 실행하기 때문에 쪼개서 작성하면 디버깅 하기 쉽다.(어디서 문제가 발생했는지 알기 쉽다.)
    • 예약 변수 및 환경 변수
      • HOME: 사용자의 홈 디렉토리 경로
      • PATH: 실행 파일을 찾는 경로
        • Windows, 프로그래밍 언어: 명령어를 현재 디렉토리에서 찾고 PATH에서 찾는다.
        • Linux, Unix: PATH에서만 찾는다.
          • → PATH에다 .을 넣어서 현재 디렉토리를 넣어놓으면 윈도우와 같게 된다.
      • FUNCNAME: 현재 실행 중인 함수 이름
      • LANG: 프로그램 사용 시 지원되는 언어
      • PWD: 현재 작업 디렉토리
      • TERM: 로그인 터미널 타입
      • SHELL: 현재 셸
      • USER: 사용자
      • USERNAME: 사용자 이름
      • GROUP: 사용자 그룹
      • DISPLAY: X 디스플레이 이름
      • COLUMNS: 현재 터미널이나 윈도우 터미널의 컬럼 수
      • LINES: 터미널의 라인 수
      • PS1, PS2, PS3, PS4: 기본 프롬프트 변수
      • BASH: Bash 실행 경로
      • BASH_VERSION: Bash 버전
      • HISTFILE: History 파일 경로
      • HISTSIZE: History 크기
      • HOSTNAME: 호스트 이름
      • HOSTTYPE: 호스트 종류(하드웨어 종류)
      • MACHTYPE: 하드웨어 종류인데 조금 더 자세히
      • MAIL: 메일 보관 경로
      • LOGNAME: 로그인 이름
      • TMOUT: 0이면 제한이 없고 TIME 시간 지정하면 지정한 시간 이후 로그아웃
      • SECONDS: 스크립트가 실행된 시간
      • UID: 사용자 UID
      • OSTYPE: 운영체제 종류

  • 위치 매개변수
    • $0: 실행된 스크립트 파일
    • $1~: 함수를 호출할 때 입력한 파라미터로 10번부터는 { }로 감싸줘야 한다. (${10})
    • $*: 파라미터 전체
    • $@: 파라미터 전체를 나타내는데 “”로 감싸면 $*과 달라진다.
    • $#: 파라미터 개수
  • 위치 매개변수 사용
#!/bin/bash

echo "This shell script name : $0" 
echo "I can speak $1 and $2"                                                     
echo "This shell script parameters are $*"
echo "This shell script parameters are $@"
echo "This parameter count is $#"

  • 특수 매개변수
    • $$: 현재 스크립트 또는 명령어의 PID
    • $?: 최근에 실행된 명령어, 함수, 스크립트의 종료 상태
    • $!: 최근에 실행한 백그라운드 명령의 PID
    • $-: 현재 옵션 플래그

        • 변수의 문자열 자르기
          • ${변수:숫자1:숫자2}: 숫자1은 앞에서부터 위치이고 숫자2를 설정하면 글자 수
          • 음수도 가능: 음수는 뒤에서부터

  • 파일명과 디렉토리 추출
    • FILE_PATH=”/etc/nova/nova.conf”
echo ${FILE_PATH%/*} # 파일의 디렉토리만 출력
echo ${FILE_PATH##*/} # 파일명 출력

  • 조건문
    • if: 조건에 따라 다른 명령을 수행할 수 있도록 해주는 제어문. [ ] 사이 조건식 넣을 때 한칸씩 띄어줘야 한다.
    if [ 조건식 ]
    then
        수행문
    elif [ 조건식 ]
        수행문
    else
        수행문
    fi
    #########----------
    #!/bin/bash
    value1=10
    value2=10
    if [ $value1 = $value2 ]
    then
            echo TRUE
    else
            echo FALSE
    fi
    # 답: TRUE
    
    • 연산자가 문자열
      • -gt
      • -lt
      • -gte
      • -lte
      • &&
    #!/bin/bash
    value=5
    if [ $value -gt 0 ] && [ $value -lt 10 ]
    then
            echo TRUE
    else
            echo FALSE
    fi
    # 답: TRUE
    
  • switch ~ case
case $변수 in
		조건값1)
		수행할 내용 ;;
		조건값2)
		수행할 내용 ;;
		*)
		수행할 내용 ;;
esac
#!/bin/bash
case $1 in
        start)
        echo "START" ;;
        stop)
        echo "STOP" ;;
        restart)
        echo "RESTART" ;;
        help)
        echo "HELP" ;;
        *)
        echo "Please input sub command" ;;
esac

  • 반복문
    • for
    for 변수 in [범위(리스트, 배열, 묶음 등)]
    do
    	수행할반복문
    done
    
    #!/bin/bash
    
    for num in 1 2 3
    do
            echo $num;
    done
    
    numbers="1 2 3"
    for num in $numbers
    do
            echo $num;
    done
    
    for file in $HOME/*
    do
            echo $file;
    done
    
    for num in {1..5}
    do
            echo $num;
    done
    
    #### 결과
    1
    2
    3
    1
    2
    3
    /home/kyla/Desktop
    /home/kyla/Documents
    /home/kyla/Downloads
    /home/kyla/Music
    /home/kyla/Pictures
    /home/kyla/Public
    /home/kyla/Templates
    /home/kyla/Videos
    /home/kyla/index.html.1
    /home/kyla/index.html.2
    /home/kyla/index.html.3
    /home/kyla/linux_ex
    /home/kyla/snap
    /home/kyla/temp
    /home/kyla/test
    /home/kyla/xterm
    {1..5}
    
    → 디렉토리도 iterator이다.
  • #!/bin/bash
    
    for num in {1..10..2}
    do
    echo $num;
    done
    
    ar="apple banana pineapple"
    for fruit in $ar
    do
    echo $fruit;
    done
    
    for ((num1=0; num1<3; num1++))
    do
    echo $num;
    done
    
    • while
    #!/bin/bash
    
    num=0                                                                                                                                                             while [ $num -le 3 ]
    do
            echo "numbers: $num"
            ((num++))
    done
    
    for ((a=0; a<10; a++))
    do
            echo "$a"
    done   
    
    → dash 셸에서 에러나면 sh로 실행하지 말고 bash나 파일에 실행 권한을 주어서 실행해야 한다.
    • 연산자
      • -z: 문자열의 길이가 0이면 참
      • -n: 문자열의 길이가 0이 아니면 참
      • -eq:
      • -ne:
      • -gt
      • -ge
      • -lt
      • -le
      •  
      • =
      • <
      • <=
      • =
      • ==
      • !=
      • -a: && (and)
      • -o: || (or)
728x90
반응형