쉘 세션이 진행되는 동안 쉘은 환경이라는 걸 통해 정보들을 관리한다.
대부분의 프로그램은 각자의 환경 설정 파일을 참조하지만, 일부 프로그램은 쉘의 환경 값을 찾아보기도 한다.
이를 위해서 사용자에게 맞게 환경을 설정할 수 있어야 한다.
환경에는 어떤 것들이 저장될까?
쉘은 크게 두 가지 형식을 환경에 저장하는데, 환경 변수와 쉘 변수이다.
쉘 변수는 bash 에 저장된 작은 데이터이고, 환경변수는 그 밖의 모든 것들을 지칭한다.
환경 검증하기
환경에 저장된 것들을 확인하기 위해서 set 혹은 printenv 를 사용할 수 있다.
set 은 쉘 변수와 환경 변수 모두를 보여주지만, printenv 는 환경 변수들을 보여준다.
printenv 를 사용할 경우 수많은 환경 변수들에 대한 목록이 출력되는데, 변수명=값 의 형태를 갖고 있다.
printenv 변수명 과 같이 특정 변수의 값만을 출력할 수도 있다.
set 의 경우는 쉘 변수와 환경 변수, 쉘 함수 등을 문자열 정렬하여 보여주는데, 별칭(alias) 는 출력하지 않는다.
별칭들에 대해서는 alias 명령어로 따로 확인 가능하다.
printenv
printenv USER
set
alias
아래는 대표적인 몇 가지 환경 변수들에 대한 테이블이다.
변수 | 설명 |
DISPLAY | 그래픽 환경 사용자일 경우 디스플레이명 |
EDITOR | 기본 텍스트 편집기 프로그램명 |
SHELL | 사용자 쉘 프로그램명 |
HOME | 홈 디렉토리 경로 |
LANG | 사용자 언어의 문자셋과 정렬 방식 |
OLD_PWD | 이전 작업 디렉토리 |
PAGER | 페이지 출력에 사용되는 프로그램명 |
PATH | 실행 프로그램을 찾는 경로 목록 |
PS1 | 프롬프트 문자열 1, 쉘 프롬프트 내용 정의 |
PWD | 현재 작업 디렉토리 |
TERM | 사용자 터미널 타입 |
TZ | 사용자 시간대 설정, |
USER | 사용자 이름 |
환경은 어떻게 설정할까?
시스템에 로그인하면, 기본적인 환경 설정 값을 구성하는 시작 파일이라는 환경 설정 스크립트를 읽는다.
시작 파일은 모드 사용자에게 공유되는 파일이며, 이를 읽은 후에 개인 사용자의 환경을 정의하는 홈디렉토리 내의 시작 파일을 다시 읽는다.
홈 디렉토리에 있는 .bashrc 파일이 개인 사용자의 시작 파일이 된다.
거의 항상 참조되기 때문에 일반적으로 가장 중요한 파일이라고 생각하면 된다.
쉘 세션은 크게 로그인 쉘 세션과 비로그인 쉘 세션으로 나뉘는데, 일반적으로 GUI 환경에서 터미널을 실행할 때 나타나는 것이 비로그인 쉘 세션이다.
로그인 쉘 세션은 가상 콘솔 세션 등이 시작할 때로, 사용자의 이름과 비밀번호를 입력해야 한다.
로그인 쉘 세션용 시작 파일에는 /etc/profile 이나 홈디렉토리의 .bash_profile, .bash_login, .profile 등이 있다.
위에서 언급한 .bashrc 파일은 비로그인 쉘 세션의 시작파일이지만, 로그인 쉘용의 시작파일이 이를 참조하도록 만들어지기 때문에 중요한 것이다.
이외에도 .bash_history 에는 쉘에서 사용한 명령어들이 저장되는데, history 명령을 내릴 때 참조하는 파일이 된다.
커맨드라인에 명령을 내릴 때 쉘은 다양한 경로들로부터 실행파일을 찾아서 실행시키는 방식인데, 이 경로들의 목록을 저장해놓는 변수가 PATH 이다.
이 때 PATH 변수에 대한 설정은 /etc/profile 혹은 ./.profile 등에 존재한다.
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
export PATH
이는 PATH 변수의 앞부분에 ~/bin 경로와 ~/.local/bin 경로를 추가하는 코드이다.
$HOME 이나 $PATH 등을 통해 확장을 사용하는 것도 같이 확인할 수 있다.
이렇게 bin 경로들을 추가함으로써 명령어가 입력될 때 해당 경로에 있는 파일들도 같이 탐색을 하게끔 만든다.
마지막으로 export 를 통해 쉘과 자식 프로세스들에게 PATH 의 내용을 업데이트 시킨다.
'STUDY > Linux' 카테고리의 다른 글
[리눅스] 프로세스 (0) | 2021.07.08 |
---|---|
[리눅스] Permission (0) | 2021.07.05 |
[리눅스] 커맨드라인 키보드 기법 (0) | 2021.07.01 |
[리눅스] 확장 제어 (0) | 2021.06.30 |
[리눅스] 확장 (0) | 2021.06.28 |