새로운 zine: 터미널의 비밀 규칙
원문은 Julia Evans님이 에 게재했습니다. 이 블로그 구독하기
안녕하세요! 터미널에 대한 심층 블로그 글을 몇 달 동안 써 온 끝에, 화요일에 “The Secret Rules of the Terminal”이라는 새로운 zine을 출시했습니다!
12달러에 구매할 수 있습니다: https://wizardzines.com/zines/terminal, 또는 전체 zine 15종 세트도 구매할 수 있습니다.
표지는 이렇게 생겼습니다:
목차
목차는 다음과 같습니다:
왜 터미널인가요?
저는 20년 동안 매일 터미널을 사용해 왔고 터미널에 꽤 자신이 있지만, 늘 어딘가 찜찜한 느낌이 있었습니다. 보통은 잘 동작하지만, 가끔 문제가 생기면 도저히 원인을 파헤칠 수 없을 것 같고, 파헤치려 들면 끝도 없이 복잡한 일이 벌어질 것 같은 느낌이 들곤 했습니다.
그래서 터미널에서 겪었던 이상한 문제들을 하나씩 적어 보기 시작했는데, 터미널에는 이런 사소한 불일치가 정말 많다는 걸 깨달았습니다:
- 가끔은 방향키로 커서를 움직일 수 있는데, 가끔은 방향키를 누르면 그냥
^[[D가 출력되기도 하고 - 가끔은 마우스로 텍스트를 선택할 수 있는데, 가끔은 안 되고
- 가끔은 실행한 명령어가 히스토리에 저장되는데, 가끔은 저장되지 않으며
- 어떤 셸에서는 위쪽 방향키로 이전 명령어를 볼 수 있는데, 어떤 셸에서는 안 됩니다
터미널을 10년, 20년 매일 쓰다 보면 이런 일이 왜 일어나는지 정확히 이해하지 못하더라도 나름의 감은 생기게 됩니다.
하지만 감이 생기는 것과 왜 그런 일이 일어나는지 이해하는 것은 다릅니다. 이 zine을 쓰면서 터미널에서 정확히 무슨 일이 일어나는지 파악하고, 이를 어떻게 추론해야 할지 설명하기 위해 정말 많은 노력이 필요했습니다.
규칙은 어디에도 적혀 있지 않습니다
터미널이 어떻게 동작하는지에 대한 “규칙”(입력한 명령어를 어떻게 수정할까? 프로그램을 어떻게 종료할까? 색상은 어떻게 고칠까?)을 완전히 이해하는 것이 극도로 어려운 이유는, “터미널”이 사실 여러 다른 소프트웨어 조각들(터미널 에뮬레이터, 운영체제, 셸, grep 같은 핵심 유틸리티, 그리고 설치한 다른 모든 터미널 프로그램)으로 이루어져 있고, 이들이 서로 다른 사람들이 서로 다른 생각으로 만들었기 때문입니다.
그래서 저는 다음을 설명하는 글을 쓰고 싶었습니다:
- 터미널의 4가지 구성 요소(셸, 터미널 에뮬레이터, 프로그램, TTY 드라이버)가 어떻게 맞물려 동작하는지
- 터미널에서 어떤 동작을 기대할 수 있는지에 대한 핵심 관례들
- 터미널 프로그램을 더 잘 활용하기 위한 수많은 팁과 요령
이 zine은 터미널 내부 구조 중 가장 유용한 부분을 설명합니다
터미널의 내부 구조는 엉망입니다. 많은 부분은 80년대에 누군가 내린 결정 때문에 그냥 그렇게 된 것이고 이제는 바꾸는 게 불가능하며, 솔직히 그 모든 걸 다 배울 가치는 없다고 생각합니다.
하지만 일부는 이해하기 그리 어렵지 않으면서 터미널 사용 경험을 훨씬 좋게 만들 수 있습니다. 예를 들면:
- 셸이 무엇을 담당하는지 이해하면 셸을 설정하거나(혹은 다른 셸을 사용해서!) 히스토리를 더 쉽게 조회하고, 뛰어난 탭 자동완성을 얻는 등 훨씬 더 많은 것을 할 수 있습니다
- 이스케이프 코드를 이해하면 바이너리를
cat으로 표준 출력에 뿌려 터미널이 깨져도 훨씬 덜 당황하게 됩니다. 그냥reset을 입력하고 넘어가면 되니까요 - 색상이 어떻게 동작하는지 이해하면 터미널에서 가독성을 해치는 나쁜 색상 대비를 없애 실제로 텍스트를 읽을 수 있게 만들 수 있습니다
이 zine을 쓰면서 놀랍게도 많은 것을 배웠습니다
How Git Works를 쓸 때는 Git을 잘 안다고 생각했고, 실제로 그랬습니다. 하지만 터미널은 다릅니다. 터미널에 대해 완전히 자신이 있고 20년 동안 매일 써 왔음에도, 저는 터미널이 어떻게 동작하는지에 대해 많이 오해하고 있었고, (여러분이 tmux 저자 같은 분이 아니라면) 여러분도 그럴 가능성이 높다고 생각합니다.
제가 실제로 유용하다고 느낀 몇 가지 배운 점은 다음과 같습니다:
- 터미널의 구조를 더 잘 이해하게 되어 이상한 터미널 문제를 디버깅하는 데 훨씬 자신감이 생겼습니다(심지어 fish에 작은 개선을 제안하기도 했습니다!). 터미널에서 이상한 현상을 일으키는 소프트웨어가 정확히 무엇인지 찾아내는 것이 여전히 쉽지는 않지만, 예전보다 훨씬 잘하게 되었습니다.
- SSH를 통해 클립보드로 복사하는 셸 스크립트를 작성할 수 있다는 것
reset이 내부적으로 어떻게 동작하는지(stty sane; sleep 1; tput reset과 동등한 일을 합니다) — 기본적으로stty sane이나tput reset을 외울 필요 없이 그냥reset을 실행하면 된다는 걸 알게 되었습니다- 프로그램이 출력하는 눈에 보이지 않는 이스케이프 코드를 확인하는 방법(
unbuffer program > out; less out을 실행하세요) - 제 Mac에 내장된
sqlite3같은 REPL이 왜 그렇게 사용하기 불편한지(readline대신libedit을 사용하기 때문입니다)
작업하면서 쓴 블로그 글들
요즘 늘 그렇듯, 작업하면서 여러 곁다리 주제들에 대해 블로그 글을 많이 썼습니다:
- PATH에 디렉터리를 추가하는 방법
- 터미널 문제가 따르는 “규칙”
- 파이프가 가끔 “막히는” 이유: 버퍼링
- 터미널에 대한 몇 가지 답답한 점
- 내 터미널의 ASCII 제어 문자 — “Ctrl+A, Ctrl+B, Ctrl+C 등은 도대체 뭘까?”에 대하여
- 터미널에서 텍스트 입력은 복잡하다
- “최신” 터미널 환경을 갖추는 데 필요한 것
- 셸의 작업 제어를 사용해야 하는 이유
- ANSI 이스케이프 코드 표준 — 사실
terminfo데이터베이스가 오늘날 우리에게 잘 봉사하고 있는지를 고민해 본 글입니다
이 zine을 함께 만든 분들
오래전에는 zine을 대부분 혼자 썼지만, 프로젝트를 할 때마다 점점 더 많은 도움을 받고 있습니다. 이번 zine은 9월부터 6월까지 평일마다 Marie Claire LeBlanc Flanagan과 만나 함께 작업했습니다.
표지는 Vladimir Kašiković가 작업했고, Lesley Trites가 교정·교열을, PuTTY를 만든 Simon Tatham이 기술 감수를 맡았습니다. 운영 매니저인 Lee는 필사를 비롯해 수많은 일을 도왔고, Jesse Luehrs(제가 아는 사람 중 터미널의 저주받은 내부 구조를 실제로 이해하는 몇 안 되는 사람 중 한 명)는 터미널에서 무슨 일이 일어나고 있는지에 대해 저와 정말 많은 유익한 대화를 나눴습니다.
zine 구매하기
zine을 구매할 수 있는 링크를 다시 남깁니다:
언제나처럼 집에서 출력할 수 있는 PDF 버전이나 집으로 배송되는 인쇄본 중 선택할 수 있습니다. 한 가지 유의할 점은 인쇄본 주문은 8월에 발송된다는 것입니다. 인쇄소에 보내기 전에 얼마나 인쇄해야 할지 가늠하기 위해 주문이 들어오는 것을 기다려야 하기 때문입니다.
글을 무작위로 읽기


댓글
로그인하고 댓글 남기기