• 이전 문서: [[/mac/terminal-guide/00]]
  • 다음 문서: [[/mac/terminal-guide/02]]

설명서를 찾고 읽는 방법

셸에서 사용할 수 있는 명령은 헤아릴 수 없을 정도로 많이 있습니다. 역사가 오래된데다가 누구나 만들어 인터넷에 공유할 수 있기 때문입니다.

그래서 모든 명령의 사용법을 암기하려 드는 것은 좋은 방법이 아닙니다. 적당히 공부하는 것이 효율적입니다.

  1. 핵심이 되는 수십개의 명령에 익숙해지도록 연습합니다.
  2. 명령 파이프라인을 구성하는 규칙과 패턴을 대충 공부합니다.
  3. 각 명령에 대한 설명서 보는 방법을 익힙니다.

1, 2는 천천히 익숙해지도록 하고, 이번에는 3번에 대해 공부해보겠습니다.

설명서를 보는 man 명령

[[/cmd/man]]는 설명서를 보여주는 명령입니다.

예를 들어, 다음과 같이 입력하면 [[/cmd/ls]]의 설명서를 볼 수 있습니다.

man ls

설명서는 [[/cmd/less]]{less}라는 뷰어를 통해 터미널에서 보여지게 됩니다. 그래서 [[/cmd/less]]의 사용법을 알아야 스크롤을 하거나, 특정 단어를 검색하거나, 뷰어를 종료하거나 할 수 있습니다.

종료하는 방법을 모르면 당황해서 이것저것 눌러보다가 우연히 종료에 성공하거나, 그냥 터미널 애플리케이션을 종료하는 경우도 있습니다. 그냥 q를 누르면 종료가 됩니다. 이것만 기억해 두면 그렇게 하지 않아도 됩니다…

  • 반드시 기억해둬야 하는 [[/cmd/less]] 조작 키
    • q: 뷰어 종료
    • j: 아래로 한 줄 스크롤
    • k: 위로 한 줄 스크롤
  • 알면 좋지만 몰라도 큰 문제 없는 [[/cmd/less]] 조작 키
    • h: 도움말 보기
    • 스크롤
      • f: Page Down
      • b: Page Up
      • g: 맨 윗줄로 스크롤
      • G: 맨 아랫줄로 스크롤
    • /: 검색
      • n: 다음 검색 결과로 이동
      • N: 이전 검색 결과로 이동

man 페이지는 1970년대에 작성된 것도 있고 비교적 최근에 업데이트된 것도 있어, 역사에 관심이 있다면 가끔 흥미로운 글을 읽을 수도 있습니다. Douglas McIloy나 Richard Stallman 같은 전설적인 인물들이 언급되거나 그들이 직접 작성한 글도 발견할 수 있습니다.

위의 스크린샷은 [[/cmd/diff]] 명령 설명서의 아래쪽에 있는 SEE ALSO 섹션입니다. 직접 보고 싶다면 다음과 같이 diffman 페이지를 열어보세요.

man diff

diffman 페이지가 열리면 쉬프트와 함께 G를 눌러서 맨 아래로 이동해 보세요. 스크린샷에서 본 내용을 볼 수 있을 것입니다. 물론 다 읽었다면 q를 눌러서 뷰어를 종료하면 됩니다.

이후에는 다양한 명령의 man 페이지를 읽어보면서 익숙해지도록 합니다.

man man
man sort
man head
man tail
man git
man uniq

man의 대안들

[[/cmd/man]]를 사용하는 것이 어렵게 느껴지거나 불편하다면 다음 웹 사이트들을 함께 참고하는 것도 괜찮습니다.

터미널에서의 단축키

자주 사용하는 키 조합들

터미널에서 사용 가능한 특수한 키 조합들이 있습니다. 우선순위로 알아둬야 하는 중요한 키부터 소개해보겠습니다.

표기법
<C-키>라고 쓰면 ctrl을 누른 상태에서 키를 누르라는 뜻입니다. 예를 들어 <C-C>는 ctrl + c 입니다.

  • <C-C>
    • 실행중인 파이프라인 명령에 대해 인터럽트 시그널(SIGINT)을 보내서, 명령 실행을 중단시킵니다.
    • 명령을 잘못 입력했거나, 의도한 것보다 오래 실행되는 것 같다면 <C-C>를 눌러서 중단시키면 됩니다.
  • (위쪽 화살표)
    • 이전에 입력한 명령을 불러옵니다.
    • 이전에 실행한 명령을 반복적으로 실행할 일들이 종종 있는데 그냥 이걸 쓰면 됩니다.
    • 여러번 누르면 누른 횟수만큼 이전 명령을 불러옵니다.

