리눅스 셸 환경(Shell Environment) 정의 및 이해와 쉘 환경변수 | Shell 시작 파일 2가지

셸 세션을 이용해서 서버와 상호 작용을 할 때 해당 동작과 리소스에 대한 연결을 결정하기 위해 컴파일 하는 많은 정보가 있습니다. 이러한 서정 중 일부는 구성 설정에 포함되어 있으며, 다른 설정은 사용자 입력에 의해 결정됩니다.

리눅스 셸 환경은 셸의 구성 설정사용자 입력에 의해 결정된 설정유지관리 영역을 이용해 관리하는 가장 일반적인 방법을 이용하게 됩니다. 셸 환경은 시스템 속성을 정의하는 변수가 포함된 세션을 시작할 때마다 쉘이 구축하는 정보 영역입니다.

하나의 유저가 실행시킨 셸을 의미하는 셸 세션(Shell session)은 환경(environment)이라고 하는 정보 집합을 유지합니다. 프로그램은 환경에 저장된 데이터를 사용하여 시스템 구성에 대한 사항을 확인하며, 일반적인 대부분의 프로그램들은 구성파일(configuration file) 을 사용하여 프로그램 설정을 저장하는 반면 일부 프로그램은 환경에 저장된 값을 찾아 동작을 조정합니다.

✅ 리눅스 셸 환경에 무엇이 저장되는가?

쉘은 환경에 셸 변수(shell variables)와 환경 변수(environment variables) 2가지의 기본 타입 데이터를 저장되며, bash를 사용하면 2 가지 타입을 거의 구분할 수 없습니다.

  • 리눅스에 저장되는 기본 변수
  • 셸 변수
  • bash에 의해 배치된 데이터 비트
  • 환경 변수
  • bash에 의해 배치된 데이터 비트 외의 모든 값

✅ 리눅스 셸 환경 저장 내용 확인하기

set, printenv와 같은 명령어를 입력해서 환경을 확인할 수 있습니다. set 명령어는 ⓐ셸 환경과 ⓑ환경변수를 모두 표시하며, printenv 명령어는 ⓑ환경변수만 출력합니다.

# printenv 명령어로 Shell 환경의 환경변수 확인.
~]# printenv

SHELL=/bin/bash
HISTCONTROL=ignoredups
HISTSIZE=1000
HOSTNAME=ip-172-31-11-71.ap-northeast-2.compute.internal
PWD=/home/ukc
LOGNAME=root
HOME=/root
LANG=C.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:
TERM=xterm
LESSOPEN=||/usr/bin/lesspipe.sh %s
USER=root
SHLVL=1
DEBUGINFOD_URLS=https://debuginfod.centos.org/ 
which_declare=declare -f
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
MAIL=/var/spool/mail/root
BASH_FUNC_which%%=() {  ( alias;
 eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot $@
}
_=/usr/bin/printenv
OLDPWD=/root
  • 환경 변수의 목록에서
  • 개별 목록을 보고 싶은 경우 특정 변수 값을 인수(인자)로 입력해서 확인할 수 있습니다.
~]# printenv USER
root
printenv LANG
  • set 명령어를 옵션 없이 사용할 경우 환경 셸 환경의 변수와 셸 함수가 모두 표시됩니다.
~]# set 

BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:histappend:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_REMATCH=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="8" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='5.1.8(1)-release'
COLUMNS=119
DEBUGINFOD_URLS='https://debuginfod.centos.org/ '
DIRSTACK=()
EUID=0
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=ip-172-31-11-71.ap-northeast-2.compute.internal
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=C.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=25
LOGNAME=root
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.m4a=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.oga=01;36:*.opus=01;36:*.spx=01;36:*.xspf=01;36:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OLDPWD=/root
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
PIPESTATUS=([0]="0")
PPID=1466
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"'
/MAILCHECK=60             

리눅스 셸 환경에 표시되지 않는 것은 alias에 설정된 것으로 alias 명령어로 별도 확인할 수 있습니다.

~]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias xzegrep='xzegrep --color=auto'
alias xzfgrep='xzfgrep --color=auto'
alias xzgrep='xzgrep --color=auto'
alias zegrep='zegrep --color=auto'
alias zfgrep='zfgrep --color=auto'
alias zgrep='zgrep --color=auto'

✅ 리눅스 셸 환경변수 목록

리눅스 셸 환경의 대표적인 쉘 환경변수 목록입니다.

✅ Bash Shell 시작 파일 환경 구성

리눅스 셸 환경에서 사용자로 로그인하면 bash 프로그램이 시작되고 모든 사용자가 공유하며, 기본 환경을 정의하게 되는 시작 파일(startup file)이란 스트립트를 읽게 됩니다. 시작 파일은 모든 사용자에게 적용되는 일반 환경 설정을 위한 시작 파일이 실행되며, 두 번쨰 개인 사용자들에게 적용되는 개인 환경 설정 세팅을 위한 시작 파일이 실행됩니다.

시작 파일은 Shell 세션에 따라 2가지로 나뉘게 되며, 보통 로그인 셸 세션과 비로그인 셸 세션으로 나뉘게 욉니다.

  • 로그인 셸 세션
    • 로그인 셸 세션은 콘솔 접속 시 사용자 이름과 비밀번호를 입력을 요구하는 메시지가 표시되는 세션으로 SSH 등을 실행할 때 체크됩니다.
  • 비로그인 셸 세션
    • 로그인 없이 실행되는 셸로써 로컬 터미널, sudo bash, su 등이 있습니다.

1. 로그인 세션 시작 파일 위치

2. 비로그인 세션 시작 파일 위치

3. if 복합 명령

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs
  • if 복합 명령(if compound command)은 .bashrc의 내용을 가져오는 명령입니다.
쉘 스크립트(Shell Script)

Similar Posts