Information Security Study
240220 리눅스(셸 스크립트로 일기장 파일 실습) 본문
셸 스크립트 실습
셸 스크립트 활용의 장점과 환경설정
- 셸 스크립트는 기존 명령어들을 조합해서 새로운 명령어를 만들 수 있다는 큰 장점이 있다.
- 파이프라인, 리다이렉션 등의 셸을 기능과 셸 스크립트를 조합하면 다양한 문제를 해결할 수 있다.
우분투 22.04 버전을 사용해서 실습했다.
컨테이너를 켜준다.
apt update 후 file을 설치한다.
/usr/bin/* 경로인 모든 파일 중 shell script 를 검색해서 shell script로 작성된 명령어들을 확인할 수 있다.
root 계정 사용은 문제를 야기할 수 있기 때문에 사용할 계정을 추가했다.
생성한 계정으로 접속하고 sandbox 폴더를 만들었다.
이 폴더에 대부분의 스크립트를 작성할 것이다.
셸 스크립트를 사용하면 좋은 경우
1) 중규모 시스템에서 자동화하기
- 셸 스크립트에는 변수 타입이 없고 객체지향 프로그래밍이 불가능하며 자료구조를 활용하는 프로그래밍이 불가능하다.
- 따라서 대규모 시스템에서 사용하기에 부적합하고 소규모 시스템에서 사용하기에도 다소 작성이 복잡하기 때문에 애매한 점이 있다.
2) 성능보다 자동화 자체에 방점을 두기
- 셸 스크립트는 기본적으로 한 행씩 명령어를 수행하기 때문에 속도가 다소 느리다.
- 실행 속도가 중요하다면 다른 언어를 쓰는것이 좋다.
일기장을 작성하는 셸 스크립트 프로그래밍하기
이번 실습에는 vi, vim이 아닌 윈도우의 메모장과 같이 사용 가능한 nano 에디터를 써봤다.
새로 만든 계정에는 root 권한이 없으므로 exit으로 빠져나와서 nano를 설치해 준다.
sandbox 디렉토리로 경로를 이동한 후
nano diary.sh로 셸 스크립트 하나를 생성해 위와 같이 작성했다.
작성 완료 후 Ctrl+o, Ctrl+x로 저장 및 종료해 주면 된다.
스크립트 설명
- ${HOME}/diary 라는 경로를 directory 변수에 저장한다.
- 만약 directory 변수에 적힌 경로에 폴더가 존재하지 않는다면 mkdir 명령을 이용해 폴더를 생성해 준다.
- 그리고 nano에디터를 이용해서 연도-월-일.txt의 형식으로 당일 서버시간 기준 날짜로 일기 파일까지 생성한다.
ll로 확인해 보면 diary.sh는 실행권한이 없다.
현재 권한은 644이기 때문에
chmod로 실행권한을 추가해줬다.
추가한 뒤에./diary.sh로 셸스크립트를 실행하면
home 폴더 하위에 diary 폴더가 없으므로 폴더를 생성하고
연-월-일.txt 파일을 nano 에디터로 실행한다.
실행된 에디터로 일기를 작성하고 저장 후 빠져나왔다.
다시 실행을 해보면 저장된 오늘 날짜의 일기파일이 열리는 것을 확인할 수 있다.
이때 diary 폴더는 이미 존재하므로 생성되지 않는다.
일기장 셸 스크립트 개선하기
일기장 셸 스크립트를 개선하기 위해 다시 sh파일을 열어
오늘 날짜의 일기장이 없다면 상단에 날짜가 포함된 일기장을 생성하도록 수정할 것이다.
연-월-일.txt를 저장하는 dairyfile 변수를 사용해서 diaryfile이 존재하지 않는다면 > 기호로 해당 파일을 만들도록 스크립트를 수정했다.
./diary.sh로 실행하면 일기장 상단에 오늘 날짜가 입력된 채로 새 일기장 파일이 열리는 것을 볼 수 있다.