🐧 Linux 심화: 셸(Shell) 스크립트와 환경 설정
오늘은 리눅스의 핵심 인터페이스인 셸(Shell) 의 다양한 기능과 변수, 그리고 환경 설정 방법에 대해 깊이 있게 학습했다. 특히, Bash
셸을 중심으로 로컬 변수와 환경 변수의 차이를 이해하고, 나만의 설정을 시스템에 영구적으로 적용하는 방법을 익혔다.
💡 셸, 왜 중요할까?
셸은 사용자와 리눅스 커널을 연결하는 다리다. 단순히 명령어를 실행하는 것을 넘어, 변수, 스크립트, 환경 설정을 통해 반복적인 작업을 자동화하고 사용자 환경을 최적화할 수 있는 강력한 도구다. 셸을 잘 다루는 것은 리눅스 시스템을 효율적으로 관리하기 위한 필수 역량이다.
🐚 셸(Shell)의 종류와 서브셸
리눅스는 다양한 셸을 제공하며, 사용자는 필요에 따라 셸을 선택하거나 추가로 설치할 수 있다.
셸 종류 | 설명 |
---|---|
sh (본 셸) |
가장 기본적인 셸. 유닉스 최초의 셸에서 유래했다. |
bash (본 어게인 셸) |
현재 대부분의 리눅스 배포판에서 기본 셸로 사용된다. sh 의 확장된 버전. |
csh , tcsh |
C언어와 유사한 문법을 가진 셸. |
ksh (콘 셸) |
sh 의 기능을 확장하고 스크립트 프로그래밍 기능을 강화한 셸. |
zsh (Z 셸) |
bash 를 포함한 여러 셸의 장점을 통합한 강력한 셸. (e.g., oh-my-zsh ) |
서브셸(Subshell)이란?
현재 실행 중인 셸에서 새로운 셸을 실행할 때, 새로 생긴 셸을 서브셸이라고 한다. 서브셸은 부모 셸의 환경 변수를 상속받지만, 서브셸에서 변경된 내용은 부모 셸에 영향을 주지 않는다.
# 현재 시스템에 설치된 셸 종류 확인
$ cat /etc/shells
# 현재 프로세스 구조 확인 (로그인 셸)
$ ps --forest
PID TTY TIME CMD
1096 pts/0 00:00:00 bash
# 서브셸(sh) 실행
$ sh
# 서브셸이 실행된 후 프로세스 구조 확인
$ ps --forest
PID TTY TIME CMD
1096 pts/0 00:00:00 bash
1363 pts/0 00:00:00 \_ sh
⚙️ 셸 변수: 로컬 변수 vs. 환경 변수
셸 변수는 데이터 저장을 위해 사용되며, 로컬 변수와 환경 변수로 나뉜다.
구분 | 로컬 변수 (Local Variable) | 환경 변수 (Environment Variable) |
---|---|---|
범위 | 현재 셸에서만 유효 | 현재 셸과 모든 서브셸에까지 영향을 미침 |
선언 | 변수명=값 |
export 변수명=값 또는 export 변수명 |
확인 | set 명령어 출력에만 포함 |
env 와 set 명령어 출력 모두에 포함 |
💡 변수명 규칙 및 쿼팅(Quoting)
- 변수명은 문자로 시작해야 하며, 숫자, 밑줄(
_
)을 포함할 수 있다. (하이픈-
사용 불가)- 작은따옴표(
' '
)는 내부의 모든 특수문자(e.g.,$
,$(...)
)를 일반 문자로 취급한다.- 큰따옴표(
" "
)는$
,\
,`
,{}
등 일부 특수문자의 기능을 허용한다. (명령어 치환 가능)
변수 선언 및 확인 실습
# 로컬 변수 선언
$ myName="John Doe"
# 환경 변수 선언
$ export myFoot="280mm"
# 변수 값 확인
$ echo "My name is $myName and my foot size is $myFoot"
# env와 set으로 변수 범위 확인
$ env | grep my # myFoot만 출력됨 (환경 변수)
$ set | grep my # myName과 myFoot 모두 출력됨
# 서브셸에서 변수 확인
$ bash
$ echo $myName # 출력되지 않음 (로컬 변수)
$ echo $myFoot # 280mm 출력됨 (환경 변수)
$ exit
# 변수 삭제
$ unset myName
🛠️ Bash 환경 설정 파일
셸이 시작될 때 특정 설정을 자동으로 적용하기 위해 환경 설정 파일을 사용한다. 이를 통해 alias
나 PATH
같은 설정을 영구적으로 유지할 수 있다.
파일 경로 | 설명 | 적용 시점 |
---|---|---|
/etc/profile | 시스템 전체에 적용되는 환경 설정 | 모든 사용자가 로그인할 때 |
~/.profile | 개인 사용자를 위한 환경 설정 | 해당 사용자가 로그인할 때 (최초 1회) |
~/.bashrc | 개인 사용자를 위한 Bash 관련 설정 | 로그인 셸 또는 서브셸이 실행될 때마다 |
💡
alias
로 나만의 단축 명령어 만들기
alias
는 긴 명령어를 짧은 별칭으로 만들어 생산성을 높여준다.# 'rm' 실행 시 항상 확인 메시지를 띄우도록 alias 설정 alias rm='rm -i' # 'll'을 'ls -l --color=auto'로 설정 alias ll='ls -l --color=auto'
이 설정을 영구적으로 사용하려면
~/.bashrc
파일에 추가하면 된다.
설정 파일 적용 및 확인
# 1. .bashrc 파일에 alias 추가
$ vi ~/.bashrc
# 파일 맨 아래에 다음 내용 추가
alias mytime='date | cut -c17-24'
PS1="\[\e[32m\][\u@\h \W]\$ \[" # 프롬프트 색상 변경
# 2. .profile 파일에 환경 변수 추가
$ vi ~/.profile
# 파일 맨 아래에 다음 내용 추가
export myHairColor="Black"
# 3. 변경된 설정 즉시 적용
$ source ~/.bashrc
$ source ~/.profile
# 4. 확인
$ mytime
$ echo $myHairColor
✨ 오늘의 회고
- Bash를 포함한 다양한 셸의 종류와 서브셸의 개념을 이해했다.
- 로컬 변수와 환경 변수의 차이점을 명확히 구분하고,
export
명령어로 환경 변수를 설정하는 방법을 익혔다. - 변수 선언 시 쿼팅(
' '
," "
) 의 차이와 중요성을 파악했다. /etc/profile
,~/.profile
,~/.bashrc
등 환경 설정 파일의 역할과 적용 시점을 학습하고, 이를 통해alias
와 환경 변수를 영구적으로 설정하는 방법을 실습했다.source
명령어를 사용하여 수정한 설정 파일을 즉시 현재 셸에 적용할 수 있음을 확인했다.