xclip으로 터미널에서 클립보드 활용하기

들어가며: 리눅스의 CLI 클립보드 도구 X클립(XClip)

GUI 환경과 CLI 환경 사이에서 정보를 공유하는 것은 생각보다 간단하지 않은 일입니다. 하지만 CLI 환경에서 작업할 일이 많은 프로그래머라면 이 두 환경의 정보를 적절하게 공유할 수 있어야 작업 효율도 따라서 올라가게 됩니다. 이 글에서는 리눅스에서 X클립XClip을 통해서 터미널 환경의 문자열을 리눅스 GUI 환경의 클립보드로 복사하는 법과 티먹스Tmux의 복사 모드와 X클립을 연동하는 방법에 대해 소개합니다.

44BITS 소식과 클라우드 뉴스를 전해드립니다. 지금 5,000명 이상의 구독자와 함께 하고 있습니다 📮

X클립(Xclip) 설치

우분투Ubuntu에서 X클립은 아래 명령어로 설치할 수 있습니다.

$ apt-get install -y xclip

정상적으로 설치가 되었는지 확인해봅니다.

$ xclip -version
xclip version 0.12
Copyright (C) 2001-2008 Kim Saunders et al.
Distributed under the terms of the GNU GPL

버전 정보가 출력되는 것을 확인할 수 있습니다.

X클립으로 복사하기

X클립의 기본적인 사용법은 간단합니다. 리눅스 커맨드의 출력 결과를 파이프라인으로 넘겨주면 X클립이 그 결과를 GUI의 클립보드에 저장해줍니다. 예를 들어 date 명령어를 사용하면 아래와 같이 출력됩니다.

$ date
Tue Jul 29 23:35:59 KST 2014

터미널 어플리케이션마다 약간의 차이는 있지만 보통 이러한 출력을 복사하기 위해서는 마우스로 문자열을 선택하고 복사를 하거나 그것도 잘 안 되면 마우스 오른쪽 버튼을 눌러서 컨텍스트 메뉴에서 복사하기를 클릭해야합니다.

date의 출력을 xclip으로 복사하고자 한다면 다음 명령어를 실행합니다.

$ date | xclip -selection clipboard
$

복사가 잘 되었는지 GUI 에디터에서 Ctrl + v 로 복사해보겠습니다.

X클립을 사용해 터미널에서 텍스트를 복사한 결과
X클립을 사용해 터미널에서 텍스트를 복사한 결과

붙여넣기가 정상적으로 이루어집니다. 표준 출력의 내용을 파이프로 넘겨주기만 하면 복사가 이뤄지므로 훨씬 더 다양한 활용이 가능합니다. 예를 들어 시스템 정보를 출력해서 바로 클립보드로 보낼 수도 있고, cat과 함께 사용하면 아주 긴 파일을 곧바로 클립보드로 보낼 수도 있습니다.

$ cat /var/log/syslog | xclip -selection clipboard

이를 통해 클립보드가 훨씬 더 강력해질 것입니다. 매번 긴 옵션을 입력하는 것은 번거로우므로 셸의 별칭 기능을 사용하면 더 편리하게 사용할 수 있습니다. 자신이 사용하는 셸 설정 파일(Zsh이라면 ~/.zshrc)에 다음 내용을 추가해줍니다.

alias copy='xclip -selection clipboard'

이제 copy라는 별칭으로 표준출력의 내용을 복사할 수 있습니다.


$ cat /var/log/syslog | copy

X클립의 사용 시 주의사항

몇몇 예제에서는 -selection clipboard 옵션 없이 X클립을 사용하기도 하는데 이렇게 사용할 때는 조심할 필요가 있다. X11의 클립보드는 하나가 아닙니다. 위의 옵션을 명시적으로 주지 않아도 복사가 이루어집니다.

$ date | xclip
$

분명히 정상적으로 복사되었지만 아마 일반적으로 Ctrl + v 키로 복사한 내용을 가져오지 못 할 것입니다. 이렇게 복사한 경우 마우스 가운데 버튼을 통해서 복사한 내용을 가져올 수 있습니다.

X클립으로 붙여넣기

GUI 클립보드의 내용을 표준 출력에 출력하고자 할 때는 -o 옵션을 사용합니다. 클립보드에 문자열 Hello!라는 문자열이 복사되어있는 경우, 다음과 같이 출력됩니다.

$ xclip -o
Hello!

티먹스(Tmux)와 연동하기

