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 5

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

리눅스마스터 2급· AssociateWeek 5 · Day 5읽기 약 3분
핵심 정리
  • 셸은 Bourne 계열(sh·ksh·bash·zsh·dash) 과 C 계열(csh·tcsh) 둘뿐이다. c가 들어간 둘만 C 계열이다.
  • 셸 변수는 현재 셸까지, 환경 변수는 자식까지. 승격 명령이 export 다.
  • 로그인 셸은 .bash_profile, 비로그인 셸은 .bashrc 를 읽는다.
  • >는 덮어쓰기 >>는 이어쓰기, 에러는 2번 통로다.
  • 설정 즉시 반영은 source, 별칭 해제는 unalias.

Day 5 - Week 5 종합 복습: 셸 한 장 정리

셸 한 장

   셸의 갈래
     Bourne 계열   sh(Bourne) · ksh(Korn) · bash(Fox) · zsh · dash
     C 계열        csh(Joy) · tcsh                    ← 이 둘만!
 
   변수
     NAME=값          셸 변수    → set   으로 확인   (현재 셸까지)
     export NAME=값   환경 변수  → env   으로 확인   (자식까지)
 
   설정 파일
     로그인    /etc/profile  →  ~/.bash_profile  →  (~/.bashrc 호출)
     비로그인                    ~/.bashrc
     로그아웃                    ~/.bash_logout
     즉시적용  source 파일   또는   . 파일
 
   입출력
     0 stdin      <
     1 stdout     >   >>          &>  둘 다
     2 stderr     2>  2>>         2> /dev/null  버리기
     파이프       명령 | 명령
 
   편의
     alias / unalias      별칭
     history · !! · !번호  이력

접속부터 로그아웃까지 — 한 주를 한 흐름으로

나흘 동안 따로 배운 것들은 사실 셸이 하루 동안 하는 일의 순서다.

   ① 접속         /etc/passwd 의 7번째 필드를 보고 /bin/bash 를 로그인 셸로 띄운다
   ② 설정 읽기    /etc/profile → ~/.bash_profile → ~/.bashrc → /etc/bashrc
   ③ 변수 준비    PATH · HOME · PS1 같은 변수가 채워진다
   ④ 프롬프트     PS1 모양대로 [user@server1 ~]$ 를 띄우고 입력을 기다린다
   ⑤ 명령 입력    ll *.log > out.txt 2> err.txt
   ⑥ 해석         ll → ls -l (별칭) · *.log → 파일 이름들 (와일드카드) · > 와 2> 연결
   ⑦ 실행         PATH 에서 ls 를 찾아 자식 프로세스로 실행하고 끝나기를 기다린다
   ⑧ 결과         종료 상태를 $? 에 담고 다시 프롬프트를 띄운다
   ⑨ 로그아웃     ~/.bash_logout 을 실행하고 이력을 ~/.bash_history 에 남긴다
단계배운 날그 단계에서 나오는 문제
①Day 1로그인 셸은 어디에 적혀 있나, 어떻게 바꾸나
②·⑨Day 3어떤 파일을 어떤 순서로 읽나
③·④·⑧Day 2셸 변수와 환경 변수, PATH, PS1, $?
⑤·⑥Day 4리다이렉션, 파이프, 와일드카드, 별칭
⑦Day 1·2내부 명령과 외부 명령, PATH 검색 순서
  • ⑥에서 별칭·와일드카드·변수를 푸는 주체는 셸이다. ls는 이미 다 풀린 결과만 받는다.
  • ②에서 .bashrc와 /etc/bashrc는 bash가 저절로 읽는 것이 아니라 앞 파일 안의 한 줄이 불러 준다(레드햇 계열 기준).

증상으로 원인 찾기

증상원인해결
/etc/profile에 변수를 추가했는데 접속해 있던 사용자에게 안 보인다설정 파일은 로그인할 때 읽힌다다시 로그인하거나 source /etc/profile
MYDIR=/data 를 만들었는데 bash backup.sh 안에서 비어 있다셸 변수라 자식에게 가지 않았다export MYDIR
ls > list.txt 를 했더니 어제 내용이 사라졌다>는 먼저 비우고 쓴다>> 를 쓴다
find / -name core > r.txt 인데 화면에 Permission denied가 쏟아진다에러는 2번 통로라 >에 안 잡힌다2> /dev/null 을 붙인다
chsh -s /bin/zsh 를 했는데 echo $SHELL 이 그대로다다음 로그인부터 적용된다다시 로그인
su 로 root가 됐는데 자리와 환경이 그대로다하이픈이 없어 비로그인 셸이다su -
~/.bashrc에 별칭을 적었는데 command not found 다지금 셸은 고치기 전 파일을 읽은 상태다source ~/.bashrc
눈앞에 있는 run.sh 를 이름만 쳤더니 command not found 다현재 디렉터리는 PATH에 없다./run.sh
PATH를 고친 뒤 ls도 안 된다$PATH를 빼고 덮어썼다export PATH=/usr/bin:/bin 으로 되살린다
echo '$HOME' 이 $HOME 그대로 나온다작은따옴표는 변수를 풀지 않는다큰따옴표로 바꾼다

리다이렉션 읽기 연습

ls /etc /nodir 은 결과와 에러를 둘 다 내는 명령이다. 표기마다 무엇이 어디로 가는지 따라가 본다.

명령화면에 보이는 것파일에 담기는 것
ls /etc /nodir > a에러결과
ls /etc /nodir 2> a결과에러
ls /etc /nodir > a 2> b없음a에 결과, b에 에러
ls /etc /nodir &> a없음결과와 에러
ls /etc /nodir > a 2>&1없음결과와 에러
ls /etc /nodir 2>&1 > a에러결과
ls /etc /nodir 2> /dev/null결과없음 (에러는 버려진다)
ls /etc /nodir | wc -l에러와 줄 수— (파이프는 1번만 넘긴다)

기호 한눈에

기호뜻기호뜻
" "변수를 푼다' '변수를 안 푼다
` ` · $( )명령 실행 결과\뒤 한 글자의 특수한 뜻 제거
;무조건 이어서&&앞이 성공하면
||앞이 실패하면&백그라운드로
*글자 몇 개든?한 글자
[abc]그중 한 글자[!abc]그것이 아닌 한 글자
!!직전 명령 전체!$직전 명령의 마지막 인자
$?직전 명령의 종료 상태$$현재 셸의 PID

헷갈리는 짝 대조

구분AB가르는 기준
Bourne vs C 계열sh·ksh·bash·zsh·dashcsh·tcsh이름에 c가 있나
셸 변수 vs 환경 변수현재 셸까지자식까지export 했나
set vs env전부환경 변수만범위
.bash_profile vs .bashrc로그인 셸비로그인 셸로그인 과정 여부
.bash_profile vs .profilebash 전용없을 때 대신우선순위
su vs su -비로그인로그인 셸하이픈 유무
> vs >>덮어씀이어 붙임기존 내용 보존
> vs 2>표준 출력표준 에러통로 번호
> vs |파일로다음 명령으로넘기는 대상
* vs ?글자 수 제한 없음한 글자개수
source vs bash현재 셸에 반영새 셸에서 끝남어디서 실행되나
alias vs unalias만들기지우기—
$SHELL vs $0로그인 셸지금 실행 중인 셸시점

자주 틀리는 지점

  1. zsh는 C 계열 → 아니다. Bourne 계열이다. C 계열은 csh와 tcsh 둘뿐이다.
  2. NAME = linux → 등호 양옆에 공백을 넣으면 안 된다. NAME=linux.
  3. 변수 만들 때도 $를 붙인다 → 아니다. 꺼낼 때만 붙인다.
  4. env가 전부 보여 준다 → 아니다. set이 전부, env는 환경 변수만이다.
  5. PATH 구분자가 세미콜론 → 콜론(:) 이다. 세미콜론은 윈도다.
  6. export PATH=/opt/bin → 기존 경로가 날아간다. $PATH: 를 반드시 포함한다.
  7. $?가 1이면 성공 → 0이 성공이다.
  8. 터미널 새 창이 /etc/profile을 읽는다 → 읽지 않는다. 비로그인 셸은 .bashrc만 읽는다.
  9. 설정을 고치면 바로 적용된다 → 아니다. source 로 다시 읽거나 재로그인해야 한다.
  10. >로 에러도 저장된다 → 아니다. 에러는 2> 로 따로 돌린다.
  11. 별칭을 unset으로 지운다 → unalias 다. unset은 변수용이다.
  12. $SHELL이 지금 실행 중인 셸이다 → 로그인 셸이다. 지금 것은 echo $0 이나 ps -p $$ 로 본다.
  13. 히스토리와 별칭을 처음 넣은 셸은 bash다 → csh다. bash는 그것을 물려받았다.
  14. > a 2>&1 과 2>&1 > a 는 같다 → 다르다. 뒤의 것은 에러가 화면에 남는다.
  15. .bash_logout은 터미널 창을 닫을 때마다 실행된다 → 로그인 셸을 나올 때만이다.
  16. . file 과 ./file 은 같다 → 앞은 현재 셸에서 읽기(source), 뒤는 실행이다.
  17. /sbin/nologin은 계정을 지운 것이다 → 계정은 그대로이고 로그인만 막는다.

