네트워크 설정 - IP주소 설정

환경 설정

자동/수동 여부

DHCP 기능이 있는 장비에 연결하면 자동으로 설정할 수 있지만 IP주소가 바뀔 수 있음.

 

주소 기준

연결하는 L3 장비에 설정된 주소에 맞춰서 설정

라우터나 공유기 내부 네트워크 대역에 해당하는 주소 사용

 

IP주소 설정 방법

  1. GUI 기반
  2. 명령어
  3. 네트워크 설정 파일

네트워크 설정 파일을 통한 IP 설정

$ vi /etc/sysconfig/network-scripts/ifcfg-네트워크장치이름
BOOTPROTO=static
ONBOOT=yes

IPADDR=192.168.100.152
PREFIX=24
BROADCAST=192.168.100.255
GATEWAY=192.168.100.1
DNS1=8.8.8.8

 

네트워크 설정 명령어

# ip 설정, 확인
ifconfig

# 네트워크 인터페이스 관리 도와주는 NetworkManager 명령어
nmcli

# 라우팅 테이블 확인, 설정
route

# arp 테이블을 확인, 설정
arp

 

네트워크 진단 명령어

# 다른 컴퓨터로 연결된 상태인지 확인
ping

# 네트워크 연결, 라우팅 테이블, 인터페이스 통계 정보 등 확인
netstat

# 패킷이 어떤 경로로 전송되는지 추적
traceroute

 

DNS 명령어

# DNS 조회
nslookup

# DNS 쿼리 결과와 디버깅 정보
dig

 


IP주소 설정

1. 가상의 공유기 만들기

네트워크 - NAT 네트워크 - 만들기

 

IPv4 접두사: 공유기에 연결된 컴퓨터랑 공유기가 내부에서 사용할 사설 IP 네트워크 대역 설정

 

2. 가상 컴퓨터를 가상 공유기에 연결

 

3. 관리자 로그인

su - root

 

4. 현재 IP 설정 확인

ifconfig

IP 설정을 하지 않아서 IP주소가 안 보임.

 

5. IP 설정

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

 

6. IP주소 적용 

네트워크매니저 재실행

systemctl restart NetworkManager

IP주소 적용 확인

 

DNS 서버와 통신이 잘 되면, 도메인주소를 입력했을 때 IP주소를 알려줌

'Linux' 카테고리의 다른 글

프로세스  (0) 2026.02.06
셸(Shell)  (0) 2026.02.05
하드웨어 & 리눅스 구조  (0) 2026.02.04
Oracle VirtualBox 7.2.6 D 드라이브 설치 에러  (0) 2026.02.03

프로그램: 하드디스크에 저장된 실행 파일

프로세스: 메모리(RAM)에서 실행 중인 프로그램

 

프로그램 실행 시 메모리에 로드되어 프로세스가 됨. 각 프로세스는 고유한 PID(ProcessID)를 할당받아 관리됨.

 

프로세스 생성

  • fork
    • 새로운 프로세스를 위한 메모리를 할당받아 부모 프로세스의 복사본 생성.
    • 부모 프로세스와 자식 프로세스가 둘 다 실행됨
  • exec
    • 현재 프로세스를 새로운 프로그램으로 대체.
    • 기존 프로세스의 메모리 공간에 새 프로그램 코드를 덮어씌움.
    • 원래 프로세스는 사라지고 새 프로그램만 실행됨
부팅
↓
커널이 systemd 프로세스 실행 (PID 1)
↓
systemd가 fork로 자식 프로세스들 생성
↓
데몬, 서비스 등 시스템 프로세스 실행

 

PPID: Parent PID

ps의 PPID가 2925 (bash의 PID)

 

초기 상태:
bash(2925) - 로그인 시 생성된 최초 bash


# 첫 번째 명령어: ps -l
bash(2925) fork → bash(2925) + 자식(3162)
자식(3162) exec ps → bash(2925) + ps(3162)
ps 실행 출력 후 종료 → bash(2925)만 남음

# 두 번째 명령어: bash
bash(2925) fork → bash(2925) + 자식(3288)
자식(3288) exec bash → bash(2925) + bash(3288)
새로운 bash(3288)로 진입 (bash 안에 bash)

# 세 번째 명령어: ps -l (bash(3288)에서 실행)
bash(3288) fork → bash(3288) + 자식(3324)
자식(3324) exec ps → bash(3288) + ps(3324)
ps 실행 출력:
  - bash(2925) 존재 (부모)
  - bash(3288) 존재 (현재 bash)
  - ps(3324) 존재 (지금 실행 중)
ps 종료 → bash(3288)만 남음

# 네 번째 명령어: exec ps -l (bash(3288)에서 실행)
bash(3288) exec ps → ps(3288)로 교체 (bash 3288 사라짐)
ps 실행 출력:
  - bash(2925) 존재 (부모)
  - ps(3288) 존재 (bash 3288이 ps로 바뀜)
ps 종료 → bash(2925)로 돌아감 (bash 3288은 이미 사라짐)

 

 

프로세스 종류

 

포어그라운드(Foreground)

셸에서 명령을 실행하면 해당 프로세스가 종료될 때까지 기다려야함.

터미널을 점유하여 다른 명령 실행 불가

 

백그라운드(Background)

프로세스를 뒤에서 실행시키는 방식

명령 뒤에 &를 붙이면 백그라운드 실행

터미널이 즉시 반환되어 다른 명령 실행 가능

다중 작업(Multitaking) 수행 시 유용

 

[1] : 작업번호 (Job Number)

