トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Cygwin
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ Referrence

___

■ NameRule

DESC 表記

   IN      : STDIN
   OUT     : STDOUT
   NULL    : STDIN, STDOUT から入力をうけない. 
    

   IN : NULL ならば PIPE できない
___

■ Option

DESC 引数の処理にGNU getoptsを使用しているので LongFormat, ShortFormat がある 長いオプションは覚え易く便利 コマンドライン引数の後にオプションを指定したりしても OK
    # Option とその値の間の SPACE は任意
    op[ ]+VAL


    # 引数がいらない OP はまとめても OK
    cp -Rup
___

■ tar

SYNTAX tar [ op ] [ file... ] tar [ op ] [ dir... ] DESC アーカイブ(複数ファイルをひとまとめにしたもの)の作成, 展開 TARファイルの圧縮, 解凍する OP c 新規にアーカイブを作成する f アーカイブのファイル名を指定する t アーカイブの中身を表示する u 追加するファイルがアーカイブ内のファイルより新しい場合にだけ追加する v 処理したファイルを一覧表示する x アーカイブからファイルを取り出す z gzipで圧縮、解凍をする
    # menuディレクトリのファイルをひとまとめにし、圧縮
    tar -cvzf menu.tar.gz menu/
    beer.txt
    wine.txt
    sake.txt

    # menu.tar.gz を解凍しアーカイブからファイルを取り出す
    tar -zxvf menu.tar.gz
    tar -xzf menu.tar.gz

    #  -c で標準出力し「-」で標準入力(パイプラインからのデータ)
    gunzip -c menu.tar.gz | tar -xf - 
___

■ break

SYNTAX break DESC 最も近い while , foreach から再開 IN OUT OP
    while [ 1 ]; do
        echo "input i:"
        read i
        break
    done
___

■ g++

DESC C++ コンパイラ C++ library を link する設定をして gcc をよびだす option は gcc と同様 LIB /lib/gcc/i686-pc-cygwin/4.3.2/
___

■ gcc

SYNTAX gcc [OP] file... DESC GNU project C and C++ compiler IN OUT OP c : Compile only g : Gdb o : Outfile D macro W(all) : Warning Level O : optimize S : Assemble Code 出力 L LIBPATH : library のパス指定 l lib : library 指定 E : Preprocessor C : (with -E) not del Commnt プリプロセッサにコメントの削除をしないように指示 P : (with -E) プリプロセッサに `#line' コマンドを生成しないように指示 x language 入力ファイルの言語を language であると明示 ( 拡張子による判定よりも優先 ) このオプションは、 次の `-x' オプションが出てくるまで、 後続する全ての入力ファイルに適用されます
     # language 
    `c'
    `objective-c'
    `c-header'
    `c++'
    `cpp-output'
    `assembler'
    `assembler-with-cpp' 

  // PreProcess のみ
  gcc -E foo.cpp   

  POINT
  //  ShaderCode の Preprocess にも使える
  gcc -E main.cg


  // c として扱う
  $(CGC) -xc -E -P $^ > $@.tmp  #

  // Assemble のみする 
  //    RET: main.s
  //
  gcc main -S main.cpp

  // libcunit.a を LINK する
  gcc cunit.c -L/usr/local/lib -lcunit

    Optimize Option
      Compiler が code 量を減らしたり, 実行時間を減らすようにする
    
      0 が最小 
            

    # Level 0 : Optimize なし ( Default )
    gcc -o main -O0 main.cpp 

    # Level 2 : 
    gcc -o main -O2 main.cpp 

    # Level 0 : Optimize なし ( Default )
    gcc -o main -O0 main.cpp 


    # Optimize は 各種 Option のセット

     -O3 
       -O2 に追加
      -finline-functions    // 単純な関数を caller 側に埋め込む ( inline ) 
      -fweb               // 
      -frename-registers

    # gprof と併用すると, 関数の呼び出し が変更されるのがわかる 
    gcc -O3 main.c -pg -o ./main
    .main
    gprof ./main



    # -O3
    index % time    self  children    called     name
                                                     < spontaneous>
    [1]    100.0    0.68    0.00                 main [1]
    -----------------------------------------------

    # -O0
    index % time    self  children    called     name
                                                     < spontaneous>
    [1]    100.0    0.00    1.86                 main [1]
                    1.48    0.00     500/500         b [2]
                    0.38    0.00     500/500         a [3]
    -----------------------------------------------

    WARNING 
    # C++ の関数を使用するときは libstdc++.a を LINK しないとだめ

    int main () {
      char *p = new char[128];
      return 0;
    }

    # ERROR    
    #    undefined reference to `operator new[](unsigned int)'
    gcc main.cpp

    # OK
    gcc main.cpp -lstdc++

    # g++ なら, gcc に必要な option をつけて build してくれる
    g++ main.cpp
    
C++ 固有 Option

  -fpermissive

    DESC
      template 化された 基底クラス method の宣言をなどがなくても Compile をとおす
      ( もちろん 非推奨 )

      // ルールに従わない code のエラーチェックのレベルをさげる
       Downgrade some diagnostics about nonconformant code from errors to warnings.  
      // さらに Compile も通るようにする
      Thus, using -fpermissive will allow some nonconforming code to compile.

    4 段階で処理

     前処理(preprocess)
     コンパイル
     アセンブル
     リンク

    # Preprocess のみ
    gcc -E hello.c | sed '/^[ ]*$/d' | less

    # Compile のみ
    gcc -S hello.c

    # Assemble まで
    gcc -c hello.c

    # 実行 file まで
    gcc hello.c


    // Object の構造
    
  ELF ファイルヘッダー 
  プログラムヘッダーテーブル 
  (複数の)セクション 
  セクションヘッダーテーブル    
  
  /usr/include/elf.h

  
ELF ヘッダー
.text :機械語に翻訳されたコード
.data :空
.bss :空
.note :
.rodata :プログラムで使用する文字列定数
.comment :コメント
.shstrtab :セクション名の文字列のテーブル。セクションヘッダで使用
セクションヘッダ:各セクションの情報を保持する構造体の配列になっています。

.symtab :シンボルテーブル
.strtab :関数名などプログラムで使用する文字列
.rel.text :



___

■ groups

SYNTAX groups [OP] [usr...] DESC usr の所属する group を出力 usr は 複数のグループに所属できます ( クラブ活動と考えるとわかりやすいでしょう ) id -G IN OUT OP g : /etc/group だけを参照 l : /etc/logingroup だけを参照 p : /etc/passwd だけを参照 // Administrators とは PC に対してすべてのアクセス権があること // usr と group を間違えないこと
    # usr を指定しないと Current Process の結果がかえる
    #
    # RET: なし root Administrators Users
    groups

    

WARNING 15 までしか登録できない ( OS 全体で. ) Project が終わったら解除すること
___

■ rehash

SYNTAX rehash DESC HashTbl を再構築する shell は PATH を毎度検索してない hashTbl に 実行可能 cmd を再登録する bash は PATH を必ず検索するので, rehash はなし 絶対 PATH ならばもちろん検索しない IN OUT OP
___

■ finger

SYNTAX finger [OP] name DESC login 中の user, name, tty, time, dir, shell を表示. IN OUT OP l : longlist s : simple f : no header m : only user
___

■ fold

SYNTAX fold [OP] file... DESC file を指定行でおりかえす space で token できるよ IN OUT STDOUT OP s :
  fold -3 foo.txt
___

■ ftp

SYNTAX ftp [OP] [host] DESC c:/windows/system32/ftp.exe もあります ftp サーバへファイルを転送します。 anonymousFTP server を利用して, account なしで DL できる FTPserver 上に Acount がある場合は, Password 認証がいります POINT 定期的なファイル転送をするなら ftpコマンドをスクリプトファイルにまとめておくこと。 インタラクティブなコマンドを利用するなら あらかじめプロンプトを無効にします IN OUT OP d : debug g : glob i : ignore prompt n : .netrc ( autologin を利用しない ) d : P port ( port 指定 ) t : v : verpose
    # Remote host にアクセス
    ftp cpz9.actnw.jp

    # UserName 
    > Name    

    # Password
    > Name    

    ftp> status       // 現在の状況説明. 
    ftp> pwd          // pwd きりかえ
    ftp> bye          // session 終了. 
    ftp> ftphost
   # ftp.ring.gr.jp に接続
   shell> ftp ftp.ring.gr.jp
     
     # dir へ移動
     cd dir 

     # ファイルのリストを取得する
     ls

     # リモート上にディレクトリを作成する
     mkdir tmp
     
     # binary に変換
     binary

     # foo.tgz をもらう
     get  foo.tgz 

     # FTPサーバから切断して終了
     bye
# 自動実行のためなどに script から読ませるには次のようにする。
    cat scriptfile  |  ftp -n
    open  ftphost

    user   username   password
    
    passive

    send  d:/test.txt   /test.txt
    
    bye
# script(file) から読ませる
    ftp.exe -s:update.txt
___

■ ed

SYNTAX ed [OP] [file] DESC LineEditor IN OUT OP s : silent こう使います

  
  ed file

  # n 行目表示
  1p

  # 追加
  $a
  comment
  .  // 終了
  w  // file 書き出し.
  1d // i 行目を削除.
  
  c-d // 終了
___

EX >■ EX

SYNTAX [OP] file... DESC IN OUT OP file :1 // 1 行目に移動 :4d a // buf a に格納 :put a // :wq // かきだし
___

■ bg

SYNTAX bg [%job] DESC background job 実行 IN OUT OP

  find . -iname "foo"

  # 中断する
  c-z

  [1] find . -iname "foo"
  bg
___

■ while

SYNTAX while exp do cmd done DESC IN OUT OP
___

■ wait

SYNTAX wait [id] DESC JobBg の終了まち 洗濯完了待ちにドーゾ IN OUT OP
  find /cygdrive/d > /dust/foo
  [1] 1849
  wait %1   // 処理まち
  ls -l     
  [1]+ Done 
  ls- l
___

■ unalias

SYNTAX unalias [OP] [name] DESC alias 解除 IN OUT OP a : all
  # すべて解除
  unalias -a
___

■ umask

SYNTAX umask [OP...] [mode] DESC User Mask を指定する File の保護モードの MASK を指定する POINT UNIX では Default の保護モードがある
    実行形式でない File
    110 110 110

    実行形式 File
    111 111 111
IN OUT OP
    # 現在の Mask を確認
    #  RET
    #    0022
    umask

        
    110 110 110   元の値
    000 010 010   MASK 022
    -----------
    110 100 100   


    # 他人に すべてを見せない
    umask 077

    110 110 110   元の値
    000 111 111   MASK 077
    -----------
    110 000 000   

    # 実行はだれでも許す
    umask 066

___

■ ulimit

___

■ limit

SYNTAX ulimit [OP...] [limit] DESC 各 Process が利用する資源 ( Memory, CPU 時間, File サイズ )に制限をかける 設定する値には 2 種類 HardLimit : 本当の上限値 ( su 以外は変更できない ) SoftLimit : User の指定する上限値 IN OUT OP v : VMem s : stack n : nrFile ID c : Corefile サイズ d : sz DataSegment p : sz Pipe

    # CPU 上限時間を 600 sec
    ulimit -S -t 600
    ulimit -S -t unlimited


    # HardLimit
    ulimit -H -t 600

  POINT
    # Core File サイズを 0 にする
    ulimit -S -c 0

    # VirtualMemory を 256 K
    ulimit -v 256 



  

___

■ type

SYNTAX type [OP...] cmd... DESC cmd の種類, dir を表示. IN OUT OP a : allocate p : Print hash Val // 索引 t : Type
  # RET: echo is a shell builtin
  type echo

  # RET: echo is /usr/bin/echo
  type -a echo

___

■ trap

SYNTAX trap [OP] [cmd...] [sigid] DESC shell が sigid をうけたあとに cmd を実行する IN OUT OP
    trap "you send signal SIGINT  : Intererapt Signal c-c" 2
  SIGHUP 1
  SIGINT 2
  SIGQUIT 3
  SIGTERM 15
___

■ time

SYNTAX time DESC Process 処理時間の user, system, real 時間を計測する POINT gprof は user 時間のみを計測するため, 最初に time で測定しておく

    # main.exe の時間を計測する
    time ./main.exe

    real   xxx
    user   xxx
    system xxx

    
    time sleep 2

    # RET:
    real  0m2.251s     # 実時間
    user  0m0.030s
    sys  0m0.061s


    # 任意の場所に記述する
    cat test.txt | /usr/bin/time main.exe

    



___

■ times

SYNTAX times DESC Process 処理時間の usr , sys , の合計時間を計測
   # 自作 Program の時間を計測する
   times converter.exe
___

■ diff

SYNTAX diff [OP...] file1 file2 diff [OP...] dir1 dir2 DESC file 同士を比較して, その差分と同一にするための情報を出力 text なら 行単位で比較する IN OUT OP i : insensitive w : ignore WhiteSpace l : long fmt s : 相違がない場合も報告 B : 空行のみの違いを無視 ignore Blank lines y : side-by-side 形式 ( 横にならべて比較 ) c : Context 形式 r : Recursive POINT emacs dired = でもできる [+] : 増えた [-] : 減った [!] : かわった
  // -w をつけるのは オススメ    
  diff -w ori.txt ret.txt    

  [< ] [>] [-] が差分の違い.
  # c: "Change" 
  # Line69 - Line71 が次のように変更された


  69,71c69,71     
  <  ======= aaa =======
  ---
  > ======= bbb =======
POINT text OR binary は diff が自動判定してくれる
   
   ファイルの最初の数バイトを調べて, テキストかバイナリかを決める

   正確なバイト数はシステムに依存しますがそれは通常数千になります

   ファイルの1部のすべてのバイトが `null' ではない場合
   テキストだと判定
        Text は \0 が ない ( UTF16 以外のとき )

   それ以外はバイナリと判定 ( binary は 0 がまざる )
明示したいときは( cygwin の環境ではあまり からないような... ) Text ですると, binary で比較してくれないような ... diff --binary a b --binary データをバイナリモードで読み書きする (Linux やその他の POSIX ホストでは意味なし) -a, --text ファイルがテキストには見えないような場合でも、 全てのファイルをテキストとみなして 1 行ずつ比較をする これすると, binary の比較もできる POINT binary のように扱うように命令できる diffが比較している2つのファイルのうちのがバイナリと考えるとき 通常ファイルの組を概要の出力書式が選択 されているように バイナリファイルが異なっていること だけを報告 行単位での比較がバイナリファイルにて普通は 意味が無いため ファイルがテキストファイルに扱いにしたいとき `null'文字が含まれているテキストファイルを比較する可能性があります diffは誤って これらをテキストファイル ではないと決定する `null'文字を特殊なフォーマットを示すために使用する ワープロで使用されている フォーマットのファイルを比較する可能性もあります 強制もできます
    -a, --text
  ファイルがテキストファイルであると考えさせ行ごとに比較できます
WARNING このオプション を使用して比較しているファイルが 実際はテキストを含んでいないとき おそらくファイルには数個の改行文字しかなく diffの出力は ファイ ルに含まれているすべての文字からなる長い行の差異を表示する hunk になる ( 見れたもんではないということ ) OP q --brief すべてのファイルをバイナリファイルだとdiffに強制的に考えさせ ファイルが(どのように異なっているかではなく) 異なっているかどうかのみを報告させることも可能 バイナリファイルの差は diff の出力結果がすべての差を取り切れないので 問題がおきる ( diff はステータス2で終了) この問題は`--a'や`--text'オプションを用いたり `-q'や`--brief'オプションを用いり発生しないので これらどちらのオプションでも diffはバイナリファイ ルをテキストファイルのように扱う テキスト と バイナリ で差がある OS では diff は通常すべてのデータをテキストとして読み書きする 代わりにバイナリデータとしてdiffに読み書きさせるために `--binary'オプションを使用 このオプションは GNUや伝統的なUnixシステムのようなPOSIX-準拠のシステムでは効果なし 多くの PCOS では 行末の改行の後にキャリッジリターン[ \r ]があります そのようなシス テムでは diffは通常入力されるこれらのキャリッジリターンを無視し それぞれの出力の行末にキャリッジリターンを生成しますが --binary diffはそれぞれの[ \r ]をそのまま入力文字として扱い 出力の行末にキャリッジ リターンを生成しない POSIX-準拠のシステムで変換する予定のテキストではないファイルを扱うとき, これは役に立つはず
  # このファイルは binary なので, \r を SKIP しないでよんでくれよ ! こと

`--strip-trailing-cr' diffは行末の改行にキャリッジリターンが続いている入力行を普通の改行として扱う 多くの PC OS から インポートされた不完全なテキストを 比較するとき役立つ このオプションは行が読み込まれる方 法に影響があり それは順次, 比較される方法と出力の方法に影響していきます. 2つのファイルをバイト単位で比較したいとき 2つのファイルのバイトごとの 差の値を表示するために `-l'オプションを用いてcmpプログ ラムを使用することが可能です cmpを用いると これらの バイトのASCII表現を表示するために`-b'オプションを使用するこ とも可能です 比較しているファイルのいずれかをdiff3がバイナリと考えるとき そのような比較は普通意味が無いので ふつうはエラー を報告します.diff3は ファイルがバイナリかどうかを diffが決定するテストと同じテストを使用します.diffを 用いるときと同様に 入力ファイルにテキストでないバイトが含まれているが それ以外はテキストファイルに似ているとき `-a'や`--text'オ プションを使用すり diff3にすべてのファイルをテキストファ イルと考えさせ 行単位での比較を強制できます
___

■ deroff

SYNTAX deroff [OP...] [file...] DESC file の中に記述された roff 構文をすべて削除して残りを STDOUT IN OUT OP
___

■ dd

SYNTAX dd [OP] DESC file format 変換 && 出力 upcase, downcase にドーゾ IN OUT OP
    dd if=foo of=bar conv=ucase | swab | block | unblock
___

■ dbx

SYNTAX dbx [OP] [obj...[corefile]] DESC debugger corefile : ERR 発生時の状態を出力 IN OUT OP
  cc -g foo.c -o out
  
  dbx out

  // 1-21 行目表示
  list 1,21 

  // breakpoint
  stop at 9 

  // 変数( symbol ) c を表示
  // 名前から address をひくことができるのね 
  print c   
  cont  
  quit 
___

■ suspend

SYNTAX suspend [OP] DESC shell の一時停止 c-z と同じ SIG_CONT ( job 再開 signal ) をうけたら再開. S mark をつけるよ IN OUT OP suspend
___

■ set

SYNTAX set [OP] [arg...] DESC IN OUT OP HISTSIZE=100 // shellscript と同様の SYNTAX SHELLVAR PPID : prt ps id // windows は 1 OSTYPE : OS TYPE HOSTNAME GROUPS : 現 user が属する Group list OLDPWD : 前の PWD RANDOM : RANDOM な値 自由につかってね SHELLOPTS : 現在の SHELLOPTS
___

■ cut

SYNTAX cut [OP...] [file...] DESC file から field 削除 awk でも代用できる OP c(Character) f(Field) s(Skip) : dlm を含まない行を出力しない IN : STDIN OUT: STDOUT 区切り文字の指定は 1 文字だけ Field の番号は 1 から指定する。
    # スペース区切りで 2 番目のカラムを取得する
    cut -f 2 -d " " test.txt

    # dlm が連続する場合は 空トークンとしてカウントされる
    #
    # BAD
    echo "  aaa  bbb" | cut -d " " -f 1

    # そこで tr でまとめる
    #  OK
    echo "  aaa  bbb" | tr -s " " " " | cut -d " " -f 2


    # [\n] は指定できない
    # BAD
    echo `echo $tmp | cut -f 2 -d "\n"`
    
    # STDIN から
    cat ~/foo.txt | cut -f 2 -d " "

    # 削除もできる
    cut -f2 -d: foo.c  // 第 2 field 削除. dlm [:]
