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


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 default 区切り文字は [ TAB ]
# ファイルサイズのみ 取得 du -b test.txt | cut -f 1
区切り文字の指定は 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


stat . timestamp


ファイルのステータスを表示する。
stat test.txt



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 # 最後の2行 ls | tail -n 2
開始行を指定する
# 先頭10行目 から最後まで tail -n +10 foo.txt # 最初の行を削除 tail -n +2 foo.txt



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 # 先頭 1 Byte tail -c 1 foo.htm
後ろから指定するときは - をつける
# 先頭 〜 後ろから2行目の一つ前 ( 後ろ 2 行を除去 ) head -n -2 foo.htm # 最後の行を削除 head -n -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_CHECK_SIZEOF( TYPE, CROSS-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
// MISC : /pro/test/nm { // 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 curl -s "MISC http://www.yahoo.co.jp" | iconv -c -t SJIS OK curl -s "MISC http://www.yahoo.co.jp" | iconv -c -f utf-8 -t SJIS
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( 要約 ) ファイルのサイズを調べる
du -b test.txt
# 次のような 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 EOF 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 ERROR ( 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/"
正規表現もつかえる 空白文字を改行にする
cat test.txt | sed 's/\s/\n/g'
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 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
ファイルタイプで検索する
find -type d find -type f find -type l
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 ) 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
Numeric arguments can be specified as +n for greater than n, -n for less than n, n for exactly n. 時間で検索する 30分以内に更新のあったファイル検索する
# 30 分以内に更新 find -mmin -30 # 過去 7 日に更新 find -mtime -7 # 本日の更新 find -mtime 0 # 昨日の更新 find -mtime 1 # 過去 7 日に Access されたファイル。 ( 端数はすてられるので ) find -atime -7
ファイルサイズで検索する
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 . timestamp


SYNTAX date [OP] [+format] DESC 時刻の表示 OP FORMAT +STRING : 出力format 指定 WARNING + は必須( ""はmeta chara 抑制の為 )?
# 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" # 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"