시작하며

터미널 작업자에게 TMUX는 축복 같은 도구다. TMUX를 쓰면 터미널 작업의 효율성이 극적으로 높아진다.

  1. 우선 어떤 작업이 오래 걸릴 경우 그 작업이 끝날 때까지 멍하니 기다릴 필요가 없다. 즉시 다른 Window나 Pane을 열고 다른 작업을 시작할 수 있다.
  2. 또 어떤 작업을 하다 사정이 생겨 터미널 접속을 끊어야 할 경우 기존 작업이 중단되는 것을 걱정하지 않아도 된다. 터미널을 끊어도 하던 작업이 중단되지 않는다 (다시 말해 Session이 유지된다). 다음에 다시 접속해서 하던 작업을 이어 할 수 있다.

 

설치방법

설치 방법도 쉽다. 리눅스 사용자라면 표준 패키지 매니저를 이용해서 설치하면 된다.

  • (우분투라면) sudo apt-get install tmux
  • (CentOS라면) sudo yum install tmux

 

사용방법

CTRL-b 키가 TMUX의 기능을 부르는 핵심 키다.

 

0. TMUX 실행

$ tmux

 

1. Window 만들기, 이동하기

  • window 만들기 (create window) : CTRL-b, c
  • window 이동하기 (next window) : CTRL-b, n

 

2. Pane 나누기, 이동하기

  • 가로 pane 나누기: CTRL-b, "
  • 세로 pane 나누기: CTRL-b, %
  • pane 이동하기: CTRL-b, 화살표

 

3. 세션 끊기, 이어하기

  • 세션 끊기 (detach) : CTRL-b, d
  • 세션 이어하기 (attach) : tmux a

 

터미널 접속만 가능한 소박한 환경에서도 TMUX와 VIM만 있으면 충분히 많은 일을 할 수 있다.

터미널 만세!

 

Posted by ingeeC
,

0. 시작하며

 

VIM은 역사와 전통의 훌륭한 도구다.

지금 VIM을 쓰는 사람들은 앞으로도 계속 VIM을 사용할 것이다. 1970년대 이후 많은 사람들이 그래온 것처럼.

* VI (브이아이, 1976~)와 VIM (빔, 1991~)은 사실상 같은 도구다. 굳이 구별할 필요 없다.

 

VIM은 어디서나 쓸 수 있다.

VIM이 없는 OS는 없다. 만약 VIM조차 없는 환경이라면 다른 어떤 도구도 사용할 수 없을 것이다. 그만큼 VIM은 요구사항이 낮다 (콘솔 입출력만 가능하면 된다). 최악의 환경에서도 VIM은 실행된다.

 

그리고 VIM은 익숙해지면 편하다.

이건 양날의 검인데, 최소한의 학습 장벽을 넘지 않으면 전혀 쓸 수 없다. VIM을 켜고 끄지 못해 당황했던 기억이 누구에게나 있을 것이다. VIM은 마우스가 없던 시절에 만들어진 도구다. 그리고 두손의 움직임을 최소화하는 것이 VIM의 철학이다. 그래서 일단 학습 장벽을 넘어 사용법이 손에 익숙해지면 다른 어떤 도구보다 적은 동작으로 많은 것을 할 수 있다 (다른 어떤 도구보다 생산성이 높다).

 

VIM 최초의 학습 장벽은 이 글로 넘자. 좋은 글을 멋지게 번역했다.

[번역] Vim 정복하기: 4주 계획

원글은 How To Learn Vim: A Four Week Plan

윗 글을 읽고, 일주일만 꾸준히 vimtutor를 수련해서, VIM에서

1) h,j,k,l 키 만으로 이동할 줄 알고,

2) 원하는 문자열을 찾고 바꿀 줄 안다면

최초의 문턱을 아주 훌륭하게 넘은 셈이다. 이 정도만 알아도 VIM의 생산성을 체감할 것이다.

 

이 글은

1) VIM에서 윈도를 분할하고 쓰는 법,

2) VIM에서 비주얼블록을 선택하고 쓰는 법,

3) VIM 플러그인을 검색하고 쓰는 법을 소개하려고 한다.

 

1. VIM 윈도

 

VIM은 가로/세로로 윈도를 나누어 쓸 수 있다. CTRL-w 가 윈도 기능을 부르는 핵심 키다.

* 윈도 세로 분할 - CTRL-w, v

* 윈도 가로 분할 - CTRL-w, s

* 윈도 이동 (다음 윈도로) - CTRL-w, w

* 윈도 이동 (h,j,k,l 방향으로) - CTRL-w, 방향키 [h | j | k | l]

* 윈도 닫기 - (명령줄에서) :q

 

VIM 윈도 기능 예시를 동영상으로 한땀한땀 캡쳐했다. 시나리오는 다음과 같다.

VIM 열기 -> CTRL-w, v 키입력으로 윈도 세로 나누기

-> :e FILENAME 명령으로 나뉘어진 윈도에서 새 파일 열기

-> CTRL-w, s 키입력으로 윈도 가로 나누기

-> :e FILENAME 명령으로 나뉘어진 윈도에서 새 파일 열기

