[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]
実行用テストファイルの名前として "test" を使うのは止めましょう。
test というコマンドがシェル組込みコマンドにあります。
参考文献をいくつか挙げます。
/usr/share/doc/package にある文書とサンプル。
Linux Programming Bible (John Goerzen/IDG books)
多量の info 文書が書籍として GNU
から得られます。
次の 4 サブセクションには、newusers プログラムのような
バッチプロセッサを用いて /etc/passwd にアカウント情報を
追加するための数種類の言語によるサンプルスクリプトが含まれます。スクリプトは
first_name last_name password の形式の数行の入力ファイルを必要と
します。(実際ユーザのホームディレクトリはこれらのスクリプトによって
作成されません。)
Unix ライクなシステムの働きを理解する 最良の方法は、
シェルスクリプトを読むことです。ここで、シェルプログラムに関する
いくつかのポイントと注意を与えます。間違いから学ぶには、 Shell
Mistakes を読んでください。
Bash の参考文献をいくつか挙げます。
学び始めの際の情報としては、これらが良いでしょう
bash(1)
info bash
mc /usr/share/doc/bash/examples/ /usr/share/doc/bash/
(サンプルファイルを見るには、bash-doc をインストール
してください。)
Learning the bash Shell, 2nd edition (O'Reilly)
次に短いプログラム例を示します。(標準入力から newusers 用の
アカウントエントリを作成)
#!/bin/bash
# (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
pid=1000;
while read n1 n2 n3 ; do
if [ ${n1:0:1} != "#" ]; then
let pid=$pid+1
echo ${n1}_${n2}:password:${pid}:${pid}:,,,/home/${n1}_${n2}:/bin/bash
fi
done
Debian では、数種類のパッケージが POSIX シェルを供給します。
dash (Sarge)
Priority: optional
Installed-Size: 176
最小で最軽量。最初のブート時に最適。
ash (Woody)
Priority: optional
Installed-Size: 180
小さく軽量。最初のブート時に適している。
bash
Essential: yes
Priority: required
Installed-Size: 580
大きく多機能。多くの拡張が実装されている。
pdksh
Priority: optional
Installed-Size: 408
完全な AT&T ksh 互換
移植性を考慮してシェルスクリプトを作成している場合、POSIX シェルスクリプト
としてスクリプトを書くのが最良です。シェルスクリプトの POSIX 互換性を
テストするには、ash (又は dash) にリンクされた
/bin/sh を使用してください。"bashism" 又は
"zshism" を用いた スクリプトを作るのは避けましょう。
例えば、次のような表現は避けましょう。
if [ foo == bar ] ; then ...
diff -u file.c{.orig,}
mkdir /foo{bar,baz}
本文書におけるシェルの記述方法は POSIX タイプのシェルのみを用いており、
それゆえ、tcsh を含む csh タイプのシェルは
使用していません。
いくつかの特別なパラメータを覚える必要があります。
$0 = シェル又はシェルスクリプトの名前
$1 = シェルの第 1 引数
...
$9 = シェルの第 9 引数
$# = ポジショナルパラメータの数
"$*" = "$1 $2 $3 $4 ... $n"
"$@" = "$1" "$2" "$3" "$4" ... "$n"
$? = 最後のコマンドの 終了ステータス
$$ = シェルスクリプトの PID
$! = 最後に起動されたバックグラウンドジョブの PID
基本的な パラメータ拡張 を覚える必要があります:
形式 var がセット var がセットされていない
${var:-string} $var string
${var:+string} string null
${var:=string} $var string
(そして var=string を起動)
${var:?string} $var (echo string して終了する)
ここで、これらの演算子全てにおいて、コロン `:' は実際は無くても構いません。
`:' があると演算子は "exist" と "not null" をテストします。
`:' が無いと演算子は "exist" のみテストします。
覚えておくべき基本的な パラメータ置換 には次があります。
形式 結果
${var%suffix} 最小のsuffix パターンを削除
${var%%suffix} 最大の suffix パターンを削除
${var#prefix} 最小の prefix パターンを削除
${var##prefix} 最大の prefix パターンを削除
覚えておくべき基本的な リダイレクト を次に挙げます。 (ここで [n] はファイルディスクリプタを指定するための任意の 番号)
[n]> file stdout (又はn) を file にリダイレクト。
[n]>> file stdout (又はn) を file に追加
[n]< file file から stdin (又はn) にリダイレクト
[n1]>&n2 stdout (又は n1) を n2 にリダイレクト
2> file >&2 stdout と stderr を file にリダイレクト
> file 2>&1 stdout と stderr を file にリダイレクト
| command stdout を command にパイプする
2>&1 | command stderr と stdout を command にパイプする
ここで、
stdin: 標準入力 (ファイルディスクリプタ = 0)
stdout: 標準出力 (ファイルディスクリプタ = 1)
stderr: 標準エラー出力 (ファイルディスクリプタ = 2)
です。
シェルは任意のファイルディスクリプタにより exec 組込み
コマンドを用いてファイルを開くことができます。
$ echo Hello >foo
$ exec 3<foo 4>bar # ファイルを開く
$ cat <&3 >&4 # 標準入力を 3, 標準出力を 4 にリダイレクト
$ exec 3<&- 4>&- # ファイルを閉じる
$ cat bar
Hello
ここで n<&- と n>&- はファイルディスクリプタ n を閉じることを意味します。
コマンドは条件文の表現に使われる 終了ステータス を返します。
成功: 0 (真)
エラー: 1–255 (偽)
ここでは 0 の値を "真" の意味で使っていますが、
これは他の計算分野で使われている慣習とは異なることに注意してください。 又、`['
は test コマンドと等価であり、 条件文表現として `]'
まで引数を評価します。
覚えておくべき基本的な 条件イディオム を次に挙げます。
command && if_success_run_this_command_too || true
command || if_not_success_run_this_command_instead
if [ conditional_expression ]; then
if_success_run_this_command
else
if_not_success_run_this_command
fi
ここで || は、シェルが -e フラグを呼び出した時に このシェルスクリプトが誤ってこの行で終了しないことを保証するために必要でした。
条件文表現内での ファイル 比較演算を次に挙げます。
-e file file が存在する場合に真
-d file file というディレクトリが存在する場合に真
-f file file という普通のファイルが存在する場合に真
-w file file が存在し、書き込み可である場合に真
-x file file が存在し実行可能出ある場合に真
file1 -nt file2 file1 が file2より (更新時間が)新しい場合に真
file1 -ot file2 file1 が file2 よりも (更新時間が) 古い場合に真
file1 -ef file2 両者が同じデバイスであり、同じ inode 番号を持つ場合に真
条件文表現内での 文字列 比較演算を次に挙げます。
-z str str の長さが 0 の場合に真
-n str str の長さが 0 ではない場合に真
str1 == str2 二つの文字列が等しい場合に真
str1 = str2 二つの文字列が等しい場合に真
("=" は厳密な POSIX 互換なシェルの場合、 "==" の代わりに使用するべき)
str1 != str2 二つの文字列が等しくない場合に真
str1 < str2 str1 が50音順で str2 の前に来る場合に真 (ロケール依存)
str1 > str2 str1 が50音順で str2 の後に来る場合に真 (ロケール依存)
条件文表現内での 算術 整数比較演算には、 -eq, -ne, -lt, -le, -gt そして -ge があります。
シェルは次のようにスクリプトを処理します。
スペース,タブ,改行, ;, (, ), <, >, |, & などのメタ文字により トークン に分割する。
"..." や '...' 内では無い場合、keyword をチェックする。(ループ)
"..." や '...' 内では無い場合、alias を展開する。(ループ)
"..." や '...' 内では無い場合、brace を展開する (例: a{1,2} -> a1 a2 )
"..." や '...' 内では無い場合、チルダ を展開する (例: ~user -> user のホームディレクトリ)
'...' 内で無い場合、parameter を $PARAMETER に展開する。
'...' 内で無い場合、コマンド置換 を $(command)に展開する。
"..." や '...' 内では無い場合、$IFS により 単語 に分割する。
"..." や '...' 内では無い場合、pathname 内の *?[] を展開する。
command を捜す。
関数
組込み
$PATH 内のファイル
ループ
"" 内の '' には何も効果はありません。
シェル内で set -x を実行するか、-x オプション付きで シェルを起動すると、シェルにコマンドの実行結果を全て表示させます。 これはデバッグにはとても便利です。
Awk の参考文献をいくつか挙げます。
Effective awk Programming, 3rd edition (O'Reilly)
Sed & awk, 2nd edition (O'Reilly)
mawk(1) and gawk(1)
info gawk
(newusers のコマンドエントリを作成する) 短いプログラム例
を示します。
#!/usr/bin/awk -f
# Script to create a file suitable for use in the 'newusers' command,
# from a file consisting of user IDs and passwords in the form:
# first_name last_name password
# Copyright (c) KMSelf Sat Aug 25 20:47:38 PDT 2001
# Distributed under GNU GPL v 2, or at your option, any later version.
# This program is distributed WITHOUT ANY WARRANTY.
BEGIN {
# Assign starting UID, GID
if ( ARGC > 2 ) {
startuid = ARGV[1]
delete ARGV[1]
}
else {
printf( "Usage: newusers startUID file\n" \
" where:\n" \
" startUID is the starting userid to add, and\n" \
" file is an input file in form:\n" \
" first_name last_name password\n" \
)
exit
}
infile = ARGV[1]
printf( "Starting UID: %s\n\n", startuid )
}
/^#/ { next }
{
++record
first = $1
last = $2
passwd = $3
user= substr( tolower( first ), 1, 1 ) tolower( last )
uid = startuid + record - 1
gid = uid
printf( "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n", \
user, passwd, uid, gid, first, last, user \
)
}
Debian では、POSIX 互換の awk を供給するパッケージ
が二種類あります。
mawk
Priority: required
Installed-Size: 228
小さく高速 – 標準のインストールには良い
コンパイル時の制限が存在する
NF = 32767
sprintf buffer = 1020
gawk
Priority: optional
Installed-Size: 1708
大きく機能が豊富 – 多くの拡張を実装
UNIX System V Release 4 版
Bell 研究所版 awk
GNU 独自の拡張
これは Unix ライクシステムの インタプリタ です。
Perl の参考文献をいくつか挙げます。
perl(1)
Programming Perl, 3rd edition (O'Reilly)
(newusers のコマンドエントリを作成する) 短いプログラム例
を示します。
#!/usr/bin/perl
# (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
$pid=1000;
while (<STDIN>) {
if (/^#/) { next;}
chop;
$pid++;
($n1, $n2, $n3) = split / /;
print $n1,"_",$n2,":", $n3, ":",$pid,
":",$pid,",,,/home/",$n1,"_",$n2,":/bin/bash\n"
}
Perl モジュール module_name は次のようにインストールします。
# perl -MCPAN -e 'install module_name'
すばらしいオブジェクト指向なインタプリタです。
Python の参考文献をいくつか挙げます。
python(1)
Learning Python (O'Reilly).
(newusers のコマンドエントリを作成する) 短いプログラム例
を示します。
#! /usr/bin/env python
import sys, string
# (C) Osamu Aoki Sun Aug 26 16:53:55 UTC 2001 Public Domain
# Ported from awk script by KMSelf Sat Aug 25 20:47:38 PDT 2001
# This program is distributed WITHOUT ANY WARRANTY.
def usages():
print \
"Usage: ", sys.argv[0], " start_UID [filename]\n" \
"\tstartUID is the starting userid to add.\n" \
"\tfilename is input filename. If not specified, standard input.\n\n" \
"Input file format:\n"\
"\tfirst_name last_name password\n"
return 1
def parsefile(startuid):
#
# main filtering
#
uid = startuid
while 1:
line = infile.readline()
if not line:
break
if line[0] == '#':
continue
(first, last, passwd) = string.split(string.lower(line))
# above crashes with wrong # of parameters :-)
user = first[0] + last
gid = uid
lineout = "%s:%s:%d:%d:%s %s,,/home/%s:/bin/bash\n" % \
(user, passwd, uid, gid, first, last, user)
sys.stdout.write(lineout)
+uid
if __name__ == '__main__':
if len(sys.argv) == 1:
usages()
else:
uid = int(sys.argv[1])
#print "# UID start from: %d\n" % uid
if len(sys.argv) > 1:
infilename = string.join(sys.argv[2:])
infile = open(infilename, 'r')
#print "# Read file from: %s\n\n" % infilename
else:
infile = sys.stdin
parsefile(uid)
Make の参考文献をいくつか挙げます。
info make
make(1)
Managing Projects with make, 2nd edition (O'Reilly)
シンプルな自動変数。
ルールシンタックスを示します。
target: [ prerequisites ... ]
[TAB] command1
[TAB] -command2 # エラーを無視
[TAB] @command3 # suppress echoing
ここで [TAB] はタブの文字コードです。 各行は make
変数置換を行った後にシェルにより解釈されます。
2行以上にわたってスクリプトを続けるには、行の末尾に \ を
書いてください。シェルスクリプトでの環境変数のため $ を入力
するには、$$ を使用してください。
ターゲット と 前提 のための 暗黙のルール は、例えば次のように書けます。
%: %.c header.h
又は
%.o: %.c header.h
ここで、ターゲット には % (正確のはこれらのうちの一つ) が含まれます。% は実際のターゲットのファイル名にある 空でないあらゆる文字列にマッチします。前提 は 同様に実際のターゲット名に関連する名前がどのようなものかを示すために % を使います。
サフィックスルール は make のために厳密なルール
を定義するためには 時代遅れ です。互換性のために、 GNU
make ではまだサポートされていますが、可能な限り
次のような等価なパターンルールを使用しましょう。
古いサフィックスルール --> 新しいパターンルール
.c: --> % : %.c
.c.o: --> %.o: %.c
ルールのための自動変数。
foo.o: new1.c new2.c old1.c new3.c
$@ == foo.o (ターゲット)
$< == new1.c (最初の依存関係)
$? == new1.c new2.c new3.c (新しい依存関係)
$^ == new1.c new2.c old1.c new3.c (全ての依存関係)
$* == `%' はターゲットパターンにマッチした語幹です。
変数のリファレンス。
foo1 := bar # 一回だけの展開
foo2 = bar # 再帰展開
foo3 += bar # 追加
SRCS := $(wildcard *.c)
OBJS := $(foo:c=o)
OBJS := $(foo:%.c=%.o)
OBJS := $(patsubst %.c,%.o,$(foo))
DIRS = $(dir directory/filename.ext) # "directory" を展開
$(notdir NAMES...), $(basename NAMES...), $(suffix NAMES...) ...
自動の内部ルールを見るには、make -p -f/dev/null を 起動してください。
次をインストールして C を使う準備をしましょう。
# apt-get install glibc-doc manpages-dev libc6-dev gcc
C の参考文献をいくつか挙げます。
info libc (C ライブラリ関数のリファレンス)
gcc(1)
each_C_library_function_name(3)
Kernighan & Ritchie, The C Programming Language, 2nd edition
(Prentice Hall). http://cm.bell-labs.com/cm/cs/cbook/
ISO C standard. http://www.open-std.org/jtc1/sc22/wg14/
gcc)
example.c を libm ライブラリを用いて コンパイルして
run_example 実行ファイルを作成するための シンプルな例です。
$ cat > example.c << EOF
#include <stdio.h>
#include <math.h>
#include <string.h>
int main(int argc, char **argv, char **envp){
double x;
char y[11];
x=sqrt(argc+7.5);
strncpy(y, argv[0], 10); /* prevent buffer overflow */
y[10] = '\0'; /* fill to make sure string ends with '\0' */
printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]);
return 0;
}
EOF
$ gcc -Wall -g -o run_example example.c -lm
$ ./run_example
1, 2.915, ./run_exam, (null)
$ ./run_example 1234567890qwerty
2, 3.082, ./run_exam, 1234567890qwerty
ここで、sqrt() を使うためにライブラリ
libm をリンクするには
-lm が必要です。実際のライブラリは
/lib/ に libm.so.6 という名前で存在し、 これは
libm-2.1.3.so のシンボリックリンクです。
出力テキストの最後のパラメータを見てください。%10s が指定されているにも係わらず10以上の文字があります。
境界チェックを行わずに sprintf や strcpy のような
ポインタを用いるメモリ操作関数を使うのは上記のオーバーラン効果を利用する
バッファオーバーフロー攻撃を防ぐために時代遅れになっています。
その代わりに、snprintf や strncpy をご利用下さい。
gdb を用いたデバッグ準備
# apt-get install gdb
gdb の参考文献をいくつか挙げます。
info gdb (チュートリアル)
gdb(1)
-g オプション付きでコンパイルされたプログラムをデバッグするには
gdb を使用します。多くのコマンドには省略形が存在します。
タブ拡張もシェルと同様に扱えます。
$ gdb program
(gdb) b 1 # ブレークポイントを一行目に設定
(gdb) run arg1 arg2 arg3 # プログラムを起動
(gdb) next # 次の行
...
(gdb) step # 前に進む
...
(gdb) p parm # parm の内容を表示
...
(gdb) p parm=12 # 値を 12 に設定
Emacs からデバッグするには、エディタのコマンドのサマリ (Emacs, Vim), 第 11.3.4 節 をごらんください。
インストールされる全てのバイナリは Debian システムでは標準で stripped される
べきですので、ほとんどのデバッグシンボルは削除されています。Debian
パッケージのデバッグに役立つように gdb を利用するには、
次の方法で該当するパッケージを再構築する必要があります。
パッケージの version
を上げるために debian/control を編集。
バイナリのコンパイルのために CFLAGS=-g -Wall を使うように ビルドスクリプトをチェック。
Debian パッケージの構築のために DEB_BUILD_OPTIONS=nostrip,nooptをエクスポートする。
詳細は Policy
10.1 をごらんください。
プログラムがどのライブラリに依存しているかを調べるには、 ldd
を使用します。
$ ldd /bin/ls
librt.so.1 => /lib/librt.so.1 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40030000)
libpthread.so.0 => /lib/libpthread.so.0 (0x40153000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
ls を chroot された環境で動かすには、
上記に示したライブラリを chroot された環境に置く 必要があります。
次に挙げるコマンドも役立ちます。
strace: システムコールとシグナルを追跡
ltrace: ライブラリコールを追跡
数種類のメモリリーク検知ツールを Debian で使用できます。
njamd
valgrind
dmalloc
electric-fence
memprof
memwatch (パッケージ化されていないが、 memwatch
から取得可能です。)
mpatrol
leaktracer
libgc6
Parasoft による
Insure++ (non-free, 商用では有償)
又 Debugging
Tools for Dynamic Storage Allocation and Memory Management.
も調べてみてください。
flex は高速な字句解析器生成器です。
flex の参考文献をいくつか挙げます。
info flex (チュートリアル)
flex(1)
ライブラリ無しでコンパイルできるように、次のように見える main() と
yywrap() 又は program.l を供給する必要が
あります。(yywrap はマクロです。 %option main
は暗黙に %option noyywrap になります)
%option main
%%
.|\n ECHO ;
%%
その代わりに、cc コマンドラインの最後に (AT&T-Lex の
-ll のように) -lfl リンカオプション
を付けてコンパイルできます。この場合、 %option は必要ありません。
Debian では Yacc 互換な LALR パーサジェネレータパッケージが いくつか供給されています。
bison: GNU LALR パーサジェネレータ
byacc: バークレー LALR パーサジェネレータ
btyacc: byacc に基づく
バックトラッキングパーサジェネレータ
bison の参考文献をいくつか挙げます。
info bison (チュートリアル)
bison(1)
main() と yyerror() を供給する必要があります。
main() は yyparse() を呼び出し、これは
yyparse() を呼び出します。さらにこれは 通常 FleX により生成される
yylex() を呼び出します。
%%
%%
autoconf は GNU ビルドシステム全体を使用する 多種の UNIX
ライクなシステムに適合するようにソフトウェアのソースコード
パッケージを自動で設定するシェルスクリプトを生成するための ツールです。
autoconf は configure と呼ばれる
設定スクリプトを生成します。configure は Makefile.in
テンプレートを用いて自動的に カスタマイズされた Makefile
を生成します。
Debian は/usr/local/ 以下にあるファイルに触りません。 (多様性のサポート, 第 2.5 節 参照)
ですから、ソースからプログラムをコンパイルして /usr/local/
下に置いても Debian とは干渉しません。
$ cd src
$ ./configure --prefix=/usr/local
$ make
$ make install # システム上にファイルをインストールする
プログラムを削除したいが、ソースをまだ持っており、autoconf や
automake を使っていてコンパイル時の設定を覚えていたならば、
次の手順でアンインストールができます。
$ ./configure all-of-the-options-you-gave-it
# make uninstall
代わりに、インストール手順で /usr/local/ の下にしか
ファイルを置いておらず、重要なものは何もないことを絶対確信している
なら、全ての内容を次のように削除できます。
# find /usr/local -type f -print0 | xargs -0 rm -f
どこにファイルをインストールしか確信できない場合、アンインストールのための
クリーンな道筋を供給してくれる checkinstall の使用を
考えるべきです。
基本的なインタラクティブで動的な web ページは 以下の手順で作られます。
HTMLフォームを用いてブラウザユーザに質問が提示されます。。
フォームに書き込みクリックすることで、エンコードされたパラメータを 組み込んだ URL をブラウザから web サーバに送信します。。 [64] 例えば、
http://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
http://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
http://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3=VAL3
web サーバ 上の CGI プログラム (program.* のいずれか)
はデコードされたパラメータ "VAR1=VAL1 VAR2=VAL2
VAR3=VAL3" を 環境変数 "QUERY_STRING"
の値として受け取り、実行します。
のCGI プログラムの stdout は web ブラウザに 送られ、インタラクティブで動的な web ページとして提示されます。
安全上、勝手に作ったいい加減なプログラムで CGI パラメータを読むのは
賢明でないとされています。Perl (Perl, 第 13.4 節 参照) や
Python (Python, 第 13.5 節 参照)
の確立したモジュールが有ります。 PHP は
このような機能を自身で持っています。
クライアントサイドでデータ保持が必要な場合はクッキーが用いられます。
クライアントサイドでデータ処理が必要な場合は javascript がよく用いられます。
詳細はThe Common Gateway
Interface と The Apache
Software Foundation と JavaScript を参照下さい。
Google で "CGI tutorial" を探すのに http://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial というエンコードされた URL を直接ブラウザのアドレスに打ち込むことは、 CGI スクリプトの Google サーバ上での動きを知るための良い方法です。
伝統的に、roff は主要な Unix テキスト処理システムです。
roff(7), groff(7), groff(1),
grotty(1), troff(1), groff_mdoc(7),
groff_man(7), groff_ms(7), groff_me(7),
groff_mm(7) そして info groff をご覧下さい。
-me マクロに良質のチュートリアルが存在します。 groff
(1.18以後) をインストールしている場合、
/usr/share/doc/groff/meintro.me.gz
を見付けて次を実行してください。
$ zcat /usr/share/doc/groff/meintro.me.gz | \
groff -Tascii -me - | less -R
次の手順は完全なプレインテキストファイルを作成します。
$ zcat /usr/share/doc/groff/meintro.me.gz | \
GROFF_NO_SGR=1 groff -Tascii -me - | col -b -x > meintro.txt
印刷するには、PostScript 出力を使いましょう。
$ groff -Tps meintro.txt | lpr
$ groff -Tps meintro.txt | mpage -2 | lpr
次のパッケージをインストールして SGML を使う準備を行います。
# apt-get install debiandoc-sgml debiandoc-sgml-doc
debiandoc-sgml の参考文献をいくつか挙げます。
/usr/share/doc/debiandoc-sgml-doc
debiandoc-sgml(1)
DocBook:
The Definitive Guide, by Walsh and Muellner (O'Reilly) (package
docbook-defguide)
SGML により複数の文書フォーマットの管理を行えます。簡単な SGML システムの一つ が Debiandoc であり、本文書でも用いられています。Debiandoc は オリジナルのテキストファイルから次の文字について些細な変換が必要です。
"<" --> <
">" --> >
" " --> (半角スペース)
"&" --> &
"%" --> %
"(c)" --> ©
"–" --> –
"—" --> —
セクションを印刷不可能なコメントとしてマークするには、次に示すような 内容を挿入します。
<!-- State issue here ... -->
セクションを変換可能なコメントとしてマークするには、次に示すような内容を 挿入します。
<![ %FIXME; [ State issue here ... ]]>
SGML では、エンティティの 最初の定義 が優先されます。例えば、
<!entity % qref "INCLUDE">
<![ %qref; [ <!entity param "Data 1"> ]]>
<!entity param "Data 2">
¶m;
では、"Data 1" になります。最初の行が "INCLUDE" ではなく "IGNORE" を 含んでいる場合は、"Data 2" となります。(二行目は条件文) 又、フレーズの繰り返しは内容からあらかじめ分けて定義できます。
<!entity whoisthis "my">
Hello &whoisthis; friend.
This is &whoisthis; book.
これは次のような結果となります。
Hello my friend.
This is my book.
examples にある短い SGML のサンプルの
sample.sgml をご覧下さい。
SGML 文書が巨大になった場合、バックエンドテキストプロセッサとして 使われる TeX が時々エラーを起こす場合があります。TeX/LaTeX, 第 13.9.3 節 をごらんください。
準備:
# tasksel # その他 --> TeX/LaTeX 環境 を選択して
TeX/LaTeX をインストールしましょう。
LaTeX の参考文献をいくつか示します。
tex(1)
latex(1)
The TeXbook, by Donald E. Knuth, (Addison-Wesley) [65]
LaTeX - A Document Preparation System, by Leslie Lamport, (Addison-Wesley)
The LaTeX Companion, by Goossens, Mittelbach, Samarin, (Addison-Wesley)
TeX は最強の植字環境です。多くの SGML プロセッサは TeX をバックエンド
テキストプロセッサとして使っています。lyx, lyx-xforms
又は lyx-qt により供給される Lyx や、 texmacs
により供給される GNU TeXmacs は見栄えの良い LaTeX 用のWYSIWYG
編集環境を提供しますが、 多くの人はソースの編集のためには Emacs や Vim
を選択しています。
多くのオンラインのリソースが得られます。
teTeX - A Documentation
Guide (tetex-doc パッケージ)
文書が巨大になった場合、TeX はエラーを起こす場合がときどきあります。
この問題を修正するには、/etc/texmf/texmf.cnf の pool サイズ
を増大させる (又は /etc/texmf/texmf.d/95NonPath を適切に編集して
update-texmf を起動する) 必要があります。
文書を含むコードを書く代わりに、文芸的プログラマはコードを含む文書 を書くものです。この手法はプログラムのための良い文書を保証します。
文芸的プログラムについては、 Literate Programming
をごらんください。
準備
# apt-get install nowebm
Noweb の参考文献をいくつか挙げます。
これは WEB ライクな文芸的プログラムツールであり、よりシンプルですが
拡張性と言語との独立性を供給します。 [66] noweb
が起動されると、プログラムのソースコードを noweb
ファイルで言及されている出力ファイルに書き出し、文書の植字のために TeX
ファイルを出力します。
Debian の ifupdown パッケージが良い例です。
$ apt-get source ifupdown
$ cd ifupdown*
$ make ifupdown.pdf ifupdown.ps
準備
# apt-get install doxygen doxygen-doc doxygen-gui
Doxygen (created by doxygen!) の参考文献をいくつか挙げます。
C++, C, Java, IDL, さらにある程度は PHP と C#も含めて プログラムに関する HTML,
RTF, Unix マニュアルページ, PostScript そして PDF (LaTeX を用いて)
文書を生成できます。Doxygen は JavaDoc (1.1), Qt-Doc, KDOC と互換性があり、
Troll Tech の Qt
ツールキットを利用する プロジェクトが用いるために特別に設計されていました。
Doxygen はドキュメント化されていないプログラムであっても、依存グラフ、
協同ダイアログ、そしてグラフィカルなクラス階層グラフを含む内容を生成します。
この出力は Qt のドキュメントに似ています。
準備
# apt-get install debian-policy developers-reference \
maint-guide dh-make debhelper
# apt-get install packaging-manual # if Potato
パッケージのための参考文献をいくつか挙げます。
Debian New Maintainers' Guide (チュートリアル)
dh-make(1)
Debian Developer's Reference (最良の練習)
Debian Policy Manual (信頼されている)
Packaging Manual (Potato 用)
Joey Hess による単独のバイナリをパッケージングするためのクイックハックな 方法です。
# mkdir -p mypkg/usr/bin mypkg/DEBIAN
# cp binary mypkg/usr/bin
# cat > mypkg/DEBIAN/control
Package: mypackage
Version: 1
Architecture: i386
Maintainer: Joey Hess <joeyh@debian.org>
Description: my little package
Don't expect much.
^D
# dpkg-deb -b mypkg
dh-make パッケージにある dh_make を使って
パッケージのベースラインを作成します。そして、 dh-make(1)
にある指示に従って処理します。 これは debian/rules 内で
debhelper を利用します。
古いアプローチでは debmake にある deb-make
を使います。この方法は debhelper を利用せず、シェルのみに
依存します。debmake は使わないようにしましょう。
複数のソースパッケージの例としては、"mc" (dpkg-source -x
mc_4.5.54.dsc をごらんください。これは Adam Heath による
"sys-build.mk" を利用しています。又、"glibc"
(dpkg-source -x glibc_2.2.4-1.dsc) は Joel Klecker (espy@debian.org)
による他のシステムを利用しています。
[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]
Debian リファレンス
CVS, 2007年 1月 18日 木曜日 11時54分01秒 UTC時間osamu#at#debian.orgtsuno#at#ngy.1st.ne.jp