바쁜 분은 이것만
~/.zshrc에alias ll='ls -alh'처럼 적고source ~/.zshrc- 안에
$가 있으면 작은따옴표로 감싸야 쓸 때마다 다시 계산돼요 - 인자(포트 번호, 폴더 이름)가 필요하면 alias 말고 함수로
터미널에서 source .venv/bin/activate, lsof -nP -iTCP:8000 -sTCP:LISTEN 같은 긴 명령을 하루에도 몇 번씩 치게 돼요. 이런 건 짧은 이름을 붙여 두면 편합니다. 맥은 macOS Catalina부터 기본 셸이 zsh라서(Apple 지원 문서 기준), 설정은 홈 폴더의 ~/.zshrc 파일에 적어요. 터미널을 새로 열 때마다 이 파일을 읽습니다.
1. 이번에 쓸 .zshrc 예시
아래 내용을 ~/.zshrc 맨 아래에 붙이면 돼요. 파일이 없으면 새로 만들어도 됩니다. 고치기 전에 cp ~/.zshrc ~/.zshrc.bak으로 사본을 하나 두면 마음이 편해요.
# 1) alias: 짧은 이름 = 긴 명령
alias ll='ls -alh'
alias ..='cd ..'
alias py='python3'
alias venv='source .venv/bin/activate'
# 2) 따옴표: 안에 $가 있으면 작은따옴표로 (실행할 때 펼쳐짐)
alias now='date "+%Y-%m-%d %H:%M:%S"'
alias here_single='echo $PWD'
alias here_double="echo $PWD"
# 3) 인자가 필요하면 함수
mkday() {
local d=$(date +%Y-%m-%d)
mkdir -p "$d${1:+_$1}" && cd "$d${1:+_$1}" && pwd
}
port() {
if [ -z "$1" ]; then
echo "사용법: port 포트번호"; return 1
fi
lsof -nP -iTCP:"$1" -sTCP:LISTEN
}
- alias는
alias 이름='명령'형식이고 등호 양옆에 띄어쓰기가 있으면 안 돼요. here_double은 따옴표 차이를 보려고 일부러 넣은 잘못된 예입니다.
2. 진짜 설정을 건드리지 않고 시험해 보기
이 글의 출력은 제 ~/.zshrc를 고치지 않고 만들었어요. zsh는 ZDOTDIR 환경 변수가 있으면 홈 대신 그 폴더의 .zshrc를 읽기 때문에, 임시 폴더에 위 파일을 넣고 그 폴더로 zsh를 띄우면 됩니다.
T=$(mktemp -d)
cp zshrc_sample $T/.zshrc
ZDOTDIR=$T zsh -i -c 'alias ll; type ll'
rm -rf $T
ll='ls -alh'
ll is an alias for ls -alh
새 alias를 써 보고 싶을 때 이렇게 먼저 확인하면, 실수가 있어도 평소 터미널은 멀쩡해요.
3. alias 목록 보기, 따옴표 차이
그냥 alias만 치면 전체 목록, alias 이름은 하나만 보여 줘요. type은 그 이름이 alias인지 함수인지 알려 줍니다.
## alias 목록
here_double='echo <임시폴더>/work'
here_single='echo $PWD'
ll='ls -alh'
now='date "+%Y-%m-%d %H:%M:%S"'
py=python3
venv='source .venv/bin/activate'
## alias ll 하나만
ll='ls -alh'
## type
ll is an alias for ls -alh
mkday is a shell function from <임시폴더>/.zshrc
## now
2026-11-03 00:16:48
(목록은 alias | grep으로 이 글에서 만든 것만 골랐어요. py=python3처럼 띄어쓰기가 없는 건 따옴표 없이 보여 줍니다.)
여기서 here_double을 보세요. 큰따옴표로 감싸서 .zshrc를 읽는 순간의 $PWD가 박혀 버렸어요. /tmp로 옮겨 두 개를 실행하면 차이가 확실합니다.
## 따옴표 차이 (/tmp로 이동 후)
/tmp
<임시폴더>/work
작은따옴표 쪽(here_single)은 실행할 때 $PWD를 계산해 지금 위치 /tmp가 나오고, 큰따옴표 쪽은 예전 위치가 그대로 나와요. $나 $(...)가 들어간 alias는 작은따옴표로 감싸세요. 안쪽에 큰따옴표가 필요하면 now처럼 바깥 작은따옴표 + 안쪽 큰따옴표로 쓰면 됩니다.
4. 인자가 필요하면 함수
zsh alias는 단어를 바꿔 끼우는 것이라 "중간에 값 넣기"가 안 돼요. 포트 번호나 폴더 이름을 받으려면 함수로 만들고 $1, $2로 받습니다. 아래는 임시 ZDOTDIR의 zsh에 한 줄씩 넣어 돌린 출력이에요(python -m http.server 8000을 미리 띄워 둠).
① venv 켜기 — 프로젝트 폴더에서 venv 한 단어로 가상환경을 켭니다.
$ which python3
/opt/homebrew/bin/python3
$ venv
(.venv) $ which python3
<임시폴더>/work/.venv/bin/python3
② 오늘 날짜 폴더 만들고 들어가기 — ${1:+_$1}은 "인자가 있으면 _인자, 없으면 빈칸"이라는 뜻이에요.
$ mkday
<임시폴더>/work/2026-11-03
$ cd ..
$ mkday 회의
<임시폴더>/work/2026-11-03_회의
$ cd ..
$ ls
2026-11-03
2026-11-03_회의
③ 포트 쓰는 프로세스 찾기 — "Address already in use"가 뜰 때 누가 그 포트를 잡고 있는지 봐요. -n -P는 이름 풀이를 안 해서 빨리 나오게, -sTCP:LISTEN은 듣고 있는 쪽만 보여 줍니다. 짧게 lsof -i :8000로 쳐도 돼요.
$ port 8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Python 9279 me 3u IPv4 0xbc755a11eec1a8dd 0t0 TCP 127.0.0.1:8000 (LISTEN)
$ port
사용법: port 포트번호
$ echo "종료 코드: $?"
종료 코드: 1
PID(9279)가 나오니 필요하면 kill 9279로 끄면 됩니다. 인자가 없을 때 안내를 보여 주고 return 1로 끝내게 해 두면 실수했을 때 알아보기 쉬워요.
5. 해제(unalias)와 다시 읽기(source)
$ unalias ll
$ ll
zsh: command not found: ll
$ source $ZDOTDIR/.zshrc
$ alias ll
ll='ls -alh'
unalias는 지금 열린 터미널에서만 지워요. 영원히 없애려면~/.zshrc에서 그 줄을 지우세요.~/.zshrc를 고친 뒤 열려 있는 터미널에 반영하려면source ~/.zshrc, 아니면 새 창을 열면 됩니다. (위 테스트에선 임시 파일이라source $ZDOTDIR/.zshrc로 읽었어요. 평소엔~/.zshrc.)
한 가지 주의할 점: 처음엔 zsh -i -c '...'에 명령을 한꺼번에 넘겨 테스트했는데, unalias 뒤인데도 ll이 그대로 ls -alh로 실행됐어요. 줄을 나눠도 같았습니다.
$ ZDOTDIR=$T zsh -i -c 'unalias ll; ll -d .'
drwx------@ 3 me staff 96B Nov 3 00:19 .
$ ZDOTDIR=$T zsh -i -c 'unalias ll
ll -d .'
drwx------@ 3 me staff 96B Nov 3 00:19 .
alias는 명령을 읽어 들이는 시점에 펼쳐지는데, -c 문자열은 실행 전에 통째로 읽히기 때문으로 보여요. 그래서 위 4·5절 출력은 명령을 한 줄씩 넣는 방식으로 만들었고, 터미널에 직접 한 줄씩 칠 때는 생기지 않는 일입니다. 스크립트 안에서 alias에 기대지 말고 함수를 쓰는 편이 안전한 이유이기도 해요.
원래 명령을 같은 이름의 alias로 덮었을 때(alias ls='ls -G') alias를 건너뛰려면 앞에 \나 command를 붙여요.
$ alias ls='ls -G'
$ type ls
ls is an alias for ls -G
$ \ls -d .venv
.venv
$ command ls -d .venv
.venv
정리
| 하고 싶은 것 | 명령 |
|---|---|
| 짧은 이름 붙이기 | alias ll='ls -alh' (등호 옆 띄어쓰기 X) |
| $ 들어간 alias | 작은따옴표 'echo $PWD' |
| 목록 / 하나 보기 / 종류 | alias / alias ll / type ll |
| 지금 창에서 해제 | unalias ll |
| 인자 받기 | 함수 port() { lsof -nP -iTCP:"$1" -sTCP:LISTEN; } |
| 고친 뒤 반영 | source ~/.zshrc 또는 새 창 |
| alias 건너뛰기 | \ls 또는 command ls |
| 설정 안 건드리고 시험 | ZDOTDIR=임시폴더 zsh -i |
참고: Apple 지원 — Mac에서 zsh를 기본 셸로 사용하기 / zsh 공식 문서 — Aliasing, Functions, Startup Files(ZDOTDIR) / lsof(8) man page