範囲を指定するには N N- N-M -M といった指定をする
    cut -f 5-7 -d: foo.c

    # RET: c d e
    echo "a b c d e" | cut -f 3- -d " "

    # RET: a b c
    echo "a b c d e" | cut -f -3 -d " "

    # [,] で複数を指定
    cut -f 5,7 -d: foo.c 

    # 重複したときは, まとめてくれる
    cut -f 5,7,5 -d: foo.c 

    echo "c:/test.txt" | cut -f 1 -d "."

    # Field が Token より多いときは "" をかえす
    #  RET
    #    ""
    echo "c:/foo/bar/test.txt" | cut -f 6 -d "."

    # 分割できないなら そのまま返る
    # RET    c:/foo/bar/
    echo "c:/foo/bar/" | cut -f 6 -d "."

    # 2 byte 目を出力
    # RET
    #    b
    echo abc | cut -b 2


    # 表示する文字数の範囲を指定する
    cut -c 5 foo.txt
___

■ csh

SYNTAX csh [OP...] [arg...] DESC shell with c link SYNTAX IN OUT OP i : Interactive mode f : fast ( not read .cshrc )
    # csh で実行
    csh foo.sh
___

■ comm

SYNTAX comm [OP...] file1 file2 DESC 2 つの sort すみ file を比較して 片方にだけある行と, 両方にある行を分類する IN OUT OP 1 suppress lines unique to FILE1 2 suppress lines unique to FILE2 3 suppress lines that appear in both files
  comm foo.c bar.c
  
  foo
      bar
    common


  # B のみにある Line を出力
  comm -13 A B  

  # stdin と 比較
  #
  echo aaa | comm - B



___

■ colrm

SYNTAX colrm [scol [ecol]] DESC Start - End Column を削除 IN STDIN OUT OP
    # 1 から start 
  colrm 1 3 <  foo.c
___

■ cmp

SYNTAX cmp [OP] file1 file2 DESC file 内容を 1 byte ごとに比較 相違があるかどうかのみチェック 詳細は diff で POINT 回帰テストとして利用できる IN OUT OP
    # RET: test.txt b differ: char 4, line 1
    cmp a.txt b.txt

    # Silent 異なるかどうか表示
    cmp -s a.txt b.txt

    # STDIN と比較する
    echo aaa | cmp a.txt -

    # 2 Byte 目までを比較
    cmp -n 2 a b

    # 指定した Byte 位置まで Ignore する
    cmp -i 2 a b
___

■ chsh

SYNTAX chsh name [shell] DESC IN OUT OP
___

■ chown

SYNTAX chown [OP...] owner file... DESC Change Owner IN OUT OP R : Recursive
    # "test" という usr にかえる
    chown test foo.c

    
    # windows の local usr でないとダメ
    #      chown: invalid user: `foobar'
    chown  foobar   foo.c


    # Owner を変更すると  Permission にも影響がでる
    chmod  700  foo.c
  

    # 自分のものでは ないため , Permission ERROR
    chown  otherusr  foo.c
    echo foo >> foo.c


# Command Prompt でも確認できる
    dir /Q
    2010/06/29  07:19    60 Hostname\test         usr_test.txt



___

■ chmod

SYNTAX chmod [OP] mode file... DESC file の Permission( 許可 ) mode 変更 POINT Windows( Explorer の表記と比較してみた ) Windows で 読み取り専用 ON < -> r--r--r-- ( Read ) OFF < -> rw-rw-rw- ( RW ) Cygwin 経由で変更 POINT Windows の Service に連動しているだけ chmod 111 foo.txt < -> 読み取り専用 ON chmod 333 foo.txt < -> 読み取り専用 ON chmod 777 foo.txt < -> x はつかない ( 中身を解析してる ? ) どうも emacs の dired の表記はあてにならない ( 拡張子によって 表記がかわる ) IN OUT OP
    # group add Write Permission


    # Directory に Write 権限を消すと, ディレクトリの編集ができない
    # ( Directory というファイルの編集ができない )
    chmod u-w dirfoo


    変更を対処をきめる
       A  combination of the letters "ugoa" controls 
       which users' access to the file will be changed: the user who

       owns it (u), 
       other users in the file's group (g), 
       other users not in the file's group (o), or  all  users  (a).   

       If  none  of these are given, the effect is as if a were given, but bits that are set in the umask
       are not affected.


The first digit selects 


自分
the set user ID (4) and
       set group ID (2) 
       and restricted deletion or sticky (1) attributes.  

同一グループ
The second digit selects  permissions
       for  the  user who owns the file: read (4), write (2), and execute (1); 

その他のグループ
the third selects permissions for
       other users in the file's group, with the same values; 

and the fourth for other users not in  the  file's
       group, with the same values.


    # u : 自分 ( User )
    # g : 同じ仲間 ( Group )
    # o : 他人 ( Other )
    # a : みんな ( All )


    # 全員に read の権限を与える
    chmod a+r foo.txt
    
    # all usr に実行権限
    chmod a+x file    

    # group add Write Permission
    chmod g+w foo.c  

    # group add Write Permission
    chmod g-(e | w | x) foo.c  

    # Directory 以下をまとめて指定( Recursive )
    chmod -R 777 dirname
    # ls -l での表記
    User  Group  Other

    # bit mask
    Read Write eXecute
    4    2     1

    
    # Group に Write 権限
    chmod   020   filename

    # "6" とあれば Read + Write
    chmod   060   filename

    
まとめ

     Windows の usr account を変更したら反映するには mkpasswd -l
     Windows 上の usr account を変更して 作成した file は
  

Windows 上の User を確認
    net user

    \\hostname のユーザー アカウント

    -------------------------------------------------------------------------------
    Administrator            ASPNET                   Guest                    
    HelpAssistant            sshd                     


    # 他の usr ( test ) が作成した file 

    ls -l
    -rw-r--r--   1 test           なし           0 Jun 29 06:42 usr_test.txt


    # Explorer 上でつくると 777 になる
    -rwxrwxrwx   1 test           なし           0 Jun 29 06:42 usr_test.txt

    
    # 自分 usr ( my ) では変更できない
    echo foo >> usr_test.txt
    bash: usr_test.txt: Permission denied


    # usr( my )から 変更してみる
    chmod 777  usr_test.txt


    # 管理者権限があるから変更できる。
    ls -l
    -rwxrwxrwx   1 test           なし          30 Jun 29 07:09 usr_XXX.txt
    echo foo >> usr_test.txt

    
    # 再度変更すると Permission ERROR
    chmod    700       usr_test.txt
    echo foo >> usr_test.txt
    bash: usr_test.txt: Permission denied

    Directory にも Permission を設定できる

    mkdir foo
    # 
    chmod 600 foo

    # 
    cd foo

    pwd


    実行権限 の TEST

    # これだと実行できる
    chmod 600 test.sh

    # "r" を消すと だめ
    chmod 100 test.sh
    bash: ./test.sh: Permission denied
    
___

■ df

SYNTAX df DESC Filesystem 全体の空きスペースの取得 OP

  # Current sub tree の空きスペース取得
  df .

  # C Drive の空き
  df c:/

  # 
  df -k

  # Human-readable
  df -h .

___

■ tar

key c : new archive create x : restore archive OP v : 処理したfile出力 f : 指定する記録媒体名 tar cf foo_arc ~/work // archive作成 tar xvf foo_arc
___

■ chgrp

SYNTAX chgrp [OP...] group file... DESC IN OUT OP R : Recursive v : verpose f : err 発生時に出力しない
    # 適当な grp 名ではだめ
    chgrp newgrp foo.c
___

■ cb

SYNTAX cb [OP] [file...] DESC c program beatifier IN D:STDIN OUT OP s : Kernihan & Richie の標準形式.
___

■ cancel

SYNTAX cancel [OP...] [id...] [prt...] DESC line printer の出力要求 cancel IN OUT OP a : rm all e : Empty Q
___

■ biff

SYNTAX biff [OP] DESC mail が着信した時点での msg 出力. IN OUT OP
  # 着信状態をチェック
  biff
___

■ lpq

SYNTAX lpq [OP] [job...] [usr...] DESC Line Printer Queue 指定 job, 指定 usr の spool queue 状況を出力 ENV:PRINTER で printer 指定 ( 指定がないようだ ) IN OUT OP + : 空になるまで 報告 l : 詳細情報 Pptr : printer 指定
___

■ lpr

SYNTAX lpr [OP...] [file...] DESC printer( spool )に job を出力 IN OUT OP r : 印刷完了後に file 削除 lpr -Plp foo.c // spooler に転送 RANK OWNER JOB FILE TOTAL SIZE active usr_hoge 31 foo.c 1024byte lprm 31 lpq // 待ち行列表示 no entries
___

■ lprm

SYNTAX lprm [OP] [job...] [usr...] DESC spool q から 指定 job 削除 IN OUT OP - : all job remove
___

■ lpstat

SYNTAX lpstat [OP] DESC printer 状態の出力 IN OUT OP t : all o : Output req info
  # RET: printer epson111 is idle 
  lpstat -t
___

■ mail

SYNTAX mail [OP...] [usr...] DESC 指定 usr に mail 発信 IN OUT OP
  mail usr001
  Subject: Meeting
    tell your sch
  
  login usr001
  
  mail // mail を読む
  
  & 2 // 指定
  & d // 削除
  & q // quit 
// mail をかく mail user_foo Subject: appointment // 表題. Message ... c-d Cc : carbon cp # mail を読む mail 2. list から選ぶ. d : del s : save q : quit
___

■ lint

SYNTAX DESC IN OUT OP a : long 変数への不正な値の代入 b : 実行されない break c : 移植性のない cast u : undefined variable funtion v : not use variable function x : not use extern variable z : 未定義の構造体
___

■ ln

SYNTAX ln [OP] file [file2] DESC SymbolicLink は 別名のこと 消しても OK Windows における Shortcut IN OUT OP s : SymbolicLink
  
  # foo.cpp の SymbolicLink( Alias) を bar.cpp という名前で作成
  ln -s  /pro/bar/foo.cpp /data/bar.cpp

  # Directory の Link
  ln -s  /usr/bin  ~/bin

  # src の HardLink を dst という名前で作成
  ln src dst
___

■ lock

SYNTAX lock [OP] DESC 端末の Lock IN OUT OP
    # 15 分 lock 
    lock -15
___

■ login

SYNTAX login [OP] [name] login [OP] [name [env]] // ENV 指定で DESC session 開始 IN OUT OP p : Preserve cur ENV r : login remote host login xxx Password: POINT Login とは これから入る Computer に対して, 認証をうけること
___

■ logname

SYNTAX logname DESC system に login したときの名前 Windows に login している Accout 名がかえります IN OUT OP
  logname -> xxx
___

■ lp

SYNTAX lp [OP] [file...] DESC 指定 file を line printer への出力要求 Job Q とかは Printer をメタファーにするとわかりやすいかも. IN file D:STDIN OUT OP c : file の cp を作成して出力 dDest : printer 指定 m : mail 送信 nNum : 枚数指定 s : Silent t : add Title qPri : Job の優先度 Ppage : page 指定して出力 E : Server に接続する場合は Encode
  # 1-3, 5 page 目を出力
  lp -P 1-3 5 foo.c
___

■ leave

SYNTAX leave [hhmm] DESC 指定した時間に alarm これないかも IN OUT OP
  leave 1630
___

■ route

SYNTAX route [OP] cmd [-net|host] tgt [nm] [gw] [arg] route [OP] 操作 [-net|host] あて先 [nm] [gw] [arg] DESC RoutingTable の操作 IN OUT OP cmd add : 経路追加 del : 削除 flush : 全削除 change : 属性変更 get : あて先に対する 経路表示. tgt -net network -host hostname nm : netmask 手動設定. gw : gateway 指定 arg cloning 経路をひとつ生成. xresolve 使用中の msg 発行. iface あて先が直接到達可能. static 手動で追加経路を指定 rtt n : 往復時間を指定 rttvar n : 往復時間の差異 n を指定. senddpipe n : 送信 wnd size 指定 hopcount n : gateway を n にする OP f : 全 gateway entry 削除. n : host | network を数値で表現. v : Verpose q : Quit C : Routing Chashe を表示
    route add -net 192.165.0.4 -netmask 255.255.255.0

    # Table へ追加
    route add default gw 192.168.1.1

___

■ scp

SYNTAX scp src dst DESC SSH によって暗号化した安全な Copy する POINT password なしで転送するには remote 側に公開鍵をわたしておく

    // local host の d:/foo を remote host の usr の ~ ( home Directory ) に移動する
    scp /cygdrive/d/foo  usr@localhost:
    usr@localhost's password: XXX

    //  Remote の / に copy 
    scp /cygdrive/d/foo  usr@localhost:/

    // Remote から Local にもできる

___

■ rsh(ssh)

SYNTAX rsh [OP] hostname [cmd] ssh [OP] hostname [cmd] DESC Remote Shell localnetwork 上の machine に指定 Command で実行させる network 経由で remote machine に login して command を実行する 通信データの暗号化と 公開鍵暗号をつかって安全な認証をする。 SSH という Protocol を使って通信する。 ssh ではいるのは login Account がばれないようにするため Server 側は Daemon( sshd )を起動しておく Server の設定をする
    # "-y" で All Yes
    ssh-host-config -y


    次のファイルができる
    
    // HostKey のペア
    /etc/ssh_host_key
    /etc/ssh_host_key.pub

    // Hostの RSA Key のペア ( SSH2 で使用 )
    /etc/ssh_host_rsa_key
    /etc/ssh_host_rsa_key.pub

    // Hostの DSA Key のペア ( SSH2 で使用 )
    /etc/ssh_host_rsa_key
    /etc/ssh_host_rsa_key.pub

    // OpenSSH の Server 用の設定ファイル
    /etc/sshd_config

    
    Permission == 許可

Server の設定ファイルを修正 /etc/sshd_config

    # 22 番 port で開始
    Port 22
    
    # Permission のチェックをしない
    StrictModes no

    # 実行権限を分離する
    UsePrivilegeSeparation yes

    # 安全な転送のため, sftp を利用する( SubSystem として ftp を利用する )
    Subsystem  sftp  /usr/sbin/sftp-server

sshでパスワード認証を禁止するには Server を起動する
    # Start する
    cygrunsrv -S sshd

    cygrunsrv -E sshd ;     cygrunsrv -S sshd

    cygrunsrv -Q sshd

    # service を削除する
    cygrunsrv -R sshd


    WARNING 
      inetd が起動時は sshd は起動できない

    # 動作チェック
    netstat -an

    Active Connections

      Proto  Local Address          Foreign Address        State
      TCP    0.0.0.0:23             0.0.0.0:0              LISTENING
___

■ サーバへのログイン。( 鍵無し )

ssh -l userName hostname # local にはいる ssh -l xxx localhost 以下のように聞かれるので、[ yes ]を入力する。( 表示されるのは、初回のみ ) The authenticity of host 'serverName ( ipAddress )' can't be established. RSA key fingerprint is 18:7e:00:d6:e0:70:05:e2:53:d3:53:d1:2e:50:91:9b. Are you sure you want to continue connecting (yes/no)? 以下のように聞かれるので、パスワードを入力 ( password は windows login の account, password ) Warning: Permanently added 'serverName,ipAddress' (RSA) to the list of known hosts. userName@serverName's password: 以下のように表示されればログイン成功 Last login: Fri Dec 9 21:58:08 2005 [userName@serverName userName]$ [ exit ]を入力して、ログアウトする。 $ exit Connection to severName closed.
___

■ 鍵の作成と登録

鍵の作成。 # クライアント側で、鍵の作成 $ ssh-keygen -t rsa ※ [ rsa ]は、RSA暗号方式の鍵を作成するオプション 他には以下の指定が有りますが、 rsa が主流 dsa DSA暗号 rsa1 SSH1のRSA暗号 以下のように聞かれたら、[ Enter ]を押す Generating public/private rsa key pair. Enter file in which to save the key (/home/userName/.ssh/id_rsa): 以下のように聞かれたら、パスワードを入力( 空にする ) Created directory '/home/userName/.ssh'. Enter passphrase (empty for no passphrase): 次に以下のように聞かれるので、再度パスワードを入力 Enter same passphrase again: 以下のように表示されて、 Your identification has been saved in /home/userName/.ssh/id_rsa. Your public key has been saved in /home/userName/.ssh/id_rsa.pub. The key fingerprint is: 29:d7:6a:d6:60:cb:83:b3:c0:d3:1b:fd:48:b5:42:45 userName@serverName [ ~/.ssh ]に、以下の鍵が作成 秘密鍵 : id_rsa 公開鍵 : id_rsa.pub ※ FDを使用するなどして、公開鍵をサーバへ移動 公開鍵を、サーバへ登録します。 サーバにログイン # ディレクトリを移動 $ cd $ cd .ssh # 無ければ作成 $ cd $ mkdir .ssh $ cd .ssh # クライアントで作成した公開鍵を、ファイル[ authorized_keys ]に追加登録 $ cat id_rsa.pub >> authorized_keys # [ authorized_keys ]には複数の鍵の登録が可能 # パーミッションを変更 # rw- --- --- $ chmod 600 authorized_keys The authenticity(信頼性) of host 'localhost (127.0.0.1)' can't be established localhost は安全でないよ ? それでも接続する ? RSA暗号は インターネットでも広く利用されている話題の暗号 フィンガープリントとは 日本語に直すと「拇印」や「指紋」意味 電子メールの内容やデジタル証明書などが改ざんされていないことを証明するデータ 接続を続けますか ? WARNING: Permanently added 'localhost' (RSA) to the list of known hosts. Write failed: Software caused connection abort * 公開鍵の作成 * PASSWORD usrname *** WARNING: group and other have been revoked write permission to your home *** WARNING: directory /home/usrname. *** WARNING: This is required by OpenSSH to allow public key authentication using *** WARNING: the key files stored in your .ssh subdirectory. *** WARNING: Revert this change ONLY if you know what you are doing! *** Query: Shall I create an SSH1 RSA identity file for you? (yes/no) yes *** Info: Generating /home/usrname/.ssh/identity Enter passphrase (empty for no passphrase): Enter same passphrase again: *** Query: Do you want to use this identity to login to this machine? (yes/no) yes *** Info: Adding to /home/usrname/.ssh/authorized_keys *** Query: Shall I create an SSH2 RSA identity file for you? (yes/no) no *** Query: Shall I create an SSH2 DSA identity file for you? (yes/no) no *** Info: Configuration finished. Have fun!
___

■ ACCESS 許可の設定

Linuxサーバでアクセス制限する方法 ftp のアクセスを許可するが 192.168.0.* zdnet-n.pub.softbank.co.jp のアクセスのみを許可 in.ftpd: 192.168.0. zdnet-n.pub.softbank.co.jp // sshコマンドのログイン要求で「Permission denied」と表示される // /etc/hosts.deny SYNTAX デーモン名: (ホスト名|IPアドレス) DESC Reboot しなくても OK Linux系 OSでは このファイルを使ってリモートホストからのアクセス制限できる
  # comment

    sshd: 
    # すべてを拒否する
    # ssh_exchange_identification: Connection closed by remote host

    # 身分証明が切られた
    # Remote Host によって 接続が切られた
    ALL: ALL
    # localhost のみ許可する
    sshd: localhost

  # ssh Daemon の設定ファイル
    # Listen する Port を変更する
    Port 23
    # 
    # 

  