-> CTRL-w, w 키입력으로 윈도 이동하기 (6번 반복)

-> CTRL-w, l 키입력으로 오른쪽 윈도로 이동하기

-> CTRL-w, h 키입력으로 왼쪽 윈도로 이동하기

-> CTRL-w, j 키입력으로 아래쪽 윈도로 이동하기

-> CTRL-w, k 윈도로 위쪽 윈도로 이동하기

-> :q 명령으로 윈도 닫기 (모든 윈도를 닫을 때까지 반복)

 

2. 비주얼 블록

 

비주얼 블록은 간단하지만 무척 유용한 기능이다. V (대문자 v) 가 Visual Block을 부르는 핵심키다.

* 라인 단위 블록 선택 - V (대문자 v) + 방향키 [j | k]

* 블록 해제 - ESC

 

블록을 선택한 상태에서 해당 블록만을 대상으로 문자열을 검색/치환할 수 있다.

예를 들어 (블록 밖에 있는 "abc"는 그대로 두고) 블록 안에 있는 "abc"를 "def"로 검색/치환하려면 블록을 선택한 상태에서 다음과 같이 입력한다.

(명령줄에서) :s/abc/def/g

 

블록을 선택한 상태에서 해당 블록을 대상으로 일괄 작업을 실행할 수 있다.

예를 들어 해당 블록 앞에 "//" 문자열을 삽입해서 블록을 c/c++ 주석문으로 변환하려면 다음과 같이 입력한다.

(명령줄에서) :norm i//

 

