42seoul Born2beRoot 프로젝트 Mandatory에서 요구하는 스크립트 작성 및 설정 과정이다.
Subject의 내용
subject 내용에서 보여줘야 할 정보들을 보여줄 스크립트를 작성하면 아래와 같다.
printf "#Architecture: "
uname -a
printf "#CPU physical : "
nproc --all
printf "#vCPU : "
cat /proc/cpuinfo | grep processor | wc -l
printf "#Memory Usage: "
free -m | grep Mem | awk '{printf"%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
printf "#Disk Usage: "
df -a -BM | grep /dev/map | awk '{sum+=$3}END{print sum}' | tr -d '\n'
printf "/"
df -a -BM | grep /dev/map | awk '{sum+=$4}END{print sum}' | tr -d '\n'
printf "MB ("
df -a -BM | grep /dev/map | 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}'
printf "#Last boot: "
who -b | awk '{printf $3" "$4"\n"}'
printf "#LVM use: "
if [ "$(lsblk | grep lvm | wc -l)" -gt 0 ] ; then printf "yes\n" ; else printf "no\n" ; fi
printf "#Connections TCP : "
ss | grep -i tcp | wc -l | tr -d '\n'
printf " ESTABLISHED\n"
printf "#User log: "
who | wc -l
printf "#Network: IP "
hostname -I | tr -d '\n'
printf "("
ip link show | awk '$1 == "link/ether" {print $2}' | sed '2, $d' | tr -d '\n'
printf ")\n"
printf "#Sudo : "
journalctl _COMM=sudo | wc -l | tr -d '\n'
printf " cmd\n"
uname
: 시스템 정보 출력 명령어
-a
: 커널 이름, 네트워크 호스트명, 커널 릴리즈 정보, 커널 버전, 시스템의 하드웨어 타입(아키텍쳐), 운영체제 이름을 출력한다.nproc --all
: 설치된 모든 코어 / 프로세스 수 출력
/proc/cpuinfo
: CPU 정보가 담겨있는 파일
cat /proc/cpuinfo | grep processor | wc -l
: CPU 정보가 담겨 있는 파일 중 프로세스만 찾아 개수를 출력
free
: 시스템 메모리 사용 현황 출력 명령어
-m
: 메가바이트 단위로 표시df
: 파일시스템 디스크 공간의 사용량을 출력하는 명령어
-a
: 0 블록의 파일시스템을 포함해 모든 파일시스템을 출력하는 옵션-B
: 지정한 크기(SIZE)를 블록단위로 정하여 용량 표시하는 옵션-BM
: 크기를 1M으로 블록단위를 정해 용량을 표시mpstat
: 사용가능한 CPU와 Core 별 사용량을 출력하는 명령어 (sysstat
설치 필요)
who
: 호스트에 로그인한 사용자 정보 출력
-b
: 마지막 시스템 부팅 시간을 출력하는 옵션ss
: 소켓 상태를 조회할 수 있는 유틸리티로 netstat
와 비슷한 역할을 수행한다.
hostname
: 시스템 이름을 확인하고 설정하는 명령어
-I
: 호스트의 IP 주소를 출력하는 옵션ip
: IP 유틸리티는 모든 최신 Linux 배포 환경에 설치된 iproroute2 패키지의 일부로, 인터페이스를 위/아래로 가져오고, 주소와 경로를 할당 및 제거하고, ARP 캐시를 관리하는 등 다양한 용도로 사용된다.
link
: 네트워크 인터페이스를 표시하고 수정한다.show
: 관련 인터페이스 출력한다.journalctl
: systemd
의 서비스 로그를 확인할 수 있으며, systemd-journald.service
에 의해서 systemd
의 정보들을 분석한다.
systemd
: 일부 리눅스 배포판에서 '유닉스 시스템 V'나 'BSD init 시스템' 대신 사용자 공간을 부트스트래핑하고 최종적으로 모든 프로세스들을 관리하는 init 시스템_COMM=sudo
: 특정로그(sudo) 보기이제 스크립트를 작성하였으니 서버 시작 시 스크립트는 10분마다 모든 터미널에 일부 정보를 표시하는 설정을 해준다. 이를 위해 아래 명령어를 입력한다.
chmod +x [쉘 스크립트 파일]
crontab -e
// 파일 편집기 선택 후 나오는 파일에서 아래 입력
*/10 * * * * /root/[쉘 스크립트 파일] | wall
chmod
: 해당 파일에 대한 권한을 변경하는 명령어
+x
: 해당 파일에 실행 권한을 줄 수 있는 명령어crontab
: 특정 파일을 주기적으로 실행 시킬 수 있는 프로그램
-e
: 예약 파일을 편집할 수 있게 하는 명령어crontab
기본 문법 # 분 시 일 월 요 [실행할작업]
# ┌───────────── 분 (0 - 59)
# │ ┌────────────── 시 (0 - 23)
# │ │ ┌─────────────── 일 (1 - 31)
# │ │ │ ┌──────────────── 월 (1 - 12)
# │ │ │ │ ┌───────────────── 요일 (0 - 6) (0이 일요일, 6이 토요일이다.)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * [실행할작업]
*
그대로 표기* * * * *
으로 두면 매분 마다 실행/
사용 (ex. /4
로 4분마다, 4시간마다 등을 설정 가능)-
사용(ex. 4-5
는 4부터 5까지라는 의미),
)를 입력해 여러 시간을 동시에 입력 가능crontab: installing new crontab
"/tmp/crontab.0doyEF":1: bad hour
errors in crontab file, can't install.
Do you want to retry the same edit?
wall
: 모든 터미널에 메시지를 출력하는 명령어