# TCP/IP telnet の説明 IN OUT OP luser : 他 user で cmd 実行 n : STDIN を /dev/null に redirect する. d : socket debug 有効 x : Data 暗号化 ssh g : remotehost が localforwarding に接続することを許可する f : background 実行 i file : RSA 認証に使用される file 指定. I name : login する user 名指定. p port : port 指定. q : Quit s : subSystem 起動 v : Verpose l : Login User ssh linux02 gcc exfile.c
  // Tera Term の代わりに利用する
  // ふだん Windows ではいっている System なら login できる

  # この usr のみアクセスを許しますよってこと
  ssh  -l usr hostname
  

  # 後はいつもの Shell の操作
  mkdir test

  # おわり
  exit
# netstat -n で IP を調べてアクセス # 外から自分の Machine を指定してみる # RET: 接続が拒否されました. # remote desktop ってそういうことか ! rsh xx.xxx.xxx.xx port 22 == SSH # RET: connection refused # 自分へはだめ ssh localhost Client から接続します SSH Protocol が組み込まれている Client が必要です TTSSH を利用します TeraTerm の拡張 SSH2 には非対応

    // Install します
    

    // 解凍したファイルを TeraTerm ディレクトリに コピー
    
    
    // Program > から実行します


    // TeraTerm からは, 



    // ちなみに windows の Account ではいれた( ここはそういうものか? )
    //
     Use Plain Password to login
     username
     PassPhrase
WARNING /etc/sshd_config で Version を変更して再起動すると動作した
      #Protocol 2

      # こっちを使う
      Protocol 1.2
安全ではないため 公開鍵 を Login に使う POINT password 認証なら, 以下の操作は不要 // PublicKey, PrivateKey のペアをつくる // PublicKey を Server の user home におく 次の方法でやります
    // Client で Key をつくり, scp で server に転送

    // server でつくり, フロッピーなどで, Client に Private Key を送る
// 鍵をつくります # このコマンドで作成 ssh_user_config # ~/.ssh 以下に作成 # すべて Yes で "xxx" をパスワードにする ssh-user-config -y -p xxx /etc/hosts.allow /etc/hosts.deny
    sshd へ access するには設定ファイルを変更しておく


___

■ ruptime

SYNTAX ruptime [OP] DESC LocalNetwork 上の Machine 稼動状況を出力 どの Machine( Host ) が稼動しているか 調べてね. 現在ないかも IN OUT OP a : all( idle user 含む ) l : LoadAverage で sort r : Reverse t : uptime で sort u : user 数で sort
___

■ ident

SYNTAX ident file DESC identify RCS keyword strings in files 実行 File がどの Rivision で build されたか確認する Binary に RCS keyword があることが前提
    cc foo.c

    # src, obj から RCS keyword を確認する
    ident  foo.c a.out

___

■ rwho

SYNTAX rwho [OP] DESC LocalNetwork 上の Login している user 状況報告. IN OUT OP a : all
  rwho -a
___

■ script

SYNTAX script [OP] [file] DESC STDOUT に出力される情報を指定 file へ出力 IN OUT OP a : Append q : Queit t : TimeStamp
  script 
  echo foo;
  echo bar;
  exit;
  ls typescript 
___

■ ping

SYNTAX ping [OP] host [psize] [cnt] DESC サーバが生きているか(反応するか)調査します packet を送り, 交信可能ならば, response がかえる c-c で中止 ipconfig で LocalMachine が接続してたら 相手を ping で確認 host : DomainName | IPAddress で指定 DomainName と IPAddress は意味は同じ psize : packet size cnt : 送信回数 IN OUT OP c cnt : d : 使用する socket に SO_DEBUG をつける i sec : I sec : interval n : IPAddress 表示 q : quit ( 要約 ) R : Record s sz : v : Verpose
    ping `hostname`
    ping www.yahoo.co.jp

    # 以下でも OK ( Domain == IP == hostname ) みたいなもんだね 
    ping www.google.co.jp 


    # www はいらない
    ping yahoo.co.jp


    # 自分自身にもできる
    # 64 Bytes from 192.168.0.2 
    ping 192.168.0.2 


    # IPAddress を調べるのにも使う
    #    PING hostname (127.0.0.1): 56 data bytes
    ping localhost


    # 生きてる ? 
    ping hostname

    # IP を調べることにも使える
    ping hostname
WARNING ping も DNS Server を利用するため, 設定が正しくないと失敗する ICMP Protocol を Block するルータでも失敗します
___

■ rcp

SYNTAX rcp [OP] file1 file2 rcp [OP] file... dir ecp [OP] [user@host1:] file1 [user@host2:] file2 DESC リモートマシン間でのファイルをコピーする IN OUT OP r : Recursive p : Preserve TimeStamp 変更なし x : data を DES 暗号化 c : cipher : 使用する 暗号化指定 i : file : RSA 認証の識別 file を指定 P : port : Port を指定
    scp file.c linux01:/tmp/
___

■ rlogin

SYNTAX rlogin [OP] hostname DESC remote machine に login IN OUT OP ec : 接続をきる chara 指定 l user : 他の user 名で login 8 : 8 bit code を透過させる 7 : pality bit を除去 E : d : Socket debug ON x : session を DES 暗号化
___

■ printenv

SYNTAX printenv [var] DESC print ENV IN OUT OP
  HOSTNAME=YOUR-CE4EAF55BB
  HOME=/home/usrname
  TERM=cygwin  # terminal type 
  SHELL=d:/meadow/bin/cmdproxy.exe   # login 時の shell 
___

■ pr

SYNTAX pr [OP] [file...] DESC printer 出力に適した Format に変換して STDOUT へ. printer 用の filter IN file D:STDIN OUT STDOUT OP f : 改 page に Formfeed character h str : header に文字列使用. l n : 行数指定. t : header hooter なし w : width +n : n page
    pr file | lp
    pr file -h title | lp

    pr -T -w 80 -4
___

■ telnet

SYNTAX telnet [OP] [host [port]] DESC TELNET Protocol で通信をする hostName IPAddress で指定する port : TCP port 番号 Windows、MacosX、Linux、その他UNIX系OSで大抵ある Default 23 番 Port で Listen( 待受 )する telnet client は server と接続をして 文字列をもらうのが仕事 WARNING 通信する文字列 が 平文のため , PacketCapture されるとすべての情報が見られる HTTP Server にも接続できる login できるけど, 任意の Program は起動できない bat は起動できた stdout の結果をかえす * Expect || TeraTerm 使えばいけるはず 代用として RemoteDesktop がある telnet Server の機能は 受け取った文字列 を shell cmd として実行すること 遠隔操作ができる win32, cygwin 共にある どちらも共通の流れとして Server 側を立ち上げる必要がある Windows の場合
    // Server をたちあげておく
    Service > Telnet > 起動

    // client をたちあげて 遠隔操作をする
      w-r : telnet
      > telnet
      // つなげる
      //    Server が止まっていると, 次のように言われる
      //    Telnet サービスは停止しています....
      open hostname


    # Port 番号を指定して 接続
    telnet> open localhost 23

    // 名前で 直接指定してみる
    // %WINDIR%\system32\drivers\etc\services


      open localhost telnet
      // Login Account と Password をいれる. Windows の Account 
      // Password なし の Account ははいれない
      // 
      dir ...

      // 終わる
      exit
* どうやら telnet Server 以外とも やりとりできる * telnet client とは 本質的に Server 側に TCP で command という文字列を送るだけの Program POINT RemoteLogin の他に HTTP, SMTP などに Access できる RemoteLogin してみる telnet localhost 23 * 実際にやってみた( ただし画面の表記がおかしい ) 以下の方法以外はうまくいかない

    # Local HttpServer へ接続
    #
    cmd > telnet
    telnet > open localhost 80
    GET / HTTP/1.0
    ----------------

* mail も送信できる IN OUT OP 8 : 8 bit data path 使用. E : Escape 文字禁止 L : 出力に対して 8 bit data path 使用 c : .telnetrc file を使用しない. d : Socket debug ON e Char : Escape 文字有効. l user : 環境変数の値を現在の user として送信 n file : trace 記録 file open r : rlogin cmd と似た interface を提供. a : 自動 login 有効. x : data stream を暗号化する. Telnet への cmd --- status : cur stat // RET No Connection display: disp var set var val // set erase T close | logout : session 終了 quit open host [-l user] [[-] port] port D:23/tcp telnet 192.199.0.5 # RemoteMachine 111.111.111.11 にアクセス telnet 111.111.111.11 telnet // 引数なしで prompt mode ? : help quit : end どういうときに使うか ? RemoteMachine の MailServer の接続確認がとれない( ping ) ときに telnet で Host , Port を指定すれば状況確認可能
___

■ tee

SYNTAX tee [OP] [file...] DESC read from STDIN and write to standard output and files 2 つにわける [ T ]なのか IN OUT OP
  # log をとりながら STDOUT の結果をみるときに便利です
  echo ls | tee outfile | grep "emacs"
  
  bsi.sh tee /dust/log.txt
  # redirect もできる ( 地味だけど便利なやつだ  )
  getnewmusic.sh | tee /dust/mus_`date "+%F"` >> /work/log/htm/web/index.html
___

■ sh

SYNTAX sh [OP] [arg] DESC B Shell 起動 IN OUT OP i : interactive # 普段はこれ使っている s : Stdin から cmd 読み込み c str : str を cmd として読み込む r : Ristricted ( 限定版 ) sh foo.sh sh -c "echo foobar" echo "echo foobar" | sh -s (755)
___

■ spline

SYNTAX spline [OP] DESC spline 補間値の登録 STDIN から x, y を取得 IN OUT OP n : n 分割 p : 周期的な出力 x : 下限値の設定 k : 境界値の設定
___

■ split

SYNTAX split [OP] [file [prefix]] DESC 指定 file を指定行数に分割して file 出力をする IN file D:STDIN OUT name : file prefix v : verpose n : nrLine C : 分割数上限値 b : byte 単位
  # 2 行ずつ に分割して, [out] という PREFIX をつける
  # file が大量にできるので注意
  split -2 foo.txt out
___

■ stty

SYNTAX stty [OP] DESC 端末の設定 現在の STDOUT になっている Terminal の option 設定. IN OUT OP a : 現在の設定を表示 # 指定文字がそれぞれの機能 erase C : 1 文字消去 kill C : 1 行消去 weraseC : 1 単語 intr C : 強制わりこみ stop C : 出力の停止. start C : 出力の再開 eof C : file の終わり. - tabs : tab を space に展開しない - echo : すべての文字を echo back する - parodd: 奇数 パリティに設定する - icrnl : 復帰文字を改行文字に変換
___

■ su

SYNTAX su [OP] [name] DESC 一時的な superUser , 他の user へのきりかえ 再ログインすることなく シェルのユーザを切り替えるために利用される Unixにおいて マシンの管理作業をするとき root 権限を得るために使う IN OUT OP - : 指定 user の login の環境が設定される. c cmd : cmd 実行 m : ENV を reset しない --shell=shell 指定 shell を実行する.
  
    su usrname

    # build して Install するとき
    ./configure
    make
    su
    make install


    # windows Default の管理者になる 
    su Administrator

    
___

■ tail

SYNTAX tail [OP] [file] DESC ファイルの指定された位置から末尾まで出力 OP +num : file 先頭からの位置 -num : file 末尾からの位置 l : 行数 c : byte 数指定 b : block指定 r : reverse
  # 後ろから 2 行目
  tail -2 foo.txt
  tail -2c foo.txt
  tail -2b foo.txt

  # 先頭10行目 から最後まで
  tail -n +10 foo.txt  

  # 最後の2行
  ls | tail -n 2
  
___

■ head

SYNTAX head [OP...] [file...] DESC Print the first 10 lines of each FILE to STDOUT IN OUT OP +num : file 先頭からの位置 -num : file 末尾からの位置 n : NrLine c : byte 数指定 b : block指定 r : reverse
  # 先頭 〜 2 行目まで
  head -n 2 foo.htm

  # 先頭 〜 後ろから2行目の一つ前 ( 後ろ 2 行を除去 )
  head -n -2 foo.htm

  # 先頭 1 Byte
  tail -c 1 foo.htm
___

■ sort

SYNTAX sort [OP] [file...] DESC 指定 file を行単位に sort して STDOUT へ IN STDIN ( file ) OUT STDOUT OP c : Check only ( sort されていれば出力なし ) m : merge o file : file へ結果を出力 Tdir : 一時file dir 指定 u : 同一行の削除 これ便利 y kMem : sort で利用する memory 容量を指定. b : sortKey Field を指定する際に SPC TAB を無視. d : Dictionary 辞書順 f : Fold insensitive i : Ignore 非印字可能文字 r : reverse tC: 区切り文字を C M : 月順で sort ( JAN < FEB < ... ) g : 数値で sort なし 行全体をキーフィールドとして、ASCIIコードの昇順(0<9<A<Z<a<Z)に並べ替える -r 降順にソートする -n 数値フィールドのソートをする +n n番目のフィールド以降をキーとしてソートするフィールドは左から0、1、2・・・と指定) -m m番目のフィールドまでをキーとしてソートする(フィールドは左から1、2、3・・・と指定) -b フィールドの開始位置を決定する際、先行する余分なブランクは無視する(デフォルトでは ひとつの空白またはタブがフィールドの区切りとみなされる) -tx 文字(記号)xをフィールド分離記号として定義する o file    結果をoutfileに出力する入力filenameと同一でもよい
    # 行全体を Key に使用する   
    sort foo.txt            

    # file 指定をしない場合は STDIN から
    cat foo.txt | sort 

    # 7 番目の Field から基準に sort する
    sort +7 foo.txt

    # 単語単位は できない ? 
    echo "bbb aaa ccc" | sort -t " " 
    
    # しかたないので sed で置換する
    echo "a c e d b" | sed "s/ /\n/g" | sort

    # これは OK
    echo $'aaa\ncccc\nbbb' | sort -r

    # Fold Insentive
    echo -e "aaa\nBBB" | sort -f  
    echo -e "aaa\nBBB" | sort
    

    sort -t: +5 /etc/passwd
// Uniq にまとめるには sort -u log.txt; text file の行単位の並び替え OP r : 反転 f : fold (大文字小文字の区別なし) n : 数値としてsort
___

■ size

SYNTAX size [OP] [file...] DESC ObjectFile(.o) の各セクション ( TEXT , DATA , BSS ) のサイズ出力 POINT TEXT : code 領域 DATA : 初期化済み extern , static data 領域 BSS : 未初期化 extern , static data 領域 IN foo.out D:a.out OUT OP n : NLOAD section サイズを出力. f : section 名も出力 x | d | o : radix = 16 | 10 | 8 A : SystemV 形式で出力する. B : Berkeley 形式で出力する t : total
   text     data      bss      dec      hex  filename
 272668     2116    19296   294080    47cc0  main.out
size -A main.out
main.out  :
section     size      addr
.text    262808   4198400
.data       352   4464640        
.rdata     9860   4468736       # ReadOnly
.bss      19296   4481024
.idata     1764   4501504
Total    294080
___

■ passwd

SYNTAX passwd [OP] [user] DESC password の設定, 変更 CP > userAcount に反映される cygwin は WIN32 のラッパー IN user D: curUser OUT OP s : login Shell 変更 f : finger cmd の出力情報を変更 F file : 指定 file を passwd とする l : Lock account ( su only ) u : UnLock account ( su only ) d : 指定した account が passwd なしで利用可能にする S : State 出力.
    # user001 の password を変更
    passwd user001
___

■ mkpasswd

# Windows のローカルアカウントを passwd と group に反映させる mkpasswd と mkgroup を使って /etc に passwd ファイルと group ファイルをつくる mkpasswd -l > /etc/passwd WARNING cygwin を install 後に Windows の local account を変更, 追加すると cygwin 上では反映されない cygrunsrv のように account を扱う Program では ERROR になるケースがある ls -la drwxrwxrwx+ 3 ???????? ???????? 0 Sep 3 2006 packages 更新する mkpasswd -l /etc/passwd ls -la drwxrwxrwx+ 3 newusr 0 Sep 3 2006 packages # -l : Local Group mkgroup -l > /etc/group ドメインアカウントを passwd と group に追加する。 ドメインコントローラを利用している場合は以下の手順でドメインのアカウントを利用できるようにします。 mkpasswd -d >> /etc/passwd mkgroup -d >> /etc/group
___

■ mkgroup

___

■ paste

SYNTAX paste [OP] file1 [file2] DESC file を同じ行で連結 IN OUT OP s : 連続行を連結 d char: CRLF を指定文字に置換
___

■ pg

SYNTAX pg [OP] [file...] DESC 指定 file | STDIN を画面ごとに出力 page をめくるのを想像しよう q : quit IN file D:STDIN OUT OP n : NrLine p str : Prompt string c : Clear e : End of File で停止しない f : 行の分割をしない. s : Prompt を反転 +n : 開始行を指定. +/ptn/ : 指定 ptn を含む行を最初から出力.
___

■ od

SYNTAX od [OP] [file] [[+]offset [b][label]] DESC 指定した file を dump ( 8 10 16 ASCII )にする IN file D:STDIN OUT OP o : 2byte ごとに 8 進数 s : 2byte ごとに signed 10進数 x : 2byte ごとに 16進数
    # binary を Dump
    od  -x  main.o

    # Default 8(10) 進数
    od  main.o

    # dump と表示が反転するかも  というより 本来の並びはこうなっている ?
    cat test.txt
    aaa\n
    
    od test.txt
    0000000 6161 0a61
    0000004    

    dump test.txt
    test.txt:
    00000000  6161 610a                               aaa.



___

■ netstat

SYNTAX netstat [OP] DESC 接続状況を表示する UDP Local Address ForeignAdress 手段 自分 相手 1. net につながない環境でも, -a とすると表示される. local machine の network 情報の出力. win32 にしかない ? Host 名も取得できるようだ. ( HostName == IPAddress から自動生成される名前. xxx.yyy ) 接続状態

    LISTENING   : Listen 中のポート
    ESTABLISHED : 接続 完了
    TIME_WAIT   : 接続終了の待ち状態
    CLOSING     : 接続を閉じる

POINT


    Proto  Local Address          Foreign Address        State
    TCP    YOUR-CE4EAF55BB:3556   192.168.2.253:8080     CLOSE_WAIT
    TCP    YOUR-CE4EAF55BB:3625   192.168.2.253:8080     CLOSE_WAIT
    TCP    YOUR-CE4EAF55BB:3637   192.168.2.253:8080     CLOSE_WAIT
    TCP    YOUR-CE4EAF55BB:3646   192.168.2.253:8080     ESTABLISHED    
Proto Local Address Foreign Address State TCP YOUR-CE4EAF55BB:5152 localhost:3020 CLOSE_WAIT TCP YOUR-CE4EAF55BB:3033 www.google.co.jp:http ESTABLISHED # 自分の PC に Http Server をいれ, Opera からアクセスすると 次のように表示される TCP tesusrname:http tesusrname:0 LISTENING TCP tesusrname:http tesusrname:2658 ESTABLISHED TCP tesusrname:2658 tesusrname:http ESTABLISHED # 相互接続 の関係になる ESTABLISHED とは ShakeHand をしている状態 IN : OUT: OP a : all Socket r : RoutingTable n : network adress を数値で表現 ( http < -> 80. ) p : pro : protocol に限定した 統計情報. Proto : Socket に使用される Protocol LocalAddress : ForeignAdress: State : Socket 状態
    # -all なら, 
    netstat -a;

    # port 80 が利用されていないかチェック
    netstat -an

    # LocalMachine の NetworkInterface を調べる
    netstat -I 

    # RoutingTable 表示
    netstat -r 

  # http 以外の接続も表示
  netstat -a 

