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 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 | 총 프로세스 | 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 -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 로 입력 종료
- 마지막에는 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) 파일 시스템과 디렉터리 계층 구조
🥓 한 파일 시스템으로 구성하기
- 데이터를 저장하려면 어떠한 구조가 있어야 된다.
파일 시스템
은 데이터를 저장장치에 저장하기 위한 구조
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의 영역을
Swap
orLVM
으로 바꾸려면?
-
m
: for help
-
t
,2
,L
t
: 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.)