예를 들어 사용자가 HDD(Non-Volatile Memory)와 같은 저장장치에 있는 프로그램을 실행하게 되면
프로그램이 프로세스 상태로 메모리에 적재되어 실행되며, 모든 프로세스는 부모 프로세스, 자식 프로세스로 분류되게 된다.
리눅스에서는 init(~CentOS6), systemd(CentOS7~)와 같은 시스템 최초의 프로세스로 "시스템 초기화 프로세스"라고 불린다.
프로세스 상태 조회에 자주 사용되는 명령어 'ps'를 알아보자
■ 명령어 'ps'의 활용방식
아무런 옵션 없이 사용하게 되면 현재 사용자의 화면에 표기되는 프로세스에 관해서만 보임
▼ 주로 사용되는 옵션은 코드블럭을 참조
ps -f '''현재 실행되는 프로세스에 관해 자세히 출력'''
ps -a '''다른 사용자의 프로세스까지 함께 출력'''
ps -u '''해당 프로세스를 실행중인 사용자의 정보와 시간을 함께 출력'''
ps -x '''백그라운드 프로세스까지 출력'''
ps -aux '''리소스 사용률을 기반으로 프로세스의 상태를 확인'''
ps -ef '''실행중인 모든 프로세스의 상속관계를 기반으로 자세히 확인'''
명령어 'ps'에 옵션 '-aux'를 함께 사용
해당 출력내용의 상단부를 보면 필드별로 나누어진 모습을 볼 수 있는데,
- USER : 프로세스의 소유자
- PID(Process ID) : 프로세스의 번호
- %CPU : 프로세스가 CPU를 차지하는 비율
- %MEM : 프로세스가 메모리를 점유하는 비율
- VSZ(Virtual Set siZe) : 프로세스에 할당된 가상 메모리의 크기
- RSS(Resident Set Size) : 프로세스가 현재 사용하는 메모리 비율
- STAT : 프로세스의 상태
- START : 프로세스가 시작된 시간
- TIME : 프로세스의 총 실행 시간
- COMMAND : 프로세스를 실행시킨 명령
▶ 프로세스의 상태(status)를 알려주는 필드 'STAT' 값의 의미
- R(Run/Runable) : 프로세스가 실행중 또는 실행가능
- D(in Disk wait) : 입출력이 완료될 때까지 깨울 수 없는 상태(수면상태)
-S(Sleeping) : 대기 중, 수면상태(전환 가능한 상태)
-T(sTopped) : 외부 시그널로 인해 일시 정지된 상태
-Z(Zombie) : 부모 프로세스가 종료 시그널을 정상적으로 수신 못해, 수습되지 않고 남은 상태
- < : 우선순위가 높은 프로세스
- N : 우선순위가 낮은 프로세스
- I(Idle) : 유휴(쉬고있는) 프로세스
명령어 'ps'에 옵션 '-ef'를 함께 사용
'-aux' 옵션을 사용했을 때와는 필드에 중복되지 않는 새로운 정보가 표기되는 것을 확인할 수 있다.
이루어지지만, 콘솔창에서는useradd, adduser [password] ... 등의 간단한 명령어와 함께
원한다면 생성과 동시에 사용자의 비밀번호를 설정해줄 수도 있다.
이번 포스트에서는 전반적으로 서비스에 관련된명령어에 대해 알아보려 한다.
** 당연히 운영체제마다 명령어는 상이할 수 있다..
(필자는 리눅스 CentOS7 / Ubuntu18.04 기준)
● 명령어 netstat(network statistics) / ss(socket statistics)
네트워크의 소켓상태 및 라우팅 테이블 등을 모니터링할 때 사용되는 명령어로
각종 서비스 시작 및 방화벽 설정 .. 등 네트워크 관련된 작업을 실행할 때 주로 사용된다.
'netstat'의 경우 'net-tools' 패키지에 포함된 명령어이고, 'ss'의 경우 'iproute2' 패키지에 포함 되어있는데
버전마다 다르겠지만, 운영체제 설치 시 비교적 최신버전의 배포판에서
명령어 'ss'는 추가적인 패키지 설치 없이 사용이 가능한걸로 알고있다.
사용법으로는 netstat / ss [옵션] 식의 구성으로 사용된다.
** 현재는 'netstat'보다는 'ss'의 사용을 권장한다고 한다.
[centos@localhost centos]$ ss -nltp # ss 명령어로 네트워크 상태를 모니터링
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:* users:(("rpcbind",pid=746,fd=8))
LISTEN 0 128 *:20048 *:* users:(("rpc.mountd",pid=1251,fd=8))
LISTEN 0 5 192.168.122.1:53 *:* users:(("dnsmasq",pid=1558,fd=6))
LISTEN 0 128 *:36597 *:* users:(("rpc.statd",pid=1231,fd=9))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1225,fd=3))
LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",pid=1229,fd=11))
[centos@localhost centos]$ netstat -nltp # netstat 명령어로 네트워크 상태를 모니터링
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 746/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1251/rpc.mountd
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1558/dnsmasq
tcp 0 0 0.0.0.0:36597 0.0.0.0:* LISTEN 1231/rpc.statd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1225/sshd
필자 기준으로 많이 사용되는 '-nltp(LISTEN 상태의 소켓, 포트의 상태와 프레세스 정보)'옵션으로
두 명령어의 출력 내용을 비교해보았다. 이렇게만 보면 차이점이 크게 있어보이지는 않는다.
대표적인 장점으로는 'netstat' 보다는 'ss"가 정보를 불러오는 속도가 빠르다는 점이 있다고 한다.
** 추가적인 정보를 알게되면 수정하여 포스팅하겠읍니다..
● 명령어 head / tail
단어에서 의미하는 바와 같이 어느 파일의 head(머리 부분, 위 부분), tail(꼬리 부분, 아래 부분)
의 일부분(기본 값 : 10 줄)을 출력해주는 역할을 해주는 명령어이다.
기본 값이 아닌 옵션을 이용해 원하는 만큼의 라인 출력도 가능하다.
주로 무거운 파일이나 실시간으로 로그(log)를 확인하려 할 때 사용된다.
사용방법으로는 head / tail [옵션] [파일] 식의 구성으로 사용된다.
[centos@localhost centos]$ head Line.txt # 옵션없이 Default 값으로 앞에서부터 10줄 까지 출력됨을 확인
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
[centos@localhost centos]$ tail -5 Line.txt # -5 옵션으로 뒤에서부터 5줄 까지만 출력
Line 16
Line 17
Line 18
Line 19
Line 20
' tail -f ' 옵션으로 secure log를 실시간으로 출력됨을 확인
● 명령어 systemctl ~ / service ~
리눅스 시스템에서 각종 서비스들을 관리할 수 있게 해주는 중요한 명령어이다.
~ CentOS6 까지는 service ~ 로 시작하는 명령어가 주로 사용되었지만,
CentOS7 부터는 시스템 부팅 프로세스가 init이 아닌 systemd로 넘어오게 되면서
systemctl ~ 명령어로 변경되었다. 동작방식은 거의 동일하며 현재 CentOS7 에서도
service ~ 명령어가 작동하지 않는 건 아니다.
'systemctl status [서비스]' 명령어를 이용한 각종 서비스의 현재상태(status)를 확인
systemctl start [Service] # 서비스를 시작
systemctl stop [Service] # 서비스를 중지
systemctl restart [Service] # 서비스 재시작
systemctl enable [Service] # 부팅 시 서비스 시작
systemctl disable [Service] # 부팅 시 서비스 자동시작 x
### systemctl enable / disable의 경우 ~CentOS6.x에서의 chkconfig와 호환되는 명령어이다.
● 명령어 ps / pstree / top(process status)
명령어 ps / pstree / top의 경우 각기 다른 정보와 형식으로 실행중인 프로세스의 상태를 보여준다.
우리가 주로 사용하는 Winodws System에서의 "작업 관리자"에서 프로세스의 상태를
확인할 수 있듯이 Linux System에서는 위에 해당하는 명령어로 프로세스의 상태를 확인할 수 있다
'ps' 명령어에서 주로 사용되는 '-ef' 옵션을 이용한모습 (BSD, System V 계열의 옵션이 별도로 지정되어 있음)
● UID : 해당 프로세스의 소유자 USER의 ID를 표시
● PID : 해당 프로세스의 번호를 표시
● PPID : 해당 프로세스의 Parents(부모) PID를 표시
● C : 정의는 짧은 기간 동안의 CPU 사용률이라고 되어있지만, 쓰임새를 자세히는 모르겠다..(아는 분께서는 댓글을..)
● STIME : 프로세스가 시작된 시간을 표시
● TTY : 프로세스와 연결된 터미널을 표시
● TIME : 해당 프로세으의 총 CPU 사용시간을 표시
● CMD : 해당 프로세스의 실행 명령행을 표시
전개도 형식으로 프로세스를 보여주는 'pstree'명령어에 '-p' 옵션을 사용해 프로세스의 PID를 확인가능
** 모든 프로세스를 관리하는 최초의 프로세스 "systemd"로 부터 다른 프로세스들이 생성됨을 직관적으로 확인할 수 있다.
명령어 'top'으로 프로세스와 CPU, RAM의 상태를 한 눈에 확인가능
** 실행을 원치않는 프로세스를 'kill'할 수도 있고 몇 가지 키 조합을 통해서 표시를 원하는