리눅스 bash에서의 환경변수와 특징

By | 7월 19, 2011

- 출처 : http://comefeel.com/tt/comefeel/77 -

1. bash에서의 쉘변수와 환경변수

 (1) 쉘변수

 1) 개요: 말 그대로 특정한 쉘 즉 bash에서만 적용되는 변수를 말한다. 
 
 2) 특징

  ㄱ. 지정하는 방법은 '변수명=값' 형태로 지정하면 된다.
    예) [posein@www posein]$ COLOR=red
  ㄴ. 변수값을 출력할 때는 변수명 앞에 $을 붙여 echo명령을 사용하면 된다.
    예) [posein@www posein]$ echo $COLOR
      red

(2) 환경변수: 모든 쉘에 영향을 미치는 변수라는 것을 제외하고는
                     쉘변수와 지정방법이나 특징이
 유사하다.

(3) bash에서 쉘변수를 환경변수화시키기: export명령을 사용하면 된다.



2. 일반적인 환경변수목록

 (1) 환경변수

 1) HOME : 사용자의 홈디렉토리
 2) PATH : 실행파일을 찾는 경로
 3) LANG : 프로그램 사용시 기본 지원되는 언어
 4) PWD : 사용자의 현재 작업하는 디렉토리
 5) TERM : 로긴 터미널 타입
 6) SHELL : 로그인해서 사용하는 쉘
 7) USER : 사용자의 이름
 8) DISPLAY : X 디스플레이 이름
 9) VISUAL : visual 편집기의 이름
 10) EDITOR : 기본 편집기의 이름
 11) COLUMNS : 현재 터미널이나 윈도우 터미널의 컬럼수
 12) PS1 : 명령프롬프트변수
 13) PS2 : 2차 명령프롬프트이다. 명령행에서 를 사용하여 명령행을 연장했을 때 나타난다.
 14) BASH : 사용하는 bash 쉘의 경로
 15) BASH_VERSION : bash의 버전
 16) HISTFILE : history 파일의 경로
 17) HISTFILESIZE : history 파일의 크기
 18) HISTSIZE : history에 저장되는 갯수
 19) HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.
 20) HOSTNAME : 호스트의 이름
 21) LINES : 터미널의 라인 수
 22) LOGNAME :로그인이름
 23) LS_COLORS : ls 명령의 색상관련 옵션
 24) MAIL : 메일을 보관하는 경로
 25) MAILCHECK : 메일확인시간
 26) OSTYPE : 운영체제 타입
 27) SHLVL :쉘의 레벨
 28) TERM :터미널종류
 29) UID : 사용자의 UID
 30) USERNAME : 사용자이름


(2) 사용예

 1) [posein@www /]$ mkdir $HOME/backup
      [posein@www /]$ ls -ld $HOME/backup
      drwxrwxr-x   2 posein  posein     4096 1월 15 01:31 /home/posein/backup

 2) 프롬프트의 형태 지정하기 (PS1)
   [posein@www /]$ PS1='[\u@\h \W]#'


      d : '요일 달 날짜'형태로 나타내준다. (예 "Wed Jan 15")
      h : 호스트이름을 보여준다. 보통 '.'를 사용한 이름인 경우 첫번째 '.'까지 보여준다.
      H : 호스트이름을 보여준다.
      l : 쉘의 터미널 장치의 이름을 보여준다.
      s : 쉘의 이름을 보여준다.
      t : 24시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
      T : 12시 형태의 현재 시간을 보여준다. (예 HH:MM:SS)
      @ : am/pm 12시 형태의 현재시간을 보여준다.
      u : 현재 사용자의 이름을 보여준다.
      w : 현재 작업디렉토리를 보여준다.
      W : 현재작업디렉토리의 마지막 디렉토리만 보여준다.
      ! : 현재 명령의 히스토리 넘버를 보여준다.
      : 를 보여준다.



3. 환경변수관련 명령
 

(1) set : shell변수를 표시하고 값을 지정할 수 있다. C-shell에서는 변수와 값지정시에 필수적으
            로 사용해야 하지만, Bash에서는 변수와 값지정시에 꼭 set 명령을 지정하지 않아도 된다.

 1) 사용법
  set [option] [argument]
 

 2) option
  -o : 현재 set옵션의 상태를 표시한다.

 3) 사용예

  ㄱ. set 
    => 옵션이나 인자가 주어지지 않으면 이미 지정된 shell변수와 함수이름,값이 표시된다.
  ㄴ. set -o 
    => 현재 set옵션의 상태가 표시된다.

 4) 응용예

  [posein@www posein]$ a=1          // bash에서는 set 명령없이 "변수=값" 형태로 지정
                                                                   하면 된다. 확인은 인자없이 set 이라고 입력한다.
  [posein@www posein]$ echo $a
  1
   => 변수로 선언되었으므로 $a하면 1이라는 값이 출력된다.
  [posein@www posein]$ /bin/csh       // 임시로 C-shell로 전환.
  [posein@www ~]$
   => C-shell로 전환하면 프롬프트로 바뀜을 알 수 있다.
  [posein@www ~]$ b=2
  b=2: Command not found.
   => bash에서 변수지정하는 것처럼 하면 오류가 나타남을 알 수 있다. 
  [posein@www ~]$ set b=2
   => C-shell 계열에서는 변수와 값지정시 set 명령을 사용해야 한다.
        확인하려면 인자없이 set  
