티스토리 뷰
1강
external commands
셸 스크립트를 잘 작성하려면 명령어들을 어떻게 조합하는지가 관건.
builtin command(내부 명령어)는 fork의 부담이 없다.
external command(외부명령어)는 무조건 fork-exec의 과정을 거치므로 overhead가 존재한다.
UNIX명령어는 셸에서 사용하기 쉽도록 최소한의 출력만 한다.
sort
-t : 구분자 지정. 디폴트는 공백이다
-u : unique. 중복 제거
-k : 키 필드 지정. F[.C][OPTS][,F[.C][OPTS]] 지정 가능.
F : field number
C : offset position
OPTS : sort option ( bdfgiMhnRrV)
ex) sort -k 7n -k 5nr 해석
7n : 7번째 필드를 기준으로 소팅을 하고, 7번째 필드는 숫자이다.
5nr : 위 기준으로 같은 경우, 5번째 필드를 기준으로 소팅. 5번째 필드도 숫자이고, r은 reverse를 의미한다.
ex) sort -M -k 6 -k 7n -k 5nr
첫번째 기준 : 6 : 6번째 필드 기준으로 소팅. 6번째 필드는 -M으로 month이다. -k 6M 과 같은 명령이다.
두번째 기준 : 7n : 7번째 필드 기준으로 소팅. 7번째 필드는 n 으로 숫자이다.
세번째 기준 : 5nr : 5번째 필드 기준으로 소팅. 5번째 필드는 n으로 숫자이고 reverse 소트(내림차순)한다.
ex) sort -k 1.8,1.18n contdata.txt
기준: 1.8,1.18 : 1번째 필드의 8번째 문자부터(포함) ~ 1번째 필드의 18번째 문자까지(불포함)
split, head, tail, paste, cat, tac
2020/12/16 - [OS/리눅스] - Ubuntu16.04 외부명령어 - split, head, tail, paste, cat, tac함수
Ubuntu16.04 외부명령어 - split, head, tail, paste, cat, tac함수
1. split 데이터를 자르는 용도 ex) split -d -a 3 -l 10000 /usr/share/dict/words /usr/share/dict/words 에는 총 99171개의 단어가 존재한다. 이를 10000개 단위로 잘랐더니 x000 ~ x009 에 저장되었다. 이..
donie.tistory.com
expand :
tee : stdout 출력과 동시에 파일 저장
pr : print text file
2강
join
공통키를 가지고 열단위 합치기
sort와 같이 사용하는 경우도 많다.
cut
잘라내는 기능.
좀 복잡한 작업이면 awk 쓰는 것이 좋다.
seq
숫자 만드는 용도. 많이 안 쓰이는 기능.
brace expansion 때문. 심지어 이것은 built-in cmd이다. 1~100 숫자는 {1..100}
for i in {1..100}
do
#do something 100 times
done
read
지정된 크기만큼 읽을 수도 있고, 특정 개수만큼 읽을 수도 있고, timeout도 가능. 배열저장도 가능. 많이 쓰임.
주의) IFS를 변경할 때는 꼭 복원을 시키도록 작성해야 한다.
프로그램(.sh)은 웬만하면 bash로 실행시켜야.
sleep 용도로 사용할 수도 있다. 추천하지는 않음.
background에서 사용하는 경우 SIGTTIN이 발생한다. -> 즉시 해당 프로세스가 STOP상태로.
※ SIGTTIN : background에서 terminal input이 발생할 때 발생시키는 signal.
3강
exec
실행(=프로세스 이미지 교체)
파일 열기. redirection의 일종. sub-shell을 만들지 않고 현재 셸에서 파일을 읽고/쓰고/닫을 수 있는 장점.
exec #<FILE : 읽기용 FILE로 오픈. 오픈된 파일은 fd#번을 할당 받는다. 디폴트=0
exec #>FILE : 쓰기용 FILE로 오픈. 오픈된 파일은 fd#번을 할당 받는다. 디폴트=1
exec #>>FILE : append용 FILE로 오픈.
exec #<&- : #번 fd를 닫는다. 읽기 채널
exec #>&- : #번 fd를 닫는다. 쓰기 채널
exec #<>FILE : 파일을 read, write가 모두 가능하도록 오픈. 흔하지 않다.
fd는 child process를 만들면 그에 상속이 된다.
2020/12/16 - [OS/리눅스] - Ubuntu16.04 exec 실습
Ubuntu16.04 exec 실습
1. exec 개념 실행(=프로세스 이미지 교체) 파일 열기. redirection의 일종. sub-shell을 만들지 않고 현재 셸에서 파일을 읽고/쓰고/닫을 수 있는 장점. exec # exec #>FILE : 쓰기용 FILE로 오픈. 오픈된 파..
donie.tistory.com
eval
문자열을 명령어로 실행.
변수명이 동적인 경우에 유용하다.
key & value의 list를 만들 때 주로 사용.
외부 명령어 실행 결과로 script가 생성된 경우에 사용.
문자열을 저장했는데, ""문자열""인 경우, eval을 쓰면 data인 문자열만 받아와 "문자열"로 저장 가능.
4강
printf
print formatted string
c언어의 printf와 동일한 방법으로 사용함.
%s를 사용할 때 $(...)를 쌍따옴표로 묶으면 인수가 5개에서 1나의 스트링으로 인식된다.
bc
계산을 해야 한다 -> bc 또는 awk
간단한 계산 -> bc
계산을 하면서 데이터를 처리해야 한다 -> awk
이렇게 한 줄로도 사용이 가능하다.
wait
wait child process
멀티 태스킹을 위한 기능.
모든 background작업이 완료될 때까지 wait명령어에서 barrier가 걸린다.
각각의 child process를 따로 wait해야 할 필요가 있을 때 사용하는 방법.
xargs
stdin으로부터 명령어 생성
command | xargs built-cmd 이런 방식으로 많이 사용. command의 stdout을 xargs가 stdin으로 넘겨받아 실행한다.
ex. tar 압축을 의도하지 않은 디렉토리에 풀었을 때 undo하는 방법
압축한 후 잘 못 푸는 코드
undo 하는 코드
-i {} 옵션: i옵션을 사용하면 {}에다 xargs의 stdin을 받는다. {}는 default임.
mkfifo
named pipe를 만드는 명령어.
5강
Transient process
Temporary service
nohup 명령어 & (background로 작동)
옛날 명령어.
시그널 블로킹
systemd-run 명령어
nohup의 문제점을 해결해줌. nohup은 프로세스로만 관리되고, 서비스로는 관리되지 않는 문제점.
nohup
주로 background running상태로 만들어서 실행한다.
SIGTTIN을 막기 위해 stdin을 /dev/null로 redirection하고
SIGTTOU을 막기 위해 stdout, stderr는 $HOME/nohup.out 으로 redirection한다
tmux나 screen에서 실행하는 경우도 있다.
일반 유저도 실행 가능.
systemd-run
1회성 임시 서비스
systemd-run --unit=name --scope --slice=slice_name command
--unit 설정 안해주면 UUID값이 랜덤으로 생성되어 설정된다.
service : daemon처럼 작동. PPID는 1이다. (* PPID=1이면 데몬일 가능성이 많다.)
루트권한으로 실행: systemd-run --unit=myevery5s --slice=mytest $(pwd)/every5s.sh
command의 경우 되도록이면 abs-path를 사용하는 것이 좋다.
transient unit은 stop되면 사라진다. 따라서 다시 systemctl start ...를 사용할 수 없다.
재시작하려면 systemd-run 어쩌구해서 새로 만들어야 함.
CPUQuota : CPU할당을 얼마나 받을 것인지
Memory
MemoryLimit=value: 메모리 제한. 기본 bytes단위. value에 infinity설정시 제한 없다.
MemoryMin : 최소
MemoryHigh : 최대
I/O
IOWeight=200:
journalctl -f -u highdirty
systemd-rum으로 생성된 transient unit의 journal을 보는 명령어
-f ; following. 게속 보겠다는 옵션
-u highdirty : unit이름
systemd-run은 nohup을 대체한다.
service(데몬) 혹은 scope(foreground에서 돌리는 것)로 실행 가능하다.
systemd의 기능이 resource control 기능을 통합 관리한다.
cgroup 중요한 용어.
6강
Load Average
시스템에 걸리는 부하의 평균 수치.
부하평균, 로드평균, LA
표준적인 LA산출방법은 없다.
LA의 정의는 "프로세스 대기 큐"의 길이의 정의.
CPU가 동시에 처리 가능한 명령 개수 : 1개
CPU가 10개이면 동시에 10개의 명령어를 처리 가능하다.
SMT : Simultaneous Multi Thread? 보통 얘기하는 쓰레드.
인사이드 머신 책 추천
LA > CPU개수 인 경우이면 대기하는 프로세스가 존재한다는 의미.
프로세스 Life-cycle
Running상태에서
sleep, paging, signaled -> Blocked상태로
preemption, time slice, yield -> Ready상태로
성능을 좋게 하기 위해서는 blocked로 빠지는 것을 최소화해주면 된다.
OS의 overhead 영향을 주는 요소들
Running, Ready상태가 빠르게 스위칭되는 경우. -> scheduling cost의 증가.
Blocking 시간이 긴 경우 -> CPU를 활용하지 못하게 된다.
/porc/loadavg : /proc에 Memory-mapped I/O로 만들어진 데이터
load average : 1분 | 5분 | 15분 | kernal scheduling entity (running/total) | last pid |
watch 명령: 계속 변화하는 것을 보려고 할 때
dd명령 : BSD계열에서 나온 명령어. bs : block size, 1024=1KiB, count : 개수, if : input file, of : output file
KB : 킬로 바이트 = 1000 = 10^3
KiB : 키비 바이트 = 1024 = 2^10
MB : 메가 바이트 = 1000 000 = 10^6
MiB : 미비 바이트 = 2^20
SIGTERM :
SIGINT : Ctrl-C로 죽이던가
EXIT : exit로 나가던가
ERR :
wa가 높아지면 HW의 문제일 가능성이 높다.
vmstat
virtual memory와 CPU usage를 확인.
free + buff + cache가 가용 메모리
si : swap in
so : swap out
interrupt
context switching
inact : LRU알고리즘으로 일을 안하고 있다는 뜻.
LRU 알고리즘 : Least Recently Used
가장 덜 최근에 사용된 메모리.
Locality - Temporal, Spatial
cpu가 시간을 보낼 때, user영역에서 보내느냐, system영역에서 보내느냐가 중요한 문제
us : user영역. non-kernel code. user 영역이 많다는 것은 무한 루프가 돌고 있다는 것. 또는 계산량이 많다는 것. 인공지능 계산이 많으면 us가 늘어난다.
sy : system영역. kernel 코드. system time이 늘어난다는 것은 HW를 건드리고 있다는 것.
wa : I/O처리 관련, CPU가 대기하는 시간. wa가 늘어나고 있으면 완전 비정상적인 상황
# of forks since boot. 부팅이후 fork횟수를 나타냄.
vmstat -t : 시간 정보
vmstat -s : 통계 정보
cpu ticks : cpu가 일을 하는 단위 시간을 tick이라고 한다.
vmstat -d : 디스크 정보. iostat이 더 좋아서 잘 안쓰는 기능.
vmstat -m : slab메모리.
7강
top
Top process, Table of processes
top
1행 : 부팅한 시간
2행 :
3행 : CPU utilization - vmstat에서 봤던 user영역, system 영역
4~5행 : Memory. 주로 MiB, GiB를 사용.
L : find. 서치하는 기능
& : again. 다음 것 계속 찾음.
V : 누가 자식이고 누가 부모인지 알려줌.
Z : 컬러 지정
<top 중요 필드>
RES : Resident Set Size. RAM이 점유하고 있는 크기
SWAP : 스왑을 사용한다는 것은 메모리 부족이 있었다는 것을 의미.
major : hard page fault
minor : soft page fault
top을 나갔다 들어오면 모든 셋팅이 reset됨.
Runtime Configuration file : 실행 중 W키를 누르면 현재 설정이 저장된다. 저장 경로를 알려줌. 잘못 저장하면 rm으로 지우면 된다.
CLI옵션
-b -n # : batch mode로 작동. n은 실행 횟수 지정 옵션. #에 횟수.
-p # : #프로세스 하나만 보고싶을 때. #는 pid번호.
Filter 설정
특정 유저 권한으로 실행된 것만 필터링, 메모리 사용량이 100MB이상인 것만 필터링 등
htop
htop은 따로 설치해야 쓸 수 있다.
atop
기능이 제일 많다.
인터페이스가 구식임.
atop도 설치해야 한다.
'프로그래머스 자율주행스쿨' 카테고리의 다른 글
TIL 20.12.21 - ROS (0) | 2020.12.22 |
---|---|
20.12.18 TIL - 메모리 관리, PAM ulimit, 커널 파라미터, CPU, GPU (0) | 2020.12.18 |
TIL 20.12.16 - sed, awk, debugging shellcheck (0) | 2020.12.16 |
TIL 20.12.15 - stdio, adv expressions, REGEX, PCRE (0) | 2020.12.15 |
TIL 20.12.14 - bash (0) | 2020.12.14 |
- Total
- Today
- Yesterday
- python3
- filesystem
- 백준알고리즘
- set backspace
- 코드리뷰
- 윈도우 복구
- C++
- 아두이노 IDE
- VMware
- VirtualBox
- sensehat
- roslaunch
- Ubuntu16.04
- subscriber
- HC-SR04
- vue/cli
- Ubuntu20.04
- Mount
- 우분투
- 리눅스
- 포트인식문제
- Publisher
- 초음파센서
- 원격 통신
- ROS
- 프로그래머스
- 윈도우
- umount
- Python
- 8자주행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |