Referrence
NameRule
DESC
表記
IN : STDIN
OUT : STDOUT
NULL : STDIN, STDOUT から入力をうけない.
IN : NULL ならば PIPE できない
Option
DESC
引数の処理にGNU getoptsを使用しているので
LongFormat, ShortFormat がある
長いオプションは覚え易く便利
コマンドライン引数の後にオプションを指定したりしても OK
op[ ]+VAL
cp -Rup
tar
SYNTAX
tar [ op ] [ file... ]
tar [ op ] [ dir... ]
DESC
アーカイブ(複数ファイルをひとまとめにしたもの)の作成, 展開
TARファイルの圧縮, 解凍する
OP
c 新規にアーカイブを作成する
f アーカイブのファイル名を指定する
t アーカイブの中身を表示する
u 追加するファイルがアーカイブ内のファイルより新しい場合にだけ追加する
v 処理したファイルを一覧表示する
x アーカイブからファイルを取り出す
z gzipで圧縮、解凍をする
tar -cvzf menu.tar.gz menu/
beer.txt
wine.txt
sake.txt
tar -zxvf menu.tar.gz
tar -xzf menu.tar.gz
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' オプションが出てくるまで、
後続する全ての入力ファイルに適用されます
`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 が最小
gcc -o main -O0 main.cpp
gcc -o main -O2 main.cpp
gcc -o main -O0 main.cpp
-O3
-O2 に追加
[.] -finline-functions // 単純な関数を caller 側に埋め込む ( inline )
[.] -fweb //
[.] -frename-registers
gcc -O3 main.c -pg -o ./main
.main
gprof ./main
index % time self children called name
<spontaneous>
[1] 100.0 0.68 0.00 main [1]
-----------------------------------------------
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
int main () {
char *p = new char[128];
return 0;
}
gcc main.cpp
gcc main.cpp -lstdc++
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)
[.] コンパイル
[.] アセンブル
[.] リンク
gcc -E hello.c | sed '/^[ ]*$/d' | less
gcc -S hello.c
gcc -c hello.c
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 を間違えないこと
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
ftp cpz9.actnw.jp
> Name
> Name
ftp> status // 現在の状況説明.
ftp> pwd // pwd きりかえ
ftp> bye // session 終了.
ftp> ftphost
shell> ftp ftp.ring.gr.jp
cd dir
ls
mkdir tmp
binary
get foo.tgz
bye
cat scriptfile | ftp -n
open ftphost
user username password
passive
send d:/test.txt /test.txt
bye
ftp.exe -s:update.txt
ed
SYNTAX
ed [OP] [file]
DESC
LineEditor
IN
OUT
OP
s : silent
こう使います
ed file
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
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
ulimit -S -t 600
ulimit -S -t unlimited
ulimit -H -t 600
POINT
ulimit -S -c 0
ulimit -v 256
type
SYNTAX
type [OP...] cmd...
DESC
cmd の種類, dir を表示.
IN
OUT
OP
a : allocate
p : Print hash Val // 索引
t : Type
type 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 で測定しておく
time ./main.exe
real xxx
user xxx
system xxx
time sleep 2
real 0m2.251s # 実時間
user 0m0.030s
sys 0m0.061s
cat test.txt | /usr/bin/time main.exe
times
SYNTAX
times
DESC
Process 処理時間の usr , sys , の合計時間を計測
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
[<] [>] [-] が差分の違い.
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-準拠のシステムで変換する予定のテキストではないファイルを扱うとき, これは役に立つはず
`--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 から指定する。
cut -f 2 -d " " test.txt
echo " aaa bbb" | cut -d " " -f 1
echo " aaa bbb" | tr -s " " " " | cut -d " " -f 2
echo `echo $tmp | cut -f 2 -d "\n"`
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
echo "a b c d e" | cut -f 3- -d " "
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 "."
echo "c:/foo/bar/test.txt" | cut -f 6 -d "."
echo "c:/foo/bar/" | cut -f 6 -d "."
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 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
comm -13 A B
echo aaa | comm - B
colrm
SYNTAX
colrm [scol [ecol]]
DESC
Start - End Column を削除
IN STDIN
OUT
OP
colrm 1 3 < foo.c
cmp
SYNTAX
cmp [OP] file1 file2
DESC
file 内容を 1 byte ごとに比較
相違があるかどうかのみチェック
詳細は diff で
POINT
回帰テストとして利用できる
IN
OUT
OP
cmp a.txt b.txt
cmp -s a.txt b.txt
echo aaa | cmp a.txt -
cmp -n 2 a b
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
chown test foo.c
chown foobar foo.c
chmod 700 foo.c
chown otherusr foo.c
echo foo >> foo.c
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
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.
chmod a+r foo.txt
chmod a+x file
chmod g+w foo.c
chmod g-(e | w | x) foo.c
chmod -R 777 dirname
User Group Other
Read Write eXecute
4 2 1
chmod 020 filename
chmod 060 filename
まとめ
[.] Windows の usr account を変更したら反映するには mkpasswd -l
[.] Windows 上の usr account を変更して 作成した file は
Windows 上の User を確認
net user
\\hostname のユーザー アカウント
-------------------------------------------------------------------------------
Administrator ASPNET Guest
HelpAssistant sshd
ls -l
-rw-r--r-- 1 test なし 0 Jun 29 06:42 usr_test.txt
-rwxrwxrwx 1 test なし 0 Jun 29 06:42 usr_test.txt
echo foo >> usr_test.txt
bash: usr_test.txt: Permission denied
chmod 777 usr_test.txt
ls -l
-rwxrwxrwx 1 test なし 30 Jun 29 07:09 usr_XXX.txt
echo foo >> usr_test.txt
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
chmod 100 test.sh
bash: ./test.sh: Permission denied
df
SYNTAX
df
DESC
Filesystem 全体の空きスペースの取得
OP
df .
df c:/
df -k
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 発生時に出力しない
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
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
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
ln -s /pro/bar/foo.cpp /data/bar.cpp
ln -s /usr/bin ~/bin
ln src dst
lock
SYNTAX
lock [OP]
DESC
端末の Lock
IN
OUT
OP
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
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
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 の設定をする
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
Port 22
StrictModes no
UsePrivilegeSeparation yes
Subsystem sftp /usr/sbin/sftp-server
sshでパスワード認証を禁止するには
Server を起動する
cygrunsrv -S sshd
cygrunsrv -E sshd ; cygrunsrv -S sshd
cygrunsrv -Q sshd
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
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
$ cat id_rsa.pub >> authorized_keys
$ 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では
このファイルを使ってリモートホストからのアクセス制限できる
sshd:
ALL: ALL
sshd: localhost
Port 23
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 できる
ssh -l usr hostname
mkdir test
exit
rsh xx.xxx.xxx.xx
port 22 == SSH
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 1.2
安全ではないため 公開鍵 を Login に使う
POINT
password 認証なら, 以下の操作は不要
// PublicKey, PrivateKey のペアをつくる
// PublicKey を Server の user home におく
次の方法でやります
// Client で Key をつくり, scp で server に転送
// server でつくり, フロッピーなどで, Client に Private Key を送る
// 鍵をつくります
ssh_user_config
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
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
ping www.google.co.jp
ping yahoo.co.jp
ping 192.168.0.2
ping localhost
ping hostname
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
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
* 実際にやってみた( ただし画面の表記がおかしい )
以下の方法以外はうまくいかない
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
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
echo ls | tee outfile | grep "emacs"
bsi.sh tee /dust/log.txt
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 単位
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
./configure
make
su
make install
su Administrator
tail
SYNTAX
tail [OP] [file]
DESC
ファイルの指定された位置から末尾まで出力
OP
+num : file 先頭からの位置
-num : file 末尾からの位置
l : 行数
c : byte 数指定
b : block指定
r : reverse
tail -2 foo.txt
tail -2c foo.txt
tail -2b foo.txt
ls | tail -n 2
開始行を指定する
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
head -n 2 foo.htm
tail -c 1 foo.htm
後ろから指定するときは - をつける
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と同一でもよい
sort foo.txt
cat foo.txt | sort
sort +7 foo.txt
echo "bbb aaa ccc" | sort -t " "
echo "a c e d b" | sed "s/ /\n/g" | sort
echo $'aaa\ncccc\nbbb' | sort -r
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 出力.
passwd user001
mkpasswd
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
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進数
od -x main.o
od main.o
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
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 状態
netstat -a;
netstat -an
netstat -I
netstat -r
netstat -a
Active Connections
Proto Local Address Foreign Address State
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
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
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
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 計算言語
* こいつでないと 少数の計算できない
echo 1 + 1 | bc
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
bash --login -c /work/foo.sh
bash -c "echo aaa"
bash
bash --login
bash --login -c "echo aaa"
bash --login -xc "echo $PATH"
a=b
echo $a
bash
echo $a
test.sh
source test.sh
. test.sh
export
DESC
別shプロセスへの環境のわたす
sourceコマンドはイメージ的には子スクリプトの環境定義を親プロセスに渡すものであった
(実際は子スクリプトのプロセスは作成されず子スクリプトが実行するコマンドを親スクリプトが実行する).
親スクリプトの環境を
子プロセスに変数の定義をわたすには export をつかう
time
SYNTAX
time cmd
DESC
cmd の実行時間を計測
IN
OUT
OP
cmd find .
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
uname -a
uname -m
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:
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
find / -iname "*.exe" &
?-+-bash-+-Opera
| |-meadow
| `-pstree
|-bash
|-cygrunsrv---cron
`-inetd---inetd
factor
SYNTAX
factor [num]
DESC
* 素因数分解をする ( 使い道ある ? )
IN :
arg がないときは STDIN から
OUT:
OP
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
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
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@ の部分が 環境 にあったものに置換される
autoscan
ls
configure.scan
AC_OUTPUT( [makfile] )
mv configure.scan configure.in
autoconf
ls
configure
./configure
...
config.status: creating makefile
config.status: error: cannot find input file: config.h.in
CC:=@CC@
CC=gcc
AC_OUTPUT 生成時に 参照可能な値
CFLAGS
CPPFLAGS
prefix
bindir
./configure
./configure --enable-hoge
./configure --prefix=/foo/bar
config.h の自動生成
DESC
環境に応じた build をするために
makefile の動的な設定だけではなく header も自動生成する
AC_CONFIG_HEADERS([config.h])
configure
...
config.status: creating config.h
configure.in が autoconf によって m4 のマクロが展開されて configure になる
configure.in に必要な処理をかけば configure に反映される
出力変数
共通のながれ
あり -> 置換される
なし comment out される
/* #undef XXX */
@変数@ を出力変数という
autoconf で組み込みで用意されているもの意外に 自前で定義できる
AC_SUBST(出力変数)
AC_SUBST_FILE(出力変数)
プリプロセッサをえる
AC_DEFINE( SYMBOL, VALUE, DESC )
AC_DEFINE( XX2, 10 )
Program.をチェックする
AC_CHECK_PROG( VAR, COMMAND, VALUE-IF-FOUND, VALUE-IF-NOTFOUND, REJECT )
AC_CHECK_PROG( TAKO, grep, 777, 0 )
AC_PATH_PROG( VAR, COMMAND, VALUE-IF-FOUND, PATH )
AC_CHECK_FILE( VAR, COMMAND, VALUE-IF-FOUND, VALUE-IF-NOTFOUND )
C Compiler の特性検出
AC_CHECK_SIZEOF( TYPE, CROSS-SIZE )
AC_C_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 */
AC_REPLACE_FUNCS( 関数名リスト )
見つからない場合
出力変数 LIBOBJS に FUNC.o が追記される
makefile.in は次のようにする
LIBOBJS=@LIBOBJS@
AC_FUNC_ALLOCA
ライブラリを検出
AC_CHECK_LIB( LIB, FUNC, ACTION-IF-FOUND, ACTION-IF-NOTFOUND, 依存ライブラリ )
AC_HAVE_LIBRARY( LIB, ACTION-IF-FOUND, ACTION-IF-NOTFOUND, 依存ライブラリ )
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>
yes
],AC_DEFINE( 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)
AC_ARG_WITH( foo-include, [ 自分で調べろ! ], [ FOOINC="$withval"] )
echo @FOOINC@
configure
SYNTAX
./configure
DESC
環境から makefile, などを自動で設定する bash script
実行すると "checking..." などと表示される
// install 場所を指定する ( DEFAULT: /usr/local )
./configure --prefix XXX
./configure
make
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 から自動でよばれる
echo __GCC__ __GCC_MINOR__ | cpp
echo FOO | cpp
echo "#include \"config.h\" NAME_SIZE" | cpp -I /pro/include
cygcheck
SYNTAX
DESC
* Cygwin プログラムの診断をするユーティリティ
cygcheck.exe -f /usr/bin/less
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
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
strings -n 2 foo.exe
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 も調べることができる
nm -A main.obj
nm -g main.obj
nm /lib/libc.a
nm d:/cygwin/usr/local/lib/libcunit.a
nm Microsoft Platform SDK/Lib/opengl32.lib
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
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 から削除
loop.sh &
[1] 2460
kill -HUP %1
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
uuencode foo.gif test > encodefile
iconv
SYNTAX
iconv [OP] -f xxx -t xxx [file...]
DESC
文字コードを変換する
IN : STDIN
OUT: STDOUT
iconv -f SJIS -t UTF-8
curl "" iconv -f EUC-JP
curl "" iconv -f EUC
自動判定はできないらしい
WARNING
たまに ERROR になる ( そのときの 対処方法 )
ひっかかる 原因になりそうな 文字を 早期に grep で Filter してやる
unzip
SYNTAX
unzip [OP] file...
DESC
file を解凍
IN :
OUT:
OP
q : Quiet
o : Overwrite without Prompt
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 )
--- test/foo
+++ test/bar
cd d:/foo
patch -p0 < foo2bar.diff
curl
SYNTAX
curl [OP...] [URL...]
DESC
HTTP, FTP での Data をダウンロード,アップロードをする
(HTTP, HTTPS,
FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE)
curl の設定ファイル
url = "google.co.jp"
output = "d:/google.htm"
user-agent = "superagent/1.0"
url = "google.co.jp"
referer = "
http://google.co.jp/"
POINT
IN :
OUT:
OP
basename(filename)
SYNTAX
basename path [EXTENSION]
DESC
パスからディレクトリと拡張子を削除してファイル名をかえす
パスから先頭のディレクトリ部分を削除して返す
basename /usr/bin/sort
basename d:/foo.txt
拡張子を指定すると、拡張子部分を削除して返す。
basename d:/foo.lst .lst
WARNING
basename d:/foo.lst
dirname
SYNTAX
dirname path
DESC
path から Directory 名をかえす
IN
arg
OUT
STDOUT
dirname c:/foo/bar
dirname c:/foo/bar/
dirname c:\foo\bar
dirname "c:\foo\bar"
dirname foo.exe
expr
SYNTAX
DESC
"整数"計算をする
expr の後に渡す文字列を expr が計算式として解釈すると考える
IN :
OUT:
OP
expr 1 + 5
expr 1+5
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
dump foo.txt
cygstart
SYNTAX
cygstart
DESC
Windows のようにファイル,URL を関連付けたアプリケーションで起動するコマンドラインツール
Windows の start コマンドと似ている
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 を生成
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
free -m
total used free shared buffers cached
Mem: 502 431 71 0 0 0
-/+ buffers/cache: 431 71
Swap: 756 31 724
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
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 取得( これ便利 )
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 と同じ方法のリストを返す
%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'
complete -d cd
complete -g group
complete -u finger
complete -W 'host1 host2 gate1' rsh
complete -X '!*.tex' jlatex
complete -p
complete -F mycomp.sh notepad
COMP_LINE : CommandLine 全体
COMP_POINT : Cursor 位置
COMP_WORDS : CommandLine の単語配列
COMP_CWORD : 補完中の語の番号
COMPREPLY : 結果をセットする変数
complete -o nospace -F _gcc gcc
function _gcc() {
prev=${COMP_WORDS[COMP_CWORD-1]}
cur=${COMP_WORDS[COMP_CWORD]}
case $cur in
-I*) d='echo $cur | sed 's/^-I//''
COMPREPLY=( 'compgen -S / -d -- $d | sed -e 's/^/-I/'' );;
*) 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
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
fc -l 1 10
!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
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
指定した文字列が[ 演算式 ]として評価される
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()
{
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;
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"
local a;
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 )を解析する
while getopts a:bc var
do
case $var in
a)
echo "option set a"
echo "a =" $OPTARG
;; # break
b)
echo "option set b"
;;
esac
done
foo.sh -a 10 -b -c
foo.sh -a arg1 arg2
foo.sh arg1 arg2 -a
shift `expr $OPTIND - 1`
echo $1 $2
exit
SYNTAX
exit [expr]
DESC
[ 現在の shell ] を終了させる
expr 省略時 : 終了status を shell 変数 status の値とする
POINT
.sh を実行するときは subshell が起動して終了する
IN
OUT
OP
exec
SYNTAX
exec cmd
DESC
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
find -name "*.rm" | xargs mv -t ../foo
POINT
cmd arg には総 Byte がある.
STDIN から読み込まない cmd に わたしたいときに使うと便利 !
IN STDIN
OUT
OP
0:
arg が NULL文字(\0)区切りであることを前提に処理
find . -name \*~ -print0 | xargs -0 rm // ( Program Files とかあるときに便利 )
find -type f | xargs rm -i;
find -iname "*test*" | xargs cygpath -a;
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
ps -a
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
id -G
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
rsync -r ~/test/sh/rsync/src ~/test/sh/rsync/dst
rsync -r ~/test/sh/rsync/src ~/test/sh/rsync/dst/
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
CVS
root
UNIX系OSの 管理者アカウント のこと
Windows NT系OS では Administrator アカウントがrootに相当
アクセス権の設定にかかわらず
すべてのファイルに無制限にアクセスすることが可能
日常的にUNIXを利用するには権限が強すぎて危険なため
ふつうは管理を行なうためにしか用いられない
また
パスワードの変更の機能はrootアカウントを利用する必要があるけど
予めrootアカウントから設定をすることで
1般ユーザも設定にしたがってrootアカウントの権限を利用できる
rootアカウントのパスワードが漏洩したとき
パスワードを入手したユーザは無制限にアクセスが可能になる
ipconfig
SYNTAX
ipconfig
DESC
IPAddress など Network 関連の情報を出力する.
-> 認証のとき必要になるので, 覚えておくと便利.
自分の PC 名を知るにも利用できる.
* win32 の command
192.168.2.253
210.150.255.66
POINT
HOST [ hostname ] に , HTTP request を 送れ ということ
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 しかしらない
nslookup
Default Server: warpstar-a5dc25
Address: 192.168.0.1
* Domain 上に xxx というページはない という言い方がある
wget
SYNTAX
wget [OP] URL
DESC
ウェブサーバや FTPサーバからファイルを取得する。
Page を直接 Browse しなくても取得可能
IN :
OUT:
OP
t( Trial ) :
POINT
ConfigFile に設定しておくこと
/etc/wgetrc
ログの制御
ダウンロードするファイルの制御
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 経由のファイル取得 ]をするツール
http://www.tax.metro.tokyo.jp/kobai/20090602.pdf
Webサイトをゆっくり見たいときは
リンク先を階層で指定して一気に取れる
オフラインでじっくり読んだり
Mirror サイトを簡単にできる
DL が中断したら
途中からやり直す Resume 機能があり便利
Forbiden といわれるときは
while[] ; do
wget
で対応しよう !
done
--load-cookies=cookies.txt
wget --header 'Cookie: foo=bar' http://webos-goodies.jp/index.html
OP
a(AcceptList)
指定 拡張子の file のみ取得.
k
HTMLに含まれる絶対パスを相対パスにする
Local で見るときに便利
t
wget -t 1 http://www.google.co.jp
---------------------------------------
■ 再帰ダウンロードの制御
---------------------------------------
r
Recursive に FILE をとる
指定した Directory 以下を再帰的に取得する
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 の指定
A".zip"
A"*w*.zip"
R (Reject)
---------------------------------------
DL. 保存の制御
---------------------------------------
nH
ホスト名の Directory を作らない( www.yahoo.co.jp )
( 子供 Directory は作成される )
nd
Local に Directory をつくらない
( 直下に DL したいときに便利 )
wget http://nchc.dl.sourceforge.net/sourceforge/python-mode/python-mode-1.0.tar.gz
WARNING
/etc/wgetrc http_proxy を設定すること
sleep
SYNTAX
sleep time[smhd]
DESC
cmd 実行の一時中断
IN
OUT
OP
(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
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
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
ls -R oya
/dust/oya:
foo.txt
ko
/dust/oya/ko:
foo.txt
du -h oya
1.0K oya/ko
2.0K oya
du -ch oya
1.0K oya/ko
2.0K oya
2.0K total
du -sh oya
2.0K oya
c ドライブの直下のディレクトリをしらべる
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
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; [ - ] は標準入力がはいる
rm -r /foo/bar/*
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
tr -d '\015' < test.txt
echo -e "aaa\n\rbbb" | tr -d "\r"
tr -s A-Za-z a < test.txt // すべての英文字以外を変換
echo "aaa bbbbb" | tr -s " "
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"
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 -p -e 's/\n/\r\n/' < /dust/LF.txt > /dust/CRLF.txt
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
sed '2,4 d' main.cpp
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
変換式は次のように各行に式をかく
1,2 d
s/a/A/g
s/b/B/g
s/c/C/g
DefaultMetaChara
DESC
まとめるとこれ
S_RESED
E_RESED
[] : Group
. : 任意の 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 へ出力
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 が使える。
名前は完全に一致する必要がある
find . -name ".txt"
find . -name "a.txt"
-name 指定ではシェルの wildcard が使えるので部分的に指定する場合は使う
find -name "*.txt"
find -iname "*.txt"
find -iname "main.???"
find -iname "main.[do]"
検索するディレクトリの深さを指定する ( -maxdepth INT )
find . -maxdepth 1 -name "*.txt"
条件を not(反転) させる
find -not -name "*.txt"
find -name "*.txt" -not -size +10K
ファイルタイプで検索する
find -type d
find -type f
find -type l
WARNING
Path に "完全" に Match する必要がある
"部分" ではだめ
grep と間違えないように
regex str
regex ".*\.txt"
cur dir からの相対パスで match する必要あり
と思ったが, 検索開始 パスからの相対になる
[.] と表記すると Current になるだけ
仮説:
match の比較対象の PATH は FULL PATH
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 // 空ファイルを取得.
find . -maxdepth 1 -type f
find . -name "*.foo" -type d
find . -name '*.zip' -exec rm {} \;
find /pro/ -iname "*.cpp"
find . -regex ".*\.\(bmp\|jpg\)"
find -newer FILE
Numeric arguments can be specified as
+n for greater than n,
-n for less than n,
n for exactly n.
時間で検索する
30分以内に更新のあったファイル検索する
find -mmin -30
find -mtime -7
find -mtime 0
find -mtime 1
find -atime -7
ファイルサイズで検索する
find -size N[cwbkMG]
find -size -1024c
find -size -1M
find -size +100M
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
mount
mount -c /
cd "/c/Program Files"
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 ?
プリセットのディレクトリのパスを返す
cygpath -O
cygpath -H
cygpath -D
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
cat record.csv | sort | uniq | wc -l
wc -w log.txt
WARNING
Line は [\n] の数で判定している
aaa\n
bbb\n
ccc
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 に出力
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/
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
// BAD
cp -R f:/work/data d:/work/data/
// OK
cp -R f:/work/data d:/work/
WARNING
cp src.cpp ./tekito/dst.cpp
cp -Rvfup dst src
date . timestamp
SYNTAX
date [OP] [+format]
DESC
時刻の表示
OP
FORMAT
+STRING : 出力format 指定
WARNING
+ は必須( ""はmeta chara 抑制の為 )?
date "+%Y_%m_%d"
date "+%Y%m%d"
date "+%F"
date "+%M" // RET: minute
date "+%H%M"
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
ar -rv libtest.a test.o sub.o
a - test.o
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
test ;
test nandemoii;
WARNING
BAD
[ $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
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'
BAD
echo "aaa\"bbb"
OK
echo "aaa\\"bbb"
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
ls -A
ls -s test.bmp
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"