이라고 입력한다.
  [posein@www ~]$ echo $b
  2
    => 변수로 선언되었으므로 $b하면 2라는 값이 출력된다.


(2) env : 환경변수에 대한 정보를 보여준다.

 1) 환경변수란 : 로그인할 때나 새로운 쉘을 파생시킬 때 쉘의 환경을 정의하는 중요한 역할을
                             수행한다. env를 실행하면 환경 변수 설정값들을 확인할 수 있고 또한 각 환경
                             변수를 나타낼 때 변수이름앞에 $를 붙인다.

 2) 사용예

  [root@www /root]# env
   => 현재 시스템의 환경변수를 보여준다. 

 3) 환경변수의 설정 : 값을 지정한후 export해야 한다. 현재 리눅스의 bash에서는 export를 생략

                                     해도 반영된다.
 

  예) 패스변경하기
    [posein@www posein]$ echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin
      => 현재 패스를 확인하면 홈디렉토리를 없다. 홈디렉토리를 추가해보자.
    [posein@www posein]$ PATH="$PATH:/home/posein"
    [posein@www posein]$ export PATH
    [posein@www posein]$ echo $PATH
    /usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/posein/bin:/home/posein


(3) export : 쉘변수를 환경변수로 만들어주는 명령이다. 현재 리눅스 bash에서 일시적인
                  반영시에
는 생략해서 사용할 수 있다.

 1) 사용법
  export 환경변수=변수값
 

 2) 사용예
  ㄱ. [root@www root]# export PATH="$PATH:/usr/local/apache/bin"
      => 현재 설정된 패스값에 /usr/local/apache/bin이라는 경로를 추가한다.
  ㄴ. [posein@www posein]$ PATH="$PATH:/home/posein"
      => 현재 설정된 패스값에 "/home/posein"이라는 경로를 추가한다. export명령을 생략해서 
       사용해도 된다.
 

 3) 참고: export 명령은 쉘변수를 환경변수로 만들어 준다. 그러나, 쉘에서 export로 선언하여 
      사용한 뒤에 로그아웃하게 되면 초기화된다. 따라서, 해당 환경변수의 값을 계속적으로
      반영되도록 하려면 /etc/profile(전체시스템)이나 ~/.bash_profile(개인사용자)파일안에
      선언하면 된다.


(4) unset : 선언된 변수를 제거하는 데 사용한다.

 1) 사용법
  unset 변수이름
 

 2) 사용예
  [root@www /root]# TEL=042
  [root@www /root]# echo $TEL
  042
  [root@www /root]# unset TEL
  [root@www /root]# echo $TEL  // 변수가 제거되었으므로 아무값도 출력되지 않는다.

(참고) bash에서는 환경변수를 만들 때 변수 값을 설정한 후, 환경에 변수를 익스포트(export)하는
두 단계를 거친다. 

 * 사용예

  [posein@www posein]$ echo $LANG     // 언어관련 환경변수값 확인
  ko_KR.eucKR
  [posein@www posein]$ date
  수 5월 21 01:28:56 KST 2003       // 한글로 표시된다.
  [posein@www posein]$ LANG=euc_UN    // 영어로 변경
  [posein@www posein]$ export LANG    // 일시적으로 변경할 경우에는 생략가능
  [posein@www posein]$ date
  Wed May 21 01:29:07 KST 2003       // 영어로 표시된다.


4. 명령어 히스토리(command history)

(1) history에 대하여

 1) 설명: bash에서는 입력하여 실행했던 모든 명령들은 히스토리 리스트 버퍼에 스택으로 저장된
      다. 이 기능은 반복하여 입력하거나 명령을 수정할 때 유용하게 쓰인다. 사용법은 방향키
      위/아래를 누르면서 사용가능하다. 히스토리 파일은 각 사용자의 홈 디렉토리에 
      .bash_history라는 이름으로 존재하며 쉘 실행 중에는 메모리에만 명령어 히스토리를 
      기억하고 있다가 로그아웃시에 .bash_history파일에 저장한다.

 2) 사용예

  [posein@www posein]$ history
   => 입력한 명령어들의 리스트를 보여준다.


