데이터로그😎

[Linux] 3. Shell & Shell script 본문

Data Engineering

[Linux] 3. Shell & Shell script

지연v'_'v 2024. 1. 15. 17:35

Kernel & Shell

Kernel & Shell

hardware - 물리적인 컴퓨터 시스템의 구성요소
- 메모리, 하드디스크, SSD, CPU
Kernel - 운영체제의 핵심 부분
- 하드웨어와 소프트웨어 간의 통신을 담당
- 시스템 리소스 관리
- Window 커널, Linux 커널, macOS 커널 등
Shell - 사용자와 운영체제 간의 중개자
- 명령어를 해석하고 실행하여 사용자에게 서비스 제공
- 명령어를 해석하여 kernel에 전달
- Bash, Zsh, Fish 
Applications - 사용자가 직접 상호작용하거나 업무를 수행하는 소프트웨어 어플리케이션
- 텍스트 편집기, 웹 브라우저, 게임, 그래픽 소프트웨어 

 

 

Shell: bash vs zsh

cd + 스페이스바 + tab 2번

cd를 입력후 스페이스바 한 번, 그리고 tab키 두번을 누르면 디렉토리 목록이 나온다.

bash는 숨긴 디렉토리까지 나오는 반면, zsh는 숨긴 디렉토리는 나오지 않는다.

zsh
bash

 

디렉토리 이동

/home/ubuntu 라는 디렉토리로 이동하려고 한다. 

bash에서는 cd 뒤에 디렉토리의 전체 이름을 다 써야한다. 그러나 zsh에서는 cd 뒤에 디렉토리의 맨 앞글자명을 쓰고 tab을 누르면 자동으로 디렉토리명이 완성이 된다.

zsh
bash

 

Shell Script 란?

여러개의 명령을 순차적으로 실행하며 업무가 이뤄지는 경우가 있다. 순차적으로 실행되어야 하는 명령의 순서, 스크립트를 Shell Script라고 한다.

 

예시

만약, 확장자가 log인 파일들을 정기적으로 bak라는 디렉토리에 백업하고 싶다면? 

원하는 진행 순서는 아래와 같다.

  1. 현재 디렉토리에 bak이라는 폴더가 없다면 만들고, 있다면 만들지 않는다.
  2. 현재 디렉토리에 있는 모든 파일 중, .log로 끝나는 파일을 bak 디렉토리로 복사한다.

이제부터 본격적으로 shell script를 만들어 보자.

 

0. 준비

mkdir script
cd script
touch a.log b.log c.log -- script 파일 내에 생성

 

1. bakup이라는 파일을 생성한다.

nano backup

 

2. script 작성 (backup 파일 내)

  • #!/bin/bash  => backup 파일에 있는 script가 bash를 통해 실행된다. (/bin/bash 는 bash의 위치)
  • if [ -d bak ] => 디렉토리에 bak이라는 디렉토리가 존재하는가?를 확인하는 것.
  • if ! [ -d bak ] => 디렉토리에 bak이라는 디렉토리가 존재하지 않는가? 를 확인하는 것.
  • if ~ bak 까지 => 디렉토리에 bak이라는 디렉토리가 존재하지 않는다면 bak이라는 디렉토리를 만들어라.
  • fi => bash 스크립트에서 if문을 닫는 키워드.
  • cp *.log bak => 현재 디렉토리에 있는 log라는 확장자를 가지는 모든 파일을 bak으로 복붙해라.
#!/bin/bash 

if ! [ -d bak ]; then
        mkdir bak
fi
cp *.log bak

 

3. backup 파일 실행

처음 실행할 때 아래와 같이 Permission denied가 뜬다. 왜냐하면 backup 파일은 실행할 권한이 없기 때문이다.

(base) ubuntu@JeeYeon:~/script$ ./backup
-bash: ./backup: Permission denied

 

 ls -l 로 backup 파일의 권한을 확인해보자.

  • -rw-r--r--  : 파일의 권한을 나타냄. 소유자가 읽기,쓰기 권한을 가지고 있고 그 외의 사용자는 읽기 권한만 가지고 있다.
  • 1 : 링크 수를 나타냄. 일반적으로 파일의 링크 수는 1이다.
  • 즉, backup 파일은 소유자가 읽기, 쓰기 권한만 있다는 것이다.

 

 

우리는 linux에게 backup 파일이 실행 가능한 파일이라는 것을 알려줘야 한다.

아래의 명령어를 통해 backup 파일을 executable하게 만들어줄 수 있다.

# 권한 부여
(base) ubuntu@JeeYeon:~/script$ chmod +x backup

# 다시 backup 파일 실행
(base) ubuntu@JeeYeon:~/script$ ./backup

 

권한 부여 후 ls -l을 실행해 다시 확인해보니 x(실행권한)가 backup 파일에 추가된 것을 볼 수 있다.