DAY #10 | 프로세스 관리 & 파일 시스템과 디스크 관리 (1)

23144 단어 솔데스크linuxlinux

🌌 06 프로세스 관리


🍳 1) 프로세스의 개념

cpu에서 a,b, c 프로그램을 시분할처리 한다.

  • 프로그램 : 하드 디스크에 저장된 실행 코드
  • 프로세서 : CPU, 중앙 처리 장치
  • 프로세스 : 현재 메모리에 로딩되어 실행되어있는 프로그램, 프로그램의 코드가 메모리에 적재되어 실행되어있는 상태

🍥 1-1) 프로세스의 부모-자식 관계

  • 리눅스의 모든 프로세스는 부모-자식 관계를 갖는다.
  • 필요에 따라 부모 프로세스(Parent Process)는 자식 프로세스(Child Process)를 생성한다.
  • 자식 프로세스는 또 다른 자식 프로세스를 만들 수 있다.
  • 리눅스 시스템부팅할 때 스케줄러가 실행한 프로세스인 systemdkthreadd 프로세를 제외하면 모든 프로세스는 부모 프로세스를 가지고 있다.

🍥 1-2) 프로세스의 번호

  • PID는 1번부터 시작하고 프로세스가 실행되면서 하나씩 증가하여 부여된다.
  • 리눅스가 부팅될 때 PID 1번 systemd 프로세스와 2번 kthreadd 프로세스가 차례로 실행된다.
  • 이때 1번 프로세스는 나머지 모든 시스템의 부모 프로세스
  • 2번 프로세스는 모든 스레드의 부모 프로세스

🥓 고유한 번호 PID(Process Identification Number)

  • 1번 프로세스 systemd (UNIX의 경우 init)

🍥 1-3) 프로세스의 종류

🥓 데몬(Daemon) 프로세스

  • 평소에는 대기 상태, 특정 서비스 요청이 들어오면 서비스 제공, 리눅스 커널에 의해 실행
  • ex) 원격 접속 서비스를 제공하기 위해 동작하는 sshd프로세스, ssh 서버 데몬이라고도 함

🥓 고아(Orphan) 프로세스

  • 자식 프로세스는 종료되면 부모 프로세스로 돌아가야 함
  • 부모 프로세스가 먼저 종료되고, 자식 프로세스만 남아있는 상태
  • 1번 프로세스가 고아 프로세스의 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료될 수 있게 함

🥓 좀비 프로세스

  • 자식 프로세스가 실행 종료했는데도 남아 있음
  • 프로세스가 실행되지 않지만 메모리에 계속 남아있는 상태
  • 좀비 프로세스는 목록에서 defunct 프로세스라고 나오기도 함

🍳 2) 프로세스 관리 명령

🍥 2-1) 프로세스 목록 확인

🥓 프로세스 목록 출력

  • ps : 현재 실행중인 프로세스에 대한 정보 출력
  • tty : 실행 하고있는 터미널의 이름
  • TIME : 짤개 쪼개서 실행하기 때문에 마치 0초인것 처럼 보임
  • CMD : 실행한 프로그램 이름

🥓 프로세스 상세 정보 : -f(full) 옵션

  • ps -f : 프로세스의 상세한 정보 출력
  • ps -f의 출력 정보
항목의미
UID프로세스를 실행한 사용자 ID
PID프로세스 번호
PPID부모 프로세스 번호
CCPU 사용량(%값)
STIME프로세스의 시작 날짜나 시간
TTY프로세스가 실행된 터미널의 종류와 번호
TIME프로세스 실행 시간
CMD실행되고 있는 프로그램 이름(명령)

🥓 전체 프로세스 목록 출력 : -ef 옵션

  • ps -ef
    • -e 옵션 : 실행 중인 모든 프로세스 출력
      • e : entire, every
    • -f 옵션 : 상세한 정보 출력
  • 🤔 tty가 ?
    • 터미널을 기반해서 실행된 프로세스가 아니다.
    • 데몬 프로세스, 서버 프로세스, 서비스 로 불리는,, 부팅할 때 부터 실행되는 프로세스.

🍥 2-2) 특정 프로세스 정보 검색

🥓 특정 프로세스 정보 검색

  • ps -ef | grep bash
  • pgrep -x bash

🍥 2-3) 프로세스 종료

🥓 프로세스 종료하기: kill

  • Ctrl + z : 일시정지
  • Ctrl + c : 종료

  • kill -l : kill, 시그널을 전달하는 프로그램의 종류, 수많은 시그널 중에 defalut은 15)SIGTERM 이다.
    • STGTERM 은 터미네이트를 종료하는 명령이다.
      • 좀비 프로세스는 SIGTERM으로 종료되지 않는다.
      • 9)SIGKILL로 좀비 프로세스 종료 가능

  • killal 명령 : 해당 명령 프로세스 전부 종료