티먹스Tmux는 다수의 셸을 동시에 띄워놓고 사용할 수 있도록 해주는 도구입니다. 티먹스에서는 복사 모드Copy Mode로 텍스트를 복사할 수 있습니다. 티먹스의 복사 모드에서는 빔Vim이나 이맥스Emacs 모드로 단축키를 사용할 수 있습니다. 이 설정은 ~/.tmux.conf 파일에 아래 옵션을 통해서 설정할 수 있습니다.

빔 모드를 사용하고자 하면 아래와 같이 설정합니다.

set-window-option -g mode-keys vi

이맥스 모드를 사용하고자 하면 아래와 같이 설정합니다.

set-window-option -g mode-keys emacs

이제 복사모드를 사용해보겠습니다. 티먹스 내에서 복사 모드는 ^b [ 키로 시작하고, ^b ]로 종료합니다. 복사 모드 내에서도 빔Vim이나 이맥스Emacs 모드에 따라서 아래의 단축키들을 사용할 수 있습니다.

Function                vi             emacs
Back to indentation     ^              M-m
Clear selection         Escape         C-g
Copy selection          Enter          M-w
Cursor down             j              Down
Cursor left             h              Left
Cursor right            l              Right
Cursor to bottom line   L
Cursor to middle line   M              M-r
Cursor to top line      H              M-R
Cursor up               k              Up
Delete entire line      d              C-u
Delete to end of line   D              C-k
End of line             $              C-e
Goto line               :              g
Half page down          C-d            M-Down
Half page up            C-u            M-Up
Next page               C-f            Page down
Next word               w              M-f
Paste buffer            p              C-y
Previous page           C-b            Page up
Previous word           b              M-b
Quit mode               q              Escape
Scroll down             C-Down or J    C-Down
Scroll up               C-Up or K      C-Up
Search again            n              n
Search backward         ?              C-r
Search forward          /              C-s
Start of line           0              C-a
Start selection         Space          C-Space
Transpose chars                        C-t

예를 들어 이맥스 모드에서는 Ctrl+Space로 필요한 영역을 선택한 후 M-w를 키로 해당 영역을 복사할 수 있습니다.

단, 복사 모드에서 복사한 텍스트가 GUI의 클립보드에 저장되지는 않습니다. 복사 모드에서 복사한 문자열을 자동적으로 클립보드에 저장하기 위해서는 X클립을 사용해야합니다. 다음 설정을 ~/.tmux.conf에 추가해줍니다.

bind-key -t emacs-copy M-w copy-pipe "xclip -i -selection clipboard"

설정을 추가했으면 설정 파일을 아래와 같이 리로드하거나 티먹스 서버를 재실행합니다.

$ tmux source-file ~/.tmux.conf

이제 티먹스 복사 모드에서 복사한 내용이, 자동적으로 클립보드에도 저장됩니다.

'테라폼(Terraform) 기초 튜토리얼: AWS로 시작하는 Infrastructure as Code' 대표 이미지

테라폼(Terraform) 기초 튜토리얼: AWS로 시작하는 Infrastructure as Code

🗒 기사, 2020-03-14 - 테라폼(Terraform)은 인프라스트럭처를 선언적인 코드로 작성하고 관리할 수 있게 해주는 도구입니다. 이 글에서는 테라폼에 대해 소개하고, 이를 사용해 AWS 리소스를 정의하고 프로비저닝하는 방법을 소개합니다.

도커(Docker), 쿠버네티스(Kubernetes) 통합 도커 데스크톱을 스테이블 채널에 릴리즈

🗞 새소식, 2018-08-13 - 2018년 7월 25일 도커(Docker)에서는 쿠버네티스(Kubernetes) 통합 도커 데스크탑을 스테이블 채널로 릴리즈하였습니다.

다시 보는 2018 한국의 주요 개발 / 테크 컨퍼런스들

🗒 기사, 2018-12-21 - 올해도 국내에서 다양한 컨퍼런스들이 열렸습니다. 그 중에서 영상으로 다시 보기 가능한 컨퍼런스들을 소개합니다. AWS 서울 서밋 2018, 넥슨 개발자 컨퍼런스, 오픈인프라 데이, 파이콘, if (kakao) dev, 업비트 개발자 컨퍼런스, 데뷰, 구글 클라우드 서밋, 프론트엔드 컨퍼런스 코리아, 렛츠 스위프트, AWS 데브데이.