Saturday, March 16, 2019

Bash 쉘 프로그래밍 - 3. Bash 쉘 환경 #1. 쉘의 초기화 파일

■ Bash (Bourne-again shell) 쉘

오래전 유닉스 시절부터 사용되어 온 bourne 쉘을 대처하기 위해 그리고 GNU 프로젝트를 위해 1988년 1월 10일 Brian Fox 가 bash 쉘을 코딩했습니다.. 그리고 본 쉘 (Bourne)의 문법은 거의 모두 호환되어 본 쉘에 익숙한 엔지니어들도 배시 쉘을 거부감 없이 그대로 사용할 수 있습니다. Bash 쉘은 리눅스뿐만 아니라 Mac OS X, Unix, Novel Netware 등에 포팅되어 광범위하게 사용되고 있습니다.

배시 쉘 (Bash Shell)이 가지고 있는 대표적인 특징은 명령 히스토리(과거 명령 불러오기. 화살표 아래, 위 키 사용), 파일 이름 자동 완성 기능(Tab 키를 사용), 디렉터리 스택 등이 있습니다. 이 중에서 명령 히스토리 기능과 파일 이름 자동 완성 기능은 리눅스와 유닉스 엔지니어들이 매우 좋아하는 기능입니다. 배시 쉘(Bash Shell)은 리눅스의 기본 쉘(Default Shell)입니다.

■ 배시(Bash shell) 쉘 초기화 파일

사용자 로그인 후 쉘 생성시 쉘의 환경을 설정하는 파일을 쉘 초기화 파일(Shell Initialization Files)이라 합니다.

적용 범위
내 용
System-wide
 이 파일은 시스템 관리자가 관리하는 파일이다. bash 쉘 사용자 전체에게 영향을 주기 위해 사용한다.

  /etc/profile
  /etc/bashrc
User Configuration
 이 파일은 시스템 사용자가 관리하는 파일이다. 사용자에 한정되어 영향을 주기 위해 사용한다.

  $HOME/.bash_profile
  $HOME/.bashrc
  $HOME/.bash_logout

1). /etc/profile

사용자 로그인 후 배시 쉘이 실행될 때 bash 쉘에 의해 읽어지고 실행되는 파일입니다. 배시 쉘 사용자 전체에게 영향을 주기 위해 사용되는 파일이기 때문에 시스템 관리자에 의해 관리됩니다. 이 파일에는 배시 쉘의 예약된 변수 또는 사용자에게 적용되었으면 하는 일반 변수와 umask 값, 함수 및 쉘의 문법 등이 정의되어 있습니다. 이 파일의 내용에서 줄의 첫 문자 #은 주석을 의미합니다.

2). /etc/bashrc

사용자 로그인 후 배시 쉘이 실행될 때 배시 쉘에 의해 읽어지고 실행되는 파일입니다. bash 사용자 전체에게 영향을 주기 위해 사용되는 파일이기 때문에 시스템 관리자에 의해 관리됩니다. 환경 변수 같은 경우 하위 프로세스(Sub Process)에 상속이 되지만 별칭(Alias) 경우 상속이 되지 않습니다. 그래서 별칭(Alias)를 이 파일에 정의를 해놓는다. 쉘의 하위 쉘 프로세스가 열릴 때 자동으로 이 파일을 다시 읽어 들입니다.. 이 파일의 내용에서 줄의 첫  문자 #은 주석을 의미합니다.

3). $HOME/.bash_profile ( 또는 ~/.bash_profile)

사용자 로그인 후 배시 쉘이 실행될 때 배시 쉘에 의해 읽어지고 실행되는 파일입니다. 배시 쉘을 사용하는 사용자에 한정되어 영향을 주는 파일이며 사용자의 홈 디렉터리에 존재하는 파일입니다. 이 파일에는 bash 쉘의 예약된 변수 또는 사용자에게 적용되었으면 하는 일반 변수와 umask 값, 함수 및 쉘의 문법 등이 정의되어 있습니다. 이 파일의 내용에서 줄의 첫문자 #은 주석을 의미합니다.

4). $HOME/.bashrc ( 또는 ~/.bashrc)

사용자 로그인 후 배시 쉘이 실행될 때 배시 쉘에 의해 읽어지고 실행되는 파일입니다. bash 쉘을 사용하는 사용자에 한정되어 영향을 주는 파일이며 사용자의 홈 디렉터리에 존재하는 파일입니다. 환경 변수 같은 경우 하위 프로세스(Sub Process)에 상속이 되지만 별칭(Alias) 경우 상속이 되지 않습니다. 그래서 별칭(Alias)를 이 파일에 정의를 해놓는다. 쉘의 하위 쉘 프로세스가 열릴 때 자동으로 이 파일을 다시 읽어 들입니다. 이 파일의 내용에서 줄의 첫 문자 #은 주석을 의미한다.

5). $HOME/.bash_logout ( 또는 ~/.bash_logout )

로그아웃 진행 전 배시 쉘에 의해 읽어지고 실행되는 파일입니다.

6). bash 쉘 사용자 로그인의 예

먼저 아래와 같은 파일을 vi 편집기를 사용하여 echo 명령을 삽입하였습니다.. 이를 통해 bash 쉘 사용자 로그인 시 그리고 하위 쉘(Sub Shell) 생성 시 어떠한 파일이 읽어지는지를 알 수 있습니다.


아래는 '# su - user1' 명령을 실행하여 user1 사용자로 전환하였습니다. 그리고 결과 내용을 자세히 보자. 어떠한 파일이 먼저 읽어졌는지 알 수 있습니다. 실제 이러한 순서를 더 자세히 알기 위해서는 /etc/profile, /etc/bashrc, /etc/.bash_profile, /etc/.bashrc 파일 내용을 자세히 살펴볼 필요가 있습니다. 하지만 이 게시물에서는 이 정도만 다룰 것입니다. 배시 명령을 통해 하위 bash 쉘을 실행하였고 부모 bash 쉘과 자식(하위 또는 sub) bash 쉘이 서로 다른 PID를 가지는 것을 확인하기 위해 'echo $$' 명령을 실행했습니다. 이 정도면 쉘 초기화 파일이 어떻게 동작하는지 알 수 있을 것이라 생각됩니다.

[root@centos01 ~]# su - user1
this file is /etc/profile
this file is /etc/bashrc
this file is /home/user1/.bashrc
this file is /home/user1/.bash_profile

[user1@centos01 ~]$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
user1    18238 18237  0 14:31 pts/0    00:00:00 -bash
user1    18281 18238  0 14:32 pts/0    00:00:00 ps -f

[user1@centos01 ~]$ bash
this file is /etc/bashrc
this file is /home/user1/.bashrc

[user1@centos01 ~]$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
user1    18238 18237  0 14:31 pts/0    00:00:00 -bash
user1    18282 18238  0 14:32 pts/0    00:00:00 bash
user1    18324 18282  0 14:32 pts/0    00:00:00 ps -f

[user1@centos01 ~]$ echo $$
18282



No comments:

Post a Comment