7주차 CSM_실습일지📝

ᴶᴬᴱᵞᴼᴼᴺ·2021년 4월 18일
1

컴퓨터 시스템관리

목록 보기
7/15
post-thumbnail

💡 7주차에는 리눅스에서 사용하는 셸(Shell)에 대해 배웠으며 셸 스크립트를 이용하여 간단한 스크립트를 작성해보는 실습을 했다. 또한 cron & at을 통해 예약작업을 설정해보는 실습도 하였다.

실습과제

📌유용한 bash script를 하나 검색하여, 유용한 이유, 해당 스크립트 설명, 실행결과 작성하기

실행결과🔽

👉 현재 디렉토리 안에 있는 모든 파일에 대해서 특정 키워드를 포함함 라인(줄)을 출력하는 프로그램이다. 리눅스로 작업을 하다보면 파일이 여러개 생길 수 있는데 이때 찾고싶은 키워드가 어떤 파일에서 어느 라인에 쓰여졌는지 보여주면 시간을 절약하는 등 여러모로 유용할 것이라고 생각하였다.

새로 배운 내용

✔ Shell
-사용자의 명령을 해석하여 커널에 전달
-Shell에는 여러가지 종류가 있음(ex. bash shell, Zshell 등). Shell의 종류에 따라 기본적인 사용방법, 문법들이 다름
-Kernel & Shell

✔ Shell Script
-명령어 집합
-과정이 복잡하여 하나라고 빠지면 문제가 생기거나, 매일 주기적으로 해야 하는 명령의 집함
-시스템을 사용하여 환경 설정하는 경우, 애플리케이션을 설치할 경우, 매일 점검해야 하는 시스템 상태 체크 등
👉 주로 사용자보다는 시스템관리자가 사용함

✔ bash (Bourne Again SHell)
-1989년, 브라이언 폭스Brian Fox가 발표한 유닉스 셸
-우분투에서 기본으로 사용하는 셸

🔗bash 특징
▪ alias 기능 (명령 단축 기능)
alias ls2 = "ls -al"
alias c = "clear"
▪ History 기능
▪ 연산 기능
▪ Job Control 기능
▪ 자동 이름 완성 기능
▪ 프롬프트 제어 기능
▪ 명령 편집 기능

✔ 환경변수
: echo $환경변수이름

  • 환경변수 설정 : export 환경변수 = 값
    export HI = 'hi' (새로운 환경변수 설정)
    echo $HI (hi 출력)
    unset HI (해제)
  • 환경변수 확인
    printenv

🔽환경변수를 이용하여 정보출력 [실습]

👉스크립트 파일 실행
: bash info.sh 또는
chmod+x info.sh -> ./info.sh

👉위의 사진에서처럼 hello.sh 파일을 실행할 수 있는 모드로 변경하면 ls -l를 했을때 hello.sh 부분만 초록색으로 바뀜

✔ 변수
▪ 미리 선언하지 않으며, 처음 변수에 값이 할당되면 자동으로 변수 생성
▪ 변수에 넣는 모든 값은 문자열(String)로 취급

▪ 변수 값을 대입할 때는 $를 사용하지 않음
▪ 대소문자 구분
▪ 대입연산자 '=' 좌우에는 공백이 없어야 함

✔ 조건문
▪ [조건] 의 결과가 참 또는 거짓에 따라 동작하는 구조
▪ [조건] 안의 각 단어 사이에 공백이 있어야 함
▪ 조건문에는 관계 연산자인 AND (-a 또는 &&) 와 OR (-o 또는 || )를 사용함

👀 파일조건 // 결과
-d 파일이름 // 파일이 디렉터리면 참
-e 파일이름 // 파일이 존재하면 참
-f 파일이름 // 파일이 일반 파일이면 참
-g 파일이름 // 파일에 set-group-id가 설정되면 참
-r 파일이름 // 파일이 읽기 가능이면 참
-s 파일이름 // 파일크기가 0이 아니면 참
-u 파일이름 // 파일에 set-user-id가 설정되면 참
-w 파일이름 // 파일이 쓰기 가능 상태면 참
-x 파일이름 // 파일이 실행 가능 상태면 참

👀 산술비교 // 결과
수식1 -eq 수식2 // 두 수식(또는 변수)이 같으면 참
수식1 -ne 수식2 // 두 수식(또는 변수)이 같지 않으면 참
수식1 -gt 수식2 // 수식1이 크다면 참
수식1 -ge 수식2 // 수식이 크거나 같으면 참
수식1 -lt 수식2 // 수식 1이 작으면 참
수식1 -le 수식2 // 수식 1이 작거나 같으면 참
!수식 // 수식이 거짓이라면 참
👉 산술비교를 할 때 부등호 대신 일종의 키워드를 씀

셸 스크립트 조건문 if 🔽

셸 스크립트 조건문 while 🔽


셸 스크립트 조건문 case 🔽

✔ 반복문
: 일정 범위 또는 조건이 참인 동안 반복할 명령어를 반복 실행

✔ 사용자 정의 함수
▪ 사용자가 직접 함수를 작성하고 호출할 수 있음
▪ 함수를 호출할 때 파라미터를 붙여서 사용할 수 있음

vi func1.sh

#!/bin/bash
myfunc() {
	echo "hello $1"
    }
    
    myfunc "world"
    exit0

