최근에 ec2를 다룰 일이 많아지면서 리눅스 명령어를 사용할 일이 많습니다.
기본 명령어만 알면 충분하지 않나 싶으면서도 프로세스나 시스템 관리를 하기엔 부족합니다.
매번 검색하면서 사용해도 되지만 이왕이면 정리해두는 게 좋겠다 싶어서 적어봅니다.
명령어 - 내용 - 자주 사용하는 옵션 - 예시 순으로 적겠습니다
fuser (find user)
파일이나 소켓, 포트 등을 사용하는 프로세스를 찾습니다.
자주 사용하는 옵션
- -n <protocol> : 네트워크 프로토콜을 지정합니다.
- -v, --verbose : 더 자세한 정보를 출력합니다.
- -k : 찾은 프로토콜을 죽이겠다. (SIGKILL = 강제종료기 때문에 조심해서 사용)
예시
$ sudo fuser -n tcp 8080
루트 권한을 통해 tcp포트 8080번에서 돌아가는 프로세스를 출력합니다.
ps (process state)
프로세스 상태를 확인합니다.
- -e : 시스템의 모든 프로세스를 출력합니다.
- -f : 설명 포맷을 더 자세히 출력합니다.
보통 grep이랑 파이핑하여 자주 사용합니다.
예시
$ ps -ef | grep java
- 현재 실행 중인 프로세스 중 java로 시작하는 걸 찾습니다.
ss (socket statistics)
네트워크 소켓 상태를 확인합니다.
어떤 프로세스가 어떤 포트를 사용하는지 확인하거나,
네트워크 상태를 확인할 때 사용할 수 있습니다.
- -t : TCP 연결 확인
- -u : UDP 연결도 확인
- -l : Listen 상태인 포트만 출력
- -n : 호스트 이름을 숫자로 출력
예시
sudo ss -tuln
lsof (list open files)
현재 열려있는 모든 파일을 나열합니다.
리눅스에선 네트워크 소켓, 디렉토리, 장치 등 모든 것을 파일로 취급합니다.
즉 lsof는 파일만 나열하는 게 아니라 특정 프로세스가 열고 있는 파일,
사용 중인 네트워크 소켓과 포트 등도 확인할 수 있습니다.
예시
sudo lsof -i :8080
- 8080번 포트에서 돌아가는 프로세스 정보를 출력합니다.
free (free memory)
현재 메모리와 스왑 메모리 사용량을 '총 용량 / 사용량 / 남은 용량' 순으로 출력합니다.
- -h : 사람이 읽기 쉽게 단위를 붙여서 출력합니다. (714320 -> 7GiB)
보통 free -h 로 자주 사용합니다.
여담이지만 EC2 프리티어를 사용한다면 스프링부트 애플리케이션 하나만 돌려도 메모리가 거의 가득차게 됩니다.
이때 파일 전송 API 등 메모리를 많이 먹는 기능을 여러 번 호출하면 메모리가 꽉 차서 EC2가 죽는 일이 자주 발생하는데,
이럴 때 스왑 메모리를 설정해주면 EC2 돌연사 빈도를 줄일 수 있습니다.
systemctl (system control)
시스템이나 서비스 관리할 때 사용하는 명령어입니다.
우분투 등 systemd를 기반으로 하는 리눅스 시스템에서 사용합니다.
서비스 시작, 중지, 재시작부터 상태확인, 활성화 및 비활성화 등 여러 군데에 사용합니다.
(참고로 활성화 = 부팅 시 자동 시작 설정입니다)
레디스 같은 경우 systemctl을 통해 실행하게 됩니다.
$ sudo systemctl start <service_name> # 서비스 시작
$ sudo systemctl stop <service_name> # 서비스 중지
$ sudo systemctl restart <service_name> # 서비스 재시작 -> 변경사항 적용, 서비스 불안정 등
$ systemctl status <service_name> # 서비스 상태 확인
$ sudo systemctl enable <service_name> # 서비스 활성화 (부팅 시 자동 시작)
nohup (no hang up)
프로세스가 터미널과 독립적으로 실행되도록 합니다.
no hang up은 직역하자면 '끊지마' 정도가 되겠습니다.
터미널에서 실행한 프로세스는 터미널이 종료되면 같이 꺼지는데,
nohup으로 실행한 명령어는 터미널이 꺼지더라도 프로세스는 남아있게 됩니다.
서버 작업 등 오래 돌아가는 작업을 안정적으로 실행시킬 때 사용합니다.
예시
$ nohup <기존 명령어> &
- 뒤에 &을 붙임으로써 명령어를 백그라운드에서 실행시킬 수 있습니다.
$ nohup ./start_server.sh > output.log 2>&1 &
- > output.log : 표준 출력은 output.log 파일로 리다이렉트합니다.
- 2>&1 : 표준 오류 출력도 표준 출력으로 리다이렉트합니다.
- 유닉스에서 1은 표준출력, 2는 표준오류의 파일 디스크립터입니다.
즉 2>&1은 오류도 콘솔에 같이 출력하라는 의미입니다
- 유닉스에서 1은 표준출력, 2는 표준오류의 파일 디스크립터입니다.
tail (tail)
특정 파일의 내용을 뒤에서부터 = 꼬리 쪽부터 확인합니다.
- -n <숫자> : 뒤에서 입력 숫자만큼의 줄만 출력합니다.
- -f : follow의 준말로, 파일에 추가되는 내용을 실시간으로 출력합니다.
$ tail -f log.out
위와 같이 log파일을 실시간으로 표시하기 위해 자주 사용합니다.
이때 Ctrl - Z를 누르면 터미널로 빠져나올 수 있습니다.
'기타' 카테고리의 다른 글
[자문자답 | Spring] Util과 Service의 차이점 (1) | 2024.11.18 |
---|---|
[주절주절] 노션은 이미지를 S3에 저장한다 (3) | 2024.11.11 |