# スペース区切りに展開するには @ 演算子 をつかう
a=(1 2 3 4)
i=0
for i in ${a[@]};do
echo $i
done
a[0]=1; a[1]=2;
a=a(a b c d)
# command 結果を 配列にセット
a=(`ls`)
a=(a b c d); echo ${#(a b c d)}
# すべてをかえす
${a[@]};
WARNING
space 区切りの文字を loop できない
SYNTAX
history [OP] [n]
DESC
Command 履歴出力
OP
n : 出力する行数
POINT
!! : 直前
!n : n 番目
!-n : n 番目前
!str: str で始まる最新
!?str?: str を含む cmdline
# 過去 6 番目まで
history 6
# "file" を history file として扱う
# Default は $HISTFILE が使用される
history file
# /home/usr/.bash_history
echo $HISTFILE
# history の entry に追加( Store )
history -s "echo foo"
history 2
echo foo
history
$HISTFILE( ~/.bash_history ) に記録されている
___
■ 正規表現(Regexp)
DESC
data の検索、指定の表現方法を拡張化する
pipe することで作業が効率化できる
日本語環境の対応
mult byte tool の用意
Local の適切な設定
正規表現を利用できる場面
文字を指定する箇所
0. shell のファイル名置換
0. unix tool での 引数指定 ( sed, grep, find, ls ... )
editor で置換, 検索
2. log の解析
3. CGI, web appli の文字列チェック( JAVA, PHP, .NET, JAVASCRIPT )
Windows wildcard
# foo bar goo
ls
echo * # echo foo bar goo と展開される.
# RET: foo bar goo
WARNING
regexp とは異なる
[ . ] : 任意の一文字ではない
POINT
wildcard の置換結果は echo ですれば OK
___
■ 改行(newline)
SYNTAX
$'\n'
DESC
改行するには $'\n'
POINT
// RET
// aaa
// bbb
echo $'aaa\nbbb'
___
■ 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 から再開
INOUTOP
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
INOUTOP
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'
# 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.
SYNTAX
groups [OP] [usr...]
DESC
usr の所属する group を出力
usr は 複数のグループに所属できます
( クラブ活動と考えるとわかりやすいでしょう )
id -G
INOUTOP
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 が終わったら解除すること
SYNTAX
finger [OP] name
DESC
login 中の user, name, tty, time, dir, shell を表示.
INOUTOP
l : longlist
s : simple
f : no header
m : only user
___
■ fold
SYNTAX
fold [OP] file...
DESC
file を指定行でおりかえす
space で token できるよ
INOUT 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コマンドをスクリプトファイルにまとめておくこと。
インタラクティブなコマンドを利用するなら
あらかじめプロンプトを無効にします
INOUTOP
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
INOUTOP
s : silent
こう使います
ed file
# n 行目表示
1p
# 追加
$a
comment
. // 終了
w // file 書き出し.
1d // i 行目を削除.
c-d // 終了
___
EX >■ EX
SYNTAX
[OP] file...
DESCINOUTOP
file
:1 // 1 行目に移動
:4d a // buf a に格納
:put a //
:wq // かきだし
SYNTAX
ulimit [OP...] [limit]
DESC
各 Process が利用する資源 ( Memory, CPU 時間, File サイズ )に制限をかける
設定する値には 2 種類
HardLimit : 本当の上限値 ( su 以外は変更できない )
SoftLimit : User の指定する上限値
INOUTOP
v : VMem
s : stack
n : nrFile ID
c : Corefile サイズ
d : sz DataSegment
p : sz Pipe
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 なら 行単位で比較する
INOUTOP
i : insensitive
w : ignore WhiteSpace
l : long fmt
s : 相違がない場合も報告
B : 空行のみの違いを無視 ignore Blank lines
y : side-by-side 形式 ( 横にならべて比較 )
c : Context 形式
r : Recursive
POINT
emacs dired = でもできる
[+] : 増えた
[-] : 減った
[!] : かわった
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 をつけるよ
INOUTOP
suspend
___
■ set
SYNTAX
set [OP] [arg...]
DESCINOUTOP
HISTSIZE=100 // shellscript と同様の SYNTAX
SHELLVAR
PPID : prt ps id // windows は 1
OSTYPE : OS TYPE
HOSTNAME
GROUPS : 現 user が属する Group list
OLDPWD : 前の PWD
RANDOM : RANDOM な値 自由につかってね
SHELLOPTS : 現在の SHELLOPTS
___
■ cut
SYNTAX
cut [OP...] [file...]
DESC
file から field 削除
awk でも代用できる
OP
c(Character)
f(Field)
s(Skip) : dlm を含まない行を出力しない
IN : STDIN
OUT: STDOUT
区切り文字の指定は 1 文字だけ
Field の番号は 1 から指定する。
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
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 の表記はあてにならない
( 拡張子によって 表記がかわる )
INOUTOP
# 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
SYNTAX
lpstat [OP]
DESC
printer 状態の出力
INOUTOP
t : all
o : Output req info
# RET: printer epson111 is idle
lpstat -t
___
■ mail
SYNTAX
mail [OP...] [usr...]
DESC
指定 usr に mail 発信
INOUTOP
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
SYNTAXDESCINOUTOP
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
INOUTOP
s : SymbolicLink
# 動作チェック
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!
# 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 の説明
INOUTOP
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
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
リモートマシン間でのファイルをコピーする
INOUTOP
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
INOUTOP
ec : 接続をきる chara 指定
l user : 他の user 名で login
8 : 8 bit code を透過させる
7 : pality bit を除去
E :
d : Socket debug ON
x : session を DES 暗号化
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 も送信できる
INOUTOP
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 ]なのか
INOUTOP
# 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 起動
INOUTOP
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 を取得
INOUTOP
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 単位
SYNTAX
head [OP...] [file...]
DESC
Print the first 10 lines of each FILE to STDOUT
INOUTOP
+num : file 先頭からの位置
-num : file 末尾からの位置
n : NrLine
c : byte 数指定
b : block指定
r : reverse
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
OUTOP
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
OUTOP
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 を同じ行で連結
INOUTOP
s : 連続行を連結
d char: CRLF を指定文字に置換
___
■ pg
SYNTAX
pg [OP] [file...]
DESC
指定 file | STDIN を画面ごとに出力
page をめくるのを想像しよう
q : quit
IN file D:STDIN
OUTOP
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
OUTOP
o : 2byte ごとに 8 進数
s : 2byte ごとに signed 10進数
x : 2byte ごとに 16進数
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 状態
# 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 みたいなものとして考えよう
INOUTOP
olist : 指定 list のみ出力
nNUM : 指定 page
sNUM :
ran : register a に n を設定する.
i :
q :
___
■ make
SYNTAX
make [OP] [file...]
DESCINOUTOP
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章 : 管理者向けコマンド
INOUTOP
- : 出力を 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
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 してない
INOUTOP
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
OUTOP
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 実行
INOUTOP
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
OUTOP
prm : cmd で利用する 変数初期値 var = val;
f file : 指定 file を処理
Fc : 文字 c を dlm 扱い
v var=val: 変数設定
SYNTAX
write user [tty]
DESC
STDIN の msg を user Terminal へ出力
tty : 特定の Terminal 指定
INOUTOP
# remote machine に msg 送信
write usrname@remote
___
■ batch
SYNTAX
batch [OP]
DESC
system に余裕があるときのお仕事を指定してね.
ないかも
INOUTOP
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
INOUTOP
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
SYNTAX
uname [OP]
DESC
現在使用中の system 名を出力
print system information
INOUTOP
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
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 をみながら
手作業で変更していた
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
# 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/"
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
SYNTAX
select name [in list] do cmd done
DESC
menu list から値を選択して, その値により それぞれの処理をする.
select は CUI でもできるのか ---
break , return でぬける
INOUTOP
select i in man woman; do
echo your select $i
break;
done
___
■ uptime
SYNTAX
uptime [OP]
DESC
system 稼働時間. 起動時刻. user 数. loadAverage の出力
INOUTOP
___
■ users
SYNTAX
users [file...]
DESC
system 上にいる user の login 名を出力する
shell の上にいる人を想像しよう
INOUTOP
___
■ w
SYNTAX
w [OP] [user]
DESC
login している user , 実行cmd を system 状況を出力.
login 名, 端末名, loginTime, 現在の process CPU 時間.
INOUTOP
h : no header
l : detail
s : simple
f : from : login した host 経路を出力する.
u : uptime cmd と同様の出力.
___
■ wall
SYNTAX
wall [file]
DESC
全 user に対して, STDIN からの message を送信.
file : messsage 内容
INOUTOP
g : group 指定.
wall message
___
■ whatis
SYNTAX
whatis cmd...
DESC
cmd の簡易説明の出力. == man -f
DB が必要. catman cmd が必要.
INOUTOP
whatis gcc
___
■ whereis
SYNTAX
whereis [OP] [file...]
DESC
file( cmd )の source, obj, manual の場所を出力. ( )
INOUTOP
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 指定で 変数の属性の変更
INOUTOP
o : 変数の設定.
set # すべての shellVar を表示.
___
■ shift
SYNTAX
shift [n]
DESC
paramter 位置の shift
INOUTOP
while [ $# -gt 0 ]; do
echo $@
shift
done
foo.sh a b c d e f
SYNTAX
help [OP] [ptns]
DESC
組み込み cmd の help
INOUTOP
s : simple ( 簡易情報 )
help cd;
help -s cd;
___
■ jobs
SYNTAX
jobs [OP] [%job]
DESC
現在の job 状態を出力する.
job とは OS という Process のお仕事かい ?
INOUTOP
l : list all process ID
p : gourp leader process
r : runing : 実行中.
s : stop : 停止中
SYNTAX
local [OP] [name=[val]]
DESC
宣言した shell でのみ有効な 変数を作成
関数内のみでしか利用できない
INOUTOP
p : print
a : array
f : 関数名のみ使用する.
i : 変数を整数とみなす.
r : readonly ( 変数の設定はできない. )
function foo()
{
# foo は local
local foo=bar;
echo $foo;
}
SYNTAX
pwd [OP]
DESCINOUTOP
// 今のところわからない
L : symbolick link を含む形.
P : symbolick link を含まない形.
___
■ read
SYNTAX
read [OP] [name]
DESC
STDIN から 順番に 変数に代入
Game に使える
name == 0 ならば, shellVar: REPLY に代入
INOUTOP
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
INOUTOP
p : 読み込み専用.
a : 配列変数に限定( 配列しかいれちゃだめ )
f : 関数を読み込み専用にする.
___
■ return
SYNTAX
return (n)
DESC
指定した戻り値 n で関数を終了させる.
n == 0 -> 直前に実行した関数の戻り値.
関数呼び出しわかった
BAD
func();
OK
func;
結果は $? にはいるようだ
INOUTOP
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 にセット
INOUTOP
n: n番目の stack を削除.
___
■ nohup
SYNTAX
nohup [cmd]
DESC
hungup signal を無視して cmd 実行
INOUTOP
./foo.sh # 無限 loop
kill -HUP %1 # hangup signal を送信.
nohup ./foo.sh # hangup signal から切り離す
jobs
kill HUP %1 # hangup signal が無視される
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
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
SYNTAX
kill [OP] pids
kill [OP] %jobs
DESC
指定 Process を強制終了する
INOUTOP
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 識別番号の出力
INOUTOP
___
■ hostname
SYNTAX
hostname [OP]
DESC
host名( machine )を出力
自分のマシンにある HTTP server にアクセスする時に 調べる
winddows にもある ( OP なし )
POINT
遠隔操作をしているときに 利用している PC がわかる
厳密には Computer 名 と (TCP/IP の Host ) は違うが同じのが返る ?
ipconfig でも調べられる
Network Program では hostname のかえす 結果をいれると動く
-> ので winsock::connect で指定しているということか ?
INOUTOP
// これは machine名
yahoo.co.jp
___
■ id
SYNTAX
id [OP] [usr]
DESC
user 情報を出力
Print information for USERNAME, or the current user.
usr名, usrID, usrGrp, idGrp を表示
だれが起動した Process かを判別します
INOUTOP
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
SYNTAX
hash [OP] [cmd...]
DESC
Command 検索 path を hash Table に登録することで検索速度をあげる
OP
d: d
r: remove tbl
t cmd:
# 現在の内容を確認
hash
# Table を空にするには
hash -r
___
■ df
SYNTAX
df [OP] [filesys] [files]
DESC
Disk の空き容量を出力
OP
a: all : 0block size 含む
B: Block : 指定Blockサイズ -B 1024
l: local : local file system
# [:]必須
df C:
___
■ du.DiskUsage
SYNTAX
du [opt...] [file...]
DESC
ディスクの使用容量をしらべる
estimate file space usage for each file
OP
c : total
b : byte
a : all file
h : human readable
s : Summarize( 要約 )
# 次のような Directory
ls -R oya
/dust/oya:
foo.txt
ko
/dust/oya/ko:
foo.txt
# oya 以下の Sub Directory ごとにサイズを出力
du -h oya
1.0K oya/ko
2.0K oya
# 合計も出力
du -ch oya
1.0K oya/ko
2.0K oya
2.0K total
# oya の合計のみ表示
# ( SubDirectory を表示しない )
du -sh oya
2.0K oya
c ドライブの直下のディレクトリをしらべる
# 子供 Directory のみ表示
du -h --max-depth=1 c:/
___
■ od
SYNTAX
od [opt] file...
DESC
Object Dump
OP
c : 1byte ごとに Ascii 表示
o : 1byte ごとに 8 進数で表示
x : 1byte ごとに 16 進数で表示
POINT
文字 code の検索に利用
SYNTAX
strip [OP] objFile
DESC
discard symbol from objFiles
Symbol Table を obj から削除する
___
■ m4
SYNTAX
m4 [OP]... [file]...
DESC
macro processor
OP
___
■ ps
SYNTAX
ps [OP] [-u usrname] [-p pid]
DESC
cur process 表示
* UID
userName
* PPID
ParentPID
* PID
ProcessID
* SITME
StartTime
OP
W: windows ps
f: full
a: all users
u: list processes owned by UID
p: procss
___
■ mkdir
SYNTAX
mkdir [OP ...] dir
DESC
Make Directory
OP
p : no error if existing, make parent directories as needed
m : mode 指定. // mkdir -m 777 foo
p ( Parent )オプションで必要ならば親ディレクトリを生成する
mkdir -p ./a/b/c
またディレクトリが既にあってもエラーにならないので -p を設定しておくと便利
mkdir test
# エラーにならない
mkdir -p test
___
■ cat
SYNTAX
cat [OP...] [file...]
IN file... | - | STDIN
OUT STDOUT
DESC
ファイルを結合して STDOUT へ出力
OP
n : 行数つきで出力
v : 制御文字つきで出力
e: endline
t: tab
s : 空行を 1 行に
e : 行末[$] が表記
POINT
SPACE を可視にする時に使う
POINT
STDIN からの情報を file に書き込む.
cat > file
foo
bar
c-d # 終了
STDIN からの情報を file に追記する
cat >> file
c-d
# 改行の変換はできない
sed 's/\n/\r\n/' < TEST_LF.TXT > TEST_CRLF.TXT
# Perl ならできる
perl -p -e 's/\n/\r\n/' < /dust/LF.txt > /dust/CRLF.txt
# tr みたいな使い方もできる
# 1 < -> 1 対応しないとだめ
echo ABCAAA | sed "y/ABC/ebc/"
BAD
echo ABCAAA | sed "y/ABCD/ebc/"
sed -n '10,/STRING/p' /dust/foo.txt
{
}
sed s/foo/bar/ foo.cpp
ls | sed s/foo/bar/ # STDIN から入力する.
echo $変数名 | sed -e 条件 # 変数を置換するのはこれなのか ?
./test.sed foo.txt
# 2-4 行目を削除
sed '2,4 d' main.cpp
# Error とある行に,「### Check Line ###」という新しい行を追加する
#
#
echo "ERROR: xxx" | sed -e "/ERROR/i #### Check Line ###"
sed -e '1,2 d' -e 's/foo/bar/g' foo.cpp
// 数値のみを抽出
sed "s/.*\([\.[:digit:]]\+\).*/\1"
echo " aaa" | sed "s/[[:space:]]\+//g"
-f FILE で変換式を外部ファイルから指定できる。
sed -f script test.txt
# 複数指定する。
echo "aaa" | sed -f script1 -f script2
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'
SYNTAX
wc [option]... [file]...
DESC
Word Count
file の行数, 単語数, バイト数を表示
IN
file( STDIN )
OUT
STDOUT
OP
l : Line 数
w : Word 数
c : encode に依存する
L : Longest line
SYNTAX
date [OP] [+format]
DESC
時刻の表示
OP
FORMAT
+STRING : 出力format 指定
WARNING
+ は必須( ""はmeta chara 抑制の為 )?
# RET: 2007_08_18
date "+%Y_%m_%d"
# RET: 20070818
date "+%Y%m%d"
# RET: 2007-09-17
date "+%F"
date "+%M" // RET: minute
# RET: 2124
date "+%H%M"
# RET: 21:25
date "+%R"
___
■ nkf
SYNTAX
cat foo | nkf -s
DESC
network kanji変換 filter
入力漢字 code を自動認識, 指定した出力漢字 code を出力
[in/out] 対応文字列
. jis-code : ISO-2022-jp( 7bit jis )
. sjis : MS 漢字 code
. 日本語EUC: AT-T code
OP
s: shift jis
e: euc
j: jis
___
■ ar
SYNTAX
ar [OP] archive [member ...]
DESC
archive 作成
OP
r: replace
v: verbose
# test.o , sub.o を Archive する
#
ar -rv libtest.a test.o sub.o
# a : Append
a - test.o
# r : Replace
r - sub.o
___
■ ranlib
SYNTAX
ranlib [-vVt] archive
DESC
archive Index を更新する
POINT
GNU ar は自動で Index も更新するため不要
___
■ test
SYNTAX
test EXPRESSION
[ EXPRESSION ]
DESC
ファイルタイプのチェック
値の比較
RETVAL
0: true : test 結果が真
1: false : test 結果が偽
POINT
# RET: false ( == 1 )
test ;
# RET: true ( == 0 )
test nandemoii;
WARNINGBAD
# 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
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 "なし" といわれる ?
FHS
bin : 基本cmd
boot : boot に必要なファイル
dev : デバイスファイル( SpecialFile )
etc : 設定ファイル : 各host 固有のdata
home : usr home dir : 各ユーザのhome dir の場所
lib : 共有library : DLL に相当 ( libc.a とか )
mnt : 一時的なmnt
opt : 追加 appli
proc : process info
root : root 用 home dir : super user 用 home dir
sbin : system 管理 cmd : system recovery 用 cmd
tmp : tmp file : reboot 時に消去される
usr : 各種 Program
----- local : site local( 個人用 )
var : 変更されるdata
# user が独自で install した Program は /
# usr/local/inlude
# usr/local/lib
#
cd /CUnit-2.1-0
make install
/usr/local
|
+-- /doc/CUnit/ ... HTML ドキュメント群
|
+-- /include/CUnit/ ... インクルードファイル群
|
+-- /lib/ ... ライブラリファイル群
|
+-- /man/man3/ ... MAN ドキュメント
|
+-- /share/CUnit/ ... XML 関係のファイル群