변수 확인(환경변수/쉘변수/별칭)

printenv - 환경 변수 확인 프로그램

  • printenv $변수명 : 모든 환경 변수를 보여줌

    • 환경변수=값
  • printenv $변수명... : 해당 변수(들)의 변수값(들)만 보여줌

    • echo $변수명으로도 볼 수 있음
  • 예시

$ printenv
XDG_SESSION_ID=34
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
SSH_CLIENT=192.168.134.1 59401 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=sun
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;05;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:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=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:*.jpg=01;35:*.jpeg=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root
PWD=/usr/local/sbin
LANG=ko_KR.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
HOME=/home/sun
SHLVL=2
LOGNAME=sun
SSH_CONNECTION=192.168.134.1 59401 192.168.134.4 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/printenv

$ printenv HOSTNAME
localhost.localdomain

$ printenv HOSTNAME SHELL
localhost.localdomain
/bin/bash

$ echo $HOSTNAME
localhost.localdomain


set - 쉘 변수 & 환경 변수 전체 확인 Shell builtin(bash 내장 명령어)

  • 결과를 알파벳 순으로 정렬해줌

  • echo $변수명으로 낱개로도 볼 수 있음

$ set
BASH=/usr/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:histappend:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.2.46(2)-release'
COLUMNS=104
DIRSTACK=()
EUID=1000
GROUPS=()
HISTCONTROL=ignoredups
HISTFILE=/home/sun/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/home/sun
HOSTNAME=localhost.localdomain
HOSTTYPE=x86_64
IFS=$' \t\n'
LANG=ko_KR.UTF-8
LESSOPEN='||/usr/bin/lesspipe.sh %s'
LINES=21
LOGNAME=sun
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;05;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:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=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:*.jpg=01;35:*.jpeg=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:*.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:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=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:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:'
MACHTYPE=x86_64-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PIPESTATUS=([0]="0")
PPID=26521
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
PS1='[\u@\h \W]\$ '
PS2='> '
PS4='+ '
PWD=/usr/local/sbin
SELINUX_LEVEL_REQUESTED=
SELINUX_ROLE_REQUESTED=
SELINUX_USE_CURRENT_RANGE=
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=2
SSH_CLIENT='192.168.134.1 59401 22'
SSH_CONNECTION='192.168.134.1 59401 192.168.134.4 22'
SSH_TTY=/dev/pts/1
TERM=xterm
UID=1000
USER=sun
XDG_RUNTIME_DIR=/run/user/0
XDG_SESSION_ID=34
_=set
colors=/home/sun/.dircolors

$ echo $PS2
>


alias - 별칭확인

  • 인자 없이 호출하면 별칭 전체 확인

    • 별칭명=값
  • 인자(1개 이상)로 별칭명을 명시하면, 해당 별칭명=값(들)을 출력

  • 예시

$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias hi='echo hi'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

$ alias hi
alias hi='echo hi'

$ alias hi ll
alias hi='echo hi'
alias ll='ls -l --color=auto'



자주 쓰는 환경 변수

  • SHELL

    • 사용자의 쉘 프로그램

    • 예) SHELL=/bin/bash

  • HOME

    • 홈 디렉토리 경로명

    • 예) HOME=/home/sun

  • LANG

    • 사용자 언어의 문자셋과 정렬 방식 정의

    • 예) LANG=ko_KR.UTF-8

  • OLDPWD

    • 이전 작업 디렉토리, cd -시에 여기로 이동

    • 예) OLDPWD=/usr/local/sbin

  • PATH

    • 실행 프로그램명을 입력할 때, 그 이름을 찾는 디렉토리 목록(콜론 구분)

    • 예) PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

  • PS1

    • 프롬프트 문자열 1, 쉘 프롬프트 내용을 정의(광범위하게 가능)

    • 예) PS1=[\u@\h \W]\$

  • PWD

    • 현재 작업 디렉토리, pwd시 확인 가능

    • 예) PWD=/home/sun

  • TERM

    • 사용자 터미널 타입 이름

    • 예) TERM=xterm

  • USER

    • 사용자 이름

    • 예) USER=sun

  • HOSTNAME

    • 장비명

    • HOSTNAME=localhost.localdomain



로그인 여부에 따른 쉘 환경 설정

로그인 쉘 세션

  • 사용자 이름과 비밀번호를 입력

  • 예) 가상 콘솔 세션이 시작할 때


로그인 쉘 세션용 시작파일

  • /etc/profile

    • 모든 사용자에게 적용되는 일반 환경설정
  • ~/.bash_profile

    • 개인 사용자 시작파일

    • 일반 환경설정(/etc/profile)을 확장하거나 무시할 수 있음

  • ~/.bash_login

    • ~/.bash_profile 파일이 없으면 bash는 이 스크립트를 읽게 됨
  • /.profile

    • /.bash_profile~/.bash_login 모두 없으면 bash는 이 파일을 읽음

    • 데비안 배포판에서는 기본으로 설정되어 있음


비로그인 쉘 세션

  • GUI 환경에서 터미널 세션을 실행할 때


비로그인 쉘 세션용 시작파일

  • /etc/bash.bashrc

    • 모든 사용자에게 적용되는 일반 환경설정
  • ~/.bashrc

    • 개인 사용자 시작 파일

    • 일반 환경설정을 확장하거나 무시할 수 있음

    • 가장 중요한 파일, 항상 참조됨

    • 비로그인 쉘은 기본적으로 해당 파일을 읽고, 로그인 쉘용의 시작 파일 대부분은 해당 파일을 기본적으로 참조하도록 만들어짐

    • 시작 파일을 읽는 것 뿐만 아니라 로그인 쉘 같은 상위 프로세스로부터 환경 값을 물려받음



환경파일 실행/호출 순서

  • (1) 호출 /etc/profile

    • (1-1) 호출 및 실행 /etc/profile.d/(아래의 모든 sh파일)

    • (1-2) 실행 /etc/profile

  • (2) 호출 ~/.bash_profile

    • (2-1) 호출 ~/.bashrc

    • (2-1-1) 호출 및 실행 /etc/bashrc

    • (2-2) 실행 ~/.bashrc

    • (2-3) 실행 ~/.bash_profile

  • 단, 호출 부분 위에 선언하면 당연히 먼저 실행



환경파일 편집에 대한 일반적인 규칙

  • .bash_profile (또는 배포판에 따라 그에 준하는 파일, 우분투는 .profile)

    • 사용자의 PATH에 디렉토리 추가

    • 부가적인 환경 변수를 정의

  • .bashrc

    • 그 밖의 다른 것
  • 시스템 관리자가 아니면 홈 디렉토리에 있는 파일만 편집



변경사항 적용

PATH 내용 적용

  • export 변수명

    • 쉘 변수를 환경변수로 저장

    • 쉘과 쉘의 자식 프로세스에 PATH(환경변수) 내용을 적용하라고 알려줌 (단, 터미널 유지시까지)

  • 매번 쉘을 실행할 때마다 쉘 변수를 환경변수로 자동으로 설정하고 싶다면 .bashrc 파일에 변수를 저장

    • export 변수명=값 형식


환경파일 적용

  • source $파일명

  • 해당 파일명 파일을 참조하도록 명령

  • .bashrc처럼 최초 세션이 시작될 때 참조되는 파일 등에 사용

    • source .bashrc