Post

오토에버 클라우드 2기 19일차

오토에버 클라우드 2기 19일차

리눅스에서 데몬과 백그라운드 차이

백그라운드 프로세스 (Background Process)

  • 정의: 사용자가 명시적으로 실행했지만, 터미널과의 연결을 끊고 뒤에서 실행되도록 만든 프로세스
  • 특징:
    • 일반적으로 명령 뒤에 & 기호를 붙여 실행 (command &)
    • 작업 제어 (job control)의 대상이 됩니다. jobs, fg, bg 등의 명령어로 상태를 확인하거나 foreground로 전환
    • 실행한 터미널 세션과 연결되어 있어, 터미널이 종료되면 함께 종료 (이를 방지하기 위해 nohup 명령어를 사용하기도 합니다.)
    • 표준 출력, 표준 에러는 기본적으로 터미널 (리디렉션을 통해 변경 가능)

데몬 (Daemon)

  • 정의: 시스템 서비스 등을 제공하기 위해 백그라운드에서 지속적으로 실행되는 프로세스
  • 특징:
    • 일반적으로 시스템 부팅 시 자동으로 시작되거나, 필요에 따라 별도의 서비스 관리자에 의해 실행
    • 터미널과는 완전히 분리되어 있으며, 사용자 세션에 종속되지 않음 즉, 사용자가 로그아웃해도 계속 실행
    • 일반적으로 부모 프로세스가 init 프로세스(PID 1) 데몬 프로세스는 보통 스스로를 백그라운드로 만들고 부모 프로세스를 종료
    • 표준 입력은 /dev/null로 리디렉션되고, 표준 출력과 표준 에러는 보통 로그 파일이나 시스템 로그로 리디렉션
    • 이름에 d로 끝나는 경우가 많음 (예: sshd, httpd)
특징백그라운드 프로세스데몬
실행 방식사용자가 명시적으로 실행 후 백그라운드로 전환시스템 시작 시 또는 서비스 관리자에 의해 자동 실행
터미널 연결연결됨 (기본)분리됨
사용자 세션 종속성종속될 수 있음종속되지 않음
부모 프로세스실행한 쉘init (PID 1)
작업 제어대상이 됨 (jobs, fg, bg)대상이 아님

 

파일 송수신

리눅스에서 파일 송수신과 메일 송수신은 서버·클라이언트 측 설정이 모두 필요하다 크게 FTP 서버(vsftpd) 구축과 FTP 클라이언트가 있다

FTP와 vsftpd 소개

  • FTP(File Transfer Protocol): TCP 기반(보통 포트 21)으로 파일을 주고받는 프로토콜
  • vsftpd: “Very Secure FTP Daemon”(매우 안전한 FTP 데몬)을 뜻하며, 가볍고 보안성 높은 FTP 서버 소프트웨어

vsftpd 설치·설정

  1. 설치

    1
    2
    3
    4
    5
    6
    
    # Debian/Ubuntu
    sudo apt update
    sudo apt install vsftpd
       
    # CentOS/RHEL
    sudo yum install vsftpd
    
  2. 기본 설정 파일 편집 (/etc/vsftpd.conf)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    # 익명 로그인 비활성화
    anonymous_enable=NO
       
    # 로컬 사용자 로그인 허용
    local_enable=YES
       
    # 업로드(쓰기) 허용
    write_enable=YES
       
    # chroot(접근 제한) 설정
    chroot_local_user=YES
       
    # 패시브 모드 포트 범위 설정 (방화벽 열어줘야 함)
    pasv_enable=YES
    pasv_min_port=10000
    pasv_max_port=10100
    
  3. 서비스 재시작·자동 시작 등록

    1
    2
    
    sudo systemctl restart vsftpd
    sudo systemctl enable vsftpd
    
  4. 방화벽 열기

    1
    2
    3
    
    # 포트 21, pasv 포트 범위 허용
    sudo ufw allow 21/tcp
    sudo ufw allow 10000:10100/tcp
    

 

FTP 클라이언트 사용법

  1. 기본 ftp 명령어

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    # 서버 연결
    ftp your.ftp.server.com
       
    # 로그인 (ID/PW 입력)
    Name: youruser
    Password: ****
       
    # 파일 목록 조회
    ls
       
    # 다운로드
    get remote_file.txt
       
    # 업로드
    put local_file.txt
       
    # 디렉터리 이동
    cd uploads
    lcd ~/Downloads
       
    # 종료
    bye
    
  2. lftp (더 강력한 대체 클라이언트)

    1
    2
    3
    4
    5
    6
    7
    8
    
    sudo apt install lftp
    lftp your.ftp.server.com -u youruser
       
    # mget/mput 으로 와일드카드 전송
    mget *.jpg
    mput *.log
       
    # 백그라운드 전송, 재시도 기능 제공
    
  3. GUI 클라이언트

    • FileZilla: 크로스플랫폼 FTP/SFTP 지원
    • WinSCP(Windows) 등

 

셸 프로그래밍

셸 스크립트는 Unix나 Linux 또는 POSIX(Portable Operating System Interface)를 지원하는 운영체제인 Mac OS등에서 일반적으로 사용하는 명려어들과 if, for와 같은 프로그래밍적인 요소로 이루어진 인터프리터 기반의 스크립트 언어

1. shebang (#!)

스크립트 첫 줄에 위치하며, 이 파일을 해석할 인터프리터를 지정

1
#!/bin/bash
  • #!/usr/bin/env bash 형태로도 자주 쓰이며, 시스템 경로에 있는 bash 를 찾아 실행

 

2. 변수 (Variables)

선언과 할당

1
2
NAME="김민정"
COUNT=5
  • 등호(=) 양옆에 공백 불가
  • 값을 읽어올 때는 $NAME, ${COUNT} 형태로 참조

환경 변수

1
export PATH="/usr/local/bin:$PATH"
  • export 하면 자식 프로세스까지 변수 전파

 

3. 함수 (Functions)

1
2
3
4
5
6
greet() {
  local name="$1"      # 지역 변수 선언
  echo "안녕하세요, $name 님"
}

greet "김민정"
  • local 로 함수 내부 변수를 제한
  • 인수는 $1, $2$@ 로 접근

 

4. 제어문 (Control Structures)

조건문

1
2
3
4
5
6
7
if [[ $COUNT -gt 3 ]]; then
  echo "3보다 큽니다"
elif [[ $COUNT -eq 3 ]]; then
  echo "3입니다"
else
  echo "3보다 작습니다"
fi
  • -eq, -ne, -gt, -lt 숫자 비교
  • 문자열 비교는 = 또는 ==

반복문

1
2
3
4
5
6
7
for i in {1..5}; do
  echo "번호: $i"
done

while read line; do
  echo "읽은 줄: $line"
done < file.txt

 

6. 문자열 및 배열

문자열 조작

1
2
3
STR="hello world"
echo "${STR:0:5}"      # hello
echo "${STR/world/unix}"  # hello unix

배열

1
2
3
arr=(apple banana cherry)
echo "${arr[1]}"       # banana
echo "${arr[@]}"       # 모든 요소

 

This post is licensed under CC BY 4.0 by the author.