howto/linuxコマンド

一行メモ


tree

リンク・マニュアル

$ tree --charset=C -I '*.pdb|*.gro|OUT.*|chignolin.*|genion.*|*~|*.cpt|*.edr|*.xtc|*.tpr|*.mdp|*.trr|*.top|*.o???[0-9]|min.log' ¥
  | less > temp

X Window System (Linuxでウィンドウが出る仕組み)

X11, X, X Window System, 環境変数DISPLAY, ssh -Y などに関する背景はこちらを読め

xmodmapの説明

コマンド

xen :          keycodeなどがわかる
xmodmap :      設定されている modifyer keyがわかる
xmodmap -pke : キー設定のリスト表示

ssh関係

接続先のホストキーが変った時

$ ssh hostname として
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
になったとき、いったん
$ ssh-keygen -R hostname
としてから、もしくはsshがサジェストしたコマンドを実行してから、ssh接続する。
IPアドレスについても同様に削除するとよい。

diff

ふたつのディレクトリ以下の階層を比較する

$ diff -r hogehoge1 hogehoge2

find

ファイルhogehogeよりも新しいファイルをカレントディレクトリ以下の階層から探して表示する

$ find . -newer hogehoge -print

ファイルのリストと、サイズを調べる

(HOGEDIRの部分は . など)

$HOGEDIRディレクトリの階層以下で、ファイルの末尾が .trjのファイルのリスト

(参考) find  $HOGEDIR  -path '*\.trj'

(参考) find  $HOGEDIR  -path '*\.trj' -printf "%p\t%s\n" | awk '{print $1 "\t" $2/1000/1000/1000 " GB"}'   #ファイルサイズも表示

find  $HOGEDIR  -path '*\.trj' -printf "%p\t%s\n" | awk '{sum+=$2; print $1 "\t" $2/1000/1000/1000 " GB"} END{print sum/1000/1000/1000 " GB"}'   #合計サイズも求める

(参考) find  $HOGEDIR  -path '*\.trj' -printf "%p\t%s\n" | awk '{sum+=$2} END{print sum/1000/1000/1000 " GB"}'   #合計サイズだけ求める

$HOGEDIRディレクトリの階層以下で、ファイルの末尾が .trjのファイルを全て削除する

find  $HOGEDIR  -path '*\.trj' -delete

例えば、いくつかの拡張子のファイルを一気に削除する場合

find  $HOGEDIR  -path '*\.trj' -delete; find  $HOGEDIR  -path '*\.rst' -delete; find  $HOGEDIR  -path '*\.nuc' -delete; find  $HOGEDIR  -path '*\.vtk' -delete;
find  $HOGEDIR  -path '*\.vti' -delete;

execオプションの例

$HOGEDIRディレクトリの階層以下で、ファイルの末尾が .trjであるファイルのリストに対して、それぞれ個別に ls -1をする。
# {}はヒットしたパス名に置き換わる、\;は -execオプションの末尾として ;を与えるためにシェルのメタキャラをエスケープしている部分。

(参考) find  $HOGEDIR  -path '*\.trj' -exec ls -1 {} \;

カレントディレクトリ以下の階層で、ファイル名にcmakeがつくものをすべて削除する?

http://stackoverflow.com/questions/9680420/looking-for-a-cmake-clean-command-to-clear-up-cmake-output から

# Find and then delete all files under current directory (.) that:
#  1. contains cmake (case-&insensitive) in it's path (wholename)
#  2. name is not CMakeLists.txt

find . -iwholename '*cmake*' -not -name CMakeLists.txt -delete

複雑な例1

find Adir  -maxdepth 1 ! -regex '.*ABC.*' -type f  -exec echo cp -ip {} Bdir/  \;

Adirディレクトリにある、ABC文字列を含むファイル名以外を、Bdirにコピーする。 なお、ディレクトリ名にABCが入っていてはダメ。。。?

dig

ホスト名を逆引きして調べる

$ dig -x 133.60.113.208 +short  #ホスト名だけ出力
orange.eit.hirosaki-u.ac.jp.
$ dig  +noall +answer -x 133.60.113.208  #タイトル無しで、answer sectionだけ出力
208.113.60.133.in-addr.arpa. 3600 IN    PTR     orange.eit.hirosaki-u.ac.jp.

gdb

使い方

プログラムは -g つきでコンパイルしておく。

gdb a.out
> run

awk

統計屋のためのAWK入門

