はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

UNIX系コマンドについてのメモ

(2019-11-03更新)

*NIX / Linux / BSDなどで使えるコマンドについてのメモ。

目次:

scpとrsyncの違い

scpとrsyncは両方とも遠隔地とのファイル転送に使えるコマンド。 How does `scp` differ from `rsync`? - Stack Overflow によると、scpに比べてrsyncには次のような特徴がある。

  • タイムスタンプを比較して新しいものだけを対象にできる
  • ファイルの差分のみを転送できる
  • テンポラリファイルに転送し、転送先ファイルをテンポラリファイルでアトミックに置き換える (転送が中断されても転送先ファイルが壊れない)

topなどの監視ツール

qiita.com

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のときはバッファリングしなくなる。

参照: [Unix command] stdbuf

コマンドやファイルの内容をクリップボードに入れるには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`