🦇 Linux

리눅스 - bashrc, bash_profile

ji-hyun 2021. 8. 25. 00:07

이전 게시물에 이어 설명합니다.

2021.08.24 - [Linux] - 리눅스 - 셸, 환경변수, bash 셸

 

리눅스 - 셸, 환경변수, bash 셸

echo $SHELL 시스템에 로그인한 후에 사용 중인 셸을 확인하려면 로그인 셸관련 환경변수 SHELL을 통해 가능하다. 명령 프롬프트 상에서 echo $SHELL 을 입력해주면 확인 가능하다. $ 가 붙은건 환경변

ts2ree.tistory.com

 

 

 

< 로그인부터 로그아웃까지의 절차 >

 

① 로그인 하게 되면 /etc/profile 을 읽는다.

② /etc/profile.d/*.sh 를 읽어온다. (profile.d(디렉터리의 d) 밑에 *.sh 확장자인 것을 읽어온다.)

③ 그 다음 ~/.bash_profile (=내 홈 디렉터리 밑에 있는 bash_profile) 을 읽어온다. 이것은 각 개인의 마스터 파일이다.

④ bashrc 을 읽어온다. 이것은 보조 파일이다.

⑤ /etc/bashrc 을 읽어온다. 모든 사용자에게 적용되며 $PS1 변수가 들어있다.

⑥ bash_history : 로그아웃했을 때 이전 실행했던 명령어들을 이 파일에 저장하고 빠져 나온다. 

⑦ bash_logout : 로그아웃을 했을 때 어떤 일을 하고 싶으면 여기다가 적으면 된다.

 

 

이 절차 순서에 따라서 파일들을 리뷰해보겠다.

 

 

 

vi .bash_profile 명령을 입력하여 .bash_profile 파일을 열어보았다.

(se nu = 행 번호 붙이기 명령)

 

vi .bash_profile 실행결과 캡쳐

 

# 은 주석이라는 뜻이다.

첫번째 if 문을 살펴보면 [ ] 안은 조건문이고 -f 는 파일의 존재 여부를 묻는다고 생각하면 된다.

즉 당신의 홈 디렉터리 밑에 .bashrc 파일이 존재하는지를 묻고 있고 참이면 아래 문장을 실행한다.

이때 . ~/.bashrc 를 보면 앞에 . 이 하나 붙는데 이 뜻은 .bashrc 파일을 읽어오라는 의미이다. (= C 언어의 include 와 같다.)

 

 

PATH=$PATH:$HOME/.local/bin:$HOME/bin

 

해석 -> path들은 전부 : (콜론)으로 구별되어 있다.여기서 하나 알아두어야 할 점은, 우리가 리눅스에서 사용하는 명령어들도 결국 일종의 실행파일인데 명령어 입력 시 환경변수에 잡혀있는 PATH를 따라가서 해당 파일이 실행되는 원리로 명령어가 작동된다는 것이다. 즉, mkdir, ls 등의 명령어도 결국 저 path 경로에 저장되어 있다는 얘기이다.

 

 

 

 

 

PATH 변수 밑에 다른 변수를 추가해서 작성해 줄 수도 있다.

 

AGE, NAME 변수를 추가

 

AGE=25, NAME="친절한 소나무" 를 추가해서 작성하고 esc 누르고 :wq 를 하여 저장하고 빠져나간다.

 

 

 

 

 

 

이번엔 vi .bashrc 명령을 입력하여 .bashrc 파일을 열어본다.

 

 

# 주석문을 제외하고는 if 문이 들어있다.

if문 역시 해석하면 etc 밑에 bashrc 파일이 존재하는지 묻고 있고 존재하면 그 파일을 포함시켜라 라는 의미로 해석할 수 있다.

 

 

 

 

 

 

vi /etc/bashrc 명령을 입력하여 /etc/bashrc 파일을 열어보았다.

 

41번째 행 보기

 

41번째 행에서 PS1 변수를 볼 수 있는데 리눅스를 처음 깔고 바꿔줬던 변수 중 하나이다.

즉 프롬프트 상태를 바꾸는 변수이다.

 

 

 

 

70번째 행을 보면 umask 값이 설정되어 있는 것을 볼 수 있다.

또한 76번째 행을 보면 SHELL 이라는 환경변수에 bin/bash 값이 설정되어 있다.

 

79번째 행에서는 etc/profile.d/*.sh 도 보인다.

 

 

 

 


실습

 

결과가 아무것도 안뜬다

 

아까  .bash_profile 파일에 AGE=25, NAME="친절한 소나무" 를 작성하고 저장해줬는데 로그인한 다음에 설정했기 때문에 변경사항이 아직 적용되지 않았다.

 

 

재로그인해준다.

 

. ~/.bash_profile 은 재로그인 기능과 같다. AGE=25, NAME="친절한 소나무" 결과가 출력된다.

 

 

 

 

bash 명령을 기준으로 셸이 나누어진다.

bash 이전의 셸부모셸이라고 하고 bash 이후의 셸자식 셸이라고 한다.

bash 명령을 하고 echo 로 AGE, NAME 환경변수를 확인해보면 아무것도 뜨지 않게 된다.

 

그렇다면 그 전의 변수들은 지역변수인 셈이다.

exit 명령을 내려 자식셸을 빠져 나가보자.

 

 

 

 

 

export

 

 

아까 하던 명령에 이어서 해보면 export 명령으로 AGE 변수를 가져온다.

bash 명령을 하면 echo $AGE 가 아무것도 안나왔던 것이 25를 출력하게 된다.

export 는 지역 변수를 전역변수화 시키는 것이 export 기능이다.

 

NAME 은 export 시키지 않았기 때문에 아무런 결과가 나오지 않는다.

 

 

 

 

 

 

 

alias 명령을 이용해 h 를 history 명령과 동일시하게 해주었다.

하지만 로그아웃하고 다시 로그인해 h 를 입력하면 h 명령은 찾을 수 없다고 뜬다.

 

로그아웃하고 다시 로그인할때 이 변경사항이 유지되게 하고 싶다면..?

 

 

 

 

vi .bashrc 명령을 입력한다.

 

 

11행을 보면 #User specific aliases and function 이 보인다. 이 뜻은 특정한 alias 나 함수를 지정해서 사용할 수 있다는 뜻이다.

 

13, 14행과 같이 alias 를 직접 입력해준다. 그리고 저장해주고 빠져나간다. (:wq)

 

 

 

언제든지 적용이 되려면 . ~/.bashrc 명령을 해줘서 h, c 명령을 사용할 수 있게 된다. 이렇게 활용하는 것들을 기억해두면 리눅스를 더 간편하게 사용할 수 있다.

 

 

 

결론

-> 환경변수 수정은 bash_profile 파일에, alias나 함수 지정은 bashrc 파일에 하는 것을 잊지 말자는 얘기!

 

 

 

 

 

vi .bashrc 명령을 하고 hello 함수도 만들어보았다. 언제든지 적용이 되려면 . ~/.bashrc 명령을 잊지 말자.

 

 

 

 

 

 

 

+)

마찬가지로 실행파일 a을 만들고 나서 실행시키려면 ./a 같이 .을 항상 붙여주어야 하는데 이도 PATH=$PATH:. 과 같이 써주면 .을 안써도 적용이 된다. 하지만 로그아웃을 하면 적용되지 않으므로 이 역시 vi 편집기를 통해 .bash_profile 파일에서 PATH 를 수정해주고 . ~/.bash_profile 와 같이 명령어를 작성해주면 언제나 적용이 된다. 

 

 

 

 

그러니까 vi로 ~/.bash_profile을 열고 $PATH에 . 을 추가해주는 것만으로는 안되고 그 후에 . ~/.bash_profile 이라고 적용을 해줘야 다음 로그인 때에도 효과가 있는 것인지요?

 

- 네 맞습니다. 그래야 적용이 됩니다.

 

 

 

 

 

 

셸 관련 파일 및 디렉터리 설명 정리

사용자가 명령행에서 설정한 환경변수나 alias 는 일시적으로 사용 가능하고, 다음 로그인 시에는 적용되지 않는다. 따라서 해당 설정들을 지속적으로 이용하려면 관련 파일에 설정해야 한다. 관련 파일 및 디렉터리는 다음의 표와 같다.

 

파일 또는 디렉터리명 설명
/etc/profile 시스템 전체(모든 사용자)에게 적용되는 환경변수와 시작관련 프로그램 설정한다.
/etc/bashrc 시스템 전체(모든 사용자)에 적용되는 alias 와 함수를 설정한다.
~/.bash_profile 개인 사용자의 환경 설정과 시작 프로그램 설정과 관련이 있는 파일로 로그인시 읽어 들인다. 경로, 환경변수 등의 설정이 들어있고, 사용자가 PATH 와 같은 환경변수 수정 시 사용하면 된다.
~/.bashrc 개인 사용자가 정의한 alias 와 함수들이 있는 파일이다. alias를 지속적으로 사용하려면 이 파일에 설정한다.
~/.bash_logout 개인사용자가 로그아웃할 때 수행하는 설정을 지정하는 파일이다.
/etc/profile.d 몇몇 응용프로그램들이 시작할 때 위한 필요한 스크립트가 위치하는 디렉터리로 보통 /etc/profile 에서 호출된다. 일반 사용자의 alias 설정 등과 관련한 스크립트가 존재한다.

 

 

 

 

 

 

여기서부턴 조금 낯설어서 그런지 포스팅하면서 많은 시간이 걸렸다. 한번 더 복습하는 시간을 가져야겠다.

 

 

※ 아래 유튜브와 "리눅스 마스터 2급 완전 정복" 을 읽고 개인적으로 공부 및 정리한 글입니다. 

https://www.youtube.com/watch?v=xJLJ9q_Z2eU&list=LL&index=5