かゆいところに手が届かないなーと思いつつもコマンドラインで操作していなかった事項.
ディレクトリの容量
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