220819 TIL Shell

sundays·2022년 8월 19일
0

1. shell

  • Linux Kernel과 사용자의 상호 작용을 위한 인터페이스 역할 수행 application
    기능
  • 명령 해석 및 실행 기능
  • 사용자와 Linux Kernel 사이에서 명령을 해석하고 전달하는 해석기( interpreter )와 번역기( translator ) 기능
  • Linux booting후 기본 사용 shell -> login shell
    • login shell 지정 -> /etc/passwd 파일에 저장
    • /etc/passwd -> 현재 Linux에 등록된 사용자 정보 저장파일, 실제 password는 저장하고 있지 않는다.
      ex) 사용자이름:x:UID:GID:사용자 설명:홈디렉토리:login shell
    • /etc/shadow -> password 저장 파일. passwd 명령
    • /etc/group -> group 정보 저장 파일, chgrp 명령, groupadd 명령
    • /etc/gshadow -> group password 저장 파일
  • 프롬프트( prompt ) - 사용자로 부터 명령 입력을 기다릴 때 표시 되는 내용
  • 프로그래밍 기능 - 자동화( 반복적인 동작 자동 수행 )
  • 반복적으로 수행하는 작업을 프로그램 형태로 작성해서 일괄 실행 하는 기능 - 반복 동작 자동화
  • shell 프로그램 -> shell script
    • shell에서 사용하는 명령을 모아 놓은 파일
  • shell script를 실행함으로써 명령들을 자동 실행
  • 사용자 환경 설정 기능
    • 사용자 환경을 설정할 수 있는 환경 설정 파일( 초기화 파일 )
    • 환경 설정 파일( 초기화 파일 )
      명령 검색 경로
      파일 생성시 기본 권한
      환경 변수 설정

2. shell 종류

2.1. 본 쉘( Bourne shell )

  • UNIX V7에 처음 적용
  • 표준 shell 이라고도 한다.
  • 본 쉘 이름 - sh
  • 단순하고 처리 속도가 빠른 장점, 시스템 관리 작업 수행시 현재도 많이 사용하는 shell
  • history, alias, 작업 제어등의 편의 기능이 미약

2.2. C shell

  • BSD UNIX에 처음 적용
  • C shell 이름 - csh
  • Bourne shell에 없던 history, alias와 같은 편의 기능 추가
  • shell script 형식이 C 언어와 같기 때문에 C shell 이라 한다.

2.3. 콘 쉘( Korn shell )

  • AT&T에서 개발
  • UNIX SVR 4에 처음 적용
  • 콘 쉘 이름 -> ksh
  • 본 쉘과의 호환성을 유지하면서 사용자 편의 기능과 C shell의 특징을 모두 제공하며 속도가 빠름

2.4. 배시 쉘( bash shell, bourne again shell )

  • 본 쉘 기반으로 개발
  • 본 쉘과 호환성 유지하면서 csh, ksh 기능 포함
  • 본 쉘 이름 -> bash
  • GPL license 기반 open source
  • Linux 기본 쉘로 제공

2.5. 대시 쉘( dash shell )

  • 본 쉘 기반으로 개발
  • POSIX 표준 준수 및 크기가 작게 개발
  • 대시 쉘 이름 -> dash
  • Ubuntu에서는 bash대신 dash 사용

2.6. chsh 명령 - 로그인 쉘 변경 명령

chsh [ 옵션 ][ 사용자명 ]

  • -s shell - 지정한 쉘( 쉘의 절대 경로 )로 login shell 변경
  • -l - 지정 가능한 shell 출력, /etc/shells 파일 저장 내용, ubnutu 2004 에서는 지원하지 않는 옵션

2.7. 로그인 쉘과 서브 쉘

  • 현재 프롬프트 상에서 다른 쉘을 실행하면 해당 쉘은 서브 쉘 이라 한다.
  • 서브 쉘은 현재 쉘과 별개의 다른 쉘을 실행
  • 서브 쉘 종료 방법은 exit 명령, ctrl + d 입력
  • 서브 쉘이 종료 되면 이전 쉘 환경으로 복귀
  • 로그인 쉘을 종료 하면 logout 상태가 된다.
    • logout - 현재 사용자 사용 종료, Linux booting후 login 화면으로 전환
    • Linux 종료 - 일명 shutdown이라고 하면 Linux를 완전히 종료한다는 의미

