CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
리눅스마스터 1급 · 1급리눅스마스터 1급
  • Week 1
    • 1.운영체제와 리눅스: 커널이 하는 일
    • 2.자유 소프트웨어와 배포판: 라이선스가 만든 생태계
    • 3.설치와 부팅: 전원을 켜는 순간부터
    • 4.파일시스템 구조와 파일의 종류: 모든 것은 파일이다
    • 5.Week 1 종합 복습: 개념을 꿰뚫는 시간
  • Week 2
  • Week 3
    • 1.셸의 정체: 명령을 해석하는 프로그램과 변수의 세계
    • 2.흐름을 잇고 비트는 기술: 리다이렉션, 파이프, 메타문자
    • 3.셸을 길들이다: 별칭, 히스토리, 그리고 작업 제어
    • 4.셸 스크립트: 명령을 코드로 엮는 첫걸음
    • 5.Week 3 종합 복습: 셸과 스크립트의 큰 그림
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
  • Week 11
  • Week 12
  • Week 13
  • Week 14
합격 후기

© CertNote · 주간랩스

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

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

리눅스마스터 1급· AssociateWeek 3 · Day 3읽기 약 9분
핵심 정리
  • alias는 명령의 첫 단어에만 적용된다. 영구 적용은 ~/.bashrc, 임시 우회는 \명령.
  • history 재활용 3종: !!(직전) · !100(번호) · !$(직전 명령의 마지막 인자). 동작은 HISTSIZE·HISTCONTROL로 조절.
  • Ctrl-Z는 일시 중지(SIGSTOP), Ctrl-C는 종료(SIGINT). 멈춘 작업은 bg/fg로 되살린다.
  • 터미널을 닫으면 SIGHUP이 날아가 작업이 죽는다. nohup ... &(시작 시) 또는 disown(도중)으로 면역시킨다.
  • $( )는 명령 치환(출력을 값으로), $(( ))는 산술 확장(계산 결과). 괄호 하나 차이로 의미가 전혀 다르다.

Day 3 - 셸을 길들이다: 별칭, 히스토리, 그리고 작업 제어

alias: 긴 명령을 짧은 단어로

하루에 같은 명령을 수십 번 치는 관리자에게 셸은 단순한 입력기 이상이어야 한다. 그 첫 도구가 별칭이다.

  • alias는 명령이나 명령 묶음에 별명을 붙여, 자주 쓰는 옵션 조합을 외우지 않아도 되게 해준다.
alias                    # 등록된 모든 별칭 보기
alias ll='ls -alF'       # ll 입력 시 ls -alF 실행
alias rm='rm -i'         # rm을 항상 확인 모드로 (안전장치)
alias ..='cd ..'         # .. 입력으로 상위 디렉터리 이동
alias grep='grep --color=auto'   # grep 결과에 색상
 
unalias ll               # ll 별칭 제거
unalias -a               # 모든 별칭 제거
  • 등록 위치가 중요하다. 명령행에서 직접 등록하면 현재 셸에서만, 로그아웃하면 사라진다.
  • 영구적으로 쓰려면 ~/.bashrc에 적어 둬야 한다(.bashrc는 셸을 띄울 때마다 읽히므로).
# ~/.bashrc 에 추가하면 영구 적용
echo "alias ll='ls -alF'" >> ~/.bashrc
source ~/.bashrc         # 즉시 반영

별칭은 명령의 맨 앞 단어(명령 이름)에만 적용된다. alias ll='ls -l'을 등록해도 xll이나 echo ll에서는 확장되지 않는다. 셸은 명령 줄의 첫 단어가 별칭 목록에 있을 때만 치환한다.

⚠️ 함정: 별칭이 원래 명령을 가린 상황에서 원본 명령을 그대로 실행하려면 명령 앞에 백슬래시(\)를 붙인다. 예를 들어 alias rm='rm -i'가 걸려 있을 때 \rm file이라고 하면 확인 없이 원래 rm이 실행된다. command rm file이나 절대 경로 /bin/rm file도 같은 효과다. 별칭을 임시로 우회하는 표준 방법이다.

alias 기능은 1978년 빌 조이(Bill Joy)가 만든 C 셸에서 처음 등장했다. 이전의 본 셸에는 별칭이 없었다. 이 편의성이 큰 인기를 끌어 ksh, bash 등 후속 셸이 모두 채택했다. 그래서 "alias를 처음 도입한 셸은?"이라는 문제의 답은 csh다.

