(2019-11-03更新)
*NIX / Linux / BSDなどで使えるコマンドについてのメモ。
目次:
- scpとrsyncの違い
- topなどの監視ツール
- 重いタスクを実行するときはnice, ionice
- バッファリングせずに出力するときはstdbuf
- コマンドやファイルの内容をクリップボードに入れるにはxselかxclip
- 日付を合わせる
- シェルスクリプトの失敗時に停止させるには-eu
- シェルスクリプトで一時停止するにはread
- シェルスクリプトの存在場所をカレントディレクトリにする
scpとrsyncの違い
scpとrsyncは両方とも遠隔地とのファイル転送に使えるコマンド。 How does `scp` differ from `rsync`? - Stack Overflow によると、scpに比べてrsyncには次のような特徴がある。
- タイムスタンプを比較して新しいものだけを対象にできる
- ファイルの差分のみを転送できる
- テンポラリファイルに転送し、転送先ファイルをテンポラリファイルでアトミックに置き換える (転送が中断されても転送先ファイルが壊れない)
topなどの監視ツール
top, htop, ctop, gtop, conkyが紹介されている。
- top … 標準的な監視ツール
- htop … カーソルキーで画面をスクロールできる高機能なtop
- ctop … コンテナの情報を表示できるtop
- gtop … グラフィカルなtop
- conky … Xの背景に様々なリソース情報を表示する
重いタスクを実行するときはnice, ionice
nice コマンド
で優先順位を下げて実行できる。
ionice -c class コマンド
でI/Oスケジューリングの優先度を変更して実行できる。
ioniceのcオプションの値は
- 0: None (変更しない)
- 1: Realtime (優先度高)
- 2: Best-effort (優先度中) その後に -n オプションで0(高)〜7(低)のレベルを指定する
- 3: Idle (優先度低)
ioniceは実行にシステム管理者の権限が必要なので、niceと組み合わせる場合には次のようになる。
sudo ionice -c 3 nice コマンド
すでに実行が始まっているコマンドは renice +優先度 プロセス番号
や ionice -c class -p プロセス番号
で変更できる。
バッファリングせずに出力するときはstdbuf
コマンドからの出力をteeでファイルに記録するとき、画面になかなか表示されない時がある。 これはバッファリングされているため。 バッファリングを制御するstdbufを使うとすぐに画面に表示させることができる。
stdbuf オプション コマンド
でコマンドを指定のバッファリング方式で実行できる。
stdbufのオプションの値は
- -i, --input=MODE: 入力バッファの動作をMODEにする
- -o, --output=MODE: 出力バッファの動作をMODEにする
- -e, --error=MODE: 標準エラー出力の動作をMODEにする
MODEにはバッファサイズの数値を入れる。 512K(512キロバイト)、20M(20メガバイト)など単位をつけて指定できる。 MODEがLのときは行単位でバッファリングし、0のときはバッファリングしなくなる。
コマンドやファイルの内容をクリップボードに入れるにはxselかxclip
X Window Systemでは歴史的に2種類のコピーバッファが存在する。
- X selection: 文字列をマウスで選択した時のバッファ。マウスの中ボタンでペースト
- X Clipboard: メニューからコピーした時のバッファ。右クリック→貼り付けなどでペースト
標準入力をX selectionに入れる:
command | xsel --input command | xclip
標準入力をX Clipboardに入れる:
command | xsel --clipboard --input command | xclip -selection clipboard -in command | xclip -selection c -i
X selectionから標準出力に出力する:
xsel --output xclip -out xclip -o
X Clipboardから標準出力に出力する:
xsel --clipboard --output xclip -selection clipboard -out xclip -selection c -o
日付を合わせる
システムクロックを合わせる。 先に /etc/ntp.conf に外部NTPサーバーを設定しておく。
sudo ntp -q
このままでは再起動時に再びずれるのでハードウェアクロックに保存する。
sudo hwclock --systohc
シェルスクリプトの失敗時に停止させるには-eu
シェルスクリプトを書くときはset -euしておく - Qiita
スクリプト先頭 (shebang) に -eu
オプションをつけるか、set -eu
とする。
#!bin/sh -eu set -eu
-e
-exit 0
以外が返ってきたらそこで停止する-u
- 未定義の変数を使おうとしたらそこで停止する
シェルスクリプトで一時停止するにはread
BASHシェルスクリプトで「キー入力待ち」プロンプトを実装する | DevelopersIO
次のように書く。
#一時停止する場合 read -p "Hit enter: " #メッセージを表示して入力されたキーで判断する場合 read -p "ok? (y/N): " yn case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac
シェルスクリプトの存在場所をカレントディレクトリにする
次の記述を入れることでシェルスクリプトが存在するディレクトリがカレントディレクトリになる。
cd `dirname $0`