네트워크 관리
1. IP 주소 확인 및 관리
기본 확인 명령어
# 네트워크 인터페이스 확인
ip addr show
ip a
# 특정 인터페이스 확인
ip addr show dev ens160
출력 예시:
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.4.128/24 brd 192.168.4.255 scope global dynamic
2. IP Route (라우팅 테이블)
개념: 네트워크 패킷이 목적지까지 가는 경로를 설정하는 명령어
목적 명령어 설명
| 조회 | ip route show | 현재 설정된 모든 경로 확인 |
| 추가 | ip route add 10.0.0.0/24 via 192.168.1.1 | 특정 네트워크 대역의 경로 추가 |
| 기본 게이트웨이 | ip route add default via 192.168.1.1 | 기본 게이트웨이 설정 (모르는 주소는 여기로) |
라우팅 테이블 관리
# 라우팅 테이블 확인
ip route show
# 게이트웨이 추가
sudo ip route add default via 192.168.1.1 dev ens160
3. NetworkManager CLI (nmcli) - 권장 도구
특징: IP 주소를 완전히 변경할 수 있으며, 재부팅 후에도 설정이 유지됨
연결 상태 확인
# 모든 연결 확인
nmcli connection show
# 활성화된 장치 확인
nmcli device status
# 특정 인터페이스 상세 정보
nmcli device show ens160
IP 주소 변경하기 (고정 IP 설정)
전체 설정을 한 번에 변경:
sudo nmcli con mod ens160 \
ipv4.addresses 192.168.4.100/24 \
ipv4.gateway 192.168.4.2 \
ipv4.dns 168.126.63.1 \
ipv4.method manual
# 네트워크 재시작
sudo nmcli con down ens160 && sudo nmcli con up ens160
# 확인
ip a
각 항목 설명:
항목 설명 예시
| ipv4.addresses | 설정할 IP 주소/서브넷 마스크 | 192.168.4.100/24 |
| ipv4.gateway | 게이트웨이 (공유기) 주소 | 192.168.4.2 |
| ipv4.dns | DNS 서버 주소 | 168.126.63.1 (KT), 8.8.8.8 (Google) |
| ipv4.method | IP 할당 방식 | manual (고정), auto (DHCP) |
DHCP로 변경 (자동 IP 할당)
sudo nmcli connection modify ens160 ipv4.method auto
sudo nmcli connection up ens160
주의사항:
- IP 변경 시 SSH 연결이 끊어지므로 새 IP로 재접속 필요
- 게이트웨이는 ip route | grep default 명령어로 확인 가능
- 192.168.4.1은 보통 공유기가 사용하므로 피할 것 (충돌 위험)
네트워크 포트 확인
netstat vs ss
명령어 설명 비고
| netstat | 전통적인 네트워크 상태 확인 도구 | 구버전 |
| ss | 최신 네트워크 상태 확인 도구 (권장) | 더 빠르고 효율적 |
자주 사용하는 옵션
# 모든 네트워크 연결 확인
netstat | less
# TCP 포트 리스닝 상태 확인
netstat -ntl
# -n: 숫자로 표시
# -t: TCP만
# -l: LISTEN 상태만
# ss로 동일한 작업
ss -ntl
# 특정 포트 확인 (예: 80번)
ss -ntlp | grep 80
주요 포트 번호:
포트 서비스
| 22 | SSH |
| 80 | HTTP (웹서버) |
| 443 | HTTPS |
| 3306 | MariaDB/MySQL |
| 9090 | Cockpit (웹 관리 도구) |
Cockpit 웹 관리 도구
Cockpit 시작 및 접속
# Cockpit 소켓 활성화 및 시작 (권장)
sudo systemctl enable --now cockpit.socket
# 상태 확인
sudo systemctl status cockpit.socket
# 포트 확인 (9090번 포트)
ss -ntlp | grep 9090
브라우저 접속:
https://192.168.4.128:9090
https를 사용해야 하며, 보안 경고가 나오면 "계속 진행" 선택
방화벽 설정
# 방화벽 상태 확인
sudo systemctl status firewalld
# 방화벽 중지 및 비활성화
sudo systemctl stop firewalld
sudo systemctl disable firewalld
웹 서버 관리 (Nginx)
Nginx 설치 및 시작
# Nginx 설치
sudo dnf install nginx -y
# Nginx 시작
sudo systemctl start nginx
# 부팅 시 자동 시작 설정
sudo systemctl enable nginx
# 상태 확인
sudo systemctl status nginx
# 포트 확인 (80번)
ss -ntlp | grep 80
Apache와 Nginx 충돌 해결
문제: 둘 다 80번 포트를 사용하려고 해서 충돌 발생
해결 방법 1 - Apache 중지:
# Apache 중지
sudo systemctl stop httpd
sudo systemctl disable httpd
# Nginx 재시작
sudo systemctl restart nginx
해결 방법 2 - Nginx 포트 변경:
# 설정 파일 수정
sudo vi /etc/nginx/nginx.conf
# 'listen 80;' 부분을 'listen 8080;'으로 변경
# Nginx 재시작
sudo systemctl restart nginx
브라우저 접속:
- 기본: http://192.168.4.128
- 포트 변경 시: http://192.168.4.128:8080
Vi 에디터 사용법
모드 개념
- 명령 모드 (기본): 커서 이동, 삭제, 복사 등
- 입력 모드: 텍스트 입력
- 명령행 모드: 저장, 종료, 검색 등
1. 커서 이동
키 동작
| h | 왼쪽 |
| j | 아래 |
| k | 위 |
| l | 오른쪽 |
| 0 또는 ^ | 줄 맨 앞 |
| $ | 줄 맨 뒤 |
| gg | 문서 맨 처음 |
| G | 문서 맨 마지막 |
| 숫자G | 해당 줄로 이동 |
2. 입력 모드 전환
키 동작
| i | 현재 커서 위치에서 입력 |
| I | 줄 맨 앞에서 입력 |
| a | 커서 다음 위치에서 입력 |
| A | 줄 맨 끝에서 입력 |
| o | 아래에 새 줄 추가 후 입력 |
| O | 위에 새 줄 추가 후 입력 |
| ESC | 명령 모드로 돌아가기 |
3. 삭제 및 수정
명령 동작
| x | 커서 위치 문자 삭제 |
| dd | 현재 줄 삭제 |
| dw | 단어 삭제 |
| r문자 | 한 글자 치환 |
| u | 실행 취소 (Undo) |
| U | 현재 줄 전체 취소 |
4. 저장 및 종료
명령 동작
| :w | 저장 |
| :q | 종료 |
| :wq | 저장 후 종료 |
| :q! | 저장하지 않고 강제 종료 |
| ZZ | 저장 후 종료 (명령 모드에서) |
5. 검색 및 치환
명령 동작
| /패턴 | 아래 방향 검색 |
| ?패턴 | 위 방향 검색 |
| n | 다음 검색 결과 |
| N | 이전 검색 결과 |
| :%s/old/new/g | 전체 문서에서 old를 new로 치환 |
| :%s/old/new/gc | 치환 전 확인 |
6. 환경 설정
명령 동작
| :set number | 줄 번호 표시 |
| :set nonumber | 줄 번호 숨기기 |
| :set ts=4 | 탭 간격 4칸 |
| :set autoindent | 자동 들여쓰기 |
Vi 대신 Nano 사용하기:
# Nano 에디터로 파일 열기
nano 파일명
# Ctrl + X: 종료
# Ctrl + O: 저장
# Ctrl + K: 줄 삭제
기본 명령어 총정리
시스템 관리
# 시스템 정보
uname -a # 시스템 정보
hostname # 호스트명
uptime # 가동 시간
# 사용자 관리
whoami # 현재 사용자
who # 로그인 사용자
id # 사용자 ID 정보
# 시스템 종료/재시작
shutdown -h now # 즉시 종료
reboot # 재시작
서비스 관리 (systemctl)
# 서비스 시작/중지/재시작
sudo systemctl start 서비스명
sudo systemctl stop 서비스명
sudo systemctl restart 서비스명
# 상태 확인
sudo systemctl status 서비스명
# 부팅 시 자동 시작
sudo systemctl enable 서비스명
sudo systemctl disable 서비스명
# 활성화 + 시작 (한 번에)
sudo systemctl enable --now 서비스명
자주 사용하는 팁
1. 터미널 단축키
단축키 동작
| Ctrl + C | 실행 중인 명령 중단 |
| Ctrl + Z | 프로세스 일시 중지 |
| Ctrl + D | 로그아웃 (exit와 동일) |
| Ctrl + L | 화면 정리 (clear와 동일) |
| Tab | 자동 완성 |
2. 명령어 이력
# 명령어 기록 보기
history
# 이전 명령어 재실행
!!
# 특정 번호 명령어 실행
!번호
3. 파이프와 리다이렉션
# 파이프 (명령어 연결)
ps aux | grep nginx
# 출력 저장
ls -l > 파일명
# 출력 추가
echo "내용" >> 파일명
1. 웹 서버 및 네트워크 기본 설정
Nginx 설정 파일 위치
# HTML 파일 기본 경로
cd /var/www/html
# Nginx 설정 파일
/etc/nginx/nginx.conf
고정 IP 설정 방법
sudo nmcli con mod ens160 ipv4.addresses 192.168.4.128/24
sudo nmcli con mod ens160 ipv4.gateway 192.168.4.1
sudo nmcli con mod ens160 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli con mod ens160 ipv4.method manual
sudo nmcli con up ens160
IP 주소가 자동으로 변경되는 이유
- DHCP 임대 시간이 만료되어 IP가 자동으로 재할당됨
- DHCP 모드에서는 라우터가 일정 시간마다 IP를 새로 배정
- 해결책: 고정 IP 설정으로 변경 방지
Root 계정 전환
sudo su -
sudo -i
Nginx 상태 확인
sudo systemctl status nginx
2. GRUB (부트로더) 이해하기
GRUB의 개념
GRUB(GRand Unified Bootloader)은 컴퓨터가 켜지자마자 만나는 시스템의 안내 데스크입니다. 하드웨어(BIOS/UEFI)가 깨어난 후, 운영체제를 하드디스크에서 메모리로 로딩하여 실행하는 역할을 담당합니다.
GRUB의 핵심 역할
- 멀티 부팅 선택: 윈도우와 리눅스가 함께 설치된 경우 어떤 OS로 부팅할지 선택
- 커널 로딩: 리눅스 커널을 메모리에 올리고 제어권 이양
- 부팅 옵션 수정: 시스템 문제 발생 시 부팅 방식 변경 가능
GRUB2 특징
- 최신 리눅스 배포판(CentOS 7/8, Ubuntu 등)에서 사용
- 설정 파일: /boot/grub2/grub.cfg
- 보안 강화: grub2-set-password로 암호 설정 가능
GRUB 사용이 필요한 상황
1. 비밀번호 복구 (긴급 수리)
# 부팅 시 e를 눌러 GRUB 편집
# linux16 라인 끝에 추가:
rd.break
# 또는
init=/bin/bash
# 복구 모드 진입 후:
mount -o remount,rw /
chroot /
passwd root
touch /.autorelabel
exit
reboot
2. SELinux 비활성화 (비밀번호 복구 시 필요)
vi /etc/sysconfig/selinux
# SELINUX=disabled로 설정
3. GRUB 패스워드 설정 (보안 강화)
grub2-set-password
grub2-mkconfig -o /boot/grub2/grub.cfg
3. 부팅 과정 3단계
단계 이름 역할 비유
| 1번 주자 | GRUB | 하드디스크에서 리눅스를 찾아 깨우는 역할 | 문지기/안내데스크 |
| 2번 주자 | systemd | 모든 서비스와 프로그램을 관리하는 총대장 | 총괄 매니저 |
| 3번 (상태) | Target | 시스템을 어떤 모드로 운영할지 정한 목적지 | 영업 모드 (주간/야간) |
4. 런레벨과 Target
전통적인 런레벨 (SysV init)
runlevel # 현재 런레벨 확인
런레벨 설명
| 0 | 시스템 종료 (halt) |
| 1 | 단일 사용자 모드 (관리자 유지보수) |
| 2 | 멀티 사용자 모드 (네트워크 없음) |
| 3 | 멀티 사용자 모드 (네트워크 포함, CLI 전용) |
| 4 | 예약된 사용자 정의 모드 |
| 5 | 멀티 사용자 모드 + GUI (X 윈도우) |
| 6 | 시스템 재부팅 (reboot) |
런레벨 변경
sudo init 3 # CLI 모드로 전환
systemd Target (현대 방식)
# 현재 타겟 확인
systemctl get-default
# 타겟 변경 (즉시 적용)
systemctl isolate multi-user.target
# 부팅 시 기본 타겟 변경
systemctl set-default graphical.target
SysV init vs systemd 비교
구분 SysV init systemd
| 구조 | 직렬 실행 (순차적) | 병렬 실행 (의존성 관리) |
| 설정 파일 | /etc/inittab, /etc/rc.d/ | /etc/systemd/system/ |
| 런레벨 | 0~6 (고정 숫자) | 다양한 Target (유연) |
| 부팅 속도 | 느림 | 빠름 |
| 서비스 제어 | service, chkconfig | systemctl |
| 현재 상태 확인 | runlevel | systemctl get-default |
프로세스 트리 확인
pstree | head
5. 사용자 계정 관리
패스워드 파일 확인
head -n 5 /etc/passwd
grep user1 /etc/shadow
해시 알고리즘
- 데이터를 해시 알고리즘에 통과시켜 일정한 크기의 값 추출
- 데이터 무결성 체크에 사용 (MD5, SHA)
- 단방향 알고리즘으로 해시값으로부터 평문 복원 불가능
/etc/skel 디렉토리
새로운 사용자를 위한 모델하우스
/etc/skel은 새 사용자 계정 생성 시 홈 디렉토리에 복사되는 기본 파일들이 저장된 곳입니다.
주요 파일들:
- .bashrc: 로그인 시 실행되는 개인용 설정 (alias 등)
- .bash_profile: 환경 변수 설정
- .bash_logout: 로그아웃 시 실행되는 작업
보안 관점:
- 백도어 삽입 위험: /etc/skel/.bashrc에 악성 스크립트 삽입 시 모든 신규 사용자에게 영향
- 권한 설정 확인 필요
확인 예시:
ls -a /etc/skel
ls -a /home/user3
6. 환경 변수 PATH 설정
PATH에 디렉토리 추가
export PATH=$PATH:$HOME/lab
echo $PATH
설정 이유:
- 설정 전: 전체 경로 입력 필요 (/root/lab/hack.sh)
- 설정 후: 어디서든 파일명만으로 실행 가능 (hack.sh)
7. 계정 상태 점검
항목 명령
| 계정 정보 확인 | cat /etc/passwd |
| 암호 상태 확인 | passwd -S user01 |
| 그룹 확인 | id user01 |
| 암호 정책 확인 | chage -l user01 |
| sudo 로그 확인 | tail -f /var/log/secure |
암호 사용 기간 설정
chage -l username # 현재 설정 확인
sudoers 설정
visudo # 안전한 편집 방법
설정 예시:
user2 ALL=/sbin/shutdown -h +10, /usr/bin/systemctl
특정 사용자에게 특정 명령어만 root 권한으로 실행 허용
8. 프로세스(Process) 관리
Process의 개념
- 시스템에서 동작하는 모든 프로그램
- 모든 프로세스는 고유한 PID(Process ID) 보유
- 커널과 관리자는 PID를 통해 프로세스 관리 및 추적
데몬(Daemon)
- 커널 상에서 백그라운드 모드로 작동
- 요청이 있을 때만 동작하는 프로세스
- CPU 부하는 적지만 메모리 자원 차지
- 데몬이 많으면 시스템이 느려지거나 다운될 수 있음
메모리 상태 확인
free -h
프로세스 확인
ps -ef | head
pgrep sleep
프로세스 생성 방식
- exec: 프로그램 동작 시 해당 프로세스로 변경
- fork: 자식 프로세스를 생성하여 동작
9. 시그널(Signal)
주요 시그널
kill -l # 모든 시그널 목록 확인
시그널 이름 번호 명령 설명
| SIGHUP | 1 | HUP | 프로세스 재실행 |
| SIGINT | 2 | INT (Ctrl+C) | 프로세스 종료 |
| SIGKILL | 9 | KILL | 커널이 강제 종료 |
| SIGTERM | 15 | TERM | 데이터 저장 후 정상 종료 |
| SIGTSTP | 20 | TSTP (Ctrl+Z) | 작업 중단 (종료 아님) |
10. 프로세스 우선순위 및 백그라운드 작업
nice - 우선순위 설정
nice -n 값 명령어
- 기본값: 10
- 값이 작을수록 높은 우선순위
백그라운드 작업 관리
jobs # 백그라운드 작업 목록
fg # 포그라운드로 전환
bg # 백그라운드로 전환
nohup - 로그아웃 후에도 작업 유지
nohup tar zcvf usr_bin.tar.gz /usr/bin &
의미: 로그아웃해도 작업이 완료될 때까지 계속 실행
결과 파일:
-rw-------. 1 root root 25K nohup.out
-rw-r--r--. 1 root root 52M usr_bin.tar.gz
tar 명령어 옵션:
- z: gzip 압축
- c: 아카이브 생성
- v: 진행 상황 출력
- f: 파일명 지정
오늘 공부 후기
- 명령어는 직접 쳐보면서 익히기
- 시스템 로그 확인 습관화 (/var/log/)
- 테스트 환경(가상머신)에서 먼저 실습
- 백업 후 중요한 설정 변경하기
- 문서화 습관 들이기
'리눅스' 카테고리의 다른 글
| [Linux: 수업3주차] 시스템 관리 (1) | 2026.01.22 |
|---|---|
| [Linux: Nginx] 웹 서버 설정 및 HTML 페이지 만들기 (0) | 2026.01.13 |
| [Linux:수업 1주차] 리눅스 기본 명령어 가이드 (0) | 2026.01.07 |
| [VMware] Rocky Linux 9 SSH 비밀번호 없이 접속하기 & 웹 서버 구축 가이드 (0) | 2026.01.07 |
| Rocky Linux SSH 키 인증 설정 가이드(1) (0) | 2026.01.06 |