🍥 2-4) 프로세스 관리 도구

🥓 top 명령

ps 명령과 달리 1번 출력이 아닌, 실시간으로 출력한다.

  • top 명령의 출력 정보
항목의미항목의미
top -현재 시간up부팅 시간
users현재 접속 유저load average부하율(1분,5분,15분)
Tasks총 프로세스runningCPU에의해 실행 상태 프로세스
sleeping대기 상태 프로세스stopped정지 상태 프로세스
zombie좀비 프로세스%Cpu(s)CPU 부하율
us유저에 의한 CPU 부하율syOS내부 시스템 처리의 CPU 부하율
niniceidIDLE, 유효상태
wawaitinghi, sihw, sw 인터럽트
st가상 머신에서 실제 CPU를 사용할 수 없었던 시간KiB MEM물리적인 메모리
KiB Swap하드디스크 일부분을 메모리처럼 사용하는 영역
PID프로세스 IDSHR프로세스가 사용하는 공유 메모리 크기
USER사용자 계정%CPU퍼센트로 표시한 CPU 사용량
PR우선순위(Priority)%MEM퍼센트로 표시한 메모리 사용량
NINice 값TIME+CPU 누적 이용 시간
VIRT프로세스가 사용하는 가상 메모리 크기COMMAND명령이름
RES프로세스가 사용하는 메모리 크기
  • Shift + m : 메모리 사용량에 따라 내림차순
  • Shift + p : CPU 사용량에 따라 내림차순
  • h : help key
  • q : quit 종료

🍳 3) 포그라운드/백그라운드 프로세스와 작업 제어

🍥 3-1) 포그라운드/백그라운드 작업

🥓 포그라운드

  • sleep 100 : 포그라운드로 실행

🥓 백그라운드

  • sleep 100 & : 백그라운드로 실행
  • sleep 2000 & : sleep 명령을 &을 통해 백그라운드로 실행
  • ps : 실행중인 ps 확인
  • ps --forest : 실행중인 ps forest형식으로 확인, 부모 프로세스 확인 가능
  • ps -f : 실행중인 모든 프로세스 상세 정보
    • bash의 PID 2754, 실행중인 sleep 2000, ps -f 프로세스의 ParentPID 2754 확인

🍥 3-2) 작업 제어

🥓 작업 목록 보기 : jobs

  • jobs
    • 백그라운드 작업을 모두 보여준다.
    • 특정 작업 번호를 지정하면 해당 작업의 정보만...

🥓 작업 전환하기

  • Ctrl+z 또는 stop %작업 번호 : 포그라운드 작업 일시 중지
  • bg %작업 번호 : 백그라운드 전환
  • fg %1 : 포그라운드 전환
    • 프롬프트가 나오지 않는다.
  • 시그널(Ctrl + z)을 줘서 빠져나온다.
    • 종료가 아니라, 잠시 중단

  • bg %1 : 백그라운드 전환
  • 백그라운드에서는 단축키를 통해 시그널 전달이 안된다.
  • kill 명령을 통해 전달한다.
  • kill -19 pid번호 : SIGSTOP으로 일시정지

  • kill -18 pid번호 : SIGCONT으로 시작

  • kill pid번호 : SIGTERM으로 종료

🥓 Nice

Nice를 통해 프로세스의 Priority(우선순위)를 설정할 수 있다.

  • 높을 수록 양보 한다는 의미, 다른 프로세스를 더 빨리 처리해! 라는 느낌, 아주 nice
  • Nice는 0이 디폴트다.
  • 높을 수록 속도가 느리고, 낮을수록 속도가 빠르다.
  • 일반 유저는 19 ~ 0 (올리기만 가능, 내릴 수 없다)
  • 루트 유저는 19 ~ -20
  • nice - 실행 시 프로세스의 우선 순위 설정
  • renice - 실행 중인 프로세스의 우선 순위 설정

🥓 root유저, renice 예시

  • sleep 5000 &, ps -l
    • sleep 5000 & : 백그라운드로 실행
    • ps -l : ps long,, Ni(ce) 값을 바꾸면 PRI(ority)값이 바뀜(낮을 수록 빨리 처리)
    • 수정 해보자!
      • 실행중인 프로세스는 renice로 해야한다.
    • renice -n 5 sleep명령의 pid
    • renice -n -7 sleep명령의 pid