Active Connections

  Proto  Local Address          Foreign Address        State

  # Http Server との接続

  # ここから http 以外


  # Number 数値表記
  netstat -n

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:5152         127.0.0.1:3949         CLOSE_WAIT
  TCP    192.168.0.2:4202       64.233.183.101:80      TIME_WAIT
  TCP    192.168.0.2:4205       64.233.183.101:80      ESTABLISHED

  # host, port は数値で表示
  TCP    192.168.0.2:4206       72.14.203.118:80       ESTABLISHED

___

■ nroff

SYNTAX nroff [OP] [file...] DESC nontypesetting runoff NROFF 形式の text を清書して出力 HTML , TEX みたいなものとして考えよう IN OUT OP olist : 指定 list のみ出力 nNUM : 指定 page sNUM : ran : register a に n を設定する. i : q :
___

■ make

SYNTAX make [OP] [file...] DESC IN OUT OP f makfile d : debug info e : ENV 優先 i : ignore ERR k : CMD ERR に依存した処理をしない n : only trace print p : print MACRO TGT q : query TGT r : no use Embeded Rule s : silent t : TGT time stamp only C dir : change dir I dir : makefile 探索 dir j jobs: 同時に実行できる数 w : print working dir
___

■ man

SYNTAX man [OP] [Chapter] [cmd...] DESC 次のような構成 1章 : Command 2章 : SystemCall 3章 : Library 4章 : Device 5章 : ファイル 6章 : ゲーム 7章 : その他 8章 : 管理者向けコマンド IN OUT OP - : 出力を pipe に渡す t : troff sytle a : all page M path : manual 検索 PATH w : Where( Manual の場所 ) d : debug only P pager : set Pager K : すべての man page から 指定文字列を検索 man -k editor // editor が keyword の manual を Listup man -w ls # Where ( どこにある ? ) RET: /usr/share/man/man1/ls.1.gz これが nroff 整形対象の file POINT man の文書形式


    NAME : cmd name
    SYNOPSIS : 書式

    DESC
    FILES
    SEEALSO : 関連事項
    DIAGNOSTIC : message 終了stat 説明
    BUGS

おき場所
    echo $MANPATH

___

■ info

SYNTAX info DESC
___

■ mesg

SYNTAX mesg [OP] DESC message 受付の可否の設定 write cmd による 他user からの message うけつけ, 拒否 IN OUT OP n : 受付拒否
___

■ who

SYNTAX who [OP] [file] DESC 現在 login 中の user 名の出力 他の user の使用状況がわかります who is on the system file : 情報を入手する file /etc/utmp /var/adm/utmp /var/run/utmp /var/log/utmp
    who 

    # 2 人いる
    user001 
    root 
だれも login してない IN OUT OP u : login user T : Terminal 状態 l : login 待ち回線 H : Header q : user 数 p : init で生成され , 使用中の ps d : 終了済み && init で再生成されない ps b : 直前の reboot r : init ps の現在の実行 level t : root による system clk の最終変更. s : name, line, time field のみ A : utmp file 全体を count して報告
___

■ more

SYNTAX more [OP] [file...] DESC 指定 file , STDIN の内容を 1画面表示 IN file D:STDIN OUT OP n : 行数指定 d : Display message s : Space concat +n : 指定行番号 +/ptn : 指定 ptn 前2行から p : Preclear
  man -2d foo.sh
___

■ at

SYNTAX at [OP] [time] [date] [+inc] DESC 指定時刻に 指定 file の cmd 実行 IN OUT OP time : 945[am|pm] : 1 | 2 | 4 桁 10 進数 date : inc : 指定日時の増分. r job... : job 番号を schedule をとりだす. l [job...] : job に関する情報出力. c : C Shell を実行 s : B Shell k : K Shell m : mail 発信 f file : file から cmd 読み込み d job : delete job c : cmd 列 job を STDOUT へ出力 q : 指定 queue を利用 v : job 実行時間
  at -f foo.sh 6pm jul 6
  at -l
  at -d 16
___

■ awk

SYNTAX awk [OP] [prog] [prm] [file...] DESC Pattern 検索処理言語 POINT 言語構文 は 入力を指定 -> Program を実行 -> 結果をチェック IN 処理対象 file : NULL|-: STDIN OUT OP prm : cmd で利用する 変数初期値 var = val; f file : 指定 file を処理 Fc : 文字 c を dlm 扱い v var=val: 変数設定

  BEGIN { cmd } { cmd } END{ cmd } 

  ls -l | awk '{print $9, $5}'   # , 忘れないこと
  awk '/char/ {print $0}' foo.c  # char という文字を含む行のみ表示.
  ---
  prog == { ptn1 {cmd...} ptn2 { cmd...} ...}

  



___

■ write

SYNTAX write user [tty] DESC STDIN の msg を user Terminal へ出力 tty : 特定の Terminal 指定 IN OUT OP
   # remote machine に msg 送信
   write usrname@remote
___

■ batch

SYNTAX batch [OP] DESC system に余裕があるときのお仕事を指定してね. ないかも IN OUT OP f : file から batch job 読み込み. m : mail 起動 batch at > sort < infile > outfile c-d # 終了.
___

■ bc

SYNTAX bc [OP] [file...] DESC interactive 計算言語 * こいつでないと 少数の計算できない # 2 echo 1 + 1 | bc # 6 echo "3 * 2" | bc echo "3.0 / 2.0" | bc IN OUT OP c : compile only l : use library i : interactive w : WARNING q : quit bc -l 5+7 12 x=10 y=10 x+y 20 s(1) # c e l a j c-d # 終了
___

■ bash

SYNTAX bash [OP...] [arg...] DESC bash 起動 AT cmd を利用する際に bash を起動すれば shell で色々できる OP c string : 指定文字列実行. i : interactive # 通常.( 実はいつもこれだった ) bash --login -i として実行している. r : restricted s : STDIN から cmd 読み込み D : cmd 実行不可能 [-+]O [shopt] POINT プロセスが違えば環境はことなる 環境とは bashのオプション パラメータ,変数とその値 定義されている関数
    // bat から shell script を実行する
    d:
    cd d:\cygwin\bin

    bash --login -c "foo.sh"

    pause
    bash /work/shellscript/foo.sh

    # comamnd "/work/foo.sh" を実行のみ実行して終了
    #  
    bash --login -c /work/foo.sh


    # Command のみ実行
    bash -c "echo aaa"

    # 引数なし で interactive ( prompt )モードで起動
    bash

    # 設定ファイルを読む
    bash --login

    # 設定ファイルをよんだ環境で 実行
    bash --login -c "echo aaa"

    # Debug
    #    展開した Command を表示
    bash --login -xc "echo $PATH"


    # 変数のセット
    a=b
    echo $a  
  
    # 子 Process として起動
    bash
    
    # 環境はうけつがれない
    echo $a

    # Shell Script を実行すると 1 行目で指定した interpreter が 子 process として起動する
    test.sh
  
    # 自分自身が 実行したいときは
    source  test.sh
    
    # これも同じ
    . test.sh

___

■ export

DESC 別shプロセスへの環境のわたす sourceコマンドはイメージ的には子スクリプトの環境定義を親プロセスに渡すものであった (実際は子スクリプトのプロセスは作成されず子スクリプトが実行するコマンドを親スクリプトが実行する). 親スクリプトの環境を 子プロセスに変数の定義をわたすには export をつかう
___

■ time

SYNTAX time cmd DESC cmd の実行時間を計測 IN OUT OP
    cmd find .

    # RET
    real 0m4.151s    # 実際の実行時間  
    user 0m0.151s    # user 使用の CPU 時間
    sys  0m0.121s    # system 使用の CPU 時間
___

■ troff

SYNTAX troff [OP] [file...] DESC typesetting runoff : file を整形して printer へ IN OUT OP
___

■ tty

SYNTAX tty [OP] DESC terminal : 端末名の出力 IN OUT OP s : silent : path 名を出力しない. 終了 status の判定が必要な場合のみ $? == 0 : STDIN が 端末. $? != 0 : STDIN が 端末以外. l : 回線名を出力.
  tty # RET: /dev/console
___

■ uname

SYNTAX uname [OP] DESC 現在使用中の system 名を出力 print system information IN OUT OP s : system CYGWIN_NT-5.1 n : node in network ( hostname ) YOUR_XXX r : release v : version m : machine i686 ( intel ? ) a : all p : processor i : platform o : OS
    # RET
    #    CYGWIN_NT-5.1 host 1.5.25(0.156/4/2) 2008-06-12 19:34 i686 Cygwin
    uname -a

    # i686
    uname -m

    # CYGWIN_NT 5.1 i686 Cygwin
    uname -smo


    i386  i386, その互換CPU
    i486  i486, その互換CPU
    i586  Pentium、MMX Pentiumおよびその互換CPU
    i686  Pentium Pro、Pentium II、Pentium III、Pentium4、Celeron ... 
    k6  K6、K6-2、K6-III。
    athlon  Athlon、Athlon MP、Athlon XP。
    x86_64  Opteron、Athlon64、Xeon(EM64T)。
    src  ソースパッケージ。自分で rpm パッケージを作ったりする際(rebuild)に必要。
    noarch  機種(CPU)に依存しないパッケージ。
    ppc  Power PC。
    alpha  alphaチップ搭載コンピュータ。
    sparc  SUN SPARC。


___

■ tset

SYNTAX tset [OP] DESC terminal set : login shell の各種設定 IN OUT OP ec : 消去文字セット kc : 行消去文字セット ic : 割り込み文字セット ^C == 割り込み - : 端末名 r : 端末名 n : 新しい tty driver を指定する必要性. Q : Erase set to , Kill set to の 出力を抑制.
___

■ case

SYNTAX case string in ptr1) cmd1 ;; ptr1) cmd1 ;; *) cmd1 esac DESC 条件分岐による cmd 実行. IN OUT OP
___

■ bg

SYNTAX bg [ %job ] DESC 指定 job 番号の background で実行する. ( 省略: current job ) IN OUT OP find . c-z # 中止 bg
___

■ alias

SYNTAX alias [OP] [name=[val]] DESC cmd に別名をつける IN OUT OP p: print # alias -p
___

■ source

SYNTAX source [OP] file DESC file 中の cmd を実行 IN OUT OP h : cmd を実行せずに history list に追加するだけ.
___

■ suspend

SYNTAX suspend DESC 現在の shell を停止する IN OUT OP POINT login shell は停止できない. ps cmd の結果に [ S ] がつく.
___

■ set

SYNTAX set [OP] DESC [ shell 変数 ]の値の設定 | 出力 IN OUT OP set # 現在の shell 変数をすべて出力. set var # var=null set var=foo # var を foo にセット POINT 定義済み shell Var
___

■ x

SYNTAX x DESC x Window をたちあげる IN : OUT: OP
___

■ arch

SYNTAX arch DESC マシンの architecture を表示 IN : OUT:
    # LetsNote は i686
    arch
___

■ rev

SYNTAX rev [file] DESC 入力した各行を反対にする IN : OUT: OP // 文字化けをしているかも ... echo "たけやぶやけた" | rev
___

■ pstree

SYNTAX pstree [OP] [usr|IDPS] DESC 実行中の Process を Tree 状に表示する IN : OUT: OP

?-+-bash-+-Opera
  |      `-meadow
  |-cygrunsrv---cron
  |-cygrunsrv---sshd
  `-pstree

  # background 実行した bash のコマンドは 別途 Interpreter が起動する
  
  find / -iname "*.exe" &
  
?-+-bash-+-Opera
  |      |-meadow
  |      `-pstree
  |-bash
  |-cygrunsrv---cron
  `-inetd---inetd



___

■ factor

SYNTAX factor [num] DESC * 素因数分解をする ( 使い道ある ? ) IN : arg がないときは STDIN から OUT: OP
    # RET: 12: 2 2 3
    echo 12 | factor
___

■ shutdown

SYNTAX shutdown [OP] time [msg] DESC * System を終了する IN : OUT: OP // 5 分後に終了 shutdown -h +5 // 即死 shutdown -h now
___

■ convert

SYNTAX convert [OP] src dst DESC 画像を変換 ( Type は拡張子で自動で判断 ) IN : OUT: OP
    convert -geometry "50%" foo.jpg foo.bmp
___

■ fuser

SYNTAX fuser [OP] DESC File | Socket を使用している Process を特定する IN OUT OP // 利用できる すべての Signal を特定する // HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP // TSTP CONT CHLD CLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 USR2 RTMIN fuser -l
___

■ colrm

SYNTAX colrm [colS [colE]] DESC * 指定した column を削除する * dlm とか関係なし IN : OUT: OP
    # 2 番目の column から後ろを削除
    # RET: a
    echo abcedef | colrm 2
___

■ watch

SYNTAX watch cmd DESC * 指定した 間隔ごとに cmd を実行 ? Check する ? IN : OUT: OP
___

■ djpeg

SYNTAX djpeg [OP] [file...] DESC file を jpeg に変換して stdout へ出力する IN : OUT: OP
    # jpg から bmp へ変換  本当にできた 
    djpeg -bmp foo.jpg > foo.bmp
___

■ whoami

SYNTAX whoami DESC 現在の userName( windows login Accont ) を表示する
___

■ autoconf

SYNTAX configure という sh スクリプトを自動作成する これを配布したいパッケージの中に含めておく DEP m4, perl, DESC configure という sh スクリプトを作成することができる これを配布したいパッケージの中に含めておく POINT make で build の自動化ができる しかし 環境依存 の部分がのこる そこで Autoconf で configure を作成 環境に match した make を作成するようにした
    // Build 方法
    configure; make;

POINT もし configure がないと makefile を README をみながら 手作業で変更していた

    @xxx@ の部分が 環境 にあったものに置換される

    # makefile を記述 ( 自動生成の元 )

    
    autoscan

    # configure.scan が作成される
    ls
    configure.scan


    # 生成先 -> autoscan が自動判定してくれている
    AC_OUTPUT( [makfile] )


    # autoconf は configure.in という名前を元にするため Rename
    mv configure.scan configure.in


    # configure.in を元にして makefile を生成
    autoconf    


    # configure script が生成される    
    ls
    configure

    
    # configure は AC_OUTPUT() で指定された file を生成する元として file.in を必要
    # とりあえず base の makefile を Rename しておく
    #  必要に応じて, 動的に設定する


    # とりあえず実行する
    ./configure
    ...

    # AC_OUTPUT() で指定したものが作成される
    config.status: creating makefile

    # 元がないと, 怒られれる
    config.status: error: cannot find input file: config.h.in

        


    
    


    # 環境に応じて変更するなら @ でくくる
    CC:=@CC@
    

    # 変更後
    CC=gcc

    


    AC_OUTPUT 生成時に 参照可能な値

    
    # Debug と 最適化用の C コンパイラフラグ
    CFLAGS   

    # C preprocessor フラグ
    CPPFLAGS 

    # アーキテクチャに依存しない install 先の prefix
    prefix 

    # 実行ファイルの Install 先
    bindir
    

    # system を調べて 適切な makefile を生成
    # これがないときは 自前で makefile を修正する必要があった
    ./configure

    # option を指定する
    ./configure --enable-hoge
    ./configure --prefix=/foo/bar

___

■ config.h の自動生成

DESC 環境に応じた build をするために makefile の動的な設定だけではなく header も自動生成する

  # header 自動生成をする
  #    config.h.in が元になる
  AC_CONFIG_HEADERS([config.h])

  configure
  ...
  config.status: creating config.h


  # 必要に応じて, 検出項目を configure.in に追加する
  

    # 基本的な流れ

    configure.in が autoconf によって m4 のマクロが展開されて configure になる

    configure.in に必要な処理をかけば configure に反映される

___

■ 出力変数

共通のながれ あり -> 置換される #define XXX 1 なし comment out される /* #undef XXX */ @変数@ を出力変数という autoconf で組み込みで用意されているもの意外に 自前で定義できる AC_SUBST(出力変数) AC_SUBST_FILE(出力変数)
___

■ プリプロセッサをえる

AC_DEFINE( SYMBOL, VALUE, DESC ) AC_DEFINE( XX2, 10 ) #undef XX2 #define XX2 10
___

■ Program.をチェックする

AC_CHECK_PROG( VAR, COMMAND, VALUE-IF-FOUND, VALUE-IF-NOTFOUND, REJECT ) AC_CHECK_PROG( TAKO, grep, 777, 0 ) # Full-Path を設定をする AC_PATH_PROG( VAR, COMMAND, VALUE-IF-FOUND, PATH ) # file の存在をチェック AC_CHECK_FILE( VAR, COMMAND, VALUE-IF-FOUND, VALUE-IF-NOTFOUND )
___

■ C Compiler の特性検出

# TYPE の size を調べる # 文字列結合 のサポート AC_C_STRINGIZE #undef HAVE_STRINGIZE
___

■ 型をチェック

SYNTAX AC_CHECK_TYPE( TYPE, DEFAULT_TYPE ) TYPE を sys/types.h, stdlib.h, stddef.h からさがす なければ DEFAULT_TYPE で指定した型にする
___

■ 関数をチェック

AC_CHECK_FUNC( FUNC, VALUE-IF-FOUND, VALUE-IF-NOTFOUND ) AC_CHECK_FUNC( lrand48, AC_DEFINE( HAVE_LRAND48 ) ) #undef HAVE_LRAND48 # 見つかった #define HAVE_LRAND48 1 # なし /* #undef HAVE_LRAND48 */ # library に関数が見つからないときに, 代替の関数を用意して link する AC_REPLACE_FUNCS( 関数名リスト ) 見つからない場合 出力変数 LIBOBJS に FUNC.o が追記される makefile.in は次のようにする LIBOBJS=@LIBOBJS@ # 標準ライブラリ関数 AC_FUNC_ALLOCA #undef HAVE_ALLOCA
___

■ ライブラリを検出

AC_CHECK_LIB( LIB, FUNC, ACTION-IF-FOUND, ACTION-IF-NOTFOUND, 依存ライブラリ ) # 特定のライブラリが存在するかどうかチェック AC_HAVE_LIBRARY( LIB, ACTION-IF-FOUND, ACTION-IF-NOTFOUND, 依存ライブラリ ) # 特定の関数が 複数のライブラリ候補のどこにあるかチェック # LIBS に追加 # AC_SEARCH_LIBS( FUNC, LIBLIST, ACTION-IF-FOUND, ACTION-IF-NOTFOUND )
___

■ ヘッダの検出

AC_HEADER_STDC : stdlib.h stdarg.h string.h float.h STDC_HEADERS
___

■ 高度な検出