(2) history 관련 변수

 1) 종류
  ㄱ. HISTSIZE : 히스토리 스택의 크기가 지정되어 있다. 단위는 명령의 개수이다. 이 변수의 
            설정값을 변경했을 경우 history명령을 내리면 해당개수만큼만 출력된다. 또한
            방향키로 검색했을 경우에는 설정한 명령한 개수만 검색된다.
  ㄴ. HISTFILESIZE : 실질적인 히스토리파일의 크기이다.
  ㄷ. HISTFILE   : 히스토리 파일의 위치를 보여준다.
  ㄹ. HISTCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수이다.

 2) 사용예
  ㄱ. [posein@www posein]$ echo $HISTFILE
     /home/posein/.bash_history
  ㄴ. [posein@www posein]$ HISTSIZE=1
      => 실질적인 히스토리 파일의 스택크기가 1이 되므로 방향키로 조회해도 나오지 않는다.


(3) ! 과 히스토리 명령문 : 느낌표(!)를 이용하여 실행할 수 있다.


 1) 사용법
  !! : 마지막으로 실행했던 명령문을 실행한다.
  !n : n번째 실행한 명령문을 실행한다.
  !-3 : n번째 이전에 실행했던 명령문을 실행한다.
  !string : 가장 최근에 'string(문자열)'으로 시작하는 명령문을 실행한다.
  !?string? : 가장 최근에 실행했던 명령문중 string을 포함하고 있는 명령문을 실행한다. 
          배포판에 따라 string뒤에 ?는 생략가능하다.
  ^string1^string2 : 마지막 실행 명령문의 string1을 string2로 대체한 후 실행한다.

 2) 사용예
  ㄱ. [posein@www posein]$ pwd
     /home/posein
     [posein@www posein]$ !!
     pwd
     /home/posein
      => pwd가 실행된다.
  ㄴ. [posein@www posein]$ !-4
     date
     수 5월 21 01:51:08 KST 2003
      => history 스택을 거슬러 4만큼 올라가서 해당 명령을 실행한다. 현재의 예제는 date
       명령임을 알 수 있다.
  ㄷ.[posein@www posein]$ !100
      => history의 번호중에서 100번 명령을 실행한다. 
  ㄹ. [posein@www posein]$ set
     .....
     [posein@www posein]$ !s
      => 가장 최근에 's'로 시작하는 set명령이 실행된다.
  ㅁ. [posein@www posein]$ ls -alF
     .....
     [posein@www posein]$ !?al
      => ls -alF가 실행된다.
  ㅂ. [posein@www test]$ ls
     a.txt
     [posein@www test]$ cp a.txt b.txt
     [posein@www test]$ ^b.txt^c.txt
     cp a.txt c.txt
     [posein@www test]$ ls
     a.txt b.txt c.txt


(4) 참고 - history관련 테크닉

 1) [CTRL] + [r]
    => 명령프롬프트상태에서 이 키 조합을 누르면 검색할 수 있는 명령프롬프트가 뜬다. 이 때 
     특정한 문자를 입력하면 가장 최근에 그 문자로 수행한 명령을 보여준다.

 2) [ESC] 후에 [.] 또는 [ALT] + [.]

    => 최근에 사용된 인자(argument)를 붙여준다. 텔넷으로 접속한 경우에는 [ALT]+[.]은 사용할
     수 없다.

 3) export HISTCONTROL=ignoreboth

    => 중복되어지는 명령어는 히스토리에 기억하지 않는다. 명령행에 입력하거나 계속적으로 
     반영시키려면 .bashrc파일에 기록한다.

5. alias

(1) 개요 : 명령어에 별명(alias)를 만드는 것이다. 어떠한 명령에 기본으로 옵션을 추가시키거나 
      자신만의 독특한 명령어를 만들 수 있다. 기본적으로 alias만 입력했을 경우에는 현재 
      설정된 alias를 보여준다.

(2) 사용법
  alias 별명이름='실행될 명령의 정의'

(3) 사용예

 1) alias 
    => 현재 설정된 alias를 보여준다.

 2) alias rm='rm -i' 
    => rm명령에 기본으로 -i옵션을 부여하여 rm명령을 실행시킬때마다 확실히 지울 것인지 물어
     본다. 

 3) unalias rm 
    => rm에 설정된 ailas를 해제한다.

(4) 특징

  1) 일반쉘상태에서 alias를 설정한 뒤 로그아웃하면 그 설정은 무효가 된다.

  2) alias의 해제는 unalias명령을 이용한다.
  3) alias의 설정을 지속적으로 반영시키려면 ~/.bashrc파일안에 설정하면 된다.

(참고) ~/.bashrc파일안에 설정하면 다음 로그인부터 그 값이 반영된다. 만약 즉시 반영하고 원할
    경우에는 'source .bashrc'를 실행시키면 된다.

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments