스터디 : 리눅스 커맨드라인 쉘 스크립트 바이블 4장

호밀빵 굽는 쿼카·2022년 7월 21일
0

목차

1) 프로세스 관리

2) 디스크 통계 보는 법

3) 마운트 개념

4) 데이터 정렬,저장

프로그램 감시하기

리눅스 관리자가 힘든 일은 시스템에서 무엇이 실행되고 있는지를 추적하는 것

프로세스 엿보기

프로세스 : 프로그램이 시스템에서 실행되는 것

ps

  • 현재 사용자에 속해 있으며 현재 터미널에서 실행시키고 있는 프로세스만 보여줌
  • 기본출력 : PID(프로세스 IP)/TTY(실행된 터미널)/프로세스가 사용한 CPU시간

리눅스 시스템에서 사용되는 GNU의 ps명령은 세가지 유형의 커맨드라인 매개변수 지원

1. 유닉스 스타일 매개변수

교재 p 113 확인

  • ps -ef : 시스템에서 실행되고 있는 모든 것을 보여줌
    -e : 모든 프로세스 표시
    -f : 매개변수 몇 가지 유용한 정보의 열 표시
  • UID : 프로세스 실행에 책임이 있는 사용자
  • PID : 프로세스의 ID
  • PPID : 부모 프로세스의 PID(다른프로세스가 이 프로세스를 시작한 경우)
  • C : 프로세스의 수명 동안 프로세서 사용률
  • STIME : 프로세스가 시작되었을때 시스템 시각
  • TTY : 프로세스를 시작한 터미널 장치
  • TIME : 프로세스를 실행하기 위해 요구된 누적 CPU 시간
  • CMD : 시작된 프로그램의 이름
  • F : 커널이 프로세스에 할당한 시스템 플래그
  • S : 프로세스 상태(D-깨울수없는 휴면상태/R-실행/S-휴면/T-추적또는중지/Z-좀비)
    => D이면 kill 해주어야함
  • PRI : 프로세스의 우선순위
  • NI : 나이스값, 우선순위를 결정하는데 이용
  • ADDR : 프로세스 메모리 주소
  • SZ : 프로세스가 스왑 아웃될때 필요한 스왑 공간의 대략적인 양
  • WCHAN : 프로세스가 휴면 상태가 될 때 커널 함수의 주소

2. BSD 스타일 매개변수

교재 p 115-116 확인

  • ps -l : 프로세스에 대한 자세한 코드(열)을 보여줌
  • VSZ : 메모리에 있는 프로세스의 크기
  • RSS : 스왑되지 않은 프로세스가 사용하는 물리적 메모리
  • STAT : 현재 프로세스의 상태를 나타내는, 두개의 문자로 이루어진 상태 코드

3. GNU 형식의 긴 매개변수

  • ps --forest : 프로세스 정보를 계층 형식으로 표시하고 ASCII 문자를 사용해 차트를 그려줌

실시간 프로세스 모니터링

ps 명령어는 특정 시점에 대한 정보만을 표시하지만 , top 명령어는 실시간 모드로 동작
1. 첫번째 줄

현재시각+시스템이얼마나 오래 동작되었는지+로그인한 사용자의 수+시스템의 평균 부하

  • load average : 평균부하를 나타냄
    1분/5분/15분 평균부하로 표시, 수치가 높을 수록 시스템은 더 많은 부하 생김
    15분 부하값이 높으면 시스템이 문제를 일으킬 수 있음

2. 두번째 줄

얼마나 많은 프로세스 실행+휴면상태인지+좀비인지


3. 세번째 줄

전반적인 CPU 정보+프로세스의 소유주와 프로세스의 상태에 따라 여러 범주로 CPU사용률 나누어 표시

프로세스 목록

  • PID
  • USER
  • PR : 프로세스 우선순위
  • NI
  • VIRT : 프로세스가 사용하는 가상 메모리의 총량
  • RES : 프로세스가 사용하는 물리적 메모리의 양
  • SHR : 다른 프로세스와 공유하는 메모리의 양
  • S : 프로세스 상태
  • %CPU : 프로세스가 사용하는 CPU 시간의 비율
  • %MEM : 프로세스가 사용하는 사용가능한 물리적 메모리의 비율
  • TIME+ : 프로세스가 시작될때부터 사용한 총 CPU 시간
  • COMMAND : 프로세스의 커맨드라인 이름