3. shell 명령

  • shell 내장 명령
    • shell에 내장된 명령으로 별도의 실행 파일이 존재 하지 않는 명령
    • type 명령 - 명령 종류 확인 -> type <명령>
  • 일반 명령
    • 별도의 실행파일로 존재 하면 실행시 메모리에 로드한 후 실행 되는 과정을 거치는 명령
    • 사용자 작성 프로그램 또한 shell 일반 명령으로 볼 수 있다.
  • echo 명령
    • 문자열 또는 변수 내용 출력( 표준 출력 장치 )
    • echo 명령은 자동 줄바꿈 기능을 갖고 있다.
    • echo [ 옵션 ] <출력할 문자열 또는 $변수명>
      • -n - 줄 바꿈 하지 않는다.
      • 문자열은 ‘( 따옴표 ), “( 이중 따옴표 )로 묶거나 직접 문자열만 표기할 수 있다.
      • 변수( variable ) - 메모리 공간에 부여한 이름, 메모리 공간에 값을 저장할 때 사용
        • 변수명만 표기하면 변수 내용이 아니고 변수명을 문자열로 인식
        • 변수 내용 - $변수명 형식 사용
  • shell 환경에서 사용하는 문자열 표현 특수 문자
    • ‘( 따옴표 ) - 문자열을 감싸서 표현, 문자열 안의 특수 문자 기능은 모두 해제
    • “( 이중 따옴표 ) - 문자열을 감싸서 표현, 문자열 안의 특수 문자 중 $, `( 백틱 ), /를 제외한 특수 문자 기능은 모두 해제
    • `( 백틱 ) - 표현식 또는 명령에 대한 기능 수행 결과
    • \( 백슬레시 ) - 제어문자 효과를 없애고자 할 때 사용
      • 제어문자 - 특정 문자에 기능을 적용한 문자
      • \n - 줄바꿈
      • \t - tab 문자
      • \b - backspace

4. 변수( variable )

  • 값을 저장하는 메모리 공간 - 변수
  • 변수명은 변수에 대한 이름
  • 변수 생성 방법
    변수명=값( 문자열 )
    변수명은 항상 대문자 사용
    = 기호 앞/뒤로 공백이 있으면 안된다.

4.1. 변수 종류

shell 변수 - 현재 사용중인 shell에서만 사용 가능한 변수( 지역 변수 )
생성 - 변수명=값
환경 변수 - 현재 사용중인 shell과 자식( 서브 ) shell에 모두 적용되는 변수( 전역 변수 )
생성 - export 변수명=값
shell 변수를 환경 변수로 변경 - export <shell변수>
unset 명령 - 변수 해제
unset 변수명

4.2. 변수 목록 출력

set 명령 - 전체 변수 출력, shell 변수/환경 변수 모두 출력
env 명령, printenv 명령 - 환경 변수 전체 출력

4.3. 주요 환경 변수

HISTSIZE - 명령 history 저장 크기
HOME - 사용자 홈 디렉토리 절대 경로
LANG - 사용 언어
LOGNAME - 사용자 계정 이름
PATH - 명령 탐색 경로
Linux에서는 명령 검색을 PATH 변수 내용의 경로에서 검색한다.
PWD - 현재 디렉토리 경로
SHELL - login shell

4.4. alias

별명을 의미하며 원하는 기능을 수행하는 명령( 들 )을 별도의 alias를 통해 지정
alias - 현재 설정된 alias 목록
alias <이름>=’명령;명령;...’ - alias 설정
unalias <alias 이름> - alias 해제

