리눅스 기초 - 04 프로세스와 네트워크

핏자·2023년 5월 20일
0

인공지능사관학교

목록 보기
25/31
post-thumbnail
  • 📖 프로세스

- 프로세스

리눅스 시스템에서 메모리에 적재되어 실행되고 있는 모든 프로그램이 프로세스

- 프로세스 특징

  • 모든 프로그램은 실행될 때 하나 이상의 프로세스를 갖는다.
  • 병행적으로 실행이 가능하다.
  • 부모, 자식 프로세스가 있게 된다.
  • 커널에 의해 관리된다.
  • 모든 프로세스에는 소유자가 있다.
  • 프로세스마다 식별을 위한 ID가 부여된다.

- 프로세스의 번호

모든 프로세스는 고유한 번호(PID)를 가지고 있다.
PID 1번은 init 프로세스, 2번은 kthreadd 프로세스가 실행
init 프로세스는 나머니 모든 시스템 프로세스의 부모 프로세스
thread 프로세스는 모든 스레드의 부모 프로세스

- 프로세스의 메모리 구성

코드 영역

  • 프로그램 코드를 뜻함

데이터 영역

  • 전역 변수와 정적 변수

BSS 영역

  • 초기화되지 않은 변수

힙 영역

  • 동적인 메모리 할당 영역

스택 영역

  • 함수 매개변수, 복귀 주소, 지역 변수와 같은 임시 자료

커널 영역





  • 📖 프로세스 명령어

- 프로세스 목록 보기 : ps

ps [option]
  • option
    • e: 현재 실행중인 모든 프로세스 정보 출력
    • f: 모든 정보 확인
    • a: 실행중인 전체 사용자의 모든 프로세스 출력
    • u: 프로세스를 실행한 사용자와 프로세스 시작시간 등을 출력
    • x: 터미널 제어 없이 프로세스 현황 보기

PID / TTY / TIME / CMD 출력

- 프로세스 목록 보기 : ps -ef

-ef 옵션으르 사용하여 모든 프로세스 리스트 확인

UID / PID / PPID / C / STIME / TTY / TIME / CMD 출력

- 프로세스 목록 보기 : ps -aux

시스템에서 실행중인 모든 프로세스 출력

USER / PID / %CPU / %MEM / VSZ / RSS / TTY / STAT / START / TIME / COMMAND 출력

- 프로세스 종료 : kill

kill [option] [PID: 프로세스 아이디]
  • option

    • l: 사용가능한 시그널 목록을 출력

  • 자주 사용하는 시그널

    • 1: 재실행(SIGHUP)
    • 9: 강제종료(SIGKILL)
    • 15: 정상종료(SIGTERM)





  • 📖 job

- job

백그라운드로 실행되는 작업을 보여주는 명령어
job은 프로세스와 달리 터미널 명령을 통한 작업만을 의미
job을 통해 프로세스를 실행할 수 있지만 터미널이 종료되면 job과 함께 프로세스도 종료
각각의 터미널마다 job은 따로 존재

Foreground ↔ Background
job을 활용하여 프로세스를 더 효율적으로 관리 할 수 있다.

kill %작업번호

프로세스와 마찬가지로 kill 명령어를 통해 종료 가능
ps 명령어를 통해 PID를 알아내어 종료하는 방법도 가능





  • 📖 at과 cron

- at

지정된 시간에 1회 실행되는 작업 예약 명령어
시간이 되면 수행되고 작업 리스트에서 사라진다.

at [옵션] [시간] [날짜] [+증가시간]
  • option
    • m: 출력 결과가 없더라도 작업이 완료될 때 사용자에게 메일을 보냄
    • f: 스크립트 파일 등을 실행할 때 사용
    • l: 예약된 작업 목록 출력, atq 명령어 또한 같은 동작을 수행
    • v : 작업이 수행될 시간 출력
    • d : 예약된 작업을 삭제, atrm 명령어 또한 같은 동작을 수행

at now + 3 hours -f elice.sh

지금으로부터 3시간 후에 elice.sh 스크립트를 실행

- crontab

지정된 시간에 1회 실행되는 at과는 달리
지정된 시간에 따라 주기적으로 실행

crontab [옵션]
  • option
    • l: 현재 계정의 설정된 crontab 정보를 보여준다.
    • e: 현재 계정의 crontab 정보를 수정한다.
    • r: 현재 계정의 crontab 정보를 모두 삭제한다.
    • u: 특정 사용자의 crontab 정보를 다루게 해준다.(root 권한 필요)

10 1 1 * * /home/elice/test.sh
# 매월 1일 1시 10분에 /home/elice/test.sh 실행
0, 30 1 * * 0 /home/elice/backup.sh
# 일요일 1시, 1시 30분에 /home/elice/backup.sh 실행

콤마(,)를 통해 2가지 이상의 시간 표현 가능





  • 📖 SSH

- SSH

Secure Shell의 줄임말로 네트워크를 통해 다른 컴퓨터에 접근하거나 그 컴퓨터에서 명령 실행 등을 할 수 있도록 해주는 프로토콜

즉, SSH를 통해 다른 컴퓨터에서 리눅스에 접속하여 명령어 및 프로그램을 실행할 수 있다.

Telnet 또한 네트워크를 통해 다른 컴퓨터에 접근하거나
그 컴퓨터에서 명령 실행 등을 할 수 있도록 해주는 프로토콜
하지만 보안적으로 매우 치명적인 결함 존재

Telnet을 통해 보내지는 패킷 데이터는 암호화 되어 있지 않다.
즉, 이를 통해 사용자의 비밀번호 등의 노출 되어서는 안되는 데이터가 노출 된다.
하지만 SSH의 데이터는 암호화 되어 있다.

- openssh

우분투에서는 openssh 라는 패키지를 통해 SSH를 구동할 수 있다.

우분투를 설치하고 나면, openssh-client만이 기본적으로 설치 되어 있다.

다른 컴퓨터에서 우분투에 접속하려면 openssh-server 패키지를 설치해야 한다.

dpsk -l | grep openssh

위와 같은 명령어로 openssh 설치 여부 확인 가능

sudo apt-get install openssh-server

apt-get 명령어로 openssh-server 설치

- SSH 서버 실행하기

sudo service ssh start

서비스 실행(start), 재실행(restart), 종료(stop)

service --status-a;; | grep +

서비스 확인

- SSH 포트 확인하기

sudo netstat -antp

- SSH 접속하기

ssh [서버아이디]@[아이피 혹은 서버이름 혹은 도메인]

CMD 또는 터미널 창에서 다음의 명령어로 접속 가능
OpenSSH Client가 설치되어 있어야 한다

profile
개발자 핏자의 로그들

0개의 댓글