2. 리눅스와 셸 스크립트 자동화 - 배경지식

여경·2023년 1월 19일

Archive

목록 보기
4/5


Shell

shell (쉘, 셸)이란?

쉘(shell): 운영체제에서 제공하는 명령을 실행하는 프로그램, 운영체제의 관리하에 있는 파일, 프린팅, 하드웨어 장치, 애플리케이션과의 인터페이스를 제공한다.
즉, 운영체제와 대화하는 프로그램이다. 운영체제에서 제공하는 각종 명령들을 쉘 인터페이스에서 실행하면 그 일을 운영체제가 수행하는 것.

Shell Script

쉘 스크립트(shell script): 인터프리터로서 리눅스 시스템에서 지원하는 명령어들의 집합을 묶어 프로그램화 한 것이다.

Bash : 리눅스에 기본 탑재된 일반적인 쉘로 sh 본 쉘과 호환되기 때문에 대부분 sh와 bash에서 모두 작동

Shell script 구성 요소

  • if ~ else와 fore, while 등의 쉘 루프 명령어
  • grep, awk, cut 등의 텍스트 처리 유틸
  • w, who, free 등의 바이너리 명령어

Shell script를 사용하는 이유

-쉘 스크립트는 유저 또는 파일로부터 입력을 받아 모니터에 데이터를 출력

  • 동일한 작업을 반복하여 수행하고자 할 때 자동화하여 시간을 절약할 수 있음
  • 실제적인 쉘 스크립트 사용 예
    - 리눅스 시스템 모니터링
    • 데이터 백업, 스냅샷 생성
    • 데이터베이스 백업을 위한 작업 등
  • 올바르게 사용하지 않은 예(프로그래밍 언어 사용해야하는 경우)
    - 속도가 중요한 정렬, 해쉬등으로 사용할 때
    • 플랫폼 간 이식성이 필요할 때 (C)
    • 구조적 프로그래밍이 필요한 복잡한 어플리케이션
    • 다차원 배열이 필요할 때
    • 링크리스트, 트리 같은 데이터 구조가 필요할 때 등등

    리눅스 기본 명령어 형식

    기본 명령어들의 형식

  • 리눅스에서 환경 변수를 제외한 거의 모든 명령어들은 소문자로 구성되어 있으며, 윈도우와 달리 대소문자를 구분
  • date 입력하면 날짜가 나오는데, date '+%H:%M'을 입력하면 해당 포맷으로 변경. -u 옵션을 주면 UTC 시간이 출력

다중 명령어 사용

  • && 를 명령어 사이에 붙일 경우, 정상 종료했을 경우에만 두번째 명령어를 수행
  • || 를 붙이면 각각 모든 명령을 수행
    = ; 는 한 라인에서 여러개의 명령을 실행 할 때 하나의 명령어 다음 추가해서 끝을 의미해주면 됨

명령어로 탐색하기

명령 히스토리

  • history: 최근 실행한 명령들이 저장되어 있음
    - 최근 실행한 명령을 다시 실행하기 위해 !을 사용. 다음에 매칭되는 문자를 최근 명령에서 찾아서 실행
    - -1같이 마이너스 숫자를 지정할 경우 최근 명령부터 숫자만큼의 명령을 실행
    -!!을 사용하면 가장 최근 명령어를 다시 실행

  • pwd : 현재 디렉터리 위치 보기

  • ls : 파일과 디렉터리 목록 보기
    - ls -l로 출력된 컬럼의 의미는 아래와 같음
    - [파일/디렉터리 퍼미션][하드 링크파일 수][소유자][그룹][파일 크기][수정 시간][파일명]

  • cd : 현재 쉘의 디렉터리 변경, 이동

  • mv: 파일 이동

  • rm: 파일 삭제

  • less, more, cat : 텍스트 파일 보기
    - less 파일명 -> 긴 파일의 내용을 끊어서 표시

    • q: 종료
    • g: 처음으로
    • G: 끝으로
      - /단어: 문서에서 '단어'를 검색
      - space, enter, 화살표, hjkl: 페이지 이동
    • cat은 쉘 프롬포트를 리턴
  • file : 파일 타입 보기

  • tree : 디렉터리의 트리 구조 print
    - -d : 디렉터리만 / -a : 모든 것 / -f : 파일만 / -L : 디렉터리 깊이 지정
    - tree -L1 / : 최상위 root(/) 부터 깊이가 1인 디렉터리와 파일 출력
    -find 디렉토리 -name "파일이름" :지정한 디렉토리와 그 하위디렉토리에서 해당 파일을 검색한다.
    -touch 파일이름 : 0바이트 파일 생성