SYNTAX AC_EGREP_CPP( PATTERN, # egrep による PATTERN PROGRAM, # [] 内の部分を cpp にわたす. 結果が PATTERN に一致すれば FOUND ACTION-IF-FOUND, ACTION-IF-NOT-FOUND )

    AC_MSG_CHECKING( for RAND_MAX )
    AC_EGREP_CPP( yes, 
    [#include < stdlib.h>
    #ifdef RAND_MAX
    yes
    #endif
    ],AC_DEFINE( HAVE_RAND_MAX))


    #undef  HAVE_RAND_MAX

SYNTAX AC_EGREP_HEADER( PATTERN, # egrep による PATTERN HEADER, # header を cpp にわたした結果が PATTERN に一致すれば FOUND ACTION-IF-FOUND, ACTION-IF-NOT-FOUND )

    AC_MSG_CHECKING( for wchar_t )
    AC_EGREP_HEADER( wchar_t, stdlib.h, AC_DEFINE( HAVE_WCHAR_T) ) 

___

■ Program.を実行して検出

SYNTAX AC_TRY_RUN( PROGRAM, ACTION-IF-FOUND, ACTION-IF-NOT-FOUND, ACTION-IF-CROSS_COMPILING)

    







___

■ help.を見る

./configure --help
___

■ 自分で Option を追加する

SYNTAX AC_ARG_WITH( PACKAGE, HELP, ACTION, ACTION-DEFAULT ) DESC configure に独自 Option を追加する


AC_SUBST(FOOINC)

# ./configure  --with-foo-include=XXX で FOOINC に値を設定
AC_ARG_WITH( foo-include, [ 自分で調べろ! ], [ FOOINC="$withval"] )


# makefile.in などにかいておく
  echo @FOOINC@


___

■ configure

SYNTAX ./configure DESC 環境から makefile, などを自動で設定する bash script 実行すると "checking..." などと表示される

    // install 場所を指定する ( DEFAULT: /usr/local  )
    ./configure --prefix XXX

    
    # 環境にあった makefile 生成
    ./configure

    # build
    make

    # install
    make install
    

___

■ print

SYNTAX print file DESC file を printer で出力
___

■ install

SYNTAX install DESC copy files and set attributes System に必要なファイルを備え付ける
___

■ cpp

SYNTAX cpp DESC C macro Preprocessor C Compiler から自動でよばれる

    # stdin からとる
    # RET: 3 4
    echo __GCC__ __GCC_MINOR__ | cpp

    
    # 自分の環境での MACRO をチェックする
    echo FOO | cpp

    echo  "#include \"config.h\"  NAME_SIZE" | cpp -I /pro/include
___

■ cygcheck

SYNTAX DESC * Cygwin プログラムの診断をするユーティリティ # package を調べる # RET: less-382-1 cygcheck.exe -f /usr/bin/less # package に含まれる 内容を表示 cygcheck.exe -l /usr/bin/less /usr/bin/less.exe /usr/bin/lessecho.exe /usr/bin/lesskey.exe /usr/share/man/man1/less.1.gz /usr/share/man/man1/lesskey.1.gz # cygcheck -r less # 依存関係を見るのか ? Found: D:\cygwin\bin\less.exe D:\cygwin\bin\less.exe D:\cygwin\bin\cygwin1.dll C:\WINDOWS\system32\ADVAPI32.DLL C:\WINDOWS\system32\ntdll.dll C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\RPCRT4.dll C:\WINDOWS\system32\Secur32.dll IN : OUT: OP
___

■ strings

SYNTAX strings [OP] file ... DESC file から文字列をえる * binary file から symbol をえる * RPM などの PACKAGE file を展開することに使う といったことにつかう text file でも OK ただし Default は 4 文字以上なので -n 3 とか指定すること IN : UT: OP
    # 2 文字以上を検知する
    strings -n 2 foo.exe

    # 先頭に file 名を付加する
    strings -f foo.exe
___

■ ldd(cygcheck)

DESC コマンドやアプリケーションが ダイナミックリンクしているライブラリを調べる Linux ではあるが Cygwin では cygcheck で代用する cygcheck a.exe
    .\a.exe
      D:\cygwin\bin\cygwin1.dll             # cygwin 依存部分
        C:\WINDOWS\system32\ADVAPI32.DLL   # windows library の部分
          C:\WINDOWS\system32\ntdll.dll
          C:\WINDOWS\system32\KERNEL32.dll
          C:\WINDOWS\system32\RPCRT4.dll
            C:\WINDOWS\system32\Secur32.dll
___

■ nm

SYNTAX nm [op] objfile... DESC Object の Symbol をリストする strings と違い Symbol のみをはく Literal は含まれない ( const char *p = "foobar"; ) オブジェクトファイルやライブラリ、実行可能プログラムに含まれる関数を調べる Header に記述されてない Symbol も調べることができる

  # File 名も出力
  nm -A main.obj


  # Extern only
  nm -g main.obj

  # library にどんな関数があるか調べる
  nm /lib/libc.a

  # cunit の symbol を調べる
  nm d:/cygwin/usr/local/lib/libcunit.a


  # OpenGL ImportLibrary をみる
  #    glActiveTexture は含まれない
  nm Microsoft Platform SDK/Lib/opengl32.lib

# Library の中身はこうなっている
  
# object の集合
CUError.o:
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
00000000 d ErrorDescription.0
00000061 T _CU_get_error
0000008d T _CU_get_error_action
0000006b T _CU_get_error_msg
00000000 T _CU_set_error
...


TestDB.o:
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
00000129 T _CU_add_suite
000001f4 T _CU_add_test
00000089 T _CU_cleanup_registry
         U _CU_clear_previous_results




    cl で compile したものは見れない? 

    cl main.cpp /D "_DEBUG"
    nm ./main.exe

    # RET  
    nm: ./main.exe: no symbols



    {
      // nm では 見えない
      printf("hello world");
    }

___

■ objcopy

SYNTAX objcopy [op] src [dst] DESC copy and translate object files
___

■ disown

SYNTAX disown [op] [job] DESC Active Job Table から削除

    # background で実行
    loop.sh &
    [1]  2460

    # HungUp シグナルを送る
    kill -HUP %1

    # Job Table から削除
    disown %1


    loop.sh &

    kill -HUP %1
    kill %1: no such job
    
___

■ uuencode

SYNTAX uuencode [-m] [ file ] name DESC == Unix to Unix ENCODE 、電子メールに画像などのバイナリデータを添付するとき 中身を文字列(テキスト)データに置換(エンコード)する方式の一つ メールにはテキストデータしか載せられないため 画像や音声、ワープロ文書などのバイナリファイルは そのままでは送受信できない 送信時に一定のルールでデータを文字に置換し 受信後に元のデータに復元(デコード)するという手法が取られるようになった この置換ルールの一つがuuencode WindowsやMS-DOS、UNIXなどの環境で一般的につかいます IN : UT: OP uuencode binary.tar.gz Binary > encodefile # test という名前を header に格納して STDOUT へ uuencode foo.gif test > encodefile
___

■ iconv

SYNTAX iconv [OP] -f xxx -t xxx [file...] DESC 文字コードを変換する IN : STDIN OUT: STDOUT
    # urlencode をかけるまえに
  iconv -f SJIS -t UTF-8

    # curl した web page を SJIS に
    curl "" iconv -f EUC-JP

    # 文字 code の指定は慎重に
    # BAD
    curl "" iconv -f EUC
    
自動判定はできないらしい
    BAD

    OK

WARNING たまに ERROR になる ( そのときの 対処方法 ) ひっかかる 原因になりそうな 文字を 早期に grep で Filter してやる

  curl -s "http://www.yahoo.co.jp" | grep "< td>.*< /td>" | iconv -t SJIS
  # 変換元 にあって, 変換先に ない Code があったときは 中断しない
  cat china.txt | iconv -c -f UTF-8 -t SJIS 

___

■ unzip

SYNTAX unzip [OP] file... DESC file を解凍 IN : OUT: OP q : Quiet o : Overwrite without Prompt
    # foo.zip を解凍する
    unzip -qo foo.zip
___

■ touch

SYNTAX touch file... DESC 更新日時( WriteTime )を更新する IN : OUT: OP
___

■ patch

SYNTAX patch [op] [orifile [patchfile]] patch < patchfile DESC apply a diff file to an original ソースコードの[ 更.新 ]のためによく使う フリーソフトの世界では diff と patch を使って修正をやり取りする ソースを外部の者が DL, 修正をして diff 形式でチームに送る チームはそれをパッチとして適用する前にレビューでき 外部の者がアクセスできるソースではなく 開発中の最新のソースにパッチを適用することで修正を取りこめる テスト開発にむいてます POINT patch file とは diff file のこと IN : OUT: OP
    // src.cpp -> dst.cpp への patch をつくる( 順番に注意 )
    diff -u  src.cpp  dst.cpp > src2dst.diff


    // patch をあてる( あてる先のファイルは diff を見ればわかるので不要 )
    patch <  src2dst.diff


    // 元に戻すには
    patch -R <  src2dst.diff


    // cvs, svn を利用して diff 形式のファイルをつくる
    cvs svn diff がある


diff をみれば, 変更元, 先がわかる file 名を patch file に仕込むために -u ( Unified ) -c ( Context ) 形式にする ( そうしないと patch をあてるときに, file がわからないといわれる )
    bash> diff -u foo bar

    --- foo  2010-06-20 17:35:02.343750000 +0900       # 変更元
    +++ bar  2010-06-20 17:35:12.265625000 +0900       # 変更先
    @@ -1 +1 @@
    -foo
    +bar
WARNING patch をあてる場所が重要( Hunk FAILED )

    # diff の見て , 正しいパスに移動してからすること 

    # d:/foo/foo2bar.diff
    #
    # d:/foo/test/foo
    # d:/foo/test/bar
    #
    --- test/foo    
    +++ test/bar

    cd d:/foo

    # -p0  の指定は必須
    patch -p0 <  foo2bar.diff


    # -pNum の数だけ [/] を除去する
    # -p0      : そのまま
    # 指定なし : 末尾の file 名のみ
  

___

■ curl

SYNTAX curl [OP...] [URL...] DESC HTTP, FTP での Data をダウンロード,アップロードをする (HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE)
    # www.yahoo.co.jpの/aaa/bbb.gifをダウンロード
    curl -O http://www.yahoo.co.jp/aaa/bbb.gif

    # Silent 
    curl -s http://www.yahoo.co.jp/ | grep "< span>"  

    # http Header をふくめる
    curl -i google.com

    # Header のみ
    curl -I google.com

    # HTTPS も OK
    curl -k "https//www.xxx."

    k/--insecure
       (SSL) This option explicitly allows curl
       to perform "insecure" SSL connections and transfers.  
       All SSL  connections  are  attempted to be made secure
       by using the CA certificate bundle installed by default.
       This makes all connections considered "insecure" to fail unless -k/--insecure is used.
        See this online resource for further details: http://curl.haxx.se/docs/sslcerts.html
        If this option is used twice, the second time will again disable it.


    # Agent を偽る
    curl -A "Mozilla/4.0" "http://www.yahoo.co.jp" | iconv -f utf-8
    curl -A "Mozilla/4.0" -k "https://info.edinet-fsa.go.jp/E01EW/BLMainController.jsp?1265633189018"


    # https
    curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Win32);" -k \
    "https://info.edinet-fsa.go.jp/E01EW/BLMainController.jsp?1265633189018"


    # Agent の判定に使わないなら, 任意の文字でもいいかも
    # 
    curl -A "tekito" "http://www.yahoo.co.jp" | iconv -f utf-8
     (HTTP)  Specify the User-Agent string to send to the HTTP server. 
    Some badly done CGIs fail if its not set to "Mozilla/4.0"  
    To encode blanks in the string, surround the string with  single  quote marks.  
     If this option is set more than once, the last one will be the one that's used.


    # Proxy 経由で
    curl --proxy "192.168.2.253:8080" "http://company.nikkei.co.jp/index.aspx?scode=7203"


    # 設定ファイルから読む
    curl --config ~/curl.cfg


    

curl の設定ファイル

    # this is a comment
     url = "google.co.jp"

    # 出力ファイルパス    
    output = "d:/google.htm"

     user-agent = "superagent/1.0"

     # and fetch another URL too
     url = "google.co.jp"

    referer = "http://google.co.jp/"

POINT IN : OUT: OP
___

■ basename(filename)

SYNTAX basename path [EXTENSION] DESC パスからディレクトリと拡張子を削除してファイル名をかえす パスから先頭のディレクトリ部分を削除して返す
    # sort
    basename /usr/bin/sort

    # foo.txt
    basename d:/foo.txt

拡張子を指定すると、拡張子部分を削除して返す。
    # foo
    basename d:/foo.lst  .lst

  WARNING 
    # 失敗するらしい    
    # foo.lst
    basename d:/foo.lst
___

■ dirname

SYNTAX dirname path DESC path から Directory 名をかえす IN arg OUT STDOUT

    # c:/foo
    dirname c:/foo/bar
    dirname c:/foo/bar/

    # c:\foo
    dirname c:\foo\bar
    dirname "c:\foo\bar"

    # [\/] を含まないときは [ . ] がかえる
    dirname foo.exe

___

■ expr

SYNTAX DESC "整数"計算をする expr の後に渡す文字列を expr が計算式として解釈すると考える IN : OUT: OP
    # 足し算
    expr 1 + 5 
    
    # SPC をつけないと shell が誤解する
    # BAD
    expr 1+5


    # 環境変数$val1が10以上であるかを確かめる
    expr $val1 >= 10 
    0   ← 偽を返しているので$val1は10より小さい  
    # 文字列の長さをかえしたり
    expr length "foobar";
    
    # マッチングした文字列の長さをかえす
    expr test.txt : ".*\.txt"
___

■ dos2unix

___

■ unix2dos

SYNTAX dos2unix file DESC 改行 code を変更
    echo -e "aaa\n" | unix2dos > foo.txt


    # RET         
    #   00000000  6161 610d 0a0d 0a    aaa....
    dump foo.txt
___

■ cygstart

SYNTAX cygstart DESC Windows のようにファイル,URL を関連付けたアプリケーションで起動するコマンドラインツール Windows の start コマンドと似ている

    # カレントディレクトリをエクスプローラで開く
    cygstart .

# 既定のブラウザで www.yahoo.co.jp を開く
% cygstart http://www.yahoo.co.jp/

# テキストファイルを既定のプログラムで開いて,即プリント.
% cygstart --print README.txt

# .doc なファイルを開いて,最大化で表示
% cygstart --maximize ~/tmp/regist.doc


___

■ hina

SYNTAX zip [-#@cdDefFhijJklLmnoqrRTuvXyz] [-t mmddyy] [ zipfile [ file...]] [-xi list] DESC Imploding法を使用してファイルを圧縮する WINDOWS を初めとした多くの OS 上で使われている圧縮方式 zipは,米PKWARE社のPKZIPと互換性がある zipで圧縮したファイルには一般的に拡張子に.zipを付けることになっている オプションを省略した場合は圧縮処理をする IN : OUT: OP zip foo.zip foo.txt
___

■ ctags

SYNTAX ctags [op] src... DESC tag file を生成
    # Recurse 
    cd src;  
    ctags -R

___

■ bison

SYNTAX bison file DESC parser generator (yacc replacement)
___

■ sum

SYNTAX sum DESC チェックサムを計算する 情報転送がうまくいったかどうかチェックする
    
    sum file

    # 送った先で確認
    telnet remote
    sum file

___

■ free

SYNTAX free [OP] DESC Memory 使用状況を Dump IN : OUT: OP


    total         used       free     shared    buffers     cached
    Mem:        514096     440352      73744          0          0          0
    -/+ buffers/cache:     440352      73744
    Swap:       774144      32172     741972


    # Mega 単位
    free -m
                 total       used       free     shared    buffers     cached
    Mem:           502        431         71          0          0          0
    -/+ buffers/cache:        431         71
    Swap:          756         31        724


    # 3 秒ごとに表示
    free -s 3
___

■ cd

SYNTAX cd DESC IN OUT OP P: symboclink link L: 物理 dir 構造
___

■ declare(typeset)

SYNTAX declare [OP] [name=[val]] DESC 変数の宣言, 型の設定 IN OUT OP i : 変数を整数値としてみなす. a : array としてみなす. a : array としてみなす. p : print WARNING
    declare -i i=10;
    declare -p i;      
___

■ printf

SYNTAX printf format [args] DESC 引数を指定した書式に変換して出力する IN : OUT: OP
    # [,] はいらない
    printf "foobar %d %d" $i $j

    # RET: 0001
    i=1; printf "ret %04d" $i;
___

■ pushd

SYNTAX pushd [OP] [dir] DESC dir を stack に push dir も変更 IN OUT OP n : dir 変更をしない +n : dir list の左から n番目の entry を stack 先頭に移動する. working dir も移動する.
___

■ dirs

SYNTAX dirs [op] DESC Directory Stack の表示 IN OUT OP c : clear l : ~ -> /home/usr p : 1 行 1 入力 v : 行番号 [+|-]n : n 番目 stack 取得( これ便利 )

    # Clear
    dirs -c

    dirs -l

___

■ cmd

SYNTAX cmd [OP] [arg] DESC IN OUT OP n : 改行抑制 // うまくいかない. e : escape 文字を解釈する // echo "aaa\tbbb\n" E : escape 文字を解釈しない.
___

■ enable

SYNTAX enable [OP] [name] DESC 組み込み shell command での実行許可の設定. IN OUT OP n : 実行許可をあたえない. p : print : 組み込み shell cmd を表示. trap とかも含むよ
    ;; typeset cmd を実行できないようにする
    enable -n typeset


    ;; すべての 組み込みコマンドの設定を表示
    enable -a
    
    
___

■ compgen

SYNTAX compgen [OP...] -- [WORD] DESC 補完リストを作成する complete と同じ方法のリストを返す
    # 組み込み Command なので Shell からのみ利用できる
    #
    %type compgen
    compgen is a shell builtin

    %type ls
    ls is hashed (/usr/bin/ls)
    ;; File list をかえす
    compgen -f

    ;; Group list をかえす
    compgen -g


    ;; shell の 予約語( Keyword ) をかえす
    compgen -k

    ;; Service 一覧
    compgen -s


    ;; User 一覧
    compgen -u


    ;; File && ~ でない && ch で始まる
    compgen -f -X '*~' -- ch
    
    

___

■ complete

SYNTAX complete [ OPTION... ] COMMAND... DESC コマンドの補完方法を指定する OP -W LIST List を補完候補にする ( " "区切り ) -X PATTERN -X !PATTERN Pattern にマッチする語を除外( 対象 ) -F FUNCTION POINT FIGNORE で指定した パターンは補完候補にならない
    FIGNORE='~:.o:.dvi'

  # cd の補完は Directory のみ
  complete -d cd

  # group は Group のみ
  complete -g group

  # finger は User のみ
  complete -u finger


  # 利用する Host 名を指定しておく
  complete -W 'host1 host2 gate1'  rsh


  # xxx.tex のみ対象にする
  complete -X '!*.tex'  jlatex



  # 現在の設定を Print
  complete -p


  # 関数を経由して 対象をきめる
  complete -F mycomp.sh   notepad
  
  COMP_LINE  : CommandLine 全体
  COMP_POINT : Cursor 位置
  COMP_WORDS : CommandLine の単語配列
  COMP_CWORD : 補完中の語の番号

  COMPREPLY  : 結果をセットする変数

    # gcc での指定
    
    # -o : 補完した後に空白をいれない
    
    complete -o nospace -F _gcc gcc

    function _gcc() {
      prev=${COMP_WORDS[COMP_CWORD-1]}
      cur=${COMP_WORDS[COMP_CWORD]}

      case $cur in

      # -I を含む場合
      #      -I を除去した語を Directory 候補として Listup
      #      最後に -I をもどす
      #
      #      -S WORD
      #        補完結果に [WORD] を追加
      #
      -I*) d='echo $cur | sed 's/^-I//''
          COMPREPLY=( 'compgen -S / -d -- $d | sed -e 's/^/-I/'' );;

      # -I 以外
      #      File を候補にするだけ
      *)   COMPREPLY=( 'compgen -f -- $cur' );;
      esac
    }



