CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
  • Week 5
    • 1.셸이란 무엇인가
    • 2.셸 변수와 환경 변수
    • 3.환경 설정 파일
    • 4.리다이렉션 · 별칭 · 히스토리
    • 5.Week 5 종합 복습: 셸 한 장 정리
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 5/Day 3

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 5 · Day 3읽기 약 7분
핵심 정리
  • 설정 파일은 전역(/etc/)과 사용자(~/) 두 층으로 나뉜다. 전역을 먼저 읽고 사용자 것으로 덮는다.
  • 로그인 셸은 /etc/profile → ~/.bash_profile 순으로 읽는다.
  • 비로그인 셸(터미널 창을 새로 열 때)은 ~/.bashrc 를 읽는다.
  • 로그아웃할 때는 ~/.bash_logout 이 실행된다.
  • 고친 설정을 다시 로그인하지 않고 적용하려면 source 또는 . 을 쓴다.

Day 3 - 환경 설정 파일

두 층, 두 갈래

          전역 (모든 사용자)            사용자 (나만)
        ┌──────────────────┐      ┌──────────────────┐
로그인   │  /etc/profile     │  →   │  ~/.bash_profile  │
        └──────────────────┘      └──────────────────┘
 
비로그인 │  /etc/bashrc      │  →   │  ~/.bashrc        │
        └──────────────────┘      └──────────────────┘
 
로그아웃                            ~/.bash_logout
축가르는 것
전역 vs 사용자/etc/ 아래는 모두에게, ~/ 아래는 그 사람에게만
로그인 vs 비로그인로그인 과정을 거쳤나, 아니면 이미 로그인한 상태에서 셸만 새로 띄웠나
  • 전역 파일은 root만 고칠 수 있다. 사용자 파일은 각자 고친다.
  • 같은 값을 양쪽에서 설정하면 나중에 읽는 사용자 파일이 이긴다.

각 파일이 하는 일

파일범위언제
/etc/profile전역로그인할 때
/etc/bashrc (/etc/bash.bashrc)전역셸을 새로 띄울 때
~/.bash_profile개인로그인할 때
~/.bash_login, ~/.profile개인.bash_profile이 없을 때 대신
~/.bashrc개인셸을 새로 띄울 때
~/.bash_logout개인로그아웃할 때

배포판마다 파일 이름이 조금 다르다. 전역 bashrc가 레드햇 계열은 /etc/bashrc, 데비안 계열은 /etc/bash.bashrc 다.

무엇을 어디에 적나

적을 내용두는 곳이유
환경 변수(PATH, LANG).bash_profile한 번만 설정하면 자식에게 전달된다
별칭(alias), 프롬프트.bashrc셸마다 새로 필요하다
  • 환경 변수는 export로 자식에게 물려주므로 로그인할 때 한 번이면 충분하다.
  • 별칭은 자식에게 전달되지 않으므로 셸을 띄울 때마다 설정해야 한다.

실제 파일 열어 보기

# ~/.bash_profile  (레드햇 계열 기본 내용)
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
# ~/.bashrc  (레드햇 계열 기본 내용에 별칭 한 줄을 더한 예)
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
alias ll='ls -l'
  • [ -f 파일 ]은 "그 파일이 있으면", .은 source 다. 즉 ".bashrc가 있으면 지금 셸에서 읽어라"는 뜻이다.
  • .bash_profile이 .bashrc를, .bashrc가 /etc/bashrc를 부르는 구조다. bash가 알아서 다 읽는 것이 아니라 파일 안에 적힌 한 줄이 다음 파일을 불러 준다.
  • 데비안·우분투는 ~/.bash_profile 대신 ~/.profile 을 기본으로 주고 그 안에서 ~/.bashrc를 부른다. 전역 /etc/bash.bashrc는 bash가 직접 읽는다. 배포판마다 연결 방식이 다르지만 "로그인용 파일이 bashrc를 불러 준다"는 뼈대는 같다.

/etc/profile.d/ — 전역 설정을 나눠 담는 곳

ls /etc/profile.d/
# colorls.sh  lang.sh  less.sh  vim.sh  which2.sh
  • /etc/profile은 끝부분에서 이 디렉터리의 *.sh 파일을 전부 읽는다.
  • 패키지가 /etc/profile을 직접 고치지 않고 자기 파일 하나를 여기에 넣는 방식이다. 지울 때도 그 파일만 지우면 된다.
  • 관리자가 전역 설정을 더할 때도 /etc/profile을 고치기보다 여기에 .sh 파일을 새로 만드는 쪽이 안전하다.

/etc/skel — 새 계정의 설정 파일이 오는 곳

ls -a /etc/skel
# .  ..  .bash_logout  .bash_profile  .bashrc
  • useradd로 계정을 만들 때 이 디렉터리의 파일들이 새 홈 디렉터리로 복사된다. skel은 skeleton(뼈대)의 줄임말이다.
  • 여기를 고치면 앞으로 만들 계정에만 적용된다. 이미 있는 사용자의 홈은 바뀌지 않는다.

