레이블이 tmux인 게시물을 표시합니다. 모든 게시물 표시
레이블이 tmux인 게시물을 표시합니다. 모든 게시물 표시

zellij multiplexer

# terminal multiplexer 로 tmux 만 사용하다 rust 로 만든 zellij 로 변경했는데, 역시 기대 이상으로 대만족!
# 더이상 tmux 가 생각나지 않을 정도로 좋다.

# 설치
# mac
brew install zellij
# cargo
cargo install zellij

# 자주 사용하는 단축키
# 기본적으로 아래 화면에 친절하게 단축키 설명이 있어 쉽게 사용할 수 있다.
# ctrl+b : 기본적인 tmux split(ctrl+", ctlr+%)등을 사용할 수 있다.
# ctrl+g : zellij 단축키 입력 비활성화(토글), 예를 들어 ctlr-t 로 fzf 단축키를 사용하고 싶은데 zellij 의 ctrl-t(tab 선택) 명령이 우선 작동하는데, ctrl-g 를 zellij 단축키를 비활성화한후 ctrl-t 를 하면 fzf ctrl-t 커맨드를 실행할 수 있다.
# ctrl-p : pane 선택
# ctrl-p, n : 새 pane 생성 
# ctrl-p, w : floating pane 생성, floating/일반 pane 사이 전환(토글)
# ctrl-p, x : 현재 pane 종료
# ctrl-p, z : pane frame 보이기/감추기(토글)
# ctrl-t, n : 새 tab 생성
# ctrl-t, x : 현재 tab 종료(tab 에 속한 모든 pane 종ㄹ)
# ctrl-t, ctrl-s : tab 에 속한 모든 pane 에 sync 로 동시 입력 가능(토글)
# ctrl-h, 방향키 또는 hjkl(vim방향키) : pane 을 특정 방향으로 이동
# ctrl-n, 방향키 또는 hjkl(vim방향키) : pane 크기를 특정 방향으로 줄이거나 늘이기
# ctrl-n, - : pane 크기를 전체적으로 줄이기
# ctrl-n, + : pane 크기를 전체적으로 늘이기
# alt-p : 적절한 위치와 크기로 pane 생성
# alt-h : 왼쪽 pane 으로 이동(선택), 다른 tab 의 pane 까지 이동 가능
# alt-l : 오른쪽 pane 으로 이동(선택), 다른 tab 의 pane 까지 이동 가능
# alt-k : 위 pane 으로 이동(선택)
# alt-j : 아래 pane 으로 이동(선택)

# 설정 파일
# 기본 설정 파일을 생성해 ~/.config/zellij/config.yaml 로 위치시키면 된다.
# config.yaml 수정으로 단축키 설정을 변경할 수 있다.
mkdir -p ~/.config/zellij/
zellij setup --dump-config > ~/.config/zellij/config.yaml

# 테마 변경
mkdir -p ~/.config/zellij/themes
https://github.com/zellij-org/zellij/tree/main/example/themes 에서 테마 마들을 다운로드 받는다.
~/.config/zellij/config.yaml > theme 필드값을 수정

byobu 로 tmux 를 좀더 이쁘고 쉽게 쓰기

# byobu
# (뵤부?, 일본어로 '병풍'이라는 뜻이다.)
# (만든 사람은 구글아저씨 https://github.com/dustinkirkland/byobu)
# 는 tmux 또는 screen 을 좀더 쉽고 이쁘게 해주는 프로그램이다.
# 맥에서 설치(yum, apt 등에서도 설치 가능)
brew install byobu

# 기본 키바인딩
F2 - Create a new window
F3 - Move to previous window (alt + left)
F4 - Move to next window (alt + right)
F5 - Reload profile
F6 - Detach from this session
F7 - Enter copy/scrollback mode
F8 - Re-title a window
F9 - Configuration Menu
F12 -  Lock this terminal
shift-F2 - Split the screen horizontally
ctrl-F2 - Split the screen vertically
shift-F3 - Shift the focus to the previous split region
shift-F4 - Shift the focus to the next split region
shift-F5 - Join all splits
ctrl-F6 - Remove this split
ctrl-F5 - Reconnect GPG and SSH sockets
shift-F6 - Detach, but do not logout
alt-pgup - Enter scrollback mode
alt-pgdn - Enter scrollback mode
Ctrl-a $ - show detailed status
Ctrl-a R - Reload profile
Ctrl-a ! - Toggle key bindings on and off
Ctrl-a k - Kill the current window
Ctrl-a ~ - Save the current window's scrollback buffer

# 자세한 사용방법은 man page 를 참고하자.
man byobu

htop vtop bpytop 사용

# nix 계열에서 프로세스 모니터링을 위해 기본적으로 사용된 top 프로그램들

# C 로 만든 htop
# http://hisham.hm/htop/index.php
# https://github.com/hishamhm/htop
# 설치
# centos
yum install htop

# ubuntu
apt-get install htop

# mac
brew install htop