history: 명령 이력을 기억하고 재실행하기

  • history는 이전에 입력한 명령들을 번호와 함께 보여준다.
  • 명령 이력은 메모리에 유지되다가 로그아웃 시 ~/.bash_history 파일에 저장된다.
history                  # 전체 명령 이력
history 10               # 최근 10개
history -c               # 메모리의 이력 삭제(clear)
!!                       # 바로 직전 명령 재실행
!100                     # 100번 명령 재실행
!ls                      # 가장 최근의 ls로 시작한 명령 재실행
!$                       # 직전 명령의 마지막 인자
sudo !!                  # 직전 명령을 sudo 붙여 재실행

!$(직전 명령의 마지막 인자)는 특히 자주 쓴다.

mkdir /opt/myapp/config
cd !$              # cd /opt/myapp/config 과 동일

히스토리 동작은 환경 변수로 제어한다.

변수의미
HISTSIZE현재 세션 메모리에 보관할 명령 개수
HISTFILE이력을 저장할 파일 경로 (보통 ~/.bash_history)
HISTFILESIZE이력 파일에 저장할 최대 줄 수
HISTCONTROL중복·공백 시작 명령 저장 제어 (ignoredups, ignorespace)
export HISTSIZE=5000
export HISTCONTROL=ignoredups   # 연속 중복 명령은 한 번만 저장

HISTCONTROL=ignorespace를 설정하면 공백으로 시작하는 명령은 이력에 남지 않는다. 비밀번호가 포함된 명령을 칠 때 줄 맨 앞에 공백 하나를 두면 history 파일에 기록되지 않아 보안에 유리하다. ignoreboth는 ignoredups와 ignorespace를 동시에 적용한다.

⚠️ 함정: history -c는 메모리상의 이력만 지운다. ~/.bash_history 파일은 그대로 남아, 다음 로그인 시 다시 불러와진다. 파일까지 비우려면 history -c && history -w(메모리 비운 뒤 파일에 덮어쓰기)를 하거나 > ~/.bash_history로 파일을 직접 비워야 한다. 또한 여러 터미널을 동시에 쓰면 마지막에 종료된 셸의 이력이 파일을 덮어쓸 수 있다.

작업 제어: 포그라운드, 백그라운드, 그리고 job

  • 명령을 실행하면 기본적으로 포그라운드(foreground)로 동작한다 — 끝날 때까지 셸은 다음 입력을 받지 않는다.
  • 시간이 오래 걸리는 작업은 백그라운드(background)로 보내 셸을 계속 쓸 수 있다.

& : 처음부터 백그라운드로 실행

명령 끝에 &를 붙이면 백그라운드에서 실행되고 셸은 즉시 프롬프트를 돌려준다.

sleep 100 &              # 백그라운드 실행
# [1] 12345  → [작업번호] PID 가 출력됨
 
tar czf backup.tar.gz /data &    # 압축을 백그라운드로
  • 출력의 [1]은 작업 번호(job number), 12345는 프로세스 ID(PID)다.
  • 작업 번호는 현재 셸 안에서만 유효한 번호이고, PID는 시스템 전체에서 유일하다.

Ctrl-Z, jobs, fg, bg

실행 중인 포그라운드 작업을 멈춰 백그라운드로 보내거나, 백그라운드 작업을 관리하는 명령들이다.

조작동작
Ctrl-Z포그라운드 작업을 일시 중지(stopped)시킴
jobs현재 셸의 작업 목록 보기 (-l PID 포함)
bg %11번 작업을 백그라운드에서 재개(running)
fg %11번 작업을 포그라운드로 가져오기
kill %11번 작업 종료
# 직접 쳐보기: 멈췄다가 백그라운드로 돌리기
sleep 300              # 포그라운드 실행 (셸이 묶임)
# Ctrl-Z 누름 → [1]+ Stopped  sleep 300
jobs                   # [1]+ Stopped  sleep 300
bg %1                  # [1]+ sleep 300 &  (백그라운드에서 재개)
jobs                   # [1]+ Running  sleep 300 &
fg %1                  # 다시 포그라운드로 가져옴