읽는 순서

로그인 셸

콘솔 로그인, SSH 접속, su - 일 때다.

   1. /etc/profile            전역
        │
        └─► /etc/profile.d/*.sh   (여기서 나눠 담기도 한다)
   2. ~/.bash_profile         개인
        │
        └─► ~/.bashrc         (대개 여기서 불러 준다)
             │
             └─► /etc/bashrc
  • 2번에서 ~/.bash_profile이 없으면 ~/.bash_login을, 그것도 없으면 ~/.profile을 읽는다. 셋 중 먼저 찾은 하나만 읽는다.
  • 대부분의 배포판은 .bash_profile 안에 .bashrc를 불러오는 줄을 넣어 둔다. 그래야 로그인 셸에서도 별칭이 적용된다.

비로그인 셸

이미 로그인한 상태에서 터미널 창을 새로 열거나 bash를 실행할 때다.

   ~/.bashrc
      │
      └─► /etc/bashrc
  • /etc/profile과 ~/.bash_profile은 읽지 않는다.
  • 그래서 .bash_profile에만 적어 둔 환경 변수는 부모 셸에서 물려받아 쓰게 된다.
상황로그인 셸인가
SSH 접속로그인 셸
콘솔 로그인로그인 셸
su -로그인 셸
su (하이픈 없이)비로그인
터미널 창 새로 열기비로그인
bash 실행비로그인

su와 su -의 차이가 여기서 갈린다. 하이픈을 붙이면 로그인 셸로 시작해 /etc/profile부터 다시 읽으므로 환경이 완전히 전환된다.

지금 셸이 로그인 셸인지 확인하기

echo $0
# -bash                 ← 앞에 하이픈이 있으면 로그인 셸
shopt login_shell
# login_shell     on
bash                    # 셸을 하나 더 띄운다
echo $0
# bash
shopt login_shell
# login_shell     off

순서를 눈으로 확인하는 실험

~/.bash_profile 의 첫 줄에 echo ">> .bash_profile", ~/.bashrc 의 첫 줄에 echo ">> .bashrc" 를 넣고 다음을 해 본다.

해 본 일화면에 찍히는 것읽은 파일
SSH로 새로 접속>> .bash_profile 다음에 >> .bashrc둘 다 (profile이 bashrc를 불렀다)
그 안에서 bash 실행>> .bashrc 만bashrc만
bash script.sh 로 스크립트 실행아무것도 없음둘 다 읽지 않는다
  • 세 번째 줄이 함정이다. 스크립트를 실행하는 셸은 .bashrc도 읽지 않는다. 그래서 .bashrc에 만든 별칭이 스크립트 안에서는 통하지 않는다.
  • 실험이 끝나면 넣은 줄을 반드시 지운다. 설정 파일이 화면에 글자를 찍으면 scp 같은 파일 전송이 실패할 수 있다.

su와 su -를 나란히 놓고 보기

[user@server1 work]$ su
Password:
[root@server1 work]# pwd
/home/user/work              ← 있던 자리 그대로다
[root@server1 work]# exit
 
[user@server1 work]$ su -
Password:
[root@server1 ~]# pwd
/root                        ← root 의 홈으로 옮겨졌고 환경도 root 것이다
  • su는 사용자만 바꾸고 작업 디렉터리와 기존 환경 변수 대부분을 그대로 둔다.
  • su -는 root로 새로 로그인한 것과 같은 상태를 만든다. /etc/profile과 root의 ~/.bash_profile을 처음부터 읽는다.
  • su - alice 처럼 하이픈 뒤에 사용자 이름을 쓰면 그 사용자의 로그인 셸로 들어간다.

고친 설정을 바로 적용하기

source ~/.bashrc     # 현재 셸에서 다시 읽기
. ~/.bashrc          # 점 하나도 같은 뜻
  • source와 .(점)은 같은 명령이다.
  • 설정 파일은 로그인할 때 한 번만 읽히므로, 고쳐도 그 셸에는 반영되지 않는다. source로 다시 읽어야 한다.
  • bash ~/.bashrc 처럼 실행하면 안 된다. 새 셸에서 읽고 끝나 버려 현재 셸에는 남지 않는다. source는 현재 셸 안에서 실행한다는 점이 핵심이다.

source를 쓸 때 헷갈리는 점

표기뜻
. ~/.bashrc점 다음에 공백이 있다 — source와 같다. 현재 셸에서 읽는다
./script.sh점과 슬래시가 붙어 있다 — "현재 디렉터리의 그 파일"을 실행한다
  • 점 하나가 명령으로 쓰일 때와 경로로 쓰일 때를 구분한다. 공백이 있느냐가 기준이다.
  • source는 파일을 읽기만 하므로 실행 권한이 없어도 된다. ./script.sh 로 실행하려면 실행 권한이 필요하다.
  • 고친 파일을 읽어야 한다. .bash_profile을 고쳤으면 source ~/.bash_profile 이다.
# ~/.bashrc 에  export PATH=$PATH:/opt/bin  이 적혀 있을 때
source ~/.bashrc
source ~/.bashrc
echo $PATH
# /usr/local/bin:/usr/bin:/opt/bin:/opt/bin:/opt/bin

⚠️ source를 할 때마다 그 줄이 다시 실행된다. $PATH 뒤에 덧붙이는 줄은 읽을 때마다 같은 경로가 한 번씩 더 붙는다. 동작에는 문제가 없지만, 값을 지우고 싶어 줄을 삭제한 뒤 source 해도 이미 붙은 값은 사라지지 않는다. 그때는 다시 로그인한다.

로그아웃할 때

# ~/.bash_logout 예
clear                  # 화면 지우기
rm -f ~/tmp/*          # 임시 파일 정리
  • 로그인 셸을 빠져나올 때만 실행된다. 비로그인 셸을 닫을 때는 실행되지 않는다.

상황별로 파일 고르기

하고 싶은 일고칠 곳
모든 사용자의 PATH에 경로 추가/etc/profile (또는 /etc/profile.d/ 에 .sh 파일 추가)
모든 사용자에게 같은 별칭/etc/bashrc
나만 쓰는 환경 변수~/.bash_profile
나만 쓰는 별칭·프롬프트~/.bashrc
앞으로 만들 계정의 기본 설정/etc/skel/ 아래 파일
로그아웃할 때 자동 정리~/.bash_logout
고친 내용을 지금 바로 적용source 파일
  • 문제를 읽을 때 "누구에게"(전역/개인) 와 "언제"(로그인/셸을 띄울 때/로그아웃) 두 가지만 찾으면 파일이 정해진다.
함께 보기에 나오지만 설정 파일이 아닌 것실제 역할
~/.bash_history실행한 명령의 이력이 쌓이는 파일
/etc/shells사용할 수 있는 셸 목록
/etc/passwd계정 정보. 7번째 필드가 로그인 셸

내일은 명령의 입력과 출력을 다른 곳으로 돌리는 리다이렉션, 그리고 별칭과 히스토리를 다룬다.

📖 용어

  • 로그인 셸 : 로그인 과정을 거쳐 시작된 셸. /etc/profile과 ~/.bash_profile을 읽는다.
  • 비로그인 셸 : 이미 로그인한 상태에서 새로 띄운 셸. ~/.bashrc만 읽는다.
  • /etc/profile : 모든 사용자에게 적용되는 전역 로그인 설정 파일.
  • ~/.bash_profile : 개인의 로그인 설정 파일. 주로 환경 변수를 둔다.
  • ~/.bashrc : 셸을 띄울 때마다 읽는 개인 설정 파일. 주로 별칭과 프롬프트를 둔다.
  • ~/.bash_logout : 로그인 셸에서 로그아웃할 때 실행되는 파일.
  • source : 설정 파일을 현재 셸에서 다시 읽어 즉시 반영하는 명령. .과 같다.
  • /etc/profile.d/ : 전역 로그인 설정을 파일별로 나눠 담는 디렉터리. /etc/profile이 여기의 *.sh를 읽는다.
  • /etc/skel : 새 계정을 만들 때 홈 디렉터리로 복사되는 기본 설정 파일들이 있는 곳.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 터미널 창을 새로 열 때처럼 비로그인 셸이 시작될 때 읽히는 개인 설정 파일로 알맞은 것은?

문제 2

다음 중 모든 사용자에게 공통으로 적용되는 전역 로그인 설정 파일로 알맞은 것은?

문제 3

다음 중 수정한 설정 파일을 다시 로그인하지 않고 현재 셸에 즉시 반영하는 명령으로 알맞은 것은?

문제 4

다음 중 로그아웃할 때 실행되는 설정 파일로 알맞은 것은?

문제 5

다음 중 로그인 셸에서 ~/.bash_profile 파일이 존재하지 않을 때 대신 읽히는 파일로 알맞은 것은?

이전셸 변수와 환경 변수Week 5 · Day 2다음 리다이렉션 · 별칭 · 히스토리Week 5 · Day 4

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 두 층, 두 갈래
  • 각 파일이 하는 일
  • 무엇을 어디에 적나
  • 실제 파일 열어 보기
  • etc/profile.d/` — 전역 설정을 나눠 담는 곳
  • etc/skel` — 새 계정의 설정 파일이 오는 곳
  • 읽는 순서
  • 로그인 셸
  • 비로그인 셸
  • 지금 셸이 로그인 셸인지 확인하기
  • 순서를 눈으로 확인하는 실험
  • su`와 `su -`를 나란히 놓고 보기
  • 고친 설정을 바로 적용하기
  • source를 쓸 때 헷갈리는 점
  • 로그아웃할 때
  • 상황별로 파일 고르기
  • 용어
  • 연습 문제