[평가시트 원문] 더보기
Script monitoring
Remember: Whenever you need help checking something, the student being evaluated should be able to help you. The student being evaluated should explain to you simply:
- How their script works by showing you the code.
- What "cron" is.
- How the student being evaluated set up their script so that it runs every 10 minutes from when the server starts. Once the correct functioning of the script has been verified, the student being evaluated should ensure that this script runs every minute. You can run whatever you want to make sure the script runs with dynamic values correctly. Finally, the student being evaluated should make the script stop running when the server has started up, but without modifying the script itself. To check this point, you will have to restart the server one last time. At startup, it will be necessary to check that the script still exists in the same place, that its rights have remained unchanged, and that it has not been modified. If something does not work as expected or is not clearly explained, the evaluation stops here.Bonus
Evaluate the bonus part if, and only if, the mandatory part has been entirely and perfectly done, and the error management handles unexpected or bad usage. In case all the mandatory points were not passed during the defense, bonus points must be totally ignored.
Script monitoring
피평가자는 당신에게 다음의 내용들을 간단히 설명해야합니다 :
- 스크립트가 어떻게 동작하는 지 당신에게 코드를 보여주기
- "cron"이란 무엇인지
- 피평가자가 어떻게 스크립트를 설정했길래 그게 (서버가 시작된 이후로) 10분마다 한번씩 실행되는지
일단 스크립트가 올바른 동작을 한다는 게 검증되고 나서는, 피평가자는 그 스크립트가 매분마다 실행되도록 해야합니다. 그 스크립트가 동적인 값들과 함께 올바르게 작동한다는 것을 보장하기 위해서, 당신은 원하는 무엇이든 실행시킬 수 있습니다. 최종적으로, 피평가자는 그 스크립트가 스스로를 수정하지 않고도 서버가 시작되면 실행을 멈추게끔 만들어야합니다. 이 점을 확인하기 위해서는, 당신은 마지막으로 한번 서버를 재시작해야 할 것 입니다. 막 시작되었을 때, 그 스크립트가 아직 같은 장소에 존재하는 지, 권리(권한)가 바뀌지 않은 채로 남아있는지, 그리고 수정되지 않았는 지 반드시 확인해야합니다.
1. 스크립트가 어떻게 동작하는 지 실행결과 보여주기
(나중에 내 monitoring.sh 실행결과 스크린샷 첨부)
2. "cron"이란 무엇인가
Command Run On (UNIX scheduler)
unix 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 스캐쥴러이다.
일정 주기나 특정 시간에 예약된 명령어가 수행되도록 도와주는 기능이다.
예시를 들어보자.
하루에 한차례 특정 서버에 접속해서 데이터를 받아와야하거나, 새벽 3시에 특정 작업을 수행해야하는 상황이 있다고 하자. 그런데 이런 경우에는 매일 같은 작업을 직접하기 번거로울 수 있다. 아니면 그 시간에 작업을 처리하지 못해서 곤란한 상황이 생길 수 있다. 그럼 어떻게 하면 이 문제를 해결할 수 있을까?
바로 이때, cron을 사용하면 된다.
이렇게 반복적인 예약작업이 필요할 때 크론이 유용하게 쓰인다.
그리고 위와 같은 cron 작업을 설정하는 파일을 crontab 파일이라고 부른다.
참고) 크론탭 사용법
리눅스 크론탭(Linux Crontab) 사용법 :: JDM's Blog
* 이 포스팅은 네이버 블로그에서 작성(2013.04.01)한 내용을 옮겨온 것입니다. 오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요. "특정 시간
jdm.kr
https://blog.daum.net/binsolb/11365692
Cron이란 무엇인가
1. Cron이란 무엇인가 Cron은 간단한게 말해서 unix 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 데몬이다. 예를 들어 하루에 한차례 특정 서버에 접속해서 데이터를 받아와야 한다든지,
blog.daum.net
3. 스크립트 설명
#!/bin/bash_
printf "#Architecture: "
uname -srvmo
# 시스템 정보 확인
printf "#CPU physical : "
nproc --all
# 물리적 cpu의 개수 확인
printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l
# 가상머신에 할당된 물리적 CPU의 개수 확인
printf "#Memory Usage: "
free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
# 메모리 점유율 확인
printf "#Disk Usage: "
df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -H -a | grep /dev/mapper/ | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "GB ("
df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4 }END{printf "%d", sum1 / sum2 * 100}' | tr -d '\n'
printf "%%)\n"
# 디스크의 공간 및 디스크 사용률 확인
printf "#CPU load: "
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}'
# CPU 사용률 확인
printf "#Last boot: "
who -b | sed 's/^ *system boot //g'
# 마지막으로 시스템 부팅한 시간 확인
printf "#LVM use: "
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi
# LVM이 사용되었는 지 여부 확인
printf "#Connections TCP : "
ss | grep -i tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"
# TCP 연결을 확인
printf "#User log: "
who | wc -l
# 현재 로그인 중인 이용자의 수를 확인
printf "#Network: IP"
/sbin/ifconfig | grep broadcast | sed 's/inet//g' | sed 's/netmask.*//g' | sed 's/ //g' | tr -d '\n'
printf " ("
/sbin/ifconfig | grep 'ether ' | sed 's/.*ether //g' | sed 's/ .*//g' | tr -d '\n'
printf ")\\n"
# 현재 ip주소와 mac주소 확인
printf "#Sudo : "
grep -a 'sudo:' /var/log/auth.log | grep 'COMMAND=' | wc -l | tr -d '\n'
printf " cmd\n"
# sudo 명령어 사용 횟수 확인
exit 0
참고) 쉘 기본 명령어
(1) grep : 입력으로 전달된 파일의 내용에서, 특정 문자열을 찾고자할 때 사용
$ grep [OPTION] [PATTERN] [FILE]
예시 : grep "Apple" -> "Apple"이라는 문자열을 검색하고, 문자열이 존재하는 라인을 출력
(2) wc : word count, 문자/단어/줄 수 등을 출력
wc -l : 지정한 파일의 줄 수(line) 출력, 행수(row) 출력
응용 : grep "A" | wc -l
-> "A"라는 문자열이 포함된 문장의 개수를 센다.
(3) awk : 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작화하거나 데이터화
데이터 분류, 패턴 매칭 검사, 데이터 조작 및 연산 등의 액션 수행, 그 결과를 출력
$ awk [OPTION ...] [awk program] [ARGUMENT ...]
awk program 의 구조 -> pattern {action}
$ awk [OPTION ...] 'pattern {action}' [ARGUMENT ...]
- pattern, action 모두 생략 가능 (생략 시 디폴트 : pattern - 모든 레코드, action - print)
* 특별한 패턴 : "BEGIN", "END"
- awk가 BEGIN 패턴을 식별하면 입력데이터로부터 첫 번째 레코드를 처리하기 전에 "BEGIN"에 저장된 액션을 실행
- "END" 패턴은 "BEGIN"과 반대로, 모든 레코드를 처리한 다음 "END"에 지정된 액션을 실행
예시 :
$ awk 'BEGIN { print "TITLE : Field value 1,2"} {print $1, $2} END {print "Finished"}' file.txt
* printf 와 print의 차이점 : printf와 다르게, print는 개행까지 출력한다. 만일 개행을 빼고 싶다면 tr -d '\n' 명령어를 추가해줘야한다.
(4) tr : 문자 변환/삭제
지정한 문자를 변환하거나 삭제하는 데 사용되는 명령어. 특정한 문자를 다른 문자로 변환하거나 특정 문자를 제거하는 데 사용.
$ tr [옵션] 문자열1 [문자열2]
옵션 :
-d : 문자열1에서 지정한 문자를 삭제
-s : 문자열2에서 반복되는 문자를 삭제
-t : 문자열1을 문자열2의 길이로 자름
(5) sed : Stream Editor. 원본 텍스트 파일을 편집하는 명령어 (치환, 삭제 등)
- sed 's/문자열1/문자열2/g' : 출력 중 문자열1이 나오는 부분을 전부 문자열2로 치환한다.
(6) 조건문
1) if 문
if [ 조건절 ]
then
실행절
fi
2) if-else 문
if [ 조건절 ]
then
실행절
else
실행절
fi
3) if-elif-else 문
if [ 조건절 ]
then
실행절
elif [ 조건절 ]
then
실행절
else
실행절
fi
1. #Architecture : 시스템 정보 확인
uname -srvmo
uname(unix name) - 시스템의 정보를 확인
사용된 옵션
s : 커널 이름을 출력
r : 운영체제의 배포 버전을 출력
v : 커널 버전 정보를 출력
m : 시스템의 하드웨어 타입 정보 출력
o : 운영체제 정보를 출력
참고) uname과 uname의 옵션 더보기
2. #CPU Physical : 물리적 cpu의 개수 확인
nproc --all
nproc과 nproc --all의 차이 (주의)
- nproc : 사용가능한 processing unit들을 출력한다
- nproc --all : 설치된 프로세서의 개수를 출력한다.
즉, nproc --all 을 실행할 경우, nproc만 실행했을 때의 cpu개수보다 더 많이 나올 수도 있다.
3. #vCPU : 가상머신에 할당된 물리적 CPU 개수 확인
cat /proc/cpuinfo | grep processor | wc -l
- vCPU : 가상머신에 할당된 물리적 cpu. (기본값으로, 가상머신은 각각 1개의 vCPU를 배정받는다)
- /proc/cpuinfo 파일을 통해, CPU 정보를 확인할 수 있다.
- /proc/cpuinfo에서는, 각각의 프로세서에 식별자를 부여한다 (0부터 시작).
그리고 각각의 프로세서 별로 정보를 표시한다.
cat /proc/cpuinfo 만 실행했을 경우 나오는 출력 예시 :
$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz
stepping : 2
cpu MHz : 933.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
bogomips : 4256.49
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz
stepping : 2
cpu MHz : 933.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 2
apicid : 1
initial apicid : 1
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
bogomips : 4256.40
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 37
model name : Intel(R) Core(TM) i3 CPU M 330 @ 2.13GHz
stepping : 2
cpu MHz : 933.000
cache size : 3072 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 2
apicid : 4
initial apicid : 4
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
bogomips : 4256.43
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
** /proc/cpuinfo 파일은 코어별로 정보가 표시되는데, 해당 정보의 개수를 세면 ("processor"가 나온 횟수) 코어의 수를 셀 수 있다.
☞ 따라서 grep "processor"을 통해 프로세서라는 문자열이 나온 문장을 모두 가져오고, wc -l을 통해 그 개수를 센다.
그렇게하면 프로세서의 개수를 셀 수 있다.
4. #Memory Usage : 메모리 점유율 확인
free -m | grep Mem | awk '{printf "%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
free만 실행하면 다음과 같은 결과가 나온다.
% free
total used free shared buffers cached
Mem: 2061712 490924 1570788 0 60984 220236
-/+ buffers/cache: 209704 1852008
Swap: 587768 0 587768
이때 grep Mem을 사용하면 Mem이 포함된 문장을 한 줄 가져올 수 있다.
거기에서 두번째 필드($2)의 'total'과 세번쨰 필드($3)의 'used'의 값을 가져와서 예제화면에 맞게끔 출력한다.
또, (used / total) * 100 을 출력하여 메모리 점유율도 볼 수 있게끔 한다.
**어 근데 여기서 $3, $2가 아니라 $2, $3 순서가 아닌가? 되게 이상하다 나중에 다시 보도록!
5. #Disk Usage : 디스크의 공간 및 디스크 사용률 확인
df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "\"
df -H -a | grep /dev/mapper/ | awk '{sum += $4}END{print sum}' | tr -d '\n'
printf "GB ("
df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4}END{printf "%d", sum1/ sum2 * 100}' | tr -d '\n'
df : 파일 시스템의 디스크 공간 확인
옵션없이 실행할 경우 kilo byte 단위로 현재 마운트된 파일 시스템의 정보를 표시해준다.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 391616 0 391616 0% /dev
tmpfs 419276 0 419276 0% /dev/shm
tmpfs 419276 47592 371684 12% /run
tmpfs 419276 0 419276 0% /sys/fs/cgroup
/dev/xvda2 10473452 4410856 6062596 43% /
tmpfs 83852 0 83852 0% /run/user/1000
옵션 :
-a : 모든 파일 시스템을 출력
-B : 지정한 크기(SIZE)를 블록단위로 정하여 용량을 표시
이때, '-BM'은 사이즈를 1,048,576 바이트(=1024KB = 1MB)를 단위로 출력한다. (원래 기본단위는 1024 바이트이다)
-H : 1,000 단위로 용량을 표시 (e.g: 1.1G; 원래 1KB는 1,024 Byte지만 사용자가 보기 편하도록 하기 위함)
참고) 더많은 df 옵션
- /dev/mapper/
** device mapper : 리눅스 커널에 의해 제공되는 프레임워크이다. 이것은 물리적인 블록 디바이스들을 가상블록디바이스로 매핑하는 역할을 한다. 이것은 LVM(logical volume manager), RAIDs, 그리고 디스크 암호화를 위한 기초가 된다. 그리고 파일시스템 스냅샷과 같은 추가적인 기능들도 제공한다.
참고) LVM과 RAIDs
- df 실행결과 순서대로 파일시스템, 1M-blocks, Used, Available, Used % Mount on 의 정보가 표시된다
(1) df -BM -a | grep /dev/mapper/ | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "\"
- 사용하고 있는 디스크 용량 출력
파일 시스템이 /dev/mapper/인 줄을 가져오면 현재 사용 중인 디스크가 여러개 나타난다.
이 중 세번째 열, 즉 사용된 용량(Used)들을 총 합해서, 현재 사용하고 있는 디스크의 용량(mb 단위)을 계산한다.
(이때, print는 printf와 다르게 개행을 포함하므로, tr -d '\n' 명령어를 통해 끝의 개행을 빼준다)
(2) df -H -a | grep /dev/mapper/ | awk '{sum += $4}END{print sum}' | tr -d '\n'
- 사용가능한 디스크 용량 출력 (GB 단위)
df를 -H 옵션과 함께 실행시켜주면 1k-blocks가 size로 바뀌어있다. 그리고 MB, GB 단위로 표시되어 있다.
이때 4번째 열에 있는 Available을 보면, 현재 마운트된 파일시스템에서 사용가능한 공간이 나온다.
따라서 /dev/mapper/에 있는 사용가능한 공간을 모두 더한 뒤 출력해준다. (print로 인한 개행을 뺴기 위해 tr -d '\n' 추가)
(3) df -BM -a | grep /dev/mapper/ | awk '{sum1+=$3 ; sum2+=$4}END{printf "%d", sum1/ sum2 * 100}' | tr -d '\n'
- 사용하고 있는 용량 / 사용가능한 디스크 용량의 비율 출력
참고자료 링크
https://blog.daum.net/binsolb/11365692
Cron이란 무엇인가
1. Cron이란 무엇인가 Cron은 간단한게 말해서 unix 운영체제에서 어떤 작업을 특정 시간에 실행시키기 위한 데몬이다. 예를 들어 하루에 한차례 특정 서버에 접속해서 데이터를 받아와야 한다든지,
blog.daum.net
리눅스 크론탭(Linux Crontab) 사용법 :: JDM's Blog
* 이 포스팅은 네이버 블로그에서 작성(2013.04.01)한 내용을 옮겨온 것입니다. 오늘은 리눅스 크론탭에 대해 알아볼까 합니다. 음, 윈도우에서는 스케줄러와 비슷하다고 보면 되겠네요. "특정 시간
jdm.kr
https://hippogrammer.tistory.com/79
[리눅스 명령어] uname
uname : 시스템의 정보 확인 시스템의 정보를 확인하는 명령어이다. 시스템의 이름, 사용중인 운영체제와 버전, 호스트명, 하드웨어 정보 등을 확인할 수 있다. uname명령어 [root@hyperledger] $ uname 이
hippogrammer.tistory.com
리눅스 특수 문자 정리(Linux Shell) :: JDM's Blog
* 이 포스팅은 네이버 블로그에서 작성(2013.02.19)한 내용을 옮겨온 것입니다. 음, 다른 내용이 아니고 리눅스로 개발할 때 초기 시절 각종 명령어와 쉘스크립트 속에서 허우적거렸던 적이 있었다.
jdm.kr
Why different CPU count from nproc and nproc --all in OpenVZ container?
I'm trying nproc and nproc --all in an OpenVZ container to count the number of CPU threads assigned to the vps by upstream provider. While nproc resulting 1, nproc --all resulting 24 CPU threads. May
unix.stackexchange.com
https://www.thegeekdiary.com/proccpuinfo-file-explained/
/proc/cpuinfo file explained – The Geek Diary
www.thegeekdiary.com
https://mentha2.tistory.com/82
리눅스(Linux) 문자, 단어, 행(row) 수 출력 명령어 (wc) 사용법
리눅스(Linux)에서 문자, 단어, 줄(line) 수를 출력하는 wc 명령어 사용방법에 대해 적어봅니다. 해당 명령어 프로그램은 표준 유닉스 프로그램으로서 대부분의 리눅스 배포판에서 사용할 수 있습니
mentha2.tistory.com
https://www.lesstif.com/lpt/linux-df-93127662.html
linux df 명령어 사용법
www.lesstif.com
How to get the percentage of memory free with a Linux command?
I would like to get the available memory reported as a percentage using a Linux command line. I used the free command, but that is only giving me numbers, and there is no option for percentage.
stackoverflow.com
https://recipes4dev.tistory.com/171
리눅스 awk 명령어 사용법. (Linux awk command) - 리눅스 파일 텍스트 데이터 검사, 조작, 출력.
1. awk 명령어. 대부분의 리눅스 명령들이, 그 명령의 이름만으로 대략적인 기능이 예상되는 것과 다르게, awk 명령은 이름에 그 기능을 의미하는 단어나 약어가 포함되어 있지 않습니다. awk는 최
recipes4dev.tistory.com
https://big-sun.tistory.com/23
Linux - df 명령어 옵션 정리
df : 파일 시스템 디스크 공간 확인 $ df ## 옵션 설명 -a : 모든 파일시스템을 출력한다. $ df -a -B : 지정용량을 블럭단위로 정하여 용량을 출력한다. $ df -B 4096 --total : 총합 total 라인을 추가하여..
big-sun.tistory.com
https://zidarn87.tistory.com/137
리눅스 명령어 / tr 명령어 - 문자 변환/삭제
리눅스 명령어 / tr 명령어 - 문자 변환/삭제 tr 명령어는 지정한 문자를 변환하거나 삭제하는 명령어입니다. 특정한 문자를 다른 문자로 변환하거나 특정 문자를 제거하는데 사용되는 명령
zidarn87.tistory.com
https://unix.stackexchange.com/questions/484659/what-does-this-command-do-sed-s-g
what does this command do sed 's/~/ /g'?
I am passing a set of 6 arguments initially to a script. Script.sh a b c d e f One of the commands in the script which is managing the arguments; comm=$(echo $1 |sed 's/~/ /g')
unix.stackexchange.com
'IT > 42Seoul' 카테고리의 다른 글
[born2beroot] monitoring 파트 정리2 (0) | 2021.11.17 |
---|---|
[born2beroot] 개념 정리 - 프로젝트 개요 (0) | 2021.11.15 |
[GET_NEXT_LINE] 구현 예시 (0) | 2021.06.11 |
[GET_NEXT_LINE] 구현 준비 (0) | 2021.06.04 |
Libft 과제 시 유의점 (테스터기, protected, Makefile) (0) | 2021.05.31 |