class: center, middle, inverse # 黒い画面入門 2014/06/18 修士ミーティング? ### [@itiut](https://github.com/itiut) .footnote[ [http://itiut.github.io/slides/kuroi-gamen/](http://itiut.github.io/slides/kuroi-gamen/) ] --- # Agenda ## 1. Bash ## 2. Tmux ## 3. `~/.ssh/config` --- # Movements in Bash Emacsとほぼ同じ * `Ctrl-b`: 1文字戻る← * `Ctrl-f`: 1文字進む→ * `Ctrl-a`: 行初に移動←← * `Ctrl-e`: 行末に移動→→ * `Ctrl-m`, `Ctrl-j`: Enter * `Ctrl-h`: Backspace --- # History in Bash * `Ctrl-p`: ヒストリを戻る↑ * `Ctrl-n`: ヒストリを進む↓ * `Ctrl-r`: ヒストリを古い方へ検索 * `Ctrl-s`: ヒストリを新しい方へ検索 `Ctrl-s`のシェルの出力を止める機能[1]を無効にしておく必要がある。 ```console $ stty stop undef ``` .footnote[ [1] 止まった場合は`Ctrl-q`で解除できる ] --- # Redirect 標準出力・標準エラーを画面 (tty) 以外のファイルなどに変更する 標準出力 ```console $ whatis emacs > emacs_stdout.txt $ cat emacs_stdout.txt emacs (1) - GNU project Emacs ``` 標準エラー ```console $ whatis zsh 2> zsh_stderr.txt $ cat zsh_stderr.txt zsh: nothing appropriate. ``` 出力・エラーのリダイレクト先が同じ ```console $ python -m SimpleHTTPServer > /dev/null 2>&1 $ python -m SimpleHTTPServer &> /dev/null ``` --- # Pipe コマンドの標準出力を別のコマンドの標準入力とする ```console $ history | awk '{print $2}' | sort | uniq -c | sort -nr | head 583 g 519 sudo 501 c 470 v 349 t 251 man 241 ssh 200 rm 146 cat 133 brew ``` --- # Run background jobs コマンドの末尾に`&`をつけて実行する ```console $ cat /dev/zero > /dev/null & ``` もしくはコマンドを実行してから`Ctrl-z` (suspend) して`bg`する ```console $ cat /dev/zero > /dev/null ^Z [1]+ Stopped cat /dev/zero > /dev/null $ bg [1]+ cat /dev/zero > /dev/null & $ jobs [1]+ Running cat /dev/zero > /dev/null & $ kill %1 $ jobs [1]+ Terminated cat /dev/zero > /dev/null ``` `fg`でバックグラウンドジョブをフォアグラウンドに持ってこれる --- ## `~/.bashrc` ```shell # language LANG=en_US.UTF-8 # history shopt -s histappend HISTCONTROL=ignoreboth HISTSIZE=10000 HISTFILESIZE=10000 # prompt PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ " # aliases alias cp="cp -i" alias mv="mv -i" alias rm="rm -i" # prevent tty from stopping stty stop undef ``` --- ## `~/.bash_profile` ```sh if [ -n $BASH_VERSION ]; then if [ -f $HOME/.bashrc ]; then . $HOME/.bashrc fi fi ``` 基本的には * `~/.bash_profile` ログイン時のシェルで1度だけ読み込まれる[2] * `~/.bashrc` インタラクティブシェルごとに読み込まれる `ssh`したとき`~/.bashrc`が読み込まれていない場合は、 `~/.bash_profile`中で読み込むといいと思う .footnote[ [2] Ubuntu Desktopでは`~/.bash_profile`ではなく`~/.profile`を読み込む ] --- # Tmux **T**erminal **MU**ltiple**X**er の略? ターミナルを多重化してくれる ### 機能 * 画面分割 (pane) * タブっぽいもの (window) * detach/attachで作業環境を保持 * **`ssh`が切れても進捗が無に帰らない** --- # Install tmux `apt-get`とか`brew`とか`yum`とかでインストールできる ### CentOS 5 x64 で`yum`に`tmux`がない場合 ```sh $ wget http://pkgs.repoforge.org/tmux/tmux-1.6-1.el5.rf.x86_64.rpm $ sudo rpm -Uvh tmux-1.6-1.el5.rf.x86_64.rpm ``` --- ## `~/.tmux.conf` [https://github.com/itiut/dotfiles-remote/raw/master/.tmux.conf](https://github.com/itiut/dotfiles-remote/raw/master/.tmux.conf) ### 主な設定 ```sh # prefix key unbind-key C-b set-option -g prefix C-q bind-key C-q send-prefix # split pane bind-key | split-window -h bind-key - split-window -v # vi-like key bindings in copy mode set-window-option -g mode-keys vi bind-key -t vi-copy v begin-selection bind-key -t vi-copy y copy-selection ``` --- # Keybindings in tmux * `Ctrl-q`: プレフィックス [3] * `Ctrl-q |`: ペインを縦分割 * `Ctrl-q -`: ペインを横分割 * `Ctrl-q c`: 新しいウィンドウを作成 * `Ctrl-q !`: 現在のペインを新たなウィンドウに * `Ctrl-q d`: デタッチ * `Shift-arrow`: ペインの移動 * `Alt-arrow`: ウィンドウの移動 ### 起動 ```console $ tmux $ tmux a # アタッチ ``` .footnote[ [3] デフォルトは`Ctrl-b`だが1文字戻るのとかぶる ] --- # Copy and paste * `Ctrl-q [`: コピーモード * `Space`, `v`: 選択開始 * `Enter`, `y`: コピー * `Ctrl-q ]`: ペースト ### クリップボードと連携 (ローカル, 1.8~) `~/.tmux.conf` ```sh unbind-key -t vi-copy Enter bind-key -t vi-copy Enter copy-pipe "xclip -in -selection clipboard" ``` --- # Byobu tmux, screenのラッパー デフォルトでいろいろ設定されている `F9`でヘルプ 設定ファイルは`~/.byobu/profile.tmux`など --- ## `~/.ssh/config` ```sh Host yebis HostName yebis.tkl.iis.u-tokyo.ac.jp User tanikawa ``` これを ```console $ ssh tanikawa@yebis.tkl.iis.u-tokyo.ac.jp ``` こうできる ```console $ ssh yebis ``` --- # Multi-hop SSH `~/.ssh/config` ```sh Host yebis HostName yebis.tkl.iis.u-tokyo.ac.jp User tanikawa Host kugenuma51 HostName 192.168.126.151 User tanikawa ProxyCommand ssh yebis -W %h:%p ``` ```console $ ssh kugenuma51 Last login: Tue Jun 17 11:13:51 2014 from yebis tanikawa@kugenuma51:~$ ``` 公開鍵認証の場合は全ての接続先に公開鍵を登録しておく必要がある