[Shell에 대하여]리눅스 bash에서의 환경변수와 특징
출처 : 대전국제IT교육센터 정성재 강사
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)
[posein@www /]$ echo $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) [posein@www posein]$ PS1="[\u@\t
\W]\$ "
[posein@00:53:51 posein]$
=> 프롬프트에서 호스트이름대신에 현재시간을
표시하도록 설정하였다.
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'를 실행시키면 된다.