___

■ export

SYNTAX export [OP] [name=[word]] DESC [現在のshellの ?]環境変数を設定する export とすると , declare -x PATH="/home/bar"; IN OUT OP n : 削除 # export -n USER p : print # export した 変数のみ Print

    # Current の Shell で設定された 変数リストをみる
    export

___

■ fc

SYNTAX fc [OP] [first] [last] DESC history list の編集, 出力をする history list から cmd を再実行 IN OUT OP l : listup // fc -l -3; r : revert n : no disp number
    
    # 1-10 番目の cmd 表示.
    fc -l 1 10  

    # 101 番目の cmd 実行. 
    !101        
___

■ select

SYNTAX select name [in list] do cmd done DESC menu list から値を選択して, その値により それぞれの処理をする. select は CUI でもできるのか --- break , return でぬける IN OUT OP
select i in man woman; do
    echo your select $i
    break;
done
___

■ uptime

SYNTAX uptime [OP] DESC system 稼働時間. 起動時刻. user 数. loadAverage の出力 IN OUT OP
___

■ users

SYNTAX users [file...] DESC system 上にいる user の login 名を出力する shell の上にいる人を想像しよう IN OUT OP
___

■ w

SYNTAX w [OP] [user] DESC login している user , 実行cmd を system 状況を出力. login 名, 端末名, loginTime, 現在の process CPU 時間. IN OUT OP h : no header l : detail s : simple f : from : login した host 経路を出力する. u : uptime cmd と同様の出力.
___

■ wall

SYNTAX wall [file] DESC 全 user に対して, STDIN からの message を送信. file : messsage 内容 IN OUT OP g : group 指定. wall message
___

■ whatis

SYNTAX whatis cmd... DESC cmd の簡易説明の出力. == man -f DB が必要. catman cmd が必要. IN OUT OP
  whatis gcc
___

■ whereis

SYNTAX whereis [OP] [file...] DESC file( cmd )の source, obj, manual の場所を出力. ( ) IN OUT OP b : binary file m : manual s : source M dir : Manual 検索 dir の指定. S dir : Source 検索 dir の指定. B dir : Binary 検索 dir の指定. whereis gcc
___

■ set

SYNTAX set [OP] [args] DESC 指定した shell 変数の値を出力する. OP 指定で 変数の属性の変更 IN OUT OP o : 変数の設定. set # すべての shellVar を表示.
___

■ shift

SYNTAX shift [n] DESC paramter 位置の shift IN OUT OP
while [ $# -gt 0 ]; do
    echo $@
    shift
done
foo.sh a b c d e f
___

■ shopt

SYNTAX shopt [OP] [opname] DESC Shell Option shell が使用する OP を制御 IN OUT OP s : set u : unset p : print q : 簡易 print o : set-o で定義している 変数に限定. shopt -s dotglob cdable_vars : cd cmd 引数が dir でない場合は 変数名として処理. cdspell : dir cmp の小さな spell miss を修正. checkhash : hashtable に 実行 cmd が登録されているか check checkwinsize: cmd 実行毎に 画面サイズを check cmdhist : bash が 複数行の cmd をすべて同じ history に保存 dotglob : path 名の展開に . で始まる file 含む. execfail : exec cmd が引数 file を実行しなくても 対話的 shell を終了しない expand_aliases: alias を展開する. extglob : 拡張した patten match を有効化する. histappend : shell が終了したとき HISTFILE が指定した file に保存 -> ~/.bash_history histeverify : history 置換の結果を shell 構文分析に送らない. hostcomplete: @ を含む単語は hostname の補完をためす. huponexit : shell 終了時に すべての job に HUP signal 転送 interactive_comments: # で始まる行を無視. lithist : cmdhist が ON のとき, 改行こみで保存 login_shell : login_shell の証明 -> login_shell -> shell が nest しているかどうか check 可能. no_empty_cmd_completion: 空行への補完になる場合は PATH 検索しない. nocaseglob : path 名展開時の sensitive nullglob : file名に match する pattern がない場合は 空行に展開. . echo *detarame* -> RET *detarame* progcomp : program 補完の toggle promptvars : prompt の 文字列が 変数と parameter を展開する. restricted_shell: shell を制限つきで起動. shift_verpose: shift cmd の ERR 制御 sourcepath : source cmd が PATH も検索. xpg_echo : echo cmd が \ を展開する . echo "aaa\tbbb" -> RET aaa bbb
    # wildcard の展開結果を 空にする
    shopt -s nullglob

    echo *.foo

___

■ help

SYNTAX help [OP] [ptns] DESC 組み込み cmd の help IN OUT OP s : simple ( 簡易情報 ) help cd; help -s cd;
___

■ jobs

SYNTAX jobs [OP] [%job] DESC 現在の job 状態を出力する. job とは OS という Process のお仕事かい ? IN OUT OP l : list all process ID p : gourp leader process r : runing : 実行中. s : stop : 停止中
  # 
  jobs %1  // こんな感じ 

  #
  kill %1
___

■ let

SYNTAX let arg1 [arg2] DESC 指定した文字列が[ 演算式 ]として評価される # expr より楽かも let sum="1+1"; echo $sum; IN OUT OP id++ id-- ++id --id *-/+ < = >= != = +=
___

■ local

SYNTAX local [OP] [name=[val]] DESC 宣言した shell でのみ有効な 変数を作成 関数内のみでしか利用できない IN OUT OP p : print a : array f : 関数名のみ使用する. i : 変数を整数とみなす. r : readonly ( 変数の設定はできない. )
   function foo() 
   {
     # foo は local 
      local foo=bar;
      echo $foo;
   }
現在の buf の shell を実行する. ./bufname.sh とするだけ. shell-command[c-m-! (buffer-file-name) ]
___

■ pwd

SYNTAX pwd [OP] DESC IN OUT OP // 今のところわからない L : symbolick link を含む形. P : symbolick link を含まない形.
___

■ read

SYNTAX read [OP] [name] DESC STDIN から 順番に 変数に代入 Game に使える name == 0 ならば, shellVar: REPLY に代入 IN OUT OP p : prompt r : \ を escape 文字として扱わない. t : timeout EX read -t 10 var n : nrChar 指定文字数を読み込む. s : silent a : arrVar の index 順に 値がセットされる. . read -a aVar; d : 入力の最後の文字を指定
   read var
   read var1 var2;

  # yes/no 入出力をうけつける
  read val;
  if [ $val == "n" ]; then 
     exit $?
  fi
___

■ readonly

SYNTAX readonly [OP] [name] readonly -p DESC 指定した shellVar を読み込み専用にする. 変数を読み込み専用にする const みたいなもの VAR: readonly variable IN OUT OP p : 読み込み専用. a : 配列変数に限定( 配列しかいれちゃだめ ) f : 関数を読み込み専用にする.
___

■ return

SYNTAX return (n) DESC 指定した戻り値 n で関数を終了させる. n == 0 -> 直前に実行した関数の戻り値. 関数呼び出しわかった BAD func(); OK func; 結果は $? にはいるようだ IN OUT OP
function func() {
    echo "call func"

    # a は scope される
    local a;

    # $RANDOM 
    # こんなことできるんだ 
    for((a=0;a< 5;a++)) 
      do
      echo $a;
    done
    return $a;
}
func;
echo ret $a;
___

■ popd

SYNTAX popd [n] DESC stack top を削除して Working Directory を 2番目の entry にセット IN OUT OP n: n番目の stack を削除.
___

■ nohup

SYNTAX nohup [cmd] DESC hungup signal を無視して cmd 実行 IN OUT OP
  ./foo.sh  # 無限 loop 
  kill -HUP %1 # hangup signal を送信. 
  nohup ./foo.sh # hangup signal から切り離す
  jobs 
  kill HUP %1 # hangup signal が無視される
___

■ nice

SYNTAX nice [OP] cmd [arg...] DESC 指定 cmd の優先順位を変更して実行する.( JOB の priority ? ) IN OUT OP n[1:20] n だけ優先順位を低くする POINT emacs から起動する shell は 別の子供かも ( cmd ごとに 子shell が起動するかも ) PONT shell も program だから起動できるのか nice find / -name foo -print & # find cmd を優先順位を低く実行
___

■ logout

SYNTAX logout DESC login shell を終了させる( 窓口がひとつなくなる様子を想像しよう ) SVAR:ignoreeof がセットされていて c-d が利用できない場合は有効. IN OUT OP
___

■ login

SYNTAX login [username | OP] DESC login ?( 通常のログインですること ) IN OUT OP p : preserve ENV
___

■ jobs

SYNTAX jobs [OP] DESC 現在の job 一覧 IN OUT OP l : process 番号.
___

■ if

SYNTAX if (exp1) then cmd1 else if(exp2) then else cmd3 endif DESC IN OUT OP d=`date +%m` echo $d; if [ $d -lt 12 ]; then echo "small" else echo "big" fi
___

■ foreach

SYNTAX foreach name (wordlist) ... end DESC wordlist の各要素を name にセットして cmd を順次実行. IN OUT OP foreach usr (user1 user2 user3) echo hello | mail $user end WARNING ないかも.
___

■ fg

SYNTAX fg [%job] DESC 指定番号の job を foreground で実行する. 省略時: current job IN OUT OP

    ;; RET: [1] 2639
    notepad &

    ;; 
    fg %1; 

POINT & (background) 実行すると, multithread が体験できる ( 特に出力 )
___

■ getopts

SYNTAX getopts optstr name DESC 引数( option )を解析する
    # "abc" を引数にとる
    # : は 引数にとる

    # 値が必要ならば : をつける    

    while getopts a:bc var
    do
    case $var in
      a)
        echo "option set a"
        # $OPTARG で a の値を参照
        echo "a =" $OPTARG
        ;;     # break
      b)
        echo "option set b"
        ;;     
      esac
    done

    # よびだす
    foo.sh   -a 10 -b  -c

    # option は先に指定すること
    foo.sh   -a   arg1  arg2

    # BAD
    foo.sh  arg1  arg2 -a

# option 部分は shift を利用して切り捨てることで # 残りの処理が簡単になる

    # option 解析

    shift `expr $OPTIND - 1`

    # 引数の index が option の直後が 0 に移動する


    # RET
    #    arg1  arg2
    echo $1 $2
___

■ exit

SYNTAX exit [expr] DESC [ 現在の shell ] を終了させる expr 省略時 : 終了status を shell 変数 status の値とする POINT .sh を実行するときは subshell が起動して終了する IN OUT OP
___

■ exec

SYNTAX exec cmd DESC

    # ls を実行させた後に shell を終了させる
    exec ls


IN OUT OP
___

■ eval

SYNTAX eval args DESC current shell で Command 実行 args を cmd列と思えば OK IN OUT OP

  cmd="ls -la"; 
  eval $cmd;

  eval "ls"

  if ( eval "$cmd" ) | grep xxx > /dev/null ; then  
  ...
  fi

___

■ dirs

SYNTAX dirs [OP] DESC print dir stack ( 左が stack top ) IN OUT OP
___

■ cd

SYNTAX cd [OP] [dir] DESC change wordking dir IN OUT OP
___

■ join

SYNTAX join [OP] file1 file2 DESC file1 , file2 "関係づけて" を結合する IN [-] : STDIN OUT STDOUT WARNING field は空白, 改行で区切られる 結合される field は ASCII 順で sort される必要あり. OP
___

■ xargs

SYNTAX xargs cmd ? DESC build and execute command lines from standard input STDIN からの文字列を 別の cmd 引数としてわたす ( -> 総 Byte 以内の引数を cmd に渡してくれる. ) 単なる PIPE とは異なる 引数としてわたしてくれる * どうやら 1 行でまとめてくれる // Opera にわたす 引数は 1 Line になる cat sql.htm | grep "http://" | xargs Opera # src file は XXX.rm になる find -name "*.rm" | xargs mv -t ../foo POINT cmd arg には総 Byte がある. STDIN から読み込まない cmd に わたしたいときに使うと便利 ! IN STDIN OUT OP 0: arg が NULL文字(\0)区切りであることを前提に処理
  # print0 の場所は 最後だよ 
  find . -name \*~ -print0 | xargs -0 rm  // ( Program Files とかあるときに便利 )


  find -type f | xargs rm -i;

  # STDIN から入力しない cmd の引数へ流すには
  find -iname "*test*" | xargs cygpath -a;    

  # SPC 区切りでわたしてくれる
  ls *_bk | xargs rm -v

  cd /work
  echo "aaa bbb" | xargs cygpath -am
___

■ uniq

SYNTAX uniq [OP] [infile [outfile]] DESC 行の重複をなくす 前後の行を比較して一致させる IN STDIN( infile がない ) OUT STDOUT( outfile がない ) OP u : only print uniq c : count ( 重複行 ) s : skip-chars=10 d : only print Duplicate line i : insensitve f : skip field
  # 連続してないとだめかも 
  echo -e "aaa\nbbb\naaa" | uniq
  echo -e "aaa\naaa\naaa" | uniq
  echo -e "aaa\nbbb\naaa" | sort | uniq
___

■ kill

SYNTAX kill [OP] pids kill [OP] %jobs DESC 指定 Process を強制終了する IN OUT OP l : list signal ( これ参考になりそう ) p : signal : ps に送る 信号の種類.( 省略 : SIGTERM, 15 )
  
  gcc foo.cpp 

  # とめる
  c-z            

  # Process の一覧をみる
  ps -a          

  # ps コマンドの PID で表示された ID を指定して消す
  kill 932


POINT SIGKILL, 9 // 強制終了
___

■ hostid

SYNTAX hostid [opt] DESC host 識別番号の出力 IN OUT OP
___

■ hostname

SYNTAX hostname [OP] DESC host名( machine )を出力 自分のマシンにある HTTP server にアクセスする時に 調べる winddows にもある ( OP なし ) POINT 遠隔操作をしているときに 利用している PC がわかる 厳密には Computer 名 と (TCP/IP の Host ) は違うが同じのが返る ? ipconfig でも調べられる Network Program では hostname のかえす 結果をいれると動く -> ので winsock::connect で指定しているということか ? IN OUT OP
  // これは machine名
  yahoo.co.jp
___

■ id

SYNTAX id [OP] [usr] DESC user 情報を出力 Print information for USERNAME, or the current user. usr名, usrID, usrGrp, idGrp を表示 だれが起動した Process かを判別します IN OUT OP g : group only u : usr only G : すべての GroupID を表示 n : 数値のかわりに 名前で表示 a : all process

    # すべての GroupID を表示
    # RET: 513 0 544 545
    #
    # /etc/group にあります
    id -G

    
    # Group 名で表示    
    id -nG
___

■ rsync

SYNTAX rsync [op] src dst -r: Recusive ディレクトリツリーをコピー -l: シンボリックリンクを、シンボリックリンクのままコピー -p: Permissionをそのままコピー -t: タイムスタンプをそのままコピー -g: グループ名をそのままコピー -o: ファイルオーナをそのままコピー (root権限 が必要) -D: デバイスファイルをそのままコピー (root権限が必要) -n 実際のファイル操作を行わない( 必ずこれでテストを ) -z 転送時にgzip圧縮 --exclude '正規表現' マッチするファイル・ディレクトリをコピー対象から除外 --include '正規表現' excludeパターンに穴をあける。このパターンにマッチしたらexcludeパターンにマッチしていてもコピー対象に含める。 --timeout=秒 指定の秒数データ転送が停止したらば終了する。デフォルトは0 (決してタイムアウトしない) なので特に注意。crontabに仕込む場合は必ず書くこと。 --rsh=ssh 手元のマシンとsshアカウントのあるマシン間でつかう 実はscpよりこっちを使うことが多かったり WARNING Remote側・local側でProtocol Versionが違うと相互接続できない
    # 暗号化する
    rsync -e ssh

    # Directory "src" を Directory "dst" の下に Copy 
    #    dst がなければ mkdir される
    #    RET: src/dst
    rsync  -r ~/test/sh/rsync/src   ~/test/sh/rsync/dst


    # dst 末尾の [/] はどちらでも OK
    rsync  -r ~/test/sh/rsync/src   ~/test/sh/rsync/dst/


    # src が Directory ならば -r をつけないと SKIP
    # RET: skipping directory src
    rsync  ~/test/sh/rsync/src   ~/test/sh/rsync/dst/


d:/rsync を外部ストレージ( f: )にバックアップする。-r で指定したディレクトリ以下を Recusive にコピーする
    rsync  -r /d/rsync   /f
完全に同期するには --delete をつけて、コピー元の削除ファイルをコピー先にも反映させる
    rsync  --delete  -r /d/rsync   /f
タイムスタンプ, パーミッションを保持する
    rsync  --delete  -rtp /d/rsync   /f
その他、頻繁に利用するオプションは -a ( アーカイブオプション )でまとめて指定できる
    rsync  -a /d/rsync   /f

    # これと同じ
    rsync  --rlptgoD  /d/rsync   /f
除外ファイルのリストを指定する
    rsync  --exclude-from=/d/ext.txt  -r /d/rsync   /f
除外リストの例
    ; コメント
    # コメント

    # 除外したいファイルのパターンを指定する

    # .obj とつくファイルを除外する
    *.obj
    
    # CVS ディレクトリを除外
    CVS
___

■ root

UNIX系OSの 管理者アカウント のこと Windows NT系OS では Administrator アカウントがrootに相当 アクセス権の設定にかかわらず すべてのファイルに無制限にアクセスすることが可能 日常的にUNIXを利用するには権限が強すぎて危険なため ふつうは管理を行なうためにしか用いられない また パスワードの変更の機能はrootアカウントを利用する必要があるけど 予めrootアカウントから設定をすることで 1般ユーザも設定にしたがってrootアカウントの権限を利用できる rootアカウントのパスワードが漏洩したとき パスワードを入手したユーザは無制限にアクセスが可能になる
___

■ ipconfig

SYNTAX ipconfig DESC IPAddress など Network 関連の情報を出力する. -> 認証のとき必要になるので, 覚えておくと便利. 自分の PC 名を知るにも利用できる. * win32 の command
  # Proxy Address
  192.168.2.253
  # 自分に割り振られたアドレス ? 
  210.150.255.66
  # 逆引きもできる.

  # MACAddress ( PhysicalAddress )を調べるには
  # HostName もわかる
  # HostName == ComputerName となっている
  # http://hostname/ これでも ACCESS できる

  POINT
    HOST [ hostname ] に , HTTP request を 送れ ということ

  # DNS Servers もでてくる
  #  cygwin だと返らない...
  ipconfig /all
  # そういえば, 外から見れるのか ? 
IN OUT OP all
___

■ nslookup

SYNTAX nslookup DESC NameServer に問い合わせて, DomainName を取得する NameServer に LookUp という意味 電話帳( Table )をひいて( lookup 索引 )すること 1. xxx : NEW 1. yyy : OLD * DNS Server は 自分の管理している 範囲の IP しかしらない :: 何も指定しないと, DNS Server の情報がかえってくる :: :: Default Server: nameServer.xxx :: Address: 111.111.111.1 :: nslookup Default Server: warpstar-a5dc25 Address: 192.168.0.1 * Domain 上に xxx というページはない という言い方がある
    # RET: 66.249.89.147
    nslookup google.com

    # IPAddress 直接指定で Web Page がみれる
    http://66.249.89.147/