4.5. 환경 설정

  • Linux booting시 또는 사용자 로그인 할 때 마다 자동으로 shell 환경 설정 - 처음 한 번 적용
  • 환경 설정 파일 - 환경 설정 내용을 담고 있는 text 파일
  • 환경 설정 파일에 #은 해당 line은 주석( comment ) 의미하고 실제 환경 설정 적용에 사용하지 않는다.
  • 시스템 환경 설정 파일
    • Linux 시스템을 사용하는 모든 사용자에게 공통으로 적용되는 환경 정보를 담고 있는 파일
    • 관리자 권한으로 수정 가능
    • /etc/profile
      • 시스템 공통으로 적용되는 환경 변수 설정
      • PATH, USER, HOSTNAME, HISTSIZE
      • 기본 접근 권한 설정
      • /etc/profile.d/*.sh 실행
    • /etc/bashrc -> 없는 경우도 있음
      • 시스템 공통으로 적용되는 함수와 alias 설정
      • 기본 프롬프트 설정
      • 서브 shell을 위한 명령 경로( path ) 설정
      • 서브 shell을 위한 기본 접근 권한 설정
    • /etc/profile.d/*.sh
      • 언어나 명령별 각각 필요 환경 설정
      • 필요시 설정 파일 추가
  • 사용자 환경 설정 파일
    • 개별 사용자 마다 원하는 환경 설정에 대하여 환경 설정 정보를 담고 있는 파일
    • 사용자가 로그인 하면 먼저 시스템 환경 설정 파일 내용을 적용하고 이 후 사용자 환경 설정 파일 적용 순으로 환경 설정이 이루어진다.
    • 사용자 환경 설정 파일은 사용자 홈 디렉토리에 hidden 파일로 저장
    • ~/.bash_profile
      .bashrc 파일이 있으면 실행
      경로 추가등 사용자 정의 환경 설정
    • ~/.profile -> 사용자가 필요한 환경 설정 내용 추가
      경로 추가등 사용자가 정의하는 환경 설정
      ~/.bashrc 파일이 있으면 실행
    • ~/.bashrc -> 사용자가 필요한 환경 설정 내용 추가
      일반적인 사용자 환경 설정
      사용자 정의 함수나 alias등 설정
    • ~/.bash_logout
      logout 시 실행할 함수 등 설정
    • ~/.bash_history
      명령 history 저장 파일
      history 명령이 참조하는 파일

5. shell script

  • shell 명령 기반으로 자동화를 수행하는 파일

  • 단순히 shell 명령만 사용하는 것이 아니라 선택/반복과 같은 실행 흐름 제어 기능을 적용하여 프로그램 성격을 갖도록 작성한 파일

  • shell script 파일 첫 줄에 #!/bin/sh 또는 #!/bin/bash( shebang, 셔뱅 )을 추가하여 실행할 shell을 명시 해주는것이 일반적인 형식

  • shell script 파일은 .sh 확장자 부여

  • shell script 파일은 text 파일

  • shell script 실행

    • 실행 권한 부여
      chmod 명령을 이용하여 실행 권한 부여

    • source 명령 사용

      • 환경 설정 파일 변경후 현재 shell에 적용하고자 할 때 많이 사용
      • source <shell script 파일>

5.1. shell script 구성 요소

  • 변수 - 값 저장 목적으로 사용하는 변수

    • 변수명은 소문자 사용
    • 만약 shell 변수나 환경 변수로 사용할 변수는 대문자 사용
    • 변수 내용 접근시 $를 변수명 앞에 사용
    • 다른 문자열과 변수를 혼합하여 사용시 변수를 {}로 묶어서 사용
  • shell script에서 사용하는 특수 변수

    • $0 - shell script 파일 이름
    • $1 ~ $n - n번째 인수
    • $* - 모든 인수 목록
    • $# - 인수 개수
    • $? - 직전 실행 명령 상태( 반환 값 )
    • $$ - shell script process ID
    • $LINENO - 변수를 사용한 줄 번호
    • shift - 인수 위치를 하나씩 왼쪽으로 이용
  • 조건에 따른 실행

    • if then ~ elif ~ else ~ fi - 조건식의 결과에 따른 실행 대상 결정

    • if [ 조건식1 ]; then
      조건식 1 참인 경우 실행 내용
      elif [ 조건식 2 ]; then
      조건식 2 참인 경우 실행 내용

      else
      조건식1/조건식2 가 아닌경우 실행 내용
      fi

    • 조건식

      • [ -n string ] - string 길이가 0이 아니면 참
        - [ -z string ] - string 길이가 0이면 참
        - [ str1 = str2 ] - str1과 str2가 동일하면 참
        - [ str1 != str2 ] - str1과 str2가 같지않으면 참
        - 관계 연산
        • -eq( 같다 ), -ne( 같지 않다 ), -gt( 크다 ), -ge( 크거나 같다 ), -lt( 작다 ), -le( 작거나 같다 )
      • 논리 연산
        • -a( and ), -o( or ), ! 식( not )
        • ( 식 ) - () 안의 식의 결과를 돌려준다. 여러 식 결합시 사용, ‘’로 감싸서 사용
      • 파일 판단
        • -f file : 파일이 존재하고 일반 파일이면 참
        • -c file : 파일이 존재하고 특수 파일이면 참
        • -e file : 파일이 존재하면 참
        • -d file : 파일이 존재하고 디렉토리 파일이면 참
        • -L file : 파일이 존재하고 심볼릭 링크 파일이면 참
        • -r file : 파일이 존재하고 읽기 가능하면 참
        • -w file : 파일이 존재하고 쓰기 가능하면 참
        • -x file : 파일이 존재하고 실행 가능하면 참
      • 반복 실행
        - 일정 회수 또는 일정 조건이 만족하는 동안 원하는 동작을 반복 실행할 경우 사용
        - 반복할 내용이 정해진 경우( 반복 회수 정해진 경우 ) - for
        for <변수> in <반복대상>; do
        반복시 수행할 내용
        done
        - 조건에 따라 반복을 수행할 경우( 반복 회수 정해지지 않은 경우 ) - while
        while 문 안에서 반복 제어 변수의 내용을 변경하여 조건식의 결과가 거짓이 될 수 있도록 하지 않으면 무한 loop에 빠진다.
        - 반복 제어 변수 초기화
        while [ <반복 제어 변수> 이용한 조건식 ]; do
        조건이 참인 동안 수행할 내용
        <반복 제어 변수 내용 변경>
        done
      • expr - 연산식을 표현할 때 사용
        expr 연산식
profile
develop life

0개의 댓글