자주 반복해서 쓰이는 터미널 명령어들이 있다. CUDA_VISIBLE_DEVICES 라거나, tmux 세팅을 한다거나 할 때 등등.. 생각보다 많다.

이전엔 하나하나 다 입력을 했었는데, .bashrc 파일이나 .zshrc 파일에 alias를 설정하면 이걸 단축키처럼 쉽게 바꿀 수 있다는 것이다. 이걸 잘 활용하면 생산성을 확 높일 수 있다.

1. Alias

특정 명령어에 alias(별명)을 붙이는 거다. 치기 어려운 것들을 미리 등록하거나, 오타 방지용으로도 활용할 수 있다.

예를 들면 alias gti='git' 같이 가능하다.

주로 옵션이 고정된 명령어에 유리하고, 내가 실제로 실험과 이 블로그 관련해서 활용 중인 alias는 아래와 같다.

실험 관련

# GPU 사용량 확인
alias nv='nvidia-smi' 

# 가상환경 관련
alias ca='conda activate' 
alias cde='conda deactivate'

# 특정 GPU 지정해서 파이썬 실행
alias gp0='CUDA_VISIBLE_DEVICES=0 python'

로컬 블로그 빌드 / 동기화

수정한 후에 로컬에서 바로 확인하고 싶을 때

alias localblog='cd /Users/kim-bogeun/SSD/02_Work/02_Blog && npm run quartz -- build --serve'

작성한 블로그 콘텐츠를 옵시디언으로 백업할 때

alias blog_to_obs='rsync -avh --delete --exclude=".obsidian/" "/Users/kim-bogeun/SSD/02_Work/02_Blog/content/" "/Users/kim-bogeun/Documents/Obsidian Vault/content/"'

2. Function

이건 치환에서 나아가서, 내가 주는 입력값(인자)에 따라 결과가 바뀌거나 if 같은 옵션이 필요할 때 쓸 수 있다. 아래 예시를 보면 감이 올 것 같다.

인자 추가하기

function run() { local gpu_id=$1 # 첫 번째 인자를 GPU 번호로 
	shift # 첫 번째 인자를 제거 (나머지 명령어들을 위해) 
	echo "Running on GPU $gpu_id: $@"
	CUDA_VISIBLE_DEVICES=$gpu_id python "$@" 
} 

사용은 그러면 뒤에 그 인자를 붙여서, 아래와 같이 사용하면 된다. 아래는 GPU 넘버 2번으로 실험을 실행하는 예시이다.

run 2 train.py --batch 32

로직 추가하기

또 tmux를 이용할 때, attatch(tmux a -t)를 하거나, 아예 새롭게 tmux 환경을 만들어야 할 때 은근히 귀찮다. 특히 내가 주로 쓰는 window나 pane 세팅이 있다면 더더욱. 그런데 이걸 function으로 지정하면 내가 자주 쓰는 세팅으로 바로 만들 수 있다.

나는 ta 이름 을 터미널에 입력했을 때 그 이름을 가진 tmux 세션이 있으면 접속, 없으면 새로 들어가게 하는 로직을 만들었다. 또 화면 분할이 되고 분할된 화면에는 gpu 사용량이 나타날 수 있도록 했다.

function ta() {
    local sn="${1:-dev}" # 이름 안 주면 기본값 'dev'

    if ! tmux has-session -t "$sn" 2>/dev/null; then
        tmux new-session -s "$sn" -d
        tmux split-window -h -p 30 -t "$sn" # 7:3 분할
        tmux send-keys -t "$sn:0.1" "nv" C-m # 오른쪽 창엔 GPU 모니터링
        tmux select-pane -t "$sn:0.0" # 왼쪽 창(메인)으로 포커스
    fi
    tmux attach-session -t "$sn"
}

처음엔 알아보고 설정하는 게 조금 귀찮을 수 있지만, 한번 세팅해두면 너무너무 편해지는 것 같다. (요즘은 AI한테 물어봐도 잘 해주더라)