---
title: "살면서 몰랐던 셸 트릭 모음 — 터미널에서 Backspace 꾹 누르기 이제 그만"
published: 2026-03-25T15:00:00.000Z
canonical: https://jeff.news/article/168
---
# 살면서 몰랐던 셸 트릭 모음 — 터미널에서 Backspace 꾹 누르기 이제 그만

대부분의 개발자가 ls, cd, grep 이후로 터미널 학습을 멈추는데, 셸에는 1989년부터 존재하던 생산성 트릭들이 가득함. POSIX 범용 단축키부터 Bash/Zsh 전용 기능까지, 하루 하나씩 익히면 터미널 생활이 완전히 달라짐.

## 터미널, 살고 있으면서 가구 배치는 안 하고 있었던 거임

- 옆에서 시니어 엔지니어가 줄 맨 앞의 오타 하나 고치겠다고 **Backspace를 6초간 꾹 누르고 있는** 광경… 다들 한 번쯤 봤을 거임. 우리는 `ls`, `cd`, `grep` 배우고 나서 터미널 학습을 멈춰버림. 사실 셸 개발자들이 이미 1989년에 다 해결해놓은 걸 모르고 사는 거임
- 이 글은 "비밀 트릭"이 아니라 **아무도 안 가르쳐줘서 모르고 있던 것들** 모음임. POSIX 어디서든 먹히는 것과 Bash/Zsh 전용으로 나눠서 정리해둠

## 어디서든 먹히는 POSIX 기본기

- **CTRL + W**: `/var/log/nginx/` 치다가 apache2로 바꿔야 할 때, Backspace 꾹 누르는 건 숟가락으로 땅파기임. CTRL + W 한 방이면 커서 앞 단어가 통째로 날아감
- **CTRL + U / CTRL + K**: 80자짜리 rsync 명령어를 다 쳤는데 목적지 디렉토리 존재 여부를 먼저 확인해야 할 때. CTRL + U로 라인 전체를 잘라내고(kill), 확인 끝나면 **CTRL + Y**로 그대로 다시 붙여넣기(yank). 명령어를 머릿속에 기억할 필요 없음
- **CTRL + A / CTRL + E**: 라인 맨 앞(A)과 맨 끝(E)으로 순간이동. Home/End 키는 홈 로우에서 너무 멀리 있음
- **ALT + B / ALT + F**: 단어 단위로 앞뒤 이동. 화살표 키의 쿨한 형 같은 존재 (맥 유저는 터미널에서 Option을 Meta로 설정해야 함)

### 터미널 깨졌을 때

- 바이너리 파일을 실수로 `cat` 해버려서 터미널이 상형문자를 토하기 시작했을 때 — 창 닫지 말고 눈 감고 `reset` 입력 후 Enter. 글자 안 보여도 됨, 터미널이 알아서 자가 치유함
- **CTRL + L**: `clear` 치기 귀찮을 때, 명령어 입력 중에도 화면을 깨끗하게 밀어버림. 치던 명령어는 그대로 맨 위에 살아있음

### 디렉토리 핑퐁

- **`cd -`**: TV 채널 돌리기. `/usr/local/etc/postfix`에서 `/var/log` 갔다가 다시 돌아올 때 긴 경로 재입력 없이 `cd -` 한 방이면 됨
- **`pushd` / `popd`**: `cd -`가 토글 스위치라면 `pushd`는 스택임. 디렉토리 3~4개 왔다갔다 해야 할 때 `pushd`로 쌓아두고 `popd`로 꺼내면 됨

### 소소하지만 강력한 것들

- **`> file.txt`**: 파일 내용만 비우고 싶을 때. `rm` + `touch` 조합과 달리 **파일 퍼미션, 소유자가 그대로 유지**되고, 이미 파일을 열고 있는 프로세스도 안 끊김. `echo "" > file.txt`는 개행문자가 남으니 주의
- **`$_`**: 직전 명령어의 마지막 인자를 가져옴. `mkdir -p /some/long/path` 하고 바로 `cd $_`하면 끝. 임시 변수 선언 필요 없음