Ctrl-Z는 작업을 종료가 아니라 일시 중지(SIGSTOP)한다. 멈춘 작업은 bg로 백그라운드에서 다시 굴리거나 fg로 포그라운드에 복귀시킬 수 있다. 반면 Ctrl-C는 작업에 SIGINT를 보내 종료시킨다. 둘을 혼동하지 말 것 — Z는 멈춤(suspend), C는 끝냄(terminate)이다.

  • %는 작업 번호를 가리키는 기호다. fg %1은 1번 작업을, fg %% 또는 fg는 가장 최근 작업을 뜻한다.

작업 번호 뒤의 +와 - 기호에도 의미가 있다. +는 현재 작업(current job) — fg나 bg를 인자 없이 쓸 때 대상이 되는 작업이고, -는 직전 작업(previous job)이다. jobs 출력에서 [1]+, [2]-처럼 표시된다.

nohup과 disown: 터미널을 닫아도 살아남기

  • 백그라운드로 돌린 작업이라도 터미널(셸)을 닫으면 함께 죽는 경우가 많다.
  • 터미널이 닫힐 때 그 안의 작업들에 SIGHUP(hangup) 신호가 전달되기 때문이다.
  • 장시간 작업을 안전하게 돌리려면 이 신호를 무시하게 해야 한다.

nohup: 처음부터 SIGHUP을 무시하고 실행

nohup ./long_job.sh &
# nohup: ignoring input and appending output to 'nohup.out'
 
nohup ./backup.sh > backup.log 2>&1 &   # 출력을 원하는 파일로
  • nohup(no hangup)은 명령을 SIGHUP에 면역시켜 실행한다.
  • 출력 리다이렉션을 지정하지 않으면 stdout/stderr가 자동으로 nohup.out 파일에 쌓인다.

disown: 이미 실행 중인 작업을 셸에서 떼어내기

이미 &로 돌린 작업을 뒤늦게 셸과 분리하려면 disown을 쓴다.

./long_job.sh &
disown %1                # 1번 작업을 jobs 목록에서 제거, SIGHUP 면역
disown -h %1             # 작업은 유지하되 SIGHUP만 무시
방법시점특징
nohup cmd &실행 시작 시출력을 nohup.out에 기록, SIGHUP 무시
disown %n실행 도중이미 돌아가는 작업을 셸에서 분리
screen / tmux세션 단위터미널 세션 자체를 분리·재접속 (강력)

SIGHUP의 'HUP'은 hang up(전화를 끊다)에서 왔다. 유닉스 초창기에는 실제 전화 모뎀으로 터미널에 접속했는데, 전화를 끊으면(hang up) 연결된 모든 프로세스에 신호를 보내 정리하도록 한 것이 SIGHUP의 기원이다. 오늘날 SSH 세션이 끊길 때도 같은 신호가 전달되어, 돌리던 작업이 죽는 원인이 된다.

nohup cmd &에서 & 를 빼먹으면 명령이 포그라운드로 실행되어 셸이 그대로 묶인다. nohup은 "SIGHUP을 무시하라"는 의미일 뿐 "백그라운드로 보내라"는 뜻이 아니다. 백그라운드 실행은 어디까지나 &가 담당하므로, 둘을 함께 써야 "터미널 닫아도 백그라운드에서 계속" 동작이 완성된다.

명령 치환: 명령의 출력을 값으로 쓰기

명령 치환(command substitution)은 명령의 출력 결과를 다른 명령의 인자나 변수 값으로 쓰는 기능이다.

# $(...) 또는 `...` 두 표기
TODAY=$(date +%Y%m%d)
echo "백업 파일: backup_$TODAY.tar.gz"
# 백업 파일: backup_20260605.tar.gz
 
# 명령 결과를 바로 다른 명령의 인자로
echo "커널 버전: $(uname -r)"
kill $(pgrep -f myapp)           # myapp 프로세스들을 한 번에 종료
files=$(ls *.log)                # 로그 파일 목록을 변수에
cd $(dirname /opt/app/conf/x.ini)  # /opt/app/conf 로 이동

명령 치환은 출력만 값으로 가져온다. 명령의 종료 코드(성공/실패)가 아니라 stdout에 찍힌 텍스트가 치환된다. 끝의 줄바꿈은 자동으로 제거된다. 그래서 count=$(ls | wc -l)처럼 개수를 깔끔한 숫자로 받을 수 있다.

산술 연산에는 비슷하게 생긴 $(( ... ))를 쓴다. 명령 치환 $( )와 구별해야 한다.