🥓 root유저, nice 예시

  • nice -n -3 sleep 600 &

🥓 일반 유저, nice 예시

  • `nice -n -9 sleep 500 &

🥓 일반 유저, renice 예시

  • renice -n 5 명령의 pid

  • renice -n 3 명령의 pid

    • 일반 유저는 nice값을 올리는 것만 가능
    • 내릴 수 없다.

※ 유의할 점
: Trade-off다 . 속도가 느려지면, 다른 한곳은 속도가 빨라진다.


🥓 로그아웃 후에도 백그라운드 작업 계속하기: nohup

  • nohup : 로그아웃한 후에도 백그라운드 작업을 계속 실행
    • 형식 : nohup 명령&

🍳 4) 작업 예약

등록된 유저만 사용할 수 있고, 그 안에서도 제한을 둔다.

  • /etc/at.allow, /etc/at.deny
  • /etc/cron.allow, /etc/cron.deny
  • allow 파일 : 한줄에 한명씩 유저 등록
  • deny 파일 : 한줄에 한명씩 유저에 대한 제한 등록

🤔 양쪽 다 등록되있으면?

🤔 allow, deny 파일이 둘 다 없으면?

경우의 수를 따져봐야된다. (대전제 조건)
- allow 파일이 있으면, deny 파일은 존재하든 안하든 무시된다.
- allow 파일이 있어도, 안에 내용이 없으면 아무도 사용 불가능


🍥 4-1) 정해진 시간에 한 번 실행

🥓 at 명령 설정

  • 단발성, 예약한 명령을 정해진 시간에 실행
  • at -t 년원일시분
  • 명령어는 절대 경로로..
    • 마지막에는 Ctrl+d 로 입력 종료

🥓 at 작업 파일 확인

  • at으로 생성된 작업 파일은 /var/spool/at에 저장된다.

🥓 at 작업 목록 확인: -옵션, atq옵션

  • at -l : 실행 대기 중인 at 서비스 출력(=atq)

  • at -c 1 : at -c job_id

  • at -t 202111011450 설정 했던 거 확인하기


🥓 at 작업 삭제하기: -d 옵션과 atrm 옵션

  • at -d, atrm : 지정된 작업 번호의 작업을 삭제한다.
    • at -l, atq을 통해 작업 지시서(목록) 확인
    • 형식 : at -d 작업 번호, atrm 작업번호


🍥 4-2) 정해진 시간에 반복 실행

🥓 crontab 서비스

  • 주기적, 반복 실행
  • crontab -l : 작업 지시서 확인
  • crontab -e : 자동적으로 vi 에디터 실행

🥓 crontab 파일 형식

분(0~59)시(0~23)일(1~31)월(1~12)요일(0~6)작업 내용

0 : 일요일, 1 : 월요일 ~ ... 6: 토요일

30 6 * * * /bin/a # 6시30분 매일 매주 매월 매요일
0 23 1 6,12 * /bin/b # 23시 1일 6,12월 매요일
15 20 * * 1-5 /bin/c # 15분 20시 매일 매주 매월 1,2,3,4,5 주중 
30 * * * * /bin/echo hi user... 

😋 Quiz 😋

매주 월요일 오후 3시 46분에 /var/log/message 파일을 /tmp/m.log.bak 파일로 복사하세요.

whereis cp # cp 절대 경로 확인, /usr/bin/cp

crontab -e
46 15 * * 1 /usr/bin/cp /var/log/messages /tmp/m.log.bak

:wq

  • crontab -l, ll /tmp/m.log.bak, crontab -l, crontab -r
    • crontab -l : 작업지시서 확인
    • ll /tmp/m.log.bak : 파일 생성 확인
    • crontab -l : crontab 이기 때문에, 사라지지 않음, 다음주 월요일도 반복하기 위해..
    • crontab -r : crontab 파일 삭제

🥓 help를 활용한 특정 유저, crontab 설정

  • crontab --help
  • crontab -u 유저명 -e : 특정 유저권한으로 crontab 설정 가능
  • crontab -u 유저명 -l : crontab 작업지시서 확인

🌌 07 파일 시스템과 디스크 관리 (1)


  • 데이터를 저장하려면 어떠한 구조가 있어야 된다.
  • 파일 시스템은 데이터를 저장장치에 저장하기 위한 구조

🍟 1) 리눅스 파일 시스템 종류

🍥 1-1) 리눅스 고유의 디스크 기반 파일 시스템

  • MFS(Minix File System) :
  • ext(ext1)
  • ext2
  • ext3
  • ext4
  • XFS(eXtended File System) : CentOS7 부터 사용..

🍥 1-2) 리눅스에서 지원하는 다양한 파일 시스템

  • 리눅스에서는 표준 파일 시스템 외에 타 시스템과 호환되도록, 외부 저장 장치를 사용하도록 다양한 파일 시스템을 지원

🍥 1-3) 특수 용도의 가상 파일 시스템

🥓 가상 파일 시스템

  • 디스크가 아니라 메모리에 생성되어 사용
  • 일반적으로 특수한 용도를 가지고 필요에 따라 생기거나 없어짐

🍥 1-4) 현재 시스템이 지원하는 파일 시스템 확인

  • cat /proc/filesystems

🍟 2) 리눅스 파일 시스템 구조

  • 파일은 inode로 관리된다.
  • 디렉터리는 단순히 파일의 목록을 가지고 있는 파일일 뿐이다.
  • 특수 파일을 통해 장치에 접근할 수 있다.

🍥 2-1) ext4 파일 시스템의 구조

🍥 2-2) inode 구조

🍥 2-3) 파일 시스템과 디렉터리 계층 구조

🥓 한 파일 시스템으로 구성하기

🥓 여러 파일 시스템으로 구성하기


🍟 3) 파일 시스템 마운트

  • 마운트 : 파일 시스템을 디렉터리 계층 구조의 특정 디테러이와 연결하는 것

🍥 3-1) 마운트 포인트

  • 마운트 포인트 : 디렉터리 계층 구조에서 파일 시스템이 연결되는 디렉터리

🍥 3-2) 파일 시스템 마운트 설정 파일

🍥 3-3) 마운트 관련 명령


🍟 4) 디스크 추가 설치

🍥 4-1) 가상머신에 디스크를 추가하는 방법

  • 1

  • 2

    -3

    -4

    -5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11 추가 완료

  • 12

  • 14 lsblk


🍥 4-2) 디스크 파티션을 나누는 방법

🥓 디스크 장치의 이름과 파티션 표시하기

  • 알파벳 : 디스크가 인식한 순서, 커널이 인식한 순서

  • 숫자 : 파티션의 숫자

  • lsblk : 리눅스 디바이스 정보를 출력, 파티션 확인

  • IDE의 형태는 최대 4개 이상 연결 불가능
  • /dev/hda~hdd
  • /dev/sda : 첫 번째 디스크
  • /dev/sdb : 두 번째 디스크
  • /dev/sdc : 세 번째 디스크
  • ...

🥓 fdisk, parted, gdisk 명령

  • fdisk : 디스크의 파티션 생성, 삭제, 보기 등 파티션을 관리한다

    • 형식 : fdisk [옵션] [장치명]
    • 2TB 이상 디스크는 인식하지 못한다.
      • 이걸 개선한 명령어 parted
  • fdisk /dev/sdb

    • 적용 전 까지, 메모리에 적용되있고 w 명령을 입력해야 디스크에 적용된다.
  • fdisk, m : m for help

  • fdisk, n : n : add a new partition

    • primary partition은 4개이상 만들 수 없다.
  • fdisk, e : 파티션을 4개 이상 만들어야 할 경우

    • extended 파티션은 실제로 저장하는 용도가 아님.
    • logical 파티션을 담는 그릇일 뿐

🥓 fdisk /dev/sdb 예시

  • p +250M
    • 🤔 첫 번째 파티션, 섹터가 왜 2048부터 시작하는가?
      • 디스크 맨 앞쪽에, 디스크의 여러가지 정보를 저장해야 되서..

  • p +200M

  • e 남은 용량

  • p : print the partition table


  • l +300M
    • 안보이던 logical 파티션이 보인다.
    • logical 파티션을 담는 그릇인 extended가 존재하기 때문에..
    • 파티션 번호가 auto로 5번부터 할당받는다.
    • 🤔 섹터 위치가 살짝 차이가 난다. 이유는?
      • extended 가장 앞쪽에 logical 파티션의 여러가지 정보를 저장해야 되서..

  • p : print the partition table

  • w : 디스크에 저장

  • q : 저장 x


🤔 Swap 으로 사용하려면?

  • /dev/sdb2의 영역을 Swap or LVM으로 바꾸려면?

  • m : for help

  • t, 2, L

    • t : change a partition's system id
    • 2 : /dev/sdb2, 2번 째 파티션
    • L : list all codes of Hex code
  • p : print the partition table


  • d, 5: 파티션 삭제

  • d, 3


  • w : 디스크 저장
  • lsblk : 리눅스 디바이스 정보를 출력하는 명령어

👉 Reference

좋은 웹페이지 즐겨찾기