screenを調査


tmuxもあるみたいだけど決定的にそちらという感じでもないのかなと思うし使ってるので少し詳しく。
気になってるのは下記。

* バッファのセキュリティ（履歴情報とかどうなってるのか）
* 実態のファイルがどこにあるか
* 便利機能をもう少し知っておく
* ウインドウの復帰とか生成時に自動で初期化コマンド
* その他適当

## man

screen(1) — manpages-ja — Debian jessie — Debian Manpages
https://manpages.debian.org/jessie/manpages-ja/screen.1.ja.html

## コピーモード

これって、スクロールの機能かと思ったらコピーモードだったのね。

* コピー開始
	* Ctrl+[
		* カーソル選択とエンターとかスペース
* コピー貼り付け
	* Ctrl+]
* コピー解除
	* q

> screenでコピーアンドペースト:screen:Media hub
http://screen.clickyourstyle.com/articles/277


## ペーストバッファって何？

`writebuf`コマンドで吐き出せる。デフォルトは/tmpへ。
`man screen`にも書いてあった。

ペーストバッファするとファイルに残るのね。すぐ消したいけどどうかしら。

> GNU Screen における競合状態の脆弱性 - WEBSCANで無料セキュリティ診断
http://www.cybersec-tech.com/webscan/vulns/35436


### クリップボード対応

クリップボード共有

> screenのペーストバッファをclipboardにも共有させて幸せになろう - アラのアラアラしい日記
http://wknar.hatenablog.com/entry/screen_pastebuffer_clipboard

### マルチクリップボード対応

むしろ残すけど手動で制御できるようにするのもありなのか。
これって、上のシムリンクにする部分が塞がれたら動かなくなるのかしら。

> GNU screenでクリップボードの履歴を使えるようにする
https://rcmdnk.com/blog/2013/03/24/screen-bash/

> rcmdnk/multi_clipboard: Clipboard manager for GNU screen
https://github.com/rcmdnk/multi_clipboard

### リモートで共有

そこまでは今のところ必要ないけどメモ。

> Sean Coates blogs about Remote pbcopy
https://seancoates.com/blogs/remote-pbcopy/

> ssh先screenのペーストバッファをクリップボードに貼り付ける - Keep It Simple, Stupid
http://yskwkzhr.blogspot.jp/2011/04/copying-remote-screen-paste-buffer.html

### ファイルから読み込み

使えそう。

> readbuf [-e encoding] [filename]
指定したファイルの内容をペーストバッファに読み込む。

## ログ系

log [on|off] # ログ書き込みの切り替え
logfile hoge.log # ログファイル
logfile flush 10 # ログの同期間隔

## 監視

monitor [on|off] # プロセス待ちなど変化を監視

## パスワード

どの程度意味があるのかしら。

password [crypted_pw]

> 自分の UID を偽装した他のユーザ (つまりスーパーユーザの誰か) によるそのセッションの再アタッチを防ぎたい場合に便利

## セッション名

セッションの整理に便利そう。

sessionname [name] # セッション名

## 環境変数

setenv [var [string]]

> この環境変数は、設定以降に fork されるすべてのシェルに継承される。

screen呼び出し時の環境変数に戻るのか除去されるのか。unsetだし除去かしら。

unsetenv var # 環境変数の設定を取り消す。

## ゾンビ

プロセスが終わってもwindowを残せる。いいかも。

defzombie [keys]

> 2 番目のキーを押すと、 screen はこのウィンドウを復活させようとする。 つまり、このウィンドウで実行されていたプロセスを再び起動する。
> パラメータを指定せずに zombie コマンドを呼び出すと、 zombie の設定がクリアされ、 したがってウィンドウは内部のプロセスが終了したときに消えるようになる。

### 文字エスケープ

タイトルバーとかを設定ファイルでカスタマイズするときに使う感じ？
通常ではあまり使わないのかどうなのか。

### 仮想端末

下記を実行で内部的なキーバインド的な何かがわかる
端末記述と呼ぶらしい。

`echo $TERMCAP`

下記の方が綺麗に見れた

`bindkey -d`

下記で実行できたりする、、知っていて意味あるか。。

`:stuff \033[1~`

## 制御シーケンス

GNU ScreenのOSC83によるコマンド実行について - Qiita
http://qiita.com/kefir_/items/c148e080a4bd37193ffe