시험에 그대로 나오는 값

값무엇
0 / 1 / 2표준 입력 / 표준 출력 / 표준 에러
:PATH의 구분자
7번째/etc/passwd에서 로그인 셸이 있는 필드
/etc/shells사용 가능한 셸 목록 파일
/dev/null버리는 곳
0$?에서 성공을 뜻하는 값
셸만든 사람
shStephen Bourne
cshBill Joy
kshDavid Korn
bashBrian Fox

파일 한눈에

파일한 줄 역할
/etc/passwd계정 정보. 7번째 필드가 로그인 셸
/etc/shells로그인 셸로 쓸 수 있는 셸의 목록
/etc/profile전역 · 로그인 설정
/etc/profile.d/전역 로그인 설정을 나눠 담는 디렉터리
/etc/bashrc전역 · 셸을 띄울 때 설정 (데비안 계열은 /etc/bash.bashrc)
~/.bash_profile개인 · 로그인 설정. 환경 변수를 둔다
~/.bashrc개인 · 셸을 띄울 때 설정. 별칭을 둔다
~/.bash_logout로그아웃할 때 실행
~/.bash_history명령 이력 저장
/etc/skel/새 계정의 홈으로 복사되는 기본 설정 파일
/dev/null버리는 곳

명령 한눈에

명령한 줄 역할
chsh -s로그인 셸 변경
export셸 변수 → 환경 변수
set / env변수 전부 / 환경 변수만 보기
unset변수 삭제
source (.)파일을 현재 셸에서 읽기
alias / unalias별칭 만들기 / 지우기
history명령 이력 보기
type / which명령의 정체 / PATH에서 찾은 위치

다음 주는 에디터와 프로세스다. vi 의 세 가지 모드와 ps·kill 같은 프로세스 명령을 다룬다.

📖 용어

  • Bourne 계열 / C 계열 : 셸을 나누는 두 갈래. C 계열은 csh와 tcsh 둘뿐이다.
  • export : 셸 변수를 환경 변수로 승격시키는 명령.
  • 로그인 셸 / 비로그인 셸 : 로그인 과정을 거쳤는지에 따라 읽는 설정 파일이 달라진다.
  • source : 설정 파일을 현재 셸에서 다시 읽는 명령. 점(.)과 같다.
  • 파일 디스크립터 : 입출력 통로에 붙은 번호. 0·1·2가 표준 입력·출력·에러다.
  • /dev/null : 보낸 데이터를 버리는 특수 파일.

📝 연습 문제

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

문제 1

다음 중 Bourne 셸 계열에 속하지 않는 셸로 알맞은 것은?

문제 2

다음 중 셸 변수와 환경 변수를 모두 출력하는 명령으로 알맞은 것은?

문제 3

다음 중 명령의 표준 출력과 표준 에러를 모두 하나의 파일로 저장하는 표기로 알맞은 것은?

문제 4

다음 중 SSH로 원격 접속했을 때 읽히는 개인 설정 파일로 알맞은 것은?

문제 5

다음 중 PATH 환경 변수에 기존 값을 유지하면서 /opt/bin을 추가하는 명령으로 알맞은 것은?

문제 6

다음 중 직전에 실행한 명령의 성공 여부를 확인할 수 있는 특수 변수와 성공을 뜻하는 값으로 알맞은 것은?

이전리다이렉션 · 별칭 · 히스토리Week 5 · Day 4다음 vi 편집기의 세 가지 모드Week 6 · Day 1

참고 공식 자료

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

이 페이지

  • 셸 한 장
  • 접속부터 로그아웃까지 — 한 주를 한 흐름으로
  • 증상으로 원인 찾기
  • 리다이렉션 읽기 연습
  • 기호 한눈에
  • 헷갈리는 짝 대조
  • 자주 틀리는 지점
  • 시험에 그대로 나오는 값
  • 파일 한눈에
  • 명령 한눈에
  • 용어
  • 연습 문제