나는 manpage를 적극 옹호하려고 했음. 대부분의 오픈소스 manpage는 품질이 높고, 일부는 정말 뛰어남
하지만 man 도구 자체에는 문제가 있음. 예를 들어 openssh 클라이언트의 ~? 같은 escape 문법을 찾으려 했는데, manpage에서 검색이 안 됨
이유는 man이 ~ 문자를 이상한 유니코드 틸드로 바꿔버려서 grep이 불가능해짐. - 문자도 마찬가지로 변환되어 검색이 안 됨
이건 명령줄 도구의 문서화로서는 치명적임. 이런 변환 기능은 기본값으로 꺼져 있어야 함
문자 변환 문제는 모르겠지만, ctrl-r을 눌러 문자 그대로 검색할 수 있음 (/<ctrl-r>~?)
Debian 기본 pager인 less에서는 잘 작동함
man -E ascii 옵션으로 해결했음. 내 환경은 Cygwin 3.6.6이라 배포판 차이일 수도 있음
neovim을 pager로 쓰면 ~? 검색이 잘 됨. 단, 정규식 escape(\~?)를 알아야 함
macOS와 CentOS에서도 \~\? 검색이 잘 됨
나는 ~. 단축키는 오래 써왔지만, 도움말 메뉴는 몰랐음 ~를 두 번 입력하면 실제 틸드 문자를 보낼 수 있고, 일반 세션에서는 첫 문자로 입력되지 않는 한 escape로 인식되지 않음
즉, ~가 줄의 첫 문자이자 새 줄 직후일 때만 escape로 작동함. UI 설계가 꽤 세심함
젊은 독자들을 위해 설명하자면, 터미널의 echo 모드에서는 백스페이스가 실제로 입력 버퍼를 지우지 않음
그래서 ls ~/^?^?^?^?^?~/a.out 같은 출력이 나올 수 있음. SSH는 화면이 아니라 입력 스트림을 감시함
단점은 세션이 멈췄을 때 ~.로 종료하려면 Enter를 먼저 눌러야 함, 이게 서버로 전달될 수도 있음
나는 SSH를 15년 넘게 써왔지만 이런 escape 시퀀스는 처음 알았음
다음에 세션이 멈추면 ~.을 꼭 써볼 생각임. 터미널을 닫는 것보다 훨씬 낫겠음
SSH 연결이 자주 끊긴다면 CGNAT의 짧은 TCP timeout 때문일 수 있음
VPN이나 Tailscale을 쓰면 해결 가능하고, 아니면 tcp_keepalive 파라미터를 조정해 연결을 유지할 수 있음
예시 설정:
Hacker News 의견들
나는 manpage를 적극 옹호하려고 했음. 대부분의 오픈소스 manpage는 품질이 높고, 일부는 정말 뛰어남
하지만
man도구 자체에는 문제가 있음. 예를 들어 openssh 클라이언트의~?같은 escape 문법을 찾으려 했는데, manpage에서 검색이 안 됨이유는 man이
~문자를 이상한 유니코드 틸드로 바꿔버려서 grep이 불가능해짐.-문자도 마찬가지로 변환되어 검색이 안 됨이건 명령줄 도구의 문서화로서는 치명적임. 이런 변환 기능은 기본값으로 꺼져 있어야 함
ctrl-r을 눌러 문자 그대로 검색할 수 있음 (/<ctrl-r>~?)less에서는 잘 작동함man -E ascii옵션으로 해결했음. 내 환경은 Cygwin 3.6.6이라 배포판 차이일 수도 있음neovim을 pager로 쓰면~?검색이 잘 됨. 단, 정규식 escape(\~?)를 알아야 함\~\?검색이 잘 됨나는
~.단축키는 오래 써왔지만, 도움말 메뉴는 몰랐음~를 두 번 입력하면 실제 틸드 문자를 보낼 수 있고, 일반 세션에서는 첫 문자로 입력되지 않는 한 escape로 인식되지 않음즉,
~가 줄의 첫 문자이자 새 줄 직후일 때만 escape로 작동함. UI 설계가 꽤 세심함그래서
ls ~/^?^?^?^?^?~/a.out같은 출력이 나올 수 있음. SSH는 화면이 아니라 입력 스트림을 감시함~.로 종료하려면 Enter를 먼저 눌러야 함, 이게 서버로 전달될 수도 있음나는 SSH를 15년 넘게 써왔지만 이런 escape 시퀀스는 처음 알았음
다음에 세션이 멈추면
~.을 꼭 써볼 생각임. 터미널을 닫는 것보다 훨씬 낫겠음VPN이나 Tailscale을 쓰면 해결 가능하고, 아니면
tcp_keepalive파라미터를 조정해 연결을 유지할 수 있음예시 설정: 이렇게 하면 CGNAT 환경에서도 세션이 유지됨
~.을 쓰고 있음. SSH에-v옵션을 주면 연결 문제 디버깅에도 유용함~~.으로 두 번째 hop을 종료할 수 있음~.을 입력하기 전에는 반드시 Enter를 눌러 새 줄에서 시작해야 함나도
~.은 오래 써왔지만 다른 escape는 몰랐음. 쉘 프롬프트에서는 바로 안 먹히니cat실행 후~?를 입력해야 함<enter>~.으로 종료 가능함~.으로 세션을 끊었지만,~가 새 줄에서만 작동한다는 건 몰랐음.~^Z도 유용해 보임예전 telnet의 ctrl-[ 시퀀스가 떠오름
Enter는 단지 새 escape 입력을 준비시키는 역할임이런 기능들은 사실 rsh에서 유래한 것임. 나이 든 사람이라 기억함
~명령 스타일은 cu(1) 에서 먼저 나왔음. rsh보다 이전의 4.1BSD 시절임scp를 rcp처럼 쓰려면-O옵션을 줘야 함SSH의 메뉴는 터널링할 때 유용함. 요즘은 Tailscale 같은 걸로 대체되긴 했지만 여전히 쓸모 있음
여러 SSH 세션을 하나로 멀티플렉싱해서 인증을 반복하지 않아도 되고, 탭 완성도 빠름
단, 연결이 멈출 때는 약간 귀찮음
“비밀”이라기보다 대부분의 사람이 manpage를 끝까지 읽지 않기 때문에 잘 모르는 기능임
~escape는 1970년대 UNIX cu에서도 쓰였음. SSH는 그 후손이라 볼 수 있음ControlMaster 설정은 기본값이 불편하므로 아래처럼 설정 블록을 추가하면 좋음
이렇게 하면 동일 호스트로의 SSH/scp/rsync가 기존 연결을 재사용함
~Cescape로 세션 중간에 포트 포워딩을 추가할 수도 있음ControlPersist를 1시간 정도로 늘려두면 짧은 로그인 간격에서도 연결이 유지됨나도 SSH 세션이 멈췄을 때
[Enter] ~.으로만 복구할 수 있었음리눅스 전문가가 아니면 잘 모르는 숨은 기능 같음