1
살면서 몰랐던 셸 트릭 모음 — 터미널에서 Backspace 꾹 누르기 이제 그만
devops
요약
기사 전체 정리
터미널, 살고 있으면서 가구 배치는 안 하고 있었던 거임
- 옆에서 시니어 엔지니어가 줄 맨 앞의 오타 하나 고치겠다고 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 $_하면 끝. 임시 변수 선언 필요 없음
주의
> 셸 스크립트 상단에 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없이도 됨
팁
> SSH로 붙어서 DB 임포트 돌리고 있는데 tmux 안에서 안 돌렸을 때: CTRL + Z (일시정지) → bg (백그라운드 전환) → disown (셸에서 완전 분리). 이러면 SSH 끊겨도 프로세스가 살아남음. 노트북 덮고 커피 마시러 가도 됨
|&+tee:command |& tee file.log로 stdout과 stderr를 동시에 화면에 보면서 로그 파일에도 저장.|만 쓰면 stderr가 파이프를 건너뛰고 화면에만 뿌려지는데,|&는2>&1 |의 축약형이라 둘 다 잡아줌
핵심은 "하루에 하나씩"
- 이걸 한꺼번에 다 외우려고 하지 말 것. 하나 골라서 일주일간 강제로 쓰고, 그다음 하나 추가하는 방식이 저자의 권장 사항임. 터미널은 장애물 코스가 아니라 도구 상자임 — 가구 배치 좀 바꿔놓으면 삶이 달라진다는 이야기
댓글
댓글
댓글을 불러오는 중...