bash shell 상에서 익혀두면 유용한 단축키가 많이 있다. 기본적인 단축키 정보는 man bash를 통해 확인해볼 수 있다.

단축키를 사용하면 굉장히 편리하고 좋지만 이제와서는 이런 것들이 쉽지가 않은게, iTerm2나 Terminator, 혹은 xfce 같은 것들과 단축키가 bash와 겹치는 경우가 생기기 때문에 모든 단축키를 다 쓸 수는 없다. 그럼에도 불구하고 가능한 몇 가지 단축키만 사용하더라도 효율이 매우 증가하므로 한번 이 기회에 익혀보도록 해보자.

기본 표기법

  • C: Ctrl, Control
  • M: Alt

tl;dr

그냥 바로 적용할 수 있는 빠른 단축키만 적어보자. 물론 아래에 상세한 내용을 따로 정리한다.

ShortcutDescription
C-a, C-e라인의 제일 앞/뒤로 이동한다. 예를 들어 sudo를 빼먹었을 때 사용가능
C-p, C-n명령 히스토리에서 이전/다음을 찾는다. 화살표 키 위/아래와 같다. 이 명령의 의의는 화살표 키를 사용하지 않을 수 있다는 것이다.
C-r명령을 입력해가면서 명령 히스토리에서 이전에 입력했던 명령을 찾아 완성한다. 자세한 내용은 아래에서 확인해 보자.

커서 이동 관련 단축키

사실 커서 이동은 방향키로도 할 수 있고, 어떤 키보드든 방향키를 아예 없애지는 않기 때문에 어쩌면 이동 관련 단축키가 제일 안 쓰일 수 있겠다. 그럼에도 불구하고 익혀두면 나쁘지 않는데, 키보드의 방향키 모양은 모두 다를 수 있지만 어떤 키보드든 컨트롤 키는 항상 제일 왼쪽 아래에 있기 때문이다.

커서 위치에 글자를 써서 명령을 실행한다는 측면에서 생각해 보면, 커서를 이동하는 것만큼 중요한 것이 또 없다.

라인 처음/끝으로 이동

C-a, C-e가 각각 처음과 끝에 대응된다. 예를 들어 명령을 입력했는데 권한 문제가 생겼을 경우, “위” 방향키로 이전 명령을 찾고 C-a로 제일 앞으로 이동하여 sudo를 추가 입력할 수 있겠다.

커서 한 칸씩 앞/뒤로 이동

C-f, C-b가 각각 앞과 뒤에 대응된다. 이 키를 사용하지 않고 방향키를 대신 사용할 수 있다.

단어 단위로 앞/뒤로 이동

M-f, M-b가 각각 앞과 뒤에 대응된다. 이동은 단어의 제일 첫 글자로 이동하며, 이 키를 사용하지 않고 컨트롤 키와 방향키를 동시에 누르는 것으로 대체할 수 있다.

화면 지우기

C-l을 눌러 화면을 지울 수 있다. clear 명령어로 대체할 수 있다. 이게 왜 “이동” 명령에 속하는가 하면, 화면을 지우고 커서를 제일 위로 올리기 때문이다.

명령 히스토리 조작

일반적으로 히스토리 조작은 방향키 “위"와 “아래”, 혹은 C-r, 그리고 history | grep SOMETHING 등을 사용하는데, 이 정도만 써도 큰 불편함이 없다. 하지만 익혀두면 더 좋은 동작들이 많이 있다.

명령 히스토리 이전/다음 선택

C-p, C-n이 각각 이전과 다음에 대응된다. 또한 이 명령은 각각 키보드 방향키 위/아래로 대체할 수 있다.

명령 히스토리 뒤로/앞으로 검색하며 입력

C-r, C-s로 각 명령에 대응된다.

C-r은 굉장히 유용한데, 입력한 글자에 따른 히스토리 검색 결과를 바로 매칭해 주기 때문이다.

C-s의 경우는 xubuntu/terminator에서는 사용할 수 없는데 [[https://en.wikipedia.org/wiki/Software_flow_control|단축키]]가 이미 할당이 되어 있기 때문이다.

$ stty -ixon
(i-search)`':

히스토리로부터 arguments 선택하기

arguments(인자) 관련된 내용을 정리하기 전에 아래 내용을 먼저 정해 보자.

$ rm -rf abcd zxcv qwer

위 명령어를 입력한 상태라고 가정하자. 인자의 순서는 다음과 같다.

  • 1: -rf
  • 2: abcd
  • 3: zxcv
  • 4: qwer
  • 0: rm

첫 번째/마지막 인자 입력하기

M-C-y로 이전 명령의 첫 번째 argunemts(인자)를 입력할 수 있다. 또한 M-. 혹은 M-_(Alt+Shift+-)를 입력하여 마지막 인자를 입력할 수 있다.

n번째 인자 선택하기

M-n(n은 숫자)로, n번째 인자를 선택한다. 예를 들어 -rf가 아닌 abcd를 선택하고 싶은 경우, abcd는 두 번째 인자이므로 M-2를 입력한다.

(arg: 2)

특히 마지막 인자는 M--로 선택한다.

(arg: -1)

선택했으면 M-C-y를 눌러 선택한 파라미터를 입력할 수 있다.

예를 들어 vim으로 main.go 파일을 편집하다 저장하고 나온 경우, “go run M-C-y“를 입력하는 것으로 “go run main.go"를 만들 수 있을 것이다. 이 외에도 파라미터 입력이 귀찮은 것들이 많으므로 잘 사용하면 여러 활용법이 있을 수 있다.

명령 히스토리 처음/끝 선택

M-<, M->가 각 명령에 대응된다. 사실 이건 별로 쓸 일이 없을 것 같다.

텍스트 편집

텍스트를 편집하기 위해 백스페이스, 혹은 DEL키를 사용할 수 있다. 그러나 이 키는 모두 글자 하나를 지우는 용도이며 긴 명령어를 수정하기 위해서는 많은 키스트로크가 필요하다.

글자 지우기

C-d를 통해 커서가 위치한 곳의 한 글자를 지울 수 있다. DEL키와 비슷한 용도로 쓸 수 있다. 그러나 이 단축키는 조금 위험한데, 보통 C-d가 exit와 연결되어 있기 때문이다.

Bash에서 다음의 명령을 통해 C-d가 터미널 exit로 동작하지 않도록 할 수 있다. 이를 bashrc등에 지정해 둘 수도 있다.

$ set -o ignoreeof

터미네이터에서는 해당 옵션을 활성화하면 C-d를 10번 입력해야 exit된다.