환경 변수

쉘 스크립트의 환경변수 (Environment Variables): 환경 변수란 리눅스 사용자가 로그인할 때 자동으로 쉘이 실행되면서 사용환경을 구축한다. 이때 shell을 환경변수라고 한다. 예를들어 스마트한 집에 사용자가 들어오면 사용자를 인식하여 기본적으로 에어컨으로 온도조절하고, 커튼 열고, 공기 청정기를 켜는 시스템에 있다고 가정해보자. 이때 각 사용자마다 설정해놓은 기능이 다를 것이다. 이때 에어컨, 커튼, 공기청정기와 같은 장치를 shel, 집을 리눅스 시스템이라고 생각하자.

리눅스를 시작하면 대부분 공통적으로 실행되는 환경 변수들이 있는 해당 환경 변수는 아래와 같다.

  • TERM: 터미널 유형
  • SHELL: 사용자 쉘의 절대 경로
  • USER: 로그인 사용자 이름
  • PATH: 실행 파일 탐색 경로
  • PWD: 현재 작업 디렉토리
  • LANG: LC_ALL로 지정되지 않은 로케일 이름
  • LC_ALL: 로케일 이름
  • HOME: 사용자의 홈 디렉토리

등등이 있다.

변수명 앞에 달러 표시 $를 해주면 된다.

-echo : 환경변수 값 확인하는 법, 뒤이어 입력되는 문자열을 모니터로 출력 (print)
-리눅스의 모든 환경 변수는 대문자로 구성되어 있음
-env : 환경 변수 출력

리눅스 기본 디렉토리

  • / : 루트 디렉터리
  • /boot : 리눅스 커널과 부트로더가 위치하는 디렉터리
  • /etc : 시스템 환경 설정 파일이 위치한 디렉터리
  • /bin, /usr/bin : 실행 프로그램들.
    - /bin엔 기본적인 실행 프로그램
    • /usr/bin엔 사용자들이 사용할 실행 프로그램
  • /usr : 사용자 애플리케이션을 지원하기 위한 다양한 파일이 위치
  • /var : 운영 중인 시스템의 변화를 체크할 수 있는 로그 파일들이 위치
  • /var/log : 로그 파일이 위치하는 디렉터리
  • /home : 유저별 홈디렉터리가 존재하는 개인 홈디렉터리
    useradd(adduser) 명령을 사용해 유저를 생성하면 "/home/유저아이디 형식으로 유저 홈디렉터리가 생성.

    셸 사용하기

  • 리눅스 bash 쉘에서 $ 표시는 일반유저의 쉘을 의미하고 # 표시는 root 유저의 쉘을 의미.
  • 쉘 스크립트를 작성할 때 스크립트의 최상단에 본 쉘인 경우 #!/bin/sh, 배시 쉘인 경우 #!/bin/bash, 파이썬일 경우 #!/bin/python 와 같이 실행할 언어를 지정해야 한다.

  • chmod : 파일, 디렉터리에 대한 접근 권한 변경
    - read, write, execute 권한 지칭

입출력 리다이렉션과 파이프

표준 출력

  • 표준 출력: 결과를 모니터에 출력.
  • > 문자를 사용해 표준 출력을 파일로 리다이렉션해 저장할 수 있음
    - ls > ls.txt
  • >> : 파일에 추가(append)할 경우 사용
    - cat test1.txt >> ls.txt

표준 입력 - 키보드 : 파일 디스크립터 숫자로 0
표준 출력 - 모니터 : 파일 디스크립터 숫자로 1
표준 에러 - 모니터 : 파일 디스크립터 숫자로 2
2>&1 : 표준 출력이 전달되는 곳으로 표준 에러를 전달하는데, 마지막에 &를 사용해 현재 명령을 백그라운드로 실행

표준 입력

  • 표준 입력 : 키보드로부터 데이터를 입력받는 것. 파일 디스크립터 숫자값으로 0
  • 키보드를 대신해 파일로부터 입력을 받는 경우 < 문자를 사용

파이프

  • | 문자를 사용해 두 명령어를 이어줌. 앞에서 실행한 명령의 결과값을 뒤에 적은 명령어의 입력으로 사용
  • 즉, 파이프로 연결된 하나의 표준 출력을 다른 명령의 표준 입력으로 사용

0개의 댓글