echo $((3 + 4))          # 7   (산술 확장)
echo $(expr 3 + 4)       # 7   (외부 expr 명령 치환 — 옛 방식)
n=5; echo $((n * 2))     # 10

$( )(명령 치환)와 $(( ))(산술 확장)는 괄호 개수만 다르고 의미는 전혀 다르다. 하나짜리는 "명령을 실행해 출력으로 치환", 둘짜리는 "산술식을 계산해 결과로 치환"이다. 옛날에는 산술 연산도 expr 명령을 치환해 썼지만($(expr ...)), 외부 프로세스를 띄우므로 느리다. 셸 내장인 $(( ))가 더 빠르고 표준이다.

내일은 이 모든 것을 자동화하는 셸 스크립트 기초로 넘어간다.

📖 용어

  • alias(별칭) : 명령에 붙이는 별명. 명령 줄의 첫 단어일 때만 확장된다.
  • \명령 : 별칭을 무시하고 원본 명령을 실행하는 표기. command 명령, 절대 경로도 같은 효과.
  • ~/.bash_history : 로그아웃할 때 명령 이력이 저장되는 파일.
  • !! / !n / !$ : 직전 명령 / n번 명령 / 직전 명령의 마지막 인자를 불러오는 히스토리 확장.
  • HISTCONTROL : 이력 저장 규칙. ignoredups(중복 제외), ignorespace(공백으로 시작하면 제외).
  • 포그라운드 / 백그라운드 : 셸이 끝날 때까지 기다리는 실행과, 프롬프트를 바로 돌려주는 실행(&).
  • 작업 번호(job number) : [1]처럼 현재 셸 안에서만 통하는 번호. 시스템 전역인 PID와 다르다.
  • Ctrl-Z vs Ctrl-C : 일시 중지(SIGSTOP)와 종료(SIGINT). Z는 멈춤, C는 끝냄.
  • jobs / fg / bg : 작업 목록 보기, 포그라운드로 끌어오기, 백그라운드에서 재개하기.
  • SIGHUP : 터미널이 닫힐 때 그 안의 프로세스에 날아가는 신호. 이름은 "전화를 끊다(hang up)"에서 왔다.
  • nohup : SIGHUP을 무시하고 실행하는 명령. 백그라운드로 보내려면 &를 함께 써야 한다.
  • disown : 이미 실행 중인 작업을 셸의 작업 목록에서 떼어내 SIGHUP에서 보호하는 명령.
  • 명령 치환 $( ) vs 산술 확장 $(( )) : 명령의 출력을 값으로 쓰는 것과, 산술식을 계산해 결과를 쓰는 것.

📝 연습 문제

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

문제 1

포그라운드에서 실행 중인 작업을 일시 중지(suspend)시키는 키 조합은?

문제 2

터미널을 닫아도 백그라운드 작업이 종료되지 않도록 SIGHUP을 무시하고 실행하는 명령은?

문제 3

alias rm='rm -i'가 설정된 상태에서 확인 없이 원래 rm을 실행하는 방법으로 옳지 않은 것은?

문제 4

바로 직전에 실행한 명령의 마지막 인자를 재사용하는 히스토리 표기는?

문제 5

다음 중 명령 치환(command substitution)에 해당하는 것은?

문제 6

jobs 명령 출력에서 작업 번호 뒤의 + 기호가 의미하는 것은?

문제 7

명령행에서 등록한 alias를 로그아웃 후에도 계속 사용하려면 어떻게 해야 하는가?

이전흐름을 잇고 비트는 기술: 리다이렉션, 파이프, 메타문자Week 3 · Day 2다음 셸 스크립트: 명령을 코드로 엮는 첫걸음Week 3 · Day 4

참고 공식 자료

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

이 페이지

  • alias: 긴 명령을 짧은 단어로
  • history: 명령 이력을 기억하고 재실행하기
  • 작업 제어: 포그라운드, 백그라운드, 그리고 job
  • 처음부터 백그라운드로 실행
  • Ctrl-Z, jobs, fg, bg
  • nohup과 disown: 터미널을 닫아도 살아남기
  • nohup: 처음부터 SIGHUP을 무시하고 실행
  • disown: 이미 실행 중인 작업을 셸에서 떼어내기
  • 명령 치환: 명령의 출력을 값으로 쓰기
  • 용어
  • 연습 문제