편집용 키 조합

  • 삭제
    • <C-H>
      • ctrl + h 는 백스페이스와 같습니다. 왼쪽으로 한 글자를 삭제합니다.
      • 이 키 조합은 터미널뿐 아니라 macOS의 다양한 앱에서도 작동합니다.
        • 메모장, Chrome 웹 브라우저, Slack, Notion, iMessage 등에서 <C-H>를 입력해 보세요.
    • <C-W>
      • 현재 커서 위치에서 왼쪽으로 한 단어를 삭제합니다.
    • <C-U>
      • 현재 커서 위치부터 왼쪽의 모든 글자를 삭제합니다.
  • 커서 이동
    • <C-A>
      • 가장 왼쪽으로 커서를 이동합니다. (HOME)
    • <C-E>
      • 가장 오른쪽으로 커서를 이동합니다. (END)

이보다 더 많은 키 조합이 있지만, 처음에는 더 많이 알아봐야 헷갈려서 잘 사용하지 않게 됩니다.

Control 키에 대하여

위에서 소개한 <C-H>가 백스페이스 키에 대한 단축키로 작동하는 것을 신기하게 생각하는 분들이 있을 것입니다. 그런데 사실 <C-H>는 단축키가 아닙니다.

옛날 터미널에서 Control 키의 역할은 조합하는 키의 이진수 비트를 1011 1111AND 연산을 하는 것이었습니다. 이렇게 하면 1이 있는 위치는 키의 이진수 비트가 보존되고, 0이 있는 위치는 키의 이진수 비트가 모두 0으로 바뀌게 됩니다. 간단하게 설명하자면 8비트 기준으로 왼쪽에서 두번째 비트를 0으로 바꿔주는 게 컨트롤 키의 기능이었습니다.

이제 <C-H>H를 생각해 봅시다. H의 아스키 코드를 16진수로 표현하면 0x48 인데, 이걸 이진수로 변환하면 40100이고 81000이니까 0100 1000이 됩니다.

Control 키가 눌린 상태에서 H를 누른다면 왼쪽에서 두번째 비트가 0으로 바뀌므로 0000 1000이 됩니다. 이건 16진수로 변환하면 0x08이죠.

man ascii 명령으로 아스키 코드표를 확인해보면 이 둘이 테이블의 같은 컬럼에 있어서 확인하기 좋습니다.

0x48H 이고, 0x08bs(backspace) 입니다.

즉, <C-H>는 단축키가 아니라 백스페이스 문자 자체를 생성합니다.

