공공부하자개발 · 영어 학습 노트
리눅스
리눅스 명령어리눅스 자체를 익히는 명령 중심 학습0/10 완료
  • 01파일·디렉터리 명령
  • 02텍스트 보기·편집 (less·vi)
  • 03사용자·그룹·권한·sudo
  • 04패키지·시스템 정보 (dnf·rpm)
  • 05프로세스·자원 (ps·top·free·df)
  • 06네트워크 명령 (ip·ss·ping·scp)
  • 07압축·아카이브·검색 (tar·gzip·find)
  • 08셸 활용 (히스토리·별칭·단축키)
  • 09sed · awk 한 줄 처리 (치환·필드·집계)
  • 10링크 · 디스크 · 예약 작업 (ln·mount·crontab)
사이트 소개개인정보처리방침연락처
© 2026 공부하자
홈 › 리눅스 명령어 › 08 / 10

셸 활용 (히스토리·별칭·단축키)

섹션 7진행 0 / 10
1왜 배우는가2핵심 원리3코드 예제4응용 변형 예제5자주 하는 실수 (Tip)6연습 문제7정리‹ 이전다음 ›

2. 핵심 원리

2.1 히스토리

표기 뜻
history 번호 붙은 전체 목록
!! 직전 명령
sudo !! 직전 명령을 sudo 로
!$ 직전 명령의 마지막 인자
!123 123번 명령
!ssh ssh 로 시작한 최근 명령
Ctrl+R 거꾸로 검색

Ctrl+R 을 누르고 글자를 치면 일치하는 최근 명령이 나오고, 다시 Ctrl+R 로 더 이전 것, Enter 로 실행, Esc 로 편집합니다. mkdir /opt/myapp/logs 뒤 cd !$ 처럼 !$ 를 쓰면 경로를 다시 치지 않습니다.

2.2 히스토리 설정

bash
# ~/.bashrc
export HISTSIZE=5000
export HISTFILESIZE=10000
export HISTTIMEFORMAT='%F %T '

HISTTIMEFORMAT 을 켜면 history 에 시각이 붙어 "그날 누가 무엇을 쳤나" 가 남습니다. 장애 후 추적에 유용합니다. 히스토리는 셸을 닫을 때 ~/.bash_history 에 저장됩니다.

2.3 줄 편집 단축키

키 동작
Ctrl+A / Ctrl+E 줄 처음 / 끝
Ctrl+U / Ctrl+K 커서 앞 / 뒤 지우기
Ctrl+W 앞 단어 지우기
Ctrl+Y 지운 것 붙여넣기
Ctrl+L 화면 지우기
Alt+. 직전 마지막 인자 붙여넣기
Tab 자동 완성

Tab 을 두 번 누르면 후보 목록이 나옵니다. 긴 경로는 앞 몇 글자만 치고 Tab 으로 완성하는 것이 오타를 막는 가장 좋은 방법입니다.

2.4 제어 단축키

키 동작
Ctrl+C 실행 중단
Ctrl+Z 멈춤, bg·fg 로 이어감
Ctrl+D 입력 끝, 빈 줄에서는 셸 나가기
Ctrl+S / Ctrl+Q 화면 멈춤 / 재개

Ctrl+S 를 실수로 누르면 화면이 멈춘 것처럼 보입니다. Ctrl+Q 로 풉니다. "터미널이 멈췄다" 의 흔한 원인입니다.

2.5 별칭

bash
alias ll='ls -la'
alias ..='cd ..'
alias grep='grep --color=auto'
alias                       # 목록
unalias ll                  # 해제
\ls                         # 별칭 무시하고 원래 명령

~/.bashrc 에 적고 source ~/.bashrc 로 반영합니다. alias rm='rm -i' 처럼 위험한 명령에 확인을 붙이는 용도로도 씁니다. 스크립트 안에서는 별칭이 기본으로 꺼져 있어 함수를 씁니다.

2.6 중괄호 확장

bash
echo file{1..3}.txt         # file1.txt file2.txt file3.txt
echo {a,b}{1,2}             # a1 a2 b1 b2
mkdir -p app/{conf,logs,bin}
cp app.yml{,.bak}           # cp app.yml app.yml.bak
mv app.yml{.bak,}           # 되돌리기