# h : help
# t : tree view
# p : program path
# q : quit
# P : sort by CPU
# M : sort by MEM
# T : sort by TIME
# space : tag process



# javascript 로 만든 vtop
https://parall.ax/vtop
https://github.com/MrRio/vtop
# 설치 (실행 후 업데이트 버전이 있으면 자동 업데이트)
sudo npm install -g vtop
# 실행시 옵션으로 테마를 적용할 수 있다. ex) vtop --theme monokai


# bpytop
https://github.com/aristocratos/bpytop
# python 으로 만들어졌고 cpu 온도까지 표시되는 가장 최신 스타일의 top 프로그램이다.
# 설치
pip3 install bpytop --upgrade
brew install hacker1024/hacker1024/coretemp
brew install osx-cpu-temp

# osx-cpu-temp 는 cpu 통 온도 하나만 표시하는데,
# 코어별 온도가 표시되는 coretemp 설치하면 사용하지 않아 설치할 필요 없다.
# 그런데 맥북에서 coretemp 실행하면 0 번째 코어를 찾지 못하는 문제가 있다.
# imac 에선 코어별 SMC 센서 코드가 TCOC, TC1C .. 로 0부터 시작하지만
# macbook 에선 TC1C, TC2C,.. 로 1부터 시작하는 차이가 있다.
# 그리고 CPU 전체 온도를 imac 에선 CPU DIE 로 TC0D 로 사용하지만
# macbook 에선 CPU Proximity 로 TC0P 로 사용한다.
# SMC 코드 참고 https://logi.wiki/index.php/SMC_Sensor_Codes
# 이 때문에 맥북에선 cpu core 별 온도가 표시되지 않는다.
# 해당 coretemp 코드 수정해서 PR 날린 상태다.
# 아래처럼 기존 패키지는 삭제하고 repo 로 빌드하고 복사해 사용하면 온도가 표시된다.
brew uninstall osx-cpu-temp coretemp 
git clone https://github.com/ysoftman/coretemp && cd ./coretemp && make && ./coretemp && cp -v ./coretemp /usr/local/bin

# macbookpro(mbp) coretemp 수정 PR 생성했는데 머지됐다.
# 그냥 coretemp 사용하면 된다.ㅎ

# M : 메뉴설정에서 테마 변경등을 변경할 수 있다.


# tmux 로 4개의 top 을 띄워본 화면
# 0 기본 top
# 1 htop
# 2 vtop
# 3 bpytop


# btm
# 설치
brew install bottom
# rust 로 만들었고, usage 를 그래프로 보고 싶을때 bpytop, vtop 보다 빠르게 로딩돼 좋다.

# ytop
# 설치
brew install ytop
# rust 로 만들었고, btm 처럼 빠르다.

# btop
# 설치
brew install btop
# c++ 로 만들었고 bpytop과 UI가 비슷하다.

Linux 터미널 멀티플렉서 Tmux

Tmux (terminal multiplexer)는 하나의 터미널을 다수의 pane(영역)으로 구분하여 프로그램을 실행하고 각 프로그램 사이를 쉽게 이동할 수 있는 툴이다. 보통을 screen 툴을 사용하거나 gui 환경에선 터미널을 여러개의 탭으 생성하여 사용하는데, 한화면에서 여러개의 프로그램으로 돌리며 모니터링할 수 있는데는 tmux 가 좋다.
공식 홈페이지 http://tmux.sourceforge.net/

# Ubuntu 에서 설치
sudo apt-get install tmux

# CentOS 에서 설치
sudo yum install tmux

# MacOS 에서 설치
brew install tmux


#####


# tmux 명령어/단축키
tmux -V # 버전, 버전에 따라 명령이 조금 달라질 수 있다.
tmux # 실행(새로운 세션으로 터미널 열림)
tmux new-session # 실행(새로운 세션으로 터미널 열림)
tmux list-commands # tmux 명령어 보기
tmux ls # 열려 있는 세션 리스트
tmux kill-server # 모든 세션(tabs,pane)종료
tmux list-windows # tab(window) 리스트
tmux list-panes # pane 리스트
tmux a # 세션 붙이기(attach)
ctrl+b d # 세션 떼기(detach)

ctrl+b c # 새 window(tab) 생성
ctrl+b w # tab 리스트 보기 및 선택
ctrl+b n # 다음 tab 이동
ctrl+b p # 이전 tab 이동
ctrl+b f # tab 찾기
ctrl+b 번호  # tab 로 이동
ctrl+b , # 현재 tab 이름 변경
ctrl+b & 또는 exit # 현재 tab 종료

ctrl+b % # 수직으로 pane 나누기
ctrl+b " # 수평으로 pane 나누기
ctrl+b q 번호선택 # pane 번호 보기 및 번호로 pane 선택
ctrl+b 방향키 # pane 이동(ctrl+b 후 방향키로 계속 이동 가능)
ctrl+b spacebar # pane 레이아웃 변경
ctrl+b alt+방향키 # pane 크기 변경
ctrl+b x 또는 exit # 현재 pane 종료

