- 출처 : 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'를 실행시키면 된다.