Debian リファレンス [FAMILY Given] 製作著作 © 2013 Osamu Aoki (青木 修) 本 Debian リファレンス (第 2版) (2016-10-17 13:30:31 UTC) はシス     テムインストール後のユーザー案内書として、Debian システムの広範な 概論を提供します。本書は非開発者を対象にシェルコマンド例を通して システム管理の多くの局面を説明します。 概要 This book is free; you may redistribute it and/or modify it under the terms of the GNU General Public License of any version compliant to the Debian Free Software Guidelines (DFSG). (日本語による参考説明: 本 書はフリーです; Debian フリーソフトウェアーガイドライン (DFSG) に適 合するいかなるバージョンの GNU General Public License の条件の下でで も再配布や改変をすることを許可します。) --------------------------------------------------------------------- 目次 序章 1. 免責事項 2. Debian とはなにか 3. 本書について 3.1. 編集指針 3.2. 前提条件 3.3. 文書様式 3.4. ポプコン 3.5. パッケージサイズ 3.6. 本書へのバグ報告 4. 新規ユーザーへの引用文 1. GNU/Linux チュートリアル 1.1. コンソールの基礎 1.1.1. シェルプロンプト 1.1.2. X の下でのシェルプロンプト 1.1.3. root アカウント 1.1.4. root シェルプロンプト 1.1.5. GUI のシステム管理ツール 1.1.6. 仮想コンソール 1.1.7. コマンドプロンプトからの退出方法 1.1.8. システムをシャットダウンする方法 1.1.9. まともなコンソールの復元 1.1.10. 初心者向け追加パッケージの提案 1.1.11. 追加のユーザーアカウント 1.1.12. sudo の設定 1.1.13. お遊びの時間 1.2. Unix-like ファイルシステム 1.2.1. Unix ファイルの基礎 1.2.2. ファイルシステムの内側 1.2.3. ファイルシステムのパーミッション 1.2.4. 新規作成ファイルのパーミッションのコントロール: umask 1.2.5. ユーザーのグループ (group) のパーミッション 1.2.6. タイムスタンプ 1.2.7. リンク 1.2.8. 名前付きパイプ (FIFO) 1.2.9. ソケット 1.2.10. デバイスファイル 1.2.11. 特別なデバイスファイル 1.2.12. procfs と sysfs 1.2.13. tmpfs 1.3. ミッドナイトコマンダー (MC) 1.3.1. MC のカスタム化 1.3.2. MC の始動 1.3.3. MC のファイルマネージャー 1.3.4. MC のコマンドライントリック 1.3.5. MC の内部エディター 1.3.6. MC の内部ビューワー 1.3.7. MC の自動起動機能 1.3.8. MC の FTP 仮想ファイルシステム 1.4. 基本の Unix 的作業環境 1.4.1. login シェル 1.4.2. Bash のカスタム化 1.4.3. 特別のキーストローク 1.4.4. Unix 流のマウス操作 1.4.5. ページャー 1.4.6. テキストエディター 1.4.7. デフォールトのテキストエディターの設定 1.4.8. Vim のカスタム化 1.4.9. シェル活動の記録 1.4.10. 基本 Unix コマンド 1.5. シェルプロンプト 1.5.1. コマンド実行と環境変数 1.5.2. "$LANG" 変数 1.5.3. "$PATH" 変数 1.5.4. "$HOME" 変数 1.5.5. コマンドラインオプション 1.5.6. シェルグロブ 1.5.7. コマンドの戻り値 1.5.8. 典型的なコマンドシーケンスとシェルリディレクション 1.5.9. コマンドエリアス 1.6. Unix 的テキスト処理 1.6.1. Unix テキストツール 1.6.2. 正規表現 1.6.3. 置換式 1.6.4. 正規表現を使ったグローバル置換 1.6.5. テキストファイルからのデーター抽出 1.6.6. コマンドをパイプするためのスクリプト断片 2. Debian パッケージ管理 2.1. Debian パッケージ管理の前提条件 2.1.1. パッケージ設定 2.1.2. 基本的な注意事項 2.1.3. 永遠のアップグレード人生 2.1.4. Debian アーカイブの基本 2.1.5. Debian は 100% フリーソフトウェアーです 2.1.6. パッケージ依存関係 2.1.7. パッケージ管理のイベントの流れ 2.1.8. パッケージ管理のトラブルへの応急対処法 2.2. 基本的パッケージ管理操作 2.2.1. apt-get/apt-cache と aptitude の比較 2.2.2. コマンドラインによる基本的なパッケージ管理操作 2.2.3. aptitude のインタラクティブな使用 2.2.4. aptitude のキーバインディング 2.2.5. aptitude の下でのパッケージの表示 2.2.6. aptitude を使った探索方法 2.2.7. aptitude の regex 式 2.2.8. aptitude による依存関係の解決 2.2.9. パッケージアクティビティーログ 2.3. aptitude 操作例 2.3.1. regex にマッチするパッケージ名のパッケージをリスト 2.3.2. regex マッチをしての閲覧 2.3.3. パッケージの完全削除 2.3.4. 自動 / 手動インストール状態の整理 2.3.5. システム全体のアップグレード 2.4. 高度なパッケージ管理操作 2.4.1. コマンドラインによる高度なパッケージ管理操作 2.4.2. インストールされたパッケージファイルの検証 2.4.3. パッケージ問題からの防御 2.4.4. パッケージメタデーターの検索 2.5. Debian パッケージ管理の内部 2.5.1. アーカイブのメタデーター 2.5.2. トップレベルの "Release" ファイルと信憑性 2.5.3. アーカイブレベルの "Release" ファイル 2.5.4. パッケージメタデーターの取得 2.5.5. APT に関するパッケージ状態 2.5.6. aptitude に関するパッケージ状態 2.5.7. 取得したパッケージのローカルコピー 2.5.8. Debian パッケージファイル名 2.5.9. dpkg コマンド 2.5.10. update-alternative コマンド 2.5.11. dpkg-statoverride コマンド 2.5.12. dpkg-divert コマンド 2.6. 壊れたシステムからの復元 2.6.1. 古いユーザーの設定との非互換性 2.6.2. 重複するファイルを持つ相異なるパッケージ 2.6.3. 壊れたパッケージスクリプトの修正 2.6.4. dpkg コマンドを使っての救済 2.6.5. パッケージセレクションの復元 2.7. パッケージ管理のヒント 2.7.1. Debian パッケージの選択方法 2.7.2. 混合したアーカイブソースからのパッケージ 2.7.3. 候補バージョンの調整 2.7.4. Updates と Backports 2.7.5. "推奨 (Recommends)" によりパッケージがインストールされ るのを阻止 2.7.6. unstable からのパッケージと共に、testing を追いかける 2.7.7. experimental からのパッケージと共に、unstable を追いか ける 2.7.8. パッケージの自動ダウンロードとアップグレード 2.7.9. APT のよるダウンロードバンド幅の制限 2.7.10. 緊急ダウングレード 2.7.11. 誰がパッケージをアップロードしたのか? 2.7.12. equivs パッケージ 2.7.13. 安定版システムへのパッケージ移植 2.7.14. APT のためのプロキシサーバー 2.7.15. 小さな公開パッケージアーカイブ 2.7.16. システム設定の記録とコピー 2.7.17. 外来のバイナリーパッケージの変換やインストール 2.7.18. dpkg を使わないパッケージの開梱 2.7.19. パッケージ管理の追加参考文書 3. システムの初期化 3.1. ブートストラッププロセスの概要 3.1.1. 1段目: BIOS 3.1.2. 2段目: ブートローダー 3.1.3. 3段目: ミニ Debian システム 3.1.4. 4段目: 通常の Debian システム 3.2. SysV-スタイル init 3.2.1. ランレベルの意味 3.2.2. ランレベルの設定 3.2.3. ランレベル管理例 3.2.4. 各 init スクリプトのデフォールトのパラメーター 3.2.5. ホスト名 3.2.6. ファイルシステム 3.2.7. ネットワークインターフェースの初期化 3.2.8. ネットワークサービスの初期化 3.2.9. システムメッセージ 3.2.10. カーネルメッセージ 3.3. udev システム 3.3.1. カーネルモジュール初期化 4. 認証 4.1. 通常の Unix 認証 4.2. アカウントとパスワードの情報管理 4.3. 良好なパスワード 4.4. 暗号化されたパスワード作成 4.5. PAM と NSS 4.5.1. PAM と NSS によってアクセスされる設定ファイル 4.5.2. 最新の集中システム管理 4.5.3. 「どうして GNU の su は wheel グループをサポートしない のか」 4.5.4. パスワード規則強化 4.6. 他のアクセスコントロール 4.6.1. sudo 4.6.2. PolicyKit 4.6.3. SELinux 4.6.4. サーバーのサービスへのアクセスの制限 4.7. 認証のセキュリティー 4.7.1. インターネット上でセキュアーなパスワード 4.7.2. セキュアーシェル 4.7.3. インターネットのためのセキュリティー強化策 4.7.4. root パスワードのセキュリティー確保 5. ネットワークの設定 5.1. 基本的ネットワークインフラ 5.1.1. ホスト名の解決 5.1.2. ネットワークインターフェース名 5.1.3. LAN のためのネットワークアドレス範囲 5.1.4. ネットワークデバイスサポート 5.2. デスクトップのためのモダンネットワーク設定 5.2.1. GUI のネットワーク設定ツール 5.3. 旧来のネットワーク接続や設定 5.4. ネットワーク接続方法 (旧来) 5.4.1. イーサーネットを使っての DHCP 接続 5.4.2. イーサーネットを使っての静的 IP 接続 5.4.3. pppconfig を使っての PPP 接続 5.4.4. wvdialconf を使った代替 PPP 接続 5.4.5. pppoeconf を使った PPPoE 接続 5.5. ifupdown を使った基本的なネットワーク設定 (旧来) 5.5.1. 簡略化されたコマンドシンタックス 5.5.2. "/etc/network/interfaces" の基本的なシンタックス 5.5.3. ループバックネットワークインターフェース 5.5.4. DHCP サービスを受けるネットワークインターフェース 5.5.5. 静的 IP を使うネットワークインターフェース 5.5.6. ワイアレス LAN インターフェースの基本 5.5.7. WPA/WPA2を使うワイアレスLANインターフェース 5.5.8. WEP を使うワイアレス LAN インターフェース 5.5.9. PPP 接続 5.5.10. 代替の PPP 接続 5.5.11. PPPoE 接続 5.5.12. ifupdown のネットワーク設定状態 5.5.13. 基本ネットワーク設定 5.5.14. ifupdown-extra パッケージ 5.6. ifupdown を使う上級ネットワーク設定 (旧来) 5.6.1. ifplugd パッケージ 5.6.2. ifmetric パッケージ 5.6.3. 仮想インターフェース 5.6.4. 上級コマンドシンタックス 5.6.5. mapping スタンザ 5.6.6. 手動切り替え可能なネットワーク設定 5.6.7. ifupdown システムを使うスクリプト 5.6.8. guessnet を使う mapping 5.7. 低レベルネットワーク設定 5.7.1. Iproute2 コマンド 5.7.2. 安全な低レベルネットワーク操作 5.8. ネットワークの最適化 5.8.1. 最適 MTU の発見 5.8.2. MTU の設定 5.8.3. WAN TCP の最適化 5.9. Netfilter インフラ 6. ネットワークアプリケーション 6.1. ウェッブブラウザー 6.1.1. ブラウザー設定 6.2. メールシステム 6.2.1. Eメールの基本 6.2.2. 近代的メールサービスの基礎 6.2.3. ワークステーションのメール設定戦略 6.3. メールトランスポートエージェント (MTA) 6.3.1. exim4 設定 6.3.2. SASL を使う postfix の設定 6.3.3. メールアドレス設定 6.3.4. 基本的な MTA の操作 6.4. メールユーザーエージェント (MUA) 6.4.1. 基本 MUA — Mutt 6.5. リモートメールの取得および転送ユーティリティー 6.5.1. getmail の設定 6.5.2. fetchmail の設定 6.6. フィルター付きのメールデリバリーエージェント (MDA) 6.6.1. maildrop の設定 6.6.2. procmail の設定 6.6.3. mbox の内容の再配達 6.7. POP3/IMAP4 サーバー 6.8. プリントサーバーとユーティリティー 6.9. リーモートアクセスサーバーとユーティリティー (SSH) 6.9.1. SSH の基本 6.9.2. SMTP/POP3 トンネルをするためのポートフォワーディング 6.9.3. リモートパスワード無しでの接続 6.9.4. 外部 SSH クライアントへの対処法 6.9.5. ssh-agent の設定 6.9.6. SSH 上のリモートシステムをシャットダウンする方法 6.9.7. SSH のトラブルシュート 6.10. 他のネットワークアプリケーションサーバー 6.11. 他のネットワークアプリケーションクライアント 6.12. システムデーモンの診断 7. X Window システム 7.1. 重要パッケージ 7.2. デスクトップ環境の設定 7.2.1. Debian メニュー 7.2.2. Freedesktop.org メニュー 7.2.3. Freedesktop.org メニューからの Debian  メニュー 7.3. サーバー/クライアント関係 7.4. X サーバー 7.4.1. X サーバーの (再)設定 7.4.2. X サーバーへの接続方法 7.5. X Window システムの起動 7.5.1. gdm3 で X セッションをスタート 7.5.2. X セッションのカスタム化 (古典的方法) 7.5.3. X セッションのカスタム化 (新方法) 7.5.4. リモート X クライアントを SSH 経由で接続 7.5.5. インターネット経由のセキュアーな X ターミナル 7.6. X Window でのフォント 7.6.1. 基本的フォント 7.6.2. 追加のフォント 7.6.3. CJK フォント 7.7. X アプリケーション 7.7.1. X オフィスアプリケーション 7.7.2. X ユーティリティーアプリケーション 7.8. X トリビア 7.8.1. クリップボード 7.8.2. X でのキーマップとポインターボタンのマッピング 7.8.3. 古典的 X クライアント 7.8.4. X ターミナルエミュレーター — xterm 7.8.5. X クライアントを root で実行 8. I18N と L10N 8.1. キーボード入力 8.1.1. IBus を使うインプットメソッドのサポート 8.1.2. 日本語の例 8.1.3. インプットメソッドを無効化 8.2. ディスプレー出力 8.3. ロケール 8.3.1. 符号化方式の基本 8.3.2. UTF-8 ロケールを使う根拠 8.3.3. ロケールの再設定 8.3.4. "$LANG" 環境変数の値 8.3.5. X Window の下でのみ特定ロケール 8.3.6. ファイル名の符号化方式 8.3.7. 地域化されたメッセージと翻訳された文書 8.3.8. ロケールの効果 9. システムに関するティップ 9.1. screen プログラム 9.1.1. screen(1) の使い方のシナリオ 9.1.2. screen コマンドのキーバインディング 9.2. データーの記録と表現 9.2.1. ログデーモン 9.2.2. ログアナライザー 9.2.3. シェルの活動を綺麗に記録 9.2.4. テキストデーターのカスタム化表示 9.2.5. 時間と日付のカスタム化表示 9.2.6. 着色化されたシェル出力 9.2.7. 着色化されたコマンド 9.2.8. 複雑な反復のためにエディターでの活動を記録 9.2.9. X アプリケーションの画像イメージの記録 9.2.10. 設定ファイルの変更記録 9.3. プログラム活動の監視と制御と起動 9.3.1. プロセスの時間計測 9.3.2. スケジューリングのプライオリティー 9.3.3. ps コマンド 9.3.4. top コマンド 9.3.5. プロセスによって開かれているファイルのリスト 9.3.6. プログラム活動の追跡 9.3.7. ファイルやソケットを使っているプロセスの識別 9.3.8. 一定間隔でコマンドを反復実行 9.3.9. ファイルに関してループしながらコマンドを反復実行 9.3.10. GUI からプログラムをスタート 9.3.11. スタートするプログラムのカスタム化 9.3.12. プロセスの停止 9.3.13. タスク1回実行のスケジュール 9.3.14. タスク定期実行のスケジュール 9.3.15. Alt-SysRq キー 9.4. システム管理ティップ 9.4.1. だれがシステム上にいる? 9.4.2. 全員への警告 9.4.3. ハードウエアーの識別 9.4.4. ハードウエアー設定 9.4.5. システムとハードウエアーの時間 9.4.6. ターミナルの設定 9.4.7. 音のインフラ 9.4.8. スクリーンセーバーの無効化 9.4.9. ブザー音の無効化 9.4.10. 使用メモリー 9.4.11. システムのセキュリティーと整合性のチェック 9.5. データー保存のティップ 9.5.1. ディスク空間の利用状況 9.5.2. ディスクパーティション設定 9.5.3. UUID を使ってパーティションをアクセス 9.5.4. LVM2 9.5.5. ファイルシステム設定 9.5.6. ファイルシステムの生成と整合性チェック 9.5.7. マウントオプションによるファイルシステムの最適化 9.5.8. スーパーブロックによるファイルシステムの最適化 9.5.9. ハードディスクの最適化 9.5.10. ソリッドステートドライブの最適化 9.5.11. SMART を用いたハードディスクの破壊の予測 9.5.12. $TMPDIR 経由で一時保存ディレクトリーを指定 9.5.13. LVM を使う使用可能なストレージ空間の拡張 9.5.14. 他パーティションをマウントする使用可能なストレージ空 間の拡張 9.5.15. 他ディレクトリをバインドマウントする使用可能なストレ ージ空間の拡張 9.5.16. シムリンクを使う使用可能なストレージ空間の拡張 9.5.17. overlayfsを使う使用可能なストレージ空間の拡張 9.6. ディスクイメージ 9.6.1. ディスクイメージの作成 9.6.2. ディスクに直接書込み 9.6.3. ディスクイメージファイルをマウント 9.6.4. ディスクイメージのクリーニング 9.6.5. 空のディスクイメージ作成 9.6.6. ISO9660 イメージファイル作成 9.6.7. CD/DVD-R/RW に直接書込み 9.6.8. ISO9660 イメージファイルをマウント 9.7. バイナリーデーター 9.7.1. バイナリーデーターの閲覧と編集 9.7.2. ディスクをマウントせずに操作 9.7.3. データーの冗長性 9.7.4. データーファイルの復元と事故の証拠解析 9.7.5. 大きなファイルを小さなファイルに分割 9.7.6. ファイル内容の消去 9.7.7. ダミーファイル 9.7.8. ハードディスクの全消去 9.7.9. ハードディスク未使用部分の全消去 9.7.10. 削除されたがまだオープン中のファイルの復活法 9.7.11. 全てのハードリンクを検索 9.7.12. 見えないディスクスペースの消費 9.8. データー暗号化ティップ 9.8.1. dm-crypt/LUKS を使ったリムーバブルディスクの暗号化 9.8.2. dm-crypt を使って swap パーティションを暗号化 9.8.3. dm-crypt/LUKS で暗号化されたディスクのマウント 9.8.4. eCryptfs を使って自動的にファイルを暗号化 9.8.5. eCryptfs を自動的にマウント 9.9. カーネル 9.9.1. Linux カーネル 2.6/3.x 9.9.2. カーネル変数 9.9.3. カーネルヘッダー 9.9.4. カーネルと関連モジュールのコンパイル 9.9.5. カーネルソースのコンパイル: Debian カーネルチーム推奨 9.9.6. ハードウエアードライバーとファームウエアー 9.10. 仮想化システム 9.10.1. 仮想化ツール 9.10.2. 仮想化の業務フロー 9.10.3. 仮想ディスクイメージファイルをマウント。 9.10.4. Chroot システム 9.10.5. 複数のデスクトップシステム 10. データー管理 10.1. 共有とコピーとアーカイブ 10.1.1. アーカイブと圧縮ツール 10.1.2. コピーと同期ツール 10.1.3. アーカイブの慣用句 10.1.4. コピーの慣用句 10.1.5. ファイル選択の慣用句 10.1.6. アーカイブメディア 10.1.7. リムーバブルストレージデバイス 10.1.8. データー共有用のファイルシステム選択 10.1.9. ネットワーク経由でのデーター共有 10.2. バックアップと復元 10.2.1. バックアプユーティリティーのスイート 10.2.2. システムバックアップ用スクリプトの例 10.2.3. データーバックアップ用コピースクリプト 10.3. データーセキュリティーのインフラ 10.3.1. Gnupg のためのキー管理 10.3.2. GnuPG をファイルに使用 10.3.3. Mutt で GnuPG を使用 10.3.4. Vim で GnuPG を使用 10.3.5. MD5 和 10.4. ソースコードマージツール 10.4.1. ソースファイル間の相違の抽出 10.4.2. ソースファイルに更新をマージ 10.4.3. 3方マージによる更新 10.5. バージョンコントロールシステム 10.5.1. VCS コマンドの比較 10.6. Git 10.6.1. Git クライアントの設定 10.6.2. Git リファレンス 10.6.3. Git コマンド 10.6.4. Subversion レポジトリー用の Git 10.6.5. 設定履歴記録のための Git 10.7. CVS 10.7.1. CVS レポジトリーの設定 10.7.2. CVS へのローカルアクセス 10.7.3. pserver を使った CVS へのリモートアクセス 10.7.4. ssh を使った CVS へのリモートアクセス 10.7.5. 新規ソースを CVS にインポート 10.7.6. CVS レポジトリーのファイルパーミッション 10.7.7. CVS のワークフロー 10.7.8. CVS から最新ファイル 10.7.9. CVS の管理運営 10.7.10. CVS チェックアウトの実行ビット 10.8. Subversion 10.8.1. Subversion レポジトリーの設定 10.8.2. Apach2 サーバーの経由の Subversion アクセス 10.8.3. グループによる Subversion へのローカルアクセス 10.8.4. グループによる Subversion への SSH 経由のリモートアク セス 10.8.5. Subversion ディレクトリー構造 10.8.6. 新規ソースを Subversion にインポート 10.8.7. Subversion のワークフロー 11. データー変換 11.1. テキストデーター変換ツール 11.1.1. テキストファイルを iconv を使って変換 11.1.2. ファイルが UTF-8 であると iconv を使い確認 11.1.3. iconv を使ってファイル名変換 11.1.4. 行末変換 11.1.5. タブ変換 11.1.6. 自動変換付きエディター 11.1.7. プレーンテキスト抽出 11.1.8. プレーンテキストデーターをハイライトとフォーマット 11.2. XML データー 11.2.1. XML に関する基本ヒント 11.2.2. XML 処理 11.2.3. XML データー抽出 11.3. タイプセッティング 11.3.1. roff タイプセッティング 11.3.2. TeX/LaTeX 11.3.3. マニュアルページを綺麗に印刷 11.3.4. マニュアルページの作成 11.4. 印刷可能データー 11.4.1. Ghostscript 11.4.2. 2つの PS や PDF ファイルをマージ 11.4.3. 印刷可能データーユーティリティー 11.4.4. CUPS を使って印刷 11.5. メールデーター変換 11.5.1. メールデーターの基本 11.6. グラフィクスデーターツール 11.7. その他のデーター変換 12. プログラミング 12.1. シェルスクリプト 12.1.1. POSIX シェル互換性 12.1.2. シェル変数 12.1.3. シェル条件式 12.1.4. シェルループ 12.1.5. シェルコマンドライン処理シーケンス 12.1.6. シェルスクリプトのためのユーティリティープログラム 12.1.7. シェルスクリプトダイアログ 12.1.8. zenity を使うシェルスクリプト例 12.2. Make 12.3. C 12.3.1. 単純な C プログラム (gcc) 12.4. デバグ 12.4.1. 基本的な gdb 実行 12.4.2. Debian パッケージのデバグ 12.4.3. バックトレースの収集 12.4.4. 上級 gdb コマンド 12.4.5. X エラーのデバグ 12.4.6. ライブラリーへの依存の確認 12.4.7. メモリーリーク検出ツール 12.4.8. 静的コード分析ツール 12.4.9. バイナリーのディスアッセンブリー 12.5. Flex — 改良版 Lex 12.6. Bison — 改良版 Yacc 12.7. Autoconf 12.7.1. プログラムをコンパイルとインストール 12.7.2. プログラムのアンインストール 12.8. 究極の短い Perl スクリプト 12.9. ウェッブ 12.10. ソースコード変換 12.11. Debian パッケージ作成 A. 補遺 A.1. Debian 迷路 A.2. 著作権の経緯 A.3. 文書のフォーマット 表の一覧 1.1. 興味あるテキストモードのプログラムパッケージのリスト 1.2. 有用な文書パッケージのリスト 1.3. 重要ディレクトリーの使い方のリスト 1.4. "ls -l" の出力の最初の文字のリスト 1.5. chmod(1) コマンドで用いられるファイルパーミッションの数字モード 1.6. umask 値の例 1.7. ファイルアクセスのためにシステムが供給する特記すべきグループのリ スト 1.8. 特定コマンド実行のためにシステムが供給する特記すべきグループのリ スト 1.9. タイムスタンプのタイプのリスト 1.10. スペシャルなデバイスファイルのリスト 1.11. MC のキーバインディング 1.12. enter キー入力への MC の反応 1.13. シェルプログラムのリスト 1.14. Bash のキーバインディングのリスト 1.15. Unix 流のマウス操作 1.16. 基本の Unix コマンドのリスト 1.17. ロケールの値の3つの部分 1.18. 推奨ロケールのリスト 1.19. "$HOME" の値のリスト 1.20. シェルグロブパターン 1.21. コマンドの終了コード 1.22. シェルコマンドの慣用句 1.23. 事前定義されたファイルデスクリプタ 1.24. BRE と ERE のメタ文字 1.25. 置換式 1.26. コマンドをパイプするためのスクリプト断片 2.1. Debian のパッケージ管理ツールのリスト 2.2. Debian アーカイブサイトのリスト 2.3. Debian アーカイブエリアのリスト 2.4. スイーツとコード名の関係 2.5. 特定パッケージの問題解決のためのキーとなるウェッブサイトのリスト 2.6. aptitude(8) や apt-get(8) /apt-cache(8) を使うコマンドラインによ る基本パッケージ管理操作 2.7. aptitude(8) に関する特記すべきコマンドオプション 2.8. aptitude のキーバインディングのリスト 2.9. aptitude の表示のリスト 2.10. 標準パッケージ画面の分類 2.11. aptitude の regex 式のリスト 2.12. パッケージアクティビティーのログファイル 2.13. 高度なパッケージ管理操作 2.14. Debian アーカイブのメタデーターの内容 2.15. Debian パッケージの名前の構造 2.16. Debian パッケージ名の各部分に使用可能な文字 2.17. dpkg が作成する特記すべきファイル 2.18. apt-pinning テクニックに関する特記すべき Pin-Priority 値をリス トします。 2.19. Debian アーカイブ専用のプロキシツールのリスト 3.1. ブートローダーのリスト 3.2. GRUB パラメーターの意味 3.3. Debian システムののブートユーティリティーのリスト 3.4. ランレベルとその用途説明のリスト 3.5. カーネルエラーレベルのリスト 4.1. 3つの pam_unix(8) に関する重要な設定ファイル 4.2. "/etc/passwd" の2番目のエントリーの内容 4.3. アカウント情報を管理するコマンドのリスト 4.4. パスワード生成ツールのリスト 4.5. 特記すべき PAM と NSS システムのリスト 4.6. PAM NSS によりアクセスされる設定ファイルのリスト 4.7. インセキュアーとセキュアーのサービスとポートのリスト 4.8. 追加セキュリティー策を提供するツールのリスト 5.1. GUI のネットワーク設定ツール 5.2. ネットワークアドレス範囲のリスト 5.3. 典型的なネットワーク接続方法と接続経路のリスト 5.4. ネットワーク接続設定のリスト 5.5. ネットワーク接続の省略語のリスト 5.6. pppconfig を使っての PPP 接続のための設定ファイルのリスト 5.7. wvdialconf で PPP 接続する際の設定ファイルリスト 5.8. pppoeconf を用いて PPPoE 接続する際の設定ファイルのリスト 5.9. ifupdown を使う基本的なネットワーク設定コマンドのリスト 5.10. "/etc/network/interfaces" のスタンザのリスト 5.11. WLAN の略語のリスト 5.12. ネットワークデバイスの用語法のリスト 5.13. ifupdown を使う上級ネットワーク設定コマンドのリスト 5.14. ifupdown システムが引き渡す環境変数のリスト 5.15. 型遅れとなった net-tools コマンドと新しい iproute2 コマンド等と の翻訳表 5.16. 低レベルネットワークコマンドのリスト 5.17. ネットワーク最適化ツールのリスト 5.18. 最適 MTU 値の基本的なガイドライン 5.19. ファイアーウォールツールのリスト 6.1. ウェッブブラウザーのリスト 6.2. ブラウザープラグインのリスト 6.3. ワークステーションでの基本的メールトランスポートエージェント関連 パッケージのリスト 6.4. Debian アーカイブ中のメールトランスポートエージェント (MTA) パッ ケージに関する選択肢リスト 6.5. 重要 postfix マニュアルページのリスト 6.6. メールアドレス関連のファイルのリスト 6.7. 基本的 MTA 操作のリスト 6.8. メールユーザーエージェント (MUA) のリスト 6.9. リモートメールの取得および転送ユーティリティーのリスト 6.10. フィルター付きの MDA のリスト 6.11. POP3/IMAP サーバーのリスト 6.12. プリントサーバーとユーティリティーのリスト 6.13. リモートアクセスサーバーとユーティリティーのリスト 6.14. SSH の認証プロトコルと方法のリスト 6.15. SSH 設定ファイルのリスト 6.16. SSH クライアント起動例のリスト 6.17. 他のプラットフォーム上で使えるフリーな SSH クライアントのリスト 6.18. 他のネットワークアプリケーションサーバー 6.19. 他のネットワークアプリケーションクライアント 6.20. よく使われる RFC のリスト 7.1. X Window のためのキーとなる (メタ)パッケージのリスト 7.2. サーバー/クライアントの用語法のリスト 7.3. X サーバーへの接続方法のリスト 7.4. X Window フォントシステムをサポートするパッケージのテーブル 7.5. PostScript Type 1 フォントへの対応表 7.6. TrueType フォントへの対応表 7.7. CJK フォント名中でフォントタイプを示すために使われるキーワード表 7.8. 基本的な X オフィスアプリケーションのリスト 7.9. 基本的 X ユーティリティーアプリケーションのリスト 7.10. 基本的 X 選択プログラムのリスト 8.1. IBus を用いるインプットメソッドサポートのリスト 9.1. ネットワーク切断の中断をサポートするプログラムのリスト 9.2. screen キーバインディングのリスト 9.3. システムログアナライザーのリスト 9.4. wheezy での "ls -l" コマンドによる時間と日付の表示例 9.5. 画像の操作ツールのリスト 9.6. VCS 中に設定の履歴を記録するパッケージのリスト 9.7. プログラム活動の監視と制御のツールのリスト 9.8. スケジューリングのプライオリティーのためのナイス値のリスト 9.9. ps コマンドのスタイルのリスト 9.10. kill コマンドが良く使うシグナルのリスト 9.11. SAK コマンドキーのリスト 9.12. ハードウエアー識別ツールのリスト 9.13. ハードウエアー設定ツールのリスト 9.14. サウンドパッケージのリスト 9.15. スクリーンセーバーを無効にするコマンドのリスト 9.16. レポートされるメモリーサイズのリスト 9.17. システムセキュリティーや整合性確認のためのツールリスト 9.18. ディスクパーティション管理パッケージのリスト 9.19. ファイルシステム管理用パッケージのリスト 9.20. バイナリーデーターを閲覧や編集するパッケージのリスト 9.21. ディスクをマウントせずに操作するパッケージのリスト 9.22. ファイルにデーターの冗長性を追加するツールのリスト 9.23. データーファイルの復元と事故の証拠解析のリスト 9.24. データー暗号化ユーティリティーのリスト 9.25. Debian システム上でカーネルの再コンパイルためにインストールする 重要パッケージのリスト 9.26. 仮想化ツールのリスト 10.1. アーカイブと圧縮ツールのリスト 10.2. コピーと同期ツールのリスト 10.3. 典型的な使用シナリオに合わせたリムーバブルストレージデバイスの ファイルシステムの選択肢のリスト 10.4. 典型的使用シナリオの場合のネットワークサービスの選択のリスト 10.5. バックアップスイートのユーティリティーのリスト 10.6. データーセキュリティーインフラツールのリスト 10.7. キー管理のための GNU プライバシガードコマンドのリスト 10.8. トラストコードの意味のリスト 10.9. ファイルに使用する GNU プライバシーガードコマンドのリスト 10.10. ソースコードマージツールのリスト 10.11. バージョンコントロールシステムツールのリスト 10.12. 本来の VCS コマンドの比較 10.13. git 関連のパッケージとコマンドのリスト 10.14. CVS コマンドの特記すべきオプション (cvs(1) の最初の引数として 使用) 10.15. Subversion コマンドの特記すべきオプション (svn(1) の最初の引数 として使用) 11.1. テキストデーター変換ツールのリスト 11.2. 符号化方式値とその使い方リスト 11.3. 異なるプラットフォーム上での行末スタイルのリスト 11.4. bsdmainutils と coreutils パッケージ中のタブ変換コマンドのリス ト 11.5. プレーンテキストデーター抽出ツールのリスト 11.6. プレーンテキストデーターをハイライトするツールのリスト 11.7. XML で事前定義されているエントリーのリスト 11.8. XML ツールのリスト 11.9. DSSLツールのリスト 11.10. テキストデーター変換ツールのリスト 11.11. XML整形印刷ツールのリスト 11.12. タイプ設定ツールのリスト 11.13. マンページ作成を補助するパッケージのリスト 11.14. Ghostscript PostScript インタープリタのリスト 11.15. プリントできるデーターのユーティリティーのリスト 11.16. メールデーター変換を補助するパッケージのリスト 11.17. 画像データーツールのリスト 11.18. その他のデーター変換ツールのリスト 12.1. プログラムをすることを補助するパッケージのリスト 12.2. 典型的 bashizms のリスト 12.3. シェル変数のリスト 12.4. シェル変数展開のリスト 12.5. 重要なシェル変数置換のリスト 12.6. 条件式中のファイル比較オペレーター 12.7. 条件式中での文字列比較オペレータのリスト 12.8. シェルスクリプト用の小さなユーティリティープログラムを含むパッ ケージのリスト 12.9. ユーザーインターフェースプログラムのリスト 12.10. make の自動変数のリスト 12.11. make 変数の展開のリスト 12.12. 上級 gdb コマンドのリスト 12.13. メモリーリーク検出ツールのリスト 12.14. 静的コード分析ツールのリスト 12.15. Yacc 互換の LALR パーサー生成ソフトのリスト 12.16. ソースコード変換ツールのリスト 序章 目次 1. 免責事項 2. Debian とはなにか 3. 本書について 3.1. 編集指針 3.2. 前提条件 3.3. 文書様式 3.4. ポプコン 3.5. パッケージサイズ 3.6. 本書へのバグ報告 4. 新規ユーザーへの引用文 このDebian リファレンス (第 2 版) (2016-10-17 13:30:31 UTC) はシステ ムインストール後のユーザー向け案内書として Debian のシステム管理に関 する概論の提供を目指しています。 本書が対象とする読者は、 GNU/Linux システムがどう機能するかを理解する のに、シェルスクリプトぐらいは学ぶ気はあるが、全ての C のソースまで読 む気がない人です。 インスト─ルの方法は、以下を参照ください: * 現行安定システム用 Debian GNU/Linux インストールガイド * 現行テスティング(testing)システム用 Debian GNU/Linux インストール ガイド 1. 免責事項     一切保証は致しません。全ての商標はそれぞれの商標の所有者の財産で す。 Debian システム自体は動く標的です。このため最新状況を反映した正確     な記述は困難です。現行の不安定版の Debian システムを用いて本書は 記していますが、皆様が読まれる時点ではすでに記載内容が古くなって いるでしょう。 本書はあくまで二次的参考文献として扱って下さい。本書は正式の案内     書を置き換えません。著者及び本書への貢献者は本書中の誤謬や欠落や 曖昧さが引き起こす結果に一切責任を負いません。 2. Debian とはなにか Debian プロジェクトはフリーなオペレーティングシステムを作ろうとい     う共通目的を持った個人の集団です。そのディストリビューションは次 の特徴があります。 * ソフトウェアの自由へのコミットメント: Debian 社会契約と Debian フリーソフトウエアーガイドライン (DFSG) * インターネット上の分散型の無償ボランティア活動: http:// www.debian.org * 多数のプリコンパイルされた高品質のソフトウエアー     * セキュリティーアップデートへの平易なアクセス提供による、安定 性とセキュリティーの重視 * 不安定版 unstable やテスト版 testing アーカイブによる、最新の ソフトウエアーへの円滑なアップグレードの重視 * 多数のサポートされたハードウエアーアーキテクチャー Debian の中のフリーソフトウエアー構成要素は、GNU や Linux や BSD や X や ISC や Apache や Ghostscript や Common Unix Printing System や Samba や GNOME や KDE や Mozilla や LibreOffice や Vim や TeX や LaTeX や DocBook や Perl や Python や Tcl や Java や     Ruby や PHP や Berkeley DB や MariaDB や PostgreSQL や Exim や Postfix や Mutt や FreeBSD や OpenBSD や Plan 9 やその他の多くの 独立のフリーソフトウエアーのプロジェクトに由来します。Debian はこ の多種多様なフリーソフトウエアーを 1つのシステムにまとめ上げます 。 3. 本書について 3.1. 編集指針     本書の作成にあたり次の編集指針を守りました。 * 概論を提供し枝葉末節は省略します。(全体像) * 簡潔を心がけました。(KISS)     * 車輪の再発明をしません。(既存の参考文献へのポインターの利用) * 非 GUI ツールとコンソールを重視します。(シェル例示を使用) * 客観的であるようにします。(ポプコン等の利用) ヒント     私はシステムの階層的側面やシステムの低レベルを明らかにしようとし ました。 3.2. 前提条件 警告     本文書だけに頼らず自分で答えを見出す努力をしっかりすることを期待 します。本文書は効率的なスタートポイントを提供するだけです。     一義的情報源から自分自身で解決策を探し出すべきです。 * The Debian Administrator's Handbook * 一般的情報は http://www.debian.org にある Debian サイト * "/usr/share/doc/" ディレクトリー下にある文書 * Unix スタイルのマンページ: "dpkg -L |grep '/ man/man.*/'" * GNU スタイルの info ページ: "dpkg -L |grep '/ info/'"     * バグレポート: http://bugs.debian.org/ * 変化中の事や特定案件に関しては、http://wiki.debian.org/ にあ る Debian の Wiki * http://tldp.org/ にある Linux 文書プロジェクト (TLDP) の HOWTO 文書 * http://www.unix.org/ にある Open Group の The UNIX System Home Page 中の Single UNIX Specification * http://www.wikipedia.org/ にある Wikipedia のフリーの百科事典 注記     詳細な文書を読むには、"-doc" をサフィクスとする対応する文書パッケ ージをインストールする必要があるかもしれません。 3.3. 文書様式     bash(1) シェルコマンドの例示をする次のような簡略化した表現スタイ ルで本書は情報を提供します。     # $ <ユーザーアカウントからのコマンド> これらのシェルプロンプトは使われるアカウントを区別します。これは     ちょうど環境変数として: "PS1='\$'" と "PS2=' '" を設定した場合に 相当します。これらの環境変数値はあくまで本書の読みやすさのためで 、実際のインストール済みシステではほとんど見かけません。 注記     "PS1='\$'" と "PS2=' '" という環境変数値の意味は bash(1) を参照下 さい。 システム管理者が行うべきアクションは命令文で書かれています: 例え     ば、「シェルに各コマンド文字列をタイプ後毎にエンターキーをタイプ します。」 (必ずしも「〜しましょう。」とはせず簡潔に訳しています 。) 英語では、テーブル中の説明や類似のコラムには、パッケージ説明の慣 習に従い、定冠詞抜も不定冠詞も抜きの名詞句が入ります。これらには 、マンページのコマンドの短い説明の慣習に従った頭の "to" 抜きの不     定詞句が代わりに名詞句として入ることもあります。変だなとお考えの 方もあるとは存じますが、これは本文書をできるだけ簡潔にするための 著者の恣意的な文体の選択です。(対応部分を文切り型の名詞句的表現に 訳しています。) 注記     コマンド名を含めて固有名詞はその位置によらず大文字・小文字の区別 を保持します。 本文中に引用されるコマンドの断片はダブルクォーテションマーク間に     タイプライターフォントで書き "aptitude safe-upgrade" のように表現 されます。 本文中に設定ファイルから引用された文字データーはダブルクォーテシ     ョンマーク間にタイプライターフォントで書き "deb-src" のように表現 されます。 コマンドはその名前をタイプライターフォントで書き、場合によっては     その後ろにマンページのセクション番号を括弧中に入れて書き bash(1) のように表現されます。読者は次の様にタイプして情報を得るように心 がけて下さい。     $ man 1 bash マンページはその名前をタイプライターフォントで書き、その後ろにマ     ンページのセクション番号を括弧中に入れて書き sources.list(5) のよ うに表現されます。読者は次の様にタイプして情報を得るように心がけ て下さい。     $ man 5 sources.list info ページはダブルクォーテションマーク間にタイプライターフォント     というコマンドの断片形式で書き "info make" のように表現されます。 読者は次の様にタイプして情報を得るように心がけて下さい。     $ info make ファイル名はダブルクォーテションマーク間にタイプライターフォント     で書き "/etc/passwd" のように表現されます。読者は次の様にタイプし て情報を得るように心がけて下さい。     $ sensible-pager "/etc/passwd" ディレクトリー名はダブルクォーテションマーク間にタイプライターフ     ォントで書き "/etc/init.d/" のように表現されます。読者は次の様に タイプして情報を得るように心がけて下さい。     $ mc "/etc/init.d/" パッケージ名はその名をタイプライターフォントで書き "vim" のように     表現されます。読者は次の様にタイプして情報を得るように心がけて下 さい。 $ dpkg -L vim     $ apt-cache show vim $ aptitude show vim 文書は、その場所のファイル名でダブルクォーテションマーク間にタイ プライターフォントで書き "/usr/share/doc/sysv-rc/     README.runlevels.gz" や "/usr/share/doc/base-passwd/ users-and-groups.html" のように表現されたり、その場所の URL で http://www.debian.org のように表現されます。読者は次の様にタイプ して情報を得るように心がけて下さい。 $ zcat "/usr/share/doc/sysv-rc/README.runlevels.gz" | sensible-pager     $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html" $ sensible-browser "http://www.debian.org" 環境変数は、頭に "$" がついた名前をダブルクォーテションマーク間に     タイプライターフォントで書き、"$TERM" のように表現されます。読者 は次の様にタイプして情報を得るように心がけて下さい。     $ echo "$TERM" 3.4. ポプコン ポプコンのデーターは各パッケージの客観的人気の指標として提示され     います。それがダウンロードされた日付は 2016-10-17 13:22:37 UTC で 、 158117 を越すバイナリーパッケージ数と 25 のアーキテクチャーに またがる 193692 つの提出レポートからなります。 注記     amd64 の不安定版 unstable アーカイブは現在高々 53262 つのパッケー ジしか含みません。ポプコンデーターは多くの旧式設置システムからの レポートを含みます。 "votes" を意味する "V:" が前についたポプコンの数は "1000 * (PC で     最近実行されたパッケージに関するポプコン提出)/(全ポプコン提出)" として計算される。 "installs" を意味する "I:" が前についたポプコンの数は "1000 * (PC     にインストールされているパッケージに関するポプコン提出)/(全ポプコ ン提出)" として計算される。 注記 Popcon の数字はパッケージの重要性の絶対指標と考えるべきでません。     統計を曲げる多くの因子があります。例えば、Popcon に参加しているシ ステムの一部は "/bin" などのディレクトリーをシステム性能向上のた めに "noatime" オプションでマウントすることで当該システムから "vote" することを実質的に禁止しているかもしれません。 3.5. パッケージサイズ 各パッケージの客観的指標としてパッケージサイズデーターも提供され ます。それは "apt-cache show" や "aptitude show" コマンドが ( 現     在の amd64 アーキテクチャー上の unstable リリース上で) 表示する "Installed-Size:" です。サイズは KiB (Kibibyte = 1024 バイト単位) で表示されます。 注記     小さなパッケージサイズのパッケージは unstable リリース中の当該パ ッケージが内容のある他パッケージを依存関係でインストールするため のダミーパッケージだからかもしれません。 注記     "(*)" が後ろについたパッケージのサイズは、unstable リリース中にパ ッケージが無く experimental リリース中のパッケージサイズが代用さ れたことを示します。 3.6. 本書へのバグ報告 何かこの文書に問題を発見した場合には、debian-reference パッケージ     に対して reportbug(1) を用いてバグ報告をして下さい。プレーンテキ ストバージョンかソースに対する "diff -u" による修正提案を含めて下 さい。 4. 新規ユーザーへの引用文     新規ユーザーを啓蒙する Debian のメーリングリストで見つけた興味深 い引用文を記します。 * "This is Unix. It gives you enough rope to hang yourself." 「 これは Unix です。首を括るのに十分なロープをあてがってくれま すよ。」 --- Miquel van Smoorenburg     * "Unix IS user friendly... It's just selective about who its friends are." 「 Unix はユーザーフレンドリー ( 使う人に優し い) です... 誰にフレンドリー ( 優しく) にするかの人見知りする だけです。」 --- Tollef Fog Heen     ウイキペディアの "Unix philosophy" という記事に、おもしろい格言集 があります。 第1章 GNU/Linux チュートリアル コンピューターシステムを学ぶことは新しい外国語を学ぶことに似てい     ると考えます。チュートリアルブックは有用ですが、実際に自ら使って 学ぶことが必要です。円滑なスタートが出きるように、いくつかの基本 的なポイントを説明します。 Debian GNU/Linux の強力なデザインはマルチユーザー、マルチタスクと     いう Unix オペレーティングシステムに由来します。これら Unix と GNU/Linux の特徴や類似点の強力さを活用することを覚えましょう。     Unix 対象の文書を避けたり、GNU/Linux に関する文書だけに頼ることは 、有用な情報を見逃すことになるので止めましょう。 注記     Unix 的システムをコマンドラインツールで少々使った経験があれば、私 がここで説明することはすべてご存知でしょう。リアリティーチェック と記憶を呼び戻すのにこれを使って下さい。 1.1. コンソールの基礎 1.1.1. シェルプロンプト X Window システムを gdm3 等のディスプレーマネージャーとともにイン     ストールした場合以外には、システム起動の際に文字の login スクリー ンが現れます。あなたのホスト名が foo と仮定すると、login プロンプ トは次に示すような見えます。     foo login: GNOME や KDE のような GUI 環境をインストールした場合には、     Ctrl-Alt-F1 とすることで login プロンプトが出て、Alt-F7 とするこ とで GUI 環境に戻れます (詳細は下記の「仮想コンソール」参照下さ い)。 login プロンプトであなたのユーザー名 (例えば penguin) を打鍵し     Enter キーを押します。さらにあなたのパスワードを打鍵し Enter キー を再び押します。 注記 Unix の伝統に従い、Debian システムではユーザー名とパスワードに関     して大文字小文字の区別をします。ユーザー名は通常小文字のみから選 ばれます。最初のユーザーアカウントは通常インストールの際に作られ ます。追加のユーザーアカウントは root によって adduser(8) を用い て作られます。 "/etc/motd" (本日のメッセージ: Message Of The Day) に保存されてい     る歓迎メッセージとコマンドプロンプトを表示しシステムが起動されま す。 Debian GNU/Linux jessie/sid foo tty1 foo login: penguin Password: Last login: Mon Sep 23 19:36:44 JST 2013 on tty3 Linux snoopy 3.11-1-amd64 #1 SMP Debian 3.11.6-2 (2013-11-01) x86_64     The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. foo:~$ ここで、Debian GNU/Linux システムがフリーソフトウエアーで無保証で     あるという、歓迎メッセージの主要部分は "/etc/motd.tail" ファイル を編集することでカスタム化できます。最初の行は "uname -snrvm" 用 いたシステム情報から生成されます。     これであなたはシェルの中にいます。シェルはあなたからのコマンドを 解釈します。 1.1.2. X の下でのシェルプロンプト インストールの際に "Desktop environment" タスクを選定し GNOME の gdm3 とともに X Window システムをインストールした場合には、システ     ムの起動するとグラフィカルな login プロンプトのスクリーンが表示さ れます。あなたのユーザー名とパスワードを入力することで非特権ユー ザーアカウントに login できます。タブ (tab) を用いたりマウスの第 一クリックを用いるとユーザー名とパスワードの間を行き来できます。 gnome-terminal(1) や rxvt(1) や xterm(1) のような     x-terminal-emulator プログラムを X の下で起動するとシェルプロンプ トが得られます。GNOME デスクトップ環境下では、"Applications" → "Accessories" → "Terminal" とクリックしてもうまくいきます。     次の「仮想コンソール」も参照下さい。 デスクトップ環境 (例えば fluxbox) 次第ではメニューの起点がよく分     からないことがあります。そんな時はデスクトップスクリーンの背景を (右)クリックしてメニューが表示されることを期待しましょう。 1.1.3. root アカウント     root アカウントはスーパーユーザーとか特権ユーザーとも呼ばれます。 このアカウントからは次のようなシステム管理活動ができます。 * ファイルパーミッションによらずシステム上の任意ファイルに関し ての、読出し・書込み・削除 * システム上のいかなるファイルに関して、ファイルの所有者やパー     ミッション設定 * システム上の非特権ユーザーのパスワードを設定 * パスワード無しに任意アカウントへの login     root アカウントの権限を使うには、この無制限の権限ゆえ配慮と責任あ る行動が求められます。 警告     root のパスワードを他人に決して教えてはいけません。 注記 ファイル (Debian システムにとってはファイルの一種である CD-ROM 等 のハードウエアーデバイスも含む) パーミッションは、非 root ユーザ     ーによるそのファイルの使用やアクセスをできなくなくすることがあり ます。この様な状況の下では root アカウントを使うことが簡便なテス ト法ですが、問題解決はファイルパーミッションとユーザーのグループ のメンバーシップを適正に設定する必要があります (「ファイルシステ ムのパーミッション」参照下さい)。 1.1.4. root シェルプロンプト     root のパスワードを使って root のシェルプロンプトを使えるようにす る基本的な方法を次に記します。 * 文字ベースのログインプロンプトに root と入力します。 * GNOME デスクトップ環境下で、"Applications" → "Accessories" → "Root Terminal" とクリックします。     * どのユーザーシェルプロンプトからでも "su -l" と入力します。 + 現ユーザーの環境を一切引き継がません。 * どのユーザーシェルプロンプトからでも "su" と入力します。 + 現ユーザーの環境を一部引き継ぐ。 1.1.5. GUI のシステム管理ツール デスクトップのメニューが GUI のシステム管理ツールを適切な権限とと もに自動的に起動しない場合、gnome-terminal(1) や rxvt(1) や xterm     (1) のような X ターミナルエミュレーターの root シェルプロンプトか ら起動できます。「root シェルプロンプト」 and 「X クライアントを root で実行」を参照下さい。 警告     gdm3(1) 等のディスプレーマネージャーのプロンプトに root と入力し て、X ディスプレー / セッションマネージャーを root アカウントのも とで決して起動してはいけません。 警告     クリチカルな情報が表示されている際には、あなたの X スクリーンを覗 き見られるかもしれないのでリモートの信頼できない GUI プログラムを 決して実行してはいけません。 1.1.6. 仮想コンソール デフォールトの Debian システムでは、6つの切り替え可能な VT100 様 の文字コンソールが利用でき、Linux ホスト上で直接コマンドシェルを 起動できます。GUI 環境下でない場合は、Left-Alt-key と F1 — F6 の     中の一つのキーを同時に押すことで仮想コンソール間の切り替えができ ます。仮想ターミナルそれぞれに独立したアカウントでログインするこ とができ、。マルチユーザー環境を提供します。このマルチユーザー環 境は Unix の偉大な機能で、癖になります。 X Window システムの下では、Ctrl-Alt-F1 キーを押す、つまり     left-Ctrl-key と left-Alt-key と F1-key キーを同時に押すと文字コ ンソール1にアクセスできます。通常仮想コンソール7で実行されている X Window システムへは Alt-F7 を押すことにより戻れます。     これとは別の方法で、例えば仮想ターミナル1という今とは違う仮想ター ミナルへの変更がコマンドラインから出来ます。     # chvt 1 1.1.7. コマンドプロンプトからの退出方法 コマンドプロンプトで Ctrl-D、つまり left-Ctrl-key と d-key の同時 押しをするとシェルでのアクティビティーを終了できます。文字コンソ     ールの場合は、こうすると login プロンプト戻ります。これらのコント ロール文字は通常 "control D" と大文字を使って表記されますが、 Shift キーを押す必要はありません。また Ctrl-D に関する簡略表記 ^D も使われます。この代わりに "exit" とタイプすることができます。     x-terminal-emulator(1) にあっては、このようにすることで x-terminal-emulator のウィンドウが閉じることができます。 1.1.8. システムをシャットダウンする方法 ファイル操作の際にパーフォーマンス向上のためにメモリーへのデータ ーのキャッシュがされる他の現代的な OS と同様に、Debian システムで も電源を安全に切る前に適正なシャットダウン手順を取る必要がありま     す。これはすべてのメモリー上の変更を強制的にディスクに書き出しす ことで、ファイルの完全性を維持するためです。ソフトウエアー電源コ ントロールが利用できる場合、シャットダウン手続きはシステムの電源 を自動的に落とします。(これがうまくいかない時には、シャットダウン 手続きの後で数秒間電源ボタンを押す必要があるかもしれません。)     通常のマルチユーザーモードからのシステムのシャットダウンがコマン ドラインから出来ます。     # shutdown -h now     シングルユーザーモードからのシステムのシャットダウンがコマンドラ インから出来ます。     # poweroff -i -f この他に、"/etc/inittab" に "ca:12345:ctrlaltdel:/sbin/shutdown     -t1 -a -h now" と書かれていれば、Ctrl-Alt-Delete (left-Ctrl-key と left-Alt-Key と Delete の同時押し) を入力するシャットダウン方 法もあります。     「SSH 上のリモートシステムをシャットダウンする方法」を参照下さい 。 1.1.9. まともなコンソールの復元 例えば "cat " のような変な事をした後でスクリー ンが無茶苦茶になった場合、コマンドプロンプトに "reset" と入力して     下さい。このときコマンドを入力してもスクリーンには読み取れる表示 がされないかもしれません。"clear" とすればスクリーンが消去できま す。 1.1.10. 初心者向け追加パッケージの提案 デスクトップ環境タスク抜きの最小限インストレーション Debian シス テムですら基本的な Unix 機能は提供されますが、コマンドラインや     curses に基づく mc や vim 等のいくつかの文字ターミナルパッケージ を apt-get(8) を使って次のように追加インストールすることから始め ることを初心者にお薦めします。 # apt-get update     ... # apt-get install mc vim sudo ...     既にこれらのパッケージがインストールされている場合には、新しいパ ッケージはインストールされません。 表1.1 興味あるテキストモードのプログラムパッケージのリスト +---------------------------------------------------------------+ |パッケー|ポプコ|サイ | 説明 | | ジ | ン | ズ | | |--------+------+-----+-----------------------------------------| |mc |V:72, |1431 |テキストモードの全画面ファイルマネージャ | | |I:238 | |ー | |--------+------+-----+-----------------------------------------| |sudo |V:346,|2933 |ユーザーに限定的な root 権限を与えるプロ | | |I:702 | |グラム | |--------+------+-----+-----------------------------------------| | |V:127,| |Unix テキストエディター Vi IMproved (改良| |vim |I:390 |2366 |版 Vi)、プログラマーのためのテキストエデ |     | | | |ィター (標準版) | |--------+------+-----+-----------------------------------------| | |V:73, | |Unix テキストエディター Vi IMproved (改良| |vim-tiny|I:968 |1063 |版 Vi)、プログラマーのためのテキストエデ | | | | |ィター (軽量版) | |--------+------+-----+-----------------------------------------| |emacs25 |V:0, |19423|GNU プロジェクト Emacs、Lisp に基づく拡張| | |I:0 | |可能なテキストエディター | |--------+------+-----+-----------------------------------------| |w3m |V:269,|2289 |テキストモード WWW ブラウザー | | |I:840 | | | |--------+------+-----+-----------------------------------------| |gpm |V:14, |457 |テキストコンソール上の Unix 式のカットア | | |I:22 | |ンドペースト (daemon) | +---------------------------------------------------------------+     いくつかの参考資料を読むのも良いことです。 表1.2 有用な文書パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |--------------------+------+----+------------------------------| |doc-debian |I:858 |166 |Debian プロジェクトの文書、 | | | | |(Debian FAQ) 他 | |--------------------+------+----+------------------------------| |debian-policy |I:111 |3744|Debian ポリシーマニュアルと関 |     | | | |連文書 | |--------------------+------+----+------------------------------| |developers-reference|I:7 |1299|Debian 開発者のためのガイドラ | | | | |インと情報 | |--------------------+------+----+------------------------------| |maint-guide |I:5 |1011|Debian 新メンテナ向けガイド | |--------------------+------+----+------------------------------| |debian-history |I:1 |4895|Debian プロジェクトの歴史 | |--------------------+------+----+------------------------------| |debian-faq |I:843 |1277|Debian FAQ (よくある質問集) | +---------------------------------------------------------------+     これらのパッケージの一部を次のようにしてインストールします。     # apt-get install package_name 1.1.11. 追加のユーザーアカウント 次の練習のためにあなたのメインのユーザーアカウントを使いたくない     場合には、例えば fish という追加のユーザーアカウントを作成できま す。root シェルプロンプトで次のように入力します。     # adduser fish     すべての質問に返事をします。 こうすることで fish という名前の新規アカウントが作られます。練習     の後で、このユーザーとそのホームディレクトリーは次のようのすれば 削除できます。     # deluser --remove-home fish 1.1.12. sudo の設定 ラップトップ PC 上のデスクトップの Debian システム等のような典型 的単一ユーザーワークステーションでは次のような単純な sudo(8) の設     定をして、非特権ユーザー (例えば penguin) に管理者権限を (root パ スワードではなく) ユーザー自身のパスワードで与えることがよくあり ます。     # echo "penguin ALL=(ALL) ALL" >> /etc/sudoers     これに代え、次のようにして非特権ユーザー penguin にパスワード一切 無しに管理者権限を与えることもよくあります。     # echo "penguin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers     このトリックの使用は、単一ユーザーワークステーション上であなた自 身が管理者でユーザーである際のみに限るべきです。 警告     システムセキュリティー上非常に悪い事態を招くので、マルチユーザー ワークステーション上の通常ユーザーアカウントに対してこの様な設定 をしてはいけません。 注意     上記例のような penguin のパスワードとアカウントは root パスワード や root アカウント同様の保護が必要です。 注意     この文脈上の管理者権限はワークステーションに関するシステム管理業 務をする権限を与えられた人に属します。そのような権限と能力を持っ ていなければ、あなたの会社の管理部門の管理職や上司とはいえこのよ うな権限を与えてはいけません。 注記     特定デバイスや特定ファイルへのアクセスの権限を与えるには、sudo(8) をつかって得た root 権限を用いるのではなく、group を使って限定的 アクセス与えることを考えるべきです。 注記 sudo(8) を使ってもう少し工夫された注意深い設定をすれば、共有シス     テム上の他のユーザーに root パスワードを教えること無く限定的管理 権限を許可することができます。こうすることは、誰が何をしたかを明 らかにするので、複数の管理者がいるホストにおける責任の所在を明ら かにします。ただ、誰にもそんな権限を与えたく無いかもしれません。 1.1.13. お遊びの時間     非特権ユーザーアカウントを使う限り全くリスク無く Debian システム でお遊びをする準備万端です。 何故なら、たとえデフォールトのインストール後ですら Debian システ ムは非特権ユーザーがシステムに損害を与えられないように適正なファ     イルパーミッションが設定されているからです。もちろん悪用可能な穴 が残っているかもしれませんが、こんな問題まで心配する人はこのセク ションを読んでいるべきではなく、Securing Debian Manual を読むべき です。     Debian システムを Unix 的システムとして次に学びましょう: * 「Unix-like ファイルシステム」 (基本コンセプト) * 「ミッドナイトコマンダー (MC)」 (サバイバル手法)     * 「基本の Unix 的作業環境」 (基本手法) * 「シェルプロンプト」 (シェルのメカニズム) * 「Unix 的テキスト処理」 (文字処理手法) 1.2. Unix-like ファイルシステム GNU/Linux や他の Unix 的オペレーティングシステムでは、ファイルは     ディレクトリーに整理されています。すべてのファイルやディレクトリ ーは、"/"を根 (root) に持つ一本の大きな木 (ツリー) のようにアレン ジされています。 このようなファイルやディレクトリーはいくつかのデバイスに展開する ことができます。あるデバイス上にあるファイルシステムを大きなファ イルツリーにマウントするのに mount(8) が使われます。その逆に、そ れを切り離すのに umount(8) が使われます。最近の Linux カーネルで     は、mount(8) をオプションとともに用いると、ファイルツリーの一部を 別のところと結びつけたり、共有・非共有・従属・バインド不可として ファイルシステムをマウントもできます。各ファイルシステムごとの利 用可能なマウントオプションは "/share/doc/linux-doc-*/ Documentation/filesystems/" にあります。 Unix システム上のディレクトリーは、一部の他システム上ではフォルダ と呼ばれます。Unix システム上では "A:" のようなドライブというコン     セプトが無いこと覚えておいて下さい。単一のファイルシステムがあっ て、そこにすべてが含まれています。これは Windows と比べた際の大き な利点です。 1.2.1. Unix ファイルの基礎     Unix ファイルの基礎は以下です。 * ファイル名は大文字と小文字を区別します。"MYFILE" と "MyFile" は異なるファイルです。 * ルートディレクトリーはフィルシステムの根 (ルート、root) を意 味して、単に "/" と記載されます。これを root ユーザーのホーム ディレクトリー "/root" とは混同しないで下さい。 * 全てのディレクトリーには "/" 以外の文字・記号からなる名前がつ いています。ルートディレクトリーは例外で、その名前は "/" ("ス ラッシュ" とか "ルートディレクトリー" と読まれます) でその名 前を変えることはできません。 * 各ファイルやディレクトリーは、たどっていくとファイルに到達す るディレクトリーの列が示される、完全に記述したファイル名とか 絶対ファイル名とかパスにより指定されます。これらの3つの表現は 同義語です。 * 全ての完全に記述したファイル名は "/" ディレクトリーで始まり、 ファイル名中の各ディレクトリーやファイル名の間には "/" がはさ まります。最初の "/" はディレクトリー名です。その他の "/" は 、次のサブディレクトリーとの区別をします。そして最後には実際 のファイルの名前がきます。ちょっと混乱しそうですので、次の完 全に記述したファイル名の例をご覧下さい: "/usr/share/keytables     /us.map.gz"。一方このベース名である、"us.map.gz" だけをファイ ル名と呼ぶ人もあります。 * ルートファイルシステムは "/etc/" や "/usr/" のような複数の枝 を持ちます。これらのサブディレクトリーもまた "/etc/init.d/" や "/usr/local/" のように、さらにサブディレクトリーに枝別れし ます。これらの全体をまとめてディレクトリーツリーと呼びます。 絶対ファイル名はツリーの根元 ("/") から枝の先 (ファイル) まで の経路として考えることもできます。また、あたかもディレクトリ ーツリーをルートディレクトリー ("/") という単一人物の全直系に 広がる家系図のように人が話すのを聞いたことがあるでしょう。あ たかもそれぞれのサブディレクトリーに親があるとし、パスはファ イルの完全な祖先の系図のように表現します。ルートディレクトリ ーではない他の場所から始まる相対パスもあります。ディレクトリ ー "../" は親ディレクトリーを参照していることを覚えておきまし ょう。このような呼び方はディレクトリーのような構造を持つ他の 階層的ツリー状のデーター構造体でもよく使われます。 * ハードディスクのような物理デバイスに対応したパス名の要素は存 在しません。ここが、パス名に "C:\" のようなデバイス名が含まれ る RT-11 や CP/M や OpenVMS や MS-DOS や AmigaOS や Microsoft Windows と違う点です。(但し、通常のファイルシステム中に物理デ バイスを示すディレクトリー項目はあります。「ファイルシステム の内側」参照下さい。) 注記 ほとんど全ての文字や記号をファイル名中に使えますが、実際そうする ことは賢明ではありません。スペースやタブや改行や他の特殊文字: { }     ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $ はコマンドラインで特別 な意味を持つので避けるべきです。名前の中の単語間には、ピリオドや ハイフンや下線を選んで区別します。各語頭を "LikeThis" のように語 頭を大文字にすることもできます。経験を積んだ Linux のユーザーはフ ァイル名中にスペースが入ることを避けます。 注記     "root" (ルート) と言う言葉は "root ユーザー" と言う意味でも "ルー トディレクトリー" と言う意味でも使われます。それがいずれかは使わ れている文脈から明かです。 注記     パスと言う言葉は上述の完全に記述したファイル名に関して使われるば かりではなくコマンドサーチパスにも使われます。どちらの意味かは文 脈から明かです。 ファイル階層について詳細に学ぶ最も良い方法は、Filesystem     Hierarchy Standard ("/usr/share/doc/debian-policy/fhs/ fhs-2.3.txt.gz" や hier(7)) に記述されています。手始めとして次の 事実を覚えるべきです。 表1.3 重要ディレクトリーの使い方のリスト +---------------------------------------------------------+ |ディレクトリー| ディレクトリーの用途 | |--------------+------------------------------------------| |/ |ルートディレクトリー |     |--------------+------------------------------------------| |/etc/ |システム全体の設定ファイル | |--------------+------------------------------------------| |/var/log/ |システムのログファイル | |--------------+------------------------------------------| |/home/ |全ての非特権ユーザーのホームディレクトリー| +---------------------------------------------------------+ 1.2.2. ファイルシステムの内側 Unix の伝統に従い、Debian/Linux システムはハードディスクや他のス トレージデバイス上に存在する物理データーを表すファイルシステムを     提供し、コンソールスクリーンやリモートのシリアルコンソールなどの ハードウェアデバイスとの相互作用が "/dev/" の下に統一された形式で 表されています。 Debian/Linux システム上の、各々のファイルやディレクトリーや名前付 きパイプ (2つのプログラムがデーターを共有する方法) や物理デバイス は、それぞれの所有者 (owner) やデーターが所属するグループ (group) や最終アクセス時間などの付帯属性 (attribute) を記述する inode と     呼ばれるデーター構造を持ちます。 Debian GNU/Linux システムでの inode 構造の正確な定義を知るには、"/usr/include/linux/fs.h" をご 覧下さい。ほとんど全てをファイルシステム表現しようというアイデア は Unix の発明でしたし、現代的な Linux カーネルはこのアイデアを一 歩進めています。コンピューター上で実行されているプロセス情報さえ ファイルシステム中に見つけられます。 このような物理的実体と内部プロセスの抽象的かつ統一された表現は非 常にパワフルなので、多くの全く異なるデバイスに同じコマンドを使用     して同種の操作が行えます。実行中のプロセスに繋がった特殊なファイ ルにデーターを書き込むことでカーネルが如何に動作するかまで変更で きます。 ヒント     ファイルツリーや物理的実体の間の関係を確認する必要がある際には、 mount(8) を引数無しで実行して下さい。 1.2.3. ファイルシステムのパーミッション     Unix 的システムのファイルシステムのパーミッションは次の3つの影響 されるユーザーのカテゴリーのために定義されています。 * ファイルを所有するユーザー (user) (u)     * ファイルが所属するグループ (group) 中の他ユーザー (g) * "世界" や "全員" とも呼ばれる、全他ユーザー (other) (o)     ファイルでは、それぞれに対応するパーミッションは次のようになりま す。 * 読出し (read) (r) パーミッションはファイル内容確認を可能にし ます。     * 書込み (write) (w) パーミッションはファイル内容変更を可能にし ます。 * 実行 (execute) (x) パーミッションはファイルをコマンド実行を可 能にします。     ディレクトリーでは、対応するパーミッションはそれぞれ次のようにな ります。 * 読出し (read) (r) パーミッションはディレクトリー内容リストを 可能にします。     * 書込み (write) (w) パーミッションはディレクトリーへのファイル の追加削除を可能にします。 * 実行 (execute) (x) パーミッションはディレクトリー内のファイル へのアクセスを可能にします。 ここで、ディレクトリーに関する実行 (execute) パーミッションとはデ     ィレクトリー内のファイルへの読出しを許可するのみならず、サイズや 変更時間のようなアトリビュート閲覧を許可します。 ファイルやディレクトリーのパーミッション情報他を表示するには、ls     (1) が使われます。"-l" オプション付きでこれを実行すると、次の情報 がこの順序で表示されます。 * ファイルのタイプ (最初の文字) * ファイルのアクセスパーミッション (次の9文字。ユーザーとグルー プと他者の順にそれぞれに対して3文字から構成されている) * ファイルへのハードリンク数     * ファイルを所有するユーザー (user) の名前 * ファイルが所属するグループ (group) * ファイルのサイズ (文字数、バイト) * ファイルの日時 (mtime) * ファイルの名前 表1.4 "ls -l" の出力の最初の文字のリスト +-----------------------+ |文字| 意味 | |----+------------------| |- |通常ファイル | |----+------------------| |d |ディレクトリー | |----+------------------|     |l |シムリンク | |----+------------------| |c |文字デバイス名 | |----+------------------| |b |ブロックデバイス名| |----+------------------| |p |名前付きパイプ | |----+------------------| |s |ソケット | +-----------------------+ root アカウントから chown(1) を使用することでファイルの所有者を変 更します。ファイルの所有者又は root アカウントから chgrp(1) を使     用することでファイルのグループを変更します。ファイルの所有者又は root アカウントから chmod(1) を使用することでファイルやディレクト リーのアクセスパーミッションを変更します。foo ファイルの操作の基 本的文法は次の通り。 # chown foo     # chgrp foo # chmod [ugoa][+-=][rwxXst][,...] foo     例えば次のようにするとディレクトリーツリーの所有者をユーザー foo に変更しグループ bar で共有できます。 # cd /some/location/     # chown -R foo:bar . # chmod -R ug+rwX,o=rX .     更に特殊なパーミッションビットが3つ存在します。 * セットユーザー ID ビット (ユーザーの x に代えて s か S)     * セットグループ ID ビット (グループの x に代えて s か S) * スティッキビット (他ユーザーの x に代えて t か T)     ここで、これらのビットの "ls -l" のアウトプットはこれらの出力によ ってかくされた実行ビットが非設定 (unset) の場合大文字となります。 セットユーザー ID を実行ファイルにセットすると、ユーザーはファイ ルの所有者 ID (例えば、root) を使って実行ファイルを実行することを 許可されます。同様に、セットグループ ID を実行ファイルにセットす     ると、ユーザーはファイルのグループ ID (例えば、root) を使って実行 ファイルを実行することを許可されます。これらの設定はセキュリティ ーを破壊するリスクを引き起こすので、これらのビットを有効にするに は特別な注意が必要です。 セットグループ ID をディレクトリーに対して有効にすると、ディレク     トリーに作成した全ファイルがディレクトリーのグループに所属すると いう BSD 的ファイル生成手法が有効になります。 スティッキビットをディレクトリーに対して有効にすると、ディレクト リーにあるファイルがファイルの所有者以外から削除されるのを防ぎま す。"/tmp" のような全員書込み可能ディレクトリーやグループ書込み可     能なディレクトリーなどのにあるファイルの内容を安全にするためには 、書込みパーミッションを無効にするだけでなく、ディレクトリーにス ティッキビットもセットする必要があります。さもなければ、ディレク トリーに書込みアクセスできるユーザーにより、ファイルが削除され、 同じ名前で新規ファイルが作成されることを許してしまいます。     ファイルパーミッションの興味ある例を次にいくつか示します。 $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/exim4 crw------T 1 root root 108, 0 Oct 16 20:57 /dev/ppp -rw-r--r-- 1 root root 2761 Aug 30 10:38 /etc/passwd -rw-r----- 1 root shadow 1695 Aug 30 10:38 /etc/shadow -rwsr-xr-x 1 root root 973824 Sep 23 20:04 /usr/sbin/exim4     $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 14 root root 20480 Oct 16 21:25 /tmp drwxrwsr-x 10 root staff 4096 Sep 29 22:50 /usr/local drwxr-xr-x 10 root root 4096 Oct 11 00:28 /usr/src drwxrwsr-x 2 root mail 4096 Oct 15 21:40 /var/mail drwxrwxrwt 3 root root 4096 Oct 16 21:20 /var/tmp chmod(1) を用いて、ファイルパーミッションを記述するためのもう一つ     の数字モードが存在します。この数字モードは8進数を使った3桁から4桁 の数字を用います。 表1.5 chmod(1) コマンドで用いられるファイルパーミッションの数字モ ード +---------------------------------------------------------------+ | 数字 | 意味 | |-------+-------------------------------------------------------| |1桁目 |セットユーザー ID (=4) とセットグループ ID (=2) とステ | |(任意) |ィキービット (=1) の和 |     |-------+-------------------------------------------------------| |2桁目 |ユーザーに関する、読出し (read) (=4) と書込み (write) | | |(=2) と実行 (execute) (=1) のファイルパーミッションの和| |-------+-------------------------------------------------------| |3桁目 |グループに関して、同上 | |-------+-------------------------------------------------------| |4桁目 |ユーザーに関して、同上 | +---------------------------------------------------------------+ これは複雑に聞こえるかもしれませんが、実際は本当にシンプルです。 "ls -l" コマンドの出力の最初の数列 (2〜10列) を見て、それをファイ     ルパーミッションのバイナリー表記 (2進数) ("-" を "0"、"rwx" を "1") として読むと、この数字モードの値はファイルパーミッションの8 進数表現として意味を持ちます。     例えば、次を試してみて下さい: $ touch foo bar $ chmod u=rw,go=r foo     $ chmod 644 bar $ ls -l foo bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:39 bar -rw-r--r-- 1 penguin penguin 0 Oct 16 21:35 foo ヒント     シェルスクリプトから "ls -l" で表示される情報にアクセスする必要が ある際には、test(1) や stat(1) や readlink(1) のような適切なコマ ンドの使用を考えるべきです。シェル組込みコマンドの "[" や "test" を使うのも手です。 1.2.4. 新規作成ファイルのパーミッションのコントロール: umask 新規作成ファイルのやディレクトリーに適用されるパーミッションは     umask シェル組込みコマンドを使うことにより制限できます。dash(1) か bash(1) か builtins(7) をご覧下さい。     (ファイルパーミッション) = (要求されたパーミッション) & ~(umask 値) 表1.6 umask 値の例 +---------------------------------------------------------------+ |umask|作成されるファイル|作成されるディレクトリ| 使い方 | | | パーミッション | ーパーミッション | | |-----+------------------+----------------------+---------------|     |0022 |-rw-r--r-- |-rwxr-xr-x |ユーザーのみに | | | | |より書込み可 | |-----+------------------+----------------------+---------------| |0002 |-rw-rw-r-- |-rwxrwxr-x |グループにより | | | | |書込み可 | +---------------------------------------------------------------+ Debian システムはユーザー専用グループ (UPG) 方式がデフォールト方 式です。新規ユーザーがシステムに追加される毎に UPG は作成されます 。UPG はそのグループを作成したユーザーと同じ名前を持ち、そのユー     ザーが UPG の唯一のメンバーです。UPG 方式では、全ユーザーが各自専 用のグループを持つので umask を 0002 と設定しても安全です。(一部 Unix 系システムでは全一般ユーザーを1つの users グループに所属させ ることがよく行われます。そのような場合には安全のため 0022 と umask を設定します。) ヒント     ~/.bashrc ファイル中に "umask 002" と書いて UPG を有効にしましょ う。 1.2.5. ユーザーのグループ (group) のパーミッション 特定のユーザーにグループ許可を適用するには、/etc/group に関しては "sudo vigr" と /etc/gshadow に関しては "sudo vigr -s" を用いて、     そのユーザーをグループのメンバーにする必要があります。新規のグル ープ設定を有効にするにはログアウト後ログイン (もしくは "exec newgrp" を実行) する必要があります。 注記     もし "auth optional pam_group.so" 行が "/etc/pam.d/common-auth" に書き加えれ、"/etc/security/group.conf" に対応する設定がされてい れば、実際のユーザーのグループメンバーシップは動的に割り当てられ ます。(4章認証参照下さい。) ハードウエアーデバイスは Debian システム上では一種のファイルでし     かありません。CD-ROM や USB メモリースティックのようなデバイスを ユーザーアカウントからアクセスするのに問題があった場合にはそのユ ーザーを該当するグループのメンバーにします。     いくつかのシステムが供給するグループはそのメンバーに root 権限無 しに特定のファイルやデバイスにアクセスすることを可能にします。 表1.7 ファイルアクセスのためにシステムが供給する特記すべきグルー プのリスト +---------------------------------------------------------------+ |グルー | アクセスできるファイルやデバイスの説明 | | プ | | |-------+-------------------------------------------------------| |dialout|シリアルポート ("/dev/ttyS[0-3]") への全面的かつ直接の | | |アクセス | |-------+-------------------------------------------------------| |dip |信頼できるピアーにダイヤルアップ IP 接続をするためのシ | | |リアルポートへの制限付きアクセス | |-------+-------------------------------------------------------|     |cdrom |CD-ROM や DVD+/-RW のドライバー | |-------+-------------------------------------------------------| |audio |音声デバイス | |-------+-------------------------------------------------------| |video |映像デバイス | |-------+-------------------------------------------------------| |scanner|スキャナー | |-------+-------------------------------------------------------| |adm |システムモニターのログ | |-------+-------------------------------------------------------| |staff |下級管理業務のためのディレクトリー: "/usr/local"、"/ | | |home" | +---------------------------------------------------------------+ ヒント モデムの設定をしたりどこにでも電話したり等するには dialout グルー     プに所属する必要があります。もし信頼できるピアーに関する事前定義 された設定ファイル "/etc/ppp/peers/" が root によって作成されてい ると、dip グループに属するだけで pppd(8) や pon(1) や poff(1) コ マンドを用いてダイヤルアップ IP 接続が作成できます。     いくつかのシステムが供給するグループはそのメンバーに root 権限無 しに特定のコマンドを実行することを可能にします。 表1.8 特定コマンド実行のためにシステムが供給する特記すべきグルー プのリスト +---------------------------------------------------------------+ |グルー | 実行可能なコマンド | | プ | |     |-------+-------------------------------------------------------| |sudo |パスワード無しに sudo を実行 | |-------+-------------------------------------------------------| |lpadmin|プリンターのデーターベースからプリンターを追加・変更・ | | |削除するコマンドを実行 | +---------------------------------------------------------------+ システムが供給するユーザーやグループの完全なリストは、base-passwd     パッケージが供給する "/usr/share/doc/base-passwd/ users-and-groups.html" の中にある最新バージョンの "Users and Groups" 文書を参照下さい。 ユーザーやグループシステムを管理するコマンドは passwd(5) や group     (5) や shadow(5) や newgrp(1) や vipw(8) や vigr(8) や pam_group (8) を参照下さい。 1.2.6. タイムスタンプ     GNU/Linux ファイルのタイムスタンプには3種類あります。 表1.9 タイムスタンプのタイプのリスト +----------------------------------------+ |タイプ| 意味 | |------+---------------------------------|     |mtime |ファイル内容変更時間 (ls -l) | |------+---------------------------------| |ctime |ファイル状態変更時間 (ls -lc) | |------+---------------------------------| |atime |ファイル最終アクセス時間 (ls -lu)| +----------------------------------------+ 注記     ctime はファイル作成日時ではありません。 * ファイルが上書きされると、ファイルの mtime と ctime と atime の属性すべてが変更されます。     * ファイルの所有者やパーミッションの変更をすると、ファイルの ctime や atime アトリビュートを変えます。 * ファイルを読むとファイルの atime が変更されます。 注記 Debian システム上のファイルを単に読むだけで inode 中の atime 情報 を更新する書込みオペレーションが通常引き起こされることを覚えてお     いて下さい。ファイルシステムを "noatime" や "relatime" オプション を用いてマウントすることでシステムはこのようなオペレーションをし なくなるので、ファイルへの読出しアクセスを高速化できます。ハード ディスクの活動を抑えパワーの節約ができるのでこのような設定はラッ プトップ向けに推奨されます。mount(8) を参照下さい。     既存ファイルのタイムスタンプを変更するには touch(1) コマンドを使 って下さい。     タイムスタンプに関して、現代の英語ロケール ("fr_FR.UTF-8") では旧 来のロケール ("C") と異なる文字列が ls コマンドから出力されます。 $ LANG=fr_FR.UTF-8 ls -l foo     -rw-rw-r-- 1 penguin penguin 0 oct. 16 21:35 foo $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo ヒント     "ls -l" の出力のカスタム化は「時間と日付のカスタム化表示」を参照 下さい。 1.2.7. リンク     "foo" というファイルを異なるファイル名 "bar" に結びつけるのには2 つの方法があります。 * ハードリンク + 既存ファイルの重複名 + "ln foo bar"     * シンボリックリンクもしくはシムリンク + 他のファイルをその名前で指す特殊ファイル + "ln -s foo bar"     リンク数の変化と rm コマンドの結果の微妙な違いについての次の例を ご覧下さい。 $ umask 002 $ echo "Original Content" > foo $ ls -li foo 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo $ ln foo bar # hard link $ ln -s foo baz # symlink $ ls -li foo bar baz 1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo     1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo $ rm foo $ echo "New Content" > foo $ ls -li foo bar baz 1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar 1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo 1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo $ cat bar Original Content $ cat baz New Content     ハードリンクは同一ファイルシステム内に作れ、ls(1) コマンドに "-i" オプションを使って表示される inode 番号が同じです。 シンボリックリンクは上の例に示したように、常にファイルアクセスパ     ーミッション "rwxrwxrwx" を持ちますので、シンボリックリンクが指す ファイルのアクセスパーミッションが有効ファイルアクセスパーミッシ ョンとなります。 注意     もし特段の理由がないなら複雑なシンボリックリンクやハードリンクを 作らない方が一般的には良いでしょう。シンボリックリンクの論理的組 み合わせがファイルシステム中でループになっているという悪夢を引き 起こすかもしれません。 注記     もしハードリンクを使う特段の理由がなければ、ハードリンクよりシン ボリックリンクを使う方が一般的には良いでしょう。 "." ディレクトリーは、それ自身が中にあるディレクトリーとリンクし     ていますので、新規ディレクトリーのリンク数は2から始まります。".." ディレクトリーは親ディレクトリーとリンクしているので、ディレクト リーのリンク数は新規サブディレクトリーの増加に伴い増加します。 もし最近あなたが Windows から Linux に移動してきたなら、Unix のフ ァイル名のリンクは Windows 上でもっとも似ている "shortcuts" との     比較で如何にうまくできているかにすぐ気づくでしょう。ファイルシス テム中に実装されているのでアプリケーションからはリンクされたファ イルなのかオリジナルなのかの区別がつきません。ハードリンクの場合 は実際全く違いはありません。 1.2.8. 名前付きパイプ (FIFO) 名前付きパイプは、パイプのように働くファイルです。何かをファイル     に入れると、もう一方の端からそれが出てきます。こうしてこれは FIFO または First-In-First-Out (先入れ先出し) と呼ばれます。つまり、最 初にパイプに入れられたものが最初にもう一方の端から出てきます。 名前付きパイプに書き込む場合、パイプに書き込むプロセスは情報がパ イプから読出されるまで終了しません。名前付きパイプから読み出す場 合、読出すプロセス何か読出すものが無くなるまで終了するのを待ちま す。パイプのサイズは常に 0 です。 --- 名前付きパイプはデーターを     保存せず、シェルの "|" というシンタクッスが提供する機能ように2つ のプロセスをリンクするだけです。しかし、このパイプは名前を持つの で、2つのプロセスは同じコマンドラインになくても良いし、同じユーザ ーにより実行される必要さえありません。パイプは Unix の非常に影響 力ある発明でした。     例えば、次を試してみて下さい: $ cd; mkfifo mypipe $ echo "hello" >mypipe & # put into background [1] 8022 $ ls -l mypipe prw-rw-r-- 1 penguin penguin 0 Oct 16 21:49 mypipe     $ cat mypipe hello [1]+ Done echo "hello" >mypipe $ ls mypipe mypipe $ rm mypipe 1.2.9. ソケット ソケットはインターネットのコミュニケーションやデーターベースやオ ペレーティングシステム自身によって頻繁に使われます。ソケットは名 前つきパイプ (FIFO) に似ており、異なるコンピューター間でさえプロ     セス間の情報交換を可能にします。ソケットにとって、これらのプロセ スは同時に実行する必要も、同じ祖先プロセスの子供である必要もあり ません。これはプロセス間通信 (IPC) の終端点です。ネットワーク越し で異なるホストの間で情報の交換をすることも可能です。2つの典型的な ソケットは、インターネットソケットと Unix ドメインソケットです。 ヒント     "netstat -an" を実行すると特定のシステム上のソケットの全般状況が よく分かります。 1.2.10. デバイスファイル デバイスファイルは、システム上のハードディスク、ビデオカード、デ     ィスプレー、キーボードなどの物理デバイス又は仮想デバイス等を意味 します。仮想デバイスの例として "/dev/console" として表されるコン ソールがあります。     2タイプのデバイスファイルがあります。 * 文字デバイス + 1文字毎にアクセス可能 + 1文字 = 1 バイト + 例: キーボードデバイス、シリアルポート等     * ブロックデバイス + 比較的大きなブロック単位でアクセス可能 + 1 ブロック > 1 バイト + 例: ハードディスク等 デバイスファイルの読出し書込みが可能ですが、人間にとっては意味不 明のバイナリーデーターがファイル中に多分含まれています。データー を直接デバイスファイルに書き込むことは時々ハードウェアの接続に関     するトラブルシュートに役立ちます。例えば、プリンタデバイス "/dev/ lp0" にテキストファイルをダンプしたり、適切なシリアルポート "/dev /ttyS0" にモデムコマンドを送ることができます。しかし、注意深くや らないと、大災害をもたらすことがあります。くれぐれも気をつけて下 さい。 注記     通常のプリンターへのアクセスは lp(1) を使います。     次のように ls(1) を実行するとデバイスノード番号が表示されます。 $ ls -l /dev/sda /dev/sr0 /dev/ttyS0 /dev/zero brw-rw---T 1 root disk 8, 0 Oct 16 20:57 /dev/sda     brw-rw---T+ 1 root cdrom 11, 0 Oct 16 21:53 /dev/sr0 crw-rw---T 1 root dialout 4, 64 Oct 16 20:57 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Oct 16 20:57 /dev/zero * "/dev/sda" はメジャーデバイス番号8 とマイナーデバイス番号0 を 持ちます。これは disk グループに所属するユーザーにより、読出 し / 書込みアクセスが可能です。 * "/dev/sr0" はメジャーデバイス番号11 とマイナーデバイス番号0 を持ちます。これは cdrom グループに所属するユーザーにより、読 出し / 書込みアクセスが可能です。     * "/dev/ttyS0" はメジャーデバイス番号4 とマイナーデバイス番号64 を持ちます。これは dialout グループに所属するユーザーにより、 読出し / 書込みアクセスが可能です。 * "/dev/zero" はメジャーデバイス番号1 とマイナーデバイス番号5 を持ちます。これは誰によっても読出し / 書込みアクセスが可能で す。     最近の Linux システムでは、"/dev/" の下のファイルは udev(7) メカ ニズムで自動的に充足されます。 1.2.11. 特別なデバイスファイル     いくつかの特別なデバイスファイルがあります。 表1.10 スペシャルなデバイスファイルのリスト +---------------------------------------------------------------+ |デバイスフ|アクシ | レスポンスの説明 | | ァイル | ョン | | |----------+-------+--------------------------------------------| |/dev/null |読出し |"行末 (EOF) 文字 " を返す | |----------+-------+--------------------------------------------| |/dev/null |書込み |何も返さず (底なしのデーターのゴミ捨て場) | |----------+-------+--------------------------------------------|     |/dev/zero |読出し |"\0 (NUL) 文字" を返す (ASCII の数字のゼロと| | | |は違う) | |----------+-------+--------------------------------------------| |/dev/ |読出し |真の乱数発生機から真のエントロピーのあるラン| |random | |ダムな文字を返す (遅い) | |----------+-------+--------------------------------------------| |/dev/ |読出し |暗号学的にセキュアーな擬似乱数発生機からラン| |urandom | |ダムな文字を返す | |----------+-------+--------------------------------------------| |/dev/full |書込み |ディスクフル (ENOSPC) エラーを返す | +---------------------------------------------------------------+     以上はシェルのリディレクションとともによく使われます。(「典型的な コマンドシーケンスとシェルリディレクション」参照下さい)。 1.2.12. procfs と sysfs procfs と sysfs は "/proc" や "/sys" 上にマウントされる仮想ファイ     ルシステムであり、カーネルの内部データー構造をユーザー空間にさら け出します。言い換えると、オペレーティングシステムのオペレーショ ンへの便利なのぞき窓となると言う意味で仮想といえます。 "/proc" ディレクトリー中には、システム上で実行されている各プロセ スに対応したそのプロセス ID (PID) の名前がついたサブディレクトリ     ー他があります。プロセス情報をアクセスする ps(1) のようなシステム ユーティリティーはこのディレクトリー構造からその情報を得ています 。 "/proc/sys/" の下のディレクトリーには実行時のカーネル変数を変更す     るインターフェースがあります。(専用の sysctl(8) コマンドもしくは その起動 / 設定ファイル "/etc/sysctl.conf" によっても同様のことが できます。) 特にあるファイル - "/proc/kcore" - に気づくと、パニックになる人が よくいます。これは一般に巨大です。これは (おおよそ) コンピュータ     ーのメモリーの内容のコピーです。これは kernel をデバッグするのに 用いられます。コンピューターのメモリーを指す仮想ファイルなので、 そのサイズに関して心配する必要は全くありません。 "/sys" の下のディレクトリーはカーネルから引き出されたデーター構造     、その属性、それらの関連を含んでいます。一部カーネル変数を実行時 に変更する機構もまた含まれたりします。 linux-doc-* パッケージで供給される Linux カーネル文書 ("/usr/     share/doc/linux-doc-2.6.*/Documentation/filesystems/*") 中の "proc.txt(.gz)" や "sysfs.txt(.gz)" や関連する他の文書を参照下さ い。 1.2.13. tmpfs tmpfs は仮想記憶中にすべてのファイルを保持する一時的なファイルシ     ステムです。メモリー上のページキャッシュ中にある tmpfs のデーター は必要に応じてディスク上の swap 空間へと書き出せます。 "/run" ディレクトリは初期ブートプロセスに tmpfs としてマウントさ れます。こうすることで "/" が読み取り専用でマウントされていてもそ     こへの書き込みが可能です。これは過渡的な状態ファイルの保管のため の新たな場所で、Filesystem Hierarchy Standard のバージョン 2.3に 規定されたいくつかの場所を置き換えます: * "/var/run" → "/run"     * "/var/lock" → "/run/lock" * "/dev/shm" → "/run/shm" linux-doc-* パッケージで供給される Linux カーネル文書 ("/usr/     share/doc/linux-doc-*/Documentation/filesystems/*") 中の "tmpfs.txt(.gz)" を参照下さい。 1.3. ミッドナイトコマンダー (MC) Midnight Commander (MC) は Linux コンソールや他の端末環境のための     GNU 製 "スイス軍ナイフ" です。標準 Unix コマンドを習うよりもより 簡単なメニューを使ったコンソール経験が初心者にもできます。     "mc" と名づけられた Midnight Commander パッケージを次のようにして インストールする必要があります。     $ sudo apt-get install mc Debian システムを探検するために mc(1) コマンドを使います。これは     学習するための最良の方法です。カーソールキーとエンターキーを使う だけで興味深い場所をちょっと探検します。 * "/etc" とサブディレクトリー * "/var/log" とサブディレクトリー     * "/usr/share/doc" とサブディレクトリー * "/sbin" と "/bin"。 1.3.1. MC のカスタム化 終了時に作業ディレクトリーを MC に変更させそのディレクトリーへ cd     させるためには、mc パッケージが提供するスクリプトを "~/.bashrc" が含むように変更します。     . /usr/lib/mc/mc.sh     この理由は mc(1) ("-P" オプション項目) を参照下さい (今言っている ことがよく分からないなら、これは後日しても大丈夫です。) 1.3.2. MC の始動     MC は次のようにして起動します。     $ mc MC を使うとメニューを通じた最小限のユーザーの努力で全てのファイル     操作の面倒が見られます。ヘルプ表示を出すには、ただ F1 を押すだけ です。カーソールキーとファンクションキーの操作だけで MC を使えま す。 注記     gnome-terminal(1) のようなコンソールでは、ファンクションキーのキ ーストロークがコンソールプログラムに横取りされる事があります。 gnome-terminal の場合、"Edit" → "Keyboard Shortcuts" とするとこの 機能を無効にできます。 もし文字化け表示がされる文字符号化 (エンコーディング) 問題に出会     った際には、MC のコマンドラインに "-a" を加えると解消する事があり ます。     これでも MC の表示の問題が解消しない際には、「ターミナルの設定」 を参照下さい。 1.3.3. MC のファイルマネージャー 2つのディレクトリーパネルがありそれぞれファイルリストを含むのが標 準です。他の便利なモードとしては、右側のウィンドウを "information" とセットしてファイルアクセス権情報などを表示するモ     ードがあります。次にいくつかの不可欠なキーストロークを示します。 gpm(8) デーモンを実行すると、Linux の文字ターミナルでマウスも使え ます。(MC で通常の挙動のカットアンドペーストをさせるには、shift キーを押して下さい。) 表1.11 MC のキーバインディング +---------------------------------------------------------------+ | キー | キーバインディング | |----------------+----------------------------------------------| |F1 |ヘルプメニュー | |----------------+----------------------------------------------| |F3 |内部ファイルビューワー | |----------------+----------------------------------------------| |F4 |内部エディター | |----------------+----------------------------------------------| |F9 |プルダウンメニュー有効 |     |----------------+----------------------------------------------| |F10 |MC を終了 | |----------------+----------------------------------------------| |Tab |二つのウィンドウの間を移動 | |----------------+----------------------------------------------| |Insert もしくは |コピーのような複数ファイル操作のためにファイル| |Ctrl-T |をマーク | |----------------+----------------------------------------------| |Del |ファイルの削除 (気をつけましょう -- MC を安全 | | |削除モードに設定) | |----------------+----------------------------------------------| |カーソールキー |自明 | +---------------------------------------------------------------+ 1.3.4. MC のコマンドライントリック * cd コマンドは選択されたスクリーンに表示されたディレクトリーを 変更します。 * Ctrl-Enter と Alt-Enter はファイル名をコマンドラインにコピー します。コマンドライン編集と一緒に cp(1) や mv(1) コマンドで 御使用下さい。 * Alt-Tab はシェルファイル名の自動展開の選択肢を表示します。     * MC の引数で両ウィンドウのスタートディレクトリーを指定できます 。例えば "mc /etc /root"。 * Esc + n-key → Fn (つまり、Esc + 1 → F1、等々、Esc + 0 → F10) * Esc をキーの前に押すのは Alt をキーと同時に押すのと同様の効果 があります。つまり、Esc + c は Alt-C と同じです。Esc はメタキ ーとよばれ時々 "M-" と表記されます。 1.3.5. MC の内部エディター MC の内部エディターは興味深いカットアンドペースト機構を持ちます。 F3 キーを押すと、選択範囲のスタートとマークし、次に F3 を押すと、 選択範囲のエンドとマークし、選択範囲を強調します。そしてカーソー     ルを動かすことができます。F6 を押すと、選択範囲はカーソールの位置 に移動します。F5 を押すと、選択範囲はコピーされ、カーソールの位置 に挿入されます。F2 を押すとファイルをセーブします。F10 を押すと選 択範囲はなくなります。ほとんどのカーソールキーは直感的に働きます 。     このエディターは次のコマンドの内のひとつを使いファイルに対し直接 起動できます。     $ mc -e filename_to_edit     $ mcedit filename_to_edit これはマルチモードエディターではありませんが、複数の Linux コンソ ール上で使用すると同じ効果を発揮させされます。ウィンドウ間のコピ     ーを行うには、 Alt- キーを押して仮想コンソールを切替えて、 "File→Insert file" や "File→Copy to file" を用いてファイルの一部 を他のファイルに動かします。     この内部エディターはお好きな他の外部エディターと置き換えが可能で す。 また、多くのプログラムは使用するエディターを決定するために環境変     数 "$EDITOR" や "$VISUAL" を使用します。最初 vim(1) や nano(1) が 使いにくい場合には "~/.bashrc" に次に示す行を追加してエディターを "mcedit" に設定するのも一計です。     export EDITOR=mcedit export VISUAL=mcedit     できればこれは "vim" に設定することを推奨します。     vim(1) が使いにくい場合には、mcedit(1) をほとんどのシステム管理業 務のために使い続けられます。 1.3.6. MC の内部ビューワー MC は非常に賢明なビューワーです。文書内の単語を検索するための素晴 らしいツールです。私は "/usr/share/doc" ディレクトリー内のファイ     ルに対していつもこれを使います。これは大量にある Linux 情報を閲覧 する最速の方法です。このビューワーは次のコマンドの内のひとつを使 い直接起動できます。     $ mc -v path/to/filename_to_view     $ mcview path/to/filename_to_view 1.3.7. MC の自動起動機能 ファイルの上で Enter を押すと、適切なプログラムがファイル内容を処     理します (「スタートするプログラムのカスタム化」参照下さい)。これ は非常に便利な MC の機能です。 表1.12 enter キー入力への MC の反応 +---------------------------------------------------------------+ | ファイルタイプ | enter キーへの反応 | |-------------------------+-------------------------------------| |実行ファイル |コマンド実行 | |-------------------------+-------------------------------------|     |man ファイル |ビューワーソフトに内容をパイプ | |-------------------------+-------------------------------------| |html ファイル |ウェッブブラウザーに内容をパイプ | |-------------------------+-------------------------------------| |"*.tar.gz" や "*.deb" フ |サブディレクトリーであるかのように内 | |ァイル |容を表示 | +---------------------------------------------------------------+ これらのビューワーや仮想ファイルの機能を有効にするためには、閲覧     可能なファイルには実行可能と設定されていてはいけません。chmod(1) コマンドを使うか、MC のファイルメニュー経由で状態を変更して下さい 。 1.3.8. MC の FTP 仮想ファイルシステム MC を Internet 越しでの FTP を用いたファイルアクセスに使えます。 F9 を押してメニューに行き、"p" を押して FTP 仮想ファイルシステム     を有効にします。"username:passwd@hostname.domainname" の形式で URL を入力すると、あたかもローカルにあるかのようにリモートディレ クトリーを取得します。     "[http.us.debian.org/debian]" を URL として Debian アーカイブを閲 覧します。 1.4. 基本の Unix 的作業環境 MC はほとんど全てのことを可能にしますが、シェルプロンプトから実行     されるコマンドラインツールの使用方法について学び、Unix 的な作業環 境に親しむのは非常に重要なことです。 1.4.1. login シェル     ログインシェルは chsh(1) を使えば選択できます。 表1.13 シェルプログラムのリスト +---------------------------------------------------------------+ |パッケ|ポプコ |サイ| POSIX | 説明 | | ージ | ン | ズ |シェル | | |------+-------+----+-------+-----------------------------------| |bash |V:859, |5786|はい |Bash: GNU Bourne Again SHell (デフ | | |I:999 | | |ァクトスタンダード) | |------+-------+----+-------+-----------------------------------| |tcsh |V:12, |1279|いいえ |TENEX C Shell: 拡張バージョンの | | |I:45 | | |Berkeley csh | |------+-------+----+-------+-----------------------------------| |dash |V:906, |200 |はい |Debian の Almquist シェル、シェルス| | |I:976 | | |クリプトに好適 | |------+-------+----+-------+-----------------------------------| |zsh |V:34, |2088|はい |Z shell: 多くの拡張された標準シェル| | |I:65 | | | | |------+-------+----+-------+-----------------------------------|     |mksh |V:3, |1260|はい |Korn シェルの1バージョン | | |I:12 | | | | |------+-------+----+-------+-----------------------------------| |csh |V:2, |327 |いいえ |OpenBSD の C シェル、Berkeley csh | | |I:12 | | |の派生 | |------+-------+----+-------+-----------------------------------| |sash |V:1, |973 |はい |組み込みコマンド付きの独立シェル | | |I:5 | | |(標準の "/bin/sh" には不向き) | |------+-------+----+-------+-----------------------------------| |ksh |V:5, |3236|はい |真の AT&T バージョンの Korn シェル | | |I:23 | | | | |------+-------+----+-------+-----------------------------------| |rc |V:0, |154 |いいえ |AT&T Plan 9 の rc シェルの実装 | | |I:4 | | | | |------+-------+----+-------+-----------------------------------| |posh |V:0, |182 |はい |ポリシー準拠の通常シェル (pdksh の | | |I:0 | | |派生) | +---------------------------------------------------------------+ ヒント     POSIX-ライクなシェルは基本シンタックスはにていますが、シェル変数 や glob の展開のような基本事項の挙動が異なることがあります。詳細 に関しては個々の文書を確認してください。     このチュートリアル章内では、インタラクティブなシェルは常に bash です。 1.4.2. Bash のカスタム化     vim(1) の挙動は "~/.vimrc" を使ってカスタム化できます。     例えば、次を試してみて下さい。 # enable bash-completion if ! shopt -oq posix; then if [ -f /usr/share/bash-completion/bash_completion ]; then . /usr/share/bash-completion/bash_completion elif [ -f /etc/bash_completion ]; then . /etc/bash_completion fi fi # CD upon exiting MC . /usr/lib/mc/mc.sh     # set CDPATH to a good one CDPATH=.:/usr/share/doc:~:~/Desktop:~ export CDPATH PATH="${PATH+$PATH:}/usr/sbin:/sbin" # set PATH so it includes user's private bin if it exists if [ -d ~/bin ] ; then PATH="~/bin${PATH+:$PATH}" fi export PATH EDITOR=vim export EDITOR ヒント     bash に関する更なるカスタム化方法は、9章システムに関するティップ 中の「着色化されたコマンド」等にあります。 ヒント     bash-completion パッケージは bash で入力のプログラムによる補完を 可能にします。 1.4.3. 特別のキーストローク Unix 的環境下では、特別の意味を持ったいくつかのキーストロークがあ     ります。通常の Linux の文字ターミナルでは左側の Ctrl や Alt キー のみが期待にそって機能することに配慮下さい。次に特記すべき暗記す るべきキーストロークを記します。 表1.14 Bash のキーバインディングのリスト +---------------------------------------------------------------+ | キー | キーバインディングの説明 | |--------------------------+------------------------------------| |Ctrl-U |カーソールの前の1行を消去 | |--------------------------+------------------------------------| |Ctrl-H |カーソールの前の1文字を削除 | |--------------------------+------------------------------------| |Ctrl-D |入力を終了 (シェルを使用中の場合、シ| | |ェルを終了) | |--------------------------+------------------------------------| |Ctrl-C |実行中のプログラムを終了 | |--------------------------+------------------------------------| |Ctrl-Z |プログラムをバックグラウンドジョブに| | |移動し一時停止 | |--------------------------+------------------------------------| |Ctrl-S |スクリーンへの出力を停止 | |--------------------------+------------------------------------|     |Ctrl-Q |スクリーンへの出力を再開 | |--------------------------+------------------------------------| |Ctrl-Alt-Del |システムをリブート / 停止、inittab | | |(5) 参照下さい | |--------------------------+------------------------------------| |Left-Alt キー (もしくは、 |Emacs および同様の UI でのメタキー | |Windows キー) | | |--------------------------+------------------------------------| |Up-arrow |bash でコマンド履歴検索をスタート | |--------------------------+------------------------------------| |Ctrl-R |bash でインクリメンタルなコマンド履 | | |歴検索をスタート | |--------------------------+------------------------------------| |Tab |bash のコマンドラインのファイル名入 | | |力を完結 | |--------------------------+------------------------------------| |Ctrl-V Tab |bash のコマンドラインで Tab を展開す| | |ることなく入力 | +---------------------------------------------------------------+ ヒント     ターミナルの Ctrl-S 機能は stty(1) で無効にできます。 1.4.4. Unix 流のマウス操作     Unix 流のマウス操作は3ボタンマウスが基本です。 表1.15 Unix 流のマウス操作 +---------------------------------------------------------------+ | アクション | 反応 | |-------------------------+-------------------------------------| |マウスの左クリックアンド |選択とクリップボードへのコピー | |ドラッグ | | |-------------------------+-------------------------------------|     |左クリック |選択スタート点の選択 | |-------------------------+-------------------------------------| |右クリック |選択エンド点の選択とクリップボードへ | | |のコピー | |-------------------------+-------------------------------------| |中クリック |クリップボードをカーソール位置に挿入 | | |(ペースト) | +---------------------------------------------------------------+ 現代的なホイールマウスの真ん中のホイールは中マウスボタンと見なさ     れ、中クリックに使えます。2ボタンマウス状況では左右のボタンの同時 押しが中クリックとして使えます。Linux の文字コンソールでマウスを 使うには gpm(8) をデーモンで実行する必要があります。 1.4.5. ページャー less(1) は機能拡張されたページャー (ファイル内容のブラウザー) で す。コマンドアーギュメントに指定されたファイル、もしくは標準入力 を読みますless。コマンドで閲覧中にヘルプが必要なら、"h" を押すし ましょう。これは、more(1) よりもはるかに高機能で、"eval $     (lesspipe)" または "eval $(lessfile)" をシェルのスタートスクリプ ト中で実行することで更に機能が拡充されます。詳しくは、"/usr/share /doc/lessf/LESSOPEN" を参照下さい。"-R" オプションを用いると、生 の文字出力やANSI カラーエスケープシーケンスが有効になります。less (1) を参照下さい。 1.4.6. テキストエディター     Unix 的システムで人気のある、Vim か Emacs プログラムのいずれかの バリアントに習熟するべきです。 著者としては Vim コマンドに慣れることは正しいことだと考えています 。なぜなら Vi エディターは Linux/Unix の世界では必ず存在するから     です。(実際はオリジナルの vi か、新しい nvi がどこででも見つけら れるプログラムです。これにもかかわらず Vim を著者が初心者のために 選んだのは、より強力かつ動作が充分似ているのと、F1 キーを通じてヘ ルプが表示されるからです。) これとは違い、Emacs か XEmacs をエディターとして選ぶのも、特にプ ログラムをするには、非常に良い選択です。Emacs には、ニュースリー ダ機能、ディレクトリーの編集機能、メール機能他の、過多な機能があ     ります。プログラミングやシェルスクリプトの編集に使うときは、作業 中のフォーマットをインテリジェントに認識し助力をしようとします。 Linux 上で必要なプログラムは Emacs だけと考える人もいます。Emacs を今10分間学ぶことは将来何時間もの節約になります。Emacs を学ぶ際 には GNU の Emacs マニュアルを持っておくことを高く推薦します。 これら全てのプログラムには練習しながら学べるようにチュータリング     プログラムが普通付いてきます。Vim を "vim" とタイプして起動し、F1 キーを押します。最初の35行を読みます。カーソールを "|tutor|" に移 動し Ctrl-] を押してオンラインの訓練コースを始めます。 注記 Vim や Emacs のような良いエディターは、UTF-8 や他のエギゾチックな     符号化方式 (エンコーディング) のテキストを正しく扱えます。それに はUTF-8ロケール中のX環境で、必要なプログラムとフォントをインスト ールをするのが賢明です。マルチバイトテキストに関するそれぞれの文 書を参照下さい。 1.4.7. デフォールトのテキストエディターの設定     Debian にはいくつかの異なったエディターがあります。上述のように vim パッケージをインストールすることを推薦します。 Debian ではシステムのデフォールトのエディターへの統一されたアクセ     スを "/usr/bin/editor" コマンドを通じて提供しているので、他のプロ グラム (例えば reportbug(1) 等) が起動できます。設定変更は次で出 来ます。     $ sudo update-alternatives --config editor     著者が "/usr/bin/vim.tiny" より "/usr/bin/vim.basic" を初心者に推 薦するのはシンタクスハイライトをサポートしているからです。 ヒント 多くのプログラムは "$EDITOR" か "$VISUAL" という環境変数を使って     どのエディターを使うかを決めます (「MC の内部エディター」と「スタ ートするプログラムのカスタム化」参照下さい)。Debian システムの整 合性のために、これらを "/usr/bin/editor" と設定しましょう。(歴史 的には "$EDITOR" は "ed" で、"$VISUAL" は "vi" でした。) 1.4.8. Vim のカスタム化     vim(1) の挙動は "~/.vimrc" を使ってカスタム化できます。     例えば、次を試してみて下さい: " ------------------------------- " Local configuration " set nocompatible set nopaste set pastetoggle= syn on if $USER == "root"     set nomodeline set noswapfile else set modeline set swapfile endif " filler to avoid the line above being recognized as a modeline " filler " filler 1.4.9. シェル活動の記録 シェルコマンドの出力はスクリーンから押し出されると永久に無くなっ     てしまうかもしれません。シェルでの活動を後で見直せるようにファイ ルに記録しておくのは良いことです。この種の記録は何らかのシステム 管理作業をする際には非常に重要です。     シェル活動の記録の基本方法は script(1) の下で実行することです。     例えば、次を試してみて下さい:     $ script Script started, file is typescript     script の下で何なりのシェルコマンドを実行します。     Ctrl-D を押して script から脱出します。     $ vim typescript     「シェルの活動を綺麗に記録」を参照下さい。 1.4.10. 基本 Unix コマンド 基本的 Unix コマンドを学びます。ここでは一般的意味で "Unix" を使 っています。いかなる Unix クローンの OS も等価なコマンドを提供し     ます。Debian システムも例外ではありません。今一部コマンドが思うよ うに機能しなくても心配しないで下さい。エリアスがシェルで使われた 場合は、対応するコマンドの出力は変わります。次は順番に実行すると 言う意味の例ではありません。     非特権ユーザーのアカウントから次のコマンドを全て実行します。 表1.16 基本の Unix コマンドのリスト +---------------------------------------------------------------+ | コマンド | 説明 | |-------------+-------------------------------------------------| |pwd |カレント / ワーキングディレクトリーの名前を表示 | |-------------+-------------------------------------------------| |whoami |現在のユーザー名を表示 | |-------------+-------------------------------------------------| |id |現在のユーザーのアイデンティティ (名前と uid と | | |gid と関連する group) を表示 | |-------------+-------------------------------------------------| |file |"" ファイルのファイルタイプを表示 | |-------------+-------------------------------------------------| |type -p |"" コマンドのファイルの位置を表示 | || | |-------------+-------------------------------------------------| |which |, , | || | |-------------+-------------------------------------------------| |type |"" コマンドに関する情報を表示 | || | |-------------+-------------------------------------------------| |apropos |"" に関連したコマンドを発見 | | | | |-------------+-------------------------------------------------| |man -k |, , | | | | |-------------+-------------------------------------------------| |whatis |"" コマンドに関する1行の説明を表示 | || | |-------------+-------------------------------------------------| |man -a |"" コマンドに関する説明を表示 (Unix | ||スタイル) | |-------------+-------------------------------------------------| |info |"" コマンドに関する比較的長い説明を | ||表示 (GNU スタイル) | |-------------+-------------------------------------------------| |ls |ディレクトリーの内容をリスト (非ドットファイルお | | |よびディレクトリー) | |-------------+-------------------------------------------------| |ls -a |ディレクトリーの内容をリスト (全ファイルおよびデ | | |ィレクトリー) | |-------------+-------------------------------------------------| |ls -A |ディレクトリーの内容をリスト (ほとんど全ファイル | | |およびディレクトリー、".." と "." をスキップ) | |-------------+-------------------------------------------------| |ls -la |ディレクトリーの内容を詳細情報とともにリスト | |-------------+-------------------------------------------------| |ls -lai |ディレクトリーの内容を inode 番号と詳細情報ととも| | |にリスト | |-------------+-------------------------------------------------| |ls -d |現ディレクトリーの中の全ディレクトリーをリスト | |-------------+-------------------------------------------------| |tree |ファイルツリーの内容を表示 | |-------------+-------------------------------------------------| |lsof |"" ファイルのオープンの状態をリスト | |-------------+-------------------------------------------------| |lsof -p |プロセス ID: "" によってオープンされたファイ| | |ルをリスト | |-------------+-------------------------------------------------| |mkdir |現ディレクトリー中に "" という新規ディレクト| | |リー作成 | |-------------+-------------------------------------------------| |rmdir |現ディレクトリー中の "" というディレクトリー| | |を削除 | |-------------+-------------------------------------------------| | |現ディレクトリー中もしくは "$CDPATH" 変数中にリス| |cd |トされたディレクトリー中の "" というディレク| | |トリーにディレクトリーを変更 | |-------------+-------------------------------------------------| |cd / |ディレクトリーをルートディレクトリーに変更 | |-------------+-------------------------------------------------| |cd |現在のユーザーのホームディレクトリーにディレクト | | |リーを変更 | |-------------+-------------------------------------------------| |cd / |絶対ディレクトリーパス "/" にディレクトリー | | |を変更 | |-------------+-------------------------------------------------| |cd .. |親ディレクトリーにディレクトリーを変更 | |-------------+-------------------------------------------------| |cd ~ |ユーザー "" のホームディレクトリーにディレク| | |トリーを変更 | |-------------+-------------------------------------------------| |cd - |一つ前のディレクトリーにディレクトリーを変更 | |-------------+-------------------------------------------------| |" を作成 | | | | |-------------+-------------------------------------------------| |cp |既存のファイル "" を新規ファイル "" に | | |コピー | |-------------+-------------------------------------------------| |rm |ファイル "" を削除 | |-------------+-------------------------------------------------| |mv |既存のファイル "" の名前を新しい名前 ""| | |に変更 (ディレクトリー "" が存在不可) | |-------------+-------------------------------------------------| |mv |既存のファイル "" を新しい場所 "/"| | |に移動 (ディレクトリー "" が存在しなければい|     | |けない) | |-------------+-------------------------------------------------| | |既存のファイル "" を新しい場所の新しい名前の| |mv |ファイル "/" に移動 (ディレクトリー " | |/ |" が存在しなければいけないが、ディレクトリー| | |"/" は存在してはいけない) | |-------------+-------------------------------------------------| |chmod 600 |既存のファイル "" を他人から読出し不可かつ書| | |込み不可 (全員実行不可) | |-------------+-------------------------------------------------| |chmod 644 |既存のファイル "" を他人からは読出し可だが書| | |込み不可 (全員実行不可) | |-------------+-------------------------------------------------| |chmod 755 |既存のファイル "" を他人からは読出し可だが書| | |込み不可 (全員実行可能) | |-------------+-------------------------------------------------| |find . -name |シェルで "" にマッチするファイル名を探索| | |(比較的遅い) | |-------------+-------------------------------------------------| |locate -d . |シェルで "" にマッチするファイル名を探索| | |(定期的に生成されるデーターベースを使い比較的早 | | |い) | |-------------+-------------------------------------------------| |grep -e " |現ディレクトリーにある ".html" で終わる全ファイル| |" |から "" のパターンを検索し、該当する全フ| |*.html |ァイルを表示 | |-------------+-------------------------------------------------| |top |フルスクリーンを用いてプロセス情報を表示し、"q" | | |と押して終了 | |-------------+-------------------------------------------------| |ps aux | |起動中の全プロセスの情報を BSD スタイルの出力を用| |pager |いて表示 | |-------------+-------------------------------------------------| |ps -ef | |起動中の全プロセスの情報を System-V スタイルの出 | |pager |力を用いて表示 | |-------------+-------------------------------------------------| |ps aux | grep|"exim" もしくは "exim4" の起動中の全プロセスを表 | |-e "[e]xim4*"|示 | |-------------+-------------------------------------------------| |ps axf | |起動中の全プロセスの情報を ASCII アート出力を用い| |pager |て表示 | |-------------+-------------------------------------------------| |kill <1234> |プロセス ID"<1234>" により識別されるプロセスを停 | | |止 | |-------------+-------------------------------------------------| |gzip |Lempel-Ziv コーディング (LZ77) を用いて "" | | |を圧縮し ".gz" を作成 | |-------------+-------------------------------------------------| |gunzip |".gz" を解凍して "" を作成 | |.gz | | |-------------+-------------------------------------------------| | |Burrows-Wheeler ブロックソートテキスト圧縮アルゴ | |bzip2 |リズムと Huffman コーディングを用いて "" を | | |圧縮し ".bz2" を作成 (gzip より高圧縮率) | |-------------+-------------------------------------------------| |bunzip2 |".bz2" を解凍して "" を作成 | |.bz2 | | |-------------+-------------------------------------------------| |xz |Lempel–Ziv–Markov鎖アルゴリズムを用いて "" | | |を圧縮し ".xz" を作成 (bzip2 より高圧縮率) | |-------------+-------------------------------------------------| |unxz .xz|".xz" を解凍して "" を作成 | |-------------+-------------------------------------------------| |tar -xvf |".tar" アーカイブからファイルを展開 | |.tar | | |-------------+-------------------------------------------------| |tar -xvzf |gzip 圧縮された ".tar.gz" アーカイブからファ| |.tar.gz |イルを展開 | |-------------+-------------------------------------------------| |tar -xvjf |".tar.bz2" アーカイブからファイルを展開 | |.tar.bz2| | |-------------+-------------------------------------------------| |tar -xvJf |".tar.xz" アーカイブからファイルを展開 | |.tar.xz | | |-------------+-------------------------------------------------| |tar -cvf |フォルダ "/" の内容を ".tar" アーカイブ| |.tar |にアーカイブ | |/ | | |-------------+-------------------------------------------------| |tar -cvzf |フォルダ "/" の内容を ".tar.gz" アーカ | |.tar.gz |イブに圧縮アーカイブ | |/ | | |-------------+-------------------------------------------------| |tar -cvjf |フォルダ "/" の内容を ".tar.bz2" アーカ| |.tar.bz2|イブに圧縮アーカイブ | |/ | | |-------------+-------------------------------------------------| |tar -cvJf |フォルダ "/" の内容を ".tar.xz" アーカ | |.tar.xz |イブに圧縮アーカイブ | |/ | | |-------------+-------------------------------------------------| |zcat |標準のページャーを用いて圧縮された "README.gz" の| |README.gz | |内容を表示 | |pager | | |-------------+-------------------------------------------------| |zcat | | |README.gz > |"README.gz" の内容を解凍してファイル "foo" を作成| |foo | | |-------------+-------------------------------------------------| |zcat |圧縮された "README.gz" の内容をファイル "foo" の | |README.gz >> |末尾に追加 (ファイルが存在しない場合は事前に作成)| |foo | | +---------------------------------------------------------------+ 注記     Unix は "." で始まるファイル名を隠す伝統があります。それらは伝統 的には特定の設定情報やユーザーの嗜好を含むファイルです。 注記     cd コマンドに関しては builtins(7) を参照下さい。 注記 最小限の Debian システムのデフォールトのページャーは more(1) で、     スクロールバックができません。less パッケージを "apt-get install less" と言うコマンドラインでインストールすると、less(1) がデフォ ールトのページャーになりカーソールキーでスクロールバック出来るよ うになります。 注記 上記の "ps aux | grep -e "[e]xim4*"" コマンド中に現れる正規表現中 の "[" と "]" は grep が自分自身にマッチするのを避けることを可能     とします。正規表現中の "4*" は数字 "4" の0回以上の繰り返しを意味 するので、grep が "exim" と "exim4" の両方にマッチすることが可能 になります。 "*" はシェルのファイルネームのグロブでも正規表現でで も使われますが、これらの意味は異なります。grep(1) から正規表現を 学びましょう。 上記のコマンドを訓練として用いて、ディレクトリーを渡り歩き、シス     テムの中を覗き込んで下さい。コンソールのコマンドに関して質問があ る場合は、必ずマニュアルページを読んでみて下さい。     例えば、次を試してみて下さい: $ man man $ man bash     $ man builtins $ man grep $ man ls マンページのスタイルは慣れるのに少々大変かもしれません。なぜなら     特に比較的旧式の非常に伝統的なマンページは比較的言葉が少ないから です。しかし一旦慣れるとその簡潔さの良さが分かります。 GNU や BSD 由来を含む多くの Unix 的なコマンドは次のように (場合に     よっては一切の引数無しで) 起動すると簡単なヘルプ情報を表示します 。     $ <コマンド名> --help $ <コマンド名> -h 1.5. シェルプロンプト Debian システムの使い方が少し分かったでしょう。Debian システム上     でのコマンド実行のメカニズムを掘り下げます。初心者のためにちょっ と簡略化してみました。正確な説明は bash(1) を参照下さい。     シンプルなコマンドは、次の要素のシーケンスとなります。 1. 変数代入 (任意) 2. コマンド名     3. 引数 (任意) 4. リダイレクト (任意: > と >> と < と << 等。) 5. 制御演算子 (任意: && と || と <改行> と ; と & と ( と )) 1.5.1. コマンド実行と環境変数     環境変数の値は Unix コマンドの挙動を変えます。 環境変数のデフォールト値は PAM システムが初期設定されます。その後     次のような何らかのアプリケーションプログラムにより再設定されてい るかもしれません。 * gdm3 のようなディスプレーマネージャーは環境変数を再設定します 。     * "~/.bash_profile" や "~/.bashrc" にあるシェル起動コードの中で シェルは環境変数を再設定します。 1.5.2. "$LANG" 変数     "$LANG" 変数に与えられる完全なロケール値は3つの部分からなります: "xx_YY.ZZZZ"。 表1.17 ロケールの値の3つの部分 +-----------------------------------------------------+ |ロケールの値| 意味 | |------------+----------------------------------------|     |xx |ISO 639 言語コード (小文字)、例えば "en"| |------------+----------------------------------------| |YY |ISO 3166 国コード (大文字)、例えば "US" | |------------+----------------------------------------| |ZZZZ |コードセット、常に "UTF-8" と設定 | +-----------------------------------------------------+     言語コードと国コードは "info gettext" 中の該当記述を参照下さい。 現代的な Debian システム上では、十分な理由と必要な知見をもって歴     史的なコードセットを特段希望しない限り、常にコードセットを UTF-8 と設定すべきです。     ロケールの詳細に関しては、「ロケール」を参照下さい。 注記     "LANG=en_US" は、"LANG=C" でも、"LANG=en_US.UTF-8" でもありません 。それは "LANG=en_US.ISO-8859-1" です (「符号化方式の基本」参照下 さい)。 表1.18 推奨ロケールのリスト +------------------------------------------+ |推奨ロケール| 言語 (地域) | |------------+-----------------------------| |en_US.UTF-8 |英語 (米国) | |------------+-----------------------------| |en_GB.UTF-8 |英語 (英国) | |------------+-----------------------------| |fr_FR.UTF-8 |フランス語 (フランス) | |------------+-----------------------------| |de_DE.UTF-8 |ドイツ語 (ドイツ) | |------------+-----------------------------| |it_IT.UTF-8 |イタリア語 (イタリア) | |------------+-----------------------------| |es_ES.UTF-8 |スペイン語 (スペイン) | |------------+-----------------------------|     |ca_ES.UTF-8 |カタラン語 (スペイン) | |------------+-----------------------------| |sv_SE.UTF-8 |スウェーデン語 (スウェーデン)| |------------+-----------------------------| |pt_BR.UTF-8 |ポルトガル語 (ブラジル) | |------------+-----------------------------| |ru_RU.UTF-8 |ロシア語 (ロシア) | |------------+-----------------------------| |zh_CN.UTF-8 |中国語 (中華人民共和国) | |------------+-----------------------------| |zh_TW.UTF-8 |中国語 (台湾 R.O.C.) | |------------+-----------------------------| |ja_JP.UTF-8 |日本語 (日本) | |------------+-----------------------------| |ko_KR.UTF-8 |韓国語 (大韓民国) | |------------+-----------------------------| |vi_VN.UTF-8 |ベトナム語 (ベトナム) | +------------------------------------------+     典型的なコマンドの実行は次のようなシェルの行シーケンスを用います 。 $ date     Sun Jun 3 10:27:39 JST 2007 $ LANG=fr_FR.UTF-8 date dimanche 3 juin 2007, 10:27:33 (UTC+0900)     以上で、date(1) プログラムは異なる環境変数 "$LANG" 値で実行されま す。 * 最初のコマンドでは、"$LANG" はシステムでフォルトのロケール値 "en_US.UTF-8" に設定されます。     * 二番目のコマンドでは、"$LANG" はフランス語の UTF-8 ロケール値 "fr_FR.UTF-8" に設定されます。     ほとんどのコマンド実行は頭に環境変数定義をつけないのが普通です。 上記の例の代わりに次のように実行します。 $ LANG=fr_FR.UTF-8     $ date dimanche 3 juin 2007, 10:27:33 (UTC+0900) ここで確認できるように、コマンドの出力は環境変数に影響されフラン     ス語の出力となっています。もし環境変数を (例えばシェルスクリプト を呼んでいて) サブプロセスに引き継ぎたい際には、次のように環境変 数を export (エクスポート) しなければいけません。     $ export LANG 注記     典型的なコンソールターミナルを用いる際には、"$LANG" 環境変数は通 常デスクトップ環境によって export されるように設定されています。 上記例は export の効果を検証するあまりいい例ではありません。 ヒント     バグ報告をする際には、非英語環境を使っているなら、プログラムを "LANG=en_US.UTF-8" の下で実行し確認することが望ましいです。     "$LANG" とこれに関連した環境変数に関しては、locale(5) と locale (7) を参照下さい。 注記     特段必要がなければ "$LC_*" 変数を避けて、"$LANG" 変数のみを用いて システム環境設定する事をお薦めします。 1.5.3. "$PATH" 変数 シェルにコマンドを打ち込んだ際に、シェルは "$PATH" 環境変数にリス     トされたディレクトリーのリストから検索します。"$PATH" 環境変数の 値は、シェルの検索パスとも呼ばれます。 標準の Debian インストールでは、ユーザーアカウントの "$PATH" 環境     変数には "/sbin" や "/usr/sbin" が含まれないかもしれません。例え ば、ifconfig コマンドは "/sbin/ifconfig" とフルパスを使って実行す る必要があります。(類似の ip コマンドは "/bin" にあります。)     Bash シェルの "$PATH" 環境変数は、"~/.bash_profile" か "~ /.bashrc" ファイルで変更できます。 1.5.4. "$HOME" 変数 多くのコマンドはユーザー特定の設定をホームディレクトリーに保存し     、その内容でコマンドの挙動が変わります。ホームディレクトリーは "$HOME" 環境変数で指定されます。 表1.19 "$HOME" の値のリスト +---------------------------------------------------------------+ | "$HOME" の値 | プログラム実行状況 | |--------------+------------------------------------------------| |/ |init プロセスが実行するプログラム (デーモン) | |--------------+------------------------------------------------| |/root |通常の root シェルから実行されるプログラム | |--------------+------------------------------------------------| |/home/ |通常のユーザーシェルから実行されるプログラム |     | | | |--------------+------------------------------------------------| |/home/ |通常のユーザーの GUI デスクトップメニューから実 | | |行されるプログラム | |--------------+------------------------------------------------| |/home/ |"sudo program" を用いて root として実行されるプ | | |ログラム | |--------------+------------------------------------------------| |/root |"sudo -H program" を用いて root として実行される| | |プログラム | +---------------------------------------------------------------+ ヒント     シェルは、"~/" を現ユーザーのホームディレクトリーである "$HOME/" へと展開します。シェルは、"~foo/" をユーザー foo のホームディレク トリーである "/home/foo/" へと展開します。 1.5.5. コマンドラインオプション     プログラムコマンドによっては引数があります。引数は "-" か "--" で 始まり、オプションと呼ばれ、コマンドの挙動をコントロールします。 $ date     Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100     上記で、コマンドライン引数 "-R" が date(1) の挙動を RFC2822 準拠 の日付文字列出力と変えています。 1.5.6. シェルグロブ ファイル名を全てタイプせずにファイルのグループをコマンド処理した     いことがよくあります。シェルのグロブ (ワイルドカードとも時々呼ば れる) を用いたファイル名のパターン展開を用いるとこのニーズに答え られます。 表1.20 シェルグロブパターン +---------------------------------------------------------------+ |シェルグロブパターン| マッチルールの説明 | |--------------------+------------------------------------------| |* |"." で始まらないファイル (部分) 名 | |--------------------+------------------------------------------| |.* |"." で始まるファイル (部分) 名 | |--------------------+------------------------------------------|     |? |1文字 | |--------------------+------------------------------------------| |[…] |括弧中の1文字 | |--------------------+------------------------------------------| |[a-z] |"a" と "z" の範囲間の1文字 | |--------------------+------------------------------------------| |[^…] |括弧内 ("^" 以外) に含まれる文字以外の1文 | | |字 | +---------------------------------------------------------------+     例えば、次を試してみて下さい: $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt ..6.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc]     3.c 4.h $ echo .* . .. .5.txt ..6.txt $ echo .*[^.]* .5.txt ..6.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk     glob(7) を参照下さい。 注記     通常のシェルのファイル名の展開と違い、find(1) が "-name" テスト他 でシェルパターン "*" をテストする際にはファイル名先頭の "." とも マッチします。(新 POSIX 機能) 注記     BASH は shopt 組み込みオプションで "dotglob" や "noglob" や "nocaseglob" や "nullglob" や "extglob" などとすることでグロブ挙 動を色々変更できます。bash(1) を参照下さい。 1.5.7. コマンドの戻り値     各コマンドは終了ステータスを戻り値 (変数: "$?") として返します。 表1.21 コマンドの終了コード +----------------------------------------------+ |コマンドの終了状態|戻り値の数値|戻り値の論理値|     |------------------+------------+--------------| |成功 |ゼロ、0 |真 | |------------------+------------+--------------| |失敗 |非ゼロ、-1 |偽 | +----------------------------------------------+     例えば、次を試してみて下さい。 $ [ 1 = 1 ] ; echo $?     0 $ [ 1 = 2 ] ; echo $? 1 注記     シェルの論理的な観点では、成功は、0 (ゼロ) の値を持つ論理的真とし て扱われることに注意して下さい。少々これは非直感的なのでここで再 確認する必要があります。 1.5.8. 典型的なコマンドシーケンスとシェルリディレクション     次に挙げるシェルコマンドの一部として一行でタイプするシェルコマン ドの慣用句を覚えましょう。 表1.22 シェルコマンドの慣用句 +---------------------------------------------------------------+ |コマンドの | 説明 | | 慣用句 | | |-----------+---------------------------------------------------| |command & |command をサブシェル中でバックグラウンド実行 | |-----------+---------------------------------------------------| |command1 | |command1 の標準出力を command2 の標準入力にパイプ (| |command2 |同時並行で実行) | |-----------+---------------------------------------------------| |command1 2>|command1 の標準出力と標準エラー出力を command2 の標| |&1 | |準入力にパイプ (同時進行で実行) | |command2 | | |-----------+---------------------------------------------------| |command1 ; |command1 を実行し、後に続いて command2 を実行 | |command2 | | |-----------+---------------------------------------------------| |command1 &&|command1 を実行; もし成功したら、後に続いて | |command2 |command2 を実行 (command1 と command2 の両方が成功 | | |したら、正常終了を返す) | |-----------+---------------------------------------------------| |command1 |||command1 を実行; もし成功しなかったら、後に続いて | |command2 |command2 を実行 (command1 か command2 のどちらかが | | |成功したら、正常終了を返す) |     |-----------+---------------------------------------------------| |command > |command の標準出力を foo ファイルにリダイレクト (上| |foo |書き) | |-----------+---------------------------------------------------| |command 2> |command の標準エラー出力を foo ファイルにリダイレク| |foo |ト (上書き) | |-----------+---------------------------------------------------| |command >> |command の標準出力を foo ファイルにリダイレクト (追| |foo |記) | |-----------+---------------------------------------------------| |command 2>>|command の標準エラー出力を foo ファイルにリダイレク| |foo |ト (追記) | |-----------+---------------------------------------------------| |command > |command の標準出力と標準エラー出力を foo ファイルに| |foo 2>&1 |リダイレクト | |-----------+---------------------------------------------------| |command < |command の標準入力を foo ファイルからリダイレクト | |foo | | |-----------+---------------------------------------------------| |command << |command の標準入力を "delimiter" に出会うまでのこれ| |delimiter |に続く行からリダイレクト (ヒアドキュメント) | |-----------+---------------------------------------------------| |command <<-|command の標準入力を "delimiter" に出会うまでのこれ| |delimiter |に続く行からリダイレクト (ヒアドキュメント、行頭の | | |タブ文字は入力から削除) | +---------------------------------------------------------------+ Debian システムはマルチタスクシステムです。バックグラウンドジョブ を使うと単一シェルの下で複数プログラムを実行可能にします。バック     グラウンドジョブの管理にはシェル内部組み込みコマンドの jobs や fg や bg や kill を使います。bash(1) マンページ中の "SIGNALS" と "JOB CONTROL" セクションや builtins(1) を参照下さい。     例えば、次を試してみて下さい:     $ foo $ exec 3bar # open files     $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello     ファイルデスクリプタの 0-2 は事前定義されています。 表1.23 事前定義されたファイルデスクリプタ +--------------------------------------------+ |デバイス| 説明 |ファイルデスクリプタ| |--------+--------------+--------------------|     |stdin |標準出力 |0 | |--------+--------------+--------------------| |stdout |標準出力 |1 | |--------+--------------+--------------------| |stderr |標準エラー出力|2 | +--------------------------------------------+ 1.5.9. コマンドエリアス     良く使うコマンドにエリアスを設定できます。     例えば、次を試してみて下さい:     $ alias la='ls -la'     こうすると、"la" が "ls -la" の短縮形として機能し、全てのファイル を長いリスト形式でリストします。     既存のエリアスは alias でリストできます (bash(1) の "SHELL BUILTIN COMMANDS" 参照下さい)。 $ alias     ... alias la='ls -la'     type 内部コマンドを使うと正確なパスやコマンドの正体を識別できます (bash(1) の "SHELL BUILTIN COMMANDS" 下参照下さい)。     例えば、次を試してみて下さい: $ type ls ls is hashed (/bin/ls) $ type la     la is aliased to ls -la $ type echo echo is a shell builtin $ type file file is /usr/bin/file 上記で、ls は最近探索されましたが "file" は最近探索されていませの     で、"ls" は "ハッシュされた" つまりシェルには "ls" コマンドの場所 を高速アクセスのために内部記録していると表示されます。 ヒント     「着色化されたコマンド」を参照下さい。 1.6. Unix 的テキスト処理     Unix 的作業環境では、テキスト処理はテキストを標準テキスト処理ツー ルの連鎖パイプを通す行います。これは決定的な Unix の発明です。 1.6.1. Unix テキストツール     Unix 的システムでしばしば使われる標準テキスト処理ツールがいくつか あります。 * 正規表現無使用: + cat(1) はファイルをつなぎ合わせ全てを出力します。 + tac(1) はファイルをつなぎ合わせ逆順で出力します。 + cut(1) は行の一部を選択し出力します。 + head(1) はファイルの最初の部分を選択し出力します。 + tail(1) はファイルの最後の部分を選択し出力します。 + sort(1) は行を順番に並び替えます。 + uniq(1) は順番に並べられたファイルから重複行を削除します 。 + tr(1) は文字を変換削除します。 + diff(1) は1行ごとにファイルを比較します。 * 基本正規表現 (BRE) 使用: + egrep(1) はテキストのパターンマッチをします。     + ed(1) は原始的な行エディター。 + sed(1) はストリームエディター。 + vim(1) はスクリーンエディター。 + emacs(1) はスクリーンエディター。(ちょっと拡張された BRE) * 拡張正規表現 (ERE) 使用: + egrep(1) はテキストのパターンマッチをします。 + awk(1) は単純なテキスト処理をします。 + tcl(3tcl) は考え得る全てのテキスト処理をします: re_syntax (3)。時々 tk(3tk) とともに使用されます。 + perl(1) は考え得る全てのテキスト処理をします。perlre(1). + pcregrep パッケージの pcregrep(1) はテキストのパターンマ ッチを Perl 互換正規表現 (PCRE) パターンを使ってします。 + re モジュールとともに使うことで python(1) は考え得る全て のテキスト処理をします。"/usr/share/doc/python/html/ index.html" を参照下さい。     もしこれらのコマンドが正確にどう動作するかを確認したいなら、"man command" を使って自分で見つけましょう。 注記     ソート順や範囲表現はロケールに依存します。コマンドの伝統的挙動を 得たい際には、"LANG=C" をコマンドの前に付けて UTF-8 ロケールでは なく C ロケールでコマンドを使います。(「"$LANG" 変数」と「ロケー ル」を参照下さい)。 注記     Perl 正規表現 (perlre(1)) と Perl 互換正規表現 (PCRE) と re モジ ュールで提供される Python 正規表現は ERE に多くの共通の拡張をして います。 1.6.2. 正規表現     正規表現は多くのテキスト処理ツールで使われています。シェルグロブ に類似していますがより複雑で強力です。     正規表現はマッチするパターンを表現し、テキスト文字とメタ文字から なっています。     メタ文字は特別な意味を持った文字です。上記のようにテキストツール によって、BRE と ERE の2つの主要なスタイルがあります。 表1.24 BRE と ERE のメタ文字 +---------------------------------------------------------------+ | BRE | ERE | 正規表現の説明 | |----------+-------+--------------------------------------------| |\ . [ ] ^ |\ . [ ]|共通のメタ文字 | |$ * |^ $ * | | |----------+-------+--------------------------------------------| |\+ \? \( | |"\" でエスケープされた、BRE のみで用いるメタ| |\) \{ \} \|  |文字 | || | | | |----------+-------+--------------------------------------------| |  |+ ? ( )|"\" でエスケープされ無い、ERE のみで用いるメ| | |{ } | |タ文字 | |----------+-------+--------------------------------------------| |c |c |非メタ文字 "c" にマッチ | |----------+-------+--------------------------------------------| |\c |\c |c" 自身がメタ文字でも "c" というそのままの文| | | |字とマッチ | |----------+-------+--------------------------------------------| |. |. |改行を含めた如何なる文字ともマッチ | |----------+-------+--------------------------------------------| |^ |^ |文字列の最初とマッチ |     |----------+-------+--------------------------------------------| |$ |$ |文字列の最後とマッチ | |----------+-------+--------------------------------------------| |\< |\< |単語先頭とマッチ | |----------+-------+--------------------------------------------| |\> |\> |単語末尾とマッチ | |----------+-------+--------------------------------------------| |[abc…] |[abc…] |"abc…" のいずれかの文字にマッチ | |----------+-------+--------------------------------------------| |[^abc…] |[^abc…]|"abc…" 以外の文字にマッチ | |----------+-------+--------------------------------------------| |r* |r* |"r" という正規表現の0回以上にマッチ | |----------+-------+--------------------------------------------| |r\+ |r+ |"r" という正規表現の1回以上にマッチ | |----------+-------+--------------------------------------------| |r\? |r? |"r" という正規表現の0回か1回にマッチ | |----------+-------+--------------------------------------------| |r1\|r2 |r1|r2 |"r1" か "r2" という正規表現のいずれかにマッ | | | |チ | |----------+-------+--------------------------------------------| |\(r1\|r2\)|(r1|r2)|"r1" か "r2" という正規表現のいずれかにマッ | | | |チし、それを括弧で囲まれた正規表現と見なす | +---------------------------------------------------------------+ emacs の正規表現は、ERE 同様の "+" と "?" をメタ文字と扱う拡張を     してはありますが、基本的に BRE です。これら文字を emacs の正規表 現で "\" でエスケープする必要はありません。     grep(1) をつかうと正規表現を使って文字列探索ができます。     例えば、次を試してみて下さい: $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL     GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program ヒント     「着色化されたコマンド」を参照下さい。 1.6.3. 置換式     置換式の場合、一部の文字に特別な意味があります 表1.25 置換式 +---------------------------------------------------------------+ |置換式| 置換式を置換する文字の説明 | |------+--------------------------------------------------------|     |& |正規表現がマッチしたもの (emacs では \& を使用) | |------+--------------------------------------------------------| |\n |n番目の括弧で囲まれた正規表現にマッチしたもの ("n" は数 | | |字) | +---------------------------------------------------------------+     Perl の置換式では、"\n" の代わりに "$n" をつかい、"&" には特段の 意味はありません。     例えば、次を試してみて下さい: $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'     zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&=     ここで、括弧で囲まれた正規表現のスタイルと、マッチした文字列が異 なるツール上でテキスト置換処理にどう使われるかとに注目下さい。     これらの正規表現は一部エディター内でカーソールの動きやテキスト置 換アクションに対しても使えます。 シェルコマンドラインの行末のバックスラッシュ "\" は改行をホワイト     スペース文字としてエスケープするので、シェルコマンドライン入力を 次行に継続させます。     これらのコマンドを習うために、関連するマニュアルページを全て読ん で下さい。 1.6.4. 正規表現を使ったグローバル置換     ed(1) コマンドは次のようにすると "file" 中に存在する全ての "FROM_REGEX" を "TO_TEXT" で置換できます。 $ ed file < の組合せです。 シェルの IFS トリックを注意深く使って下さい。シェルがスクリプトの     一部を入力として解釈した場合に、奇妙なことが起きるかもしれません 。 $ IFS=":," # use ":" and "," as IFS $ echo IFS=$IFS, IFS="$IFS" # echo is a Bash builtin IFS= , IFS=:, $ date -R # just a command output     Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> input to main shell Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # reset IFS to the default $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200 1.6.6. コマンドをパイプするためのスクリプト断片     次のスクリプトはパイプの一部として素晴らしいことをします。 表1.26 コマンドをパイプするためのスクリプト断片 +---------------------------------------------------------------+ |スクリプト断片 (1行 | コマンドの効果 | | 入力) | | |--------------------+------------------------------------------| |find /usr -print |"/usr" の下の全ファイル発見 | |--------------------+------------------------------------------| |seq 1 100 |1から100までプリント | |--------------------+------------------------------------------| || xargs -n 1 |パイプからの各項目を引数としてコマンドを反| | |復実行 | |--------------------+------------------------------------------| || xargs -n 1 echo |パイプからのホワイトスペースで分離された項| | |目を行に分割 | |--------------------+------------------------------------------| || xargs echo |パイプからの全ての行を1行にマージ | |--------------------+------------------------------------------| || grep -e | を含む行を抽出 | | | | |--------------------+------------------------------------------| || grep -v -e | を含まない行を抽出 | | | | |--------------------+------------------------------------------| || cut -d: -f3 - |":" で区切られた3番目のフィールドを抽出 | | |(passwd ファイルなど) | |--------------------+------------------------------------------| || awk '{ print $3 }'|ホワイトスペースで区切られた3番目のフィー |     | |ルドを抽出 | |--------------------+------------------------------------------| || awk -F'\t' '{ |タブで区切られた3番目のフィールドを抽出 | |print $3 }' | | |--------------------+------------------------------------------| || col -bx |バックスペースを削除し、タブをスベースに変| | |換 | |--------------------+------------------------------------------| || expand - |タブをスベースに変換 | |--------------------+------------------------------------------| || sort| uniq |入力をソートし重複箇所を削除 | |--------------------+------------------------------------------| || tr 'A-Z' 'a-z' |大文字を小文字に変換 | |--------------------+------------------------------------------| || tr -d '\n' |複数行を1行に連結 | |--------------------+------------------------------------------| || tr -d '\r' |キャリッジリターンを削除 | |--------------------+------------------------------------------| || sed 's/^/# /' |各行頭に "#" を追加 | |--------------------+------------------------------------------| || sed 's/\.ext//g' |".ext" を削除 | |--------------------+------------------------------------------| || sed -n -e 2p |2番目の行を表示 | |--------------------+------------------------------------------| || head -n 2 - |最初の2行を表示 | |--------------------+------------------------------------------| || tail -n 2 - |最後の2行を表示 | +---------------------------------------------------------------+ 1行のシェルスクリプトは find(1) や xargs(1) を使って非常に複雑な     操作を多くのファイルに繰り返し実行できます。「ファイル選択の慣用 句」と「ファイルに関してループしながらコマンドを反復実行」を参照 下さい。 シェルの対話モードを使うのが複雑過ぎるようになったときには、シェ     ルのスクリプトを書くのも一計です (「シェルスクリプト」参照下さい) 。 第2章 Debian パッケージ管理 注記     本章は最新安定版リリースがコード名: jessie と言う前提で書かれてい ます。 Debian は、フリーソフトウエアーのコンパイル済みバイナリーパッケー     ジからなる整合性あるディストリビューションを作り、そのアーカイブ を通じてそれらを頒布するボランティア組織です。 Debian のアーカイブは、HTTP や FTP 法によるアクセスされるための多     くのリモートのミラーサイトとして提供されています。それは、CD-ROM/ DVD によっても提供されています。 Debian のパッケージ管理システムは、適正に使われれば、バイナリーパ     ッケージの整合性ある組み合わせがアーカイブからシステムにインスト ールされるようになっています。現在、amd64 アーキテクチャーでは 53262 つのパッケージが利用できます。 Debian のパッケージ管理システムは、多彩な歴史があり、使用されるフ     ロントエンドのユーザープログラムやバックエンドのアーカイブへのア クセス方法に多くの選択肢があります。現在は以下を推薦します。 * パッケージのインストールや削除や dist-upgrade を含む全てのコ マンドライン操作を提供する、apt-get(8)。     * インストールされたパッケージの管理したり使用可能なパッケージ を探索するためのインタラクティブなテキストインターフェースを 提供する、aptitude(8) 表2.1 Debian のパッケージ管理ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |-------------------+------+----+-------------------------------| | | | |アドバンスドパッケージツール | | | | |(APT)、"http" や "ftp" や | |apt |V:867,|3449|"file" というアーカイブへのアク| | |I:999 | |セス方法を dpkg に提供するフロ | | | | |ントエンド (apt-get/apt-cache | | | | |コマンドを含む) | |-------------------+------+----+-------------------------------| | |V:169,| |aptitude(8) を使うインタラクテ | |aptitude |I:932 |4441|ィブなターミナルベースのパッケ | | | | |ージマネージャー | |-------------------+------+----+-------------------------------| | |V:41, | |Debian システムにタスクをインス| |tasksel |I:971 |374 |トールするための選択ツール (APT| | | | |のフロントエンド) | |-------------------+------+----+-------------------------------| | |V:110,| |セキュリティーアップデートの自 | |unattended-upgrades|I:279 |227 |動インストールを可能にする APT | | | | |の拡張パッケージ | |-------------------+------+----+-------------------------------| | | | |ターミナルベースのパッケージマ | |dselect |V:6, |2500|ネージャー (過去の標準、APT や |     | |I:79 | |他の旧式のアクセス法のフロント | | | | |エンド) | |-------------------+------+----+-------------------------------| |dpkg |V:929,|6749|Debian のためのパッケージ管理シ| | |I:999 | |ステム | |-------------------+------+----+-------------------------------| | |V:71, | |グラフィカルなパッケージマネー | |synaptic |I:457 |6930|ジャー (APT の GNOME フロントエ| | | | |ンド) | |-------------------+------+----+-------------------------------| | | | |APT ユーティリティープログラム:| |apt-utils |V:373,|1088|apt-extracttemplates(1) と | | |I:997 | |apt-ftparchive(1) と | | | | |apt-sortpkgs(1) | |-------------------+------+----+-------------------------------| |apt-listchanges |V:335,|338 |パッケージ変更履歴の通知ツール | | |I:827 | | | |-------------------+------+----+-------------------------------| |apt-listbugs |V:7, |392 |APT による各インストール前にク | | |I:12 | |リチカルバグをリストする | |-------------------+------+----+-------------------------------| | |V:12, | |APT パッケージ探索ユーティリテ | |apt-file |I:78 |77 |ィー -- コマンドラインインター | | | | |フェース | |-------------------+------+----+-------------------------------| |apt-rdepends |V:0, |65 |パッケージの依存関係を再帰的に | | |I:6 | |リスト | +---------------------------------------------------------------+ 2.1. Debian パッケージ管理の前提条件 2.1.1. パッケージ設定     Debian システム上でのパッケージ設定の要点を次に記します。 * システム管理者による手動の設定は尊重されます。言い換えれば、 パッケージ設定システムは利便性のために勝手な設定をしません。 * 各パッケージは、パッケージの初期インストールプロセスを助ける ための debconf(7) と呼ばれる標準化されたユーザーインターフェ ースを使用し、それぞれ毎の設定スクリプトとともに提供されます 。 * Debian の開発者はパッケージの設定スクリプトによりユーザーのア ップグレードが滞りなく進むように最大限の努力を行います。     * システム管理者にはパッケージされたソフトウエアーの全機能が利 用可能です。ただしセキュリティーリスクのある機能はデフォール トのインストール状態では無効にされています。 * セキュリティーリスクのあるサービスを手動でアクティベートした 場合は、リスクの封じ込めはあなたの責任です。 * システム管理者は難解奇異な設定を手動で有効にできます。ただこ んなことをすればポピュラーな一般の補助プログラムとは干渉して しまうかもしれません。 2.1.2. 基本的な注意事項 警告     ランダムな混合のスイーツからパッケージをインストールしてはいけま せん。コンパイラーの ABI とかライブラリーのバージョンとかインター プリターの機能等のシステム管理に関する深い知見が必要なパッケージ の整合性がきっと破壊されます。 初心者の Debian システム管理者は Debian の安定版 stable リリース     をセキュリティーアップデートを適用しながら使うべきです。Debian シ ステムを非常によく理解するまでは、用心として次の有効なアクション ですら避けておくべきと考えます。次は留意点です。 * "/etc/apt/sources.list" の中にテスト版 testing とか不安定版 unstable とかを含めません。 * "/etc/apt/sources.list" の中に標準の Debian と Debian 以外の Ubuntu のようなアーカイブを混在させません。 * "/etc/apt/preferences" を作成しません。 * パッケージ管理ツールのデフォールトを影響を理解せずに変更しま せん。     * ランダムなパッケージを "dpkg -i " でインスト ールしません。 * ランダムなパッケージを "dpkg --force-all -i " で絶対インストールしません。 * "/var/lib/dpkg/" の中のファイルを消去や改変しません。 * ソースから直接コンパイルしたソフトウエアープログラムをインス トールする際にシステムファイルを上書きしません。 + 必要な場合は "/usr/local/" か "/opt/" 中にインストールし ます。     上記のアクションで起きる Debian パッケージシステムへのコンパチブ ルでない効果はシステムを使えなくするかもしれません。     ミッションクリティカルなサーバーを走らせる真剣な Debian システム 管理者は更なる用心をすべきです。 * 安全な条件下であなたの特定の設定で徹底的にテストすることなく セキュリティーアップデートをも含めた如何なるパッケージもイン ストールをしてはいけません。     + システム管理者のあなたがシステムに対して最終責任がありま す。 + Debian システムの長い安定性の歴史それ自体は何の保証でもあ りません。 2.1.3. 永遠のアップグレード人生 私が上記で警告したとはいえ、自分自身で管理するデスクトップ環境で は Debian のテスト版 testing や不安定版 unstable のスイーツを自分     のメインのシステムとして使おうと多くの本書の読者が望むことは分か っています。システムは非常に快調に動くし、頻繁に更新されるし、最 新の機能が提供されるからです。 注意     あなたの業務サーバーには、セキュリティーアップデートをした安定版 stable スイーツを推薦します。例えばあなたの母親の PC のように、管 理に限られた時間しか割けないデスクトップ PC に関しても同様の事が 言えます。 "/etc/apt/sources.list" の中のディストリビューション文字列を、     "testing" とか "unstable" というスイーツ名、もしくは "stretch と か "sid" というコード名に単に設定するだけで十分です。 testing や unstable を使うことは大変楽しいけれど、リスクがついて きます。Debian システムの unstable スイーツさえおおむね非常に安定 に見えますが、Debian システムの testing や unstable スイーツでは     過去パッケージ上の問題をいくつか経験して来てるし、その一部は簡単 には解決できないものでした。結構痛い目に会うことになるかもしれま せんよ。時々、壊れたパッケージや機能の欠損が数週間続くことが起こ ります。     Debian パッケージのバグからの早急かつ簡単な復元を確実にするいくつ かのアイデアがここにあります。 * Debian システムの安定版 stable スイーツを別のパーティションに インストールし、システムをヂュアルブータブル化 * レスキューブートのためのインストール用 CD を手元に確保     * apt-listbugs をインストールしてアップグレードの前に Debian バ グトラッキングシステム (BTS) をチェックを考慮 * 問題回避するのに十分なだけのパッケージシステムの基盤を学習 * chroot か類似の環境を作り事前に最新のシステムを実行 (「仮想化 システム」参照下さい) (これらの用心のための方策の何れもできないなら、テスト版 testing     や不安定版 unstable スイーツを使うのにはあなたはきっと準備不足で す。) 以下に記すことにより悟りを開けば、アップグレード地獄という果てし     ない因果応報の葛藤から人は解脱し、Debian の涅槃の境地に到達できま す。 2.1.4. Debian アーカイブの基本     Debian アーカイブをシステムユーザーの視点から見てみます。 ヒント     Debian アーカイブの正式のポリシーは Debian ポリシーマニュアル、第 2章 - Debian アーカイブに規定されています。 典型的な HTTP アクセスの場合、現在の安定版 stable=jessie システム     を例にとると、次の様に "/etc/apt/sources.list" ファイルの中にアー カイブは規定されています。 deb http://ftp.XX.debian.org/debian/ jessie main contrib non-free deb-src http://ftp.XX.debian.org/debian/ jessie main contrib non-free     deb http://security.debian.org/ jessie/updates main contrib deb-src http://security.debian.org/ jessie/updates main contrib "ftp.XX.debian.org" はあなたの所在場所に合う、Debian の全世界ミラ     ーサイトリスト中に見つかるミラーサイトの URL、例えば日本なら "ftp.jp.debian.org"、に置き換えなければいけません。これらのサーバ ーの状況は Debian ミラー確認サイトで確認できます。     上記で、次の安定版 stable がリリースされて驚かされ無いように、私 はスイート名の "stable" でなくコード名の "jessie" を使います。     "/etc/apt/sources.list" の意味は sources.list(5) に記載されていて 、要点は以下です。 * "deb" 行がバイナリーパッケージのための定義です。 * "deb-src" 行がソースパッケージのための定義です。 * 一番目の引数は、Debian アーカイブの root URL です。     * 二番目の引数は、スイーツ名かコード名のどちらかで与えられるデ ィストリビューション名です。 * 三番目次の引数は、Debian アーカイブの中の有効なアーカイブのエ リア名のリストです。 ソース関連のメタデーターにアクセスしない aptitude のためだけなら "deb-src" 行は安全に省略 (もしくは "#" を行頭に挿入してコメントア     ウト) することができます。こうするとアーカイブのメタデーターの更 新速度が向上します。URL は "http://" や "ftp://" や "file://" 等 々の何れも可能です。 ヒント もし上記の例で "jessie" ではなく "sid" が使われる場合には、セキュ     リティーアップデートのための "deb: http://security.debian.org/ ..." 行は不要です。安定版 stable とテスト版 testing (即ち jessie と stretch) にのみセキュリティーアップデートがあります。 "sid" (不安定版 unstable) のためにはセキュリティーアップデートのアーカ イブが存在しません。     次は設定ファイル内に用いられる Debian アーカイブサイトの URL とス イーツ名もしくはコード名です。 表2.2 Debian アーカイブサイトのリスト +---------------------------------------------------------------+ | アーカイブの URL | スイート名 (コード名) | 目的 | |-------------------+-----------------------+-------------------| |http:// | |安定版 (jessie) の | |ftp.XX.debian.org/ |stable (jessie) |リリース | |debian/ | | | |-------------------+-----------------------+-------------------| |http:// | |テスト版 (stretch) | |ftp.XX.debian.org/ |testing (stretch) |のリリース | |debian/ | | | |-------------------+-----------------------+-------------------| |http:// | |不安定版 (sid) のリ| |ftp.XX.debian.org/ |unstable (sid) |リース | |debian/ | | | |-------------------+-----------------------+-------------------| |http:// | |実験的プリリリース | |ftp.XX.debian.org/ |experimental |(任意、開発者専用) | |debian/ | | | |-------------------+-----------------------+-------------------|     |http:// | |次回安定版ポイント | |ftp.XX.debian.org/ |stable-proposed-updates|リリース用のアップ | |debian/ | |デート (任意) | |-------------------+-----------------------+-------------------| |http:// | |安定版用のセキュリ | |security.debian.org|stable/updates |ティーアップデート | |/ | |(重要) | |-------------------+-----------------------+-------------------| |http:// | |テスト版用のセキュ | |security.debian.org|testing/updates |リティーアップデー | |/ | |ト (重要) | |-------------------+-----------------------+-------------------| | | |jessie のためのスパ| |http:// | |ムフィルターや IM | |ftp.XX.debian.org/ |jessie-updates |クライアント他用の | |debian/ | |コンパチブルなアッ | | | |プデート | |-------------------+-----------------------+-------------------| |http:// | |jessie のための新し| |ftp.XX.debian.org/ |jessie-backports |くバックポートされ | |debian/ | |たパッケージ (任意)| +---------------------------------------------------------------+ 注意 セキュリティーアップデートされた純粋な安定版 stable リリースのみ が最善の安定性を提供します。一部 testing や unstable 由来のパッケ     ージを混用してほとんど stable リリースを走らせることは、純粋な unstable リリースを走らせるよりリスクがあります。stable リリース の下で最新バージョンのいくつかのプログラムが本当に必要なら、 jessie-updatesや http://backports.debian.org (「Updates と Backports」参照下さい) サービスからのパッケージを使って下さい。こ れらのサービスは細心の注意を持って使う必要があります。 注意 基本的に、stable か testing か unstable のスイーツの内の1つだけを "deb" 行に書くべきです。もし、stable と testing と unstable のス     イーツの何らかの組み合わせを "deb" 行に書けば、APT プログラムは、 最新のアーカイブのみが有効であるにもかかわらず、実行速度が低下し ます。"/etc/apt/preferences" ファイルがはっきりとした目的を持って 使われている場合 (「候補バージョンの調整」) のみ複数のリストに意 味があります。 ヒント     stable や testing スイーツの Debian システムでは、上記の例のよう にセキュリティーアップデートを有効とするように "/etc/apt/ sources.list" の中に "http://security.debian.org/" の行を含めるこ とはいいことです。 注記 stable アーカイブのセキュリティーバグは Debian のセキュリティーチ ームにより修正されます。本活動は非常に厳格で信頼できるものです。 testing アーカイブのセキュリティーバグは Debian の testing セキュ     リティーチームにより修正されます。諸所の事情で、本活動は stable ほどは厳格ではなく、修正された unstable パッケージの移行を待つ必 要があるかもしれません。unstable アーカイブのセキュリティーバグは 個別のメンテナにより修正されます。活発にメンテされている unstable パッケージはアップストリームのセキュリティー修正を使うことで通常 比較的良い状態です。Debian がセキュリティーバグへ如何に対応するか に関しては Debian security FAQ を参照下さい。 表2.3 Debian アーカイブエリアのリスト +---------------------------------------------------------------+ | エリア |パッケー| パッケージ構成要素のクライテリア | | | ジ数 | | |--------+--------+---------------------------------------------| |main |52397 |DFSG に完全準拠し、non-free のパッケージに非 |     | | |依存 (main = 主要) | |--------+--------+---------------------------------------------| |contrib |328 |DFSG に完全準拠だが、non-free のパッケージに | | | |依存有り (contrib = 寄与) | |--------+--------+---------------------------------------------| |non-free|537 |非 DFSG 準拠 | +---------------------------------------------------------------+ ここで、上記にあるパッケージ数は amd64 アーキテクチャーに関する数     字です。main エリアのアーカイブのみが Debian システムです(「 Debian は 100% フリーソフトウェアーです」参照)。     Debian アーカイブの構成は、各アーカイブの URL の後ろに dists か pool をつけた URL にブラウザーを向ければ学習できます。 ディストリビューションは、スイーツとコード名の2つの方法で言及され     ます。この他にディストリビューションと言う言葉は多くの文書でスイ ーツの同義語としても使われています。スイーツとコード名の関係は次 のようにまとめられます。 表2.4 スイーツとコード名の関係 +---------------------------------------------------------------+ |タイミング |スイーツ = 安定|スイーツ = テスト|スイーツ = 不安定| | | 版 stable | 版 testing | 版 unstable | |-----------+---------------+-----------------+-----------------|     |jessie リリ|コード名 = |コード名 = |コード名 = sid | |ース後 |jessie |stretch | | |-----------+---------------+-----------------+-----------------| |stretch リ |コード名 = |コード名 = buster|コード名 = sid | |リース後 |stretch | | | +---------------------------------------------------------------+     コード名の歴史は、Debian FAQ: 6.2.1 Which other codenames have been used in the past? に記載されています。 比較的厳格な Debian アーカイブの用語法では、"セクション" という言     葉はアプリケーションの分野によるパッケージ分類に特化して使われま す。(しかし、"main セクション" という言葉は main エリアを提供する Debian アーカイブ部分を表現するのにしばしば使われています。) Debian デベロッパー (DD) が不安定版 unstable アーカイブに新たなア     ップロードを (incoming での処理を経由して) する度毎に、アップロー ドするパッケージが最新の不安定版 unstable アーカイブの最新のパッ ケージ集合とコンパチブルであるようにする義務が DD にはあります。 重要なライブラリーのアップグレード他の理由で DD がこのコンパチビ     リティーを壊す際には、debian-devel のメーリングリスト他に通常アナ ウンスがされます。 Debian のアーカイブ管理スクリプトによって非安定版 unstable アーカ イブからテスト版 testing アーカイブへパッケージ集合が移動される前 に、アーカイブ管理スクリプトはパッケージの成熟度 (約10日経過) と     RC バグレポート状況を確認するばかりでなく、テスト版 testing アー カイブの最新パッケージ集合とのコンパチブルであるようにするように 努めます。このプロセスがあるので、テスト版 testing アーカイブは非 常に新しくかつ使いやすいのです。 リリースチームによる徐々のアーカイブ凍結過程を通じて、少々の手動 の介入を伴いつつテスト版 testing アーカイブは完全に整合性をもった バグの無い状態へと徐々に熟成されます。そして、古いテスト版     testing アーカイブのコード名を新たな安定版 stable アーカイブへと 割り当て、新たなコード名を新たなテスト版 testing アーカイブへと割 り当てることで、新たな安定版 stable がリリースされます。新たなテ スト版 testing アーカイブの当初の内容は、新たにリリースされた安定 版 stable アーカイブとまったく同じです。     不安定版 unstable もテスト版 testing アーカイブもともにいくつかの 要因で一時的に細かな問題発生があるかもしれません。 * ブロークンなパッケージのアーカイブへのアップロード (主に unstable にて) * 新規パッケージをアーカイブに受け入れる際の遅延 (主に unstable にて)     * アーカイブの同期のタイミング問題 (testing と unstable の両方 にて)。 * パッケージの除去などのアーカイブへの手動の介入 (どちらかとい えば testing にて)、等。     もしこれらのアーカイブを使おうと考えるなら、この種の細かな問題の 修復や回避は必須技能です。 注意 たとえいつも非安定版 unstable やテスト版 testing アーカイブを使っ ていようとも、ほとんどのデスクトップユーザーは新たな安定版 stable リリースの後約数ヶ月はセキュリティーアップデートされた安定版 stable アーカイブを使うべきです。この移行期は、非安定版 unstable     もテスト版 testing アーカイブの何れももほとんどの人に良いものでは ありません。非安定版 unstable アーカイブを使おうとすると、核とな るパッケージが大アップグレードの嵐に見舞われるので、あなたのシス テムをうまく使える状態に保つのは困難です。テスト版 testing アーカ イブを使おうとしても、安定版 stable アーカイブとほとんど同じ内容 でセキュリティーサポートはありません (Debian testing-security-announce 2008-12)。1ヶ月ほど経てば、非安定版 unstable アーカイブなら注意を払えば使えるかもしれません。 ヒント     テスト版 testing アーカイブを追跡している際には、除去されたパッケ ージによって引き起こされる問題は該当するバグ修正のためにアップロ ードされたパッケージを非安定版 unstable アーカイブからインストー ルすれば通常回避できます。     アーカイブの定義は、Debian ポリシーマニュアルを参照下さい。 * "セクション" * "優先度 (priorities)"     * "ベースシステム" * "必須パッケージ" 2.1.5. Debian は 100% フリーソフトウェアーです     Debian は以下の理由で 100% フリーソフトウエアーです: * Debian はユーザーの自由を尊重すべくデフォルトではフリーソフト ウエアーのみをインストールします。 * Debian は main 中にはフリーソフトウエアーのみを提供します。     * Debian は main からのフリーソフトウエアーのみを実行することを 推奨します。 * main 中のいかなるパッケージも non-free や contrib 中のいずれ のパッケージに依存しないし、これらを推薦することもありません 。     一部の人は以下の2つの事実が矛盾するのでは無いかとの疑問を持ちます 。 * 「Debian は 100% フリーソフトウェアーであり続けます」。Debian 社会契約の第一項)     * Debian サーバーは non-free や contrib パッケージをホストしま す。     これらは以下の理由で矛盾しません。 * Debian システムは 100% フリーソフトウエアーでそのパッケージは Debian サーバーの main エリア中にホストされます。     * Debian システム外のパッケージは Debian サーバーの non-free と contrib エリア中にホストされます。     これらは Debian 社会契約の第4項と第5項中に正確に説明されています: * 私たちはユーザーとフリーソフトウェアーを大切にします + 私たちはユーザーとフリーソフトウェアーコミュニティーから の要求に従います。彼らの関心を最優先に考えます。私たちは さまざまな状況におけるコンピューター利用環境の運用に関し て、ユーザーの必要を満たすように行動します。私たちは Debian システム上での利用を目的としたフリーではない著作物 に敵対することはありません。またそのような著作物を作成ま たは利用する人々に対して、料金を徴収することはありません 。私たちは、Debian システムとその他の著作物の両方を含むデ ィストリビューションを、第三者が作成することも認めていま す。その際、私たちは料金を徴収しません。私たちはこれらの 目標を増進させるために、これらのシステムの使用を妨げるよ うな法的な制約のない、高品質な素材を統合したシステムを提 供します。     * 私たちのフリーソフトウェアー基準に合致しない著作物について + 私たちは、Debian フリーソフトウェアーガイドラインに適合し ていない著作物を使わなければならないユーザーがいることを 認めています。このような著作物のために、私たちはアーカイ ブに「contrib」と「non-free」という領域を作りました。これ らの領域にあるパッケージは、Debian 上で使用できるよう設定 されていますが、 Debian システムの一部ではありません。私 たちは、CD 製造業者がこれらの領域にあるパッケージを彼らの CD に収録して配布できるかどうか判断する際に、それぞれのパ ッケージのライセンスを読んで決めるよう奨めています。この ように、フリーではない著作物は Debian の一部ではありませ んが、その使用をサポートし、フリーではないパッケージのた めの (バグ追跡システムやメーリングリストのような) インフ ラストラクチャーを用意しています。     ユーザーは non-free や contrib エリア中のパッケージを使用するリス クを認識すべきです。 * そのようなソフトウエアーパッケージに関する自由の欠如 * そのようなソフトウエアーパッケージに関するDebianからのサポー     トの欠如 (Debian はソフトウエアーのソースコードに適切なアクセ スなしにはソフトウエアーをサポートできません。) * あなたの 100% フリーソフトウエアーの Debain システムへの汚染 Debian フリーソフトウェアーガイドラインは Debian のフリーソフトウ エアー基準です。Debian は「ソフトウエアー」に関して、パッケージ中     の文書、ファームウエアー、ロゴ、アート作品を含む最も広義の解釈を します。このことにより Debian のフリーソフトウエアー基準は非常に 厳格なものとなります。 main に関する厳格なフリーソフトウエアー基準に合致させるため、 Debian は Firefox や Thunderbird や Seamonkey 等のソフトウエアー     パッケージからそれらのロゴやアート作品データーを削除することで Mozilla ブランドを削除し、それらをそれぞれ Iceweasel や Icedove や Iceape として出荷しています。     典型的な non-free や contrib パッケージは以下のタイプの自由に頒布 できるパッケージを含んでいます。 * GCC や Make 等の変更不可部分付きの GNU フリー文書利用許諾契約 書に基づく文書パッケージ。 (主に non-free/doc セクション中に ある) * 「ハードウエアードライバーとファームウエアー」に列記された中     で non-free とあるソースコード無しのバイナリーデーターを含む ファームウエアーパッケージ。 (主に non-free/kernel セクション 中にある) * 商用使用やコンテント変更に関する制約のあるゲームやフォントの パッケージ。 non-free と contrib パッケージの数は main パッケージの数の 2% 以 下です。non-free や contrib エリアへのアクセスを有効にしてもパッ     ケージ起源は不明瞭になりません。aptitude(8) をインタラクティブで フルスクリーンに使用すると、どのエリアからどのパッケージをインス トールするのかを完全に可視化しコントロールできるので、あなたのシ ステムをあなたの意向通りの自由の程度に合わせて維持できます。 2.1.6. パッケージ依存関係 Debian システムはコントロールファイル中のバージョン情報付きのバイ     ナリー依存関係宣言を通して整合性のあるバイナリーパッケージの集合 を提供します。ここにその少々簡素化し過ぎの定義を示します。 * "Depends" + これは絶対依存を宣言し、このフィールドにリストされた全て のパッケージは同時または事前にインストールされていなけれ ばいけません。 * "Pre-Depends" + これは、リストされたパッケージが事前にインストールを完了 している必要がある以外は、Depends と同様です。 * "Recommends" + これは強いが絶対でない依存を宣言します。多くのユーザーは このフィールドにリストされたパッケージ全てがインストール されていなければ、当該パッケージを望まないでしょう。 * "Suggests" + これは弱い依存を宣言します。このパッケージの多くのユーザ ーはこのフィールドにリストされたパッケージをインストール すればメリットを享受できるとは言え、それら抜きでも十分な 機能が得られます。 * "Enhances"     + これは Suggests 同様の弱い依存を宣言しますが、依存作用の 方向が逆です。 * "Breaks" + これは通常バージョン制約付きでパッケージのインコンパチビ リティーを宣言します。一般的にこのフィールドにリストされ た全てのパッケージをアップグレードすることで解決します。 * "Conflicts" + これは絶対的排他関係を宣言します。このフィールドにリスト された全てのパッケージを除去しない限り当該パッケージをイ ンストールできません。 * "Replaces" + 当該パッケージによりインストールされるファイルがこのフィ ールドにリストされたパッケージのファイルを置き換える際に これを宣言します。 * "Provides" + 当該パッケージがこのフィールドにリストされたパッケージの ファイルと機能の全てを提供する際にこれを宣言します。 注記     正常な設定として "Provides" と "Conflicts" と "Replaces" とを単一 バーチャルパッケージに対し同時宣言することがあります。こうすると いかなる時にも当該バーチャルパッケージを提供する実パッケージのう ち確実に一つだけがインストールされます。     ソースの依存関係をも含む正式の定義は the Policy Manual: Chapter 7 - Declaring relationships between packages にあります。 2.1.7. パッケージ管理のイベントの流れ     パッケージ管理の簡略化されたイベントの流れをまとめると次のように なります。 * 更新 ("aptitude update" か "apt-get update"): 1. アーカイブメタデーターをリモートアーカイブから取得 2. APT が使えるようローカルメタデーターの再構築と更新 * アップグレード ("aptitude safe-upgrade" と "aptitude full-upgrade" か、"apt-get upgrade" と "apt-get dist-upgrade"): 1. 全てのインストール済みパッケージに関して、通常最新の利用 可能なバージョンが選ばれる候補バージョンを選択 (例外につ いては「候補バージョンの調整」参照下さい) 2. パッケージ依存関係解決の実行 3. もし候補バージョンがインストール済みバージョンと異なる際 には、選ばれたバイナリーパッケージをリモートアーカイブか ら取得 4. 取得バイナリーパッケージの開梱 5. preinst スクリプトの実行 6. バイナリーファイルのインストール 7. postinst スクリプトの実行 * インストール ("aptitude install ..." か "apt-get install ..."): 1. コマンドラインにリストされたパッケージの選択     2. パッケージ依存関係解決の実行 3. 選ばれたバイナリーパッケージをリモートアーカイブから取得 4. 取得バイナリーパッケージの開梱 5. preinst スクリプトの実行 6. バイナリーファイルのインストール 7. postinst スクリプトの実行 * 削除 ("aptitude remove ..." か "apt-get remove ..."): 1. コマンドラインにリストされたパッケージの選択 2. パッケージ依存関係解決の実行 3. prerm スクリプトの実行 4. 設定ファイル以外のインストール済みファイルの削除 5. postrm スクリプトの実行 * 完全削除 ("aptitude purge ..." か "apt-get purge ..."): 1. コマンドラインにリストされたパッケージの選択 2. パッケージ依存関係解決の実行 3. prerm スクリプトの実行 4. 設定ファイルを含めたインストール済みファイルの削除 5. postrm スクリプトの実行     上記では全体像の理解のためにわざと技術詳細を端折っています。 2.1.8. パッケージ管理のトラブルへの応急対処法 内容が正確な正式文書を読むように心がけるべきです。まず Debian に 特定のことが記載された "/usr/share/doc//     README.Debian" を最初に読むべきです。また "/usr/share/doc/ /" の中にある他の文書も参照すべきです。「Bash のカ スタム化」に書かれたようなシェル設定がされていれば、次のようにタ イプして下さい。 $ cd     $ pager README.Debian $ mc     さらに詳しい情報を得るには "-doc" というサフィクスを持った対応す る文書パッケージをインストールする必要があるかもしれません。     特定パッケージに関する問題に出会った際には、Debian バグトラッキン グシステム (BTS) サイトを必ず確認します。 表2.5 特定パッケージの問題解決のためのキーとなるウェッブサイトの リスト +---------------------------------------------------------------+ | ウェッブサイト | コマンド | |------------------------------+--------------------------------| |Debian バグトラッキングシステ |sensible-browser "http:// |     |ム (BTS) のホームページ |bugs.debian.org/" | |------------------------------+--------------------------------| |既知のパッケージに関するバグレ|sensible-browser "http:// | |ポート |bugs.debian.org/" | |------------------------------+--------------------------------| |既知のバグ番号に関するバグレポ|sensible-browser "http:// | |ート |bugs.debian.org/" | +---------------------------------------------------------------+     "site:debian.org" や "site:wiki.debian.org" や "site:lists.debian.org" 等を含む検索語で Google を検索します。     バグ報告をする際には、reportbug(1) コマンドを使います。 2.2. 基本的パッケージ管理操作 Debian システム上でのレポジトリーを使ったパッケージ管理操作は     Debian システム上にある多くのAPTを使うパッケージ管理ツールを使い できます。ここでは、apt-get / apt-cache や aptitude といった2つの 基本的なパッケージ管理ツールを説明します。     パッケージをインストールしたりパッケージのメタデーターを更新する ようなパッケージ管理操作には root 権限が必要です。 2.2.1. apt-get/apt-cache と aptitude の比較     aptitude は筆者が主に使う非常に良いインタラクティブツールではあり ますが、注意すべき事実があることを知っておくべきです。 * stable(安定版) Debian システムにおいて、新リリースがあった後 の新リリースシステムへのアップグレードにaptitude コマンドを使 用することは推薦されません。 + それには、"apt-get dist-upgrade" を使うことが推薦されます 。Bug #411280 参照ください。 * aptitude コマンドは時折testing(試験版) や unstable (不安定版) Debian システム上でシステムアップグレードをしようとする際に、 大量のパッケージ削除を提案することが時々あります。     + この状況は多くのシステム管理者を驚かせて来ました。パニッ クしないでください。 + このようなことは gnome-core の様なメタパッケージにより依 存・推薦されるパッケージ間のバージョンのずれにより発生す るようです。 + この状況は aptitude コマンドのメニューから "未実行アクシ ョンの取り消し" を選択し、aptitude を修了し、"apt-get dist-upgrade" を使うことで解決できます。     apt-get や apt-cache コマンドはAPTを使う最も基本的なパッケージ管 理ツールです。 * apt-get/apt-cache はコマンドラインのユーザーインターフェース のみを提供します。 * apt-get はリリース間のような大掛かりなシステムアップグレード に最適です。 * apt-get は頑強で安定なパッケージリゾルバーを提供します。     * apt-getはハードウエアリソースへの要求が楽である。メモリーの消 費は少なく、実行速度が早い * apt-cache はパッケージ名や説明に関して標準の regex を使った検 索機能を提供します。 * apt-get と apt-cache は /etc/apt/preferences を使って複数のバ ージョンのパッケージを管理できますが、それはとても面倒です。     aptitude コマンドは最も多芸なAPTを使うパッケージ管理ツールです。 * aptitude はフルスクリーンのインタラクティブなテキストユーザー インターフェースを提供します。 * aptitude はコマンドラインのユーザーインターフェースも提供しま す。 * aptitude はインストールされたパッケージを検査したり利用可能な パッケージを探索したりするような日常のインタラクティブなパッ     ケージ管理に最適です。 * aptitudeはハードウエアリソースへの要求が厳しい。メモリーの消 費は多く、実行速度も遅い。 * aptitude はパッケージメタデータ全てに関する拡張されたregex を 使った探索を提供します。 * aptitude は /etc/apt/preferences を使わずに複数のバージョンの パッケージを管理できますし、それは非常に直感的です。 2.2.2. コマンドラインによる基本的なパッケージ管理操作     aptitude(8) や apt-get(8) /apt-cache(8) を使うコマンドラインによ るパッケージ管理操作を次に記します。 表2.6 aptitude(8) や apt-get(8) /apt-cache(8) を使うコマンドライ ンによる基本パッケージ管理操作 +---------------------------------------------------------------+ |aptitude シ | apt-get/ | | | ンタックス |apt-cache シ| 説明 | | | ンタックス | | |------------+------------+-------------------------------------| |aptitude |apt-get |パッケージアーカイブメタデーター更新 | |update |update | | |------------+------------+-------------------------------------| |aptitude |apt-get |"foo" パッケージの候補バージョンをそ | |install foo |install foo |の依存関係とともにインストール | |------------+------------+-------------------------------------| |aptitude |apt-get |他のパッケージを削除すること無くイン | |safe-upgrade|upgrade |ストール済みパッケージの候補バージョ | | | |ンをインストール | |------------+------------+-------------------------------------| |aptitude |apt-get |必要なら他のパッケージを削除しながら | |full-upgrade|dist-upgrade|インストール済みパッケージの候補バー | | | |ジョンをインストール | |------------+------------+-------------------------------------| |aptitude |apt-get |設定ファイルを残したまま "foo" パッケ| |remove foo |remove foo |ージを削除 | |------------+------------+-------------------------------------| |N/A |apt-get |既に必要なくなっている自動済みパッケ | | |autoremove |ージを削除 | |------------+------------+-------------------------------------|     |aptitude |apt-get |設定ファイルを含めて "foo" パッケージ| |purge foo |purge foo |を完全削除 | |------------+------------+-------------------------------------| |aptitude |apt-get |収集されローカルに貯蔵されたパッケー | |clean |clean |ジファイルを完全消去 | |------------+------------+-------------------------------------| |aptitude |apt-get |収集されローカルに貯蔵されたパッケー | |autoclean |autoclean |ジファイルのうち古くなったパッケージ | | | |を消去 | |------------+------------+-------------------------------------| |aptitude |apt-cache |"foo"パッケージに関する詳細情報を表示| |show foo |show foo | | |------------+------------+-------------------------------------| |aptitude |apt-cache | | |search |search | とマッチするパッケージを検索 | | | | | |------------+------------+-------------------------------------| |aptitude why|N/A |なぜ とマッチするパッケージが| | | |インストールされるのかを説明 | |------------+------------+-------------------------------------| |aptitude | |なぜ とマッチするパッケージが| |why-not |N/A |インストールされないのかを説明 | | | | | |------------+------------+-------------------------------------| |aptitude |apt-mark |手動インストールされたパッケージをリ | |search '[i!]|showmanual |スト | |M' | | | +---------------------------------------------------------------+ 注記 aptitude コマンドはその拡張されたパッケージリゾルバーのような豊富     なフィーチャーとともに提供されますが、この複雑さは Bug #411123 や Bug #514930 や Bug #570377 のようないくつかのリグレッションを引き 起こしました (また起こしているかもしれません)。疑いのある場合には 、aptitude コマンドに代えて apt-get や apt-cache コマンドを使って ください。 注記     lenny 以降、apt-get と aptitude は自動インストールされたパッケー ジ状態を共有しているので (「APT に関するパッケージ状態」参照下さ い)、これらのツールを特段の問題なく混用できます (Bug #594490 参照 下さい)。 "aptitude why " は "aptitude -v why " とすることで     さらに詳しい情報を表示します。同様の情報は "apt-cache rdepends " とすることでも得られます。 aptitude コマンドが最初コマンドラインモードで実行されパッケージ間     のコンフリクトのような問題に直面した場合は、プロンプトがでた際に "e" を押すことでフルスクリーンのインタラクティブモードに切り替え られます。     "aptitude" のすぐ後ろにコマンドオプションをつけられます。 表2.7 aptitude(8) に関する特記すべきコマンドオプション +---------------------------------------------------------------+ |コマンドオプシ | 説明 | | ョン | | |---------------+-----------------------------------------------| |-s |コマンド結果のシミュレート |     |---------------+-----------------------------------------------| |-d |インストール / アップグレード無しにダウンロード| | |のみする | |---------------+-----------------------------------------------| |-D |自動的なインストールや削除の前に簡単な説明を表 | | |示 | +---------------------------------------------------------------+     詳細は aptitude(8) や "/usr/share/doc/aptitude/README" にある "aptitude user's manual" を参照下さい。 ヒント     現在でも利用可能な dselect パッケージは、過去のリリースでは推薦さ れたフルスクリーンのインタラクティブなパッケージ管理ツールでした 。 2.2.3. aptitude のインタラクティブな使用 インタラクティブなパッケージ管理のためには aptitude をインタラク     ティブモードでコンソールのシェルプロンプトから次のように立ち上げ ます。     $ sudo aptitude -u Password: これによりアーカイブ情報のローカルコピーは更新され、フルスクリー     ンのパッケージリストがメニュー付きで表示されます。Aptitude の設定 ファイルは "~/.aptitude/config" にあります。 ヒント     user の設定ファイルでなく root の設定ファイルを使いたい際には、上 記の例で "sudo aptitude ..." の代わりに "sudo -H aptitude ..." を 使います。 ヒント     Aptitude はインタラクティブに起動されると次にするアクションを自動 的に設定します。その設定が好ましくない場合はメニュー:"Action" → "Cancel pending actions" からリセットすることができます。 2.2.4. aptitude のキーバインディング     パッケージの状態を閲覧し、"予定のアクション" の設定をこのフルスク リーンモードで各パッケージするための重要なキーを次に記します。 表2.8 aptitude のキーバインディングのリスト +---------------------------------------------------------------+ | キー | キーバインディング | |--------------------+------------------------------------------| |F10 もしくくは |メニュー | |Ctrl-t | | |--------------------+------------------------------------------| |? |(より詳細な) キーの意味のヘルプの表示 | |--------------------+------------------------------------------| |F10 → ヘルプ → ユー |ユーザーマニュアルの表示 | |ザーマニュアル | | |--------------------+------------------------------------------| |u |パッケージアーカイブ情報の更新 | |--------------------+------------------------------------------| |+ |パッケージをアップグレードまたはインストー| | |ルするとマーク | |--------------------+------------------------------------------| |- |パッケージを削除するとマーク (設定ファイル| | |は温存) | |--------------------+------------------------------------------| |_ |パッケージを完全削除するとマーク (設定ファ| | |イルも削除) |     |--------------------+------------------------------------------| |= |パッケージをホールド | |--------------------+------------------------------------------| |U |全てのアップグレード可能なパッケージをマー| | |ク (full-upgrade として機能) | |--------------------+------------------------------------------| |g |選ばれたパッケージのダウンロードとインスト| | |ールをスタート | |--------------------+------------------------------------------| |q |現在のスクリーンを終了し変更を保存 | |--------------------+------------------------------------------| |x |現在のスクリーンを終了し変更を廃棄 | |--------------------+------------------------------------------| |Enter |パッケージに関する情報閲覧 | |--------------------+------------------------------------------| |C |パッケージの変更履歴を閲覧 | |--------------------+------------------------------------------| |l |表示されるパッケージの制限を変更 | |--------------------+------------------------------------------| |/ |最初のマッチを検索 | |--------------------+------------------------------------------| |\ |最終検索の反復 | +---------------------------------------------------------------+ コマンドラインのファイル名の規定や、"l" や "/" を押した後のメニュ     ープロンプトは次に記す aptitude の regex (正規表現) が使われます 。aptitude の regex は "~n" で始めそれにパッケージ名を続けた文字 列を使うことで明示的にパッケージ名とマッチさせられます。 ヒント     ビジュアルインターフェースで全てのインストール済みパッケージを候 補バージョンにアップグレードさせるには "U" を押さなければいけませ ん。これをしないと選ばれたパッケージとそれにバージョン付きの依存 関係のある特定のパッケージのみがアップグレードされます。 2.2.5. aptitude の下でのパッケージの表示     インタラクティブなフルスクリーンモードの aptitude(8) はパッケージ リスト中のパッケージは次の例のように表示されます。     idA libsmbclient -2220kB 3.0.25a-1 3.0.25a-2     上記の行は左から次に記すような意味です。 * "現状" フラグ (1番目の文字) * "予定のアクション" フラグ (2番目の文字) * "自動" フラグ (3番目の文字)     * パッケージ名 * "予定のアクション" に帰属されるディスク空間の使用の変化 * パッケージの現バージョン * パッケージの候補バージョン ヒント     "?" を押して表示されるヘルプスクリーンの一番下に全フラグのリスト があります。     現在のローカルの環境設定によって候補バージョンは選ばれます ( apt_preferences(5) と「候補バージョンの調整」を参照下さい)。     "表示" メニューの下にある数種のパッケージ表示が利用できます。 表2.9 aptitude の表示のリスト +---------------------------------------------------------------+ | 表示 |状況 | ビューの説明 | |----------+-----+----------------------------------------------| |パッケージ|良好 |表2.10「標準パッケージ画面の分類」参照 (デフォ| |画面 | |ールト) | |----------+-----+----------------------------------------------| | | |何らかのインストール済みパッケージによって推薦| |推奨を監査|良好 |されているがインストールされていないパッケージ| | | |をリスト | |----------+-----+----------------------------------------------|     |平坦なパッ| |パッケージを分類せずにリスト (regex とともに使| |ケージリス|良好 |用) | |ト | | | |----------+-----+----------------------------------------------| |Debtags 表|十分 |パッケージの debtags のエントリーにより分類し | |示 |使え |たパッケージをリスト | | |る | | |----------+-----+----------------------------------------------| |カテゴリー|非推 |パッケージのカテゴリー別に分類してパッケージを| |別表示 |奨 |リスト (これに代えて Debtags 表示を利用しまし | | | |ょう) | +---------------------------------------------------------------+ 注記     パッケージの debtags によるタグ付け状況を改善するのにご協力下さい !     標準 "パッケージ画面" はパッケージを dselect にいくつかの機能を加 えた感じで分類します。 表2.10 標準パッケージ画面の分類 +---------------------------------------------------------------+ | 分類 | ビューの説明 | |-----------------------------+---------------------------------| |更新可能なパッケージ |section → area → package と整理し| | |てパッケージをリスト | |-----------------------------+---------------------------------| |新規パッケージ |, , | |-----------------------------+---------------------------------| |インストール済みのパッケージ |, , |     |-----------------------------+---------------------------------| |インストールされていないパッ |, , | |ケージ | | |-----------------------------+---------------------------------| |廃止された、またはローカルで |, , | |作成されたパッケージ | | |-----------------------------+---------------------------------| |仮想パッケージ |同一機能のパッケージをリスト | |-----------------------------+---------------------------------| |タスク |タスクに一般的に必要な機能を持つ | | |パッケージのリスト | +---------------------------------------------------------------+ ヒント     Tasks ビューはあなたのタスクに使うパッケージをいいとこ取りするの に使えます。 2.2.6. aptitude を使った探索方法     Aptitude はその regex 式機能を通してパッケージを探索する方法をい くつか提供します。 * シェルコマンドライン: + マッチするパッケージのインストール状態やパッケージ名や短 い説明をリストをすには、"aptitude search ' '" + パッケージの詳細説明のリストをするには、"aptitude show ' '"     * 対話型フルスクリーンモード: + マッチするパッケージにパッケージビューを絞る、"l" + マッチするパッケージを探す、"/" + マッチするパッケージを逆方向に探す、"\" + 次を探す、"n" + 次を逆方向に探す、"N" ヒント     という文字列は、"~" で始めて regex 式と明示されて いない限り、パッケージ名との完全な一致検索として扱います。 2.2.7. aptitude の regex 式     aptitude の regex 式は mutt 的な拡張 ERE (「正規表現」参照下さい) で aptitude に特定なマッチ規則の拡張は次に示すとおりです。 表2.11 aptitude の regex 式のリスト +---------------------------------------------------------------+ |拡張マッチ規| regex 式 | | 則の説明 | | |------------+--------------------------------------------------| |パッケージ名|~n<名前のregex> | |とのマッチ | | |------------+--------------------------------------------------| |記述とのマッ|~d<記述のregex> | |チ | | |------------+--------------------------------------------------| |タスク名との|~t<タスクのregex> | |マッチ | | |------------+--------------------------------------------------| |debtag との |~G | |マッチ | | |------------+--------------------------------------------------| |メンテナとの|~m | |マッチ | | |------------+--------------------------------------------------| |パッケージセ| | |クションとの|~s<セクションのregex> | |マッチ | | |------------+--------------------------------------------------| |パッケージバ| | |ージョンとの|~V<バージョンのregex> | |マッチ | | |------------+--------------------------------------------------| |アーカイブ | | |(archive) と|~A{jessie,stretch,sid} | |のマッチ | | |------------+--------------------------------------------------| |オリジン | | |(origin) と |~O{debian,…} | |のマッチ | | |------------+--------------------------------------------------| |優先度 | | |(priority) |~p{extra,important,optional,required,standard} | |とのマッチ | | |------------+--------------------------------------------------| |必須 | | |(essential) |~E | |パッケージと| | |のマッチ | | |------------+--------------------------------------------------| |仮想パッケー|~v | |ジとのマッチ| | |------------+--------------------------------------------------| |新規パッケー|~N | |ジとのマッチ| | |------------+--------------------------------------------------| |次のアクショ|~a | |ンとのマッチ|{install,upgrade,downgrade,remove,purge,hold,keep}| |------------+--------------------------------------------------| |インストール| | |済みパッケー|~i | |ジとのマッチ| | |------------+--------------------------------------------------| |A-マークのつ| | |いたインスト| | |ール済みパッ| | |ケージとマッ|~M | |チ (自動イン| | |ストール済み| | |パッケージ) | | |------------+--------------------------------------------------| |A-マークのつ| | |いていないイ| | |ンストール済| | |みパッケージ|~i!~M | |とマッチ (管| | |理者が選択し| | |たパッケー | | |ジ) | | |------------+--------------------------------------------------| |インストール| | |済みかつアッ| | |プグレード可|~U | |能なパッケー| | |ジとマッチ | | |------------+--------------------------------------------------| |削除済みだが| | |完全削除され| | |ていないパッ|~c |     |ケージとマッ| | |チ | | |------------+--------------------------------------------------| |削除済みか完| | |全削除済みか| | |削除可能なパ|~g | |ッケージとマ| | |ッチ | | |------------+--------------------------------------------------| |壊れた依存関| | |係宣言をした|~b | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| | の壊 | | |れた依存関係| | |を宣言してい|~B | |るパッケージ| | |とマッチ | | |------------+--------------------------------------------------| | の壊 | | |れた依存関係| | |を宣言してい|~D[:] | |る | | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| | の壊 | | |れた依存関係| | |を宣言してい|~DB[:] | |る | | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| | マ| | |ッチするパッ| | |ケージが | | | の依 |~R[:] | |存関係を宣言| | |しているパッ| | |ケージとマッ| | |チ | | |------------+--------------------------------------------------| | マ| | |ッチするパッ| | |ケージが | | | の壊 |~RB[:] | |れた依存関係| | |を宣言してい| | |るパッケージ| | |とマッチ | | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが依存|~R~i | |するパッケー| | |ジとマッチ | | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが一切|!~R~i | |依存しないパ| | |ッケージとマ| | |ッチ | | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが依存|~R~i|~Rrecommends:~i | |もしくは推薦| | |するパッケー| | |ジとマッチ | | |------------+--------------------------------------------------| |フィルターさ| | |れたバージョ| | |ンの |~S filter | | と| | |マッチ | | |------------+--------------------------------------------------| |常に全てのパ| | |ッケージにマ|~T | |ッチ (真) | | |------------+--------------------------------------------------| |どのパッケー| | |ジにもマッチ|~F | |しない (偽) | | +---------------------------------------------------------------+ * regex 部分は、"^" や ".*" や "$" などを使う egrep(1) や awk (1) や perl(1) といった典型的な Unix 的テキストツールで使われ る ERE と同様です。     * 依存関係を表す はパッケージの相互関係を指定する (depends, predepends, recommends, suggests, conflicts, replaces, provides) の内の1つです。 * デフォールトの依存関係は "depends" です。 ヒント     がヌル文字列の場合は "~T" をコマンドの直後に使っ て下さい。     次がショートカットです。 * "~P" == "~Dprovides:"     * "~C" == "~Dconflicts:" * "…~W term" == "(…|term)" mutt が表現のお手本なので、mutt に慣れているユーザーはすぐ慣れる     でしょう。"User's Manual" ("/usr/share/doc/aptitude/README") 中の "SEARCHING, LIMITING, AND EXPRESSIONS" を参照下さい。 注記 lenny バージョンの aptitude(8) では、新規の "?broken" のような長     形式の regex マッチ形式が、古い "~b" のような短形式のマッチ形式に 代えて使えます。そのためチルダ文字 "~" に加えてスペース文字 " " も regex の終端文字として扱われます。新規の長形式のマッチ形式につ いては "User's Manual" を参照下さい。 2.2.8. aptitude による依存関係の解決 aptitude によるパッケージの選択は、"F10 → Options → Preferences → Dependency handling" のメニュー設定に従って、"Depends:" リストに     規定されたパッケージばかりでは無く "Recommends:" リストに規定され たパッケージも引き込みます。このような自動的にインストールされた パッケージは不要になると aptitude が自動的に削除します。     aptitude コマンドの"自動インストール" 挙動を制御するフラグは apt パッケージ中の apt-mark(8) コマンドを用いても操作できます。 2.2.9. パッケージアクティビティーログ     パッケージアクティビティーの履歴はログファイルで確認できます。 表2.12 パッケージアクティビティーのログファイル +---------------------------------------------------------------+ | ファイル | 内容 | |---------------+-----------------------------------------------| |/var/log/ |全パッケージアクティビティの dpkg レベルのアク | |dpkg.log |ティビティーのログ |     |---------------+-----------------------------------------------| |/var/log/apt/ |APT アクティビティのログ | |term.log | | |---------------+-----------------------------------------------| |/var/log/ |aptitude コマンドアクティビティのログ | |aptitude | | +---------------------------------------------------------------+ これらのログから意味のある理解を迅速に得るのは実際には難しいです     。より簡単な方法については「設定ファイルの変更記録」を参照下さい 。 2.3. aptitude 操作例     aptitude(8) 操作例を次に示します。 2.3.1. regex にマッチするパッケージ名のパッケージをリスト     次のコマンドはパッケージの名前が regex にマッチするパッケージをリ ストします。 $ aptitude search '~n(pam|nss).*ldap'     p libnss-ldap - NSS module for using LDAP as a naming service p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces     これはパッケージの正確な名前を探すときに非常に便利です。 2.3.2. regex マッチをしての閲覧 "平坦なパッケージリスト" のビューで "l" のプロンプトに regex     "~dipv6" を入れるとその意味にマッチするパッケージにビューが制限さ れ、その情報をインタラクティブに閲覧できます。 2.3.3. パッケージの完全削除     削除したパッケージが残した全ての設定ファイルを次のようにして完全 削除できます。     次のコマンドの結果をチェックします。     # aptitude search '~c'     もしリストされたパッケージが完全削除されても問題ないなら、次のコ マンドを実行します。     # aptitude purge '~c'     同様のことをインタラクティブにすればよりきめの細かい結果が得られ ます。 "新規パッケージ画面" のビューで "l" のプロンプトに regex "~c" を     入れると regex にマッチする "削除されたが完全駆除されていない" パ ッケージにビューが制限されます。トップレベルの見出しの上で "[" を 押すと regex にマッチする全てのパッケージが表示されます。 次に "インストールされていないパッケージ" 等のトップレベルの見出 しの上で "_" を押します。その見出しの下の regex にマッチするパッ     ケージだけが完全削除と設定されます。インタラクティブに個々のパッ ケージの上で "=" を押せばそれらのパッケージを完全削除対象から外せ ます。     このテクニックは非常に便利で、他の多くのコマンドキーでも使えます 。 2.3.4. 自動 / 手動インストール状態の整理     (非 aptitude のパッケージインストーラー等を使った後で) パッケージ の自動 / 手動インストールの状態を整理する私の方法を次に記します。 1. aptitude を root としてインタラクティブに起動します。 2. "u" と "U" と "f" と "g" とタイプしてパッケージリストを更新し パッケージをアップグレードします。 3. パッケージ表示制限を "~i(~R~i|~Rrecommends:~i)" と入力するた めに "l" とタイプし、自動インストールとなるよう "M" と "イン ストール済みのパッケージ" の上でタイプします。 4. パッケージ表示制限を "~prequired|~pimportant|~pstandard|~E" と入力するために "l" とタイプし、手動インストールとなるよう "m" と "インストール済みのパッケージ" の上でタイプします。 5. パッケージ表示制限を "~i!~M" と入力するために "l" とタイプし 、"インストール済みのパッケージ" の上で "[" とタイプしてパッ ケージを見えるようにした後で個々のパッケージの上で "-" とタイ プして使っていないパッケージを削除します。     6. パッケージ表示制限を "~i" と入力するように "l" とタイプし、そ して "タスク" の上で手動インストールとなるよう "m" とタイプし ます。 7. aptitude を終了します。 8. "apt-get -s autoremove|less" と root から起動して何が使われて いないのか確認します。 9. aptitude とインタラクティブモードで再起動して必要なパッケージ を "m" でマークします。 10. "apt-get -s autoremove|less" と root から再起動して削除対象が 期待にかなっていることを再確認します。 11. "apt-get autoremove|less" と root から起動して使用していない パッケージを自動削除します。     "Tasks" の上で "m" を押すのも一案で、大量ファイル除去となる事態が 回避できます。 2.3.5. システム全体のアップグレード 注記 新規リリース等への移行は、Debian では下記のようにアップグレードで きるのですが、新たなシステムをクリーンインストールすることを考え     るべきです。こうすると溜めてきたゴミの除去ができる上に最新のパッ ケージの最良の組み合わせも分かります。もちろん安全な場所に完全な システムのバックアップ (「バックアップと復元」参照下さい) を事前 にしなくてはいけません。異なったパーティションを使ったデュアルブ ート設定をすることをスムーズな移行をするためにお薦めします。 "/etc/apt/sources.list" ファイルの内容を新規リリースへと向けるよ     うに変更し、"apt-get update; apt-get dist-upgrade"コマンドを実行 することでシステム全体のアップグレードができます。 安定版 stable からテスト版 testing や不安定版 unstable にアップグ     レードするには、「Debian アーカイブの基本」にある "/etc/apt/ sources.list" 例の "jessie" を "stretch" か "sid" に置き換えます 。 一部のパッケージで移行に関して支障をきたすことが実際には起こるか もしれません。これは大体パッケージ依存関係に起因します。アップグ     レードする差が大きければ大きいほど比較的大きな問題似合う可能性が より大きくなります。以前の安定版 stable からリリース後の新規安定 版 stable への移行では新規リリースノートを読んでそこに記載された 手続き通りに完全にすれば問題発生を防げます。 安定版 stable からテスト版 testing へ移行すると決めた時には頼りに するリリースノートはありません。前回の安定版 stable のリリースの     後で安定版 stable とテスト版 testing の差がかなり大きくなっている かもしれません。そうだとアップグレードをする状況は複雑になってい ます。     メーリングリストから最新情報を収集するとか常識を使うといった予防 措置をしながらフルアップグレードをするべきです。 1. 前回の "リリースノート" を読みます。 2. 全システム (特にデーターや設定情報) をバックアップします。 3. ブートローダーが壊れたときのためにブートできるメディアを確保 します。 4. システムを使っているユーザーに十分事前に通告します。 5. script(1) を使ってアップグレード活動を記録します。 6. 削除をされないように "aptitude unmarkauto vim" 等として、 "unmarkauto" を重要なパッケージに適用します。 7. デスクトップタスクにあるパッケージ等を削除して、インストール されたパッケージを減らしてパッケージがコンフリクトする可能性     を減らします。 8. "/etc/apt/preferences" ファイルを削除します (apt-pinning を無 効化)。 9. 段階的にアップグレードしましょう: 旧安定版 oldstable → 安定版 stable → テスト版 testing → 不安定版 unstable。 10. "/etc/apt/sources.list" ファイルを更新して新アーカイブ対象に "aptitude update" を実行します。 11. "aptitude install perl" 等として、先に新規の中核的パッケージ を必要に応じてインストールします。 12. "apt-get -s dist-upgrade" コマンドを実行して影響を確認します 。 13. 最後に "apt-get dist-upgrade" コマンドを実行します。 注意     stable リリース間でアップグレードする際に Debian のメジャーリリー スを飛ばすのは賢明ではありません。 注意     過去の "リリースノート" ではシステム全体のアップグレードをするの に GCC や Linux カーネルや initrd-tools や Glibc や Perl や APT tool chain 等には特別な配慮が必要でした。     unstable での毎日のアップグレードは「パッケージ問題からの防御」を 参照下さい。 2.4. 高度なパッケージ管理操作 2.4.1. コマンドラインによる高度なパッケージ管理操作     aptitude ではハイレベル過ぎるとか必要な機能を欠くという他のパッケ ージ管理操作のリストです。 表2.13 高度なパッケージ管理操作 +---------------------------------------------------------------+ | コマンド | アクション | |----------------------------+----------------------------------| |COLUMNS=120 dpkg -l <パッケ |バグレポートのためにインストールさ| |ージ名パターン> |れたパッケージの状態をリスト | |----------------------------+----------------------------------| |dpkg -L <パッケージ名> |インストールされたパッケージの内容| | |をリスト | |----------------------------+----------------------------------| |dpkg -L <パッケージ名> | |インストールされたパッケージのマン| |egrep '/usr/share/man/man.* |ページをリスト | |/.+' | | |----------------------------+----------------------------------| |dpkg -S <ファイル名パターン>|マッチするファイル名があるインスト| | |ールされたパッケージをリスト | |----------------------------+----------------------------------| |apt-file search <ファイル名 |マッチするファイル名があるアーカイ| |パターン> |ブ中のパッケージをリスト | |----------------------------+----------------------------------| |apt-file list <パッケージ名 |アーカイブ中のマッチするパッケージ| |パターン> |をリスト | |----------------------------+----------------------------------| |dpkg-reconfigure <パッケージ|特定パッケージを再設定 | |名> | | |----------------------------+----------------------------------| |dpkg-reconfigure -p=low <パ |もっとも詳細な質問で特定パッケージ| |ッケージ名> |を再設定 | |----------------------------+----------------------------------| |configure-debian |フルスクリーンメニューからパッケー| | |ジを再設定 | |----------------------------+----------------------------------| |dpkg --audit |部分的にインストールされたパッケー| | |ジに関してシステムを監査 | |----------------------------+----------------------------------| |dpkg --configure -a |全ての部分的にインストールされたパ| | |ッケージを設定 | |----------------------------+----------------------------------| |apt-cache policy <バイナリー|バイナリーパッケージに関して利用可| |パッケージ名> |能なバージョンやプライオリティーや| | |アーカイブ情報を表示 | |----------------------------+----------------------------------| |apt-cache madison <パッケー |パッケージに関して利用可能なバージ| |ジ名> |ョンやアーカイブ情報を表示 | |----------------------------+----------------------------------| |apt-cache showsrc <バイナリ |バイナリーパッケージに関してソース|     |ーパッケージ名> |パッケージの情報を表示 | |----------------------------+----------------------------------| |apt-get build-dep <パッケー |パッケージをビルドするのに必要なパ| |ジ名> |ッケージをインストール | |----------------------------+----------------------------------| |aptitude build-dep |パッケージをビルドするのに必要なパ| | |ッケージをインストール | |----------------------------+----------------------------------| |apt-get source <パッケージ |(標準アーカイブから) ソースをダウ | |名> |ンロード | |----------------------------+----------------------------------| |dget |(他のアーカイブから) ソースをダウ | | |ンロード | |----------------------------+----------------------------------| |dpkg-source -x <パッケージ |ソースパッケージの組 ("*.tar.gz" | |名>_<バージョン>-.dsc |"*.diff.gz") からソースツリーをビ | | |ルド | |----------------------------+----------------------------------| |debuild binary |ローカルのソースツリーからパッケー| | |ジをビルド | |----------------------------+----------------------------------| |make-kpkg kernel_image |カーネルソースツリーからカーネルパ| | |ッケージをビルド | |----------------------------+----------------------------------| |make-kpkg --initrd |カーネルソースツリーから initramfs| |kernel_image |を有効にしてカーネルパッケージをビ| | |ルド | |----------------------------+----------------------------------| |dpkg -i <パッケージ名>_<バー|ローカルパッケージをシステムにイン| |ジョン>-_|ストール | |<アーキテクチャー名>.deb | | |----------------------------+----------------------------------| |debi <パッケージ名>_<バージ |ローカルパッケージ (複数) をシステ| |ョン>-_ |ムにインストール | |<アーキテクチャー名>.dsc | | |----------------------------+----------------------------------| |dpkg --get-selections '*' > |dpkg レベルのパッケージ選択状態情 | |selection.txt |報を保存 | |----------------------------+----------------------------------| |dpkg --set-selections |dpkg レベルのパッケージ選択状態情 | | hold | |ケージ選択状態を hold にする | |dpkg --set-selections |("aptitude hold " と| | |等価) | +---------------------------------------------------------------+ 注記     multi-arch 機能のあるパッケージに関して、一部のコマンドはアーキテ クチャー名を必要があるかもしれません。例えば、amd64 アーキテクチ ャーの libglib2.0-0 パッケージの内容をリストするには "dpkg -L libglib2.0-0:amd64" を使います。 注意 "dpkg -i …" や "debi …" といった低いレベルのパッケージツールはシ     ステム管理者によって注意深く使われなければいけません。必要なパッ ケージ依存関係を自動的に面倒見てくれません。Dpkg の "--force-all" や類似のコマンドラインオプション (dpkg(1) 参照下さい) はエキスパ ートだけが使うようにできています。十分にその影響を理解せずに使う とシステム全体を壊してしまうかもしれません。     以下に注意下さい。 * 全てのシステム設定やインストールコマンドは root から実行なけ ればいけません。 * regex (「正規表現」参照下さい) を使う aptitude と異なり、他の パッケージ管理コマンドはシェルグロブ (「シェルグロブ」参照下 さい) のようなパターンを使います。 * apt-file パッケージに入っている apt-file(1) は事前に "apt-file update" を実行する必要があります。 * configure-debian パッケージに入っている configure-debian(8) はそのバックエンドとして dpkg-reconfigure(8) を実行します。 * dpkg-reconfigure(8) はそのバックエンドとして debconf(1) を利 用するパッケージスクリプトを実行します。     * "apt-get build-dep" や "apt-get source" や "apt-cache showsrc" コマンドは "/etc/apt/sources.list" の中に "deb-src" エントリーが必要です。 * dget(1) や debuild(1) や debi(1) は devscripts パッケージが必 要です。 * "apt-get source" を使った (再)パッケージ化の手続きは「安定版 システムへのパッケージ移植」を参照下さい。 * make-kpkg コマンドは kernel-package パッケージが必要です (「 カーネル」参照下さい)。 * 一般的なパッケージ化に関しては「Debian パッケージ作成」を参照 下さい。 2.4.2. インストールされたパッケージファイルの検証 debsums をインストールすると debsums(1) を使って "/var/lib/dpkg/     info/*.md5sums" ファイル中の MD5sum 値との比較でインストールされ たパッケージファイルを検証できます。MD5sum がどのような仕組かは「 MD5 和」参照下さい。 注記     侵入者によって MD5sum のデーターベースが改竄されているかもしれな いので debsums(1) はセキュリティーツールとしては限定的有用性しか ありません。管理者によるローカルの変更や記憶メディアのエラーによ る損傷を点検するぐらいには有用です。 2.4.3. パッケージ問題からの防御 多くのユーザーは新規機能やパッケージを求めて Debian システムの非     安定版 unstable リリースを追いかけることを好みます。こういうこと をするとクリティカルなパッケージのバグにシステムが遭遇しやすくな ります。 apt-listbugs パッケージをインストールすれば、APT システムを使って     アップグレードする時に Debian の BTS を自動的にクリティカルなバグ に関して点検することで、クリティカルなバグからあなたのシステムを 防御できます。 apt-listchanges パッケージをインストールすれば、APT システムを使     ってアップグレードする時に NEWS.Debian 中の重要ニュースを表示しま す。 2.4.4. パッケージメタデーターの検索 最近は Debian サイトの http://packages.debian.org/ を訪問するとパ     ッケージメタデーターの検索を簡単に出きるようになっていますが、よ り伝統的な方法を見てみます。 grep-dctrl(1) や grep-status(1) や grep-available(1) コマンドは     Debian のパッケージコントロールファイルの一般的フォーマットに従う いかなるファイルを検索するのにも使えます。 マッチする名前のファイルを含む dpkg でインストールされたパッケー     ジ名を探索するのに "dpkg -S <ファイル名パターン>" が使えます。し かしメンテナスクリプトで生成されるファイルはこれでは見逃されます 。 dpkg のメタデーターに関してより詳細な検索をする必要がある場合、"/     var/lib/dpkg/info/" ディレクトリーで "grep -e regexパターン *" コ マンドを実行しないといけません。こうすることでパッケージスクリプ トやインストール時の質問テキスト中の言葉まで検索できます。     パッケージ依存関係を再帰的に検索したい際には、apt-rdepends(8) を 使います。 2.5. Debian パッケージ管理の内部 Debian のパッケージ管理システムが内部的のどのように機能するのかを     学びます。何らかのパッケージ問題が発生した際にあなた自身の解決を 見出すのに役立つでしょう。 2.5.1. アーカイブのメタデーター 各ディストリビューションのメタデーターのファイルは例えば "http:// ftp.us.debian.org/debian/" のような各 Debian ミラーサイトの "dist     /<コード名>" の下に保存されています。そのアーカイブ構造はウェッブ ブラウザーで閲覧できます。6つのタイプの重要メタデーターがあります 。 表2.14 Debian アーカイブのメタデーターの内容 +---------------------------------------------------------------+ | ファイル | 場所 | 内容 | |-----------+----------------------------+----------------------| |Release |ディストリビューションのトッ|アーカイブの説明との整| | |プ |合性情報 | |-----------+----------------------------+----------------------| | |ディストリビューションのトッ|アーカイブキーで署名さ| |Release.gpg|プ |れた "Release" ファイ | | | |ルに関する署名ファイル| |-----------+----------------------------+----------------------| |Contents- |ディストリビューションのトッ|該当アーカイブ中全ての| |<アーキテク|プ |パッケージに関する全フ|     |チャー> | |ァイルリスト | |-----------+----------------------------+----------------------| | |各ディストリビューション / |apt_preferences(5) の | |Release |エリア / アーキテクチャーの |ルールに利用されるアー| | |組み合わせのトップ |カイブの記述。 | |-----------+----------------------------+----------------------| | |各ディストリビューション / |バイナリーパッケージに| |Packages |エリア / バイナリーアーキテ |関して debian/control | | |クチャーの組み合わせのトップ|を連結 | |-----------+----------------------------+----------------------| | |各ディストリビューション / |ソースパッケージに関し| |Sources |エリア / ソースの組み合わせ |て debian/control を連| | |のトップ |結 | +---------------------------------------------------------------+     最近のアーカイブではネットワークトラフィックを減らすべく圧縮され た差分ファイルとしてこれらのメタデーターは保存されています。 2.5.2. トップレベルの "Release" ファイルと信憑性 ヒント     セキュアー APT システムではトップレベルの "Release" ファイルがア ーカイブを署名するのに使われています。 Debian アーカイブの各スイーツには例えば次に示すような "http://     ftp.us.debian.org/debian/dists/unstable/Release" のようなトップレ ベルの "Release" ファイルがあります。 Origin: Debian Label: Debian Suite: unstable Codename: sid Date: Sat, 14 May 2011 08:20:50 UTC Valid-Until: Sat, 21 May 2011 08:20:50 UTC     Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc Components: main contrib non-free Description: Debian x.y Unstable - Not Released MD5Sum: bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz 9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz 3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz ... 注記 「Debian アーカイブの基本」の中で "スイーツ (suite)" や "コード名     (codename)" を使う理由はこれを見れば分かるでしょう。"ディストリビ ューション" は "スイーツ" と "コード名" との両方を指したい際に用 いられます。アーカイブが提供する全アーカイブ "エリア (area)" 名が "Components" の下にリストされます。     トップレベルの "Release" ファイルの整合性はセキュアー apt という 暗号学手法インフラストラクチャーによって検証されます。 * 暗号手法による署名ファイル "Release.gpg" は真正のトップレベル の "Release" ファイルと秘密の Debian アーカイブキーから作成さ れます。 * 公開の Debian アーカイブキーは "/etc/apt/trusted.gpg" に取り 込むには次のようにします。 + 最新の base-files パッケージを用いてキーリングをインスト     ールすることで自動で取り込む。 + ftp-master.debian.org に掲示された最新の公開アーカイブキ ーを gpg か apt-key ツールを用いて手動で取り込む。 * セキュアー APT システムはこの "Release.gpg" ファイルと "/etc/ apt/trusted.gpg" 中の公開アーカイブキーを用いてダウンロードさ れたトップレベルの "Release" ファイルの整合性を暗号学手法を用 いて検証します。 "全ての Packages" と "Sources ファイルの整合性はそのトップレベル の "Release" ファイル中の MD5sum 値を用いて検証します。"パッケー     ジファイルの整合性は "Packages" や "Sources" ファイル中の MD5sum 値を用いて検証します。debsums(1) と「インストールされたパッケージ ファイルの検証」を参照下さい。 暗号学手法を用いた署名の検証は MD5sum 値の計算よりも非常に CPU を 使うプロセスなので、トップレベルの "Release" ファイルには暗号学手     法を用いた署名を使いつつ各パッケージには MD5sum 値を用いることで パーフォーマンスを保ったまま良好なセキュリティーが確保できます ( 「データーセキュリティーのインフラ」参照下さい)。 2.5.3. アーカイブレベルの "Release" ファイル ヒント     アーカイブレベルの "Release" ファイルが apt_preferences(5) のルー ルに使われます。 "http://ftp.us.debian.org/debian/dists/unstable/main/binary-amd64 /Release" や "http://ftp.us.debian.org/debian/dists/sid/main/     binary-amd64/Release" 等の "/etc/apt/sources.list" 中の "deb" 行 で特定される全てのアーカイブロケーションにはアーカイブレベルの次 に示すような "Release" ファイルがあります。 Archive: unstable Origin: Debian     Label: Debian Component: main Architecture: amd64 注意     "Archive:" スタンザには、Debian アーカイブではスイート名 ("stable" や "testing" や "unstable" 等) が使われますが、Ubuntu アーカイブではコード名 ("dapper" や "feisty" や "gutsy" や "hardy" や "intrepid" 等) が使われます。 experimental や jessie-backports のような自動的にインストールされ     るべきでないパッケージを含むような一部アーカイブでは次に示す "http://ftp.us.debian.org/debian/dists/experimental/main/ binary-amd64/Release" のような追加の行があります。 Archive: experimental Origin: Debian     Label: Debian NotAutomatic: yes Component: main Architecture: amd64 "NotAutomatic: yes" となっていない通常のアーカイブではデフォール     トの Pin-Priority 値は 500 ですが、"NotAutomatic: yes" となってい る特別なアーカイブではデフォールトの Pin-Priority 値は 1 です ( apt_preferences(5) と「候補バージョンの調整」参照下さい)。 2.5.4. パッケージメタデーターの取得 aptitude や apt-get や synaptic や apt-file や auto-apt 等の APT ツールが使われる際には Debian アーカイブ情報を含むメタデーターの ローカルコピーを更新する必要があります。この様なローカルのコピー     は "/etc/apt/sources.list" 中のディストリビューション (distribution) とエリア (area) とアーキテクチャー (architecture) の名前に対応する次のファイル名です (「Debian アーカイブの基本」参 照下さい)。 * "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディスト リビューション>_Release" * "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディスト リビューション>_Release.gpg" * "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディスト     リビューション>_<エリア>_source_Sources" * "/var/lib/apt/lists/ftp.us.debian.org_debian_dists_<ディスト リビューション>_<エリア>_source_Sources" * "/var/cache/apt/apt-file/ftp.us.debian.org_debian_dists_<ディ ストリビューション>_Contents-<アーキテクチャー>.gz" (apt-file 用) 最初の4つのタイプのファイルは全ての適切な APT コマンド間で共有さ れておりコマンドラインから "apt-get update" や "aptitude update"     によって更新されます。もし "/etc/apt/sources.list" 中に "deb" 行 があれば "Packages" メタデーターが更新されます。もし "/etc/apt/ sources.list" 中に "deb-src" 行があれば "Sources" メタデーターが 更新されます。 "Packages" や "Sources" メタデーターはバイナリーやソースパッケー     ジのファイルの場所を指している "Filename:" スタンザを含んでいます 。現在、それらのパッケージはリリース間の移行を滞り無くするために "pool/" ディレクトリーツリーの下に置かれています。 "Packages" メタデーターのローカルコピーは aptitude を使ってインタ     ラクティブに検索できます。grep-dctrl(1) という専用の検索コマンド を使うと "Packages" と "Sources" メタデーターのローカルコピーを検 索できます。 "Contents-<アーキテクチャー>" メタデーターのローカルコピーは "apt-file update" で更新でき、他の4つと異なるところにあります。     apt-file(1) を参照下さい。(auto-apt では "Contents-<アーキテクチ ャー>.gz" のローカルコピーがデフォールトでは異なるところにありま す。) 2.5.5. APT に関するパッケージ状態 lenny 以降の APT ツールではリモートから取得したメタデーターに追加     でローカルで生成されるインストール状態情報を "/var/lib/apt/ extended_states" に保存して、自動インストールされた全パッケージを 全ての APT ツールで追跡するのに用います。 2.5.6. aptitude に関するパッケージ状態 aptitude コマンドではリモートから取得したメタデーターに追加でロー     カルで生成されるインストール状態情報を "/var/lib/aptitude/ pkgstates" に保存して用いています。 2.5.7. 取得したパッケージのローカルコピー     APT メカニズムでリモートから取得されたパッケージは消去されるまで は "/var/cache/apt/archives" に貯蔵されます。 aptitude では、このキャッシュファイルのクリーニングポリシーは     "Options" → "Preferences" の下で設定でき、 "Actions" の下の "Clean package cache" か "Clean obsolete files" メニューによって 強制実行できる。 2.5.8. Debian パッケージファイル名     Debian のパッケージファイルには特定の名前の構造があります。 表2.15 Debian パッケージの名前の構造 +---------------------------------------------------------------+ | パッケージタイプ | 名前の構造 | |-----------------------+---------------------------------------| |バイナリーパッケージ |<パッケージ名>_<エポック>:<アップストリ| |(所謂 deb) |ームのバージョン>--| | |<アーキテクチャー>.deb | |-----------------------+---------------------------------------| |Debianインストーラー用 |<パッケージ名>_<エポック>:<アップストリ| |のバイナリーパッケージ |ームのバージョン>--| |(所謂udeb) |<アーキテクチャー>.udeb | |-----------------------+---------------------------------------| |ソースパッケージ (アッ |<パッケージ名>_<エポック>:<アップストリ|     |プストリームのソース) |ームのバージョン>-.orig.tar.gz | |-----------------------+---------------------------------------| |1.0 ソースパッケージ |<パッケージ名>_<エポック>:<アップストリ| |(Debian の変更部分) |ームのバージョン>-.diff.gz | |-----------------------+---------------------------------------| |3.0 (quilt) ソースパッ |<パッケージ名>_<エポック>:<アップストリ| |ケージ (Debian の変更部|ームのバージョン>-.debian.tar.gz | |-----------------------+---------------------------------------| |ソースパッケージ (内容 |<パッケージ名>_<エポック>:<アップストリ| |記述) |ームのバージョン>-.dsc | +---------------------------------------------------------------+ ヒント     ここでは基本的なパッケージフォーマットのみが記述されています。詳 細は dpkg-source(1) を参照下さい。 表2.16 Debian パッケージ名の各部分に使用可能な文字 +----------------------------------------------------------+ | 名前の部分 | 使用可能文字 (regex) |存在| |------------------------------+----------------------+----| |<パッケージ名> |[a-z,A-Z,0-9,.,+,-]+ |必須|     |------------------------------+----------------------+----| |<エポック>: |[0-9]+: |任意| |------------------------------+----------------------+----| |<アップストリームのバージョン>|[a-z,A-Z,0-9,.,+,-,:]+|必須| |------------------------------+----------------------+----| | |[a-z,A-Z,0-9,.,+,~]+ |任意| +----------------------------------------------------------+ 注記     パッケージバージョンの順位は dpkg(1) を使って、例えば "dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?" とすると確認できます 。 注記 Debian インストーラー (d-i) のバイナリーパッケージには、通常の     deb ではなく udeb をファイル拡張子として使われます。udeb パッケー ジはポリシー条件を緩和しドキュメントのように必須でない内容を削除 した減量 deb パッケージです。deb と udeb パッケージは同一のパッケ ージ構造を共有しています。"u" はマイクロと言う意味で使っています 。 2.5.9. dpkg コマンド     dpkg(1) は Debian パッケージ管理の最も低レベルのツールです。非常 に強力ですから気をつけて使う必要があります。     "<パッケージ名>"というパッケージをインストールする際に、dpkg は次 に記す順番でパッケージを処理します。 1. deb ファイルを解凍 ("ar -x" と等価) 2. debconf(1) を使い ".preinst" を実行     3. システムにパッケージ内容をインストール ("tar -x" と等価) 4. debconf(1) を使い ".postinst" を実行     debconf システムによって I18N と L10N (8章I18N と L10N) のサポー トのある標準化されたユーザーとの対話が実現できます。 表2.17 dpkg が作成する特記すべきファイル +---------------------------------------------------------------+ | ファイル | 内容の説明 | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |設定ファイルのリスト。(ユーザー変更可 | |ッケージ名>.conffiles |能) | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージによりインストールされるファ | |ッケージ名>.list |イルやディレクトリーのリスト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージによりインストールされるファ | |ッケージ名>.md5sums |イルの MD5 ハッシュ値のリスト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージインストールの前に実行するパ | |ッケージ名>.preinst |ッケージスクリプト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージインストールの後に実行するパ | |ッケージ名>.postinst |ッケージスクリプト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージ削除の前に実行するパッケージ | |ッケージ名>.prerm |スクリプト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |パッケージ削除の前に実行するパッケージ |     |ッケージ名>.prerm |スクリプト | |-----------------------+---------------------------------------| |/var/lib/dpkg/info/<パ |debconf システムのためのパッケージスク | |ッケージ名>.conffiles |リプト | |-----------------------+---------------------------------------| |/var/lib/dpkg/ |update-alternatives コマンドが用いる代 | |alternatives/<パッケー |替情報 | |ジ名> | | |-----------------------+---------------------------------------| |/var/lib/dpkg/available|すべてのパッケージの入手可能性情報 | |-----------------------+---------------------------------------| |/var/lib/dpkg/ |dpkg(1) が利用し、dpkg-divert(8) が設定| |diversions |するする迂回情報 | |-----------------------+---------------------------------------| |/var/lib/dpkg/ |dpkg(1) が利用し、dpkg-statoverride(8) | |statoverride |が設定する状態オーバーライド情報 | |-----------------------+---------------------------------------| |/var/lib/dpkg/status |全パッケージに関する状態情報 | |-----------------------+---------------------------------------| |/var/lib/dpkg/ |"var/lib/dpkg/status" ファイルの第一世 | |status-old |代のバックアップ | |-----------------------+---------------------------------------| |/var/backups/ |"var/lib/dpkg/status" ファイルの第二世 | |dpkg.status* |代以前のバックアップ | +---------------------------------------------------------------+     "status" ファイルは dpkg(1) や "dselect update" や "apt-get -u dselect-upgrade" のようなツールによって使われます。     grep-dctrl(1) という専用の検索コマンドを使うと "status" と "available" メタデーターのローカルコピーを検索できます。 ヒント     デビアンインストーラー環境下では、udpkg コマンドが udeb パッケー ジを開けるのに用いられます。udpkg コマンドはストリップダウンされ たバージョンの dpkg コマンドです。 2.5.10. update-alternative コマンド Debian システムには update-alternatives(8) を用いて何らかの重畳す     るプログラムを平和裏にインストールするメカニズムがあります。例え ば vim と nvi の両方のパッケージがインストールされた状況下で vi コマンドが vim を選択して実行するようにできます。 $ ls -l $(type -p vi) lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi $ sudo update-alternatives --display vi ... $ sudo update-alternatives --config vi     Selection Command ---------------------------------------------- 1 /usr/bin/vim *+ 2 /usr/bin/nvi Enter to keep the default[*], or type selection number: 1 Debian の代替 (alternatives) システムは、その選択を "/etc/     alternatives/" の中のシムリンクとして保持します。選択プロセスには "/var/lib/dpkg/alternatives/" の中の対応するファイルが使われます 。 2.5.11. dpkg-statoverride コマンド dpkg-statoverride(8) コマンドで提供される状態の上書きは、パッケー     ジをインストールする際にファイルに関して異なる所有者やモードを使 うよう dpkg(1) に指示する方法です。もし "--update" が指定されファ イルが存在すれば、即座に新たな所有者やモードに設定されます。 注意     パッケージが所有するファイルの所有者やモードをシステム管理者が chmod や chown コマンドを用いて直接変更しても次のパッケージアップ グレードがリセットします。 注記     ここでファイルと言いましたが、実際には dpkg が扱うディレクトリー やデバイス等のいかなるファイルシステムオブジェクトであってもいい です。 2.5.12. dpkg-divert コマンド dpkg-divert(8) コマンドによって提供されるファイル迂回は、ファイル をデフォールトの場所ではなく迂回した場所にインストールするように     dpkg(1) にさせます。dpkg-divert は本来パッケージメインテナンスス クリプトのためのものです。システム管理者がこれを軽々に使うのはお 薦めできません。 2.6. 壊れたシステムからの復元     非安定 (unstable) システムを動かす時には、管理者には壊れたパッケ ージ管理状況から復元できることが望まれます。 注意     ここで説明するいくつかの方法は非常にリスクが高いアクションです。 警告しましたよ! 2.6.1. 古いユーザーの設定との非互換性 もしデスクトップ GUI プログラムが上流の大きなバージョンアップグレ ードの後に不安定性を経験した際には、そのプログラムが作った古いロ     ーカル設定ファイルとの干渉を疑うべきです。もし新規作成したユーザ ーアカウントでそのプログラムが安定なら、この仮説が裏付けられます 。(これはパッケージングのバグで、通常パッケージャーによって回避さ れます。) 安定性を復元するには、対応するローカル設定ファイルを移動し GUI プ     ログラムを再スタートします。後日設定情報を回復するために古い設定 ファイルの内容を読む必要があるかもしれません。(あまり慌てて消去し ないようにしましょう。) 2.6.2. 重複するファイルを持つ相異なるパッケージ aptitude(8) や apt-get(1) 等の、アーカイブレベルのパッケージ管理     システムはパッケージの依存関係を使って重複するファイルを持つファ イルのインストールしようとさえしません (「パッケージ依存関係」参 照下さい)。 パッケージメインテナによるエラーや、システム管理者による不整合な 混合ソースのアーカイブの採用 (「混合したアーカイブソースからのパ ッケージ」参照下さい) があった場合には、パッケージ依存関係が誤っ     て定義される事態が発生するかもしれません。そういう状況下で重複す るファイルを持つパッケージを aptitude(8) や apt-get(1) を使ってイ ンストールしようとすると、パッケージを展開する dpkg(1) は既存ファ イルを上書きすることなく呼ばれたプログラムにエラーを確実に返しま す。 注意     第三者が作成したパッケージを使うと、root 権限で実行されるシステム に関して何でもできるメンテナスクリプトが実行されるので、システム が重大なリスクにさらされます。dpkg(1) はパッケージを展開するする さいに上書きする事を防止するだけです。     そのような壊れたインストール状況は、まず古い問題原因となっている パッケージ を削除すれば回避できます。     $ sudo dpkg -P 2.6.3. 壊れたパッケージスクリプトの修正 パッケージスクリプト内のコマンドが何らかの理由でエラーを返しスク リプトがエラーで終了した場合には、パッケージ管理システムは動作を     途中終了するので部分的にインストールされたパッケージのある状況が 生まれます。パッケージがその削除スクリプト内にバグを持つ場合には 、パッケージが削除不能になりうるので大変厄介です。     "<パッケージ名>" のパッケージスクリプトの問題に関しては、次のパッ ケージスクリプトの内容を確認するべきです。 * "/var/lib/dpkg/info/<パッケージ名>.preinst" * "/var/lib/dpkg/info/<パッケージ名>.postinst"     * /var/lib/dpkg/info/<パッケージ名>.prerm * "/var/lib/dpkg/info/<パッケージ名>.prerm"     スクリプトの問題原因部分を次のようなテクニックを使い root から編 集します。 * 行頭に "#" を挿入し問題行を無効にする     * 行末に "|| true" を挿入し成功を強制的に返さす     全ての部分的にインストールされたパッケージを次のコマンドで設定し ます。     # dpkg --configure -a 2.6.4. dpkg コマンドを使っての救済 dpkg は非常に低レベルのパッケージツールなのでネットワーク接続もな     いブート不能な非常に劣悪な状況下でも機能します。foo パッケージが 壊れていて置き換える必要があると仮定します。 バグの無い古いバージョンの foo パッケージが "/var/cache/apt/ archives/" にあるパッケージキャッシュの中に見つかるかもしれません     。(ここにみつからなければ、http://snapshot.debian.net/ アーカイブ からダウンロードしたり、機能している機器のパッケージキャッシュか らコピーできます。)     もしブート不可能な場合には、次のコマンドを使ってインストールする こともできます。     # dpkg -i /path/to/foo__.deb ヒント     システムがそれほど壊れていないなら、「緊急ダウングレード」に書か れているようにして、より高レベルの APT システムを通じてシステム全 体をダウングレードする手もあります。     ハードディスクからブートできない場合は、他の方法でのブート方法を 考えるべきです。 1. Debian インストーラー (debian-installer) の CD を使ってレスキ ューモードでブートします。     2. ブートできないハードディスク上のシステムを "/target" にマウン トします。 3. 古いバージョンの foo パッケージを次のようにしてインストールし ます。     # dpkg --root /target -i /path/to/foo__.deb     この例は、たとえハードディスク上の dpkg コマンドが壊れていても機 能します。 ヒント     ハードディスク上の別のシステムであれ、GNU/Linux のライブ CD であ れ、ブート可能な USB キードライブであれ、ネットブートであれ、どの ように起動された GNU/Linux システムでも同様にして壊れたシステムを 救済するのに使えます。 もしこの方法でパッケージをインストールしようとして何らかの依存関 係違反のためにうまくいかなくてどうしようもなくなった場合には、     dpkg の "--ignore-depends" や "--force-depends" や他のオプション を使って依存関係をオーバーライドすることができます。こうした場合 には、後で適正な依存関係を修復するように真剣に取り組む必要があり ます。詳細は dpkg(8) を参照下さい。 注記     システムがひどく壊れた場合には、システムを安全な場所に完全バック アップし (「バックアップと復元」参照下さい)、クリーンインストール を実行するべきです。こうすることは時間の節約でもあり最終的に良い 結果に結びつきます。 2.6.5. パッケージセレクションの復元 もし何らかの理由で "/var/lib/dpkg/status" の内容が腐った場合には 、Debian システムはパッケージ選択データーが失われ大きな打撃を被り     ます。古い "/var/lib/dpkg/status" ファイルは、"/var/lib/dpkg/ status-old" や "/var/backups/dpkg.status.*" としてあるので探しま す。     "/var/backups/" は多くの重要な情報を保持しているので、これを別の パーティション上に置くのも良い考えです。 ひどく壊れた場合には、システムのバックアップをした後フレッシュに     再インストールすることをお薦めします。たとえ "/var/" ディレクトリ ーの中が完全に消去されても、"/usr/share/doc/" ディレクトリー中か ら新規インストールのガイドとなる情報を復元できます。     最低限の (デスクトップ) システムを再インストールします。     # mkdir -p /path/to/old/system     "/path/to/old/system/" に古いシステムをマウントします。 # cd /path/to/old/system/usr/share/doc # ls -1 >~/ls1.txt     # cd /usr/share/doc # ls -1 >>~/ls1.txt # cd # sort ls1.txt | uniq | less     こうすると、インストールすべきパッケージ名が表示されます。 ("texmf" のようなパッケージ名以外が一部あるかもしれません。) 2.7. パッケージ管理のヒント 2.7.1. Debian パッケージの選択方法     パッケージの説明や "Tasks" の下のリストを使ってあなたが必要なパッ ケージを aptitude で見つけることができます。 2つ以上の似たパッケージに出会い "試行錯誤" の努力無しにどのパッケ     ージをインストールするか迷った際には、常識を使って下さい。次に示 す点は好ましいパッケージの良い指標と考えます。 * 必須 (essential): yes > no * エリア (area): メイン (main) > contrib > non-free * 優先度 (priority): 必須 (required) > 重要 (important) > 標準 (standard) > 任意 (optional) > 特別 (extra) * タスク (tasks): "デスクトップ環境" のようなタスクにリストされ たパッケージ * 依存パッケージにより選ばれたパッケージ (例えば、python による python2.4)     * ポプコン: 投票やインストールの数が多い * changelog: メンテナによる定期的アップデート * BTS: RC bug が無いこと (critical も grave も serious もいずれ のバグも無い) * BTS: バグレポートに反応の良いメンテナ * BTS: 最近修正されたバグの数が多い * BTS: wishlist 以外のバグが少ない Debian は分散型の開発モデルのボランティアプロジェクトですので、そ     のアーカイブには目指すところや品質の異なる多くのパッケージがあり ます。これらをどうするかは自己判断をして下さい。 2.7.2. 混合したアーカイブソースからのパッケージ 注意     安定版 (stable) と security updates と jessie-updates のような公 式にサポートされた特定の組み合わせ以外は、混合したアーカイブソー スからのパッケージをインストールすることを、公式には Debian ディ ストリビューションとしてサポートしていません。     testing を追跡しながら、unstable にある特定の新規アップストリーム バージョンのパッケージを1回だけ取り入れる操作例を次に示します。 1. "/etc/apt/sources.list" ファイルを変更し、単一の "unstable" エントリーのみにします。 2. "aptitude update" を実行します。     3. "aptitude install <パッケージ名>"の実行します。 4. testing のためのオリジナルの "/etc/apt/sources.list" ファイル を復元します。 5. "aptitude update" を実行します。 この様な手動のアプローチをすると "/etc/apt/preferences" ファイル     を作ることもないし、また apt-pinning について悩むこともありません 。でもこれではとても面倒です。 注意 混合したアーカイブソースを使うことを Debian が保証していないので     、その場合にはパッケージ間の互換性は自分自身で確保しなければいけ ません。もしパッケージに互換性がないと、システムを壊すことになる かもしれません。この様な技術的要件を判断できる必要があります。ラ ンダムな混合したアーカイブソースを使うことは全く任意の操作ですが 、私としてはこの操作はお薦めできません。     異なるアーカイブからパッケージをインストールするための一般ルール は以下です。 * 非バイナリーパッケージのインストールは比較的安全です。 + 文書パッケージ: 特段の要件無し + インタープリタプログラムパッケージ: 互換性あるインタープ リタ環境が利用可能 * バイナリーパッケージ (非 "Architecture: all") のインストール は、通常多くの障害があり、安全ではありません。     + ライブラリー ("libc" 等) のバージョン互換性 + 関連ユーティリティープログラムのバージョン互換性 + カーネル ABI 互換性 + C++ の ABI 互換性 + … 注記     パッケージを比較的安全にインストールできるようにするために、一部 の商用 non-free バイナリープログラムパッケージは完全に静的にリン クされたライブラリーとともに提供される事があります。そんなパッケ ージに関しても ABI 互換性等の問題は確認するべきです。 注記 壊れたパッケージを短期的に避ける場合以外では、公式にサポートされ     ていないアーカイブからバイナリーパッケージをインストールするのは 一般的には賢明ではありません。たとえ apt-pinning (「候補バージョ ンの調整」参照下さい) を使った場合にもこれは当てはまります。 chroot や類似のテクニック (「仮想化システム」参照下さい) 使って、 他のアーカイブからのプログラムを実行するよう検討するべきです。 2.7.3. 候補バージョンの調整 "/etc/apt/preferences" ファイル無しだと、APT システムはバージョン 文字列を用いて、最新利用可能バージョンを候補バージョンとします。 これが通常状態で APT システムの最も推薦される使い方です。全ての公     式にサポートされたアーカイブの組み合わせは、自動的にアップグレー ドするソースとすべきでないアーカイブは NotAutomatic とマークされ 適正な扱いを受けるので、"/etc/apt/preferences" ファイルを必要とし ません。 ヒント     バージョン文字列比較ルールは、例えば "dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?" とすれば確認できます (dpkg(1) 参照下 さい)。 パッケージを混合したアーカイブからのソース (「混合したアーカイブ ソースからのパッケージ」参照下さい) から定常的にインストールする     場合には、apt_preferences(5) に書かれたように適正な項目のある "/ etc/apt/preferences" ファイルを作り候補バージョンに関するパッケー ジ選択ルールを操作することによってこういった複雑な操作を自動化で きます。これを apt-pinning と呼びます。 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 注意     apt-pinning を利用する際には、Debian はパッケージの互換性を保証し ないので、ユーザー自身がパッケージの互換性を確保しなければいけま せん。apt-pinning は全く任意の操作で、著者が使うようにと勧めてい るわけではありません。 注意 アーカイブレベルの Release ファイル (「アーカイブレベルの "Release" ファイル」参照下さい) が apt_preferences(5) のルールに     使われます。だから、apt-pinning は normal Debian archives や security Debian archives ではスイート ("suite") 名を使って機能し ます。(これは Ubuntu アーカイブとは異なります)。例えば "/etc/apt/ preferences" ファイル中で、"Pin: release a=unstable" とはできます が、"Pin: release a=sid" とはできません。 注意     非 Debian アーカイブを apt-pinning の一部に使う場合には、それが提 供されている対象の確認とその信頼性の確認をします。例えば、Ubuntu と Debian は混合して使うようにはなっていません。 注記     "/etc/apt/preferences" ファイルを作成することなしでも、かなり複雑 なシステム操作 (「dpkg コマンドを使っての救済」と「混合したアーカ イブソースからのパッケージ」参照下さい) が apt-pinning を使わずに できます。     単純化した apt-pinning テクニックの説明を次にします。 APT システムは "/etc/apt/sources.list" ファイル中に規定された利用 可能なパッケージソースから最高の Pin-Priority でアップグレードす     るパッケージを候補バージョンパッケージとして選択します。パッケー ジの Pin-Priority が1000 より大きい場合には、このアップグレードす るというバージョン制約が外れるのでダウングレードできるようになり ます (「緊急ダウングレード」参照下さい)。 各パッケージの Pin-Priority 値は "/etc/apt/preferences" ファイル     中の "Pin-Priority" 項目にて規定されるか、そのデフォールト値が使 われます。 表2.18 apt-pinning テクニックに関する特記すべき Pin-Priority 値を リストします。 +---------------------------------------------------------------+ |Pin-Priority| パッケージに関する apt-pinning 効果 | |------------+--------------------------------------------------| |1001 |パッケージのダウングレードになる場合でもパッケージ| | |をインストールする | |------------+--------------------------------------------------| |990 |ターゲットのリリースアーカイブのデフォルトとして使| | |用 | |------------+--------------------------------------------------|     |500 |ノーマルアーカイブのデフォルトとして使用 | |------------+--------------------------------------------------| |100 |NotAutomatic かつ ButAutomaticUpgrades アーカイブ | | |のデフォルトとして使用 | |------------+--------------------------------------------------| |100 |インストール済みパッケージに使用 | |------------+--------------------------------------------------| |1 |NotAutomatic アーカイブのデフォルトとして使用 | |------------+--------------------------------------------------| |-1 |たとえ推奨 (Recommend) されても、パッケージを絶対 | | |にインストールしない | +---------------------------------------------------------------+     ターゲットのリリースアーカイブは次のようにして設定できます。 * "APT::Default-Release "stable";" 行を使う "/etc/apt/apt.conf" ファイル     * "apt-get install -t testing some-package" 等の "-t" オプショ ンの引数 アーカイブ中のアーカイブレベルの Release ファイル (「アーカイブレ     ベルの "Release" ファイル」参照下さい) に "NotAutomatic: yes" や "ButAutomaticUpgrades: yes" が含まれると NotAutomatic かつ ButAutomaticUpgrades アーカイブと設定されます。     複数アーカイブソースの に関する Pin-Priority 値は "apt-cache policy " の出力で表示されます。 * "Package pin:" で始まる行は、 のみとの関連付けが "Package pin: 0.190" 等と定義されている場合に、pin のパッケー ジバージョンを示します。 * とのみの関連付けが定義されていない場合には、 "Package pin:" という行はありません。 * とのみの関連付けが定義されている場合の Pin-Priority     値は、全バージョン文字列の右側に "0.181 700" 等としてリストさ れます。 * とのみの関連付けが定義されていない場合には、全バー ジョン文字列の右側に "0" が"0.181 0" 等としてリストされます。 * アーカイブの Pin-Priority 値 ("/etc/apt/preferences" ファイル 中に "Package: *" として定義) はアーカイブへのパスの左側に、 "100 http://ftp.XX.debian.org/debian/ jessie-backports/main Packages" 等としてリストされます。 2.7.4. Updates と Backports     stable のためのアップグレードパッケージを提供する、jessie-updates と backports.debian.org アーカイブがあります。     これらのアーカイブを使うには、以下に示すように "/etc/apt/ preferences" ファイル中に全ての必要なアーカイブをリストします。 deb http://ftp.us.debian.org/debian/ jessie main contrib non-free     deb http://security.debian.org/ jessie/updates main contrib deb http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free deb http://ftp.us.debian.org/debian/ jessie-backports main contrib non-free "/etc/apt/preferences" ファイル中に Pin-Priority 値を明示的に設定 する必要はありません。より新しいパッケージが利用可能となった場合     はいつも、デフォルトの設定によりもっとも合理的なアップグレードが なされます (「アーカイブレベルの "Release" ファイル」参照下さい) 。 * 全てのインストールされている古いパッケージが jessie-updates からのより新しいパッケージにアップグレードされます。     * jessie-backports からインストールしされた古いパッケージのみが jessie-backports からのより新しいパッケージにアップグレードさ れます。 "" という名前のパッケージをその依存関係ともども     jessie-backports アーカイブからインストールしたい時には、"-t" オ プションでターゲットリリースを切り替えながら次のコマンドを使いま す。     $ sudo apt-get install -t jessie-backports 2.7.5. "推奨 (Recommends)" によりパッケージがインストールされるのを阻 止 たとえ "推奨 (Recommends)" されていても自動的に特定のパッケージが     引きこまれ無くしたいときには、"/etc/apt/preferences" ファイルを作 成しその中に全てのパッケージを次のように明示的にリストしなければ いけません。 Package: Pin: version * Pin-Priority: -1     Package: Pin: version * Pin-Priority: -1 2.7.6. unstable からのパッケージと共に、testing を追いかける testing を追跡しながら、unstable にある特定の新規アップストリーム     バージョンのパッケージが定常的にアップグレードされる、apt-pinning テクニックの例を次に示します。全ての必要なアーカイブを "/etc/apt/ sources.list" ファイル中に次のようにリストします。 deb http://ftp.us.debian.org/debian/ testing main contrib non-free     deb http://ftp.us.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/ testing/updates main contrib     "/etc/apt/preferences" を次のように設定します。 Package: *     Pin: release a=unstable Pin-Priority: 100 "" という名前のパッケージとその依存ファイルを     unstable アーカイブからこの設定の下でインストールしたい場合、"-t" オプションを使ってターゲットのリリースを切り替える (unstable の Pin-Priority が990 になる) 次のコマンドを実行します。     $ sudo apt-get install -t unstable この設定では、通常の "apt-get upgrade" や "apt-get dist-upgrade" ("aptitude safe-upgrade" や "aptitude full-upgrade") の実行は、     testing アーカイブからインストールされたパッケージは最新の testing アーカイブを使ってアップグレードし、unstable アーカイブか らインストールされたパッケージは最新の unstable アーカイブを使っ てアップグレードします。 注意     "/etc/apt/sources.list" ファイルから "testing" の項目を削除しない ように注意します。"testing" 項目がその中にないと、APT システムは 最新の unstable アーカイブを使ってアップグレードします。 ヒント 著者は上記操作のすぐ後に "/etc/apt/sources.list" ファイルを編集し     て "unstable" アーカイブ項目をコメントアウトします。こうすること で、最新の unstable アーカイブによって unstable からインストール されたパッケージをアップグレードしなくなりますが、"/etc/apt/ sources.list" ファイル中に項目が多すぎてアップデートのプロセスが 遅くなることをさけられます。 ヒント もし "/etc/apt/preferences" ファイル中で "Pin-Priority: 100" の代     わりに "Pin-Priority: 1" が用いられた場合は、"/etc/apt/ sources.list" ファイルの中の "testing" 項目が削除されようと、 Pin-Priority 値は100 のインストール済みパッケージは unstable アー カイブによってアップグレードされる事はありません。 最初の "-t unstable" によるインストール無しに、unstable の特定パ     ッケージを自動的に追跡したい場合、"/etc/apt/preferences" ファイル を作りそのトップにこれらパッケージを明示的に次のようにリストしま す。 Package: Pin: release a=unstable Pin-Priority: 700     Package: Pin: release a=unstable Pin-Priority: 700 以上で、各特定パッケージに関して Pin-Priority 値が設定されます。     例えば最新の unstable バージョンのこの "Debian リファレンス" を英 語版で追跡するためには、"/etc/apt/preferences" ファイルに次の項目 を設定します。 Package: debian-reference-en Pin: release a=unstable Pin-Priority: 700     Package: debian-reference-common Pin: release a=unstable Pin-Priority: 700 ヒント     この apt-pinning テクニックは stable アーカイブを追跡している際に も有効です。著者の経験では、文書パッケージは unstable アーカイブ からインストールしても今までいつも安全でした。 2.7.7. experimental からのパッケージと共に、unstable を追いかける 次に unstable を追跡しながら experimental にある特定の新規アップ     ストリームバージョンのパッケージを取り込む apt-pinning テクニック の例を示します。すべての必要なアーカイブを "/etc/apt/ sources.list" ファイルに次のようにリストします。 deb http://ftp.us.debian.org/debian/ unstable main contrib non-free     deb http://ftp.us.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing/updates main contrib experimental アーカイブのデフォールトの Pin-Priority 値は、 NotAutomatic アーカイブ (「アーカイブレベルの "Release" ファイル 」参照下さい) なので、常に1 (<<100) です。experimental アーカイブ     にある特定パッケージを次回アップグレード時に自動的に追跡しようと しない限り、"/etc/apt/preferences" ファイル中で experimental アー カイブを使うために Pin-Priority 値を明示的に設定する必要はありま せん。 2.7.8. パッケージの自動ダウンロードとアップグレード apt パッケージには、パッケージの自動ダウンロードのサポートする専 用の cron スクリプト "/etc/cron.daily/apt" が同梱されています。こ のスクリプトは unattended-upgrades パッケージをインストールするこ     とで自動アップグレード実行の機能拡張をします。これらは、"/usr/ share/doc/unattended-upgrades/README" に記述されているように、"/ etc/apt/apt.conf.d/02backup" と "/etc/apt/apt.conf.d/ 50unattended-upgrades" の中のパラメーターでカスタム化できます。 unattended-upgrades パッケージは基本的に stable システムのセキュ リティーアップグレードのためです。既存の stable システムが、自動     アップグレードで壊される危険性が、セキュリティーアップグレードが すでに閉じたセキュリティーホールからの侵入者によりシステムが壊わ される危険性より小さいなら、パラメーターを次のように設定して自動 アップグレードをするのも一計です。 APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "1"; unstable システムを使っている場合には、自動アップグレードするとシ ステムはいつの日か確実に壊われるので、それはしたくないでしょう。     そんな unstable の場合でも、次に記すような事前にパッケージをダウ ンロードするパラメーターを設定でインタラクティブなアップグレード をするための時間を節約したいでしょう。 APT::Periodic::Update-Package-Lists "1";     APT::Periodic::Download-Upgradeable-Packages "1"; APT::Periodic::Unattended-Upgrade "0"; 2.7.9. APT のよるダウンロードバンド幅の制限     APT によるダウンロードのバンド幅を例えば 800Kib/sec (=100kiB/sec) に制限したい場合には、APT のパラメーターを次のように設定します。     APT::Acquire::http::Dl-Limit "800"; 2.7.10. 緊急ダウングレード 注意 Debian では設計としてはダウングレードを正式にサポートしません。緊     急の復元処置の一部としてのみ実行されるべきです。こういう状況であ るにもかかわらず、多くの場合にうまく機能することが知られています 。重要なシステムでは回復処置の後に全ての重要データーをバックアッ プし、最初から新規システムを再インストールします。 壊れたシステムアップグレードからの復元するために、候補バージョン を操作して新しいアーカイブから古いアーカイブにダウングレードする     ことがうまくいくかもしれません (「候補バージョンの調整」参照下さ い)。これは、何度も "dpkg -i _.deb" コマンドを実行する退屈な作業をしないでよくする方法です (「dpkg コ マンドを使っての救済」参照下さい)。     次に記すような "unstable" を追跡する "/etc/apt/sources.list" ファ イル中の行を探します。     deb http://ftp.us.debian.org/debian/ sid main contrib non-free     それを testing を追いかけるように次と交換します。     deb http://ftp.us.debian.org/debian/ stretch main contrib non-free     "/etc/apt/preferences" を次のように設定します。 Package: *     Pin: release a=testing Pin-Priority: 1010     "apt-get dist-upgrade" を実行して、システム全体にわたってパッケー ジのダウングレードを強制します。     この緊急ダウングレードの後でこの特別の "/etc/apt/preferences" フ ァイルを削除します。 ヒント 依存関係の問題を最小限とすべく、できるだけ多くのパッケージを削除     (remove で、完全削除 purge ではありません!) します。システムのダ ウングレードのためには手動でいくつかのパッケージを削除とインスト ールしなければいけないかも知れません。Linux カーネルやブートロー ダーや udev や PAM や APT やネットワーク関係のパッケージやそれら の設定ファイルには特に注意が必要です。 2.7.11. 誰がパッケージをアップロードしたのか? "/var/lib/dpkg/available" や "/usr/share/doc/package_name/ changelog" の中にリストされたメンテナの名前は "誰がパッケージ化活     動の背後にいるのか" に関していくばくかの情報を提供しますが、パッ ケージを実際にアップロードをした人がはっきりしません。devscripts パッケージ中の who-uploads(1) は Debian のソースパッケージを実際 にアップロードした人を確定します。 2.7.12. equivs パッケージ ソースからプログラムをコンパイルして Debian パッケージを置換えた     い際には、それを実際にローカルで Debian 化してパッケージ (*.deb) して、私的アーカイブを使うのが好ましいです。 しかし、プログラムをソースからコンパイルして "/usr/local" にイン     ストールすることを選んだ際には、パッケージ依存関係を満足させるた めの最後の手段として equivs を使う必要があるかもしれません。 Package: equivs Priority: extra     Section: admin Description: Circumventing Debian package dependencies This is a dummy package which can be used to create Debian packages, which only contain dependency information. 2.7.13. 安定版システムへのパッケージ移植 stable システムの部分アップグレードのためには、その環境内でソース     パッケージを使ってパッケージをリビルドするのが好ましいです。こう することでパッケージ依存関係による大掛かりなアップグレードをしな いで済みます。     stable システムのための "/etc/apt/sources.list" ファイルに次のエ ントリーを追加します。     deb-src http://http.us.debian.org/debian unstable main contrib non-free     コンパイルするのに必要なパッケージをインストールしソースパッケー ジをダウンロードをします。 # apt-get update # apt-get dist-upgrade     # apt-get install fakeroot devscripts build-essential $ apt-get build-dep foo $ apt-get source foo $ cd foo*     バックポートに必要な際には、dpkg や debhelper 等のツールチェイン パッケージをバックポートパッケージを用いてアップデートします。     次を実行します。     $ dch -i     "+bp1" を後ろに付けるなどして、"debian/changelog" 中でパッケージ バージョンを先に進める     次のようにしてパッケージをビルドしシステムにインストールします。 $ debuild     $ cd .. # debi foo*.changes 2.7.14. APT のためのプロキシサーバー Debian アーカイブの特定サブセクション全てをミラーするとディスク空 間とネットワークのバンド幅の大いなる無駄遣いですので、LAN 上に多 くのシステムを管理している際には APT のためのローカルのプロキシサ ーバーを設置することを考えるのは良いことです。APT は、apt.conf(5)     とか "/usr/share/doc/apt/examples/configure-index.gz" に説明され たようにして、汎用の squid のようなウェッブ (http) プロキシサーバ ー (「他のネットワークアプリケーションサーバー」参照下さい) を使 うように設定できます。"$http_proxy" 環境変数による設定は、"/etc/ apt/apt.conf" ファイル中の設定より優先します。     Debian アーカイブ専用のプロキシツールがあります。実際に使う前に BTS をチェック下さい。 表2.19 Debian アーカイブ専用のプロキシツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプ|サイ| 説明 | | |コン| ズ | | |-------------+----+----+---------------------------------------| | |V:1,| |Debian アーカイブファイルのキャッシュプ| |approx |I:1 |4721|ロキシサーバー (コンパイルされた OCaml |     | | | |プログラム) | |-------------+----+----+---------------------------------------| |apt-cacher |V:1,|287 |Debian パッケージとソースファイルのキャ| | |I:1 | |ッシュプロキシ (Perl プログラム) | |-------------+----+----+---------------------------------------| | |V:4,| |ソフトウエアーパッケージの頒布ためのキ | |apt-cacher-ng|I:5 |1349|ャッシュプロキシ (コンパイルされた C++ | | | | |プログラム) | +---------------------------------------------------------------+ 注意     Debian がそのアーカイブ構造を再編した際に、このような専用のプロキ シツールはパッケージメンテナによるコードの修正が必要で、一定期間 使えなくなることがあります。一方、汎用のウェッブ (http) プロキシ は比較的堅牢ですしそのような変化に合わすのも簡単です。 2.7.15. 小さな公開パッケージアーカイブ 近代的なセキュアーAPT システム (「トップレベルの "Release" ファイ     ルと信憑性」参照下さい) と互換性のある小規模のパブリックアーカイ ブを作る例を次に示します。まず、いくつかの仮定をします。 * アカウント名: "foo" * ホスト名: "www.example.com"     * 必要なパッケージ: apt-utils や gnupg 等のパッケージ * URL: "http://www.example.com/~foo/" ( → "/home/foo/ public_html/index.html") * パッケージのアーキテクチャ: "amd64"     サーバーシステム上で Foo のアーカイブキーを作成します。 $ ssh foo@www.example.com $ gpg --gen-key ... $ gpg -K     ... sec 1024D/3A3CB5A6 2008-08-14 uid Foo (ARCHIVE KEY) ssb 2048g/6856F4A7 2008-08-14 $ gpg --export -a 3A3CB5A6 >foo.public.key     Foo に関するキー ID"3A3CB5A6" のアーカイブキーファイル "foo.public.key" を公開     "Origin: Foo" というアーカイブツリーを作成します。 $ umask 022 $ mkdir -p ~/public_html/debian/pool/main $ mkdir -p ~/public_html/debian/dists/unstable/main/binary-amd64 $ mkdir -p ~/public_html/debian/dists/unstable/main/source $ cd ~/public_html/debian $ cat > dists/unstable/main/binary-amd64/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: amd64 EOF $ cat > dists/unstable/main/source/Release << EOF Archive: unstable Version: 4.0 Component: main Origin: Foo Label: Foo Architecture: source EOF $ cat >aptftp.conf <aptgenerate.conf < "www.example.com", method => "scpb", incoming => "/home/foo/public_html/debian/pool/main", # The dinstall on ftp-master sends emails itself dinstall_runs => 1, };     $cfg{'foo'}{postupload}{'changes'} = " echo 'cd public_html/debian ; apt-ftparchive generate -c=aptftp.conf aptgenerate.conf; apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release ; rm -f dists/unstable/Release.gpg ; gpg -u 3A3CB5A6 -bao dists/unstable/Release.gpg dists/unstable/Release'| ssh foo@www.example.com 2>/dev/null ; echo 'Package archive created!'";     dupload(1) が起動する postupload フックスクリプトがアップロード毎 に更新されたアーカイブファイルを作成します。     この小規模のパブリックアーカイブをクライアントシステムの apt 行に 追加できます。 $ sudo bash     # echo "deb http://www.example.com/~foo/debian/ unstable main" \ >> /etc/apt/sources.list # apt-key add foo.public.key ヒント     もしローカルファイルシステム上にアーカイブがある場合には、上記の 代わりに "deb file:///home/foo/debian/ …" が使えます。 2.7.16. システム設定の記録とコピー     パッケージと debconf の選択状態のローカルコピーは次に記すようにし て作成できます。     # dpkg --get-selections '*' > selection.dpkg # debconf-get-selections > selection.debconf     ここで、"*" は"selection.dpkg" が"purge" に関するパッケージ項目も 含めるようにします。     これら2ファイルを他のコンピューターに移動し、次のようにしてインス トールします。 # dselect update     # debconf-set-selections < myselection.debconf # dpkg --set-selections < myselection.dpkg # apt-get -u dselect-upgrade # or dselect install 実質的に同じ設定でクラスターとなった多くのサーバーを管理すること     をお考えの場合には、専用パッケージである fai 等を使って全システム を管理することを考えます。 2.7.17. 外来のバイナリーパッケージの変換やインストール alien(1) を使うと、Red Hat の rpm や Stampede の slp や Slackware の tgz や Solaris の pkg ファイルフォーマットを Debian の deb パ     ッケージに変換できます。あなたのシステムにインストールしたパッケ ージに替えて他の Linux ディストリビューション由来のパッケージを使 いたい際には、alien を使って変換しインストールします。alien は LSB パッケージをサポートします。 警告 alien(1) は sysvinit や libc6 や libpam-modules 等の必須のシステ     ムパッケージを置き換えるために使うべきではありません。実質的には alien(1) は、LSB 準拠か静的にリンクされた non-free のバイナリーの みで提供されるパッケージにのみ使われるべきです。フリーソフトウエ アーの場合は、ソースパッケージを使い本物の Debian パッケージを作 るべきです。 2.7.18. dpkg を使わないパッケージの開梱     "dpkg*.deb" パッケージの内容は、どんな Unix 的環境でも標準の ar (1) と tar(1) を使うことで、dpkg(1) を使うこと無く開梱できます。 # ar x /path/to/dpkg__.deb # ls total 24 -rw-r--r-- 1 bozo bozo 1320 2007-05-07 00:11 control.tar.gz     -rw-r--r-- 1 bozo bozo 12837 2007-05-07 00:11 data.tar.gz -rw-r--r-- 1 bozo bozo 4 2007-05-07 00:11 debian-binary # mkdir control # mkdir data # tar xvzf control.tar.gz -C control # tar xvzf data.tar.gz -C data 他の "*.deb" パッケージの内容は、上記のようにして "dpkg*.deb" か     ら取り出した dpkg-deb(1) コマンドにより開梱できるし、また標準の ar(1) と tar(1) を xz(1) 解凍サポートともに使うことで上記同様に開 梱できます。     パッケージの内容は mc コマンドを使っても閲覧できます。 2.7.19. パッケージ管理の追加参考文書     パッケージ管理に関しては次の文書からさらに学習できます。 * パッケージ管理の一義的文書: + aptitude(8) と dpkg(1) と tasksel(8) と apt-get(8) と apt-config(8) と apt-key(8) と sources.list(5) と apt.conf(5) と apt_preferences(5); + "/usr/share/doc/apt-doc/guide.html/index.html" と "/usr/ share/doc/apt-doc/offline.html/index.html" from the apt-doc package; + aptitude-doc-en パッケージに入っている、"/usr/share/doc/ aptitude/html/en/index.html"。     * 正規で詳細な Debian アーカイブに関する文書: + Debian アーカイブの正式のポリシーは Debian ポリシーマニュ アル、第2章 - Debian アーカイブに規定されています。 + "Debian 開発者リファレンス、第4章 Debian 開発者が利用可能 なリソース 4.6 Debian アーカイブ"と、 + "The Debian GNU/Linux FAQ, Chapter 6 - The Debian FTP archives". * Debian ユーザー向けの Debian パッケージ作成の入門書: + "Debian New Maintainers' Guide". 第3章システムの初期化 Debian システムが以下に起動され設定されるかの知っていることはシス     テム管理者として賢明です。正確で詳細な情報がインストールされたパ ッケージのソースや文書中にあるとは言え、我々の大部分にとってはち ょっと大変過ぎます。 著者などの過去の知見に基づき Debian システムの要点とそれらの設定     の簡単な参考となる概論を提供するように勤めました。Debian システム は動く標的なので、システムの状況が変わっているかもしれません。シ ステムに変更を加える前に、各パッケージの最新文書を参照下さい。 警告     本章は、2013年にリリースされた Debian 7.0 (Wheezy) に基づいている ため、内容が陳腐化しつつあります。 3.1. ブートストラッププロセスの概要 コンピューターシステムは、電源投入イベントからユーザーに機能の完     備したオペレーティングシステム (OS) を提供するまでブートストラッ ププロセスを数段通過します。     単純化のため、デフォールトのインストールをした典型的な PC プラッ トフォームに限定し議論します。     典型的なブートストラッププロセスは4段ロケットのようです。各段のロ ケットは次の段のロケットにシステムのコントロールを引き継ぎます。 * 「1段目: BIOS」 * 「2段目: ブートローダー」     * 「3段目: ミニ Debian システム」 * 「4段目: 通常の Debian システム」 もちろん、これらに関して異なる設定をすることはできます。例えば、     自分自身で専用カーネルをコンパイルした場合、ミニ Debian システム のステップをスキップできます。自分自身で確認するまでは、あなたの システムがこの様になっていると決めつけないで下さい。 注記     非伝統的 PC プラットフォームの SUN とか Macintosh システム等では 、ROM 上の BIOS やディスク上のパーティション (「ディスクパーティ ション設定」) が非常に異なっているかもしれません。そのような場合 にはプラットフォーム特定の文書をどこかで求めて下さい。 3.1.1. 1段目: BIOS BIOS は電源投入イベントが引き起こすブートプロセスの1段目です。CPU     のプログラムカウンターが電源投入イベントで初期化され、読出し専用 メモリー (ROM) 上にあるBIOS が特定のメモリーアドレスから実行され ます。 BIOS はハードウエアーの基本的な初期化 (POST: 電源投入時自己診断)     を行い、システムのコントロールをあなたが提供する次のステップにシ ステムのコントロールを引き継ぎます。BIOS は通常ハードウエアーによ って供給されます。 BIOS 初期画面はどのキーを押すと BIOS 設定画面に入って BIOS の挙動 を設定できるかを通常表示しています。よく使われるキーは F1 や F2     や F10 や Esc や Ins や Del です。もし BIOS 初期画面が洒落た画像 表示で隠されている場合、Esc 等の何らかのキーをおすとこれを無効に できます。こういったキーはハードウエアーに大いに依存します。 BIOS が起動するコードのハードウエアー上の場所や優先順位は BIOS 設 定画面から選択できます。典型的には最初に見つかった選択されたデバ     イス (ハードディスクやフロッピーディスクや CD-ROM 等) の最初の数 セクターがメモリー上にロードされこの初期コードが実行されます。こ の初期コードは次のいずれでもよろしい。 * ブートローダーコード     * FreeDOS のような踏み石 OS のカーネルコード * この小さな空間に収まればターゲット OS のカーネルコード 典型的にはプライマリハードディスクの指定されたパーティションから システムが起動されます。伝統的 PC のハードディスクの最初の2セクタ     ーにマスターブートレコード (MBR) が含まれます。ブート選択に含まれ るディスクのパーティション情報はこの MBR の最後に記録されています 。BIOS から実行される最初のブートローダーコードは残りの部分を占め ます。 3.1.2. 2段目: ブートローダー ブートローダーは BIOS によって起動されるブートプロセスの2段目です 。それはシステムのカーネルイメージと initrd イメージをメモリーに     ロードし、それらにコントロールを引き継ぎます。この initrd イメー ジはルートファイルシステムイメージで、そのサポートは使われるブー トローダー次第です。 Debian システムは通常 Linux カーネルをデフォールトのシステムカー ネルとして使っています。現在の 2.6/3.x カーネルにとっての initrd     イメージは技術的に言うなら initramfs (初期 RAM ファイルシステム) イメージです。initramfs イメージはルートファイルシステム中のファ イルの gzip された cpio アーカイブです。 警告     上記は新しいマルチセグメントの initramfs では正しくありません。 Bug #790100参照ください。 Debian システムのデフォールトインストールでは、GRUB ブートローダ     ーの1段目のコードを PC プラットホームの MBR の中に置きます。多く のブートローダーと設定の選択肢が利用可能です。 表3.1 ブートローダーのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイ|initrd|ブートロ| 説明 | | |コン | ズ | | ーダー | | |--------------+-----+----+------+--------+---------------------| | | | | | |ディスクパーティショ | | |V:0, | |サポー|GRUB |ンや vfat や ext3 等 | |grub-legacy |I:2 |710 |ト |Legacy |のファイルシステムを | | | | | | |理解するぐらいスマー | | | | | | |トです。 | |--------------+-----+----+------+--------+---------------------| | | | | | |ディスクパーティショ | | |V:35,| |サポー| |ンや vfat や ext4 等 | |grub-pc |I:879|542 |ト |GRUB 2 |のファイルシステムを | | | | | | |理解するぐらいスマー | | | | | | |トです。(デフォルト) | |--------------+-----+----+------+--------+---------------------| | | | | | |GRUB 2 のブート可能な| |grub-rescue-pc|V:0, |5226|サポー|GRUB 2 |レスキューイメージ | | |I:2 | |ト | |(CD とフロッピー) (PC| | | | | | |/BIOS バージョン) | |--------------+-----+----+------+--------+---------------------|     | |V:1, | |サポー| |ハードディスク上のセ | |lilo |I:5 |685 |ト |Lilo |クター位置に依存しま | | | | | | |す。(旧式) | |--------------+-----+----+------+--------+---------------------| | | | | | |ISO9660 ファイルシス | |syslinux |V:7, |294 |サポー|Isolinux|テムを理解します。ブ | | |I:67 | |ト | |ート CD に使われてい | | | | | | |ます。 | |--------------+-----+----+------+--------+---------------------| | | | | | |MSDOS ファイルシステ | |syslinux |V:7, |294 |サポー|Syslinux|ム (FAT) 理解します。| | |I:67 | |ト | |ブートフロッピーで使 | | | | | | |われます。 | |--------------+-----+----+------+--------+---------------------| | |V:0, | |サポー| |新しいシステムが | |loadlin |I:1 |82 |ト |Loadlin |FreeDOS/MSDOS システ | | | | | | |ムから起動されます。 | |--------------+-----+----+------+--------+---------------------| | | | | | |MSDOS の MBR を代替す| | |V:1, | |非サポ|Neil |るフリーソフトウエア | |mbr |I:12 |72 |ート |Turton |ーです。ディスクパー | | | | | |の MBR |ティションを理解する | | | | | | |だけです。 | +---------------------------------------------------------------+ 警告     grub-rescue-pc パッケージのイメージから作ったブート可能なレスキュ ーメディア (CD かフロッピー) 無しにブートローダーを試してはいけま せん。これさえあると、ハードディスク上に機能するブートローダーが 無くともシステムの起動ができます。     GRUB Legacy のメニューの設定は "/boot/grub/menu.lst" にあります。 例えば、次のような内容です。 title Debian GNU/Linux     root (hd0,2) kernel /vmlinuz root=/dev/hda3 ro initrd /initrd.img GRUB 2 のメニューの設定は "/boot/grub/grub.cfg" にあります。 "/     etc/grub.d/*" の雛形と "/etc/default/grub" の設定から "/usr/sbin/ update-grub" を使って自動的に作られます。例えば、次のような内容で す。 menuentry "Debian GNU/Linux" { set root=(hd0,3)     linux /vmlinuz root=/dev/hda3 initrd /initrd.img }     これらの例で、これらの GRUB パラメーターは次の意味です。 表3.2 GRUB パラメーターの意味 +---------------------------------------------------------------+ |GRUB パラ| 意味 | |メーター | | |---------+-----------------------------------------------------| | |GRUB legacy では "(hd0,2)" また GRUB 2 では "(hd0,3)"|     |root |と設定することでプライマリディスクの3つ目のパーティシ| | |ョンを使用 | |---------+-----------------------------------------------------| |kernel |カーネルパラメーター "root=/dev/hda3 ro" とともに "/ | | |vmlinuz" にあるカーネルを使用 | |---------+-----------------------------------------------------| |initrd |"/initrd.img" にある initrd/initramfs イメージを使用 | +---------------------------------------------------------------+ 注記     GRUB legacy プログラムが使うパーティション値は Linux カーネルやユ ーティリティーツールが使う値より1つ少ない数字です。GRUB 2 プログ ラムはこの問題を修正します。 ヒント     UUID (「UUID を使ってパーティションをアクセス」参照下さい) は、"/ dev/hda3" のようなファイル名に代わるブロックの特定デバイスを確定 するのに使え、例えば "root=UUID= 81b289d5-4341-4003-9602-e254a17ac232 ro" です。 ヒント もし GRUB が使われている場合には、カーネルブートパラメーターは /     boot/grub/grub.cfg 中に設定されます。 Debian システム上では、/ boot/grub/grub.cfg を直接編集するべきではありません。/etc/default /grub 中の GRUB_CMDLINE_LINUX_DEFAULT の値を編集するべきで、 update-grub(8) を実行することで /boot/grub/grub.cfg を更新すべき です。 ヒント     チェインロード (連鎖導入) とよばれる技術を使うと、あるブートロー ダーから他のブートローダーを起動できます。     "info grub" と grub-install(8) を参照下さい。 3.1.3. 3段目: ミニ Debian システム ミニ Debian システムはブートローダーによって起動されるブートプロ     セスの3段目です。メモリー上でルートファイルシステムとともにシステ ムカーネルを実行します。これはオプションの起動プロセスの準備段階 です。 注記     "ミニ Debian システム" は著者がこの3段目のブートプロセスを本文書 中で記述するために作った言葉です。このシステムは一般に initrd と か initramfs システムと呼ばれています。類似のメモリー上のシステム は Debian インストーラーでも使われています。 "/init" スクリプトはこのメモリー上のルートファイルシステムで最初 に実行されるプログラムです。それはユーザー空間でカーネルを初期化 し次の段階にコントロールを引き継ぐシェルプログラムです。このミニ     Debian システムは、メインのブートプロセスが始まる前にカーネルモジ ュールを追加したり、ルートファイルシステムを暗号化されたファイル システムとしてマウントする等のブートプロセスの柔軟性を提供します 。 "break=init" 等をカーネルブートパラメーターとして与えると、本部分 のブートプロセスに割り込み root シェルを獲得できます。この他の割     り込み条件は "/init" スクリプトを参照下さい。このシェル環境はあな たの機器のハードウエアーを詳細に検査できるだけ十分洗練されていま す。     この機能を削ったミニ Debian システムで利用可能なコマンドは、主に busybox(1) という GNU ツールで提供されます。 注意     読出しのみのルートファイルシステム上では、mount コマンドには "-n" オプションを使う必要があります。 3.1.4. 4段目: 通常の Debian システム 通常の Debian システムはミニ Debian システムによって起動されるブ ートプロセスの4段目です。ミニ Debian システムのシステムカーネルは     この環境ででも実行され続けます。ルートファイルシステムはメモリー 上から本当にハードディスク上にあるファイルシステムに切り替えられ ます。 多くのプログラムを起動する主ブートプロセスを行う init プログラム は、PID=1 で最初のプログラムとして実行されます。init プログラムの     デフォールトのファイルパスは "/sbin/init" ですが、"init=/path/to/ init_program" のようなカーネルブートパラメーターにより変更できま す。     デフォルトの init プログラムは変化してきています: * squeeze 以前の Debian は、単純な SysV-スタイル init を使用し ます。 * wheezy の Debian は、LSB ヘッダーを用いブート順決めブートスク     リプトを並列起動をする改良された SysV-スタイル init を使用し ます。 * jessie の Debian は、イベントドリブンで並列初期化のために systemd にデフォルトの init を切り替えました。 ヒント     "/etc/init.d/rc" と "/etc/init.d/rcS" と "/usr/sbin/update-rc.d" と "/usr/sbin/invoke-rc.d" のスクリプトによって全てのブートメカニ ズムには互換性があります。 ヒント     あなたのシステム上の実際の init コマンドは "ps --pid 1 -f" コマン ドで確認できます。 表3.3 Debian システムののブートユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |--------------+------+----+------------------------------------| |initscripts |V:870,|207 |システムの始動と停止のためのスクリプ| | |I:992 | |ト | |--------------+------+----+------------------------------------| |sysvinit-core |V:19, |221 |System-V 的な init(8) ユーティリティ| | |I:25 | |ー | |--------------+------+----+------------------------------------| |sysv-rc |V:870,|122 |System-V 的なランレベル変更メカニズ | | |I:992 |123 |ム | |--------------+------+----+------------------------------------| |sysvinit-utils|V:874,|106 |System-V 的なユーティリティー ( | | |I:999 | |startpar(8)、bootlogd(8)、…) | |--------------+------+----+------------------------------------| |lsb-base |V:876,|49 |Linux Standard Base 3.2 の init スク| | |I:999 | |リプト機能 | |--------------+------+----+------------------------------------| |insserv |V:816,|139 |LSB init.d スクリプト依存関係を使い | | |I:968 | |ブート順序を整理するツール |     |--------------+------+----+------------------------------------| |systemd |V:577,|8962|並行処理のためのイベント依存の init | | |I:664 | |(8) デーモン (sysvinit 代替) | |--------------+------+----+------------------------------------| | |V:5, | |Linux が提供するユーザースペースソフ| |uswsusp |I:15 |493 |トウエアーによるサスペンドを使うため| | | | |のツール | |--------------+------+----+------------------------------------| |kexec-tools |V:1, |258 |kexec(8) リブートのための kexec ツー| | |I:7 | |ル (ワームリブート) | |--------------+------+----+------------------------------------| |bootchart |V:0, |46 |ブートプロセスのパーフォンマンスアナ| | |I:0 | |ライザー | |--------------+------+----+------------------------------------| |bootchart-view|V:0, |211 |ブートプロセスのアナライザー (可視 | | |I:0 | |化) | |--------------+------+----+------------------------------------| |mingetty |V:0, |24 |コンソール専用 getty(8) | | |I:3 | | | |--------------+------+----+------------------------------------| |mgetty |V:0, |289 |インテリジェントモデム用の代替 getty| | |I:2 | |(8) | +---------------------------------------------------------------+ ヒント     ブートプロセスを高速化する最新のティップは Debian wiki: BootProcessSpeedup を参照下さい。 3.2. SysV-スタイル init 注意     現行のデフォルト Debian システムは SysV-スタイルの init を使いま せん。最近の systemd に基づく init のための他の資料を読んでくださ い。The Debian Administrator's Handbook を参照ください。 本セクションは古き良き sysV-スタイル init がどのようにしてシステ ムをブートするかを記述します。あなたの Debian システムはここに書     かれたとおりには機能しませんが、より新しい init システムは等価の 機能を提供する傾向があるのでこの基本を知ることは非常に勉強となり ます。     SysV-スタイルの起動プロセスとは、本質的に以下を実行することです。 1. Debian システムはランレベル N (無し) に入り、"/etc/inittab" の記述にしたがいシステムを初期化します。 2. Debian システムはランレベル S に入り、シングルユーザーモード     下でハードウエアーの初期化等を完了するシステム初期化をします 。 3. Debian システムは指定されたマルチユーザーランレベル (2〜5) の 内の1つに入り、システムサービスをスタートします。 マルチユーザーモードで使われる最初のランレベルランレベルは、"init     =" というカーネルブートパラメーターもしくは "/etc/inittab" の "initdefault" 行で指定されます。インストールされたままの Debian システムはランレベル 2 でスタートします。     init システムが実行する全ての実際のスクリプトファイルは "/etc/ init.d/" ディレクトリーの中にあります。     詳細説明は、 init(8) と inittab(5) と "/usr/share/doc/sysv-rc/ README.runlevels.gz" を参照ください。 3.2.1. ランレベルの意味     各ランレベルはその設定に1つのディレクトリーを使い次に記す特定の意 味があります。 表3.4 ランレベルとその用途説明のリスト +---------------------------------------------------------------+ |ランレ|ディレク | ランレベル用途の説明 | | ベル | トリー | | |------+---------+----------------------------------------------| |N |無し |システムのブートアップ (無し) レベル ("/etc/ | | | |rcN.d/" ディレクトリーは無し) | |------+---------+----------------------------------------------| |0 |/etc/ |システム停止 | | |rc0.d/ | | |------+---------+----------------------------------------------| |S |/etc/ |ブート時のシングルユーザーモード (別名: "s") | | |rcS.d/ | | |------+---------+----------------------------------------------| |1 |/etc/ |マルチユーザーモードから切り替えたシングルユー| | |rc1.d/ |ザーモード | |------+---------+----------------------------------------------| |2 |/etc/ |マルチユーザーモード | | |rc2.d/ | | |------+---------+----------------------------------------------|     |3 |/etc/ |,, | | |rc3.d/ | | |------+---------+----------------------------------------------| |4 |/etc/ |,, | | |rc4.d/ | | |------+---------+----------------------------------------------| |5 |/etc/ |,, | | |rc5.d/ | | |------+---------+----------------------------------------------| |6 |/etc/ |システム再起動 | | |rc6.d/ | | |------+---------+----------------------------------------------| |7 |/etc/ |有効なマルチユーザーモードだが通常不使用 | | |rc7.d/ | | |------+---------+----------------------------------------------| |8 |/etc/ |,, | | |rc8.d/ | | |------+---------+----------------------------------------------| |9 |/etc/ |,, | | |rc9.d/ | | +---------------------------------------------------------------+     コンソールからランレベルを、例えば4に、次のようにして変更できます 。     $ sudo telinit 4 注意 Debian システムは2から5のランレベル間で如何なる意味の違いも事前に     付与しません。Debian システムのシステム管理者はこれに変更を加えら れます。(つまり Debian は、Red Hat Linux とも Sun Microsystems 社 の Solaris とも Hewlett Packard 社の HP-UX とも IBM 社の AIX とも …違います。) 注意     Debian システムは7から9のランレベルに対応するディレクトリーをパッ ケージインストール時に充足することはありません。伝統的な Unix バ リアントはこれらのランレベルを使いません。 3.2.2. ランレベルの設定     init(8) か telinit(8) コマンドがランレベルを "" に変更すると、 システムは基本的に次のスクリプトを実行します。 1. "/etc/rc.d/" 中の "K" で始まるスクリプト名が、"stop" のみ を引数としてアルファベット順に実行されます。(サービス停止)     2. "/etc/rc.d/" 中の "S" で始まるスクリプト名が、"start" のみ を引数としてアルファベット順に実行されます。(サービス開始) 例えば、ランレベルのディレクトリーに "S10sysklogd" と "S20exim4"     があった時に、"../init.d/exim4" にシムリンクされた "S20exim4" の 前に、"../init.d/sysklogd" にシムリンクされた "S10sysklogd" が実 行されます。     この単純なシーケンシャル初期化システムは古典的 System V スタイル のブートシステムで、 Debian lenny システムまで使われていました。     これに代わり、最近の Debian システムでは初期化スクリプトを同時並 行で実行するように最適化されています。 * insserv(8) コマンドは LSB パッケージ依存情報を用いすべてのス クリプト間の依存関係を計算します。 + "/usr/share/doc/insserv/README.Debian"を参照下さい。     * 初期化スクリプトのヘッダー中に定義された LSB パッケージ依存情 報は必要なリソースが確保されることを保証します。 + Linux Standard Base Core Specification 3.1, VII. System Initialization を参照下さい。 * "並行ブートのデフォルト化"発表 警告     メンテナよりあなたのほうが知識があるのでもなければ "/etc/rcS.d/" の中のシムリンクに変更を加えようとするのはお勧めできません。 3.2.3. ランレベル管理例     例えば、次に示す Red Hat Linux のようなランレベルを設定してみます 。 * init はデフォールトとしてランレベル =3 でシステムを起動します 。     * init はランレベル =(0,1,2,6) で gdm3(1) を起動しません。 * init はランレベル =(3,4,5) で gdm3(1) を起動します。 これは、"/etc/inittab" ファイルをエディターで変更して起動するラン レベル変更し、sysv-rc-conf や bum 等の使いやすいランレベル管理ツ     ールを使ってランレベルを編集することでできます。こうする代わりに コマンドラインだけを使うなら、(gdm3 パッケージをデフォールトでイ ンストールしディスプレーマネージャーとして選択した後に) 次に示す ようにします。     # cd /etc/rc2.d ; mv S21gdm3 K21gdm3 # cd /etc ; perl -i -p -e 's/^id:.:/id:3:/' inittab xdm や gdm3 や sddm や wdm 等のディスプレーマネジャーデーモンを起     動する際には "/etc/X11/default-display-manager" ファイルが確認さ れます。 注記     startx(1) コマンドを使えば、どのコンソールシェルからも X が起動で きます。 3.2.4. 各 init スクリプトのデフォールトのパラメーター "/etc/init.d/" の中の各 init スクリプトのデフォールトパラメーター は、"/etc/default/" の中の環境変数のアサインメントのみを含む対応 ファイルによって与えられます。このディレクトリー名の選択は Debian     システム特定です。それは、Red Hat Linux や他のディストリビューシ ョンで使われる "/etc/sysconfig" ディレクトリーにほぼ相当します。 例えば、"/etc/default/cron" を使うと "/etc/init.d/cron" がどう機 能するかを制御できます。     "/etc/default/rcS" ファイルを使うと motd(5) や sulogin(8) 等のブ ート時のデフォールトをカスタム化できます。 もしそのような変数の変更で希望の挙動が得られない場合には、init ス     クリプト自体を変更することができます。これらスクリプトは管理者が 編集可能な設定ファイルです。 3.2.5. ホスト名 カーネルがシステムのホスト名を維持管理します。ランレベル S の "/ etc/init.d/hostname.sh" にシムリンクされた init スクリプトは、     (hostname コマンドを使って) "/etc/hostname" に保存された名前を使 ってブート時にホスト名を設定します。このファイルには、完全修飾ド メイン名ではなく、システムのホスト名のみが含まれているべきです。     現在のホスト名を確認するには、hostname(1) を引数無しで実行します 。 3.2.6. ファイルシステム ルートファイルシステムはカーネル起動時にカーネルによってマウント     されますが、他のファイルシステムは次の init スクリプトでランレベ ル S 中でマウントされます。 * "/proc" と "/sys" 等中のカーネルファイルシステムに関しては、" /etc/init.d/mountkernfs.sh" * "/dev" 中の仮想ファイルシステムに関しては、"/etc/init.d/ mountdevsubfs.sh"     * "/etc/fstab" を使う普通のファイルシステムに関しては "/etc/ init.d/mountall.sh" * "/etc/fstab" を使うネットワークファイルシステムに関しては "/ etc/init.d/mountnfs.sh" カーネルファイルシステム (/proc や /sys や /tmp や /run 他のため     の procfs や sysfs や tmpfs) のマウントオプションは "/etc/default /rcS" で設定されます。rcS(5) を参照下さい。 通常のディスクやネットワークのファイルシテムのマウントオプション     は "/etc/fstab" で設定されます。「マウントオプションによるファイ ルシステムの最適化」を参照下さい。 注記     ネットワークファイルシステムの実際のマウントはネットワークインタ ーフェースの起動を待ちます。 警告     各ブートアップごとに、全てのファイルシステムをマウントした後で、" /tmp" と "/var/lock" と "/var/run" 中の一時ファイルはクリーンされ ます。 3.2.7. ネットワークインターフェースの初期化 ネットワークインターフェースはランレベル S で "/etc/init.d/     ifupdown-clean" と "/etc/init.d/ifupdown" にシムリンクされた init スクリプトよって初期化されます。それらの設定に関しては、5章ネット ワークの設定を参照下さい。 3.2.8. ネットワークサービスの初期化 多くのネットワークサービス (6章ネットワークアプリケーション参照下 さい) はブート時に、例えば "/etc/init.d/exim4" にシムリンクされて     いる "/etc/rc2.d/S20exim4" (RUNLEVEL=2 の場合) 等という、マルチユ ーザーモード下の init スクリプトによってデーモンプロセスとして起 動されます。 ネットワークサービスの一部はスーパーサーバー、inetd (もしくはその 同等) を用いて必要に応じて起動されます。inetd は、"/etc/init.d/     inetd" にシムリンクされた "/etc/rc2.d/S20inetd" (RUNLEVEL=2 の場 合) によってブート時に起動されます。基本的に、inetd は一つの実行 デーモンにより複数の他デーモンを起動できるようにすることで、シス テムのロードを下げます。 サービス要求がスーパーサーバー inetd に到達する度に、そのプロトコ ルとサービスが "/etc/protocols" と "/etc/services" というデーター     ベースを照覧することで確認されます。さらに inetd は、"/etc/ inetd.conf" の中にある通常のインターネットサービスか、"/etc/ rpc.conf" の中にある Sun RPC 準拠サービスを照覧します。 時々、inetd が対象となるサーバーを直接起動せずに、対象となるサー バー名を "/etc/inetd.conf" 中に引数とし記載したTCP デーモンラッパ     ープログラム tcpd(8) を起動することがあります。この様な場合には、 tcpd は要求を記録し "/etc/hosts.deny" や "/etc/hosts.allow" を用 いた追加確認後で適切なサーバープログラムを起動します。 システムのセキュリティーのためにできるだけ多くのネットワークサー     ビスを無効にします。「サーバーのサービスへのアクセスの制限」を参 照下さい。 inetd(8) と inetd.conf(5) と protocols(5) と services(5) と tcpd     (8) と hosts_access(5) と hosts_options(5) と rpcinfo(8) と portmap(8) と "/usr/share/doc/portmap/portmapper.txt.gz" を参照下 さい。 3.2.9. システムメッセージ ログファイルとスクリーン上の両方のシステムメッセージに関して、 "/     etc/default/rsyslogd" と "/etc/rsyslog.conf" によってカスタム化で きます。rsyslogd(8) と rsyslog.conf(5) を参照下さい。さらに「ログ アナライザー」を参照下さい。 3.2.10. カーネルメッセージ ログファイルとスクリーン上の両方のカーネルメッセージに関して、"/     etc/default/klogd" によってカスタム化できます。このファイル中に "KLOGD='-c 3'" と設定し "/etc/init.d/klogd restart" を実行します 。klogd(8) を参照下さい。     エラーメッセージのレベルを次に記すように直接変更してもいいです。     # dmesg -n3 表3.5 カーネルエラーレベルのリスト +--------------------------------------------------------------+ |エラーレベル値|エラーレベル名| 意味 | |--------------+--------------+--------------------------------| |0 |KERN_EMERG |システムは不安定 | |--------------+--------------+--------------------------------| |1 |KERN_ALERT |直ぐアクションが必要 | |--------------+--------------+--------------------------------| |2 |KERN_CRIT |クリチカルなコンディション |     |--------------+--------------+--------------------------------| |3 |KERN_ERR |エラーコンディション | |--------------+--------------+--------------------------------| |4 |KERN_WARNING |警告コンディション | |--------------+--------------+--------------------------------| |5 |KERN_NOTICE |ノーマルだが重要なコンディション| |--------------+--------------+--------------------------------| |6 |KERN_INFO |情報 | |--------------+--------------+--------------------------------| |7 |KERN_DEBUG |デバグレベルのメッセージ | +--------------------------------------------------------------+ 3.3. udev システム Linux カーネル 2.6以降では、udev システムがハードウエアーの自動検 出と初期化のメカニズムを提供します (udev(7) 参照下さい)。カーネル が各デバイスを発見すると、udev システムは sysfs ファイルシステム     (「procfs と sysfs」参照下さい) からの情報を使いユーザープロセス を起動し、modprobe(8) プログラム (「カーネルモジュール初期化」参 照下さい) を使ってそれをサポートする必要なカーネルモジュールをロ ードし、対応するデバイスノードを作成します。 ヒント     もし "/lib/modules//modules.dep" が何らかの理由で depmod(8) によって適正に生成されていなかった場合には、モジュール は udev システムによる期待にそってロードされないかもしれません。 これを修正するには、"depmod -a" を実行します。 デバイスノード名は "/etc/udev/rules.d/" の中のファイルによって設 定できます。現在のデフォールトのルールは、cd とネットワークデバイ ス以外は非静的なデバイス名となる動的生成名を作る傾向があります。     cd やネットワークデバイスと同様のカスタムルールを追加することで USB メモリースティック等の他のデバイスにも静的なデバイス名を生成 出来ます。"Writing udev rules" か "/usr/share/doc/udev/ writing_udev_rules/index.html" を参照下さい。     udev システムは少々動くターゲットなので、詳細は他のドキュメントに 譲り、ここでは最小限の記述に止めます。 ヒント     "/etc/fstab" 中のマウントルールでは、デバイス名が静的なデバイス名 である必要がありません。"/dev/sda" 等のデバイス名ではなく UUID を 使ってデバイスをマウントできます。「UUID を使ってパーティションを アクセス」を参照下さい。 3.3.1. カーネルモジュール初期化 modprobe(8) プログラムは、ユーザープロセスからカーネルモジュール     を追加や削除することで実行中の Linux カーネルの設定を可能にします 。udev システム (「udev システム」参照下さい) は、その起動を自動 化しカーネルモジュールの初期化を補助します。 "/etc/modules" ファイル中にリストしてプリロードする必要のある (     modules(5) 参照下さい) 次に記すような非ハードウエアーや特殊ハード ウエアーのドライバーモジュールがあります。 * ポイント間ネットワークデバイス (TUN) と仮想 Ethernet ネットワ ークデバイス (TAP) を提供する、TUN/TAP モジュール     * netfilter ファイアーウォール機能 (iptables(8) と「Netfilter インフラ」) を提供する netfilter モジュール * ウォッチドッグタイマードライバーのモジュール modprobe(8) プログラムのための設定ファイルは、modprobe.conf(5) で     説明されているように "/etc/modprobes.d/" ディレクトリーの下にあり ます。(あるカーネルモジュールが自動ロードされるのを避けるには、"/ etc/modprobes.d/blacklist" ファイル中にブラックリストします。) depmod(8) プログラムによって生成される "/lib/modules//     modules.dep" ファイルは、modprobe(8) プログラムによって使われるモ ジュール依存関係を記述します。 注記     ブート時に modprobe(8) を使ってのモジュールロードの問題に出会った 場合には、"depmod -a" として "modules.dep" を再構築をするとこの様 な問題が解消できるかもしれません。     modinfo(8) プログラムは Linux カーネルモジュールに関する情報を表 示します。     lsmod(8) プログラムは "/proc/modules" の内容を読みやすい形式にし て、どのカーネルモジュールが現在ロードされているかを表示します。 ヒント     あなたのシステム上の正確なハードウエアーを特定します。「ハードウ エアーの識別」を参照下さい。 ヒント     ブート時に期待されるハードウエアー機能を有効となるように設定もで きます。「ハードウエアー設定」を参照下さい。 ヒント     あなたのデバイスのサポートは、カーネルを再コンパイルすれば追加で きます。「カーネル」を参照下さい。 第4章認証     人 (またはプログラム) がシステムへのアクセスの要求をした際に、認 証はその正体が信頼できるものだと確認します。 警告     PAM の設定のエラーはあなたをあなた自身のシステムから締め出すかも 知れません。レスキュー CD を手元に置くか代替ブートパーティション 設定を必ずします。復元するには、それらを使ってシステムをブートし そこから修正します。 警告     本章は、2013年にリリースされた Debian 7.0 (Wheezy) に基づいている ため、内容が陳腐化しつつあります。 4.1. 通常の Unix 認証 通常の Unix 認証は PAM (プラグ可能な認証モジュール) のもとで     pam_unix.so(8) モジュールによって提供される。":" で分離されたエン トリーを持つその3つの重要な設定ファイルは次です。 表4.1 3つの pam_unix(8) に関する重要な設定ファイル +---------------------------------------------------------------+ |ファイル|パーミッション |ユー |グルー| 説明 | | | (許可) |ザー | プ | | |--------+---------------+-----+------+-------------------------| |/etc/ |-rw-r--r-- |root |root |(浄化された) ユーザーアカ|     |passwd | | | |ウント情報 | |--------+---------------+-----+------+-------------------------| |/etc/ |-rw-r----- |root |shadow|保護されたユーザーアカウ | |shadow | | | |ント情報 | |--------+---------------+-----+------+-------------------------| |/etc/ |-rw-r--r-- |root |root |グループ情報 | |group | | | | | +---------------------------------------------------------------+     "/etc/passwd" ファイルは次の内容です。 ...     user1:x:1000:1000:User1 Name,,,:/home/user1:/bin/bash user2:x:1001:1001:User2 Name,,,:/home/user2:/bin/bash ...     passwd(5) に説明されているように、このファイルの ":" で分離された エントリーそれぞれは次の意味です。 * ログイン名 * パスワード規定エントリー * 数値のユーザー ID     * 数値のグループ ID * ユーザー名またはコメント領域 * ユーザーのホームディレクトリー * ユーザーのコマンドインタープリター (無いこともある) "/etc/passwd" の2番目のエントリーは暗号化したパスワードのエントリ     ーとして使われていました。"/etc/shadow" が導入された後は、このエ ントリーはパスワード規定エントリーとして使われています。 表4.2 "/etc/passwd" の2番目のエントリーの内容 +---------------------------------------------------------------+ | 内容 | 意味 | |------+--------------------------------------------------------| |(空白)|パスワード無しアカウント | |------+--------------------------------------------------------|     |x |暗号化したパスワードは "/etc/shadow" ファイルの中にあり | | |ます。 | |------+--------------------------------------------------------| |* |このアカウントへのログイン不可 | |------+--------------------------------------------------------| |! |このアカウントへのログイン不可 | +---------------------------------------------------------------+     "/etc/shadow" の内容は次です。 ...     user1:$1$Xop0FYH9$IfxyQwBe9b8tiyIkt2P4F/:13262:0:99999:7::: user2:$1$vXGZLVbS$ElyErNf/agUDsm1DehJMS/:13261:0:99999:7::: ...     shadow(5) で説明されているように、このファイルの ":" で分離された エントリーそれぞれは次の意味です。 * ログイン名 * 暗号化されたパスワード (最初が "$1$" で始まっているのは MD5 暗号化が使われていることを示します。"*" はログイン不可を示し ます。) * 1970 年 1 月 1 日から、最後にパスワードが変更された日までの日 数 * パスワードが変更可能となるまでの日数     * パスワードを変更しなくてはならなくなる日までの日数 * パスワード有効期限が来る前に、ユーザが警告を受ける日数 * パスワード有効期限が過ぎてからアカウントが使用不能になるまで の日数 * 1970 年 1 月 1 日からアカウントが使用不能になる日までの日数 * …     "/etc/group" のファイル内容は次です。     group1:x:20:user1,user2     group(5) に説明されているように、このファイルの ":" で分離された エントリーそれぞれは次の意味です。 * グループ名 * 暗号化されたパスワード (実際は使われていない)     * 数値のグループ ID * "," で分離されたユーザー名のリスト 注記     "/etc/gshadow" ファイルは "/etc/shadow" ファイルが "/etc/group" ファイルに対する機能と同様の機能がありますが、実際には使われてい ません。 注記     もし "authoptionalpam_group.so" 行が "/etc/pam.d/common-auth" に 書き加えれ、"/etc/security/group.conf" に対応する設定がされていれ ば、実際のユーザーのグループメンバーシップは動的に割り当てられま す。pam_group(8) を参照下さい。 注記     base-passwd パッケージはユーザーとグループに関する権威のあるリス トが含まれます: "/usr/share/doc/base-passwd/ users-and-groups.html"。 4.2. アカウントとパスワードの情報管理     アカウント情報管理のための重要コマンドを記します。 表4.3 アカウント情報を管理するコマンドのリスト +---------------------------------------------------------------+ | コマンド | 機能 | |--------------------+------------------------------------------| |getent passwd |"" のアカウント情報の閲覧 | | | | |--------------------+------------------------------------------| |getent shadow |"" のシャドーされたアカウント情| | |報の閲覧 |     |--------------------+------------------------------------------| |getent group |"" のグループ情報の閲覧 | | | | |--------------------+------------------------------------------| |passwd |アカウントのパスワード管理 | |--------------------+------------------------------------------| |passwd -e |アカウント開設のための一回だけ使えるパスワ| | |ードの設定 | |--------------------+------------------------------------------| |chage |パスワードのエージング情報管理 | +---------------------------------------------------------------+     一部機能が機能するには root 権限が必要な場合があります。パスワー ドとデーターの暗号化は crypt(3) を参照下さい。 注記     Debian が提供する alioth 機器と同様な PAM と NSS の設定をされたシ ステム上では、ローカルの "/etc/passwd" や "/etc/group" や "/etc/ shadow" の内容がシステムにアクティブに利用されていないことがあり ます。 4.3. 良好なパスワード passwd(1) によるとシステムインストール時や passwd(1) コマンドによ     ってアカウント作成する際には、次に記すようなセットからなる少なく とも6から8文字の良好なパスワードを選択するべきです。 * 小文字のアルファベット     * 数字の0から9 * 句読点 警告     容易に推測できるパスワードを選んではいけません。アカウント名、社 会保険番号、電話番号、住所、誕生日、家族員やペットの名前、辞書に ある単語、"12345" や "qwerty" のような単純な文字列…、これらすべて パスワードに選んではいけません。 4.4. 暗号化されたパスワード作成     ソルトを使って暗号化されたパスワードを生成する独立のツールがあり ます。 表4.4 パスワード生成ツールのリスト +---------------------------------------------------------------+ |パッケ |ポプコン|サイ|コマンド | 機能 | | ージ | | ズ | | | |-------+--------+----+---------+-------------------------------|     |whois |V:67, |266 |mkpasswd |crypt(3) ライブラリーの充実しす| | |I:898 | | |ぎたフロントエンド | |-------+--------+----+---------+-------------------------------| |openssl|V:772, |1127|openssl |パスワードハッシュの計算 | | |I:987 | |passwd |(OpenSSL)。passwd(1ssl) | +---------------------------------------------------------------+ 4.5. PAM と NSS Debian システムのような最新の Unix 的システムは PAM (プラグ可能な 認証モジュール: Pluggable Authentication Modules) と NSS (ネーム     サービススイッチ: Name Service Switch) メカニズムをローカルのシス テム管理者がそのシステム管理用に提供します。それらの役割をまとめ ると次の様になります。 * PAM は、アプリケーションソフトウエアーが使う柔軟な認証メカニ ズムを提供し、パスワードデーターの交換に関与します。     * NSS は、ls(1)andid(1) 等のプログラムがユーザーやグループの名 前を得ために C 標準ライブラリー経由で頻用する柔軟なネームサー ビスメカニズムを提供します。     これらの PAM と NSS システムは一貫した設定が必要です。     PAM と NSS システムに関する注目のパッケージは次です。 表4.5 特記すべき PAM と NSS システムのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |-------------------+------+-----+------------------------------| |libpam-modules |V:693,|870 |差し替え可能な認証モジュール | | |I:999 | |(基本サービス) | |-------------------+------+-----+------------------------------| | |V:3, | |LDAP インターフェースを可能に | |libpam-ldap |I:18 |251 |する差し替え可能な認証モジュー| | | | |ル | |-------------------+------+-----+------------------------------| |libpam-cracklib |V:1, |113 |cracklib のサポートを可能にす | | |I:17 | |る差し替え可能な認証モジュール| |-------------------+------+-----+------------------------------| |libpam-doc |I:2 |1019 |差し替え可能な認証モジュール | | | | |(html と text の文書) | |-------------------+------+-----+------------------------------| | |V:927,| |GNU C ライブラリー: "ネームサ |     |libc6 |I:998 |10670|ービススイッチ" も提供する共有| | | | |ライブラリー | |-------------------+------+-----+------------------------------| |glibc-doc |I:14 |3126 |GNU C ライブラリー: マンページ| |-------------------+------+-----+------------------------------| | | | |GNU C ライブラリー: info と | |glibc-doc-reference|I:6 |11934|pdf と html フォーマットでのリ| | | | |ファレンスマニュアル | | | | |(non-free) | |-------------------+------+-----+------------------------------| |libnss-mdns |I:565 |127 |マルチキャスト DNS を使った名 | | | | |前解決のための NSS モジュール | |-------------------+------+-----+------------------------------| |libnss-ldap |I:16 |255 |LDAP をネームサービスとして使 | | | | |う NSS モジュール | |-------------------+------+-----+------------------------------| | | | |LDAP をネームサービスとして使 | |libnss-ldapd |I:21 |143 |う NSS モジュール (libnss-ldap| | | | |の新たなフォーク) | +---------------------------------------------------------------+ * libpam-doc 中の "The Linux-PAM System Administrators' Guide" は PAM 設定を学ぶ上で必須です。     * glibc-doc-reference の中の "System Databases and Name Service Switch" セクションは NSS 設定を学ぶ上で必須です。 注記     より大規模かつ最新のリストは "aptitude search 'libpam-|libnss-'" コマンドを実行すると得られます。NSS という頭字語は "ネームサービ ススイッチ: Name Service Switch" と異なる "ネットワークセキュリテ ィーサービス: Network Security Service" を指すこともあります。 注記     PAM は個別プログラムに関する環境変数をシステム全体のデフォールト 値に初期化する最も基本的な手段です。 4.5.1. PAM と NSS によってアクセスされる設定ファイル     PAM と NSS がアクセスする注目すべき設定ファイルを次に記します。 表4.6 PAM NSS によりアクセスされる設定ファイルのリスト +---------------------------------------------------------------+ |設定ファイル | 機能 | |-------------+-------------------------------------------------| |/etc/pam.d/ |"" に関する PAM 設定の設定; pam(7) | |<プログラム |と pam.d(5) 参照下さい | |名> | | |-------------+-------------------------------------------------| |/etc/ |各サービスに関するエントリーによる NSS 設定の設 | |nsswitch.conf|定; nsswitch.conf(5) 参照下さい | |-------------+-------------------------------------------------| |/etc/nologin |ユーザーのログイン制限のために pam_nologin(8) モ | | |ジュールがアクセス | |-------------+-------------------------------------------------| |/etc/ |pam_securetty(8) モジュールにより root アクセスに| |securetty |使う tty を制限 | |-------------+-------------------------------------------------| |/etc/security|pam_access(8) モジュールによりアクセス制限を設定 | |/access.conf | |     |-------------+-------------------------------------------------| |/etc/security|pam_group(8) モジュールによりグループに基づく制約| |/group.conf |を設定 | |-------------+-------------------------------------------------| |/etc/security|pam_env(8) モジュールにより環境変数を設定 | |/pam_env.conf| | |-------------+-------------------------------------------------| |/etc/ |"readenv=1" 引数を付きの pam_env(8) モジュールに | |environment |よって追加での環境変数を設定 | |-------------+-------------------------------------------------| |/etc/default/|"readenv=1envfile=/etc/default/locale" 引数を付き| |locale |の pam_env(8) モジュールによって追加でロケールを | | |設定します (Debian) | |-------------+-------------------------------------------------| |/etc/security|pam_linits(8) モジュールによってリソース制限 | |/limits.conf |(ulimit, core, …) を設定 | |-------------+-------------------------------------------------| |/etc/security|pam_time(8) モジュールによって時間制限を設定 | |/time.conf | | +---------------------------------------------------------------+     パスワード選択の制限は pam_unix(8) と pam_cracklib(8) モジュール で実装されています。それらは引数を使って設定します。 ヒント     PAM モジュールはファイル名のサフィクスとして ".so" を使います。 4.5.2. 最新の集中システム管理 集中化された軽量ディレクトリーアクセスプロトコル (LDAP) を採用す     ることで多くのネットワーク上の Unix 的や非 Unix 的システムを最新 の集中システム管理が実現できます。軽量ディレクトリーアクセスプロ トコルのオープンソース実装は OpenLDAP ソフトウエアーです。 LDAP サーバーは、libpam-ldap と libnss-ldap パッケージで提供され る PAM と NSS を使うことで Debian システムにアカウント情報を提供     します。この実現ためにはいくつかの設定が必要です (著者は本設定を 使っていないため、次の情報は完全に二次情報です。ご理解の上お読み 下さい。)。 * スタンドアローンの LDAP デーモンである slapd(8) 等のプログラ ムを走らせることで集中化された LDAP サーバーを設置します。 * デフォールトの "pam_unix.so" に代えて "pam_ldap.so" を使うに は "/etc/pam.d/" ディレクトリー中の PAM 設定ファイルを変更し ます。 + Debian では、"/etc/pam_ldap.conf" をlibpam-ldap の設定フ ァイル、"/etc/pam_ldap.secret" を root のパスワードを保存 するファイルとして使っています。 * デフォールト ("compat" または "file") に代えて "ldap" を使う には "/etc/nsswitch.conf" ファイル中の NSS 設定を変更します。     + Debian では、"/etc/libnss-ldap.conf" をlibnss-ldap の設定 ファイルとして使っています。 * パスワードのセキュリティー確保のために libpam-ldap が SSL (も しくは TLS) 接続を使うよう設定しなければいけません。 * LDAP のネットワークオバーヘッドの犠牲はあるとはいえ、データー の整合性確保のために libnss-ldap が SSL (もしくは TLS) 接続を 使うように設定できます。 * LDAP のネットワークトラフィックを減少させるために LDAP サーチ 結果を一時保持するための nscd(8) をローカルで走らせるべきです 。 libpam-doc パッケージで提供される pam_ldap.conf(5) や "/usr/share     /doc/libpam-doc/html/" や glibc-doc パッケージで提供される "info libc 'NameServiceSwitch'" といった文書を参照下さい。     同様に、これに代わる集中化されたシステムは他の方法を使っても設定 できます。 * Windows システムとのユーザーとグループの統合 + winbind と libpam_winbind パッケージを使って Windows ドメ インサービスにアクセスします。 + winbind(8) と SAMBA による MS Windows Networks への統合を     参照下さい。 * 旧来の Unix 的なシステムとのユーザーとグループの統合 + nis パッケージにより NIS (当初 YP と呼ばれた) または NIS+ にアクセス + The Linux NIS(YP)/NYS/NIS+ HOWTO 参照下さい。 4.5.3. 「どうして GNU の su は wheel グループをサポートしないのか」 これは Richard M. Stallman が書いた昔の "info su" の最後に書かれ ていた有名な文言です。ご心配は無用です。現在 Debian にある su は     PAM を使っているので "/etc/pam.d/su" の中の "pam_wheel.so" の行を エネーブルすることで su を使えるのを root グループに限定できます 。 4.5.4. パスワード規則強化 libpam-cracklib パッケージをインストールすると、例えば "/etc/     pam.d/common-password" に次のような行があれば、パスワード規則を強 化できます。     squeeze の場合: password required pam_cracklib.so retry=3 minlen=9 difok=3     password [success=1 default=ignore] pam_unix.so use_authtok nullok md5 password requisite pam_deny.so password required pam_permit.so 4.6. 他のアクセスコントロール 注記     カーネルのセキュアーアテンションキー (SAK) 機能の制限は「 Alt-SysRq キー」を参照下さい。 ヒント     systemd の下では、logind がユーザーのログイン管理に使えます。 systemd-logind(8) を参照ください。 4.6.1. sudo sudo はシステム管理者がユーザーに制限付きの root 権限を与え、その root 活動を記録するように設計されたプログラムです。sudo はユーザ     ーの通常パスワードだけが必要です。sudo パッケージをインストールし 、"/etc/sudoers" の中のオプションを設定することによりアクティベー トして下さい。"/usr/share/doc/sudo/examples/sudoers" や「sudo の 設定」の設定例を参照下さい。 単一ユーザーシステムにおける私の sudo の使い方 (「sudo の設定」参 照下さい) は自分自身の失敗からの防衛を目指しています。sudo を使う     ことは、常に root アカウントからシステムを使うよりは良い方法だと 個人的には考えます。例えば、次は "" の所有者を " " に変更します。     $ sudo chown root のパスワード (自分でシステムインストールをした Debian ユーザ     ーなら当然知っています) を知っていれば、どのユーザーアカウントか らいかなるコマンドも "su -c" とすれば root もとで実行できます。 4.6.2. PolicyKit     PolicyKit は Unix系オペレーティングシステムにおけるシステム全体の 特権を制御するオペレーティングシステム構成要素です。 新しいGUIアプリケーションは、特権プロセスとして実行するように設計     されていません。それらは、PolicyKitを経由し管理操作を実行する特権 プロセスに話しかけます。     PolicyKitは、このような操作をDebianシステム上のsudoグループ所属の ユーザーアカウントに限定します。     polkit(8)を参照下さい。 4.6.3. SELinux セキュリティー強化した Linux (SELinux) は強制アクセス制御 (MAC)     ポリシーのある通常の Unix 的な権限モデルより厳格な枠組みです。あ る条件下では root の権限すら制限を受けます。 4.6.4. サーバーのサービスへのアクセスの制限 システムのセキュリティーのためにできるだけ多くのサーバープログラ ムを無効とするのは良い考えです。このことはネットワークサーバーの     場合は決定的です。直接デーモンとしてであれスーパーサーバープログ ラム経由であれ有効にされている使っていないサーバーがあることはセ キュリティーリスクと考えられます。 sshd(8) 等の多くのプログラムが PAM を使ったアクセスコントロールを     使っています。サーバーサービスへのアクセスを制限するには多くの方 法があります。 * 設定ファイル: "/etc/default/<プログラム名>" * デーモンに関するランレベル設定 * PAM (プラグ可能な認証モジュール: Pluggable Authentication Modules) * スーパーサーバーに関する "/etc/inetd.conf"     * TCP ラッパーに関する "/etc/hosts.deny" と "/etc/hosts.allow" 、tcpd(8) * Sun RPC に関する "/etc/rpc.conf" * atd(8) に関する "/etc/at.allow" と "/etc/at.deny" * atd(8) に関する "/etc/at.allow" と "/etc/at.deny" * netfilter インフラのネットワークファイアーウォール 「ランレベル管理例」と「各 init スクリプトのデフォールトのパラメ     ーター」と「PAM と NSS によってアクセスされる設定ファイル」と「ネ ットワークサービスの初期化」と「Netfilter インフラ」を参照下さい 。 ヒント     NFS 他の RPC を使うプログラムためには Sun RPC サービスはアクティ ブにする必要があります。 ヒント     もし現代的な Debian システムでリモートアクセスで問題に会った場合 には、"/etc/hosts.deny" 中に "ALL:PARANOID" 等の問題となっている 設定があればコメントアウトします。(ただしこの種の行為に関するセキ ュリティーリスクに注意を払わなければいけません。) 4.7. 認証のセキュリティー 注記     ここに書かれている情報はあなたのセキュリティーのニーズに充分では ないかもしれませんが、良いスタートです。 4.7.1. インターネット上でセキュアーなパスワード 多くのトランスポーテーションレイヤーサービスはパスワード認証も含 めて暗号化せずにメッセージをプレーンテキストで通信します。途中で 傍受されかねないインターネットの荒野を経由して暗号化せずパスワー     ドを送ることは非常によくない考えです。これらに関しては、"トランス ポーテーションレイヤーセキュリティー"(TLS) もしくはその前身の "セ キュアーソケットレイヤー" (SSL) で暗号化することでパスワードを含 むすべての通信をセキュアーにしてサービスができます。 表4.7 インセキュアーとセキュアーのサービスとポートのリスト +---------------------------------------------------------------+ |インセキュアーなサービス名|ポート|セキュアーなサービス名|ポート| |--------------------------+------+----------------------+------| |www (http) |80 |https |443 | |--------------------------+------+----------------------+------| |smtp (mail) |25 |ssmtp (smtps) |465 | |--------------------------+------+----------------------+------| |ftp-data |20 |ftps-data |989 |     |--------------------------+------+----------------------+------| |ftp |21 |ftps |990 | |--------------------------+------+----------------------+------| |telnet |23 |telnets |992 | |--------------------------+------+----------------------+------| |imap2 |143 |imaps |993 | |--------------------------+------+----------------------+------| |pop3 |110 |pop3s |995 | |--------------------------+------+----------------------+------| |ldap |389 |ldaps |636 | +---------------------------------------------------------------+ 暗号化には CPU タイムがかかります。CPU に友好的な代替方法として、 POP には "パスワードを認証されたポストオフィスプロトコル "(APOP) や SMTP や IMAP には "チャレンジレスポンス認証メカニズム MD5" (CRAM-MD5) といったセキュアーな認証プロトコルでパスワードのみを保     護しつつ通信はプレーンテキストですることもできます。(最近メールク ライアントからメールサーバーにインターネット経由でメールメッセー ジを送る際には、CRAM-MD5 で認証をしたのちネットワークプロバイダー によるポート25 ブロッキングを避けて従来の SMTP ポート25 の代わり にメッセージサブミッションポート587 を使うことがよく行われます。) 4.7.2. セキュアーシェル セキュアーシェル (SSH) プログラムはセキュアーな認証とともにインセ キュアーなネットワークを通過したお互いに信頼し合っていないホスト 間のセキュアーで暗号化された通信を可能にします。OpenSSH クライア     ント ssh(1) と OpenSSH デーモン sshd(8) から成り立っています。SSH はポートフォーワーディング機能を使い POP や X のようなインセキュ アープロトコルの通信をインターネット経由でトンネルするのに使えま す。 クライアントは、ホストベースド認証、公開鍵認証、チャレンジレスポ ンス認証、パスワード認証を使って認証をとろうとします。公開鍵認証     を利用すると、リモートからのパスワード無しログインができるように なります。「リーモートアクセスサーバーとユーティリティー (SSH)」 を参照下さい。 4.7.3. インターネットのためのセキュリティー強化策 たとえ、セキュアーシェル (SSH) やポイントツーポイントトンネリング プロトコル (PPTP) サーバーのようなセキュアーサービスを走らせる場     合でも、ブルートフォースのパスワード推測等による侵入の可能性は残 っています。次のようなセキュリティーのためのツールとともに、ファ イアーウォールポリシー (「Netfilter インフラ」参照下さい) を使う のはセキュリティー状況を向上させることが期待できます。 表4.8 追加セキュリティー策を提供するツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ |サイ| 説明 | | | ン | ズ | | |-------------+-------+----+------------------------------------| |knockd |V:0, |164 |小さなポートノックのデーモン knockd |     | |I:2 | |(1) とクライアント konck | |-------------+-------+----+------------------------------------| |fail2ban |V:92, |1253|複数回の認証エラーを発生させる IP を| | |I:103 | |使用禁止にします | |-------------+-------+----+------------------------------------| |libpam-shield|V:0, |106 |パスワード推測によるリモートからの攻| | |I:0 | |撃者を締め出す | +---------------------------------------------------------------+ 4.7.4. root パスワードのセキュリティー確保     あなたの機器に他人が root 権限を持ってアクセスするのを阻止するに は、次のアクションが必要です。 * ハードディスクへの物理的アクセスを阻止 * BIOS に鍵を書け、リムーバブルメディアからの起動を阻止     * GRUB のインタラクティブセッションのパスワードを設定 * GRUB のメニュー項目編集に施錠     ハードディスクへの物理的アクセスがあれば、パスワードをリセットす ることは次の手順を使うと比較的簡単です。 1. ハードディスクを CD から起動可能な BIOS のついた PC に移動し ます。 2. レスキューメディア (Debian ブートディスク、Knoppix CD、GRUB CD、…) でシステムを起動します。     3. ルートパーティションを読出し / 書込みアクセスでマウントします 。 4. ルートパーティションの "/etc/passwd" を編集し、root アカウン トの2番目の項目を空にします。 grub-rescue-pc の起動時に GRUB のメニュー項目を編集可能 (「2段目:     ブートローダー」参照下さい) なら、次の手順を使えてさらに簡単です 。 1. カーネルパラメーターを "root=/dev/hda6 rw init=/bin/sh" のよ うな感じに変更してシステムを起動します。     2. "/etc/passwd" を編集し、root アカウントの2番目の項目を空にし ます。 3. システム再起動します。     これで、システムの root シェルにパスワード無しに入れるようになり ました。 注記 root シェルにアクセスさえできれば、システム上の全てにアクセスでき システム上のどのパスワードでもリセットできます。さらに。john とか     crack パッケージ (「システムのセキュリティーと整合性のチェック」 参照下さい) のようなブルートフォースのパスワードクラッキングツー ルを使ってすべてのユーザーアカウントのパスワードが破られるかもし れません。こうして破られたパスワードは他のシステムへの侵入を引き 起こしかねません。 この様な懸念を回避できる唯一の合理的なソフトウエアー的解決法は、 dm-crypt と initramfs (「データー暗号化ティップ」参照下さい) をつ     かう、ソフトウエアー暗号化されたルートパーティション (もしくは "/ etc" パーティション) を使うことです。でも、パスワードがシステム起 動毎に必要になってしまいます。 第5章ネットワークの設定 ヒント     GNU/Linux のネットワーク設定の一般的ガイドは Linux Network Administrators Guide を参照下さい。 ヒント     最近の Debian に特化したネットワーク設定のガイドは The Debian Administrator's Handbook — Configuring the Network を参照下さい。 警告     伝統的なインターフェースの命名法 ("eth0", "eth1", "wlan0", …) を 使う代わりに、新しい systemd は "enp0s25" のような "予測可能なネ ットワークインターフェース名" を用います。 警告     本章は、2013年にリリースされた Debian 7.0 (Wheezy) に基づいている ため、内容が陳腐化しつつあります。 ヒント     本ドキュメントはネットワーク設定例にIPv4を用いて古い ifconfig(8) を使っていますが、Debian はwheezy リリースから IPv4+IPv6を用いて ip(8) を使うように移行中です。本ドキュメント更新のパッチは歓迎で す。 ヒント     systemd の下では、networkd がネットワーク管理に使えます。 systemd-networkd(8)y> を参照ください。 5.1. 基本的ネットワークインフラ     現代的な Debian システムの基本的ネットワークインフラをレビューし ます。 表5.1 GUI のネットワーク設定ツール +----------------------------------------------------------------+ | パッケージ |ポプコ|サイ | タイプ | 説明 | | | ン | ズ | | | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークを| | |V:568,| | |接続したり切断| |ifupdown |I:995 |204 |設定::ifupdown|したりする標準| | | | | |化されたツール| | | | | |(Debian 特定) | |---------------------+------+-----+--------------+--------------| | |V:4, | | |有線ネットワー| |ifplugd |I:18 |209 |, , |クを自動的に管| | | | | |理 | |---------------------+------+-----+--------------+--------------| | | | | |"ifupdown" パ | | |V:0, | | |ッケージを強化| |ifupdown-extra |I:1 |96 |, , |するネットワー| | | | | |クテストスクリ| | | | | |プト | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークイ| |ifmetric |V:0, |21 |, , |ンターフェース| | |I:1 | | |の経路メトリッ| | | | | |ク設定 | |---------------------+------+-----+--------------+--------------| | | | | |"/etc/network/| | | | | |interfaces" フ| | |V:0, | | |ァイル経由で | |guessnet |I:1 |402 |, , |"ifupdown" パ | | | | | |ッケージを補強| | | | | |する mapping | | | | | |スクリプト | |---------------------+------+-----+--------------+--------------| | | | | |"ifupdown" パ | |ifscheme |V:0, |58 |, , |ッケージを補強| | |I:0 | | |する mapping | | | | | |スクリプト | |---------------------+------+-----+--------------+--------------| | | | | |Zugschlus さん| | |V:0, | | |の ifupdown の| |ifupdown-scripts-zg2 |I:0 |147 |, , |手動方法のイン| | | | | |ターフェースス| | | | | |クリプト | |---------------------+------+-----+--------------+--------------| | | | | |NetworkManager| |network-manager |V:365,|10959|設定::NM |(デーモン): ネ| | |I:473 | | |ットワークを自| | | | | |動管理 | |---------------------+------+-----+--------------+--------------| | |V:243,| | |NetworkManager| |network-manager-gnome|I:418 |6132 |, , |(GNOME フロン | | | | | |トエンド) | |---------------------+------+-----+--------------+--------------| | | | | |有線と無線のネ| |wicd |I:35 |34 |設定::wicd |ットワークマネ| | | | | |ージャー (メタ| | | | | |パッケージ) | |---------------------+------+-----+--------------+--------------| | | | | |有線と無線のネ| | |V:0, | | |ットワークマネ| |wicd-cli |I:2 |58 |, , |ージャー (コマ| | | | | |ンドラインクラ| | | | | |イアント) | |---------------------+------+-----+--------------+--------------| | | | | |有線と無線のネ| | |V:1, | | |ットワークマネ| |wicd-curses |I:5 |174 |, , |ージャー | | | | | |(Curses クライ| | | | | |アント) | |---------------------+------+-----+--------------+--------------| | | | | |有線と無線のネ| |wicd-daemon |V:29, |951 |, , |ットワークマネ| | |I:40 | | |ージャー (デー| | | | | |モン) | |---------------------+------+-----+--------------+--------------| | | | | |有線と無線のネ| |wicd-gtk |V:24, |573 |, , |ットワークマネ| | |I:37 | | |ージャー (GTK+| | | | | |クライアント) | |---------------------+------+-----+--------------+--------------| | | | | |パケットフィル| |iptables |V:243,|1475 |設 |ターと NAT の | | |I:996 | |定::Netfilter |ための管理ツー| | | | | |ル (Netfilter)| |---------------------+------+-----+--------------+--------------| | | | | |iproute2、IPv6| | |V:144,| | |や他の上級ネッ| |iproute |I:550 |23 |設定::iproute2|トワーク設定: | | | | | |ip(8) や tc(8)| | | | | |等 | |---------------------+------+-----+--------------+--------------| | | | | |各種の静的クラ| | | | | |イテリアに基づ| | |V:1, | | |きネットワーク| |ifrename |I:2 |121 |, , |インターフェー| | | | | |スを改名しま | | | | | |す: ifrename | | | | | |(8) | |---------------------+------+-----+--------------+--------------| | |V:91, | | |Ethernet デバ | |ethtool |I:261 |331 |, , |イス設定の表示| | | | | |と変更 | |---------------------+------+-----+--------------+--------------| | | | | |ホスト名か IP | | | | | |アドレスによっ| | |V:268,| | |てリモートホス| |iputils-ping |I:997 |106 |test::iproute2|トのネットワー| | | | | |クからの到達性| | | | | |をテスト (旧来| | | | | |、GNU) | |---------------------+------+-----+--------------+--------------| | | | | |ARP アドレスに| | | | | |よって特定され| |iputils-arping |V:67, |57 |, , |るリモートホス| | |I:384 | | |トのネットワー| | | | | |クからの到達性| | | | | |をテスト | |---------------------+------+-----+--------------+--------------| | |V:17, | | |リモートホスト| |iputils-tracepath |I:288 |90 |, , |へのネットワー| | | | | |クパスを追跡 | |---------------------+------+-----+--------------+--------------| | | | | |NET-3 ネットワ| | | | | |ーキングツール| | |V:427,| |設 |キット | |net-tools |I:998 |883 |定::net-tools |(net-tools、 | | | | | |IPv4 ネットワ | | | | | |ーク設定): | | | | | |ifconfig(8) 等| |---------------------+------+-----+--------------+--------------| | | | | |ホスト名か IP | | | | | |アドレスによっ| | |V:0, | |テス |てリモートホス|     |inetutils-ping |I:1 |337 |ト::net-tools |トのネットワー| | | | | |クからの到達性| | | | | |をテスト (旧来| | | | | |、GNU) | |---------------------+------+-----+--------------+--------------| | | | | |ARP アドレスに| | | | | |よって特定され| | |V:2, | | |るリモートホス| |arping |I:28 |103 |, , |トのネットワー| | | | | |クからの到達性| | | | | |をテスト (旧 | | | | | |来) | |---------------------+------+-----+--------------+--------------| | | | | |リモートホスト| | |V:74, | | |へのネットワー| |traceroute |I:993 |154 |, , |クパス追跡する| | | | | |ツール (旧来、| | | | | |コンソール) | |---------------------+------+-----+--------------+--------------| |isc-dhcp-client |V:420,|651 |設定::低レベル|DHCP クライア | | |I:959 | | |ント | |---------------------+------+-----+--------------+--------------| | | | | |WPA と WPA2 | |wpasupplicant |V:279,|2531 |, , |(IEEE 802.11i)| | |I:547 | | |のためのクライ| | | | | |アントサポート| |---------------------+------+-----+--------------+--------------| | |V:0, | | |wpa_supplicant| |wpagui |I:4 |781 |, , |の Qt GUI クラ| | | | | |イアント | |---------------------+------+-----+--------------+--------------| | |V:81, | | |Linux のワイア| |wireless-tools |I:276 |265 |, , |レス拡張を操作| | | | | |するツール | |---------------------+------+-----+--------------+--------------| | |V:203,| | |chat による | |ppp |I:519 |927 |, , |PPP/PPPoE コネ| | | | | |クション | |---------------------+------+-----+--------------+--------------| | |V:0, | | |PPPoE コネクシ| |pppoeconf |I:12 |290 |設定::ヘルパー|ョンの設定ヘル| | | | | |パー | |---------------------+------+-----+--------------+--------------| | | | | |chat による | |pppconfig |V:1, |805 |, , |PPP コネクショ| | |I:4 | | |ンの設定ヘルパ| | | | | |ー | |---------------------+------+-----+--------------+--------------| | | | | |wvdial と ppp | |wvdial |V:0, |276 |, , |による PPP コ | | |I:8 | | |ネクションの設| | | | | |定ヘルパー | |---------------------+------+-----+--------------+--------------| | | | | |リモートホスト| | |V:7, | |テスト::低レベ|へのネットワー| |mtr-tiny |I:59 |105 |ル |クパスを追跡す| | | | | |るツール | | | | | |(curses) | |---------------------+------+-----+--------------+--------------| | | | | |リモートホスト| | | | | |へのネットワー| |mtr |V:6, |150 |, , |クパスを追跡す| | |I:41 | | |るツール | | | | | |(curses と | | | | | |GTK+) | |---------------------+------+-----+--------------+--------------| | | | | |共通のネットワ| |gnome-nettool |V:14, |2111 |, , |ーク情報操作の| | |I:285 | | |ためのツール | | | | | |(GNOME) | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークマ| | |V:47, | | |ッパー / ポー | |nmap |I:454 |22207|, , |トスキャナー | | | | | |(Nmap、コンソ | | | | | |ール) | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークマ| |zenmap |V:3, |2821 |, , |ッパー / ポー | | |I:12 | | |トスキャナー | | | | | |(GTK+) | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークト| | |V:22, | | |ラフィックアナ| |tcpdump |I:198 |1120 |, , |ライザー | | | | | |(Tcpdump、コン| | | | | |ソール) | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークト| | |V:6, | | |ラフィックアナ| |wireshark |I:65 |72 |, , |ライザー | | | | | |(Wireshark、 | | | | | |GTK+) | |---------------------+------+-----+--------------+--------------| | | | | |ネットワークト| |tshark |V:3, |363 |, , |ラフィックアナ| | |I:37 | | |ライザー (コン| | | | | |ソール) | |---------------------+------+-----+--------------+--------------| | | | | |ホストとサービ| | | | | |スとネットワー| |nagios3 |I:8 |9 |, , |クを監視や管理| | | | | |するシステム | | | | | |(Nagios) | |---------------------+------+-----+--------------+--------------| | |V:0, | | |tcpdump の出力| |tcptrace |I:1 |389 |, , |から接続状況の| | | | | |まとめを作成 | |---------------------+------+-----+--------------+--------------| | |V:1, | | |柔軟なネットワ| |snort |I:1 |1920 |, , |ーク侵入検知シ| | | | | |ステム (Snort)| |---------------------+------+-----+--------------+--------------| | | | | |ネットワークの| |ntopng |V:0, |578 |, , |使用状況をウェ| | |I:1 | | |ッブブラウザー| | | | | |で表示 | |---------------------+------+-----+--------------+--------------| | | | | |BIND によって | | | | | |提供されるネッ| | |V:82, | | |トワーククライ| |dnsutils |I:903 |462 |, , |アント: | | | | | |nslookup(8) と| | | | | |nsupdate(8) と| | | | | |dig(8) | |---------------------+------+-----+--------------+--------------| | | | | |ネームサーバー| |dlint |V:1, |96 |, , |の閲覧で DNS | | |I:23 | | |のゾーン情報を| | | | | |チェック | |---------------------+------+-----+--------------+--------------| | |V:0, | | |DNS サーバーを| |dnstracer |I:2 |81 |, , |その源流まで追| | | | | |跡 | +----------------------------------------------------------------+ 5.1.1. ホスト名の解決 ホスト名の解決もまた、現在 NSS (ネームサービススイッチ、Name     Service Switch) メカニズムによってサポートされています。この解決 の流れは次です。 1. "hosts: files dns" のようなスタンザのある "/etc/ nsswitch.conf" ファイルがホスト名の解消の順序を規定します。 (これは、"/etc/host.conf" ファイル中の "order" スタンザの機能 を置換します。) 2. files メソッドが最初に発動されます。ホスト名が "/etc/hosts"     ファイルに見つかると、それに対応する全ての有効アドレスを返し 終了します。("/etc/host.conf" ファイルは "multi on" を含みま す。) 3. dns メソッドが発動されます。"/etc/resolv.conf" ファイルで識別 されるインターネットドメイン名システム (DNS) への問い合わせで ホスト名が見つかれば、それに関する全ての有効アドレスを返しま す。     例えば、"/etc/hosts" は以下の内容です。 127.0.0.1 localhost 127.0.1.1 # The following lines are desirable for IPv6 capable hosts     ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts     各行は IP アドレスで始まり、関連するホスト名がそれに続きます。 本例の2行目の IP アドレス 127.0.1.1 は他の Unix 系システムでは見 かけないかもしれません。bug #719621 に記録されているように、     Debian インストーラーは恒久的 IP アドレスのないシステムのために一 部ソフトウエアー (GNOME等) のための回避策としてこの項目を作成しま す。     は、"/etc/hostname" の中に定義されたホスト名と一致し ます。     恒久的 IP アドレスを持つシステムでは 127.0.1.1 の代えてその恒久的 IP アドレスがここにあるべきです。 恒久的 IP アドレスと Domain 名システム (DNS)が提供する完全修飾ド     メイン名 (FQDN) を持つシステムでは、その標準的な . のみに 代えて使われるべきです。 resolvconf パッケージがインストールされなかったら、"/etc/ resolv.conf" は静的なファイルです。インストールされると、それはシ     ンボリックリンクになります。いずれにせよ、解決機構を初期化する情 報を含んでいます。もし DNS が IP="192.168.11.1" に見つかるなら、 それは次の内容です。     nameserver 192.168.11.1     resolvconf パッケージはこの "/etc/resolv.conf" をシンボリックリン クにし、フックスクリプトで自動的にその内容を管理します。 典型的 adhoc な LAN 環境にある PC ワークステーションの場合、基本     的な files や dns 法に加えて Multicast DNS (mDNS, Zeroconf) 経由 でホスト名を解決する事ができます。 * Avahi は Debian で Multicast DNS サービスの探索の枠組みを提供 します。 * Apple Bonjour / Apple Rendezvous と同等です。 * libnss-mdns プラグインパッケージが GNU C ライブラリー (glibc) の GNU Name Service Switch (NSS) 機能に mDNS 経由のホスト名解 決を提供します。     * "/etc/nsswitch.conf" ファイルには "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4" のようなスタンザがあるべきです。 * ホスト名が ".local" で終わる擬似-top-level domain (TLD) が解 決されます。 * mDNS の IPv4 リンク-ローカルのマルチキャストアドレス "224.0.0.251" とか IPv6 でそれに相当する "FF02::FB" が ".local" で終わる名前の DNS クエリーに用いられます。 非推奨である NETBios over TCP/IP を使うホスト名解決は、winbind パ ッケージをインストールすると提供できます。このような機能を有効に     するには、"/etc/nsswitch.conf" ファイル中に "hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins" のようなスタンザ が必要です。(最近の Windows システムは通常 dns メソッドをホスト名 の解決に使います。) 注記     ドメイン名システムにおけるジェネリックトップレベルドメイン (gTLD) の拡張が進行中です。LAN内のみで使うドメイン名を選ぶ際に名前衝突に 注意が必要です。 5.1.2. ネットワークインターフェース名 Linux カーネル中の各ハードウエアーは、それが見つかり次第ユーザー 空間の設定メカニズム udev (「udev システム」参照下さい) を通じて     、例えば eth0 のようなネットワークインターフェース名が付与されま す。ネットワークインターフェース名は、ifup(8) と interfaces(5) の 中で物理インターフェースと呼ばれています。 MAC アドレス等を使って各リブート毎に永続性をもって各ネットワーク インターフェースが名付けられるようにするルールファイル "/etc/udev     /rules.d/70-persistent-net.rules" があります。このファイルは "persistent-net-generator.rules" ルールファイルによって実行されて いるような "/lib/udev/write_net_rules" プログラムによって自動生成 されます。そのファイルを変更することで命名ルールを変更できます。 注意 "/etc/udev/rules.d/70-persistent-net.rules" ルールファイルを編集     する時は、各ルールを1行に納めて MAC アドレスに小文字を使わなけれ ばいけません。例えば、あなたがこのファイル中に "FireWire device" と "PCI device" を見つけたら、きっと "PCI device" をeth0 として第 1番目のネットワークインターフェースとして設定したいでしょう。 5.1.3. LAN のためのネットワークアドレス範囲 rfc1918 によってローカルエリアネットワーク (LAN) での使用に予約さ     れている各クラス毎の IPv4 32ビットアドレス範囲を確認します。これ らのアドレスは本来のインターネット上のアドレスとかち合う事が無い ことが保証されています。 表5.2 ネットワークアドレス範囲のリスト +---------------------------------------------------------------+ |クラ|ネットワークアドレ|ネットマスク |ネットマスク /|サブネット| | ス | ス | | ビット | の数 | |----+------------------+-------------+--------------+----------| |A |10.x.x.x |255.0.0.0 |/8 |1 |     |----+------------------+-------------+--------------+----------| |B |172.16.x.x — |255.255.0.0 |/16 |16 | | |172.31.x.x | | | | |----+------------------+-------------+--------------+----------| |C |192.168.0.x — |255.255.255.0|/24 |256 | | |192.168.255.x | | | | +---------------------------------------------------------------+ 注記 これらのアドレス内の1つがホストに付与されている場合、そのホストは     インターネットに直接アクセスせず、各サービスのプロキシとなるかネ ットワークアドレス変換 (NAT) をするゲートウエーを通してアクセスし なければいけません。ブロードバンドルーターは消費者 LAN 環境のため に通常 NAT を行います。 5.1.4. ネットワークデバイスサポート Debian システムによってほとんどのハードウエアーデバイスはサポート     されていますが、一部のネットワークデバイスはそのサポートのために DFSG non-free のファームウエアーが必要です。「ハードウエアードラ イバーとファームウエアー」を参照下さい。 5.2. デスクトップのためのモダンネットワーク設定 Debian の squeeze 以降のシステム上では、NetworkManager (NM)     (network-manager と関連パッケージ) や Wicd (wicd と関連パッケー ジ) 等の管理デーモン経由でネットワーク接続の管理ができます。 * それらには洒落た GUI やコマンドラインのユーザーインターフェー スとともに提供されます。 * それらのバックエンドシステムとして、自前のデーモンとともに提 供されます。     * それらによりあなたのシステムをインターネットへ容易に接続でき ます。 * それらによりインターネットへの有線や無線のネットワークの管理 が容易にできます。 * それらにより旧来の "ifupdown" パッケージと独立にネットワーク を設定できます。 注記     サーバーにはこの様な自動ネットワーク設定を使わないで下さい。これ らはラップトップ上のモービルデスクトップを主対象としています。 これらの現代的なネットワーク設定ツールは旧来の "ifupdown" パッケ     ージやその "/etc/network/interfaces" 設定ファイルとの競合を避ける ように適正に設定する必要があります。 ヒント     上記とは異なり、systemd の下では、ネットワークは /etc/systemd/ network/ を使って設定されているかもしれません。systemd-resolved (8) や resolved.conf(5) や systemd-networkd(8) を参照ください。 注記     これらの自動ネットワーク設定ツール機能の一部は、リグレッションに あっているかもしれません。これらは旧来の ifupdown パッケージほど は堅牢ではありません。最新の問題や制約条件に関しては network-manager の BTS や wicd の BTS を参照下さい。 5.2.1. GUI のネットワーク設定ツール Debian 上での NM や Wicd に関する正式のドキュメンテーションは、"/     usr/share/doc/network-manager/README.Debian" や "/usr/share/doc/ wicd/README.Debian" によりそれぞれ提供されます。     デスクトップのための現代的ネットワーク設定の要点は以下です。 1. 次のようにして、例えば foo というデスクトップユーザーを "netdev" グループに属するようにします。(GNOME や KDE のような 現代的デスクトップ環境の下では D-bus 経由でそれを自動的にする のも一つの方法です。) $ sudo adduser foo netdev 2. "/etc/network/interfaces" の設定を次のようにできるだけ簡単に します。     auto lo iface lo inet loopback 3. 次のようにして NM や Wicd を再起動します。 $ sudo /etc/init.d/network-manager restart $ sudo /etc/init.d/wicd restart 4. GUI 経由でネットワークを設定します。 注記     ifupdown との干渉を避けるために、"/etc/network/interfaces" にリス トされてないインターフェースのみが NM もしくは Wicd によって管理 されます。 ヒント NM のネットワーク設定能力を拡張したい場合には、     network-manager-openconnect や network-manager-openvpn-gnome や network-manager-pptp-gnome や mobile-broadband-provider-info や gnome-bluetooth 等の適正なプラグインモジュールや補足パッケージを 探してください。Wicd の場合もまったく同様の方法で対処します。 注意 こういった自動ネットワーク設定は、「ifupdown を使った基本的なネッ     トワーク設定 (旧来)」や「ifupdown を使う上級ネットワーク設定 (旧 来)」のような "/etc/network/interfaces" への凝った旧来の ifupdown 設定と互換性がないかも知れません。最新の問題や制約条件に関しては network-manager の BTS や wicd の BTS を参照下さい。 5.3. 旧来のネットワーク接続や設定 「デスクトップのためのモダンネットワーク設定」に記載された手法で     はあなたの目的にとって不十分な場合には、多くの簡単なツールを組み 合わせる旧来のネットワーク接続や設定を使うべきです。     旧来のネットワーク接続は手法毎に特定です (「ネットワーク接続方法 (旧来)」参照下さい)。     Linux の低レベルネットワーク設定には2タイプのプログラムがあります (「Iproute2 コマンド」参照下さい)。 * 旧式の net-tools プログラム (ifconfig(8)、…) は Linux NET-3 ネットワークシステム由来です。これらの多くはすでに型遅れです     。 * 新規の Linux iproute2 プログラム (ip(8)、…) は現行の Linux の ネットワークシステムです。 これらの低レベルのネットワークプログラムは強力ですが、使うのが面     倒です。そこで高レベルのネットワーク設定プログラムが作られました 。 ifupdown パッケージは Debian 上のそのような高レベルネットワーク設     定のデファクトスタンダードです。それを使うと、"ifup eth0" とする だけでネットワークを立ち上げることができます。その設定ファイルは 、"/etc/network/interfaces" ファイルで、その典型的内容は次です。 auto lo iface lo inet loopback     auto eth0 iface eth0 inet dhcp resolvconf パッケージは、ネットワークアドレス解決設定ファイル "/ etc/resolv.conf" の書き変えを自動化してネットワークアドレス解決の     円滑な再構成をサポートするために ifupdown システムを補完するため に作られました。現在、ほとんどの Debian のネットワーク設定パッケ ージは resolvconf パッケージを使うように変更されています ("/usr/ share/doc/resolvconf/README.Debian"参照下さい)。 ifplugd や guessnet や ifscheme 等の ifupdown パッケージの補助ス クリプトが有線 LAN 上の可動 PC のためのネットワーク環境設定のよう     なネットワーク環境の動的設定を自動化するために作られました。これ らはちょっと使い難いですが、既存の ifupdown システムとは反りが合 います。 詳細に例示とともに説明します (「ifupdown を使った基本的なネットワ     ーク設定 (旧来)」と「ifupdown を使う上級ネットワーク設定 (旧来)」 参照下さい)。 5.4. ネットワーク接続方法 (旧来) 注意 本セクションで説明されている接続テスト方法はあくまでテスト目的の     ためのものです。毎日のネットワーク接続のために使うためではありま せん NM か Wicd か ifupdown パッケージを通して使うことをお勧めし ます (「デスクトップのためのモダンネットワーク設定」と「ifupdown を使った基本的なネットワーク設定 (旧来)」参照下さい)。     典型的なネットワーク接続方法と PC までの接続経路は次のようにまと められます。 表5.3 典型的なネットワーク接続方法と接続経路のリスト +---------------------------------------------------------------+ | PC |接続方法| 接続経路 | |--------------+--------+---------------------------------------| |シリアルポート|PPP |⇔ モデム ⇔ POTS ⇔ ダイヤルアップアクセ | |(ppp0) | |スポイント ⇔ ISP |     |--------------+--------+---------------------------------------| |イーサーネット|PPPoE/ |⇔ BB モデム ⇔ BB サービス ⇔ BB アクセス| |ポート (eth0) |DHCP/静 |ポイント ⇔ ISP | | |的 | | |--------------+--------+---------------------------------------| |イーサーネット|DHCP/静 |⇔ LAN ⇔ ネットワークアドレス変換 (NAT) | |ポート (eth0) |的 |機能のある BB ルーター (⇔ BB モデム …) | +---------------------------------------------------------------+     各接続方法のための設定スクリプトのまとめて次に記します。 表5.4 ネットワーク接続設定のリスト +---------------------------------------------------------------+ |接続方法| 設定 |バックエンドパッケージ | |--------+------------------------------+-----------------------| |PPP |pppconfig 決定論的 chat の作成|pppconfig と ppp | |--------+------------------------------+-----------------------| |PPP (代 |wvdialconf はヒューリスティッ |ppp と wvdial | |替) |クのある chat の作成 | | |--------+------------------------------+-----------------------|     |PPPoE |pppoeconf 決定論的 chat の作成|pppoeconf と ppp | |--------+------------------------------+-----------------------| |DHCP |"/etc/dhcp/dhclient.conf" 中に|isc-dhcp-client | | |記述されています | | |--------+------------------------------+-----------------------| |静的 IP |"/etc/network/interfaces" 中に|iproute もしくくは | |(IPv4) |記述されています |net-tools (型遅れ) | |--------+------------------------------+-----------------------| |静的 IP |"/etc/network/interfaces" 中に|iproute | |(IPv6) |記述されています | | +---------------------------------------------------------------+     ネットワーク接続の省略語は次の意味です。 表5.5 ネットワーク接続の省略語のリスト +---------------------------------------------------------------+ |省略語 | 意味 | |-------+-------------------------------------------------------| |POTS |旧来型電話サービス | |-------+-------------------------------------------------------| |BB |ブロードバンド | |-------+-------------------------------------------------------| |BB サー|例: デジタルサブスクラーバーライン (DSL) やケーブルテレ| |ビス |ビや家庭向け光ファイバー (FTTP) | |-------+-------------------------------------------------------| |BB モデ|例: DSL モデムやケーブルモデムや光ファイバー端末 (ONT) |     |ム | | |-------+-------------------------------------------------------| |LAN |ローカルエリアネットワーク | |-------+-------------------------------------------------------| |WAN |広域ネットワーク | |-------+-------------------------------------------------------| |DHCP |動的ホスト設定プロトコル | |-------+-------------------------------------------------------| |PPP |ポイント間接続プロトコル | |-------+-------------------------------------------------------| |PPPoE |Ethernet 経由のポイント間接続プロトコル | |-------+-------------------------------------------------------| |ISP |インターネットサービス供給者 | +---------------------------------------------------------------+ 注記     ケーブル TV 経由の WAN 接続サービスは大体 DHCP か PPPoE でサービ スを受けます。ADSL と FTTP の接続サービスは大体 PPPoE でサービス を受けます。WAN 接続の正確な設定要件はあなたの ISP にご確認下さい 。 注記 BB ルータが家庭内 LAN 環境を作るのに使われる時には、LAN 上の PC     はネットワークアドレス変換 (NAT) をして BB ルーター経由で WAN に 接続されます。そのような場合、LAN 上の PC のネットワークインター フェースは静的 IP か BB ルーターからの DHCP でサービスを受けます 。BB ルーターはあなたの ISP による指示にしたがって WAN に接続され るよう設定しなければいけません。 5.4.1. イーサーネットを使っての DHCP 接続 典型的な現代的な家庭内や小規模ビジネスネットワークの LAN は WAN (インターネット) に何らかの消費者向けブロードバンドルーターを使っ     て接続されています。このルーターの後ろの LAN は通常ルーター上で稼 働する動的ホスト設定プロトコル (DHCP) サーバーによりサービスを受 けています。     動的ホスト設定プロトコル (DHCP) サービスを受けるイーサーネットで は、isc-dhcp-client パッケージをインストールするだけです。     dhclient.conf(5) を参照下さい。 5.4.2. イーサーネットを使っての静的 IP 接続     静的 IP サービスを受けるイーサーネットでは、特段何をする必要もあ りません。 5.4.3. pppconfig を使っての PPP 接続     設定スクリプト pppconfig はPPP 接続を次の選択をすることで対話式で 設定します。 * 電話番号 * ISP でのユーザー名 * ISP のパスワード     * ポートの速度 * モデム通信のポート * 認証方法 表5.6 pppconfig を使っての PPP 接続のための設定ファイルのリスト +---------------------------------------------------------------+ | ファイル | 機能 | |-----------------+---------------------------------------------| |/etc/ppp/peers/ |pppconfig によって生成された に特 | | |定な pppd のための設定ファイル | |-----------------+---------------------------------------------| |/etc/chatscripts/|pppconfig によって生成された に特 |     | |定な chat のための設定ファイル | |-----------------+---------------------------------------------| |/etc/ppp/options |pppd のための一般的な実行パラメーター | |-----------------+---------------------------------------------| |/etc/ppp/ |PAP のための認証データー (安全上問題あり) | |pap-secret | | |-----------------+---------------------------------------------| |/etc/ppp/ |CHAP のための認証データー (比較的安全) | |chap-secret | | +---------------------------------------------------------------+ 注意     もし pon と poff コマンドが引数無しに起動された場合には、" " の値として "provider" が使われます。     低レベルのネットワーク設定ツールを使って次に記すように設定の確認 ができます。 $ sudo pon     ... $ sudo poff     "/usr/share/doc/ppp/README.Debian.gz" を参照下さい。 5.4.4. wvdialconf を使った代替 PPP 接続 pppd(8) を使う異なるアプローチは、wvdial パッケージが提供する     wvdial(1) からそれを実行することです。電話を掛け接続の交渉をする ために pppd がchat(8) を実行するのではなく、wvdial が電話を掛け接 続の交渉をした後に pppd を始動し後を任せます。     設定スクリプト wvdialconf は PPP 接続を次の選択をすることで対話式 で設定します。 * 電話番号     * ISP でのユーザー名 * ISP のパスワード     ほとんどの場合 wvdial は接続をすることに成功し、自動的に認証デー ターのリストを管理します。 表5.7 wvdialconf で PPP 接続する際の設定ファイルリスト +---------------------------------------------------------------+ | ファイル | 機能 | |----------------+----------------------------------------------| |/etc/ppp/peers/ |wvdialconf がwvdial に合わせて生成した pppd の| |wvdial |設定ファイル | |----------------+----------------------------------------------| |/etc/wvdial.conf|wvdialconf が生成した設定ファイル |     |----------------+----------------------------------------------| |/etc/ppp/options|pppd のための一般的な実行パラメーター | |----------------+----------------------------------------------| |/etc/ppp/ |PAP のための認証データー (安全上問題あり) | |pap-secret | | |----------------+----------------------------------------------| |/etc/ppp/ |CHAP のための認証データー (比較的安全) | |chap-secret | | +---------------------------------------------------------------+     低レベルのネットワーク設定ツールを使って次に記すように設定の確認 ができます。 $ sudo wvdial     ... $ sudo killall wvdial     wvdial(1) と wvdial.conf(5) を参照下さい。 5.4.5. pppoeconf を使った PPPoE 接続 あなたの ISP が PPPoE 接続を提供し、あなたの PC を直接 WAN に接続     すると決めた際には、あなたの PC のネットワークは PPPoE で設定しな いといけません。PPPoE とはイーサーネット経由の PPP の意味です。設 定スクリプト pppoeconf は PPPoE 接続を対話式で設定します。     設定ファイルは以下。 表5.8 pppoeconf を用いて PPPoE 接続する際の設定ファイルのリスト +---------------------------------------------------------------+ | ファイル | 機能 | |--------------------+------------------------------------------| |/etc/ppp/peers/ |pppoeconf がpppoe に合わせて生成した pppd | |dsl-provider |の設定ファイル |     |--------------------+------------------------------------------| |/etc/ppp/options |pppd のための一般的な実行パラメーター | |--------------------+------------------------------------------| |/etc/ppp/pap-secret |PAP のための認証データー (安全上問題あり) | |--------------------+------------------------------------------| |/etc/ppp/chap-secret|CHAP のための認証データー (比較的安全) | +---------------------------------------------------------------+     低レベルのネットワーク設定ツールを使って次に記すように設定の確認 ができます。 $ sudo /sbin/ifconfig eth0 up $ sudo pon dsl-provider     ... $ sudo poff dsl-provider $ sudo /sbin/ifconfig eth0 down     "/usr/share/doc/pppoeconf/README.Debian" を参照下さい。 5.5. ifupdown を使った基本的なネットワーク設定 (旧来) Debian システム上の伝統的な TCP/IP ネットワークのセットアップは     ifupdown パッケージをより高レベルのツールとして使います。2つの場 合があります。 * 可動 PC のような動的 IP システムの場合、TCP/IP ネットワークを resolvconf パッケージを使い設定し、容易にネットワーク設定を切 り替えられるようにしましょう (「DHCP サービスを受けるネットワ ークインターフェース」参照下さい)。     * サーバーのような静的 IP システムの場合、TCP/IP ネットワークを resolvconf パッケージを使うことなく設定し、システムを単純にし ましょう (「静的 IP を使うネットワークインターフェース」参照 下さい)。     このような伝統的設定方法は上級設定をしたい際に非常に有用です。以 下を参照下さい。 ifupdown パッケージは Debian システムでの高レベルネットワーク設定     の標準化された枠組みを提供します。このセクションでは、簡略化され た紹介と多くの典型例で ifupdown を使った基本的なネットワーク設定 を学びます。 5.5.1. 簡略化されたコマンドシンタックス ifupdown パッケージには2つのコマンドがあります: ifup(8) と ifdown     (8)。設定ファイル "/etc/network/interfaces" により規定される高レ ベルのネットワーク設定を提供します。 表5.9 ifupdown を使う基本的なネットワーク設定コマンドのリスト +---------------------------------------------------------------+ |コマン| アクション | | ド | | |------+--------------------------------------------------------|     |ifup |"iface eth0" スタンザがあれば、ネットワークインターフェ | |eth0 |ース eth0 をネットワーク設定 eth0 で起動 | |------+--------------------------------------------------------| |ifdown|"iface eth0" スタンザがあれば、ネットワークインターフェ | |eth0 |ース eth0 に関するネットワーク設定 eth0 を終了し停止 | +---------------------------------------------------------------+ 警告     up 状態にあるインターフェースを、ifconfig(8) や ip(8) コマンドの ような低レベル設定ツールを使って設定してはいけません。 注記     ifupdown というコマンドはありません。 5.5.2. "/etc/network/interfaces" の基本的なシンタックス     "/etc/network/interfaces" のシンタックスは interfaces(5) に説明さ れていて、要点を次に記します。 表5.10 "/etc/network/interfaces" のスタンザのリスト +---------------------------------------------------------------+ | スタンザ | 意味 | |---------------------+-----------------------------------------| |"auto |システム起動時にインターフェース | |" | を起動 | |---------------------+-----------------------------------------| |"allow-auto |, , | |" | | |---------------------+-----------------------------------------| |"allow-hotplug |カーネルがインターフェースからのホットプ | |" |ラグイベントを認知した際にインターフェー | | |ス を起動 |     |---------------------+-----------------------------------------| |"iface |ネットワーク設定 を規定 | |…" によって始まる行 | | |---------------------+-----------------------------------------| |"mapping | に対応する | ||の mapping 値を規定 | |" によって始まる行 | | |---------------------+-----------------------------------------| |ハッシュ "#" で始まる|コメントして無視 (行末コメントは非サポー | |行 |ト) | |---------------------+-----------------------------------------| |バックスラシュ "\" で|設定を次行に継続 | |終わる行 | | +---------------------------------------------------------------+     iface スタンザで始まる行は次のシンタクスです。 iface     ... 基本設定に関しては、mapping スタンザは使われませんし、ネットワー     クインターフェース名をネットワーク設定名として使います (「mapping スタンザ」参照下さい)。 警告     "/etc/network/interfaces" のネットワークインターフェースに関する "iface" スタンザの重複定義をしてはいけません。 5.5.3. ループバックネットワークインターフェース "/etc/network/interfaces" ファイルに次の設定をすることでシステム     ブート時にループバックネットワークインターフェース lo が起動され ます (auto スタンザ経由)。     auto lo iface lo inet loopback     この設定は、"/etc/network/interfaces" ファイル中にいつも存在しま す。 5.5.4. DHCP サービスを受けるネットワークインターフェース 「イーサーネットを使っての DHCP 接続」によりシステムの準備をした     後、DHCP によってサービスされるネットワークインターフェースは "/ etc/network/interfaces" ファイルの中に次のような設定エントリーを 設定します。     allow-hotplug eth0 iface eth0 inet dhcp Linux カーネルが物理インターフェース eth0 を認識した場合、     allow-hotplug スタンザは ifup によりそのインターフェースが起動さ せられるようにし、iface スタンザが ifup がインターフェースが DHCP を使うように設定します。 5.5.5. 静的 IP を使うネットワークインターフェース 静的 IP によってサービスされるネットワークインターフェースは "/     etc/network/interfaces" ファイル中に例えば次の設定エントリーを作 ることで設定されます。 allow-hotplug eth0 iface eth0 inet static address 192.168.11.100     netmask 255.255.255.0 gateway 192.168.11.1 dns-domain example.com dns-nameservers 192.168.11.1 Linux カーネルが物理インターフェース eth0 を認識した場合、     allow-hotplug スタンザは ifup によりそのインターフェースが起動さ せられるようにし、iface スタンザが ifup がインターフェースが静的 IP を使うように設定します。     ここでは次を仮定しています。 * LAN ネットワークの IP アドレス範囲: 192.168.11.0 - 192.168.11.255 * ゲートウエーの IP アドレス: 192.168.11.1     * PC の IP アドレス: 192.168.11.100 * resolvconf パッケージ: インストール済み * ドメイン名: "example.com" * DNS サーバーの IP アドレス: 192.168.11.1     resolvconf パッケージがインストールされていないと、DNS 関係の設定 は手動で "/etc/resolv.conf" を次のように編集する必要があります。     nameserver 192.168.11.1 domain example.com 注意     上記例で用いた IP アドレスはそのままコピーされるべきものではあり ません。IP 番号はあなたの実際のネットワーク設定に合わせなければい けません。 5.5.6. ワイアレス LAN インターフェースの基本 ワイアレス LAN (省略すると WLAN) は IEEE 802.11 という標準群に基     づく特別な免許なく使える無線を使う帯域拡散通信を経由の高速ワイア レス接続を提供します。 WLAN インターフェースは通常の Ethernet インターフェースと非常に似 ていますが、始動時にネットワーク ID と暗号キーデーターを必要とし     ます。インターフェース名が使われるカーネルドライバーによって eth1 や wlan0 や ath0 や wifi0 等とインターフェース名が少々異なる以外 は、それらに使われる高レベルのネットワークツールは Ethernet イン ターフェースのものとまったく同じです。 ヒント     wmaster0 デバイスは、新規の Linux の mac80211 API による SoftMAC によってのみ使われる内部デバイスのマスターデバイスです。     WLAN に関して留意すべきキーワードは次です。 表5.11 WLAN の略語のリスト +---------------------------------------------------------------+ |省略語| 元の言葉 | 意味 | |------+----------------+---------------------------------------| | | |802.11 以前の WaveLAN ネットワークによ | |NWID |ネットワーク ID |って使われる16ビットネットワークID (非 | | | |常に非推奨) | |------+----------------+---------------------------------------| |(E) |(拡張) サービス |802.11 ワイアレス LAN が統合されて連結 | |SSID |セットアイデンテ|されてできるワイアレスアクセスポイント | | |ィファイアー |(APs) のネットワーク名、ドメイン ID |     |------+----------------+---------------------------------------| |WEP, |有線等価プライバ|第1世代の、40ビットのキーを使う64ビット| |(WEP2)|シー |(128ビット) のワイアレス暗号化標準 (非 | | | |推奨) | |------+----------------+---------------------------------------| | |Wi-Fi 保護アクセ|第2世代の、WEP との互換性のあるワイアレ| |WPA |ス (Protected |ス暗号化標準 (802.11i の殆ど) | | |Access) | | |------+----------------+---------------------------------------| | |Wi-Fi 保護アクセ|第3世代の、WEP との互換性のないワイアレ| |WPA2 |ス 2 (Protected |ス暗号化標準 (完全に 802.11i) | | |Access 2) | | +---------------------------------------------------------------+     実際のプロトコルの選択肢は採用しているワイアレスルーターによって 普通制約されます。 5.5.7. WPA/WPA2を使うワイアレスLANインターフェース     新規のWPA/WPA2を使うWLANをサポートするには、wpasupplicantパッケー ジをインストールする必要があります。     WLAN 接続上の DHCP によってサービスされている IP の場合には、"/ etc/network/interfaces" ファイルのエントリーは次のようです。 allow-hotplug ath0 iface ath0 inet dhcp     wpa-ssid homezone # hexadecimal psk is encoded from a plaintext passphrase wpa-psk 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f     "/usr/share/doc/wpasupplicant/README.modes.gz" を参照下さい。 5.5.8. WEP を使うワイアレス LAN インターフェース 旧式の WEP を使う WLAN をサポートするには、wireless-tools パッケ     ージをインストールする必要があります。(あなたの消費者用のルーター は今だにセキュアーでないインフラを使っているかもしれませんが、無 いよりはましです。) 注意     WEP を使う WLAN 上のネットワークトラフィックは他人に覗かれている かも知れないことを覚えておいて下さい。     WLAN 接続上の DHCP によってサービスされている IP の場合には、"/ etc/network/interfaces" ファイルのエントリーは次のようです。 allow-hotplug eth0 iface eth0 inet dhcp wireless-essid Home     wireless-key1 0123-4567-89ab-cdef wireless-key2 12345678 wireless-key3 s:password wireless-defaultkey 2 wireless-keymode open     "/usr/share/doc/wireless-tools/README.Debian" を参照下さい。 5.5.9. PPP 接続 以前説明したように PPP 接続を設定する必要があります (「pppconfig     を使っての PPP 接続」参照下さい)。さらに、第1番目の PPP デバイス ppp0 のための "/etc/network/interfaces" ファイルのエントリーを次 のように追加します。     iface ppp0 inet ppp provider 5.5.10. 代替の PPP 接続 以前説明したように wvdial を使う代替 PPP 接続をまず設定する必要が     あります (「wvdialconf を使った代替 PPP 接続」参照下さい)。さらに 、第1番目の PPP デバイス ppp0 のための "/etc/network/interfaces" ファイルのエントリーを次のように追加します。     iface ppp0 inet wvdial 5.5.11. PPPoE 接続 PPPoE によってサービスされる直接 WAN に接続した PC の場合、以前説 明したように PPPoE 接続を設定する必要があります (「pppoeconf を使     った PPPoE 接続」参照下さい)。さらに、第1番目の PPPoE デバイス eth0 のための "/etc/network/interfaces" ファイルのエントリーを次 のように追加します。 allow-hotplug eth0 iface eth0 inet manual pre-up /sbin/ifconfig eth0 up up ifup ppp0=dsl     down ifdown ppp0=dsl post-down /sbin/ifconfig eth0 down # The following is used internally only iface dsl inet ppp provider dsl-provider 5.5.12. ifupdown のネットワーク設定状態 "/etc/network/run/ifstate" ファイルは、ifupdown パッケージが管理 する全ての有効なネットワークインターフェースの意図したネットワー     ク設定状態を記録します。残念ながら ifupdown が意図したにもかかわ らずインターフェースを起動できなかった場合でも、"/etc/network/run /ifstate" ファイルはインターフェースが起動されたと表示します。 あるインターフェースに関する ifconfig(8) コマンド出力が次の例のよ     うな行を欠いている場合、IPV4 ネットワークの一部としては使えません 。     inet addr:192.168.11.2 Bcast:192.168.11.255 Mask:255.255.255.0 注記     PPPoE に接続されているイーサーネットデバイスの場合、ifconfig(8) コマンドのアウトプットは上記例のような行を欠いています。 5.5.13. 基本ネットワーク設定 例えば eth0 というインターフェースを再設定したい際には、まず " sudo ifdown eth0" コマンドを実行してそれを無効にしなければいけま せん。こうすることで eth0 のエントリーが "/etc/network/run/     ifstate" ファイルから削除されます。(もし eth0 が有効でなかったり それにたいして過去に間違った設定がされている際には、こうするとエ ラーメッセージを発することになるかもしれません。シンプルな単一ユ ーザーのワークステーションではいつも問題なことは知る限り起こらな いようです。) こうすることで、必要に応じてネットワークインターフェース eth0 を     自由に再設定するために "/etc/network/interfaces" の内容を自由に書 き換えられます。     こうした後で、eth0 を"sudo ifup eth0" コマンドを使って再起動でき ます。 ヒント     ネットワークインターフェースは、"sudo ifdown eth0;sudo ifup eth0" とすることで (再)初期化できます。 5.5.14. ifupdown-extra パッケージ     ifupdown-extra パッケージは、ifupdown とともに使う使いやすいネッ トワーク接続テストを提供します。 * network-test(1) コマンドはシェルから実行できます。     * 自動スクリプトは各 ifup コマンド実行毎に実行されます。     network-test コマンドをつかうことで面倒な低レベルコマンドを使って ネットワーク問題を分析する手間を省けます。     自動スクリプトは "/etc/network/*/" にインストールされ、次の機能が あります。 * ネットワークケーブルの接続の確認 * IP アドレスの重複使用の確認     * "/etc/network/routes" の定義に従った静的ルートの設定 * ネットワークのゲートウエーが到達可能かの確認 * 結果を "/var/log/syslog" ファイルに記録     この syslog 記録はリモートシステムのネットワーク問題を管理する上 で非常に有用です。 ヒント     ifupdown-extra パッケージの自動的な挙動は "/etc/default/ network-test" によって設定可能です。これらの自動テストの一部は ARP からの返答を聞くのでシステムのブートプロセスを少々遅らせます 。 5.6. ifupdown を使う上級ネットワーク設定 (旧来)     ifupdown パッケージの機能は、上級知識を使うと「ifupdown を使った 基本的なネットワーク設定 (旧来)」に書かれているよりも向上します。 ここに記述されている機能は全く任意のものです。著者自身、怠け者で     面倒な事が嫌いなために、ここに書かれたことを使うことは滅多にあり ません。 注意     「ifupdown を使った基本的なネットワーク設定 (旧来)」に書かれた情 報でネットワーク接続をうまく設定できないのに、次の情報を使うと状 況は更に悪くなります。 5.6.1. ifplugd パッケージ ifplugd パッケージはイーサーネット接続のみを管理する旧式の自動ネ ットワーク設定ツールです。これによって可動 PC 等のイーサーネット     ケーブルの脱着問題を解決します。もし NetworkManager か Wicd (「デ スクトップのためのモダンネットワーク設定」参照下さい) がインスト ールされている場合は、このパッケージは必要ありません。 このパッケージはデーモンとして実行され、auto とか allow-hotplug     という機能 (表5.10「"/etc/network/interfaces" のスタンザのリスト 」) を置き換え、インターフェースがネットワークに繋がれるとインタ ーフェースを起動します。     例えば eth0 という内部イーサーネットポートに対する ifplugd パッケ ージの利用方法は次です。 1. "/etc/network/interfaces" の中のスタンザを削除しましょう: "auto eth0" または "allow-hotplug eth0"、 2. "/etc/network/interfaces" の中のスタンザを残しましょう: "iface eth0 inet …" と "mapping …"、     3. ifplugd パッケージをインストールします。 4. "sudo dpkg-reconfigure ifplugd" の実行します。 5. eth0 を"ifplugd により監視される静的インターフェース" としま す。     こうするとお望みどおりのネットワーク設定が機能します。 * 電源投入もしくはハードウエアーの発見時に、インターフェースは 自動的に起動されます。 + 長い DHCP のタイムアウトを待つことのない迅速なブートプロ セス。 + 適正な IPv4 アドレス無いまま起動された変なインターフェー スが無いこと (「ifupdown のネットワーク設定状態」参照下さ     い)。 * イーサーネットケーブルを発見時にインターフェースが起動されま す。 * イーサーネットケーブルを外して少し経った時点でインターフェー スが自動的に停止されます。 * イーサーネットケーブルを接続した時点でインターフェースが新規 ネットワーク環境下で起動されます。 ヒント     ifplugd(8) コマンドの引数はインターフェースの再設定の遅延時間など の挙動を設定します。 5.6.2. ifmetric パッケージ     ifmetric パッケージを使うと、DHCP でもルートのメトリクスを事後操 作できます。     次のようにすると eth0 インターフェースを wlan0 インターフェースよ り優先するように設定できます。 1. ifmetric パッケージをインストールします。 2. "/etc/network/interfaces" 中の "iface eth0 inet dhcp" 行のす     ぐ下に "metric 0" というオプション行を追加します。 3. "/etc/network/interfaces" 中の "iface wlan0 inet dhcp" 行のす ぐ下に "metric 1" というオプション行を追加します。 メトリック0とは最高優先順位のルートでデフォールトのルートというこ     とを意味します。大きなメトリック値は低い優先順位を意味します。最 低のメトリック値をもつ有効なインターフェースの IP アドレスが発信 源となるインターフェースになります。ifmetric(8) を参照下さい。 5.6.3. 仮想インターフェース 物理的には単一のイーサーネットインターフェースは異なる IP アドレ スをもつ複数の仮想インターフェースとして設定できます。いくつかの     IP サブネットワークにインターフェースを繋ぐのが通常こうする目的で す。例えば、単一ネットワークインターフェースを使った IP アドレス に基づく仮想ウェッブホスティングがその適用例です。     例えば、次を仮定します。 * あなたのホスト上の単一のイーサーネットインターフェースが (ブ ロードバンドルーターではなく) イーサーネットハブに接続されて います。 * イーサーネットハブはインターネットと LAN ネットワークの両方に 接続されています。     * LAN ネットワークはサブネット 192.168.0.x/24 を使います。 * あなたのホストはインターネットに関しては物理インターフェース eth0 を DHCP が提供する IP アドレスで使います。 * あなたのホストは LAN に関しては仮想インターフェース eth0:0 を 192.168.0.1 で使います。     このとき "/etc/network/interfaces" 中の次のスタンザがあなたのネッ トワークを設定します。 iface eth0 inet dhcp metric 0 iface eth0:0 inet static     address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 metric 1 注意 netfilter/iptables (「Netfilter インフラ」参照下さい) を使ってネ     ットワークアドレス変換 (NAT) を使う上記設定例は単一インターフェー スを使って LAN に対して安価なルーターを提供しますが、そのような設 定を使ったのでは真のファイアーウォール能力はありません。2つの物理 インターフェースと NAT を使ってインターネットからローカルネットワ ークをセキュアーするべきです。 5.6.4. 上級コマンドシンタックス ifupdownパッケージはネットワーク設定名とネットワークインターフェ     ース名を使って上級ネットワーク設定をできるようにします。わたしは ifup(8) や interfaces(5) とは少々異なる用語法をここでは使っていま す。 表5.12 ネットワークデバイスの用語法のリスト +---------------------------------------------------------------+ |マンペー | |この後の文中の用| | |ジの用語 |著者の用語法| 例 | 説明 | | 法 | | | | |---------+------------+----------------+-----------------------|     |物理イン |ネットワーク|lo, eth0, |Linux カーネルが (udev | |ターフェ |インターフェ||メカニズムを利用して) | |ース名 |ース名 | |与えた名前 | |---------+------------+----------------+-----------------------| |論理イン |ネットワーク|config1, |"/etc/network/ | |ターフェ |設定名 |config2, |interfaces" 中で iface | |ース名 | | |に続く名前のトークン | +---------------------------------------------------------------+ 「簡略化されたコマンドシンタックス」中の基本的なネットワーク設定     コマンドは、iface スタンザ中のネットワーク設定名のトークンと、"/ etc/network/interfaces" 中のネットワークインターフェース名が一致 している必要があります。 上級ネットワーク設定コマンドは次のような "/etc/network/     interfaces" の中で、ネットワーク設定名とネットワークインターフェ ース名を区別を可能にします。 表5.13 ifupdown を使う上級ネットワーク設定コマンドのリスト +---------------------------------------------------------------+ | コマンド | アクション | |------------+--------------------------------------------------| |ifup eth0= |ネットワーク設定 config1 を使うネットワークインタ | |config1 |ーフェース eth0 を始動 | |------------+--------------------------------------------------|     |ifdown eth0=|ネットワーク設定 config1 を使うネットワークインタ | |config1 |ーフェース eth0 を停止 | |------------+--------------------------------------------------| |ifup eth0 |mapping スタンザによって選ばれる設定を使ってネット| | |ワークインターフェース eth0 を始動 | |------------+--------------------------------------------------| |ifdown eth0 |mapping スタンザによって選ばれる設定を使ってネット| | |ワークインターフェース eth0 を停止 | +---------------------------------------------------------------+ 5.6.5. mapping スタンザ 「"/etc/network/interfaces" の基本的なシンタックス」では複雑にな     るのを避けるために "/etc/network/interfaces" 中の mapping スタン ザを説明しませんでした。このスタンザには次のシンタクスがあります 。 mapping script     map map map ... 上記は、 で指定される mapping スクリプトで設定の選択     を自動化することで "/etc/network/interfaces" に上級機能を付与しま す。     次の実行を追いかけましょう。     $ sudo ifup eth0     "" が"eth0" と一致する時に、この実行は自動的 に eth0 を設定する次のコマンドの実行を引き起こします。     $ sudo ifup eth0=$(echo -e ' \n \n ...' | eth0)     ここで、"map" を含む行は任意で反復可です。 注記     mapping スタンザのグロッブはシェルのファイル名グロブのように機能 します (「シェルグロブ」参照下さい)。 5.6.6. 手動切り替え可能なネットワーク設定 「基本ネットワーク設定」でしたように "/etc/network/interfaces" フ     ァイルを書き直すことなくいくつかのネットワーク設定間を手動で切り 替える方法を次に示します。 アクセスする必要のある全てのネットワーク設定のついて、"/etc/     network/interfaces" ファイル中に次に示すような個別のスタンザを作 ります。 auto lo iface lo inet loopback iface config1 inet dhcp iface config2 inet static address 192.168.11.100 netmask 255.255.255.0 gateway 192.168.11.1 dns-domain example.com dns-nameservers 192.168.11.1     iface pppoe inet manual pre-up /sbin/ifconfig eth0 up up ifup ppp0=dsl down ifdown ppp0=dsl post-down /sbin/ifconfig eth0 down # The following is used internally only iface dsl inet ppp provider dsl-provider iface pots inet ppp provider provider iface の後にあるトークンのネットワーク設定名に、ネットワークイン     ターフェース名のトークンを使っていないことに注目下さい。また、何 らかのイベントの際にネットワークインターフェース eth0 を自動的に 起動する auto スタンザも allow-hotplug スタンザもありません。     さあ、ネットワーク設定を切り替える準備完了です。 あなたの PC を DHCP が提供される LAN に移動します。次のようにして     ネットワークインターフェース (物理インターフェース) eth0 にネット ワーク設定名 (論理インターフェース名) config1 を付与してそれを起 動します。 $ sudo ifup eth0=config1     Password: ...     インターフェース eth0 が起動され、DHCP で設定され、LAN に接続され ます。     $ sudo ifdown eth0=config1 ...     インターフェース eth0 が停止され、LAN から切断されます。 あなたの PC を静的 IP が提供される LAN に移動します。次のようにし     てネットワークインターフェース (物理インターフェース) eth0 にネッ トワーク設定名 (論理インターフェース名) config2 を付与してそれを 起動します。     $ sudo ifup eth0=config2 ... インターフェース eth0 が起動され、静的 IP で設定され、LAN に接続     されます。dns-* で与えられる追加パラメーターが "/etc/resolv.conf" の内容を設定します。この "/etc/resolv.conf" はresolvconf パッケー ジがインストールされている方がうまく管理されます。     $ sudo ifdown eth0=config2 ...     インターフェース eth0 が停止され、LAN から再度切断されます。 あなたの PC を PPPoE が提供されているサービスに繋がっている BB モ     デムのポートに移動します。次のようにしてネットワークインターフェ ース eth0 にネットワーク設定名 pppoe を付与してそれを起動します。     $ sudo ifup eth0=pppoe ...     インターフェース eth0 が起動され、ISP に直接接続された PPPoE で設 定されます。     $ sudo ifdown eth0=pppoe ...     インターフェース eth0 が停止され再切断されます。 あなたの PC を LAN や BB モデムのない POTS とモデムを使っている場     所に移動します。次のようにしてネットワークインターフェース ppp0 にネットワーク設定名 pots を付与してそれを起動します。     $ sudo ifup ppp0=pots ...     インターフェース ppp0 が起動され、PPP を使ってインターネットに接 続されます。     $ sudo ifdown ppp0=pots ...     インターフェース ppp0 が停止され再切断されます。     ifupdown システムのネットワーク設定状態の現状は "/etc/network/run /ifstate" ファイルの内容で確認します。 警告     複数のネットワークインターフェースがある場合には、eth* や ppp* 等 の最後の数字を調整する必要があります。 5.6.7. ifupdown システムを使うスクリプト     ifupdown システムはスクリプトに環境変数を引き渡して "/etc/network /*/" 中にインストールされたスクリプトを自動実行します。 表5.14 ifupdown システムが引き渡す環境変数のリスト +---------------------------------------------------------------+ | 環境変数 | 引き渡す変数値 | |------------+--------------------------------------------------| |"$IFACE" |処理対象のインターフェースの物理名 (インターフェー| | |ス名) | |------------+--------------------------------------------------| |"$LOGICAL" |処理対象のインターフェースの論理名 (設定名) | |------------+--------------------------------------------------| |"$ADDRFAM" |インターフェースの | |------------+--------------------------------------------------| |"$METHOD" |インターフェースの (例えば "static")| |------------+--------------------------------------------------|     |"$MODE" |ifup から実行されると "start"、ifdown から実行され| | |ると "stop" | |------------+--------------------------------------------------| |"$PHASE" |"$MODE" と同じ、ただし pre-up と post-up と | | |pre-down と post-down 段階を詳細に区別 | |------------+--------------------------------------------------| |"$VERBOSITY"|"--verbose" 使用の指標; 使用されたら1、使用されな | | |かったら0 | |------------+--------------------------------------------------| |"$PATH" |コマンドサーチパス: "/usr/local/sbin:/usr/local/ | | |bin:/usr/sbin:/usr/bin:/sbin:/bin" | |------------+--------------------------------------------------| |"$IF_ |iface スタンザ下の対応するオプションの値 | |