개요
시스템을 조작하거나, 시스템 상의 리소스를 확인하기 위한 명령어들을 탐구
계정
# 간단한 사용자 조회
# id -un와 동일
whoami
# 근본은 id
# https://blog.naver.com/fjrzlgnlwns/207257979
# effective (권한을 위한) / real (실제 구분을 위한)
# -ugG (effective) 중 하나를 골라 사용
# real을 원한다면 -ugG 중 하나와 r을 합쳐 사용
# 숫자가 아닌 이름을 원하면 -ugG 중 하나와 n을 합쳐 사용
id
Shell
복사
배포판 확인
# 옵션 없이 사용 시 -v를 기준으로 동작
# 정보가 몇 없기에 -a를 주로 이용하여 모든 정보를 출력
# 자동화 스크립트를 만들 때 기타 특정 옵션 사용
lsb_release
Shell
복사
리소스 확인
hostname
# https://man7.org/linux/man-pages/man1/hostnamectl.1.html
# 기본은 hostnamectl status로 동작
# hostname, icon-name, chassis, deployment, location의 GET/SET 가능
# 명령어 이후에 인자가 없다면 GET 동작
hostnamectl
Shell
복사
cpu
# https://www.man7.org/linux/man-pages/man1/htop.1.html
# CPU를 비롯한 리소스 사용량에 대한 정보를 제공
# sorting과 pid 기반 필터링도 좋음
htop
# CPU 구조 상세 정보
lscpu
Shell
복사
memory
# -h Human Readable로 보통 많이 사용
# --kilo, --mega 등은 -k -m과는 다르니 주의
free -h
Shell
복사
disk
# 총 디스크 공간과 가용량을 출력
# 파일 시스템 타입과 함께 Human Readable 출력을 주로 사용
# 특정 경로를 명시하면 해당 경로의 파일 시스템을 대상으로 동작 (df -Th /)
df -Th
# 디스크 사용량 총합을 Human Readable하게 출력
# 특정 경로가 없다면 현재 경로를 기준으로 동작
df -sh
# https://man7.org/linux/man-pages/man2/mount.2.html
# 시스템의 마운트 정보를 표기
# 그 외에 FS 타입과 옵션들을 기재하여 특정 경로에 마운트 용도로 사용
mount
# https://man7.org/linux/man-pages/man8/findmnt.8.html
# 시스템의 마운트 정보를 트리 형태로 표기
# -t 옵션을 통해 FS 타입만 지정하여 확인 가능
# -D 옵션으로 df와 동일하게 용량 확인도 가능
findmnt -A
Shell
복사
네트워크
IP
# https://man7.org/linux/man-pages/man8/ip.8.html
# -br은 brief / -c는 color / a는 addr의 약어
# ifconfig와 동일한 결과지만 간단한 형식으로 출력
ip -br -c a show
# https://man7.org/linux/man-pages/man8/ip-route.8.html
# ip 라우팅 테이블 조회 및 관리
# 정리된 테이블을 보고 싶다면 route -n 이용
# add / del / change / append /replace 등으로 정적 라우팅 경로 구성 가능
ip route
Shell
복사
IP Tables
# https://man7.org/linux/man-pages/man8/iptables.8.html
# https://www.systutorials.com/port-forwarding-using-iptables/
# https://bcho.tistory.com/1366
# IPv4와 IPv6의 filtering 및 nat 관리를 위한 IP Tables 툴
# -L은 목록
# -t는 테이블 지정인데, filter / nat / mangle / raw / security 사용
# filter - 가장 많이 사용되는 테이블, 트래픽 컨트롤하는 방화벽
# nat - 들어온 패킷을 다른 포트 혹은 다른 호스트로 라우팅
# mangle - 패킷 헤더 변경을 위해 사용
iptables -t filter -L
iptables -t nat -L
# 규칙 추가
# IP Tables 관리를 위한 명령어는 -ACDV 사용 가능
# -p로 프로토콜 명시 가능, 프로토콜은 tcp, udp 등 사용 가능
# -j로 타겟 명시 가능, 타겟은 ACCEPT, DROP, RETURN 사용 가능
iptables -A <chain> -p <protocol> --dport <port> -j <target>
iptables -A <chain> -s <ip-address> -j <target>
# 삭제를 위해선 규칙의 라인 넘버 확인 필요
iptables -L --line-numbers
# 규칙 삭제
# 체인은 INPUT, FORWARD, OUTPUT, PREROUTING, POSTROUTING
iptables -D <chain> <line-number>
Shell
복사
도메인 네임
# 도메인 네임과 IP 주소 맵핑
# /etc/hosts를 먼저 확인 후 네임 서버를 확인하는 식으로 동작
# 예전에는 파일 수정 후 /etc/init.d/networking이라는 네트워크 서비스 재시작이 필요했지만, 지금은 즉각 수정 내용이 반영
cat /etc/hosts
Shell
복사
프로세스
명령어
# https://man7.org/linux/man-pages/man1/ps.1.html
# 프로세스 목록 조회에 가장 많이 사용되는 명령어
# -가 붙은 옵션과 아닌 옵션에 차이가 있음
# -e는 -A와 동일하며 모든 프로세스를 대상으로 지정
# -f는 Full Format 리스팅 (프로세스 중심의 상세 정보)
# u는 사용자가 프로세스에서 주로 궁금해하는 정보를 함께 출력
# f는 프로세스를 트리 형태로 출력
# a는 시스템 상의 모든 사용자의 모든 프로세스 중 터미널을 공유하는 프로세스들을 출력
# x는 시스템 상의 모든 사용자의 모든 프로세스 중 터미널을 공유하지 않는 프로세스들을 출력
# -e와 ax가 전체 프로세스로 보일 수 있으나 -e는 시스템 관점이고 ax는 사용자 관점임에 따라 -e가 조금 더 많은 프로세스를 보일 수 있음
ps -ef
ps aux
ps auf
# https://man7.org/linux/man-pages/man1/pstree.1.html
# 프로세스를 트리 형태로 출력
# -a를 통해 프로세스 실행에 사용된 인자 확인 가능
# -p를 통해 pid로 출력 가능
# -n을 통해 동일한 부모를 가진 프로세스들을 묶고 pid 기준으로 정렬하여 출력
pstree -ap
# https://man7.org/linux/man-pages/man1/pgrep.1.html
# 특정 프로세스를 grep하여 pid 확인
# -u 옵션을 통해 (effective) 사용자가 실행한 프로세스 확인 가능
# [터미널2]
pgrep sleep -u elasticsearch
Shell
복사
파일
명령어에서 확인 가능한 정보들은 커널에서 동적으로 생성하는 정보들을 통해 실시간으로 제공 받음
/proc 디렉토리에서 시스템의 상태와 HW 정보를 확인할 수 있으며, /proc/<pid> 디렉토리 내에 프로세스 상태를 확인 가능
image from https://x.com/b0rk/status/981159808832286720
시스템 상태 및 HW 정보
# 시스템에서 사용하는 상세한 CPU 정보 (CPU 모델, 코어, 클럭 등)
cat /proc/cpuinfo
# 시스템에서의 현재 메모리 사용 현황 (전체, 사용 중, 가용 가능, 캐시, VIRT, SWAP 등)
cat /proc/meminfo
# 시스템이 부팅된 후 경과된 시간 (총 가동 시간, 시스템 유휴 시간)
cat /proc/uptime
# 시스템의 부하 상태 (1, 5, 15분 간의 평균 부하, 현재 실행 중인 프로세스 / 총 프로세스, 마지막으로 실행한 PID)
cat /proc/loadavg
# 시스템에서 인식된 파티션 정보 (디스크 장치 및 파티션 크기)
cat /proc/partitions
# 커널 버전, GCC 버전, 컴파일된 날짜
cat /proc/version
# 커널이 인식하고 있는 파일 시스템 목록
cat /proc/filesystems
Shell
복사
프로세스 상태
# 프로세스를 실행할 때 사용된 명령어와 인자
cat /proc/<cat>/cmdline
# 프로세스의 현재 작업 디렉터리에 대한 심볼릭 링크
ls -l /proc/<pid>/cwd
# 프로세스에서 사용하는 환경 변수로 각 환경 변수는 NULL 문자로 구분
cat /proc/<pid>/environ
# 프로세스의 실행 파일에 대한 심볼릭 링크
ls -l /proc/<pid>/exe
# 프로세스가 열어 놓은 모든 FD들의 심볼릭 링크
ls -l /proc/<pid>/fd
# 프로세스가 사용하고 있는 메모리 맵 (메모리 영역의 시작과 끝 주소, 접근 권한, 맵핑된 파일 등)
cat /proc/<pid>/maps
# 프로세스의 상태 정보
cat /proc/<pid>/stat
# 프로세스의 상세한 상태를 사람이 읽기 편한 형태로 제공
cat /proc/<pid>/status
Shell
복사