3947 : PIP

 

포어그라운드 → 백그라운드 전환

  • Ctrl+Z: 실행 중인 프로세스 일시 중지 (Suspend)
  • jobs: 작업 상태 확인
  • bg: 일시 중지된 프로세스를 백그라운드로 재개
  • bg %작업번호: 특정 작업을 백그라운드로

백그라운드 → 포어그라운드 전환

  • fg: 가장 최근 백그라운드 프로세스를 포어그라운드로
  • fg %작업번호: 특정 백그라운드 프로세스를 포어그라운드로

 

'Linux' 카테고리의 다른 글

네트워크  (0) 2026.02.08
셸(Shell)  (0) 2026.02.05
하드웨어 & 리눅스 구조  (0) 2026.02.04
Oracle VirtualBox 7.2.6 D 드라이브 설치 에러  (0) 2026.02.03

커널(Kernel)과 사용자 간의 다리 역할.

사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행함.

 

1. 사용자가 셸을 통해 명령어 입력

2. 셸이 명령어를 해석(파싱)

3. 셸이 명령어에 해당하는 프로그램을 실행시킴

4. 실행 결과를 표준 출력과 표준 에러로 화면에 표시해줌

 

 

리다이렉션

입력이나 출력, 에러를 기존 화면에 출력하는 것이 아니라 다른 곳으로 보냄

기본 흐름:
프로그램 → stdout → 화면
프로그램 → stderr → 화면

리다이렉션:
프로그램 → stdout → 파일
프로그램 → stderr → 파일
파일 → stdin → 프로그램

 

 

1) 표준 출력 리다이렉션

> (덮어쓰기)

# 명령어 결과를 파일에 저장 (기존 내용 삭제)
ls -la > file_list.txt

# 여러 번 실행하면 계속 덮어씀
echo "첫 번째" > test.txt		# test.txt: "첫 번째"
echo "두 번째" > test.txt		# test.txt: "두 번째"

 

> > (추가)

# 명령어 결과를 파일 끝에 추가
echo "첫 번째" >> test.txt		# text.txt: "첫 번째"
echo "두 번째" >> test.txt		# text.txt: "첫 번째\n두 번째"

# 로그 파일에 계속 추가
date >> system.log
echo "서버 시작" >> system.log

 

2) 표준 에러 리다이렉션

2> (에러만 파일로)

# 에러 메세지만 파일로 저장
ls /nonexistent 2> error.log

# 저장 출력은 화면, 에러만 파일
ls /home /nonexistent 2> error.log		# 화면: /home 내용

 

2>> (에러 추가)

# 에러 계속 누적
ls /wrong1 2>> error.log
ls /wrong2 2>> error.log

 

3) stdout과 stderr 분리

# 각각 다른 파일로
ls /home /nonexistent > output.txt 2> error.txt

# 둘 다 같은 파일로
ls /home /nonexistent > result.txt 2>&1
ls /home /nonexistent &> result.txt

 

 

파이프(pipe)

어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것 ( | )

$ 명령어1 | 명령어2 → 명령어 1의 결과값이 명령어2의 입력으로 사용됨

# ls의 결과 → grep의 입력
ls -la | grep "txt"

# 여러 개 연결 가능
# 1. cat으로 파일 읽기
# 2. grep으로 ERROR만 읽기
# 3. wc로 줄 수 세기
cat application.log | grep "ERROR" | wc -l

 

 

셸 변수

특정 셸에서만 적용되는 변수

  • 변수값=값
  • 출력: echo $변수
city=seoul
echo $city  # seoul

 

 


백엔드 개발자가 알아야 할 수준~

# 변수
APP_NAME="myapp"
PORT=8080

 

# 조건문
if [ -f "app.jar" ]; then
    echo "파일 존재"
fi

# fi = if 거꾸로 = 조건문 끝~!

 

# 반복문
for file in *.log; do
	echo "Processing $file"
done

 

# 함수
start_server() {
	java -jar app.jar &		# &: 백그라운드에서 실행
}

 

 

예시: 배포 스크립트

#!/bin/bash

APP_NAME="myapp"
JAR_FILE="myapp.jar"

echo "=== 배포 시작==="

# 기존 프로세스 종료
PID=$(pgrep -f $JAR_FILE)
if [ ! -z "$PID" ]; then			# -z: 문자열이 비어있으면 참
	echo "기존 프로세스 종료: $PID"
    kill -9 $PID
fi

# 새 버전 실행
echo "새 버전 시작"
nohup java -jar $JAR_FILE > app.log 2>&1 &		# 출력, 에러 같이 app.log에
# nohup: no hangup (끊어도 계속 실행) - 터미널 닫아도 계속 실행됨

echo "배포 완료"

 

예시: 백업 스크립트

#!/bin/bash

DATA=$(date +%Y%m%d)
BACKUP_DIR="/backup"
DB_NAME="mydb"

# 백업 디렉토리 생성
mkdir -p $BACKUP_DIR

# DB 백업
mysqldump -u root -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/db_$DATE.sql

# 압축
gzip $BACKUP_DIR/db_%DATE.sql

# 7일 이상 된 백업 삭제
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete

echo "백업 완료: $BACKUP_DIR/db_$DATE.sql.gz"

'Linux' 카테고리의 다른 글

네트워크  (0) 2026.02.08
프로세스  (0) 2026.02.06
하드웨어 & 리눅스 구조  (0) 2026.02.04
Oracle VirtualBox 7.2.6 D 드라이브 설치 에러  (0) 2026.02.03

+ Recent posts