Extra
Locale
DESC
言語, 単位など国ごとに異なる単位の総称
Program からすると, ENV として参照して, 出力などをきりかえる
-> 年月なども Format が決まっている.
その他
DESC
cygwin CommandLine から .bat 起動可能
network
他の user と mesg を交換する( realtime に交換 )
write user001
mesg ...
c-d
// write cmd の受信を拒否する
mesg n;
Network 管理と internet ( Network 同士をつなぐことを Inter Network -> Internet )
Internet の通信規約では TCP/IP が利用される.
Internet を利用する App としては WWW が代表. ( RemoteFile 転送, Remote 端末もそう )
host 情報の表示. ( DomainNameServer から情報をとるよ )
host www.yahoo.co.jp // Name から情報を取得.
host www.yahoo.co.jp Has Address 210.249.71.235
Network. Interface の表示. 設定
LocalMachine が TCP/IP network につながらないときにつかってね.
次のものを表示
Network Interface
起動 | 停止
IPAddress | netmask
ipconfig /a // すべての Interface 表示.
ipconfig eth0 inet 192.199.199.10 netmask 255.255.255.0 // IPAddress , Netmask を表示.
UNIX.とは
Boot
DESC
起動順
ON -> BIOS -> MBR( HD ) -> boot loader -> kernel
kernel -> init dev -> init 起動 -> boot 処理 -> rc script
init dev
device driver が設定する
serial port : 通信速度
monitor : モニタの表示モード
init Program 起動
unix で最初に起動されるプロセス, PID = 1
init -> 各process, ie proces root
各daemon 起動
キャッシュマネージャ
swap 制御
hard disk 処理
init の処理内容
conf file : /etc/inittab の記述通りに動作
/etc/inittabの内容
id:rullevel:action:process
id : 識別子
runlevel : 実行level
action : どのタイミングでprocessが実行されるか
process : 起動するprocess
flow
1. boot process script 実行
2. run level に応じた process の実行
3. 端末制御
boot process
ネットワークの初期化 ...
起動後の initの仕事
親process をなくした process の処理
端末制御
標準入出力の切り替え
設計思想
DESC
UNIX のシステムコール( Windows API を利用して )再現する cygwin.dll
cygwin 環境では, シェルとしてbash, コンパイラとしてGCC
マシンの処理能力の低く、大きなProgram が実行できなかった
-> 結果的には成功だった
ソフトウェアツールの開発理念
1. ひとつのことをしっかりやる
-> ある目的に特化した小さなツールをたくさんつくる
2. バイナリデータではなく文字列を扱う
-> 文字列からなるデータはどんなプログラムからも処理が容易
3. 正規表現を使う
-> スクリプトの作成を大幅に削減できる
4. 特に指定がなければ、標準入力と標準出力を使用する
-> 標準入力からデータを受け取り、標準出力へデータを出力するべき
-> エラーメッセージは標準エラー出力に出力するべき
-> プログラムをデータのフィルタとして使用できる
5. 余計な出力はしない
-> rm somefile としたら[ ユーザーは自分が何をしようとしているか理解している ]という前提
6. 入力データと同じ形式で処理結果を出力する
ex1: データの前にヘッダがあり、空白を区切り文字としているファイルはそのように出力する
ex2: 画像データは同じ形式で出力する
-> 結果として回転して、縮小という処理ができるパイプで実現できる
7. 1つのプログラムですべてをこなそうと思わない
-> 9割りの仕事は既存のツールでできる
毎回1からプログラミングするのと比べると、労力を大幅に削減できる
8. ツールをどんどんつくる
望む処理がない場合は、自分でつくる
あるいはさらに一般的な問題の解決例にならないかチェック
* FREE
* OpenSource
Program の中身がわかる( 問題があれば修正ができる )
* Volunteer
OS ( 基本 soft の一種 )
-> Solaris, AIX,
-> FreeBSD Linux
OS( Kernel ) はこんなことしてくれます
(.) HW( CPU, Memory, HD)の制御
(.) Process のスケジュール管理
特徴
(.) MultiTask, MultiUsr
Shell
usr cmd を解釈して, Kernel に対して, 実行依頼をする
WindowSystem
X : 複数の window ひ表示や図形の表示が可能
UNIX は C 言語で記述されてます ( 最初は Assembler だった )
Linux は UNIX OS の一種
こうなふうに使います
login
passwd で passwd 変更可能
stty erase ^H kill ^U
Manual
POINT
すべてを覚える必要もないし, することもできない
必要なこと
(.) 高速に調べる仕組みをつくること
(.) 覚えなくてもいいようにすること
man -k editor // editor という Keyword で検索
logout するのは 第三者に操作をさせないため
c-d | logout
FileSystem
DESC
data の集合を file という単位で管理する
/dev で入出力 を扱う
-> HD , display を file 同様の扱いにする.
file名が長くなるのを ふせぐため, / で区切りようにした.
-> 毎度 fullpath では メンドイので
shell は PWD をみるようになった
同一目的の file をまとめた [file] を directory といいます
入出力を.File.として一元化
DESC
http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-3.html
Disk 上の file だけではなく, display , Keyboard も file 扱いにする.
cmd の入出力を一元化した.
でも毎度設定するのはメンドイ.
STDIN STDOUT ができた. -> Kb, DP に Bind されている.
次のような感じ
KB --> (STDIN)[ cmd ](STDOUT)---> DP
Redirect
[>] STDOUT への出力を変更する
[<] STDIN へ流す.
[2>] STDERR を REDIRECT
[1>] STDOUT を REDIRECT
[2>&1] STDERR を STDOUT と同じ FILE DESCRIPTOR にする
bsi.sh 2>&1 | tee /dust/log
Pipe
DESC
ある Program の結果を 他の Program の入力にする
( これが どれだけ 柔軟なことか 知るべし )
[|] STDOUT を 次の cmd の STDIN につなげる
次のような cmdline OK
echo foo; echo bar;
find -name "foo" &
cmd1 | cmd2 | cmd3
(cmd1;cmd2;cmd3;)
cmdA && cmdB
./configure && make && make install
gcc main && ./a
cmdA || cmdB
make >& make.log || cat make.log
(ps;date) > out.txt
( date; cat a.htm ) > merge.txt
Process.の制御
DESC
usr 入力を解釈して実行する
複数の job も制御可能
CmdLine == [ 1 Job ] -> JobID , PSID がふられる.
-> JobID は shell ごとのとおし番号
[1] からはじまっていたな -
-> PSID は System 全体のとおし番号
ps で確認してね.
c-z : JobFG を一時停止
kill JOBID : Job を完全に終了
find . -name "foo" > file & // JobFG
jobs
->
[1] Running
kill -STOP [%1] // JOBID 1 を一時停止.
c-c : JobFG を停止. ( 割り込み Signal を発生させる )
なぜUNIX
DESC
(.) 作業の自動化
(.) 最初に苦労して後でずっと楽する
(.) シェルスクリプトとは元々存在するプログラムを組み合わせて、
リダイレクトなどを駆使し、ある機能を組みあげていくものです
(.) もしあなたが新しい標準入出力型のプログラムを作ったとしましょう
my_program | sort
(.) 今後シェルスクリプトを勉強していく中では、
つねにこの「すりかえ」機能を頭にいれときましょう!
(.) お行儀のよいスクリプトにかならず終了ステータスを返す
他のscript に組み込んだ際に err 処理できる
(.) 「標準入出力」でデータを取り扱うのがシェルスクリプトの基本です
(.) device を使い回す必要がない( mouse, keyboard )
(.) 結果の再利用ができる
(.) 対話的に使えること
(.) データは構造を持たない単なるバイトストリームであること
-> データが構造を持たないということは、処理速度の点では不利
(.) 余分な出力を行わないこと( 沈黙は金 )
(.) 単機能のツールを組み合わせること
(.) 何でもかんでもファイル
(.) ファイルは全部バイトデータのストリーム
POSIX
OSの規格のひとつ実装面でななく、APIを規格化したもの
-> 互換性を確保したため
(.) キャラクタベースのインターフェイスは慣れないと使い
逆に慣れるとネットワーク経由でどこからでも操作できるという恩恵にあずかれます
(.) 経験的にはまずメモリを増やし、次にHDを高速なものにした方が、体感的な速度は向上します
Interpreter.の仕組み
DESC
ここを理解すると CommandLine をかきやすい
[quot]はそのままねを意味
DESC
quot[ " ] で囲まれた部分は Interpreter にそのままの文字であることを伝える
echo "foo\nbar"
echo foo\nbar
WARNING
i="aaa bbb"
BAD
echo $i > sed "s/aaa/bbb/"
echo aaa bbb > sed "s/aaa/bbb/"
OK
echo "$i" > sed "s/aaa/bbb/"
echo "aaa bbb" > sed "s/aaa/bbb/"
Program 開発
gcc : C 言語の処理系( system )
ld : linkedit ( gcc から自動でよばれる )
Printer 出力 ( lpr )
print job として 複数の user からの要求を格納.
print job は Spooler が管理する
lpr [OP] file
gcc -g -o foo foo.c
GUIDELINE
DESC
環境変数は最後に / をつけない
DEV=c:/foo/bar
cd $DEV/tmp
directory 移動のalias名 は cd[directory名]とする
alias cdwork="cd /cygdrive/c/work";
alias cdlog="cd $WORK/log";
設計
Filter.Script
DESC
コマンド : program
スクリプト : コマンドの集合 == パッケージ
フィルタ : 標準入力からデータを読み、標準出力へ出力するプログラム
実際 多くのフィルタはファイル名を指定することで、データを入力できるようになっている
toUpper toLower
echo aaa | sed 's/\(.*\)/\U\1/'
echo AAA | sed 's/\(.*\)/\L\1/'