프로세스 중단시키기

리눅스에서 프로세스는 신호로 서로 통신

리눅스 프로세스 신호

신호이름설명
1HUP연결 끊어짐
2INT인터럽트
3QUIT실행중지
9KILL무조건 종료
11SEGV세그먼트 위반을 생성
15TERM가능하면 종료
17STOP무조건 중지하지만 종료되지는 않음
18TSTP중지하거나 일시정지하지만 백그라운드에서 계속 실행
19CONTSTOP 또는 TSTP 후 실행 재개

주의할점 : 프로세스 신호를 보내려면 나 자신이 그 프로세스의 소유자이거나 루트 사용자로 로그인

ex) KILL [프로세스ID]
ex) KILL -s HUP [프로세스ID] (기본 보다 좀더 강력)
ex) killall http* : http로 시작하는 모든 프로세스 죽임

자주 사용하는 신호 : KILL/TERM 을 많이 사용

  • kill -9가 아니라 그냥 kill 하면 기본 term 사용(term을 사용하면 좋음,따라서 kill 을 사용하기)
  • killall / pkill 모두 강력한 프로세스
  • pkill -f [프로세스명]:프로세스명 완전 일치하는 것만 죽임

grateful shutdown이란?

Graceful shutdown은 프로그램이 종료될 때 최대한 side effect를 내지 않기 위해 로직들을 잘 처리하고 종료하는 것을 의미한다.만약 강제로 종료된다면, 데이터의 손실과 비즈니스 로직이 제대로 처리되지 않는 채로 종료될 수 있다.



디스크 공간 모니터링

미디어 마운트

  • 리눅스 파일 시스템은 하나의 가상 디렉토리에 모든 미디어 디스크를 결합
  • 시스템에 새로운 미디어 디스크를 사용하려면 먼저 이를 가상 디렉토리에 배치해야함 = 이 작업이 마운트

이렇게 책에 적힌 내용으로는 이해가 잘 안됨

  • 예를 들어 usb를 꼽으면 내컴퓨터 폴더에 usb파일이 뜨면서 자동으로 연결. 이렇게 디스크와 같은 물리적인 장치를 특정 위치 즉 디렉터리에 연결시켜주는 것을 마운트라고 함
  • 요새는 PnP(Plug and Play = 디바이스를 꼽기만 하면 알아서 설정되고 플레이되는)
  • 윈도우에서는 자동으로 마운트 과정이 실행되지만, 리눅스의 경우 특히 서버환경의 경우 직접 연결해줘야함

따라서, 관리자가 특정 디렉터리에 붙이는 작업을 수행하는 것이 mount 작업. 하지만 SE분들에게 부탁해서 받는 경우가 많음.

mount 명령

  • mount : 현재 시스템에 마운트 된 미디어 장치의 목록 표시
  • mount 명령은 4가지 정보 포함
    미디어의 장치 파일 이름
    미디어가 마운트 된 가상 디렉토리의 마운트 지점
    파일시스템 유형
    마운트 된 미디어의 액세스 상태

수동으로 가상 디렉토리에 미디어 장치 마운트

  • mount -t type device directory

unmount 명령

  • 이동식 미디어 장치를 제거하려면 언마운트>시스템에서 제거
  • unmount [directory | device]

df 명령 사용하기

  • df : 마운트된 모든 디스크의 상황 볼 수 있음
  • 장치의 위치/데이터를 저장할 수 있는 1024바이트 블록의 양/사용된 1024 바이트 블록의 양/사용할 수 있는 1024 바이트 블록의 양/사용된 공간의 백분율/장치가 마운트 된 마운트 포인트
  • df -h : 디스크 공간을 사람이 이해할 수 있는 형태로 보여줌

    df:리눅스에 디스크 공간이 얼마나 많이 있는지 사용 (df -h(이해할수형태로단위붙여나옴))

