본문 바로가기

IT 지식쌓기

[Linux] Shell

Shell

명령어 해석기 또는 명령 행 인터페이스로, 사용자와 커널 사이에서 명령어를 해석하여 처리한다

  • Shell script는 텍스트 파일로, 반복적으로 수행되는 작업을 Shell script로 작성할 수 있다.
  • 세미콜론(;)을 사용하면 한 라인에 여러 명령을 입력할 수 있다.
  • 셸은 Bash를 기본 셸로 사용하며, 일반사용자는 $, root 사용자는 #을 사용한다.

Bash shell

  • Bourne Again Shell로 Bourne shell의 개선된 버전
  • 많은 셸 스크립트의 문법이 Bourne shell에 기반을 둠
  • 실행 명령은 /bin/bash
  • 기본 셸을 변경할 수 있음
chsh -s /bin/sh

 

셸 명령의 형식

> 명령어 옵션 인수

  • 대개 명령어는 프로그램의 이름
  • 인수는 명령의 수행 대상을 지정하는 것
grep "Kildong Hong" /etc/passwd
# /etc/passwd에서 Kildong Hong찾기

chsh -s /bin/sh kdhong
# 옵션도 인수를 가질 수 있다.

 

  • 환경변수 PATH에 설정된 경로 중에 실행 파일이 존재하면 명령의 이름만으로 실행이 가능
    • 아니면 해당 실행 파일의 절대 경로를 사용해야 한다.
    • 현재 디렉토리(.)는 보통 PATH에 포함되어 있지 않다.
    • echo $PATH로 저장된 경로 확인 가능
  • 명령어 종류
    • alias : 자주 사용되는 명령의 단축 명령 (계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 한다.)
    • type: 명령이 어떻게 해석되는지 알려주는 명령
    • which: 실행 프로그램을 환경변수 PATH를 기초로 찾아 경로 출력
      • whereis: 실행파일, 소스프로그램, 매뉴얼 페이지까지 조회한다.man: 매뉴얼 페이지(사용법, 설정 파일)를 보여주는 명령

명령 히스토리

  • history: 이전에 수행했던 명령 행의 목록을 불러온다.
    • 히스토리 기능을 이용하여 명령 실행
    • !! : 직전 명령 실행
    • !n : 히스토리 목록에서 해당 명령 실행
    • !string : 지정된 문자열로 시작하는 최근 명령 실행

특수 문자

  • 백슬래시(\): 특수 문자의 기능을 제거하는 escape 문자
    • or 긴 명령 행을 분리할 때 사용
  • 틸드(~): ~또는 ~username 은 사용자의 홈 디렉터리를 의미
  • 도트(.): 현재 작업 디렉터리 표시 or 명령 행의 맨 앞에서 셸 스크립트를 실행하는 source 명령
  • 달러($): $변수는 변수의 값을 추출
  • 앰퍼센트(&): 명령&은 명령을 백그라운드로 실행시킴
  • >> : 표준 출력을 파일의 끝에 덧붙일 때 사용
  • 입출력 리다이렉션
    • 명령 < 파일 : 명령 수행에 필요한 입력을 표준 입력대신에 파일로부터 얻음
    • 명령 > 파일 : 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
    • 명령 2> 파일: 명령 수행 중 표준 오류 출력을 파일에 덧붙임
  • 인용부호
    • ' 는 특수문자의 의미를 제거함
    • " 는 $,`,\,!를 해석하여 확장함
  • 수식과 변수의 확장
    • 명령 수행 전에 수식의 결과를 계산하여 전달
    • $[수식] 또는 $((수식))
[202434-363489@localhost ~]$ echo "I am $[2024-1995] years old"
I am 29 years old
  • 변수 (특정 데이터 또는 환경 설정을 위한 값 저장)
    • 셸 변수(지역변수) : 정의된 셸에서만 사용 가능하고, 서브 셸에는 전달되지 않음
    • 환경 변수(전역 변수): 현재 셸 + 서브 셸로도 전달한다.
      • 보통 변수 이름으로 대문자를 사용한다.
# 시스템의 모든 환경 변수의 이름과 값을 출력하려면 printenv 명령 사용
[202434-363489@localhost ~]$ printenv
SHELL=/bin/bash
HISTCONTROL=ignoredups
HISTSIZE=1000
HOSTNAME=localhost
PWD=/home/202434-363489
LOGNAME=202434-363489
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/202434-363489
LANG=ko_KR.UTF-8
...
# 현재 셸의 모든 환경 변수를 출력
[202434-363489@localhost ~]$ export -p
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DEBUGINFOD_URLS="https://debuginfod.centos.org/ "
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/202434-363489"
declare -x HOSTNAME="localhost"
declare -x LANG="ko_KR.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
...
# 변수 설정 및 확인
[202434-363489@localhost ~]$ export SOYUN=29
[202434-363489@localhost ~]$ printenv SOYUN
29
[202434-363489@localhost ~]$ echo $SOYUN 
29
[202434-363489@localhost ~]$ FOO=bar
[202434-363489@localhost ~]$ echo FOO
FOO
[202434-363489@localhost ~]$ sh
sh-5.1$ echo $FOO  # 서브셸

sh-5.1$ exit
exit
[202434-363489@localhost ~]$ export FOO
[202434-363489@localhost ~]$ sh
sh-5.1$ echo $FOO  # export 후 서브셸에도 유효한 것 확인
bar
sh-5.1$ exit
exit

 

로그인과 셸 환경 설정 파일

/etc/profile 모든 사용자에게 적용, 로그인할 때 가장 먼저 수행됨
(시스템 관리자에 의한 전역변수 설정)
~/.bash_profile 로그인할 때 수행되며 개별 사용자에게 적용됨
보통 내부에서 ~/.bashrc 실행
~/.bashrc 셸 시작할 때마다 수행되며 개별 사용자에게 적용됨
/etc/bashrc 모든 사용자에게 적용, 셸 시작할 때마다 수행됨
PS1 설정, alias 설정, umask를 사용한 접근권한의 초기값, 함수 설정
~/.bash_logout 로그아웃 수행할 때 실행되는 스크립트 파일

 

반응형

'IT 지식쌓기' 카테고리의 다른 글

[운영체제] 운영체제란?  (0) 2024.03.06