Search

시스템 관련 명령어

Tags
unix
command
cli
system
resource
Created
2024/08/30 18:35
Created time
2024/08/30 09:35
category
unix

개요

시스템을 조작하거나, 시스템 상의 리소스를 확인하기 위한 명령어들을 탐구

계정

# 간단한 사용자 조회 # 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> 디렉토리 내에 프로세스 상태를 확인 가능

시스템 상태 및 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
복사