澤田さん
_________________________________________________________________________________________________________________________________________________
Debian パッケージを管理するためのツールである apt や dpkg などは一目で Debian specific とわかります。 しかし、 日常的 に利用しているコマンド、 設定ファイルなどでも実は Debian 固有のものであったりパッケージ化する際に変更 が加えられていたりするものがあります。 ここではそのようなあなたの知らない Debian specific を紹介し ます。
Debian で
# adduser hoge
|
を実行すると hoge ユーザが作られパスワードの入力が求められます。 Fedora で同じコマンドラインを実行した場合、 hoge ユーザは作られますがパスワード入力は求められません。 パスワードは別途 passwd コマンドで設定する必要があり ます。
この違いは Debian の adduser と Fedora で adduser の実体の違いによるものです。 Fedora の adduser は useradd へのシン ボリックリンクです。 Debian の adduser は Perl スクリプトで、 useradd、 passwd 等を呼び出してユーザを作成していま す*1 。
ちなみに、 FreeBSD の adduser はシェルスクリプトで書かれており、 pw というコマンドを呼び出すことでユーザの追加を 行っているようです。 Debian GNU/kFreeBSD は FreeBSD カーネルの上に GNU のツールや glibc、 Debian のツールを乗せ たものであるため、 Debian の adduser が使われており、 useradd と passwd でユーザの追加を行っていま した。
ネットワークの設定を変えたのでインターフェースを再起動したいという場合、 Debian では以下のコマンドラインを実行する と auto に設定されているインターフェースをすべて再起動することができます。
# ifdown -a \&\& ifup -a
|
一方 Fedora では-a オプションは使えず、 また、 複数のインターフェースを指定することはできません。
インターフェースの設定ファイルも Debian では/etc/network/iterfaces、 Fedora では/etc/sysconfig/network-scripts/ifcfg-< インターフェース名 > となっており、 フォーマットはまったく違います。
startx の man を見ると X の起動時に実行されるスクリプトは /.xinitrc となっています。 しかし、 Debian では /.xsession に書いておけば startx を実行したときでもグラフィカルログインしたときでも同じ環境にすることができ ます。
これは、 Debian では素の X に対して変更を加えているためです。
startx したときのフローは次のようになっています。
グラフィカルログイン (xdm) した場合のフローは次のようになります。
というわけでどちらの場合も/etc/X11/Xsession が実行されます。 この/etc/X11/Xsession は Debian specific なもの で/etc/X11/Xsession.d ディレクトリにあるスクリプトを順に実行します。 このうち、 50x11-common_determine-startup で 起動プログラムの検出が行われ、 /.xsession がある場合、 /.xsession が起動プログラムに選ばれます。 99x11-common_start で 50x11-common_determine-startup で選ばれたプログラムが実行されることで /.xsession に書かれた内容が有効になり ます。
ちなみに、 Fedora では /.Xclients に書くと startx でもグラフィカルログインでもスクリプトを実行してくれるようです。 ただし、 /etc/X11/Xsession.d ディレクトリのような仕組みはないようです。
less で gzip 圧縮されたファイルを開こうとすると通常次のようになります。
$ less hoge.txt.gz
"hoge.txt.gz" may be a binary file. See it anyway? |
ひょっとしたら上のようなメッセージは表示されずに hoge.txt の内容が表示されている方もいらっしゃるかもしれません。 その場合、 次の環境変数が設定されているはずです。
$ printenv | grep ^LESS
LESS=-M LESSOPEN=| /usr/bin/lesspipe ’%s’ LESSCLOSE=/usr/bin/lesspipe ’%s’ ’%s’ |
less には LESSOPEN という環境変数が設定されているとファイルを読み込む前に LESSOPEN で指定されたコマンドに ファイル名を渡してコマンドの標準出力をファイルの内容として読み込むという機能があります。 これにより、 gzip 圧縮され たファイルを
$ less hoge.txt.gz
|
というコマンドラインで表示することができます。 また、 この機能を応用することで
$ less hoge.tar.gz
|
とした場合に tar されているファイルの一覧を取得するといったこともできます。
/usr/bin/lesspipe は Debian specific なものです。 他のディストリビューションにも同様の機能を持つものが含まれている ことが多いのですが、 Debian の lesspipe は対応している拡張子の数が多いことが特徴です。
language-env を実行すると LESSOPEN の設定をしてくれるため気づかず使っているという方もいらっしゃるのではないで しょうか。
それが Debian specific であるか知るためには man を参照するという方法があります。 man を見ると、
Debian GNU/Linux Version 3.97 ADDUSER(8)
|
のように書かれているので Debian specific と推測することができます。 しかし、 それ以外に Debian specific かを知るよい 方法はないようです。
Xsession や lesspipe のようにオリジナルの配布内容からファイルが追加されている場合、 ソースパッケージの debian ディ レクトリに追加ファイルが格納されています。 debian ディレクトリにあるファイルリストから control や postinst などの制御 ファイルを除いたものを取得すればそのパッケージに Debian specific な変更がありそうか推測することができると考えられ ます。
東 京 エ リ ア Debian 勉強会 2006_________________________________________________________________