#author("2024-10-27T21:46:42+09:00","default:okazaki","okazaki")
#author("2024-11-15T17:37:30+09:00","default:okazaki","okazaki")
#menu(howto/MenuBar)

* howto/linuxコマンド [#j9ccaf2f]
#contents

** 一行メモ [#mda41b41]
- 他のところにもpsあり。まとめる --  &new{2018-12-05 (水) 22:43:45};
- grep 'method_poisson ' tmpRC0chs/*.inp |sort -t ' ' -k 4 --  &new{2019-09-11 (水) 15:53:31};
-- 区切りスペースはデフォルト
-- -t ' ' をつけると、数値の並び替えがバグる? --  &new{2021-06-14 (月) 13:16:23};

- ハッシュ値の計算 --  &new{2019-12-02 (月) 16:24:30};
-- md5sum ファイル名
-- sha256sum ファイル名
-- など
- grep や emacs での正規表現での検索で、 | ( ) にエスケープはいる --  &new{2020-12-14 (月) 20:34:19};
 GNU grep 2.25 で、pat1またはpat2の検索
 $ grep '¥(pat1¥|pat2¥)' file
 .frcmodで終わる検索
 $ grep '¥.frcmod$' file
 
 GNU emacs24.5.1 で、pat1またはpat2の検索
 M-x query-replace-regexp や M-x occur で、条件は
 ¥(pat1¥|pat2¥)
- ls出力のファイル名の並び順: LANG=en_US.UTF-8 のときは大文字は小文字の後に続く。 ja_JP.UTF-8 のときはその逆であるようだ。 --  &new{2021-03-01 (月) 20:30:30};
- sortで -t ' ' をつけると、数値の並び替えがバグる? --  &new{2021-06-14 (月) 13:16:23};
- grep --color=never    #色を付けなくする --  &new{2021-06-03 (木) 15:57:19};
- grep --color=always string file | less -R #色付けでパイプに渡す--  &new{2021-06-15 (火) 08:50:38};
- 正規表現(J.E.F.Friedl著,オライリーから. 表6-1抜粋) --  &new{2021-07-14 (水) 10:09:07};
|CENTER:                  |CENTER:|CENTER:|CENTER:|CENTER:|c
|                         |grep   |egrep  |emacs  |python |h
|[...], ^, $              |v      |v      |v      |v      |
|\<...\>, \b, \B          |v      |v      |v      |v      |
|グループ化               |\(...\)|(...)  |\(...\)|\(...\)|
|(...)*                   |v      |v      |v      |v      |
|+ or \+                  |\+     |+      |+      |+      |
|? or \?                  |\?     |?      |?      |?      |
|{...} or \{...\} 反復回数|\{...\}|{...}  |・     |・     |
|\ or \|                 |\|    ||     |\|    |\|    |
||||||
||||||
-- 例) 拡張子c,h,l,yのファイルのうち grid~coordを含む行を検索する。
ここで ~は任意の1文字以上の文字列。
 $ grep 'grid.\+coord' *.[chly]
- moduleコマンド --  &new{2021-12-17 (金) 20:45:46};
 ソフトウェアを利用するための環境や、同じソフトウェアでもバージョンを切り替えて利用できる環境を
 用意したり、削除したりするツールである。それぞれのソフトウェア・バージョンはモジュールと呼ばれる。
 モジュール名(モジュールファイル)で指定された、変数や環境変数がセットされて環境が用意される。
 
 module load   モジュール名  #モジュールのロード(読み込み)
 module unload モジュール名  #モジュールをアンロード
 module list       #ロードしているモジュールの一覧を表示
 module avail      #利用可能なモジュールを表示
 
 シェルスクリプト内でこのツールを利用するときには、
 source /etc/profile.d/modules.sh などを予め読み込んでおくらしい。
 
[ref] https://qiita.com/Ag_smith/items/f268ad27165a60aecd35 その他詳細はこちら。
- windows改行コードをlinux改行コードに変換: tr -d '\r' < file  > filenew --  &new{2022-03-06 (日) 19:08:27};
- touch -r reffile hogefile  # hogefileの日付を reffileと同じにする --  &new{2022-03-12 (土) 15:27:13};
- touch -t 202303071830.00 day202303071830.txt  #2023/03/07 18:30:00 の更新日付のファイルを作る --  &new{2023-03-08 (水) 02:02:50};
- locate 検索文字列  #検索文字列が絶対パスに部分的に一致するものが表示。検索文字列にメタキャラが含まれていた場合には、絶対バスに部分的ではなく完全にマッチすること。(DBは1日毎に更新) --  &new{2022-03-14 (月) 20:35:41};
- ふたつのファイル内の数値の違いを調べる。 --  &new{2022-06-22 (水) 16:21:16};

 ファイルhoge1.outとhoge2.outの中に以下のような数値が出力されている。出力されている順番に、差を求めたい。
 
 hoge1.out
  ...
  Frequencies --   -500.7208              -500.7202                58.3287
  ...
  Frequencies --     70.2251               104.3229               172.1244
  ...
  Frequencies --    172.1303               241.4551               248.0223
  ...
 
 hoge2.out
  ...
  Frequencies --   -500.4196              -500.4196                58.2761
  ...
  Frequencies --     70.1453               104.2697               173.3204
  ...
  Frequencies --    173.3204               241.3123               248.0306
  ...
 
 $ paste <(grep "Frequencies" hoge1.out | awk '{print $3,$4,$5}' | tr ' ' '\n') \
         <(grep "Frequencies" hoge2.out | awk '{print $3,$4,$5}' | tr ' ' '\n') \
   | sed 's/\t/\t-\t/' > temp
 $ paste temp <(bc < temp)
 とすると、
 -500.7208       -       -500.4196       -.3012
 -500.7202       -       -500.4196       -.3006
 58.3287 -       58.2761 .0526
 70.2251 -       70.1453 .0798
 104.3229        -       104.2697        .0532
 172.1244        -       173.3204        -1.1960
 172.1303        -       173.3204        -1.1901
 241.4551        -       241.3123        .1428
 248.0223        -       248.0306        -.0083
 ...
 と計算できる。各行は、hoge1.outの値、マイナス、hoge2.outの値、その計算結果である。

- 横にも書式付で並んでいる数字を、各数値を一行にして出力する。 --  &new{2022-06-28 (火) 12:57:01};

 hoge1.outがあったとする。
  ...
  Frequencies --   -500.7208              -500.7202                58.3287
  ...
  Frequencies --     70.2251               104.3229               172.1244
  ...
  Frequencies --    172.1303               241.4551               248.0223
  ...
 
 次のように " Frequencies --"から始まる行にマッチしたら、$3~$NFまでのフィールドを
 ひとつずつprintするとよい(NFはその行のフィールド数)
 $ awk '/^ Frequencies --/ {for(i=3;i<=NF;i++) print $i}'   hoge1.out
 -500.7208
 -500.7202
 58.3287
 ...

- cut -d \, -f 19 hogehoge.csv-UTF8N | uniq | sort | uniq  #区切り「,」で、1から数えて19カラム目のみを取り出してsort,uniq --  &new{2022-07-11 (月) 17:03:33};
-- 改行コードはdosでもlinuxでもよい。

- ファイル中の 〇〇GBの数字の和を求める。 --  &new{2022-09-01 (木) 13:03:20};

 $ grep GB$ hoge.out | sed 's/^.*://' | sed 's/GB//' | sed -z 's/\n\(.\)/\+\1/g' | bc

hoge.outとして次のような出力が含まれるとき、上のワンライナーで GBの数字の和を求められる。
 ...
 item1: 1.1GB
 ...
 item2: 0.1GB
 ...
 itemN: 1.1GB
 ...
[補足] 
最後の sedの -zオプションは行分割を NULLにし、\nを検索対象にするために必要である。
gも必要である(行分割をNULLにしたので1行はデータの末尾までになるため)。

- ファイル中の 〇〇GBの数字の和を求める。こちらのほうがスマート --  &new{2022-09-04 (日) 11:44:21};

 cat hoge.out | sed -n '/GB$/{s/^.*: *//; s/ *GB//; H;}; ${g; s/\n//; s/\n/+/g; p}' | bc
 
 GB$の行を見つけたら行頭の "itemn: "のところを削除し、" *GB"を削除し、sedのホールドスペースに追加する。
 最後の行の処理を終えたら ホールドスペースの内容をパターンスペースにコピーし、先頭の改行を削除してから、
 改行を+に置き換えて、出力し、bcで計算する。

-  Linux 関連の日本語マニュアル https://linuxjm.osdn.jp/ --  &new{2022-08-30 (火) 11:38:11};
- grep '^\(//xng[01234]\|  xng[01234]\)' vFDMr1pk.out --  &new{2023-03-29 (水) 21:02:42};
- grepではほとんどのメタ文字(\tなど)は使えない --  &new{2023-05-28 (日) 13:39:36};
- duコマンド
 du -a  #カレントディレクトリ以下のファイルが表示される
 du -al #ハードリンクのファイルは通常ひとつしか表示されないが、それも表示する
 find -path '.*'  #du -alと同様の表示
- cat -n nameless.c | grep --color=auto '\bdx\b' | grep --color=auto = | less  #変数dxに代入しているところを探す --  &new{2023-12-17 (日) 22:30:07};
- grep '% *wt' *.[ch]   #正規表現、%とwtの間にスペースが0個以上 --  &new{2024-06-23 (日) 15:38:03};
- for &#x28;&#x28; i=0; i<5; i++ )); do echo $i; done  #bashでループ --  &new{2024-09-22 (日) 13:20:56};
- pukiwiki整形ルールで &#x28;&#x28; ... )) は注釈になるため、注釈にしたくないときは & # x 2 8 ; のようにunicodeで ( を書く。
- echo $PATH | sed 's/:/\n/g' --  &new{2024-09-28 (土) 12:45:27};
- watch -n 1 ps ux --forest   #psの結果を1秒毎に実行する、画面は再描画されます --  &new{2024-10-02 (水) 23:15:47};
- du --si -sm *  #1000単位のMBでサイズを表示 --  &new{2024-10-04 (金) 16:53:40};
- 画像表示のコマンド(pngに限らず) --  &new{2024-10-14 (月) 00:16:00};
 $ display hoge.png  #ImageMagick
 $ eog     hoge.png  #GNOME Image Viewer
- aclocal, autoconf, automake, configureの例 --  &new{2024-10-21 (月) 23:37:51};
 $ cat hello.c
 #include <stdio.h>
 
 int main() {
     printf("Hello, World!\n");
     return 0;
 }
 $ cat configure.ac
 AC_INIT([myproject], [1.0], [example@example.com])
 AM_INIT_AUTOMAKE([-Wall -Werror foreign])
 AC_PROG_CC
 AC_CONFIG_FILES([Makefile])
 AC_OUTPUT
 $ cat Makefile.am
 bin_PROGRAMS = hello.x
 hello_x_SOURCES = hello.c
 以上を作る。次に、
 $ aclocal         #gives aclocal.m4
 $ autoconf        #gives configure
 $ automake -a -c  #gives Makefile.in, compile, depcomp, install-sh, missing
 
 $ tar cvf myproject-1.0.tar  hello.c configure.ac Makefile.am \
                              configure Makefile.in aclocal.m4 compile depcomp install-sh missing
 
 $ ./configure
 $ make
 $ ./hello.x

#comment


//--------------------------------------------------------------------------------
* sed [#wb9246ae]

入力は行ごとにパターンスペースに入れられ(末尾の改行は削除される)、コマンド処理後に、
出力される(改行は追加される)。一時的な保存場所であるホールドスペース(初期値は空)を
利用できる。-nオプション付きの場合、下記のpコマンドで出力しない限り何も出力されない。

 コマンド
   s/検索文字列/置換後文字列/オプション    文字列の置換(パターンスーペース内)
          オプション
            g        置換を最後まで行う(g無いときは1回だけ行う)
          検索文字列
            .        任意の文字
            *        直前の文字の0個以上の繰り返し(.*で任意の文字列)
            ^        行頭
            $        行末
            \(...\)  括弧でくくった部分は、置換後文字列として\1,\2,...で使用できる
            \|       または
   d    削除(パターンスーペース内)
   p    出力する(パターンスペース内)、sed -n で実行した時にこの出力だけ得られる
   G    ホールドスペースの内容をパターンスペースに追加(追加の前に改行が追加される)
   h    パターンスペースの内容をホールドスペースにコピー
   g    ホールドスペースの内容をパターンスペースにコピー
   H    パターンスペースの内容をホールドスペースに追加(追加の前に改行が追加される)
   N    次の入力行をパターンスペースに追加
   b [label]    labelに分岐する。labelが無ければ末尾に分岐。
   =    行番号を出力する(改行つき)
 
 上記コマンドの前には対象を指定できる
   /検索文字列/[!]       検索文字列を含む行を対象、!がある場合は否定の意味
   行番号[,行番号][!]    入力の行番号(から行番号)の行を対象、!がある場合は否定の意味、
                        $は最終行の行番号
 
 ;で区切ってコマンドを複数書ける。
 {}でコマンドをくくって複数書ける。

 例)
 sed '1,/^$/d' hogefile  #1行目から、2行目以降の空行までを削除し、それ以降を出力する
 sed -n '/GB/p' hogefile  #これは grep GB hogefile と同じ結果
 sed -n '1,2p; /GB/{s/pot/Pot/; s/:/=\t/; p}'
 sed -n '1,2{=; p}; /GB/{s/0/a/; N; N; =; p}'

 E表現の数値を小数点以下4桁に切り捨てる例)
 sed    's/\(-\?[0-9]\.\|-\?\.\)\([0-9]\{4\}\)\([0-9]*\)\([eEdD][+-]\?[0-9]\{2\}\)/\1\2\4/g'  filename
 sed -r 's/(-?[0-9]\.|-?\.)([0-9]{4})([0-9]*)([eEdD][+-]?[0-9]{2})/\1\2\4/g'                  filename

 filename内の継続行(バックスラッシュ'\'とこれに続く改行'\n')を削除し1行にする例)
 sed ':a;N;$!ba;s/\\\n//g' filename
  (説明)
   :a で aというラベルを定義しておく。
   N で次の行をパターンスペースに追加し、
   $! で最後の行以外の行に対して、次のコマンド(ba)を実行する。ba は aラベルにジャンプする。
   最後の行のときにパターンスペース(全ての行が含まれる)に対して、置換 s/\\\n//gを行なう。結果も出力される。


[ref] https://qiita.com/gin_135/items/773fec1343a69c9f90d6 ~
man sed も見よ


*** 拡張正規表現 ( sed -r ) [#q456fe3b]
\(, \), \{, \}, \?  などは (, ), {, }, ? などと表記する。
その他に使える表現が増える。


//--------------------------------------------------------------------------------
* tree [#ue734189]

リンク・マニュアル
- http://yuusuke1988.hatenablog.jp/entry/2014/01/20/223602
- $ info tree #infoマニュアル(manマニュアルに情報は少ない)

例
 $ tree --charset=C -I '*.pdb|*.gro|OUT.*|chignolin.*|genion.*|*~|*.cpt|*.edr|*.xtc|*.tpr|*.mdp|*.trr|*.top|*.o???[0-9]|min.log' ¥
   | less > temp
 
 $ tree --charset=C -P '*.inp'  #-Pは表示するもの。-Iは除くもの。--charsetを付けないと罫線にascii以外の文字が入る


//--------------------------------------------------------------------------------
* X Window System (Linuxでウィンドウが出る仕組み) [#z9d8d8a3]

X11, X, X Window System, 環境変数DISPLAY, ssh -Y などに関する背景はこちらを読め
- https://qiita.com/pinecode1/items/85590ac7e438781acfe1
- https://www.atmarkit.co.jp/ait/articles/1602/19/news025_2.html
- http://e-words.jp/w/X_Window_System.html
- https://ja.wikipedia.org/wiki/X_Window_System
- https://www.astec-x.com/DOC/CATALOGUE/ASTECX-catalogue1.pdf Xの説明はここがわかりやすい

** xmodmapの説明 [#na9719e6]
- https://bearmini.hatenablog.com/entry/2013/07/12/161637?utm_source=pocket_mylist
- https://wiki.archlinux.jp/index.php/Xmodmap

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


//--------------------------------------------------------------------------------
* sftp [#le5befab]

ローカルコンピュータとリモートコンピュータの間でのファイル転送をする。
(ローカルからリモートに転送したいファイルがある場合、
転送したいファイルがあるディレクトリをカレントディレクトリにしておくと、少し操作が楽。)

 $ sftp userid@hostname
 
 sftpで使えるコマンド
 ls    #リモート側のカレントディレクトリのls
 lls   #ローカル側のカレントディレクトリのls
 cd    #リモート側のディレクトリを移動
 lcd   #ローカル側のディレクトリを移動
 put file  #ローカルからリモート側へファイルを転送する
 get file  #リモートからローカル側へファイルを転送する
 quit  #sftpコマンドの終了
 pwd   #リモート側のpwd
 lpwd  #ローカル側のpwd
 など


//--------------------------------------------------------------------------------
* ssh関係 [#r41c045d]

** X11転送を利用するオプション(ssh接続先で、ウィンドウを出すプログラムを動かして、ローカル側にウィンドウを出す) [#zc6bb53e]
 $ ssh userid@hostname -Y
 
 -YC を指定した場合、通信データが圧縮される。例えば、自宅から大学のコンピュータにssh接続してウィンドウを出す場合には、
     そこそこ速くなる。大学内のコンピュータ間ではほとんど速さは変わらない。
 -Y オプション使用しなかった場合、環境変数DISPLAYを使用することで、ローカル側にウィンドウを出すこともできる。

** 接続先のホストキーが変った時 [#m20fae32]
 $ 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 [#j6d7e693]

** ふたつのディレクトリ以下の階層を比較する [#m4c5d4bb]
 $ diff -r hogehoge1 hogehoge2

 使用例)
 $ diff -r  /save  /backup/save  | tee output-diffr.log
 異なるファイルがわかる。テキストファイルの差分が多量に出る場合、このlogの出力のうち、
 ^Binary
 ^diff          No such file or directory$は除く(シンボリックリンク先が無いとこうなる)
 ^Only
 を検索するとよさそうである。
 このように、
 $ grep '^Binary\|^diff\|^Only' output-diff.log | grep -v 'No such file or directory$' \
   | grep -v '\.Plo$\|\.pc$\|\.[oxa]\|\.\(la\|lai\|Po\|mod\)' | less


//--------------------------------------------------------------------------------
* find [#r39d7a51]

** ファイルhogehogeよりも新しいファイルをカレントディレクトリ以下の階層から探して表示する [#p87db404]
 $ find . -newer hogehoge -print


** ファイルのリストと、サイズを調べる [#s4a0762c]

 (HOGEDIRの部分は . など)

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

 (参考) 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のファイルを全て削除する [#lf02ce15]

 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オプションの例 [#be97ee56]

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


** カレントディレクトリ以下の階層で、ファイル名にcmakeがつくものをすべて削除する? [#recc8556]
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 [#pb518002]
 find Adir  -maxdepth 1 ! -regex '.*ABC.*' -type f  -exec echo cp -ip {} Bdir/  \;
Adirディレクトリにある、ABC文字列を含むファイル名以外を、Bdirにコピーする。
なお、ディレクトリ名にABCが入っていてはダメ。。。?

** AppleDoubleなどを削除する [#m299ce3b]
 削除は確認後にすべし。
 find . -path '*/\._*' -delete
 find . -path '*/\.AppleDouble' -exec /bin/rm -rf {} \;
 find . -path '*/\.DS_Store' -delete



//--------------------------------------------------------------------------------
* dig [#e74ed414]

** ホスト名を逆引きして調べる [#h69301ad]

- -xは逆引き(IPからホスト名)を調べるとき付けるオプション

 $ 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 [#v174f41a]

** 使い方 [#g0475a40]
プログラムは -g つきでコンパイルしておく。

 gdb a.out
 > run  #走らせる

 gdb a.out
 > break file.c:216  #ブレークポイントを設置
 > run -text input.rst input.rst-text  #走らせる(a.outに与える引数付き)

https://www.ois-yokohama.co.jp/oisblog2018/archives/3195 ~
http://www.fos.kuis.kyoto-u.ac.jp/le2soft/siryo-html/node49.html ~
https://www.tohoho-web.com/ex/draft/gdb.htm ~
などを見よ


//--------------------------------------------------------------------------------
* awk [#pfbb611a]

** 統計屋のためのAWK入門 [#kd282268]
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 [#jb058769]

** lとsオプションはつけた方がよい [#c6f3585d]
bc -ls とする
- -lで数学関数が使えるようになるし、割り算で小数点以下を設定(scale=4など)無しで表示するようなので。
- -sはPOSIX準拠、移植性のため。
- πを使いたい時は 4*a(1) とする。

** 数学関数の利用方法 [#i84c8f9c]
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.

** 独自の関数を定義 [#re257a36]

例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 とかの表現できない。 1.23*10^-4 とする。

A,B,C,D,E,Fは16進数の数字であり10,11,12,13,14,15を意味する
(基数が何に設定されてても使えるようだ。入力、出力の基数はibase=16、obase=16などとすると変更可)。

6.62*10^-34 のような値を扱うと、0になってしまう。scale=200 などとすれば計算できるが、
結果が200桁出て、指数表現できなく、不便 ---> bcではなく、pythonインタープリタで計算すればよい。

//--------------------------------------------------------------------------------
* top [#td1d6d6d]

** リンク [#oe6bc7fc]
[[topコマンドで覚えておきたい使い方14個>https://orebibou.com/2015/07/top%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E8%A6%9A%E3%81%88%E3%81%A6%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E4%BD%BF%E3%81%84%E6%96%B914%E5%80%8B/]] [#x0821353]

** バッチモードを使った例 [#kabe732f]
 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 [#m52bd359]

** よく使うパターン [#md4df247]

 ps  uxa --forest
 ps  ux --forest
 ps  u  $$
 ps  u  -C cmd

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

** 出力の見方 [#rd824fa1]

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

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

Fカラム(プロセスフラグ)~
  次の値の合計
  1 fork された(execは含まず)
  4 スーパーユーザー権限を使っている

VSZとRSS
 VSZ: プロセスの仮想メモリサイズ(未割当の領域を含むサイズ)
 RSS: プロセスの常駐メモリサイズ(他のプロセスと共有している領域も含む)
 サイズはいずれも KiB (2014-byte units)
[補足] 未割当の領域=プロセスが確保したがまだ使用されていなく、物理的に割り当てられていない領域。
その後、使用されると物理的に確保される(このときシステムに残りが無いと判ったらOOMでkillされる)。

** その他 [#b7cfda77]
man ps を参照のこと


//--------------------------------------------------------------------------------
* rsync [#o52103bf]

** 基本的な使い方 [#w4efe1e4]
 $ 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 [#q42e2894]

** アーカイブに保存するとき [#b1e15e07]
rootで作業する(ファイルのパーミッションを保つため。一般ユーザの場合そのユーザー所有に変更される)
 # find DIRECTORY | cpio -vo > FILE.cpio    #コピーアウトモードと呼ばれる
    -v は表示

** アーカイブから展開するとき [#a13b0ab9]
rootで作業する(アーカイブFILE.cpioにファイルが絶対パスで収められていたらそこに書き込まれるめ。
相対パスならカレントディレクトリから相対的に書き込まれる。変更のコントロールは出来ない?)
 # cpio -vidmu < FILE.cpio    #コピーインモードと呼ばれる
    -v は表示
    -d はディレクトリが無ければ作る
    -m は日付を保つ
    -u は上書きをする(付けない方が無難か)

** アーカイブの中身を見るとき [#u16da6a4]
 $ cpio -tv < FILE.cpio


//--------------------------------------------------------------------------------

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS