DAY #10 | 프로세스 관리 & 파일 시스템과 디스크 관리 (1)
🌌 06 프로세스 관리
🍳 1) 프로세스의 개념

cpu에서 a,b, c 프로그램을 시분할처리 한다.
- 프로그램 : 하드 디스크에 저장된 실행 코드
- 프로세서 : CPU, 중앙 처리 장치
- 프로세스 : 현재 메모리에 로딩되어 실행되어있는 프로그램, 프로그램의 코드가 메모리에 적재되어 실행되어있는 상태
🍥 1-1) 프로세스의 부모-자식 관계
- 리눅스의 모든 프로세스는
부모-자식 관계를 갖는다. - 필요에 따라 부모 프로세스(Parent Process)는 자식 프로세스(Child Process)를 생성한다.
- 자식 프로세스는 또 다른 자식 프로세스를 만들 수 있다.
리눅스 시스템을부팅할 때스케줄러가 실행한 프로세스인systemd와kthreadd프로세를 제외하면 모든 프로세스는 부모 프로세스를 가지고 있다.

🍥 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 | 부모 프로세스 번호 |
| C | CPU 사용량(%값) |
| STIME | 프로세스의 시작 날짜나 시간 |
| TTY | 프로세스가 실행된 터미널의 종류와 번호 |
| TIME | 프로세스 실행 시간 |
| CMD | 실행되고 있는 프로그램 이름(명령) |
🥓 전체 프로세스 목록 출력 : -ef 옵션
ps -ef-e옵션 : 실행 중인 모든 프로세스 출력- e : entire, every
-f옵션 : 상세한 정보 출력

- 🤔 tty가 ?
- 터미널을 기반해서 실행된 프로세스가 아니다.
- 데몬 프로세스, 서버 프로세스, 서비스 로 불리는,, 부팅할 때 부터 실행되는 프로세스.
🍥 2-2) 특정 프로세스 정보 검색
🥓 특정 프로세스 정보 검색
ps -ef | grep bashpgrep -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 | 총 프로세스 | running | CPU에의해 실행 상태 프로세스 | |
| sleeping | 대기 상태 프로세스 | stopped | 정지 상태 프로세스 | |
| zombie | 좀비 프로세스 | %Cpu(s) | CPU 부하율 | |
| us | 유저에 의한 CPU 부하율 | sy | OS내부 시스템 처리의 CPU 부하율 | |
| ni | nice | id | IDLE, 유효상태 | |
| wa | waiting | hi, si | hw, sw 인터럽트 | |
| st | 가상 머신에서 실제 CPU를 사용할 수 없었던 시간 | KiB MEM | 물리적인 메모리 | |
| KiB Swap | 하드디스크 일부분을 메모리처럼 사용하는 영역 | |||
| PID | 프로세스 ID | SHR | 프로세스가 사용하는 공유 메모리 크기 | |
| USER | 사용자 계정 | %CPU | 퍼센트로 표시한 CPU 사용량 | |
| PR | 우선순위(Priority) | %MEM | 퍼센트로 표시한 메모리 사용량 | |
| NI | Nice 값 | 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 확인

- bash의 PID 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 -lsleep 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 로 입력 종료

- 마지막에는 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 -rcrontab -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) 파일 시스템과 디렉터리 계층 구조
🥓 한 파일 시스템으로 구성하기
- 데이터를 저장하려면 어떠한 구조가 있어야 된다.
파일 시스템은 데이터를 저장장치에 저장하기 위한 구조


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

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

🍟 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/hd
a~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개이상 만들 수 없다.

- primary partition은 4개이상 만들 수 없다.
-
fdisk,e: 파티션을 4개 이상 만들어야 할 경우extended파티션은 실제로 저장하는 용도가 아님.logical파티션을 담는 그릇일 뿐

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

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

-
p+200M

-
e남은 용량

-
p: print the partition table

l+300M- 안보이던 logical 파티션이 보인다.

- logical 파티션을 담는 그릇인 extended가 존재하기 때문에..
- 파티션 번호가 auto로 5번부터 할당받는다.
- 🤔 섹터 위치가 살짝 차이가 난다. 이유는?

- extended 가장 앞쪽에 logical 파티션의 여러가지 정보를 저장해야 되서..

- extended 가장 앞쪽에 logical 파티션의 여러가지 정보를 저장해야 되서..
- 안보이던 logical 파티션이 보인다.

-
p: print the partition table

-
w: 디스크에 저장 -
q: 저장 x
🤔 Swap 으로 사용하려면?
-
/dev/sdb2의 영역을
SwaporLVM으로 바꾸려면?

-
m: for help

-
t,2,Lt: change a partition's system id2: /dev/sdb2, 2번 째 파티션L: list all codes of Hex code

-
p: print the partition table

-
d,5: 파티션 삭제

-
d,3

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

👉 Reference
Author And Source
이 문제에 관하여(DAY #10 | 프로세스 관리 & 파일 시스템과 디스크 관리 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@hakeem-kim/DAY-10-프로세스-관리
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(DAY #10 | 프로세스 관리 & 파일 시스템과 디스크 관리 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hakeem-kim/DAY-10-프로세스-관리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)

