# 프로세스 목록 확인
ps aux
# 실시간 프로세스 모니터링
top
# 더 향상된 실시간 프로세스 모니터링
htop
# 프로세스 종료
kill <PID>
killall <프로세스명>
# 백그라운드 실행
command &
# 작업 관리
jobs
fg %<작업번호>
bg %<작업번호>
# 프로세스의 네임스페이스 확인
ls -la /proc/<PID>/ns/
# 새로운 네임스페이스에서 명령 실행
unshare --net --pid --fork --mount-proc bash
# 기존 프로세스의 네임스페이스에 진입
nsenter --target <PID> --net --pid bash
# 네트워크 네임스페이스 생성 및 관리
ip netns add <name>
ip netns exec <name> <command>
# 루트리스(rootless) 컨테이너 실행을 위한 사용자 네임스페이스 활용
unshare --user --map-root-user --mount --net bash
# 시간 네임스페이스 사용 (Linux 5.6+)
unshare --time bash
# cgroups 확인
ls -la /sys/fs/cgroup/ # cgroups v2
ls -la /sys/fs/cgroup/cpu /sys/fs/cgroup/memory # cgroups v1
# systemd를 통한 cgroups 관리 (현대적인 방식)
systemctl set-property <서비스명> CPUQuota=20%
systemctl set-property <서비스명> MemoryLimit=1G
systemctl set-property <서비스명> IOWeight=500
# 프로세스의 cgroup 확인
cat /proc/<PID>/cgroup
# cgroups v2 직접 조작 (고급)
echo $$ > /sys/fs/cgroup/user.slice/cgroup.procs
echo "max 100000" > /sys/fs/cgroup/user.slice/memory.max
echo "100000 500000" > /sys/fs/cgroup/user.slice/memory.high
# 컨테이너 런타임과 cgroups
podman stats # 컨테이너 리소스 사용량 모니터링
docker run --cpus=0.5 --memory=512m nginx # 리소스 제한 설정
# 파일 시스템 마운트
mount -t <파일시스템유형> <소스> <마운트포인트>
# 마운트된 파일 시스템 확인
mount
df -h
# 파일 시스템 언마운트
umount <마운트포인트>
# 네트워크 인터페이스 확인
ip addr show
ifconfig
# 라우팅 테이블 확인
ip route
route -n
# 네트워크 연결 확인
netstat -tuln
ss -tuln
# 네트워크 패킷 분석
tcpdump -i <인터페이스>
# 네트워크 네임스페이스 생성
ip netns add <네임스페이스명>
# 가상 이더넷 페어 생성
ip link add <veth1> type veth peer name <veth2>
# 가상 인터페이스를 네임스페이스에 연결
ip link set <veth2> netns <네임스페이스명>
# 파일 권한 변경
chmod 755 <파일명> # rwxr-xr-x
chmod u+x <파일명> # 소유자에게 실행 권한 추가
# 파일 소유자 변경
chown <사용자>:<그룹> <파일명>
# 특수 권한
chmod 4755 <파일명> # setuid 설정
chmod 2755 <파일명> # setgid 설정
chmod 1755 <파일명> # sticky bit 설정
# SELinux 상태 확인
getenforce
# SELinux 모드 변경
setenforce 0 # Permissive 모드
setenforce 1 # Enforcing 모드
# AppArmor 상태 확인
aa-status
# AppArmor 프로필 관리
aa-enforce /etc/apparmor.d/<프로필>
aa-complain /etc/apparmor.d/<프로필>
# 서비스 상태 확인
systemctl status kubelet
systemctl status containerd
# 서비스 제어
systemctl start <서비스>
systemctl stop <서비스>
systemctl restart <서비스>
systemctl reload <서비스> # 설정 다시 읽기
# 부팅 시 자동 시작 설정
systemctl enable <서비스>
systemctl disable <서비스>
# 서비스 로그 확인
journalctl -u kubelet -f # 실시간 로그
journalctl -u kubelet --since "1 hour ago"
journalctl -u kubelet --no-pager
# 모든 서비스 목록
systemctl list-units --type=service
systemctl list-unit-files --type=service
# 실패한 서비스 확인
systemctl --failed
# systemd 설정 다시 읽기
systemctl daemon-reload
# CPU 제한 (20%)
systemctl set-property kubelet CPUQuota=20%
# 메모리 제한 (1GB)
systemctl set-property kubelet MemoryLimit=1G
# I/O 가중치 설정 (100-1000, 기본 100)
systemctl set-property kubelet IOWeight=500
# 설정 확인
systemctl show kubelet | grep -E 'CPUQuota|MemoryLimit|IOWeight'
# IP 포워딩 활성화 (컨테이너 네트워킹에 필수)
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv6.conf.all.forwarding=1
# 브릿지 트래픽이 iptables를 통과하도록 설정 (CNI 플러그인에 필수)
sysctl -w net.bridge.bridge-nf-call-iptables=1
sysctl -w net.bridge.bridge-nf-call-ip6tables=1
# 최대 파일 디스크립터 수 증가
sysctl -w fs.file-max=2097152
# 네트워크 성능 튜닝
sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
sysctl -w net.core.netdev_max_backlog=16384
# ARP 캐시 설정 (대규모 클러스터)
sysctl -w net.ipv4.neigh.default.gc_thresh1=80000
sysctl -w net.ipv4.neigh.default.gc_thresh2=90000
sysctl -w net.ipv4.neigh.default.gc_thresh3=100000
# 현재 설정 확인
sysctl net.ipv4.ip_forward
sysctl -a | grep bridge-nf-call
# 영구 설정 (/etc/sysctl.conf 또는 /etc/sysctl.d/*.conf)
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
# 설정 적용
sysctl --system
# 모듈 로드
modprobe overlay # OverlayFS (컨테이너 스토리지)
modprobe br_netfilter # 브릿지 네트워킹
modprobe ip_vs # IPVS 로드 밸런싱 (kube-proxy IPVS 모드)
modprobe ip_vs_rr # Round Robin 알고리즘
modprobe ip_vs_wrr # Weighted Round Robin
modprobe ip_vs_sh # Source Hashing
# 로드된 모듈 확인
lsmod | grep overlay
lsmod | grep br_netfilter
# 모듈 정보 확인
modinfo overlay
# 부팅 시 자동 로드 설정
cat <<EOF | sudo tee /etc/modules-load.d/kubernetes.conf
overlay
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
# 모듈 언로드
modprobe -r <모듈명>
# 커널 버전 확인
uname -r
# 커널 컴파일 옵션 확인
cat /boot/config-$(uname -r) | grep OVERLAY
cat /boot/config-$(uname -r) | grep NETFILTER
# 사용 가능한 커널 기능 확인
cat /proc/filesystems # 지원되는 파일 시스템
cat /proc/sys/net/ipv4/ip_forward # IP 포워딩 상태
# 현재 제한 확인
ulimit -a
# 주요 제한 항목
ulimit -n # 열 수 있는 파일 디스크립터 수
ulimit -u # 최대 프로세스 수
ulimit -m # 최대 메모리 크기
ulimit -v # 가상 메모리 크기
# 제한 변경 (현재 세션)
ulimit -n 65536 # 파일 디스크립터를 65536으로 증가
# 영구 설정 (/etc/security/limits.conf)
sudo tee -a /etc/security/limits.conf <<EOF
* soft nofile 65536
* hard nofile 65536
* soft nproc 32768
* hard nproc 32768
EOF
# 특정 사용자/그룹 설정
sudo tee -a /etc/security/limits.conf <<EOF
root soft nofile 65536
root hard nofile 65536
@docker soft nofile 65536
@docker hard nofile 65536
EOF
# PAM 설정 확인
cat /etc/pam.d/common-session
cat /etc/pam.d/common-session-noninteractive
# limits.conf가 적용되도록 PAM 설정에 추가
echo "session required pam_limits.so" | sudo tee -a /etc/pam.d/common-session
# 프로세스의 현재 리소스 제한 확인
cat /proc/<PID>/limits
# 특정 프로세스의 파일 디스크립터 확인
ls -l /proc/<PID>/fd | wc -l
# 전체 시스템 로그
journalctl
# 특정 서비스 로그
journalctl -u kubelet
journalctl -u containerd
journalctl -u docker
# 실시간 로그 (tail -f와 유사)
journalctl -u kubelet -f
# 시간 범위 지정
journalctl --since "2025-11-24 10:00:00"
journalctl --since "1 hour ago"
journalctl --since yesterday
journalctl --until "2025-11-24 12:00:00"
# 우선순위별 필터링
journalctl -p err # 에러만
journalctl -p warning # 경고 이상
journalctl -p debug # 디버그 포함 모두
# 출력 형식 변경
journalctl -u kubelet -o json # JSON 형식
journalctl -u kubelet -o json-pretty # Pretty JSON
journalctl -u kubelet -o cat # 메시지만
# 부팅 로그
journalctl -b # 현재 부팅 로그
journalctl -b -1 # 이전 부팅 로그
journalctl --list-boots # 부팅 목록
# 디스크 사용량 확인
journalctl --disk-usage
# 로그 정리
journalctl --vacuum-time=7d # 7일 이상된 로그 삭제
journalctl --vacuum-size=1G # 1GB 이상 로그 삭제
# journald 설정 파일
sudo vi /etc/systemd/journald.conf
# 주요 설정 옵션
# Storage=persistent # 디스크에 영구 저장
# SystemMaxUse=1G # 최대 디스크 사용량
# SystemKeepFree=500M # 최소 여유 공간
# MaxRetentionSec=1month # 최대 보관 기간
# 설정 적용
sudo systemctl restart systemd-journald
# syslog 파일 위치
/var/log/syslog # Debian/Ubuntu
/var/log/messages # RHEL/CentOS
# 실시간 로그 확인
tail -f /var/log/syslog
# 로그 검색
grep "kubelet" /var/log/syslog
grep -i "error" /var/log/syslog
# logrotate 설정
sudo vi /etc/logrotate.d/kubernetes
# 예시 설정
/var/log/kubernetes/*.log {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
}
# 수동으로 로테이션 실행
sudo logrotate -f /etc/logrotate.d/kubernetes
# DNS 설정 파일
cat /etc/resolv.conf
# 예시 설정
nameserver 8.8.8.8
nameserver 8.8.4.4
search cluster.local svc.cluster.local
options ndots:5
# DNS 조회 테스트
nslookup kubernetes.default.svc.cluster.local
dig kubernetes.default.svc.cluster.local
# hosts 파일
cat /etc/hosts
# systemd-resolved 상태 확인
systemctl status systemd-resolved
# DNS 서버 확인
resolvectl status
# DNS 캐시 통계
resolvectl statistics
# DNS 캐시 초기화
resolvectl flush-caches
# NetworkManager (RHEL/CentOS 8+, Ubuntu 18.04+)
nmcli connection show
nmcli device status
# netplan (Ubuntu 18.04+)
cat /etc/netplan/*.yaml
# 예시 netplan 설정
network:
version: 2
ethernets:
eth0:
dhcp4: true
nameservers:
addresses: [8.8.8.8, 8.8.4.4]
# 설정 적용
sudo netplan apply
# chronyd 설치 (RHEL/CentOS)
sudo yum install chrony
# chronyd 설치 (Ubuntu/Debian)
sudo apt install chrony
# 서비스 상태 확인
systemctl status chronyd
# 시간 동기화 상태 확인
chronyc tracking
# NTP 서버 목록
chronyc sources
# 상세 정보
chronyc sourcestats
# 수동 시간 동기화
sudo chronyc makestep
# 설정 파일
sudo vi /etc/chrony.conf
# 주요 설정
# NTP 서버 설정
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst
# 빠른 동기화
makestep 1.0 3
# 설정 적용
sudo systemctl restart chronyd
# 상태 확인
timedatectl status
# NTP 동기화 상태
timedatectl show-timesync --all
# 설정 파일
sudo vi /etc/systemd/timesyncd.conf
# 예시 설정
[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=time.google.com
# 서비스 재시작
sudo systemctl restart systemd-timesyncd
# 현재 시간 및 시간대 확인
timedatectl
# 시간대 목록
timedatectl list-timezones
# 시간대 변경
sudo timedatectl set-timezone Asia/Seoul
# 시간 수동 설정 (NTP 비활성화 시)
sudo timedatectl set-time "2025-11-24 12:00:00"
# NTP 활성화/비활성화
sudo timedatectl set-ntp true
# 패키지 목록 업데이트
sudo apt update
# 패키지 업그레이드
sudo apt upgrade
# 패키지 설치
sudo apt install <패키지명>
# 패키지 제거
sudo apt remove <패키지명>
sudo apt purge <패키지명> # 설정 파일도 함께 제거
# 패키지 검색
apt search <키워드>
# 패키지 정보 확인
apt show <패키지명>
# 설치된 패키지 목록
apt list --installed
# 저장소 추가 (Kubernetes 예시)
sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
# 불필요한 패키지 정리
sudo apt autoremove
sudo apt autoclean
# 패키지 설치
sudo yum install <패키지명>
sudo dnf install <패키지명> # Fedora/RHEL 8+
# 패키지 업데이트
sudo yum update
sudo dnf update
# 패키지 제거
sudo yum remove <패키지명>
sudo dnf remove <패키지명>
# 패키지 검색
yum search <키워드>
dnf search <키워드>
# 패키지 정보
yum info <패키지명>
dnf info <패키지명>
# 설치된 패키지 목록
yum list installed
dnf list installed
# 저장소 추가 (Kubernetes 예시)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
# 캐시 정리
sudo yum clean all
sudo dnf clean all
ls -la # 파일 목록 (숨김 파일 포함)
cd <디렉토리> # 디렉토리 변경
pwd # 현재 디렉토리 확인
mkdir -p <경로> # 디렉토리 생성 (필요시 상위 디렉토리도 생성)
rm -rf <경로> # 파일/디렉토리 삭제
cp -r <소스> <대상> # 파일/디렉토리 복사
mv <소스> <대상> # 파일/디렉토리 이동 또는 이름 변경
find <경로> -name "<패턴>" # 파일 검색
cat <파일> # 파일 내용 출력
less <파일> # 파일 내용 페이지별 확인
grep "<패턴>" <파일> # 파일에서 패턴 검색
sed 's/<패턴>/<대체>/' <파일> # 텍스트 치환
awk '{print $1}' <파일> # 텍스트 처리
uname -a # 커널 정보
lsb_release -a # 배포판 정보
free -h # 메모리 사용량
df -h # 디스크 사용량
du -sh <경로> # 디렉토리 크기
systemctl status <서비스> # 서비스 상태 확인
systemctl start/stop/restart <서비스> # 서비스 제어
journalctl -u <서비스> # 서비스 로그 확인