ctrl+b m 현재 pane mark/unmark
ctrl+b { 현재 선택한 pane 과 위쪽 pane 위치 교환
ctrl+b } 현재 선택한 pane 과 아래쪽 pane 위치 교환


ctrl+b : # 명령 프롬프트 사용
ctrl+b t # 현재 시간 보기
ctrl+b ? # 설정된 단축키 보기

# copy & paste
# setw -g mode-keys vi 로 vi 단축키를 활성화 선행
ctrl+b [ # copy mode 시작
spacebar # 블럭지정 시작, 방향키로 복사할 블럭 지정
enter # 복사
ctrl+b ] # 붙이기

# find
ctrl+b [ # copy mode 시작
/ # 찾을 문자 입력, vi 찾기와 같음

# 수직분할 후 수평분할된 3개의 pane 을 가진 세션 시작
tmux new-session \; \
split-window -v \; \
split-window -h \;
attach


#####


# tmux 시작시 로딩되는 설정파일
# 명령 프롬프트로에서도 사용
vi ~/.tmux.conf
# -g global option
set -g display-panes-time 5000 # 5초 동안 pane 숫자 보이기

# 마우스 사용 활성화
# tmux 1.9 이전
#set -g mode-mouse on
#set -g mouse-resize-pane on
#set -g mouse-select-pane on
#set -g mouse-select-window on
# tmux 1.9 이후
set -g mouse on

# setw -> set window
setw -g mode-keys vi # vi 단축키 사용(디폴트는 emacs)

#setw synchronize-pane on # 모든 panes 에 동시 입력 활성화
#setw synchronize-pane off # 모든 panes 에 동시 입력 해제

# ctrl+b i panes 동시 입력 활성화 단축키
# ctrl+b I panes 동시 입력 비활성화 단축키
bind i setw synchronize-panes on
bind I setw synchronize-panes off

# 기본 prefix(ctrl+b) 대신 ctrl+a 사용하기
#set -g prefix C-a
#bind C-a send-prefix
#unbind C-b


# 여러개의 pane 생성하고(tiled 레이아웃 사용) 각 pane 에 명령 실행하기
# 현재 창을 계속 split-window 하면 공간이 없다는 에러 발생하기 때문에
# select-pane 으로 활성 창을 옮겨가며 분할해야 한다.
unbind S
bind S \
split-window -v\; \
split-window -v\; \
split-window -v\; \
split-window -v\; \
select-pane -t 00\; \
split-window -h\; \
split-window -h\; \
split-window -h\; \
select-pane -t 04\; \
split-window -h\; \
split-window -h\; \
split-window -h\; \
select-pane -t 08\; \
split-window -h\; \
select-layout tiled\;

# 위에 생성한 창(pane)들의 쉘 프롬프트가 늦게 뜨면 send-key 전달이 되지 않아
# 창들의 쉘 프롬프트가 완료된 후 접속하는것이 좋다.
unbind s
bind s \
select-pane -t 00\; send-keys 'echo ysoftman0' Enter \; \
select-pane -t 01\; send-keys 'echo ysoftman1' Enter \; \
select-pane -t 02\; send-keys 'echo ysoftman2' Enter \; \
select-pane -t 03\; send-keys 'echo ysoftman3' Enter \; \
select-pane -t 04\; send-keys 'echo ysoftman4' Enter \; \
select-pane -t 05\; send-keys 'echo ysoftman5' Enter \; \
select-pane -t 06\; send-keys 'echo ysoftman6' Enter \; \
select-pane -t 07\; send-keys 'echo ysoftman7' Enter \; \
select-pane -t 08\; send-keys 'echo ysoftman8' Enter \; \
select-pane -t 09\; send-keys 'echo ysoftman9' Enter \; \
select-pane -t 10\; send-keys 'echo ysoftman10' Enter \; \
select-pane -t 11\; send-keys 'echo ysoftman11' Enter \;

# 별도 설정 파일 읽기
# source-file ~/workspace/a/a.conf;
# 별도 설정 파일이 존재하면 읽기
if-shell "test -f ~/workspace/a/a.conf" "source ~/workspace/a/a.conf"

# tmux 다시 읽기
# display-message (alias: display) 상태바에 메시지 출력  -p 사용하면 stdout에 출력
bind r source-file ~/.tmux.conf \; display "ysoftman ~/.tmux.conf loaded"

# 현재 바인딩되 있는 모든 단축키 확인
tmux list-keys


#####


iterm2 에서 tmux의 내용을 마우스 드래그해서 copy and paste 가 안될때는
iterm2 -> preferences -> gerneral -> applications in terminal my access clipboard 활성화 (아래 그림 참고)



#####


# .bashrc, .zshrc 에 설정시
# TMUX 변수 값을 확인해 중복 실행을 막는다.
if [ -z "$TMUX" ]; then exec tmux; fi