___

■ wget

SYNTAX wget [OP] URL DESC ウェブサーバや FTPサーバからファイルを取得する。 Page を直接 Browse しなくても取得可能 IN : OUT: OP t( Trial ) : POINT ConfigFile に設定しておくこと /etc/wgetrc
    #  index.html をおとす
    wget http://www.sample.com/index.html

    # サイトごとダウンロードする場合は -r ( Recusive )
    wget -r http://www.sample.com/

    # ウェブサーバの image ディレクトリ以下のファイルをおとす。
    wget -r http://www.sample.com/image
    
    # 大きいファイルで途中でダウンロードが止まった場合は -c でレジューム
    wget -c http://www.sample.com/index.html


    # filepath で指定されたファイルに記述された
    URL を自動取得してダウンロードもできる

    
    # Webサーバーからファイルをダウンロードする
    wget http://www.xxx.com/file.tar.gz 

    # リトライ回数を5回に設定してFTPサーバーからファイルをダウンロードする
    wget -t 5 ftp://ftp.xxxxxx.co.jp/file.tar.gz 

    # FTP サーバーのdirディレクトリ以下を全て
    wget -r ftp://ftp.foo.com/dir/ 

    # Web サーバーから5段階までリンクをたどりながらファイルを入手する
    wget -l 5 -L http://www.foo.com/index.html 

    # png 画像のみ
    wget -r -A .png http://www.foo.com/index.html 
ログの制御
    # 大量のデータをおとすときは高速化のためログをきる
    wget -q  http://google.com

    # verbose モード
    wget -v  http://google.com

    # 指定したパスへログを出力する
    wget -o  d:/log.txt   http://google.com

    # ログを追加する
    wget -a  d:/log.txt   http://google.com

    # debug ログを出力する
    wget --debug  http://google.com
ダウンロードするファイルの制御
    # 取得済みのファイルはとらない
    wget -nc  http://google.com 

    # サーバの方がローカルよりも新しいときは取得する
    wget -N  http://google.com 

    # ファイル名を指定する
    wget -O  test.htm   http://google.com 
DESC // emacs から使える URL は Directory でなく Page( URL ) を指定しないとだめ SYNTAX を見ると URL とある File を指定しないと index.htm とみなされる ttp://host/foo/bar == http://host/foo/bar/index.htm 次の 動作をする * file ( index.htm ) を指定 http://www.yahoo.co.jp/ * dir 以下を指定 r http://www.yahoo.co.jp/ -> というか直接アクセスできない Host があるかも ( ie. 非公開の Host は wget でも無理 ) たとえば http://www.yahoo.co.jp/foodir 以下を指定しているつもりでも wget -r "http://www.yahoo.co.jp/foodir/" Case1: file名わからん && Link 元の Page はわかる * 直前は xxx からきたと偽る * -r ( Recursive )に * -l 1 ( 指定した回数の Link をたどる ) * -H : 異なる Host でも検索をたどる * -A".zip" : zip のみ必要. -> 落としたあと消している * --user-agent=XXX: Browser であることを偽る wget --referer "xxx" -r -l1 -H -A".zip" "xxx" /etc/wgetrc [ HTTP や FTP 経由のファイル取得 ]をするツール # 郵便番号: 佐藤さん家の / pdf 書類をください # 何でもできて本当に便利. http://www.tax.metro.tokyo.jp/kobai/20090602.pdf Webサイトをゆっくり見たいときは リンク先を階層で指定して一気に取れる オフラインでじっくり読んだり Mirror サイトを簡単にできる DL が中断したら 途中からやり直す Resume 機能があり便利 Forbiden といわれるときは while[] ; do wget で対応しよう ! done # cookie の指定 --load-cookies=cookies.txt # HTTP header を指定する wget --header 'Cookie: foo=bar' http://webos-goodies.jp/index.html OP a(AcceptList) 指定 拡張子の file のみ取得. k HTMLに含まれる絶対パスを相対パスにする Local で見るときに便利 t # retry 回数. 1 にしておいた方が無難 # wgetrc :: tries=1 wget -t 1 http://www.google.co.jp --------------------------------------- ■ 再帰ダウンロードの制御 --------------------------------------- r Recursive に FILE をとる 指定した Directory 以下を再帰的に取得する
        # 要はすべて取得してしまう. 
        wget -r http://www.google.co.jp
WARNING HTTP , FTP で動作はちがう HTTP では HTM 内の link( href, src )から, 再帰的におとす 回数を指定するのは -l (DEFAULT:5) FTP では SubDirectory の Tree を再帰的におとす H Host をまたいで取る ON にすると Host が異なる file がおちてくる l depth --level=depth を指定する A (Accept) 指定 パターンの File のみ DL 厳密には wildcard[?*]を含むとき pattern match ふくまない suffix の指定 # xxx.zip にマッチ A".zip" # xxx_w1.zip にマッチ. [*] で完全にマッチさせること A"*w*.zip" R (Reject) --------------------------------------- DL. 保存の制御 --------------------------------------- nH ホスト名の Directory を作らない( www.yahoo.co.jp ) ( 子供 Directory は作成される ) nd Local に Directory をつくらない ( 直下に DL したいときに便利 )


    # 中断したら Continue( Resume )
    wget -c http://www.sample.com/index.html



    # site ごと落とすには Recurive って Directory のことね 
    # まるごとになってしまうかも
    wget -r http://www.yahoo.co.jp

    wget -r http://www.nemopan.com




    wget -A".jpg" -r http://www.nemopan.com/auto_gallery_racing/files/attach/images/

    # Filepath で指定した URL から取得
    wget -i listurl.txt
    
      # listurl.txt
      http://www.google.com
      http://www.yahoo.co.jp
      Option は指定できない
  
    # Link 先を 3 階層たどる ( -r 必須 )
    #
    wget -r -l 3 http://www.google.com/index.html      

    # xxx.htm から LINK < a href=xxx.zip> をDL
    #
    wget -r -l1 "www/foo/bar/xxx.htm"
    
    # zip のみ取得.
    wget -a http://yahoo/foo.co.jp -o log.txt
    wget http://yahoo/foo.co.jp -a log.txt

    # 指定拡張子のファイルのみ取得
    





    # HTTP server 上の Directory 以下の gif をとる 
    #   --no-parent : 階層の外部( おや )の file をとらない
    #    つけないと SITE 全体がおちてくる
    #
    wget -r -l1 --no-parent -A.gif http://weather.yahoo.co.jp/weather/

    # MP3 も落とせる 
    wget "http://nikkei-pod.stream.ne.jp/www09/nikkei-pod/kiku/kiku4-090331-pc.mp3"


    # Background で実行
    wget -b http://www.google.com
    wget http://www.google.com &


    # Basic 認証をかけられたページにアクセスできる 
    wget --http-user={username} --http-passwd={password} {host}


    # 差出人のウソをつく. Forbiden 403 といわれるときに有効
    # Browser が Server にわたす情報 のひとつ
    # LINK 元( どこから来たか )をしらせる
    # 
    wget --referer "http://foo" "http://bar"

    # Server の応答をみる
    wget -S http://www.yahoo.co.jp
wget http://nchc.dl.sourceforge.net/sourceforge/python-mode/python-mode-1.0.tar.gz WARNING /etc/wgetrc http_proxy を設定すること
  # File を指定しないと index.htm を指定したことになる
  #      
  wget -r http://localhost/

  # おなじ意味
  wget -r http://localhost/index.htm

  # -r は File の Link をたどる
  #    Directory 階層はたどらない
  
  wget -r http://localhost/index.htm
  wget -r http://localhost/img/foo.png

  /index.htm
  /img/foo.jpg    # これは index.htm からの Link がなければ落ちてこない


  # Link されていれば取れる
  index.htm
  < img src=foo.jpg>



  # OK
  wget -r http://localhost/app

  # OK
  #      index.htm のみ
  wget http://localhost/app

  # これは うまくいかない
  # Root 直下以外はだめ
  wget http://localhost/app/somedir
  
  
___

■ sleep

SYNTAX sleep time[smhd] DESC cmd 実行の一時中断 IN OUT OP
    # 20分後に compile を background 実行.
    (sleep 1200;gcc exfile)&  
    sleep 1m;
___

■ file

SYNTAX file [OP] file... DESC file の種類を判定をして STDOUT へ出力( おおまかに予測 ) IN NULL OUT STDOUT OP f : 指定fileに記述されている file を 検査. /log/lua.htm /log/cygwin.htm
___

■ cal

SYNTAX cal [month year] DESC OP 3 : 前後3 s : sunday first m : monday first y : year
  # 前後 3 ヶ月
  cal -3

  
___

■ ping

SYNTAX ping [OP] host psz cnt ping [OP] あて先 荷物の大きさ 回数. DESC 指定した macine と packet を指定数おくる. default では packet は 1秒ごとに転送される. c-c で中止. OP

    ping www.google.co.jp 
___

■ hash

SYNTAX hash [OP] [cmd...] DESC Command 検索 path を hash Table に登録することで検索速度をあげる OP d: d r: remove tbl t cmd:
  
    # 現在の内容を確認
    hash
    
    # Table を空にするには
    hash -r

    

___

■ df

SYNTAX df [OP] [filesys] [files] DESC Disk の空き容量を出力 OP a: all : 0block size 含む B: Block : 指定Blockサイズ -B 1024 l: local : local file system
    # [:]必須
    df C:
___

■ du.DiskUsage

SYNTAX du [opt...] [file...] DESC ディスクの使用容量をしらべる estimate file space usage for each file OP c : total b : byte a : all file h : human readable s : Summarize( 要約 )
    # 次のような Directory
    ls -R oya

    /dust/oya:
    foo.txt
    ko

    /dust/oya/ko:
    foo.txt



    # oya 以下の Sub Directory ごとにサイズを出力
    du -h oya

    1.0K  oya/ko
    2.0K  oya

    # 合計も出力
    du -ch oya

    1.0K  oya/ko
    2.0K  oya
    2.0K  total

    # oya の合計のみ表示
    #   ( SubDirectory を表示しない )
    du -sh oya

    2.0K  oya


c ドライブの直下のディレクトリをしらべる
    # 子供 Directory のみ表示
    du -h --max-depth=1  c:/
___

■ od

SYNTAX od [opt] file... DESC Object Dump OP c : 1byte ごとに Ascii 表示 o : 1byte ごとに 8 進数で表示 x : 1byte ごとに 16 進数で表示 POINT 文字 code の検索に利用
___

■ dump

SYNTAX dump DESC Binary を出力 OP
  foo.txt aaa : ascii txt
  dump foo.txt
  00000000 6161 61
___

■ strip

SYNTAX strip [OP] objFile DESC discard symbol from objFiles Symbol Table を obj から削除する
___

■ m4

SYNTAX m4 [OP]... [file]... DESC macro processor OP
___

■ ps

SYNTAX ps [OP] [-u usrname] [-p pid] DESC cur process 表示 * UID userName * PPID ParentPID * PID ProcessID * SITME StartTime OP W: windows ps f: full a: all users u: list processes owned by UID p: procss
___

■ mkdir

SYNTAX mkdir [OP ...] dir DESC Make Directory OP p : no error if existing, make parent directories as needed m : mode 指定. // mkdir -m 777 foo p ( Parent )オプションで必要ならば親ディレクトリを生成する
    mkdir -p ./a/b/c
またディレクトリが既にあってもエラーにならないので -p を設定しておくと便利
    mkdir test

    # エラーにならない
    mkdir -p test
___

■ cat

SYNTAX cat [OP...] [file...] IN file... | - | STDIN OUT STDOUT DESC ファイルを結合して STDOUT へ出力 OP n : 行数つきで出力 v : 制御文字つきで出力 e: endline t: tab s : 空行を 1 行に e : 行末[$] が表記 POINT SPACE を可視にする時に使う POINT STDIN からの情報を file に書き込む. cat > file foo bar c-d # 終了 STDIN からの情報を file に追記する cat >> file c-d

  # 行末に $ をつける
  cat -E foo.txt

  # 行数をつける -> 行数を知るのに便利
  cat -n top.htm

  # [ - ] は STDIN がはいる
  date | cat header.htm - footer.htm; 


   # ファイルに共通のヘッダ、フッダを追加できる
  cat header_c xxx.c
  cat header_htm xxx.htm
  cat header_h xxx.h
   cat header_txt xxx.txt
___

■ rm

SYNTAX rm [-OP]... file... DESC file( Directory )を削除 OP f : Force : file無しでも prompt しない r : Recursive : v : Verpose :
  ps | cat fileA - fileB; [ - ] は標準入力がはいる

  # bar より下の file( dir ) を消去
  rm -r /foo/bar/*  

  # bar dir を含め 削除
  rm -r /foo/bar    
     
  
  echo /foo/bar/* とすると shell の cmd 置換の結果がわかる
___

■ tr

SYNTAX tr [-OP] set1 set2 DESC STDIN からの文字を変換, 削除して STDOUT へ出力 IN STDIN OUT STDOUT
OP c : Complement ( 補集合 ) tr -c A-Za-z a < test.txt // すべての英文字以外を変換 d : Delete s : Squeeze ( ( 連続した文字を一個だけ出力 )

  # // すべての英文字を変換
  tr A-Za-z a <  test.txt 


  # すべて小文字へ
  echo "AAA" | tr "[:upper:]" "[:lower:]"


  # 空白を消去
  tr -d ' ' <  test.txt

  # // キャリッジリターン[\r] を消去
  tr -d '\015' <  test.txt 
  echo -e "aaa\n\rbbb" | tr -d "\r"

  # s : squeeze ( 連続で置き換えのとき一個だけ出力 )
  tr -s A-Za-z a <  test.txt // すべての英文字以外を変換

  # すべての空白を Space1文字 にする
  echo "aaa    bbbbb" | tr -s " "

  # set2 が指定されると set2 の最後の文字になる
  echo abced | tr [:alpha:] abc


  # 英文字, 空白, 改行  以外を消去 

  tr -cd "A-Za-z \012" <  test.txt 
 
  # 単語リストをつくる
  tr -cs "" "\012" <  test.txt

  echo "aaa bbb ccc aaa bbb" | tr -cs "[[:alpha:]]" "\n" | sort | uniq

  tr -s [[:space:]] "\n"


  # -s だけは指定できない
  echo aaa | tr -s

  
  

  WARNING
    文字の追加はできないため, sed, perl で代用する

___

■ grep

SYNTAX grep [-OP] pattern [file,...] DESC 入力の中にパターンを含む行があればその行全体を出力 emacs のgrep と同じ IN file ( STDIN ) OP c : count数 n : nrLine h : hideFile s : suppress err ( 2> /dev/null ) i : insensitive 大小文字区別無し POINT grep -h ptn funcName // cpp から関数名を取得

    // inVert( 反転指定 )
    grep -v "cpp"

  WARNING 
    // "\t" は指定できない
    echo -e "a\tb" | grep "\t"

    echo -e "a\tb" | grep "[[:space:]]" | grep -v " "



  // 前後 1 行を表示
  echo $'a\nb\nc' | grep -n1 "b"

  // b のみ
  echo $'a\nb\nc' | grep  "b"

// patten [...]bc はファイル置換と同様しかしPETTERN の箇所は""する必要ないかも
  grep "[ak]bc" [Tt]est.txt 
 // aaa, bbb, ccc のいずれかを含むを行を出力

 // @WARNING () は処理結果を変えるメタキャラクタなので""必要
  egrep "(aaa|bbb|ccc)" *

  // 行頭aaa にマッチ
  grep "^aaa" test.txt 

  // 行末aaa にマッチ
  grep aaa$ test.txt 

    @WARNING UNIX 改行コードでない場合はtext editor上では行末でもデータとして異なるので注意!!!
  grep . test.txt // 任意の一文字にマッチング
  grep "\[a\]" test.txt // [] : shell の meta chara だから
  grep "foo" `find .` // cur dir 以下から探す
  grep '\1' // 後方参照可能

  // posix ブラケット表記
  grep [[:alnum:]] test.txt 
  grep [[:blank:]] test.txt // [\t ]
  grep [[:graph:]] test.txt // 表示可能文字 // 空行を除去可能

  // 英記号のみ( \n は含まない )
  grep [[:punct:]] test.txt 
  egrep 'a{0,5}' file // 省力しない
  grep 'a\{0,5\}' file // {} meta chara 扱い

WARNING grep は改行コードも含めて検索する grep "" はうまくいかない
    // [-] は qout がいる ? 
    BAD
      echo "---aaa"| grep "--"
    OK
      echo "---aaa"| grep "\-"
echo "** テスト " | grep "^\*\+.*[[:space:]]\+$" echo "** テスト" | grep "^\*\+.*[[:space:]]\+$" echo "** テスト " | grep "^\*\+.*[[:space:]]\+$" echo " ** テスト " | grep "^\*\+.*[[:space:]]\+$" Escape[\]することで MetaChara 扱いになる文字 [+] BAD grep '[a-z]+' file OK grep '[a-z]\+' file WARNING egrep では上記と逆 -> grep, egrep に統一すべき . BAD grep '.htm' file OK grep '\.htm' file ()後方参照時 BAD grep '(ptn),\1' file OK grep '\(ptn\),\1' file WARNING egrep は上記と逆 {}回数指定 BAD grep '[0-9]{4}' file OK grep '[0-9]\{4\}' file WARNING egrep は上記と逆, egrep の方が使いやすいかも ? : 任意の文字の 0 || 1 BAD grep 'd?emon' file OK grep 'd\?emon' file WARNING egrep は上記と逆, egrep の方が使いやすいかも  制御文字は[\t]未対応 ? 応用 -> うる覚えの単語を探すというのが一番の使い方!
  grep [abcde][abcde][abcde] test.txt // 母音3文字にマッチング
  grep ^..........$ test.txt  // 長さ10文字の単語にマッチング
  grep '\(...\)\1' test.txt  // 3文字の反復の単語
  grep '\(.\)\(.\).\2\1' test.txt  // 5文字の回文
  // foo && bar を含む行をマッチング
  grep "foo" * | grep "bar"  
  // log を指定日時で見る
  grep '1[0-2]/Jan/2005:23:0[0-5]' 
    
___

■ sed

SYNTAX sed [s/ptn/out/...] [file...] IN : file がない場合 STDIN OUT : STDOUT DESC 文字列をルールに従って変換する 最長(最短)検索 はできない 変換に利用できるルールには下の条件式が利用できる 文字列を挿入したい場合は「a」や「i」の後に挿入する文字列を指定 サポートする Regexp は 基本正規表現 を少し拡張したもの Perl のように 複数行にまたがる処理はできない。 文字列を置換 「s/置換ルール/置換文字/」 置換ルールの最初に数値を指定すると,指定した行のみが処理される 「3d」と指定すると,3行目が削除 変換をするときは 変換処理は -e オプションを指定した後に記述する
    sed -e 's/foo/bar' test.txt
区切り文字は / 以外にも , @ などが利用できる。
    sed -e 's,/,\,' test.txt
パターン・スペースとホールド・スペース 処理をする対象の文字列を一時的に保存する ( パターン・スペース という ) POINT 次の処理をすると image がわきやすい -> Group の文字が ひとつずつ していることがわかる echo abc | sed "s/[abc]/ABC/" 1行目を処理するときには,1行目の内容がパターン・スペースに保存 その後 パターン・スペースにある文字列に対して置換などの処理が行われる ホールド・スペースは パターン・スペースのサブとして使われる保存領域 パターン・スペースにある文字列を後の処理で利用したい場合などは 一度ホールド・スペースに移動しておく 他の処理を行った後に ホールド・スペースからパターン・スペースにもどせば 前の処理の続きができる パターン・スペースの文字列をホールド・スペースにコピーする場合h ホールド・スペースの文字列をパターン・スペースにコピーする場合は「g」 パターン・スペースとホールド・スペースを入れ替える場合は「x」 OP e: Expression f: Expression をファイルから読み込み n: デフォルト出力の抑制

  # 改行の変換はできない
  sed 's/\n/\r\n/' <  TEST_LF.TXT > TEST_CRLF.TXT

  # Perl ならできる
  perl -p -e 's/\n/\r\n/' <  /dust/LF.txt > /dust/CRLF.txt


  # tr みたいな使い方もできる
  #      1 < -> 1 対応しないとだめ
  echo ABCAAA | sed "y/ABC/ebc/"

  BAD
    echo ABCAAA | sed "y/ABCD/ebc/"

sed -n '10,/STRING/p' /dust/foo.txt { } sed s/foo/bar/ foo.cpp ls | sed s/foo/bar/ # STDIN から入力する. echo $変数名 | sed -e 条件 # 変数を置換するのはこれなのか ?
  ./test.sed foo.txt


  # 2-4 行目を削除
  sed '2,4 d' main.cpp

  
  # Error とある行に,「### Check Line ###」という新しい行を追加する
  #
  # 
  echo "ERROR: xxx" | sed -e "/ERROR/i #### Check Line ###" 
  
    sed -e '1,2 d' -e 's/foo/bar/g' foo.cpp

  // 数値のみを抽出
  sed "s/.*\([\.[:digit:]]\+\).*/\1"