http://antibayesian.hateblo.jp/entry/2014/09/15/162605

1ライナーで統計処理あり。なお、Linux上ではbashのメタキャラが展開されるので " は ' としなければならない。
awkインタプリタなので、実行はすごく遅い。

(例) 度数分布。binは幅
awk 'BEGIN{ bin=1.0 } { f[ int($1/bin) ]++ } END{ for( i in f ) print i*bin, f[i] }' < data.txt

bc

lとsオプションはつけた方がよい

bc -ls とする

数学関数の利用方法

bc -l とすること(オプション -l)で、標準的な数学関数が使えるようになる

      s (x)  The sine of x, x is in radians.
      c (x)  The cosine of x, x is in radians.
      a (x)  The arctangent of x, arctangent returns radians.
      l (x)  The natural logarithm of x.
      e (x)  The  exponential function of raising e to the value x.
      j (n,x) The bessel function of integer order n of x.

独自の関数を定義

例1) log_2 (x)

define lg(x) {
    return (l(x) / l(2));
}

例2) 二点間の距離

define  dist (x,y,z,u,v,w) {
  return sqrt((x-u)*(x-u)+(y-v)*(y-v)+(z-w)*(z-w));
}

例3) 羃乗

define  pow (x,y) {
  auto k, ans;
  ans=1;
  for ( k=0; k<y; k++ ) {
    ans = ans*x;
  }
  return ans;
}

その他は man bc を参照のこと

平方根は sqrt( )

1.23e-4とかの表現は可能か?

top

リンク

topコマンドで覚えておきたい使い方14個 [#x0821353]

バッチモードを使った例

while true; do
  for i in 1 2 3 4; do
    ssh compute-0-$i "hostname; top -b -n 1 | sed '2,6d' | head -7"
  done
  echo -------------------------------------------------------------------------------
  sleep 5
done

ps

よく使うパターン

ps  ux --forest
ps  u  $$
ps  u  -C cmdlist

オプション・引数

u           ユーザ指向のフォーマットで表示
x           自分の全てのプロセス
a           全てのプロセス
-C cmdlist  コマンド名で指定
--forest    ASCIIアートで階層表示
$$	      シェル自身のPIDを指定してそれだけ表示

出力の見方

<defunct>マーク
プロセスはゾンビであることを示す。親プロセスによって正しく消去されていないために残っている。親プロセスが終了するとinitによって消去される。

プロセスの状態コード

D  割り込み不可能なスリープ状態(通常I/O中)
R  実行中又は実行可能状態
S  割り込み可能なスリープ状態
T  ジョブ制御シグナルまたはトレースされているために停止中の状態
Z  ゾンビプロセス

Fカラム(プロセスフラグ)

 次の値の合計
 1 fork された(execは含まず)
 4 スーパーユーザー権限を使っている

その他

man ps を参照のこと

rsync

基本的な使い方

$ rsync  -av -e ssh --delete EPG  username@machine:/disk1

EPGディレクトリを、/disk1ディレクトリ内にrsyncする。

(危険注意) EPG ではなく、EPG/ とすると、disk1の中にEPGディレクトリが出来るのではなく、 元のdisk1が丸ごと削除(disk1に他のファイル・ディレクトリがあるとそれは削除)されて、 disk1の内容がEPGになるので非常に危ない。

各オプションの意味

-a       equivalent to -rlptgoD
-v       increase verbosity
-e        specify the remote shell to use
--delete  delete files that don't exist on the sending side

-r    recurse into directories
-l    copy symlinks as symlinks
-p    preserve permissions
-t    preserve times
-g    preserve group
-o    preserve owner (root only)
-D    preserve devices (root only)

cpio

アーカイブに保存するとき

rootで作業する(ファイルのパーミッションを保つため。一般ユーザの場合そのユーザー所有に変更される)

# find DIRECTORY | cpio -vo > FILE.cpio    #コピーアウトモードと呼ばれる
   -v は表示

アーカイブから展開するとき

rootで作業する(アーカイブFILE.cpioにファイルが絶対パスで収められていたらそこに書き込まれるめ。 相対パスならカレントディレクトリから相対的に書き込まれる。変更のコントロールは出来ない?)

# cpio -vidmu < FILE.cpio    #コピーインモードと呼ばれる
   -v は表示
   -d はディレクトリが無ければ作る
   -m は日付を保つ
   -u は上書きをする(付けない方が無難か)

アーカイブの中身を見るとき

$ cpio -tv < FILE.cpio

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS