かゆいところに手が届かないなーと思いつつもコマンドラインで操作していなかった事項.

ディレクトリの容量

duコマンドをそのままディレクトリに対して使うとそのディレクトリに存在する全てのファイルについてそのファイルサイズを表示してきてうざい.ディレクトリ単体のサイズは

$ du -sh dotfiles

と表示する.

シンボリックリンク

$ ln -s <src> <link_name>

カレントディレクトリをクリップボードに保存する

tmux で作業している時に新しいペインを作ると,初めに tmux を呼び出したディレクトリから始まってしまうので,作業中のカレントディレクトリを保存してくれるコマンドが欲しかった.今までいちいち pwd してからコピペしていたのが信じられないが,以下のコマンドでクリップボードに保存できる.

pwd | tr -d '\n' | xclip -selection c

.bashrc に書く場合は,以下のようにする.

alias copypwd='pwd | tr -d \\n | xclip -selection c'

dateコマンドで yyyy-mm-dd HH:MM:SS 形式にする

date '+%y-%m-%d %H:%M:%S'

ディレクトリ内のファイルに対してforeachで一括処理

例えばディレクトリ内に存在する各 .gif を ImageMagickで convert コマンドにより .png に変換したいとする.

まず各gifファイルは for file in *.gif; do で取得できる.それから拡張子 .gif を取り除いたファイル名の部分を basename コマンドで取り出し,変換後の .png のファイル名を作る.

output="$(basename "$filename" .gif)".png

そしてそれを convert する.

for filename in *.gif; do
    output="$(basename "$filename" .gif)".png
    convert -coalesce $filename $output
done

topコマンドでCPU使用率,及びメモリ使用量でソートする

  • CPU使用率でソート → P
  • メモリ使用量でソート → M

不要なメモリを解法する

sudo sysctl -w vm.drop_caches={1,2, 3}

/proc/sys/vm/drop_caches に{1, 2, 3}の数字を書き込むことで,

  • 1 → ページキャッシュ
  • 2 → dentryとinodes
  • 3 → ページキャッシュ+dentry+inodes

をクリアする.ページキャッシュはディスクから読み込まれた内容そのものをメモリにキャッシュする領域,dentry はディレクトリのパス名を,inodes はファイルのattributes(パーミッション,サイズ,作成者)などの情報を含む.

vmstat

vmstat の読み方.

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0   5029    182   2093    0    0    67    24  190  814  5  2 92  1  0
  • procs/r: 実行キュー入っているプロセスの個数
  • procs/b: I/O街により実行できていないプロセスの個数
  • memory/free: 未使用状態のメモリの容量らしいが...
  • memory/cache: いわゆるキャッシュ
  • swap/si: メモリからディスクにスワップされてからまたメモリに再読み込みされている容量(kb/s)
  • swap/so: メモリからディスクへスワップされたデータの量
  • system/in: 割り込み回数
  • system/cs: コンテキストスイッチ(実行可能キューのプログラムを順番に回すことで同時に行っているように見せかけること)の回数
  • cpu/us: カーネル以外の実行に使用した時間率
  • cpu/sy: カーネルの実行にしようした時間率
  • cpu/id: アイドル時間(完全にcpuが空いていた時間)
  • cpu/wa: ディスクやネットワークの入出力処理を試みたが結果的にデータを待っていた時間

lsof

emacs が現在開いているユーザーファイルの一覧を得たい時.

$ ps aux | grep emacs
user 1234 .....
$ lsof -p 1234 | grep /home/user/
/home/user/.bashrc
/home/user/dotfiles/.emacs