functionName () {
...
}
...
functionName

vi func2.sh

#!/bin/bash
myfunc2() {
	local myresult="Hello world"
   echo $myresult
   }
   
result="$(myfunc)"
echo $result
echo $myresult
exit 0

functionName () {
local variable
...
echo variable
}
...
variable="$(functionName)"

✔ eval
: 문자열을 명령어로 인식하고 실행

✔ export
-외부 변수로 선언
-선언한 변수를 다른 프로그램에서도 사용할 수 있음

✔ set과 $(command)

-리눅스 명령을 결과로 사용하려면 '$(command)'형식을 사용해야 함
-결과를 파라미터로 사용할 때 set 사용

✔ shift
: 파라미터 변수를 왼쪽으로 한 단계씩 아래로 이동시킴

✔ 사용자 계정 이미 등록되어 있는지 여부 확인
cat /etc/passwd // 사용자 계정 정보가 등록된 파일 출혁
cat /etc/passwd | grep ubuntu // 사용자 계정 중 ubuntu 검색
cat /etc/passwd | grep ubuntu | wc -l // ubuntu 가 포함된 라인 줄 출력

[실습]🔽

✔ 작업예약 : cron & at
💻 cron
주기적으로 반복되는 일을 자동으로 실행할 수 있도록 시스템 작업을 예약하는 것
▪ cron과 관련된 데몬(서비스)은 crond, 관련 파일은 /etc/crontab

/etc/crontab의 형식
▪ 분 시 일 월 요일 사용자 실행명령
▪ 00 05 1 **root cp -r /home /backup
: 매월 1일 새벽 5시 00분에 root가 /home 디렉터리를 /backup 디렉터리로 복사한다는 의미

💻 at
일회성 작업을 예약하는 것
▪ at 3:00am tomorrow
▪ at> 프롬프트에 예약 명령어 입력 후 < enter >
▪ 완료되면 < ctrl > + < d >
▪ at -l

👉현재 하나의 작업이 root로부터 등록되었다는 의미

▪ (취소) atrm 작업번호

✔ date
: 현재 설정된 로케일locale 과 타임존time-zone 에 따라 현재 시각을 보여주는 리눅스 명령어

date // 현재 시간 확인
date -d yesterday // 현재 시간을 기준으로 어제 시간을 보여줌

문제 발생 및 해결방안

매월 15일 새벽 3시 1분에 '/home' 디렉터리와 그 하위 디렉터리를 '/backup' 디렉터리에 백업하는 cron 실습을 할때 백업이 제대로 실행되지 않는 문제가 발생하였다.
✍다행히 슬랙에서 같은 문제를 겪은 친구가 질문을 해주어서 교수님이 답변해주신 내용을 참고하였더니 문제가 해결되었다. myBackup.sh 파일을 실행할 수 있는 모드로 변경 chmod +x myBackup.sh 하지 않아서 생긴 문제임을 알 수 있었다.
문제 해결 후 백업이 잘 되었음!🔽

참고할 만한 내용

회고

  • 플러스(+)
    : 셸, 셸 스크립트, bash 등 다양한 내용들을 배우고 관련된 실습을 해보는 경험을 할 수 있어서 좋았다. 대부분의 내용은 다 처음 접하는 것이어서 흥미롭게 들을 수 있었고 특히 셸 스크립트 프로그래밍을 할 때 c언어에서처럼 조건문 if와 while을 사용하고 반복문 for를 사용한다는 것이 신기했다. cron과 at을 이용한 작업예약이 가능하다는 것도 인상적이었고 관련된 실습을 통해 vi 편집기에 스크립트를 작성하고 실행해볼 수 있어서 좋았다.

  • 마이너스(-)
    : 이번 실습은 Server(b)를 초기화해야 했는데 내가 백업해둔 Server(b)파일이 없어서 기존의 Server(b)를 아예 삭제하고 새롭게 다시 깔아야 했던 것이 아쉬웠다. 강의 초반에 Server파일만 백업해두지 말고 Server(b)와 Client파일도 다 백업해둘걸 하는 뒤늦은 후회를 하기도 했다. 하지만 이번 기회에 확실하게 모든 파일을 백업해놔서 앞으로의 실습을 하는데 차질이 생기지 않을 것 같다.
    셸 스크립트 프로그래밍을 할때 글씨가 작고 파란색 글씨는 잘 보이지 않아서 실습을 할때 불편함이 있기도 했다. 실습을 다하고 나서 컴퓨터의 디스플레이 설정에서 해상도를 변경하면 화면크기가 변경되어 글씨가 크게 나타나도록 할 수 있다는 것을 알게 되었다. 다음 실습에서 이를 참고하면 좋을 것 같다.

  • !!!!!
    : 셸 스크립트의 존재와 셸 스크립트 작성 및 실행방법을 여러 실습을 하면서 새롭게 알아갈 수 있었다! 반복되는 일을 자동으로 실행되도록 설정하는 cron과 특정한 날짜와 시간에 일회성 작업이 실행되도록 예약하는 at은 정말 유용하고 이를 잘 활용하면 교수님 말씀대로 미래에 조기 퇴근을 하고 워라밸을 지킬 수 있는 시스템 개발자가 될 수 있겠다는 생각을 했다:-)

0개의 댓글