이런 방식으로 Control 키의 기능을 염두에 두고 아스키 테이블을 읽어보면 흥미롭습니다.

  • <C-J>
    • nl([[/special-chars#lf]]{Line Feed})이므로 터미널에서 Enter 처럼 사용할 수 있습니다.
    • [[/special-chars#lf]]{Line Feed}: 옛날 타자기, 텔레타이프에서 종이를 한 줄 위로 올리는 것을 의미.
  • <C-M>
    • cr([[/special-chars#cr]]{Carriage Return})이므로 이것도 터미널에서 Enter 처럼 사용할 수 있습니다.
    • [[/special-chars#cr]]{Carriage Return}: 옛날 타자기, 텔레타이프에서 타이핑 헤드를 왼쪽 끝으로 옮기는 것을 의미.
  • <C-I>
    • tab([[/special-chars#tab]]{Horizontal Tab})이므로 터미널에서 Tab 키처럼 사용할 수 있습니다.
  • 그 외에도 이런 사례가 다양합니다.

[[/cmd/man]]를 사용해 설명서들을 읽다 보면 비디오 디스플레이 터미널이 등장하기 이전의 텔레타이프와 관련된 용어들이 많이 쓰이는 것을 알 수 있습니다.

예를 들어 [[/cmd/tty]]가 그러한데, tty가 teletype의 줄임말이기 때문입니다. ([[/cmd/tty]]에 대해서는 나중에 [[/cmd/tee]]를 공부할 때 더 알아보도록 합시다.)

이제 다시 <C-H> 이야기로 돌아가도록 합시다.

<C-H>는 옛날 터미널에서는 백스페이스 키의 비트 시퀀스를 생성하는 키 조합이었지만, 오늘날까지 그런 것은 아닙니다. 그러기엔 컴퓨팅 세상이 너무 많이 바뀌었습니다. 그 시절에 없던 키도 많이 추가됐습니다.

대신 많은 사람들이 사용하던 레거시는 아직 현대적인 몇몇 OS들과 애플리케이션에서도 작동하도록 만들어지는 경우가 많습니다.

예를 들어 <C-H>는 Google Chrome 웹 브라우저(주소창이나 텍스트 입력칸에서 <C-H>를 눌러보세요)와, macOS Spotlight 검색, 메모장, Finder, Notion 등에서 모두 작동합니다. <C-A>, <C-E>도 작동하기 때문에 HOME, END 키처럼 사용할 수도 있습니다.

하지만 <C-J><C-M> 같은 것들이 Finder 등에서 작동하지 않는 것을 보면 이런 키 조합들이 선별되어 단축키로 지정되었다는 것을 알 수 있습니다.

즉, <C-H>는 터미널에선 백스페이스에 대한 단축키가 아니지만, 구글 크롬에서는 단축키인 셈입니다.

macOS GUI와 함께 사용하기 좋은 명령들

  • pbpaste: PasteBoard에 들어있는 내용을 붙여넣기 해줍니다.
    • PasteBoard는 MS Windows에서의 클립보드와 같은 개념입니다.
  • pbcopy: pbcopy|로 텍스트 스트림을 연결해주면 command + c로 복사한 것처럼 PasteBoard에 내용을 복사해줍니다.
  • open: 지정한 파일을 연결 프로그램으로 열어줍니다.

pbpaste, pbcopy

/bin 경로에 있는 파일들을 [[/cmd/ls]]로 리스팅해 봅시다.

$ ls /bin
'['      dash   expr        ln      pwd        stty        zsh
 bash    date   hostname    ls      realpath   sync
 cat     dd     kill        mkdir   rm         tcsh
 chmod   df     ksh         mv      rmdir      test
 cp      echo   launchctl   pax     sh         unlink
 csh     ed     link        ps      sleep      wait4path

[[/cmd/wc]]{wc -l} 명령으로 조사해 보니 총 37개의 파일이 있다는 것을 알 수 있네요.

$ ls /bin | wc -l
37

37개는 좀 많은 것 같으니까 head -5 명령으로 앞에서부터 5개만 뽑아보도록 합시다.

$ ls /bin | head -5
[
bash
cat
chmod
cp

이걸 pbcopy로 연결해 봅시다. 그러면 pbcopyls /bin | head -5의 출력을 입력으로 받아서 PasteBoard에 복사해 줍니다.

$ ls /bin | head -5 | pbcopy

메모장이나 텍스트 편집기 등을 아무거나 열어서 command + v로 붙여넣기 해보면 확인할 수 있습니다.

물론 그냥 pbpaste 명령을 사용해서 PasteBoard에 들어있는 내용을 확인할 수도 있습니다.

$ pbpaste
[
bash
cat
chmod
cp

cat을 연결해도 됩니다.

$ pbpaste | cat
[
bash
cat
chmod
cp

몇 줄인지 궁금하다면(물론 우리는 이미 5줄이라는 것을 알고 있지만) [[/cmd/wc]]{wc -l} 명령을 연결해주면 됩니다.

$ pbpaste | wc -l
5

복사한 내용을 파일로 저장하고 싶다면 pbpaste > copy.txt처럼 리다이렉션을 사용하면 됩니다.

 # 새로운 파일 생성
pbpaste > copy.txt

 # 기존 파일에 추가
pbpaste >> copy.txt

open

open 명령은 지정한 파일을 연결 프로그램으로 열어줍니다. 터미널 안에서는 확인하기 어려운 것들을 열어볼 때 도움이 됩니다.

 # 구글 홈페이지를 웹 브라우저에서 열어줍니다
open https://www.google.com

 # URL을 두 개 주면 두 개를 열어줍니다
open https://www.google.com https://www.github.com

open 명령은 여러 인자를 받을 수 있어서 나중에 공부할 [[/cmd/find]]나 [[/cmd/xargs]]와 함께 사용하게 될 일이 있을 것입니다.

이미지 파일이나 PDF, html 파일 등에 대해서도 open 명령을 사용해보는 연습을 해보세요.

이번에는 디렉토리를 열어 봅시다.

 # 현재 작업 디렉토리를 Finder로 열어줍니다
open .

 # 홈 경로를 Finder로 열어줍니다
open ~

 # /bin 경로를 Finder로 열어줍니다
open /bin

이제 open 명령의 설명서에 포함된 예제를 읽어봅시다.

man open

[[/cmd/less]] 뷰어가 열린 다음, G(shift + g)를 입력해서 설명서의 맨 아래쪽으로 이동해 보세요.

아래와 같이 open 명령의 설명서가 보인다면 성공입니다.

이전, 다음 문서

  • 이전 문서: [[/mac/terminal-guide/00]]
  • 다음 문서: [[/mac/terminal-guide/02]]