du 명령 사용하기

  • du : 현재 디렉토리에 있는 모든 파일,디렉토리 및 하위 디렉토리를 표시하고 각각의 파일이나 디렉토리가 얼마나 많은 디스크 블록을 차지하고 있는지를 보여줌
  • 옵션 -c : 나열된 모든 파일의 총계 출력
  • 옵션 -h : 사람이 이해가능한 형태로 크기 출력
  • 옵션 -s : 각 인수를 요약

    du: 특정 디렉토리 디스크 사용량 확인
    ex) 예를 들어 mysql 설치 시, data 파일이 저장되는 디렉토리 (*.ibd) -> du 명령어로 ibd파일 전체 용량 확인할 수 있음



데이터 파일 작업

데이터 정렬

  • sort file : 지정된 언어의 표준 정렬 규칙을 사용해서 정렬
  • 하지만 숫자 또한 문자로 인식해 제대로 정렬되지 않을 수도 있음 그렇다면,
    sort -n file 사용
    -n : sort 명령이 숫자를 문자가 아닌 숫자로 인식하고 숫자값을 기반으로 정렬 수행하도록 지시
  • sort -M file : 월을 정렬할 때 사용
  • sort -t ':' -k 3 -n /etc/passwd
    -t 매개변수로 필드 분리 문자를 제어하고
    -k 매개변수로 어떤 필드로 정렬할 것인지 지정
    3번째 값이 숫자값이며 userid이므로 그 값을 기준으로 정렬
  • -n : 숫자값 정렬
  • -r : 내림차순 정렬
  • sort(정렬) > uniq(카운팅) : 정렬 후, 각 항목 카운팅 (자주 사용됨)

du+sort사용
du -sh * | sort -nr : 디렉토리에 있는 모든 파일,디렉토리,하위디렉토리 표시하고 사람이 이해가능한 형태로 출력 + 숫자값/내림차순 정렬

데이터 검색

  • grep [option] pattern [file]
    입력된 내용이나 지정된 파일에서 지정된 패턴과 일치하는 문자를 포함한 줄을 찾음
  • 기본 : grep three file : file 에서 three 포함된 줄 찾기
  • grep -v t file : file에서 t 가 없는 줄 찾기
  • grep -n t file : 패턴과 일치하는 내용이 발견되는 줄 번호까지 출력
  • grep -c t file : 패턴과 일치하는 내용이 포함된 줄이 몇개인지 알고 싶을 때
  • grep -e t -e f file : 찾으려는 패턴이 t/f 2개 이상이라면 각 패턴에 -e 매개변수 붙이기
  • grep [tf] file : t/f 중 하나를 포함하는 패턴과 일치하는 줄을 찾음

데이터 압축하기

리눅스 압축 유틸리티

  • bzip2
  • compress
  • gzip
  • zip

gzip my_file : my_file 을 압축 (확장자 .gz)

데이터 아카이브

리눅스 전용 (압축 / 보관) 아카이브 도구

  • tar 기능 [옵션] 대상1 대상2 ...
  • tar 명령 기능
기능설명
-A기존 tar 아카이브 파일에 기존의 또다른 tar 아카이브 파일 추가
-c새로운 tar 아카이브 파일 작성
-dtar 아카이브 파일과 파일시스템 사이의 차이점 확인
-r기존의 tar 아카이브 파일의 끝에 파일 추가
-t기존의 tar 아카이브 파일에 들어있는 내용의 목록 보여줌
-u기존의 tar 아카이브 파일에 있는 같은 이름의 파일보다 최신 파일이 있다면 추가
-x기존 아카이브 파일에서 파일 추출
  • tar 명령 옵션
옵션설명
-C dir지정된 디렉토리로 변경
-f file결과를 파일로 출력
-j출력을 압축하기 위해 bzip2로 보냄
-p모든 파일의 사용권한 유지
-v처리된 파일의 목록 출력
-z출력을 압축하기 위해 gzip으로 보냄

시스템 관리자

  • 프로그램 모니터링(프로세스 모니터링/프로세스 중단 등)
  • 시스템 디스크 사용량 추적

참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글