Linux - (10) : Shell

­이승환·2021년 8월 3일
0

리눅스 정리

목록 보기
10/21

Shell


1) 셸의 개념

  1. 정의
    • 사용자가 커널의 서비스 기능을 사용할 수 있도록 하는 사용자 인터페이스
  • CLI 와 GUI 로 구성
  1. 특징
    • 사용자로부터 명령어를 입력받고, 해석해서 처리하는 대화형 인터페이스
  • 셸을 통해서 파일, 프로세스, 배치, 성능 모니터링, 환경설정 등 가능
  • 일반 응용프로그램과 같이 커널이 제공하는 시스템 콜을 통해 구현
  • 사용자가 커널에서 쉽게 명령을 내릴 수 있음

2) 셸의 유형

본셸계열 : sh, ksh, bash
C셸계열 : csh, tcsh

3) 셸 설정 및 확인

  1. 현재 셸의 확인
#echo $SHELL

#chsh -l

#cat /etc/shells

#cat /etc/passwd | grep shwan
  1. 셸의 변경
#chsh -s /bin/csh

그 외 set 명령어를 통한 확인, export 명령어를 이용한 전역 환경변수 등록 등이 있다.

4) 셸의 시작과 종료

  1. 로그인 셸과 비로그인 셸
    • 로그인셸. userid + passwd 를 입력해서 진입하는 방식
    • 비로그인셸. 로그인없이 티폴트로 실행되는 방식
  2. 인터랙티브 셸과 비인터랙티브 셸
    • 인터랙티브 셸. 대화형으로 셸을 통해 명령하고 결과를 받는 방식
    • 비인터랙티브 셸. 셸 스크립트에서 셸을 실행하는 경우
  3. 리눅스 셸의 시작
    • 로그인 셸의 경우 /etc/profile, /etc/profile.d 를 이용해 실행
    • 로그인 셸의 경우 ~/.bash_profile, ~/.bash_login ~/.profile 순으로 먼저 존재하는 파일을 읽어서 실행한다.
    • 로그인셸이 아니면 인터렉티브 셸을 확인함
    • 인터렉티브 셸의 경우 /etc/bashrc 를 읽어 ~/.bashrc 를 실행함
  4. 리눅스 셸의 종료
    • logout, exit, Ctrl + D 를 이용
  5. 리눅스 셸의 설정파일
  • 시스템 설정 파일

    • /etc/profile , /etc/profile.d/*, /etc/bashrc
  • 사용자 설정파일

    • ~/.bash_profile, ~/.bash_login, ~/.profile,
    • ~/.bashrc, ~/.bash_logout

5) 셸에서 유용한 기능

  • 자동완성 기능(bash-completion)

    현재 경로에 입력하려는 문자와 매칭되는 파일명이나 명령 후보를 자동으로 보여줌. TAB 입력하여 후보 확인.

  • 히스토리 기능

    • 사용자가 입력한 명령어가 보관이 됨. 저장 명령어를 열람하고 실행 가능.
      $history
    • 특정 명령어를 실행하기 위해 열람한 번호를 !와 붙여 사용
      !2
    • 히스토리 지우기
      $history -c
    • 직전 명령어 입력
      $!!
    • 최근 3개 히스토리
      $history 3
  • alias 기능

    • alias 설정
      $alias show-me-passwd='cat /etc/passwd'
    • alias 해제
      $unalias show-me-passwd
  • 셸 키보드 단축키

    • 여러 텍스트 제어 단축키 제공
      명령어 치환 기능 Command substitution
    • 명령어의 실행 결과를 명령어의 인자로 넘기는 기능
      $(command) 또는 'command'
    • touch 명령어를 통해 현재시각을 파일명으로 갖는 파일 생성
      touch"touch "(date)"
  • 표준 입출력 기능

    • 사용자의 입력을 프로그램에 전달하고 결과를 보여줌.
      표준입력 stadin 0 데이터 입력 기본장치
      표준출력 stdout 1 출력 기본장치
      표준에러 stderr 2 오류발생시 출력 기본장치
  • 리다이렉션 기능

    • 표준 출력 : > , >>
    • 표준 입력 : < , <<
    • ls -l 출력결과를 listing-file 파일로 표준출력 재지정.
      $ls -l > listing-file
    • 표준입력을 파일로 재지정하여 sort 프로그램에게 데이터 전달
      $sort < listing-file
    • cat 명령어의 옵션에 존재하지 ㅇ낳는 파일 지정하면 에러가 표준에러로 발생
      $cat no-file 2>errorsfile
    • tmp 폴더에 'pulse'로 시작하는 파일을 찾고 표준에러는 error.log 파일로 재지정.
      $find /tmp -name 'pulse*' 2>error.log
    • 표준에러를 표준출력과 함께 재지정. 디렉터리 출력결과와 에러 모두 dirlist파일로 재지정.
      $Is Deskto Documents > dirlist 2>&1
  • 파이프 기능

    • tee 명령어는 표준입력으로부터 데이터를 읽어 표준출력으로 출력하거나 동시에 파일에 저장할수있음.
    • 파이프를 사용해 ping 명령의 출력 결과를 표준 입력으로 받아 화면과 동시에 파일에 저장
      $ping google.com -c 1 | tee result.txt
    • tee에 -a 옵션을 사용하고 파일명을 기재하면 파일이 새로 생성되는것이 아니라 파일 맨 끝에 추가
      $ping google.com -c 1 | tee -a result.txt
  • 그룹 명령 기능

    ;는 나열한 순서대로 명령어를 실행,
    ||는 앞의 명령어의 실행이 성공하면 그 결과를 출력 실패하면 다음 명령어 실행
    &&는 앞의 명령어의 실행이 성공한 경우에만 다음명령어 실행

  • 작업 제어 기능 Job Control Command

    • Job : 셸에서 실행하는 프로세스
    • 작업의 세가지 상태: foreground, background, stpped
    • 작업을 백그라운드로 실행할 땐 & 사용
    • 작업간 전환을 위해 fg, bg 명령을 사용
    • 현재 셸에서 실행한 작업의 목록은 job
  • 산술논리 연산기능

    expr 명령어를 통해 산술, 논리 연산을 수행, 연산자와 피연산자는 공백으로 반드시 구분
    기호가 특수문자에 해당하면 \, "",'' 를 사용하여야 함
    | 는 앞의 피연산자가 0이거나 '' 이면 뒤의 피연산자 출력
    &는 앞 또는 뒤의 피연산자가 0이거나 ''이면 0을 리턴, 그렇지않으면 앞의 피연산자 출력

  • 프롬프트 제어기능

    환경변수 PS1, PS2, PS3, PS4를 통해 셸 프롬프트 변경
    $export PS1="dollor"
    dollar

  • 확장된 내부 명령어

    • 입출력
      echo, printf, read
    • 파일시스템
      cd 디렉터리 변경, pwd 현재 디렉터리 표시, pushd,popd,dirs 디렉터리를 스택에 푸시,팝하거나 현재 스택의 목록은 볼때
    • 변수
      let 변수에 산술연산, eval 인자를 명령어로 변환, set 내부 스크립트 변수값 변경,
      unset 스크립트 변수를 null로 지움, export 변수에 값을 설정
    • 스크립트
      source 지정한 파일을 스크립트로 실행, exit 스크립트를 종료, exec 프로세스를 실행할 때 fork하지않고 셸자체 실행

후기


조금 긴 포스팅이었지만 리눅스 마스터 공부과정에서 사실상 가장 많은 도움이 될 포스팅이 아닐까 싶다.

profile
Mechanical & Computer Science

0개의 댓글