> [!WARNING]
> 셸 스크립트 상단에 `set -u`를 안 넣으면 오타 한 방에 `rm -rf /usr/local/${MY_TYPO_VAR}/*`가 `rm -rf /usr/local/*`로 확장되는 참사가 벌어질 수 있음. `set -euo pipefail` 조합을 쓰되, `-e`가 조건문/파이프라인에서 기대와 다르게 동작하는 엣지 케이스가 있으니 맹신은 금물

## Bash & Zsh 전용 편의 기능

- **CTRL + R**: 지난 화요일에 썼던 `awk` 명령어 찾겠다고 위 화살표 40번 누르지 말 것. CTRL + R 누르고 키워드 몇 글자만 치면 히스토리에서 바로 검색됨. 한 번 더 누르면 이전 매칭으로 계속 넘어감
- **`!!`** (뱅뱅): `systemctl restart nginx` 쳤더니 Permission denied 나왔을 때의 그 굴욕감. `sudo !!` 한 줄이면 "아까 그거 다시 하는데 이번엔 권한 있음" 이 됨
- **CTRL + X → CTRL + E**: 원라이너가 점점 괴물이 돼가고 있을 때, 이 콤보를 누르면 현재 입력 중인 명령어가 `$EDITOR`(Vim이든 Nano든)로 열림. 편집하고 저장하면 바로 실행됨. `fc` 명령어는 직전 명령어를 에디터에서 여는 포터블 버전
- **ESC + .** (또는 ALT + .): 직전 명령어의 마지막 인자를 커서 위치에 바로 삽입. 반복 누르면 히스토리를 더 거슬러 올라감. `!$`도 비슷하지만 Enter 칠 때 확장되므로 미리 확인이 안 됨

### 중괄호 확장 마법

- `cp pf.conf{,.bak}` → `cp pf.conf pf.conf.bak`으로 확장됨. 백업 한 줄 완성
- `mv filename.{txt,md}` → 확장자 변경이 이렇게 우아할 수 있음
- `mkdir -p project/{src,tests,docs}` → 디렉토리 3개 동시 생성

### 프로세스 대체와 글롭

- **프로세스 대체** `<(command)`: 명령어 출력을 파일처럼 취급. `diff <(sort file1) <(sort file2)` 하면 임시 파일 만들 필요 없이 정렬된 두 파일을 바로 비교 가능
- **`**` (Globstar)**: Bash에서 `shopt -s globstar` 켜면 (Zsh는 기본), `ls **/*.js`로 모든 하위 디렉토리의 JS 파일을 재귀 탐색. `find` 없이도 됨

> [!TIP]
> SSH로 붙어서 DB 임포트 돌리고 있는데 tmux 안에서 안 돌렸을 때: **CTRL + Z** (일시정지) → `bg` (백그라운드 전환) → `disown` (셸에서 완전 분리). 이러면 SSH 끊겨도 프로세스가 살아남음. 노트북 덮고 커피 마시러 가도 됨

- **`|&` + `tee`**: `command |& tee file.log`로 stdout과 stderr를 동시에 화면에 보면서 로그 파일에도 저장. `|`만 쓰면 stderr가 파이프를 건너뛰고 화면에만 뿌려지는데, `|&`는 `2>&1 |`의 축약형이라 둘 다 잡아줌

## 핵심은 "하루에 하나씩"

- 이걸 한꺼번에 다 외우려고 하지 말 것. **하나 골라서 일주일간 강제로 쓰고**, 그다음 하나 추가하는 방식이 저자의 권장 사항임. 터미널은 장애물 코스가 아니라 도구 상자임 — 가구 배치 좀 바꿔놓으면 삶이 달라진다는 이야기

## 핵심 포인트

- CTRL+W/U/K/Y 등 Emacs 스타일 라인 편집으로 Backspace 연타 탈출
- cd -, pushd/popd로 디렉토리 간 빠른 이동
- set -euo pipefail로 셸 스크립트 안전망 구축 (단, 엣지 케이스 주의)
- CTRL+R 히스토리 검색, !! sudo 재실행, 중괄호 확장으로 반복 타이핑 제거
- CTRL+Z → bg → disown 콤보로 tmux 없이도 프로세스 생존 가능

## 인사이트

시니어 개발자도 의외로 CTRL+W, CTRL+U 같은 기본 라인 편집을 모르는 경우가 많음. 팀 온보딩 문서에 넣어두면 전체 생산성이 올라갈 트릭들.