그러면 norm 뒤에 나열된 키 입력이 블록 안의 각 라인에 일괄 적용 된다. 이렇게 변환된 주석문을 다시 일반문으로 변환하려면 (각 라인 첫머리의 "//" 문자열을 제거하려면, 다시 블록을 정의하고 다음과 같이 입력한다.

(명령줄에서) :norm xx

 

역시나 비주얼 블록 기능 예시를 한땀한땀 캡쳐했다. 시나리오는 다음과 같다.

VIM 열기 -> 비주얼 블록 선택/해제하기 (3회 반복)

-> :s/a/b/g 명령으로 문자열 바꾸기

-> norm i// 명령으로 라인 첫머리에 "// " 문자열 넣기

-> u 키입력으로 작업취소하기 (2회 반복)

-> :q 명령으로 VIM 닫기

 

3. VIM 플러그인

 

새로운 개발 머신을 갖게 되면 자기만의 VIM 사용 환경을 새로 설정해야 한다. 이때 사용하는 것이 ~/.vimrc 설정 파일이다. 필자의 ~/.vimrc 파일을 샘플로 링크에 걸어 둔다. 참조가 되면 좋겠다. 여기서 특기할만한 것은 VIM 플러그인 매니저 Vundle 이다. Vundle  이외에 다른 플러그인 매니저들도 많다. 어떤 것을 쓸지는 취향의 문제다. 필자는 처음 만난 플러그인 매니저가 Vundle이어서 Vundle을 쓴다.

 

VimAwesome (https://vimawesome.com/)이라는 훌륭한 VIM 플러그인 검색 사이트가 있다. 이 사이트를 이용하면 원하는 VIM 플러그인을 찾을 수 있고 해당 플러그인의 설치/설정/사용 방법을 알 수 있다. VimAwesome 사이트는 (Vundle 포함) 모든 VIM 플러그인 매니저들을 위한 알맞은 설정 방법을 안내해준다.

 

VIM 만세!

 

Posted by ingeeC
,

몇 주 전 리눅스 재단에서 주관하는 CHFA 시험에 간신히 합격함 (턱걸이). 간단한 후기를 공유함.

  • Empty Desk를 요구 -- 장소에 대한 검사가 까다로움. 시험 보기 전에 응시자가 있는 공간을 노트북 카메라로 비춰줄 것을 요구. 책상에 아무 것도 없어야함. 노트북을 빙빙 돌려 가며 공간을 체크하는 데, 약 15분 이상 소요. 약간 기분이 상할 정도.
  • 여권 지참 -- 노트북 카메라로 신분증을 검사. 여권이 좋음. 운전 면허증을 보여줬더니 그건 안된다고.
  • 시험 형태 -- 실제 서버에 ssh 접속해서 HLF Admin 과제를 수행하는 방식 (14문제. 커트라인은 62%).
  • 준비 조언 -- HLF 튜토리얼 중 "Building Your First Network", "Adding an Org to a Channel"을 숙지해야 함. 아울러 Fabric CA User's Guide도 숙지 필요.
  • 오픈북 -- 시험 중 Fabric Document 사이트와 Fabric CA User's Guide 사이트는 열람과 카피&페이스트를 허용. 그외 다른 사이트와 파일은 참조 불가.

자세한 자료는 Linux Foundation Certification 사이트를 참조. HLF 사용법을 점검/요약하기에 좋은 방법이라고 생각함.

Posted by ingeeC
,

VIM의 Netrw 디렉토리 화면에서 PWD 설정 키 변경 (c --> cd)

 

VIM 버전을 올렸더니 (version 8.2), netrw 디렉토리 화면에서 현재 디렉토리를 지정하는 명령이 바뀌었다.

 

현상

netrw 디렉토리 화면에서 'c' 키를 누르면, 기대했던 것처럼 현재 디렉토리(PWD)가 변경되지 않고 Cannot make changes, 'modifiable' is off 라는 에러 메시지가 표시된다 (엄밀하게 말하면 'c' 키를 누르고나서 다른 키를 누를 때 에러가 발생).

" ============================================================================
" Netrw Directory Listing                                        (netrw v168)
"   /tmp
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:special
" ==============================================================================
../
./
.ICE-unix/
.Test-unix/
.X11-unix/
.XIM-unix/
.font-unix/
go-build130920707/
go-build151298825/
go-build497434673/
go-build528811745/
go-build792304239/
go-build882984587/
hsperfdata_root/
systemd-private-4187beacd3f54ff8a36d04d8588cf77e-ntpd.service-xnhf54/
tmux-1801/
telegraf_command_time.touch
~
~
~
~
~
~
~
~
E21: Cannot make changes, 'modifiable' is off                                               8,1           All

 

 

원인 및 조치

VIM Netrw 화면에서 "현재 디렉토리 (PWD)" 바꾸는 명령어가 c 키에서 c,d 키로 바뀌었다 (c 키와 d 키를 순서대로 입력). PWD를 변경하기 위해 c 키 대신 cd 키를 사용하면 된다.

 

Reference

정말 이렇게 저렇게 구글링하다 포기하려던 참에 VIM 의 netrw-quickhelp 문서에서 원인을 발견함 (Netrw 화면에서 <F1> 키를 누르면 나오는 도움말 문서).

netrw-c : This map's name has been changed from "c" to cd (see netrw-cd).

 

(먼지 팁, 끝)

Posted by ingeeC
,
Docker 는 기능 뿐 아니라 가이드 문서도 꾸준히 버전업 하고 있음.
년초를 맞아 Docker 가이드 문서를 다시 살펴볼 수 있는 기회가 있었음.
눈에 띈 내용을 요약함

 

Docker 어플리케이션 개발자를 위한 베스트 프랙틱스

출처: https://docs.docker.com/develop/dev-best-practices/

어플리케이션 데이터를 어디에 저장해야 하나

  • 어플리케이션 데이터를 Docker Storage (컨테이너에 할당된 디폴트 파일 시스템)에 저장하지 마라
  • 대신, 도커 Volumes 를 사용하라
  • 만약 상황이 적절하다면, 도커 Bind mount 도 괜찮다
  • Swarm Service 를 운영할 경우, 민감한 데이터는 Secrets 를 이용하라 (민감하지 않은 데이터는 Configs 를 이용하라)

 

개발환경과 운영환경의 차이

개발환경 운영환경
소스코드를 Bind mount 에 저장해서 이용하라 소스코드를 Volumes 에 저장해서 이용하라
호스트 사이의 시간 오차에 신경 쓸 필요 없다 모든 도커 호스트에 NTP 서버를 설정해서 시간을 맞춰 운영하라

 

도커 네트워크 드라이버 요약

출처: https://docs.docker.com/network/

도커 네트워크 드라이버 요약

Bridge network * 1개 호스트에서 여러개의 컨테이너들 사이의 통신이 필요할 때 적절한 선택
Host network

* 컨테이너 네트워크와 호스트 네트워크가 격리될 필요가 없을 때 적절한 선택

* 네트워크 성능 최적화가 필요할 때 적절한 선택

Overlay network

* 여러개 호스트들 사이에서 컨테이너들 사이의 통신이 필요할 때 적절한 선택

* 여러개의 컨테이너들을 Swarm Service 로 묶어서 운영할 때 적절한 선택

Macvlan network

* VM 방식에서 컨테이너 방식으로 이전할 때 고려할 수 있는 선택

* 컨테이너에 고유한 MAC 주소를 할당함

3rd party network plugins * 기타 다양한 네트워크 플러그인 사용 가능함

네트워크 성능 최적화가 필요한 Hyperledger Fabric 운영의 경우, Host network 모드 사용을 검토해볼만 함

 

어플리케이션 데이터 다루기

출처: https://docs.docker.com/storage/

  • Volumes : 어플리케이션 데이터를 도커가 관리하는 파일시스템 영역에 저장 (가장 권장하는 방식)
  • Bind mounts : 어플리케이션 데이터를 호스트 파일시스템에 저장 (조건만 맞는다면 괜찮은 방식)
  • tmpfs : 어플리케이션 데이터를 호스트 메모리에(만) 저장 (데이터를 호스트 파일시스템에 절대 저장하지 않으므로 기밀성이 좋다)

 

기타 팁

편리한 docker prune 명령 (컨테이너, 네트워크, 이미지, 캐시와 함께 Volume 까지 한꺼번에 정리)

$ docker system prune --volumes
WARNING! This will remove: 
        - all stopped containers 
        - all networks not used by at least one container 
        - all volumes not used by at least one container 
        - all dangling images 
        - all build cache 
Are you sure you want to continue? [y/N] y

 

(이상)

Posted by ingeeC
,