echo "   aaa" | sed "s/[[:space:]]\+//g"



-f FILE で変換式を外部ファイルから指定できる。
    sed -f  script  test.txt

    # 複数指定する。
    echo "aaa" | sed -f script1 -f script2
変換式は次のように各行に式をかく
    # commnet

    1,2 d 
    s/a/A/g
    s/b/B/g
    s/c/C/g
___

■ DefaultMetaChara

DESC まとめるとこれ
    S_RESED
    # Escape して 通常文字( Default MetaChara )
    # .[]
    # Escape して MetaChara 扱いにする
    # +()|/< >
    E_RESED
[] : Group
  BAD 
    # [ab] を c に変換
    echo aaa | sed 's/\[ab\]/c/g' 
  OK 
    # a or b を c に変換
    # RET: ccc
    echo aaa | sed 's/[ab]/c/g' 
    # 株価情報 だけをとりたい ! ( Filter する )
    curl -s "http://profile.yahoo.co.jp/independent/9430" | sed "s/[^0-9.,]//g"
. : 任意の 1 文字
  BAD
    echo "aaa.txt" | sed 's/./_/g' 
  OK
    echo "aaa.txt" | sed 's/\./_/g' 
___

■ Escape[\]対象文字

* Escape して MetaChara 扱いにする [+()|/< >] () : back ref
  BAD
    sed 's/(foo)\t(bar)/\2,\1'
  OK
    sed 's/\(foo\)\t\(bar\)/\2,\1'
(a|b) : or
  BAD
    sed 's/(a|b)/foo/' file
  OK
    sed 's/\(a\|b\)/foo/' file
+ : 1文字以上の繰り返し
  BAD
    sed 's/[[:alnum:]]+/bar/g' file
  OK
    sed 's/[[:alnum:]]\+/bar/g' file
WARNING [/] がptn, out に存在する際は [\/]
___

■ du

SYNTAX du [OP...] [file...] DESC Disc Usage space, disc 容量を調べて、stdout へ出力
  # Current Directory 以下の容量を出力
  du


  6  ./CVS
  3  ./extra/CVS
  56  ./extra
  3  ./img/CVS
  1972  ./img
  8954  .
___

■ which

SYNTAX which cmd DESC cmd の full path を表記
___

■ find

SYNTAX find [dirlist...] [OP...] [expression] DESC ファイル, ディレクトリを検索する。 POINT dirlist は -OP の前に指定 expression type c f : regular file d : dir find -type d | grep 'etc' // etc dir 検索 find -name "*xxx*" -type f -exec rm {} \; 名前で検索する。 i ( insensitive )指定もある。 マッチする対象は ファイルだけではなくディレクトリも対象になる。 -name では shell の wildcard が使える。 名前は完全に一致する必要がある
    # BAD
    find . -name ".txt"

    # OK
    find . -name "a.txt"
-name 指定ではシェルの wildcard が使えるので部分的に指定する場合は使う
    # a.txt
    find -name "*.txt" 

    # a.TXT  a.txt
    find -iname "*.txt" 

    # main.cpp, main.htm
    find -iname "main.???"

    # main.d, main.o
    find -iname "main.[do]"

検索するディレクトリの深さを指定する ( -maxdepth INT )
    find . -maxdepth 1 -name "*.txt"
条件を not(反転) させる
    #  a.htm  a.jpg   a.png
    find -not -name "*.txt"

    # 各フラグの前に -not は指定できる。
    find -name "*.txt" -not -size +10K
  WARNING
    Path に "完全" に Match する必要がある
    "部分" ではだめ
    grep と間違えないように

    # regexp 検索
    
    regex str


regex ".*\.txt" cur dir からの相対パスで match する必要あり と思ったが, 検索開始 パスからの相対になる と表記すると Current になるだけ 仮説: match の比較対象の PATH は FULL PATH # d:/work 以下の すべてに match find d:/work/ -regex ".*" OK find -regex './foo.txt' BAD find -regex 'foo.txt' exec cmd // 対象ファイルに cmd を実行( {}SPC\; 必須 ) // -exec cmd {}< b>< font color="ff000000">SPC\;< /font>< /b> find . -exec rm -i {} \; newer FILE // file より新しいもの( timestamp ) mtime n // [ n*24 時間前に更新 ]されたもの. // EX. -mtime +7 // ここ一週間更新されないもの. // EX. -mtime -7 // 1 週間以内に検索されたもの. mmin n // 過去[ n Minute 内に更新 ]されたもの. ( 新規 file を検索にどーぞ. ) print0 // dlm として 0 をセット. ( xargs -0 と組み合わせる. ) empty // 空ファイルを取得.
    # current の file を取得する
    find . -maxdepth 1 -type f
    find . -name "*.foo" -type d

    # rm each file となる
    find . -name '*.zip' -exec rm {} \; 

    # pro 以下 *.cpp 検索
    find /pro/ -iname "*.cpp"  

    # bmp, jpg を listup
    find . -regex ".*\.\(bmp\|jpg\)"   

    # FILE より新しい
    find -newer FILE

30分以内に更新のあったファイル検索する
    find  -mmin -30
ファイルサイズを条件にして検索する
    find -size N[cwbkMG]

    # 1024 byte 以下
    find -size -1024c

    # 1M byte 以下
    find -size -1M

    # 100M byte 以上
    find -size +100M

    # 300 kbyte 以上
    find -size +300k
regexp : meta chara 機能を ON not need escape [ . * ] need escape [ ( ) | ] find -regex './te\(s\|x\)t' RET ./text ./test
___

■ mount

SYNTAX mount WindowsPath CygwinPath DESC Windows File System の Directory を POSIX PATH に mapping drive文字を POSIX dir tree の subtree にマッピング POINT map された情報は レジストリに保存される // user 毎の設定 // システム全体のテーブル デフォルトでは POSIX ルート / はシステムパーティションに位置づけられていますが mount コマンドを使用して Windows ファイルシステム中の任意のディレクトリで再定義できる Cygwin が Win32 パスから POSIX パスを生成したかどうかに関わらず 最も長くマッチしたプレフィックスがマウントテーブル中で使われます すなわち C: が /c として 更に / としてマウントされている場合 Cygwin は C:/foo/bar を /c/foo/bar として変換する // system とあるのは 全 user f:\cygwin\bin on /usr/bin type system (binmode) // user // user ごとの設定 c: on /cygdrive/c type user (binmode,noumount) 特定の Win32 パスを 既存のマウントによって POSIX パスへと変換することが出来なかった場合 Cygwin は常に自動的に POSIX パス /cygdrive の下にある仮想上のマウントポイントを使用します 例えば Cygwin が Z:\foo にアクセスしたが Z ドライブは現在のマウントテーブルには存在しなかった場合 Z:\ は自動的に /cygdrive/Z へと変換される Cygwin は Win32(ディレクトリの区切りにバックスラッシュを使う)スタイルのパスと POSIX(ディレクトリの区切りにスラッシュを使う)スタイルのパスを共にサポートする UNC パス名(二つのスラッシュと一つのネットワーク名で始まる)もまたサポートする (Linux のような)POSIX オペレーティングシステムには、ドライブ文字という概念はない 代わりに、全ての絶対パスは(「c:」のようなドライブ文字の代わりに)スラッシュで始まり 全てのファイルシステムはサブディレクトリとして表現されます ( 例えば 新しいディスクを購入してそれを /disk2 というディレクトリにする、といったようになります)。 UNIX システムで動作するように書かれた多くのプログラムでは 単一の統合された POSIX ファイルシステム構造の存在が前提となっているので Cygwin は それらのプログラムが Windows 上で正常に動作するように、 Win32 ファイルシステムに対する特別な内部的 POSIX ビューを提供します Cygwin は必要に応じて Win32 パスと POSIX パスの間の変換用のマッピングを使用します。 POINT 環境変数 HOME、PATH LD_LIBRARY_PATH は Cygwin プロセスが最初に開始された時点で自動的に Win32 フォーマットから POSIX フォーマットに変換される echo $HOME (c:\cygwin\bin から /bin のように echo $PATH // こちらは変更されない echo $INCLUDE

    # 現在の MountTable を listup
    mount

    # --Change-cygdrive-prefix
    # cygdrive prefix を [/] に変更
    # cd /c  で c:/ へ移動
    mount -c /
    cd "/c/Program Files"


    # "d:/work" を /work に map
    mount  d:/work   /work


    # 同じ意味
    //    \\ とすること
    //    Invalid argument となってしまう
    mount  d:\\work   /work

    
    

    mount d:/work/log/htm/public /log
    umount /log

___

■ cygpath

SYNTAX cygpath [OP] path... DESC pathWin < -> pathCyg 相互変換 IN NULL OUT STDOUT POINT # 複数指定できる cygpath -am ./foo ./bar ./foobar OP w: Windows u: Unix m: mixed( EX. c:/windows ) W: c:/WINDOWS P: start > programs < b>-a: absolue< /b> l: Windows longname ? プリセットのディレクトリのパスを返す
    #  c:/Users/USER/Documents
    cygpath -O

    # c:/Users
    cygpath -H

    # c:/Users/USER/Desktop
    cygpath -D

    # c:/Windows/system32
    cygpath -S

___

■ wc

SYNTAX wc [option]... [file]... DESC Word Count file の行数, 単語数, バイト数を表示 IN file( STDIN ) OUT STDOUT OP l : Line 数 w : Word 数 c : encode に依存する L : Longest line

    # ファイルの行数
    wc -l file

    # Record 数をとる
    cat record.csv | sort | uniq | wc -l
    
    # logdata vtxdata[ 0 1 2 3 4 5 ] があった際のカウント数を調べる
    wc -w log.txt

    WARNING 
      Line は [\n] の数で判定している

      # NrLine = 2
      aaa\n
      bbb\n
      ccc

      # NrLine = 3
      aaa\n
      bbb\n
      ccc\n

    echo -en "aaa\nbbb\nccc" | wc -l
    echo -en "aaa\nbbb\nccc\n" | wc -l


  # 行はなくなっている
  tmp=`curl -s "http://weather.yahoo.co.jp/weather/jp/13/4410.html" 
    | grep "^< img.*forcast.*gif.*"`

  echo $tmp | wc;        
___

■ echo

SYNTAX echo [op...] [string ...] DESC 文字列を STDOUT に出力 # cmd 置換の結果をみるにも便利
___

■ mv

SYNTAX mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY mv [OPTION]... -t DIRECTORY SOURCE... DESC IN OUT OP u : update
    # 上書きを無視するには
    mv -f srcfile /work/tmp/

    # verpose
    mv -v src dst
___

■ cp

SYNTAX cp [op]... file... dir cp [op]... file file cp [op]... -r dir dir DESC ファイルをコピーする ( Default では Directory は Copy しない ) POINT 引数によって使い方は 3つ
     2 つ以上のファイル と最後に Directory を指定
      [ dir以下 ] に cp される
      ( 最後に Directory を指定しないとエラー )

     2 つの FILE
       1 番目のファイルを 2 番目のファイル名でコピーする

     2 つの DIRECTORY
       cp -r dir1 dir2
       GUI で dir1 を dir2 に DragDrop するのと同じ
       結果は dir2/dir1
* Permission denied について コピー先の場所はあなたが書き込むことのできる場所です そうでないときは `Permission denied(許可しません)' と表示します 上書きのときは元のファイルをいったん消して書き込みますので 元のファイルもあなたが書き込み許可を持っていなければ同じく `許可しません'となる ファイルモードを chmod()で変更してからすること . cp -R f:/work/data d:/work // RET: d:/work/data tgt を [/] で 終わるようにすると, dir を指定したことになる. -> 指定した dir がなければ, 処理は止まるはず. ? cp -Ruvp ./foo.cpp /cygdrive/c/tekitou/ OP r : Recursive u : Update p : Preserve ( TimeStamp, OwnerShip modifytime ) を変更しない コピーすると, コピーした日付や所有者はコピーした人になるが 元のファイルの所有者やグループ,モード,日付もそのままコピーする。 f( --force ) dst を開けなくても, 削除してから再度コピー v : Verpose ( どのように Copy が動作するか チェックするのに便利 ) POINT
    #  Directory 自体のコピー( EX. f:/work/data -> d:/work/data )

    // BAD
    cp -R f:/work/data d:/work/data/
    // OK
    cp -R f:/work/data d:/work/

  WARNING 

    # tgt の Directory は自動で作成されない
    #      mkdir -p( Parent ) で作成しておく
    cp src.cpp ./tekito/dst.cpp   

    # tgt にしかない FILE は削除されない
    cp -Rvfup dst src
___

■ date

SYNTAX date [OP] [+format] DESC 時刻の表示 OP FORMAT +STRING : 出力format 指定 WARNING + は必須( ""はmeta chara 抑制の為 )?

    # RET: 2007_08_18
    date "+%Y_%m_%d"

    # RET: 20070818
    date "+%Y%m%d"


    # RET: 2007-09-17
    date "+%F"
    date "+%M"     // RET: minute

    # RET: 2124
    date "+%H%M"     

    # RET: 21:25
    date "+%R"
___

■ nkf

SYNTAX cat foo | nkf -s DESC network kanji変換 filter 入力漢字 code を自動認識, 指定した出力漢字 code を出力 [in/out] 対応文字列 . jis-code : ISO-2022-jp( 7bit jis ) . sjis : MS 漢字 code . 日本語EUC: AT-T code OP s: shift jis e: euc j: jis
___

■ ar

SYNTAX ar [OP] archive [member ...] DESC archive 作成 OP r: replace v: verbose

    # test.o , sub.o を Archive する
    #
    ar -rv libtest.a test.o sub.o

    # a : Append
    a - test.o

    # r : Replace
    r - sub.o

    
___

■ ranlib

SYNTAX ranlib [-vVt] archive DESC archive Index を更新する POINT GNU ar は自動で Index も更新するため不要
___

■ test

SYNTAX test EXPRESSION [ EXPRESSION ] DESC ファイルタイプのチェック 値の比較 RETVAL 0: true : test 結果が真 1: false : test 結果が偽 POINT # RET: false ( == 1 ) test ; # RET: true ( == 0 ) test nandemoii;
  WARNING
    BAD
      # SPACE なしでは str に値が代入される
      [ $str=1 ]
    OK
      [ $str = 1 ]
expression [ num = 0 ] # 数値の比較 [ str = str ] # 文字列が等しければ [ str == str ] # SPC を忘れずに [ str != str ] [ int1 -gt int2 ] : greater than( -ge : greater | equal ) [ int1 -lt int2 ] : less than test -f foo.txt // File Check test -d foodir // Directory Check test -n $str // if strlen != 0 test -z $str // if strlen == 0 test -s file // if file Size > 0 test -w file // if file Writable test -r file // if file Readable test -S file // if file Socket test -t file // if file open By Terminate test -s file -a -s file // if file is empty int1 -ne int2 // int1 not_equal int2 dep -nt tgt // dep が tgt より新しければ
    # 引数 がなければ
     if test -z $1; then    

    # file に記述があれば
    if [ -s ./alert.txt ]; then
       notepad alert.txt &
    fi  
dst が src より新しければ
    if test $dst -nt $src; then

    fi
ディレクトリであるかテスト
    if [ -d $path ]; then

    fi 
___

■ echo

SYNTAX echo [arg] IN arg 省略時に STDIN から読み込む OUT STDOUT DESC [ 引数 ]を[ STDOUT ]に出力 複数の文字列を出力する際は, SPC tab で区切る OP n: no trailing newline( 改行を出力しない ) e: Escape [\] の後を MetaChara として扱う \n : Newline \t : Tab
    echo -e "aaa\nbbb" /dust/foobar
    // 改行を出力しない
    echo -n 元気
    echo ですか

    // wc を 利用すると 確認できる
    // RET 4
    echo 123 | wc -c

    // RET 3
    echo -n 123 | wc -c

    # ["] を含むときはどうなる ? 
    BAD
      echo "aaa\"bbb"
    OK
      echo 'aaa"bbb'
    # どうやら lisp を経由しているから
    BAD
      echo "aaa\"bbb"
    OK
      echo "aaa\\"bbb"
    # 改行コードをいれて ( \n を メタキャラとして )
    echo -e "up\ndown" > /dust/foo

    :: パラメータの展開みれます
    echo %1 > ret.txt

___

■ ls

SYNTAX ls [OP...] [dir...] DESC CurrentDirectory の内容を表示 OP a : All file ( .file 含む ) A : All file ( . | .. 除く ) l : long format : 詳細表記 d : Directory : dir 自身の表記 POINT Directory 名を指定したとき再帰的にlist するか指定 ( default on ) R : recursive r : Reverse s : print Size ( kB ) f : do not sort t : Time : 変更日時順にソート S : sort by Size Fc : dir の後に / , 実行fileに * ( file 属性を表示 ) i : inode番号を出力. g : user のない LongFormat o : group がない longformat p : dir の後に / s : block数. m : stream形式( foo, bar ... ) B : ignore Backup file ~ i : 各 file の index 表示 --color S : sort by file size --full-time WARNING ls は CurrentDirectory の内容を表記する( 再帰的ではない ) Full-Path で表示されない

    :: 変更した順に
    ls -t

    
    :: ".xxx" ファイルを含め ".", ".." を除く
    ls -A


    # ファイルサイズを出力する
    ls  -s    test.bmp

    #  1M など人が読みやすいフォーマットで
    ls  -sh   test.bmp
    ls -l の format

    permisson  owner  group  size  ModifyTime  filename

    group "なし" といわれる ? 

___

■ faq

■ PATH 表記は win32 | POSIX どちらにすべき ? DESC mycon > PATH -> POSIX PATH に自動変換 D:\mydata\tool\exe -> /cygdrive/d/mydata/tool/exe 2. which cmd は POSIX path のみ有効ではない export PATH=$PATH:"D:\mymus"
















NINJAIDX 3