GNU SCREEN 빠른 참조
세션, 윈도우, 분할, 복사 모드, 공유
세션 관리
세션 생성 및 목록
screen # 이름 없는 새 세션
screen -S work # "work"라는 이름의 새 세션
screen -ls # 모든 세션 목록
screen -list # -ls와 동일
세션 명령어
| screen -S name | 이름 있는 새 세션 시작 |
| screen -r name | 분리된 세션에 재연결 |
| screen -x name | 이미 연결된 세션에 공유 연결 |
| screen -d name | 원격 세션 분리 |
| screen -d -r name | 다른 곳에서 분리 후 여기서 재연결 |
| screen -D -RR | 강제 분리 후 재연결 (적극적) |
| screen -ls | PID와 함께 모든 세션 목록 |
| screen -wipe | 죽은 세션 정리 |
윈도우
윈도우 기본
| Ctrl-a c | 새 윈도우 생성 |
| Ctrl-a n | 다음 윈도우 |
| Ctrl-a p | 이전 윈도우 |
| Ctrl-a 0-9 | 번호로 윈도우 전환 |
| Ctrl-a " | 모든 윈도우 목록 (대화형) |
| Ctrl-a ' | 이름/번호로 윈도우 전환 |
| Ctrl-a A | 현재 윈도우 이름 변경 |
| Ctrl-a k | 현재 윈도우 종료 |
윈도우 관리
| Ctrl-a w | 상태 표시줄에 윈도우 목록 표시 |
| Ctrl-a Ctrl-a | 마지막 두 윈도우 간 전환 |
| Ctrl-a N | 윈도우 번호와 이름 표시 |
| exit / Ctrl-d | 윈도우 닫기 (쉘 종료) |
분할 및 영역
분할 명령어
| Ctrl-a S | 수평 분할 (위/아래) |
| Ctrl-a | | 수직 분할 (왼쪽/오른쪽) |
| Ctrl-a Tab | 다음 영역으로 포커스 이동 |
| Ctrl-a X | 현재 영역 닫기 |
| Ctrl-a Q | 현재 영역 제외 모두 닫기 |
영역 워크플로
Ctrl-a S # 수평 분할
Ctrl-a Tab # 새 영역으로 이동
Ctrl-a c # 영역에서 윈도우 생성
Ctrl-a :resize 20 # 영역을 20줄로 설정
복사 모드
스크롤백 및 복사
| Ctrl-a [ | 복사/스크롤백 모드 진입 |
| Space | 선택 시작/종료 (복사 모드에서) |
| Enter | 선택 복사 후 복사 모드 종료 |
| Ctrl-a ] | 복사한 텍스트 붙여넣기 |
| h/j/k/l | 커서 이동 (복사 모드에서 vi 키) |
| Ctrl-u / Ctrl-d | 반 페이지 위/아래 스크롤 |
| / or ? | 앞/뒤로 검색 |
| Esc | 복사 모드 종료 |
복사 워크플로
Ctrl-a [ # 복사 모드 진입
Space # 시작 표시 (먼저 이동)
Space # 끝 표시 + 복사 (먼저 이동)
Ctrl-a ] # 현재 윈도우에 붙여넣기
분리 및 재연결
분리
| Ctrl-a d | 현재 세션 분리 |
| Ctrl-a D D | 분리 후 로그아웃 |
| Ctrl-a z | screen 일시 중단 (Ctrl-Z처럼) |
| screen -d PID | PID로 원격 세션 분리 |
재연결
screen -r # 재연결 (세션이 하나인 경우)
screen -r work # 이름으로 재연결
screen -r 12345 # PID로 재연결
screen -d -r work # 다른 터미널에서 세션 빼앗기
지속적인 워크플로
# 장시간 작업 시작, 분리, 나중에 재연결
screen -S build
make -j4 all # 빌드 시작
Ctrl-a d # 분리, 귀가
screen -r build # 나중에 재연결
공유
다중 사용자 모드
# 호스트가 다중 사용자 활성화
Ctrl-a :multiuser on
Ctrl-a :acladd alice # 사용자 alice에게 접근 권한 부여
# Alice가 연결
screen -x hostuser/sessionname
접근 제어
| :multiuser on | 다중 사용자 모드 활성화 |
| :acladd user | 사용자에게 전체 접근 권한 부여 |
| :aclchg user -w '#' | 사용자를 읽기 전용으로 설정 (모든 윈도우) |
| :acldel user | 사용자 접근 권한 제거 |
| screen -x user/sess | 공유 세션에 연결 |
설정
~/.screenrc 필수 설정
startup_message off # 시작 화면 건너뛰기
defscrollback 10000 # 스크롤백 버퍼 줄 수
hardstatus alwayslastline
hardstatus string '%{gk}%H %{wk}%?%-Lw%?%{bw}%n*%f %t%{wk}%?%+Lw%?'
shell -$SHELL # 로그인 쉘 사용
유용한 설정
| startup_message off | 시작 메시지 숨기기 |
| defscrollback N | 스크롤백 버퍼 설정 (기본 100) |
| escape ^Bb | 접두키를 Ctrl-b로 변경 |
| shelltitle '$ |bash' | 윈도우 제목 자동 설정 |
| caption always '%n %t' | 항상 윈도우 정보와 함께 캡션 표시 |
| autodetach on | 연결 끊김 시 자동 분리 (기본 활성) |
| vbell on | 청각 대신 시각적 벨 사용 |
일반 패턴
개발 환경 설정
# .screenrc에서 윈도우 자동 생성
screen -t editor 0 vim
screen -t server 1 python -m http.server
screen -t shell 2 bash
select 0 # 에디터 윈도우에서 시작
로깅 및 모니터링
Ctrl-a H # screenlog.N에 로깅 토글
Ctrl-a M # 활동을 위한 윈도우 모니터링
Ctrl-a _ # 침묵을 위한 윈도우 모니터링
빠른 참조
| Ctrl-a ? | 모든 키 바인딩 표시 |
| Ctrl-a :help | 내장 도움말 |
| Ctrl-a :source file | 설정 파일 로드 |
| Ctrl-a :screen cmd | 새 윈도우에서 명령 실행 |
| Ctrl-a :quit | 모든 윈도우 종료 및 세션 종료 |