> GNU Screenには、プログラムが出力した特定の制御シーケンスを自動的にscreenコマンドとして再解釈し実行してしまうという、とても危険でありながらも魅力的な設定があります。実際にはこれを知っていてもあまり役に立ちませんが、なにかまじめに取り組んでいるふりをしながら暇を潰したりするにはちょうどよい機能かもしれません。

## 環境変数

たまに必要になりそうな情報だな。

## ファイル

これ知りたいやつだな。

例があるのね。

```
.../screen-4.?.??/etc/screenrc
.../screen-4.?.??/etc/etcscreenrc
screen の配布パッケージに含まれている、 プライベート用・グローバル用各初期化ファイルの例。
```

このへん、無意識に何か残ってないかちょっと気になるな。

```
$SCREENDIR/S-<login>
/var/run/screen/S-<login>
ソケットディレクトリ (デフォルト)
/usr/tmp/screens/S-<login>
別のソケットディレクトリ
<socket directory>/.termcap
"termcap" 出力関数が書き込む
/usr/tmp/screens/screen-exchange
または
/tmp/screen-exchange
screen の「プロセス間通信バッファ」
hardcopy.[0-9]
hardcopy 関数が生成する画面イメージ
screenlog.[0-9]
log 関数が生成するログファイル
```

なにこれ。

```
/etc/termcap
```

端末情報の差異を吸収する仕組みらしい？？
.screenrcとかで指定できるのかな。

> Macのターミナル編集関連 - Qiita
http://qiita.com/take60/items/10ed863c6196eb9d9620

旧式とのこと。

> termcap - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
http://kazmax.zpp.jp/cmd/t/termcap.5.html

> termcap データベースは、 文字単位で動作する端末やプリンタの機能を記述するための旧式の機構である。 この機構は古いプログラムを動作させるためだけに保持されているので、 新しいプログラムは terminfo (5)データベースとそれに関連したライブラリを用いるべきである。

## 後からプロセスをscreenにアタッチ

便利だな。。いや、意外と使いどころが思い浮かばない。macだとreptyrが見当たらなかった。

> GNU Screen - ArchWiki
https://wiki.archlinuxjp.org/index.php/GNU_Screen
> screen の外で起動したプログラムを中に持って行きたい場合、reptyr を使うことでプロセスの親を tty から screen に変えることができます。

## メッセージ

echo [-n] message

> echo コマンドを使うと、「今日のメッセージ」で screen ユーザに嫌がらせができる。通常はシステムグローバルの /etc/screenrc に設定する。 "-n" を使うと行送りを抑制できる。"sleep" も参照すること。 echo は環境変数をオンラインで調べる時にも便利である。

------------------------------------------------------------------------------------------------
	なんだかんだ言ってmanを途中から全部読んでしまった。。中途半端だし前半に戻ってよむか。。
------------------------------------------------------------------------------------------------

## displays

> ログインユーザーチェック

## dinfo

screen があなたの端末について想定している内容を表示する。 色付けや文字セット指定が効かない原因を調査したい場合に便利。

## bindkey

bindkey [-d] [-m] [-a] [[-k|-t] string [ cmd args]]

いろいろできるのね。
入力を変換したり、キーショートカットだったり。

なにかの文字列をバインドキーすれば、
メタキーの必要な操作を複数一括でをコピペだけでできたりするかしら。

## bind

bind [-c class] key [command [args]]

これもいろいろできる
コマンドの定義
クラスによるグルーピングと切り替え

## at

これも便利そう「titledayo」のwindowで実行する例

at "titledayo" stuff "ls^M"

## umask

ウインドウの権限、、いくつかあるけど今の所いらないかな。

aclumask [[users]+bits |[users]-bits .... ]
umask [[users]+bits |[users]-bits .... ]
このコマンドを呼んだ者が生成するウィンドウに対して、 他のユーザが持つアクセス権限を指定する。 

------------------------------------------------------------------------------------------------
	意図せず、下からmanを読む形になったが、その方がショートカットの意味がわかるかも。
	
	manって規約でパースしやすいフォーマットにならないかしら。
	自分のチートシートコマンドの絞り込みとかに使いたい気もする。
	
	クリアとリフレッシュと破棄と、、どれがどこまでやってくれるのか
	
	時間を使いすぎた。。
------------------------------------------------------------------------------------------------