{,.bak} 은 빈 것과 .bak 두 개로 펼쳐져 백업 한 줄이 됩니다. 이 확장은 파일이 있든 없든 문자열만 만듭니다.

2.7 글로브

패턴 뜻
* 아무 글자 0개 이상
? 아무 글자 1개
[1-3] 범위 중 하나
[!a] a 가 아닌 하나
** 하위 폴더까지 (shopt -s globstar)

글로브는 실제 존재하는 파일 이름으로 펼쳐집니다. ls *.log 는 셸이 먼저 목록을 만들어 ls 에 넘기고, find -name '*.log' 는 따옴표로 막아 find 가 직접 처리합니다. 일치하는 파일이 없으면 패턴 문자열이 그대로 남습니다.

2.8 변수·치환·산술

bash
NAME=world; echo "hello $NAME"; echo 'hello $NAME'   # 큰따옴표만 확장
TODAY=$(date +%F)
COUNT=$(ls logs | wc -l); echo $((COUNT * 2))
echo "${NAME^^} ${NAME:0:3} ${#NAME}"               # 대문자, 부분, 길이
echo "${UNSET:-기본값}"

작은따옴표는 아무것도 펼치지 않고 큰따옴표는 $ 만 펼칩니다. 운영 묶음 08 의 확장 문법 위에 ^^ 대문자, :0:3 부분 문자열이 추가됐습니다.

2.9 리다이렉션·tee·xargs

bash
ls app > list.txt 2>&1          # 출력과 에러 모두 파일로
ls 없음 2>/dev/null || echo "에러 숨김"
ls app | tee copy.txt | wc -l   # 화면으로 넘기면서 파일에도
ls logs | xargs -n 2 echo       # 2개씩 인자로
find . -name '*.log' -print0 | xargs -0 wc -l
grep -c log <<< "app.log"       # here-string

tee 는 파이프 중간 결과를 저장하면서 계속 넘깁니다. xargs -n 은 인자 개수를 제한하고 -I{} 는 자리를 지정합니다.

2.10 종료 코드와 연결

bash
true; echo $?                   # 0
mkdir -p x && echo "성공 시"
ls 없음 || echo "실패 시"
echo a; echo b                  # 무조건 둘 다
(cd app && pwd); pwd            # ( ) 서브셸은 밖에 영향 없음

&& 와 || 로 이으면 if 없이 조건 실행이 됩니다. 괄호 서브셸은 cd 나 변수 변경을 밖으로 새지 않게 합니다.

2.11 한 줄 반복과 watch

bash
for f in *.log; do gzip "$f"; done
for i in $(seq 1 3); do curl -s localhost:8080/health; sleep 1; done
for h in app1 app2; do ssh "$h" uptime; done
watch -n 2 'ss -s'              # 2초마다 갱신, Ctrl+C 로 나감
seq -w 1 10                     # 01 02 ... 10

한 줄 for 는 do·done 사이에 명령을 넣고 ; 로 구분합니다. watch 는 같은 명령을 반복해 화면을 갱신하므로 배포 중 연결 수나 로그 크기를 지켜볼 때 씁니다.

2.12 tmux

명령·키 동작
tmux new -s deploy 이름 붙여 새 세션
Ctrl+B d 떼어 두기
tmux ls 세션 목록
tmux attach -t deploy 다시 붙기
Ctrl+B c / n / p 창 새로 / 다음 / 이전

접속이 끊겨도 세션 안 작업은 계속 돕니다. 마이그레이션, 대용량 복사, 긴 배포는 반드시 tmux 안에서 시작합니다. 없으면 screen -S, Ctrl+A d, screen -r 이 같은 역할입니다.

핵심 원리
  • 2.1 히스토리
  • 2.2 히스토리 설정
  • 2.3 줄 편집 단축키
  • 2.4 제어 단축키
  • 2.5 별칭
  • 2.6 중괄호 확장
  • 2.7 글로브
  • 2.8 변수·치환·산술
  • 2.9 리다이렉션·tee·xargs
  • 2.10 종료 코드와 연결
  • 2.11 한 줄 반복과 watch
  • 2.12 tmux
이전 섹션1 왜 배우는가2 / 7다음 섹션3 코드 예제