Debian リファレンス [FAMILY Given] 製作著作 © 2013-2021 Osamu Aoki (青木 修) 本 Debian リファレンス (第2.99版) (2023-01-24 06:15:51 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. 新規ユーザーへのリマインダー 5. 新規ユーザーへの引用文 1. GNU/Linux チュートリアル 1.1. コンソールの基礎 1.1.1. シェルプロンプト 1.1.2. GUI の下でのシェルプロンプト 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. Virtual filesystem of MC 1.4. 基本の Unix 的作業環境 1.4.1. login シェル 1.4.2. Bash のカスタム化 1.4.3. 特別のキーストローク 1.4.4. マウス操作 1.4.5. ページャー 1.4.6. テキストエディター 1.4.7. デフォールトのテキストエディターの設定 1.4.8. Using 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 と 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. Failed installation due to missing dependencies 2.6.2. Caching errors of the package data 2.6.3. 古いユーザーの設定との非互換性 2.6.4. 重複するファイルを持つ相異なるパッケージ 2.6.5. 壊れたパッケージスクリプトの修正 2.6.6. dpkg コマンドを使っての救済 2.6.7. パッケージセレクションの復元 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. パッケージ管理の追加参考文書 3. システムの初期化 3.1. ブートストラッププロセスの概要 3.1.1. 1段目: UEFI 3.1.2. 2段目: ブートローダー 3.1.3. 3段目: ミニ Debian システム 3.1.4. 4段目: 通常の Debian システム 3.2. Systemd init 3.2.1. ホスト名 3.2.2. ファイルシステム 3.2.3. ネットワークインターフェースの初期化 3.3. カーネルメッセージ 3.4. システムメッセージ 3.5. System management 3.6. Other system monitors 3.7. systemd のカスタム化 3.7.1. ソケットの起動 3.8. udev システム 3.8.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. インターネット上でセキュアーなパスワード 4.6.2. セキュアーシェル 4.6.3. インターネットのためのセキュリティー強化策 4.6.4. root パスワードのセキュリティー確保 4.7. 他のアクセスコントロール 4.7.1. sudo 4.7.2. PolicyKit 4.7.3. サーバーのサービスへのアクセスの制限 4.7.4. Linux のセキュリティ機能 5. ネットワークの設定 5.1. 基本的ネットワークインフラ 5.1.1. ホスト名の解決 5.1.2. ネットワークインターフェース名 5.1.3. LAN のためのネットワークアドレス範囲 5.1.4. ネットワークデバイスサポート 5.2. デスクトップのためのモダンネットワーク設定 5.2.1. GUI のネットワーク設定ツール 5.3. GUI無しのモダンネットワーク設定 5.4. 低水準ネットワーク設定 5.4.1. Iproute2 コマンド 5.4.2. 安全な低レベルネットワーク操作 5.5. ネットワークの最適化 5.5.1. 最適 MTU の発見 5.5.2. WAN TCP の最適化 5.6. Netfilter インフラ 6. ネットワークアプリケーション 6.1. ウェッブブラウザー 6.1.1. Spoofing the User-Agent string 6.1.2. Browser extension 6.2. メールシステム 6.2.1. Eメールの基本 6.2.2. 現代的メールサービスの限界 6.2.3. Historic mail service expectation 6.2.4. メール転送エージェント (MTA) 6.3. リーモートアクセスサーバーとユーティリティー (SSH) 6.3.1. SSH の基本 6.3.2. リモートホストでのユーザ名 6.3.3. リモートパスワード無しでの接続 6.3.4. 外部 SSH クライアントへの対処法 6.3.5. ssh-agent の設定 6.3.6. リモートホストからメールを送信する 6.3.7. SMTP/POP3 トンネルをするためのポートフォワーディング 6.3.8. SSH 上のリモートシステムをシャットダウンする方法 6.3.9. SSH のトラブルシュート 6.4. プリントサーバーとユーティリティー 6.5. 他のネットワークアプリケーションサーバー 6.6. 他のネットワークアプリケーションクライアント 6.7. システムデーモンの診断 7. GUI システム 7.1. GUI desktop environment 7.2. GUI 通信プロトコル 7.3. GUI インフラストラクチャー 7.4. GUI アプリケーション 7.5. フォント 7.5.1. 基本的なフォント 7.5.2. Font rasterization 7.6. サンドボックス 7.7. リモートデスクトップ 7.8. Xサーバ接続 7.8.1. X サーバローカル接続 7.8.2. X サーバリモート接続 7.8.3. X サーバ chroot 接続 7.9. クリップボード 8. I18N と L10N 8.1. ロケール 8.1.1. UTF-8 ロケールを使う根拠 8.1.2. ロケールの再設定 8.1.3. ファイル名の符号化方式 8.1.4. 地域化されたメッセージと翻訳された文書 8.1.5. ロケールの効果 8.2. キーボード入力 8.2.1. The keyboard input for Linux console and X Window 8.2.2. Wayland 向けのキーボード入力 8.2.3. IBus を使うインプットメソッドのサポート 8.2.4. 日本語の例 8.3. ディスプレー出力 8.4. 東アジア不明瞭文字幅文字 9. システムに関するティップ 9.1. The console tips 9.1.1. シェルの活動を綺麗に記録 9.1.2. screen プログラム 9.1.3. Navigating around directories 9.1.4. Readline wrapper 9.1.5. Scanning the source code tree 9.2. Vim のカスタム化 9.2.1. Customizing vim with internal features 9.2.2. Customizing vim with external packages 9.3. データーの記録と表現 9.3.1. ログデーモン 9.3.2. ログアナライザー 9.3.3. テキストデーターのカスタム化表示 9.3.4. 時間と日付のカスタム化表示 9.3.5. 着色化されたシェル出力 9.3.6. 着色化されたコマンド 9.3.7. 複雑な反復のためにエディターでの活動を記録 9.3.8. X アプリケーションの画像イメージの記録 9.3.9. 設定ファイルの変更記録 9.4. プログラム活動の監視と制御と起動 9.4.1. プロセスの時間計測 9.4.2. スケジューリングの優先度 9.4.3. ps コマンド 9.4.4. top コマンド 9.4.5. プロセスによって開かれているファイルのリスト 9.4.6. プログラム活動の追跡 9.4.7. ファイルやソケットを使っているプロセスの識別 9.4.8. 一定間隔でコマンドを反復実行 9.4.9. ファイルに関してループしながらコマンドを反復実行 9.4.10. GUI からプログラムをスタート 9.4.11. スタートするプログラムのカスタム化 9.4.12. プロセスの停止 9.4.13. タスク1回実行のスケジュール 9.4.14. タスク定期実行のスケジュール 9.4.15. Alt-SysRq キー 9.5. システム管理ティップ 9.5.1. だれがシステムを利用している? 9.5.2. 全員への警告 9.5.3. ハードウエアーの識別 9.5.4. ハードウエアー設定 9.5.5. システムとハードウエアーの時間 9.5.6. ターミナルの設定 9.5.7. 音のインフラ 9.5.8. スクリーンセーバーの無効化 9.5.9. ブザー音の無効化 9.5.10. メモリー使用状況 9.5.11. システムのセキュリティーと整合性のチェック 9.6. データー保存のティップ 9.6.1. ディスク空間の利用状況 9.6.2. ディスクパーティション設定 9.6.3. UUID を使ってパーティションをアクセス 9.6.4. LVM2 9.6.5. ファイルシステム設定 9.6.6. ファイルシステムの生成と整合性チェック 9.6.7. マウントオプションによるファイルシステムの最適化 9.6.8. スーパーブロックによるファイルシステムの最適化 9.6.9. ハードディスクの最適化 9.6.10. ソリッドステートドライブの最適化 9.6.11. SMART を用いたハードディスクの破壊の予測 9.6.12. $TMPDIR 経由で一時保存ディレクトリーを指定 9.6.13. LVM を使う使用可能なストレージ空間の拡張 9.6.14. 他パーティションをマウントする使用可能なストレージ空 間の拡張 9.6.15. 他ディレクトリーをバインドマウントする使用可能なスト レージ空間の拡張 9.6.16. 他ディレクトリーをオーバーレーマウントすることで使用 可能なストレージ空間を拡張 9.6.17. シムリンクを使う使用可能なストレージ空間の拡張 9.7. ディスクイメージ 9.7.1. ディスクイメージの作成 9.7.2. ディスクに直接書込み 9.7.3. ディスクイメージファイルをマウント 9.7.4. ディスクイメージのクリーニング 9.7.5. 空のディスクイメージ作成 9.7.6. ISO9660 イメージファイル作成 9.7.7. CD/DVD-R/RW に直接書込み 9.7.8. ISO9660 イメージファイルをマウント 9.8. バイナリーデーター 9.8.1. バイナリーデーターの閲覧と編集 9.8.2. ディスクをマウントせずに操作 9.8.3. データーの冗長性 9.8.4. データーファイルの復元と事故の証拠解析 9.8.5. 大きなファイルを小さなファイルに分割 9.8.6. ファイル内容の消去 9.8.7. ダミーファイル 9.8.8. ハードディスクの全消去 9.8.9. ハードディスク未使用部分の全消去 9.8.10. 削除されたがまだオープン中のファイルの復活法 9.8.11. 全てのハードリンクを検索 9.8.12. 見えないディスクスペースの消費 9.9. データー暗号化ティップ 9.9.1. dm-crypt/LUKS を使ったリムーバブルディスクの暗号化 9.9.2. dm-crypt/LUKS で暗号化されたディスクのマウント 9.10. カーネル 9.10.1. カーネル変数 9.10.2. カーネルヘッダー 9.10.3. カーネルと関連モジュールのコンパイル 9.10.4. カーネルソースのコンパイル: Debian カーネルチーム推奨 9.10.5. ハードウエアードライバーとファームウエアー 9.11. 仮想化システム 9.11.1. Virtualization and emulation tools 9.11.2. 仮想化の業務フロー 9.11.3. 仮想ディスクイメージファイルをマウント。 9.11.4. Chroot システム 9.11.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. Backup and recovery policy 10.2.2. バックアプユーティリティーのスイート 10.2.3. Personal backup 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.3.6. Password keyring 10.4. ソースコードマージツール 10.4.1. ソースファイル間の相違の抽出 10.4.2. ソースファイルに更新をマージ 10.4.3. Interactive merge 10.5. Git 10.5.1. Git クライアントの設定 10.5.2. Basic Git commands 10.5.3. Git tips 10.5.4. Git リファレンス 10.5.5. Other version control systems 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.2.4. The XML data lint 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. Shell environment variables 12.1.6. シェルコマンドライン処理シーケンス 12.1.7. シェルスクリプトのためのユーティリティープログラム 12.2. Scripting in interpreted languages 12.2.1. Debugging interpreted language codes 12.2.2. GUI program with the shell script 12.2.3. Custom actions for GUI filer 12.2.4. 究極の短い Perl スクリプト 12.3. Coding in compiled languages 12.3.1. C 12.3.2. 単純な C プログラム (gcc) 12.3.3. Flex — 改良版 Lex 12.3.4. Bison — 改良版 Yacc 12.4. 静的コード分析ツール 12.5. デバグ 12.5.1. 基本的な gdb 実行 12.5.2. Debian パッケージのデバグ 12.5.3. バックトレースの収集 12.5.4. 上級 gdb コマンド 12.5.5. ライブラリーへの依存の確認 12.5.6. Dynamic call tracing tools 12.5.7. X エラーのデバグ 12.5.8. メモリーリーク検出ツール 12.5.9. バイナリーのディスアッセンブリー 12.6. ビルドツール 12.6.1. Make 12.6.2. Autotools 12.6.3. Meson 12.7. ウェッブ 12.8. ソースコード変換 12.9. 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. List of mouse operations and related key actions on Debian 1.16. List of basic Vim key strokes 1.17. 基本の Unix コマンドのリスト 1.18. ロケールの値の3つの部分 1.19. 推奨ロケールのリスト 1.20. "$HOME" の値のリスト 1.21. シェルグロブパターン 1.22. コマンドの終了コード 1.23. シェルコマンドの慣用句 1.24. 事前定義されたファイルデスクリプタ 1.25. BRE と ERE のメタ文字 1.26. 置換式 1.27. コマンドをパイプするためのスクリプト断片 2.1. Debian のパッケージ管理ツールのリスト 2.2. Debian アーカイブサイトのリスト 2.3. Debian アーカイブエリアのリスト 2.4. スイーツとコード名の関係 2.5. 特定パッケージの問題解決のためのキーとなるウェッブサイトのリスト 2.6. apt(8) や 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. The meaning of the menu entry of the above part of /boot/grub/ grub.cfg 3.3. Debian システムののブートユーティリティーのリスト 3.4. カーネルエラーレベルのリスト 3.5. List of typical journalctl command snippets 3.6. List of typical systemctl command snippets 3.7. List of other monitoring command snippets under systemd 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. 旧式の net-tools コマンドと新しい iproute2 コマンド等との翻訳表 5.4. 低レベルネットワークコマンドのリスト 5.5. ネットワーク最適化ツールのリスト 5.6. 最適 MTU 値の基本的なガイドライン 5.7. ファイアーウォールツールのリスト 6.1. ウェッブブラウザーのリスト 6.2. メールユーザーエージェント (MUA) のリスト 6.3. 基本的なメール転送エージェント関連パッケージのリスト 6.4. 重要 postfix マニュアルページのリスト 6.5. メールアドレス関連のファイルのリスト 6.6. 基本的 MTA 操作のリスト 6.7. リモートアクセスサーバーとユーティリティーのリスト 6.8. SSH 設定ファイルのリスト 6.9. SSH クライアント起動例のリスト 6.10. 他のプラットフォーム上で使えるフリーな SSH クライアントのリスト 6.11. プリントサーバーとユーティリティーのリスト 6.12. 他のネットワークアプリケーションサーバー 6.13. 他のネットワークアプリケーションクライアント 6.14. よく使われる RFC のリスト 7.1. List of desktop environment 7.2. List of notable GUI infrastructure packages 7.3. 特筆すべき GUI アプリケーションの一覧 7.4. List of notable TrueType and OpenType fonts 7.5. 有用フォント環境と関連パッケージのリスト 7.6. List of notable sandbox environment and related packages 7.7. List of notable remote access server 7.8. X サーバーへの接続方法のリスト 7.9. List of programs related to manipulating character clipboard 8.1. IBusとエンジンパッケージのリスト 9.1. List of programs to support console activities 9.2. screen キーバインディングのリスト 9.3. Information on the initialization of vim 9.4. システムログアナライザーのリスト 9.5. Display examples of time and date for the "ls -l" command with the time style value 9.6. 画像の操作ツールのリスト 9.7. 設定の履歴を記録するパッケージのリスト 9.8. プログラム活動の監視と制御のツールのリスト 9.9. スケジューリングの優先度のためのナイス値のリスト 9.10. ps コマンドのスタイルのリスト 9.11. kill コマンドが良く使うシグナルのリスト 9.12. List of notable SAK command keys 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. データー暗号化ユーティリティーのリスト 9.26. Debian システム上でカーネルの再コンパイルためにインストールする 重要パッケージのリスト 9.27. 仮想化ツールのリスト 10.1. アーカイブと圧縮ツールのリスト 10.2. コピーと同期ツールのリスト 10.3. 典型的な使用シナリオに合わせたリムーバブルストレージデバイスの ファイルシステムの選択肢のリスト 10.4. 典型的使用シナリオの場合のネットワークサービスの選択のリスト 10.5. バックアップスイートのユーティリティーのリスト 10.6. データーセキュリティーインフラツールのリスト 10.7. キー管理のための GNU プライバシガードコマンドのリスト 10.8. トラストコードの意味のリスト 10.9. ファイルに使用する GNU プライバシーガードコマンドのリスト 10.10. ソースコードマージツールのリスト 10.11. git 関連のパッケージとコマンドのリスト 10.12. Main Git commands 10.13. Git tips 10.14. List of other version control system tools 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. 典型的 bashizms のリスト 12.2. シェル変数のリスト 12.3. シェル変数展開のリスト 12.4. 重要なシェル変数置換のリスト 12.5. 条件式中のファイル比較演算子 12.6. 条件式中での文字列比較演算子のリスト 12.7. シェルスクリプト用の小さなユーティリティープログラムを含むパッ ケージのリスト 12.8. List of interpreter related packages 12.9. ダイアログプログラムのリスト 12.10. コンパイラ関連のパッケージのリスト 12.11. Yacc 互換の LALR パーサー生成ソフトのリスト 12.12. 静的コード分析ツールのリスト 12.13. デバッグパッケージのリスト 12.14. 上級 gdb コマンドのリスト 12.15. メモリーリーク検出ツールのリスト 12.16. ビルドツールパッケージのリスト 12.17. make の自動変数のリスト 12.18. make 変数の展開のリスト 12.19. ソースコード変換ツールのリスト 序章 目次 1. 免責事項 2. Debian とはなにか 3. 本書について 3.1. 編集指針 3.2. 前提条件 3.3. 文書様式 3.4. ポプコン 3.5. パッケージサイズ 3.6. 本書へのバグ報告 4. 新規ユーザーへのリマインダー 5. 新規ユーザーへの引用文 このDebian リファレンス (第2.99版) (2023-01-24 06:15:51 UTC) はシステ ムインストール後のユーザー向け案内書として Debian のシステム管理に関 する概論の提供を目指しています。 本書が対象とする読者は、 GNU/Linux システムがどう機能するかを理解する のに、シェルスクリプトぐらいは学ぶ気はあるが、全ての C のソースまで読 む気がない人です。 インスト─ルの方法は、以下を参照ください: * 現行安定システム用 Debian GNU/Linux インストールガイド * 現行テスティング(testing)システム用 Debian GNU/Linux インストール ガイド 1. 免責事項     一切保証は致しません。全ての商標はそれぞれの商標の所有者の財産で す。 The Debian system itself is a moving target. This makes its documentation difficult to be current and correct. Although the     current testing version of the Debian system was used as the basis for writing this, some contents may be already outdated by the time you read this. 本書はあくまで二次的参考文献として扱って下さい。本書は正式の案内     書を置き換えません。著者及び本書への貢献者は本書中の誤謬や欠落や 曖昧さが引き起こす結果に一切責任を負いません。 2. Debian とはなにか Debian プロジェクトはフリーなオペレーティングシステムを作ろうとい     う共通目的を持った個人の集団です。そのディストリビューションは次 の特徴があります。 * ソフトウェアの自由へのコミットメント: Debian 社会契約と Debian フリーソフトウエアーガイドライン (DFSG) * インターネット上の分散型の無償ボランティア活動: https:// www.debian.org * 多数のプリコンパイルされた高品質のソフトウエアーパッケージ     * セキュリティーアップデートへの平易なアクセス提供による、安定 性とセキュリティーの重視 * Focus on smooth upgrade to the latest software packages in the testing archives * 多数のサポートされたハードウエアーアーキテクチャー 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. 前提条件 警告     本文書だけに頼らず自分で答えを見出す努力をしっかりすることを期待 します。本文書は効率的なスタートポイントを提供するだけです。     一義的情報源から自分自身で解決策を探し出すべきです。 * 一般的情報は https://www.debian.org にある Debian サイト * "/usr/share/doc/package_name" ディレクトリー下にある文書 * Unix スタイルのマンページ: "dpkg -L package_name |grep '/man/ man.*/'" * GNU スタイルの info ページ: "dpkg -L package_name |grep '/ info/'" * バグレポート: http://bugs.debian.org/package_name     * 変化中の事や特定案件に関しては、https://wiki.debian.org/ にあ る Debian の Wiki * http://www.unix.org/ にある Open Group の The UNIX System Home Page 中の Single UNIX Specification * https://www.wikipedia.org/ にある Wikipedia のフリーの百科事 典 * The Debian Administrator's Handbook * http://tldp.org/ にある Linux 文書プロジェクト (TLDP) の HOWTO 文書 注記     詳細な文書を読むには、"-doc" をサフィクスとする対応する文書パッケ ージをインストールする必要があるかもしれません。 3.3. 文書様式     bash(1) シェルコマンドの例示をする次のような簡略化した表現スタイ ルで本書は情報を提供します。     # command-in-root-account $ command-in-user-account これらのシェルプロンプトは使われるアカウントを区別します。これは     ちょうど環境変数として: "PS1='\$'" と "PS2=' '" を設定した場合に 相当します。これらの環境変数値はあくまで本書の読みやすさのためで 、実際のインストール済みシステではほとんど見かけません。 All command examples are run under the English locale "LANG= en_US.UTF8". Please don't expect the placeholder strings such as     command-in-root-account and command-in-user-account to be translated in command examples. This is an intentional choice to keep all translated examples to be up-to-date. 注記     "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/apt/" のように表現されます。読者は次の様にタイ プして情報を得るように心がけて下さい。     $ mc "/etc/apt/" パッケージ名はその名をタイプライターフォントで書き "vim" のように     表現されます。読者は次の様にタイプして情報を得るように心がけて下 さい。 $ dpkg -L vim     $ apt-cache show vim $ aptitude show vim 文書は、その場所のファイル名でダブルクォーテションマーク間にタイ プライターフォントで書き "/usr/share/doc/base-passwd/     users-and-groups.txt.gz" や "/usr/share/doc/base-passwd/ users-and-groups.html" のように表現されたり、その場所の URL で https://www.debian.org のように表現されます。読者は次の様にタイプ して情報を得るように心がけて下さい。 $ zcat "/usr/share/doc/base-passwd/users-and-groups.txt.gz" | sensible-pager     $ sensible-browser "/usr/share/doc/base-passwd/users-and-groups.html" $ sensible-browser "https://www.debian.org" 環境変数は、頭に "$" がついた名前をダブルクォーテションマーク間に     タイプライターフォントで書き、"$TERM" のように表現されます。読者 は次の様にタイプして情報を得るように心がけて下さい。     $ echo "$TERM" 3.4. ポプコン ポプコンのデーターは各パッケージの客観的人気の指標として提示され     います。それがダウンロードされた日付は 2023-01-24 06:07:27 UTC で 、 191527 を越すバイナリーパッケージ数と 25 のアーキテクチャーに またがる 207099 つの提出レポートからなります。 注記     amd64 の不安定版 unstable アーカイブは現在高々 68933 つのパッケー ジしか含みません。ポプコンデーターは多くの旧式設置システムからの レポートを含みます。 "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. 新規ユーザーへのリマインダー     新規ユーザーへのリマインダーを以下に記します: * データをバックアップしましょう * パスワードとセキュリティーキーを保護する * KISS (keep it simple stupid、簡潔性尊重原則) + システムを過剰にエンジニアリングしてはいけません * ログファイルを読みましょう + 最初のエラーが大事なエラーです * RTFM (read the fine manual、良く書かれているマニュアルを読み ましょう)     * 質問する前にインターネットを検索しましょう * 必要もないのに root になってはいけません * パッケージ管理システムを改変してはいけません * 自分が理解していないことを入力してはいけません * (全セキュリティレビューを受ける前に) ファイルのパーミッション を変更してはいけません * あなたの変更をテストするまでrootシェルを離れてはいけません * 常に代替ブートメディア (USB メモリースティック、CD、 …) を確 保しましょう 5. 新規ユーザーへの引用文     新規ユーザーを啓蒙する 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. シェルプロンプト Upon starting the system, you are presented with the character     based login screen if you did not install any GUI environment such as GNOME or KDE desktop system. Suppose your hostname is foo, the login prompt looks as follows. GUI 環境をインストールした場合でも、Ctrl-Alt-F3 で文字ベースのロ     グインプロンプトが出ますし、Ctrl-Alt-F2 で GUI 環境に戻れます (詳 細は下記の「仮想コンソール」参照下さい)。     foo login: login プロンプトであなたのユーザー名 (例えば penguin) を打鍵し     Enter キーを押します。さらにあなたのパスワードを打鍵し Enter キー を再び押します。 注記 Unix の伝統に従い、Debian システムではユーザー名とパスワードに関     して大文字小文字の区別をします。ユーザー名は通常小文字のみから選 ばれます。最初のユーザーアカウントは通常インストールの際に作られ ます。追加のユーザーアカウントは root によって adduser(8) を用い て作られます。 "/etc/motd" (本日のメッセージ: Message Of The Day) に保存されてい     る歓迎メッセージとコマンドプロンプトを表示しシステムが起動されま す。 Debian GNU/Linux 11 foo tty1 foo login: penguin Password: Linux foo 5.10.0-6-amd64 #1 SMP Debian 5.10.28-1 (2021-04-09) 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. Last login: Thu May 13 08:47:13 JST 2021 on tty1 foo:~$     これであなたはシェルの中にいます。シェルはあなたからのコマンドを 解釈します。 1.1.2. GUI の下でのシェルプロンプト インストールの際に GUI 環境をインストールした場合、システム起動時 にグラフィカルなログイン画面が表示されます。あなたのユーザー名と     パスワードを入力することで非特権ユーザーアカウントにログインでき ます。タブ (tab) を用いたりマウスの第一クリックを用いるとユーザー 名とパスワードの間を行き来できます。 You can gain the shell prompt under GUI environment by starting a x-terminal-emulator program such as gnome-terminal(1), rxvt(1) or     xterm(1). Under the GNOME Desktop environment, press SUPER-key (Windows-key) and typing in "terminal" to the search prompt does the trick. デスクトップ環境 (例えば fluxbox) 次第ではメニューの起点がよく分     からないことがあります。そんな時はデスクトップスクリーンの背景を (右)クリックしてメニューが表示されることを期待しましょう。 1.1.3. root アカウント     root アカウントはスーパーユーザーとか特権ユーザーとも呼ばれます。 このアカウントからは次のようなシステム管理活動ができます。 * ファイルパーミッションによらずシステム上の任意ファイルに関し ての、読出し・書込み・削除 * システム上のいかなるファイルに関して、ファイルの所有者やパー     ミッション設定 * システム上の非特権ユーザーのパスワードを設定 * パスワード無しに任意アカウントへの login     root アカウントの権限を使うには、この無制限の権限ゆえ配慮と責任あ る行動が求められます。 警告     root のパスワードを他人に決して教えてはいけません。 注記 ファイル (Debian システムにとってはファイルの一種である CD-ROM 等 のハードウエアーデバイスも含む) パーミッションは、非 root ユーザ     ーによるそのファイルの使用やアクセスをできなくなくすることがあり ます。この様な状況の下では root アカウントを使うことが簡便なテス ト法ですが、問題解決はファイルパーミッションとユーザーのグループ のメンバーシップを適正に設定する必要があります (「ファイルシステ ムのパーミッション」参照下さい)。 1.1.4. root シェルプロンプト     root のパスワードを使って root のシェルプロンプトを使えるようにす る基本的な方法を次に記します。 * 文字ベースのログインプロンプトに root と入力します。 * どのユーザーシェルプロンプトからでも "su -l" と入力します。     + 現ユーザーの環境を一切引き継がません。 * どのユーザーシェルプロンプトからでも "su" と入力します。 + 現ユーザーの環境を一部引き継ぐ。 1.1.5. GUI のシステム管理ツール When your desktop menu does not start GUI system administration tools automatically with the appropriate privilege, you can start     them from the root shell prompt of the terminal emulator, such as gnome-terminal(1), rxvt(1), or xterm(1). See 「root シェルプロン プト」 and 「Xサーバ接続」. 警告 gdm3(1) 等のディスプレーマネージャーのプロンプトに root と入力し て、GUIディスプレー / セッションマネージャーを root アカウントの     もとで決して起動してはいけません。 クリチカルな情報が表示されている際には、あなたの X スクリーンを覗 き見られるかもしれないのでリモートの信頼できない GUI プログラムを 決して実行してはいけません。 1.1.6. 仮想コンソール デフォルトの Debian システムでは、6つの切り替え可能な VT100 様の 文字コンソールが利用でき、Linux ホスト上で直接コマンドシェルを起 動できます。GUI 環境下でない場合は、Left-Alt-key と F1 — F6 の中     の一つのキーを同時に押すことで仮想コンソール間の切り替えができま す。それぞれの文字コンソールはアカウントに独立してログインするこ とができ、マルチユーザー環境を提供します。このマルチユーザー環境 は Unix の素晴らしい機能で、癖になります。 GUI 環境下では、Ctrl-Alt-F3 キーを押す、つまり left-Ctrl-key と     left-Alt-key と F3-key キーを同時に押すと文字コンソール3にアクセ スできます。通常仮想コンソール2で実行されている GUI 環境には Alt-F2 を押すことにより戻れます。     これとは別の方法で、例えば仮想ターミナル3という今とは違う仮想ター ミナルへの変更がコマンドラインから出来ます。     # chvt 3 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     「SSH 上のリモートシステムをシャットダウンする方法」を参照下さい 。 1.1.9. まともなコンソールの復元 例えば "cat some-binary-file" のような変な事をした後でスクリーン が無茶苦茶になった場合、コマンドプロンプトに "reset" と入力して下     さい。このときコマンドを入力してもスクリーンには読み取れる表示が されないかもしれません。"clear" とすればスクリーンが消去できます 。 1.1.10. 初心者向け追加パッケージの提案 デスクトップ環境タスク抜きの最小限インストレーション Debian シス テムですら基本的な Unix 機能は提供されますが、コマンドラインや     curses に基づく mc や vim 等のいくつかの文字ターミナルパッケージ を apt-get(8) を使って次のように追加インストールすることから始め ることを初心者にお薦めします。 # apt-get update     ... # apt-get install mc vim sudo aptitude ...     既にこれらのパッケージがインストールされている場合には、新しいパ ッケージはインストールされません。 表1.1 興味あるテキストモードのプログラムパッケージのリスト +---------------------------------------------------------------+ |パッケー |ポプコ|サイ | 説明 | | ジ | ン | ズ | | |---------+------+-----+----------------------------------------| |mc |V:53, |1482 |テキストモードの全画面ファイルマネージャ| | |I:227 | |ー | |---------+------+-----+----------------------------------------| |sudo |V:626,|5990 |ユーザーに限定的な root 権限を与えるプロ| | |I:824 | |グラム | |---------+------+-----+----------------------------------------| | |V:95, | |Unix テキストエディター Vi IMproved (改 | |vim |I:392 |3570 |良版 Vi)、プログラマーのためのテキストエ|     | | | |ディター (標準版) | |---------+------+-----+----------------------------------------| | |V:55, | |Unix テキストエディター Vi IMproved (改 | |vim-tiny |I:971 |1660 |良版 Vi)、プログラマーのためのテキストエ| | | | |ディター (軽量版) | |---------+------+-----+----------------------------------------| |emacs-nox|V:3, |33819|GNU プロジェクト Emacs、Lisp に基づく拡 | | |I:18 | |張可能なテキストエディター | |---------+------+-----+----------------------------------------| |w3m |V:15, |2828 |テキストモード WWW ブラウザー | | |I:191 | | | |---------+------+-----+----------------------------------------| |gpm |V:11, |521 |テキストコンソール上の Unix 式のカットア| | |I:14 | |ンドペースト (daemon) | +---------------------------------------------------------------+     いくつかの参考資料を読むのも良いことです。 表1.2 有用な文書パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |--------------------+------+-----+-----------------------------| |doc-debian |I:852 |166 |Debian プロジェクトの文書、 | | | | |(Debian FAQ) 他 | |--------------------+------+-----+-----------------------------| |debian-policy |I:21 |4379 |Debian ポリシーマニュアルと関|     | | | |連文書 | |--------------------+------+-----+-----------------------------| |developers-reference|V:0, |2051 |Debian 開発者のためのガイドラ| | |I:6 | |インと情報 | |--------------------+------+-----+-----------------------------| |debmake-doc |I:0 |11992|Debian メンテナ向けガイド | |--------------------+------+-----+-----------------------------| |debian-history |I:0 |4302 |Debian プロジェクトの歴史 | |--------------------+------+-----+-----------------------------| |debian-faq |I:849 |790 |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) をオプションとともに用いると、ファイルツリーの一部を 別のところと結びつけたり、共有・非共有・従属・バインド不可として ファイルシステムをマウントもできます。各ファイルシステムごとの利 用可能なマウントオプションは "/usr/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 と 呼ばれるデーター構造を持ちます。ほとんど全てをファイルシステム表 現しようというアイデアは 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 newowner foo     # chgrp newgroup 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) をご覧下さい。     (file permissions) = (requested file permissions) & ~(umask value) 表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 グループに所属させ ることがよく行われます。そのような場合には安全のため umask を0022 に設定した方がよいでしょう。) ヒント     ~/.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 タイムスタンプのタイプのリスト +----------------------------------------+ |タイプ| 意味 (歴史的 Unix 定義) | |------+---------------------------------|     |mtime |ファイル内容変更時間 (ls -l) | |------+---------------------------------| |ctime |ファイル状態変更時間 (ls -lc) | |------+---------------------------------| |atime |ファイル最終アクセス時間 (ls -lu)| +----------------------------------------+ 注記     ctime はファイル作成日時ではありません。 注記     GNU/Linux システム上では、実際の atime 値は歴史的 Unix 定義とは異 なる場合があります。 * ファイルが上書きされると、ファイルの mtime と ctime と atime の属性すべてが変更されます。 * ファイルの所有者やパーミッションの変更をすると、ファイルの ctime や atime アトリビュートを変えます。 * 伝統的 Unix システム上ではファイルを読むとファイルの atime 属 性が変更されます。     * GNU/Linux システム上では、"strictatime" でファイルシステムを マウントした場合にファイルを読むとファイルの atime が変更され ます。 * ファイルを初めて読み込んだときか、1日空けてアクセスした場合、 ファイルの atime 属性の更新がGNU/Linux (Linux 2.6.30以降) の relatime でマウントされているファイルシステムでは生じます。 * atime 属性は noatime でマウントされているファイルシステムでは 、読み込み時に更新されることはありません。 注記 "noatime" や "relatime" マウントオプションは通常使用状況下でのフ     ァイルシステムの読み出しパーフォーマンスを向上させるために導入さ れました。"strictatime" オプション下の単純なファイル読み出しオペ レーションは atime 属性を更新する時間のかかる書き込み操作を引き起 こします。しかし、 atime 属性は mbox(5) ファイルを除くとほとんど 使われることはありません。mount(8) を参照下さい。     既存ファイルのタイムスタンプを変更するには touch(1) コマンドを使 って下さい。     タイムスタンプに関して、 ls コマンドは非英語ロケール ("fr_FR.UTF-8") でローカライズされた文字列を表示します。 $ LANG=C ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo     $ LANG=en_US.UTF-8 ls -l foo -rw-rw-r-- 1 penguin penguin 0 Oct 16 21:35 foo $ LANG=fr_FR.UTF-8 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 を使えま す。 注記     In some consoles such as gnome-terminal(1), key strokes of function-keys may be stolen by the console program. You can disable these features in "Preferences" → "General" and "Shortcuts" menu for gnome-terminal. もし文字化け表示がされる文字符号化 (エンコーディング) 問題に出会     った際には、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-n キーを押して仮想コンソールを切替えて、 "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. Virtual filesystem of MC MC can be used to access files over the Internet. Go to the menu by pressing F9, "Enter" and "h" to activate the Shell filesystem.     Enter a URL in the form "sh://[user@]machine[:options]/ [remote-dir]", which retrieves a remote directory that appears like a local one using ssh. 1.4. 基本の Unix 的作業環境 MC はほとんど全てのことを可能にしますが、シェルプロンプトから実行     されるコマンドラインツールの使用方法について学び、Unix 的な作業環 境に親しむのは非常に重要なことです。 1.4.1. login シェル Since the login shell may be used by some system initialization     programs, it is prudent to keep it as bash(1) and avoid switching the login shell with chsh(1). If you want to use a different interactive shell prompt, set it     from GUI terminal emulator configuration or start it from ~ /.bashrc, e.g., by placing "exec /usr/bin/zsh -i -l" or "exec / usr/bin/fish -i -l" in it. 表1.13 シェルプログラムのリスト +---------------------------------------------------------------+ | |ポプコ|サイ|POSIX| | | パッケージ | ン | ズ |シェ | 説明 | | | | | ル | | |---------------+------+----+-----+-----------------------------| |bash |V:821,|7163|はい |Bash: GNU Bourne Again SHell | | |I:999 | | |(デファクトスタンダード) | |---------------+------+----+-----+-----------------------------| |bash-completion|V:31, |1463|N/A |programmable completion for | | |I:925 | | |the bash shell | |---------------+------+----+-----+-----------------------------| |dash |V:896,|191 |はい |Debian の Almquist シェル、シ| | |I:995 | | |ェルスクリプトに好適 | |---------------+------+----+-----+-----------------------------| |zsh |V:37, |2437|はい |Z shell: 多くの拡張された標準| | |I:73 | | |シェル | |---------------+------+----+-----+-----------------------------| |tcsh |V:7, |1303|いい |TENEX C Shell: 拡張バージョン|     | |I:25 | |え |の Berkeley csh | |---------------+------+----+-----+-----------------------------| |mksh |V:2, |1457|はい |Korn シェルの1バージョン | | |I:13 | | | | |---------------+------+----+-----+-----------------------------| |csh |V:1, |340 |いい |OpenBSD の C シェル、Berkeley| | |I:7 | |え |csh の派生 | |---------------+------+----+-----+-----------------------------| | |V:0, | | |組み込みコマンド付きの独立シ | |sash |I:6 |1158|はい |ェル (標準の "/bin/sh" には不| | | | | |向き) | |---------------+------+----+-----+-----------------------------| |ksh |V:2, |56 |はい |真の AT&T バージョンの Korn | | |I:13 | | |シェル | |---------------+------+----+-----+-----------------------------| |rc |V:0, |169 |いい |AT&T Plan 9 の rc シェルの実 | | |I:1 | |え |装 | |---------------+------+----+-----+-----------------------------| |posh |V:0, |190 |はい |ポリシー準拠の通常シェル | | |I:0 | | |(pdksh の派生) | +---------------------------------------------------------------+ ヒント     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. マウス操作     Mouse operations for text on Debian system mix 2 styles with some twists: * 伝統的な Unix 流のマウス操作: + use 3 buttons (click) + use PRIMARY + used by X applications such as xterm and text     applications in Linux console * 現代的な GUI 流のマウス操作: + use 2 buttons (drag + click) + use PRIMARY and CLIPBOARD + used in Modern GUI applications such as gnome-terminal 表1.15 List of mouse operations and related key actions on Debian +---------------------------------------------------------------+ | アクション | 反応 | |--------------------------+------------------------------------| |マウスの左クリックアンドド|select range as PRIMARY selection | |ラッグ | | |--------------------------+------------------------------------| |左クリック |select the start of range for | | |PRIMARY selection | |--------------------------+------------------------------------| |右クリック(伝統的) |select the end of range for PRIMARY | | |selection |     |--------------------------+------------------------------------| |右クリック(現代的) |context dependent menu (cut/copy/ | | |paste) | |--------------------------+------------------------------------| |ミドルクリックまたは |insert PRIMARY selection at the | |Shift-Ins |cursor | |--------------------------+------------------------------------| |Ctrl-X |cut PRIMARY selection to CLIPBOARD | |--------------------------+------------------------------------| |Ctrl-C (ターミナルで |copy PRIMARY selection to CLIPBOARD | |Shift-Ctrl-C) | | |--------------------------+------------------------------------| |Ctrl-V |paste CLIPBOARD at the cursor | +---------------------------------------------------------------+ Here, the PRIMARY selection is the highlighted text range. Within     the terminal program, Shift-Ctrl-C is used instead to avoid terminating a running program. 現代的なホイールマウスの真ん中のホイールは中マウスボタンと見なさ     れ、中クリックに使えます。2ボタンマウス状況では左右のボタンの同時 押しが中クリックとして使えます。     In order to use a mouse in Linux character consoles, you need to have gpm(8) running as daemon. 1.4.5. ページャー less(1) は機能拡張されたページャー (ファイル内容のブラウザー) で す。コマンドアーギュメントに指定されたファイル、もしくは標準入力 を読みますless。コマンドで閲覧中にヘルプが必要なら、"h" を押すし ましょう。これは、more(1) よりもはるかに高機能で、"eval $     (lesspipe)" または "eval $(lessfile)" をシェルのスタートスクリプ ト中で実行することで更に機能が拡充されます。詳しくは、"/usr/share /doc/less/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ロケール中のGUI環境で、必要なプログラムとフォントをインス トールをするのが賢明です。エディタにはGUI環境に依らずにファイルの エンコーディングを設定するオプションがあります。マルチバイトテキ ストについてはそれぞれの文書を参照下さい。 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. Using vim     The recent vim(1) starts itself in the sane "nocompatible" option and enters into the NORMAL mode.^[1] 表1.16 List of basic Vim key strokes +---------------------------------------------------------------+ | mode | key strokes | アクション | |---------------+-----------------+-----------------------------| |NORMAL |:help|only |display the help file | |---------------+-----------------+-----------------------------| |NORMAL |:e filename.ext |open new buffer to edit | | | |filename.ext | |---------------+-----------------+-----------------------------| |NORMAL |:w |overwrite current buffer to | | | |the original file | |---------------+-----------------+-----------------------------| |NORMAL |:w filename.ext |write current buffer to | | | |filename.ext | |---------------+-----------------+-----------------------------| |NORMAL |:q |quit vim | |---------------+-----------------+-----------------------------| |NORMAL |:q! |force to quit vim | |---------------+-----------------+-----------------------------| |NORMAL |:only |close all other split open | | | |windows | |---------------+-----------------+-----------------------------| |NORMAL |:set |check if vim is in the sane | | |nocompatible? |nocompatible mode | |---------------+-----------------+-----------------------------| |NORMAL |:set nocompatible|set vim to the sane |     | | |nocompatible mode | |---------------+-----------------+-----------------------------| |NORMAL |i |enter the INSERT mode | |---------------+-----------------+-----------------------------| |NORMAL |R |enter the REPLACE mode | |---------------+-----------------+-----------------------------| |NORMAL |v |enter the VISUAL mode | |---------------+-----------------+-----------------------------| |NORMAL |V |enter the linewise VISUAL | | | |mode | |---------------+-----------------+-----------------------------| |NORMAL |Ctrl-V |enter the blockwise VISUAL | | | |mode | |---------------+-----------------+-----------------------------| |except |ESC-key |enter the NORMAL mode | |TERMINAL-JOB | | | |---------------+-----------------+-----------------------------| |NORMAL |:term |enter the TERMINAL-JOB mode | |---------------+-----------------+-----------------------------| |TERMINAL-NORMAL|i |enter the TERMINAL-JOB mode | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Ctrl-W N (or |enter the TERMINAL-NORMAL | | |Ctrl-\ Ctrl-N) |mode | |---------------+-----------------+-----------------------------| |TERMINAL-JOB |Ctrl-W : |enter the Ex-mode in | | | |TERMINAL-NORMAL mode | +---------------------------------------------------------------+     Please use the "vimtutor" program to learn vim through an interactive tutorial course. The vim program changes its behavior to typed key strokes based on mode. Typing in key strokes to the buffer is mostly done in     INSERT-mode and REPLACE-mode. Moving cursor is mostly done in NORMAL-mode. Interactive selection is done in VISUAL-mode. Typing ":" in NORMAL-mode changes its mode to Ex-mode. Ex-mode accepts commands. ヒント     The Vim comes with the Netrw package. Netrw supports reading files, writing files, browsing directories over a network, and local browsing! Try Netrw with "vim ." (a period as the argument) and read its manual at ":help netrw".     For the advanced configuration of vim, see 「Vim のカスタム化」. 1.4.9. シェル活動の記録 シェルコマンドの出力はスクリーンから押し出されると永久に無くなっ     てしまうかもしれません。シェルでの活動を後で見直せるようにファイ ルに記録しておくのは良いことです。この種の記録は何らかのシステム 管理作業をする際には非常に重要です。 ヒント     The new Vim (version>=8.2) can be used to record the shell activities cleanly using TERMINAL-JOB-mode. See 「Using vim」.     シェル活動の記録の基本方法は script(1) の下で実行することです。     例えば、次を試してみて下さい:     $ script Script started, file is typescript     script の下で何なりのシェルコマンドを実行します。     Ctrl-D を押して script から脱出します。     $ vim typescript     「シェルの活動を綺麗に記録」を参照下さい。 1.4.10. 基本 Unix コマンド 基本的 Unix コマンドを学びます。ここでは一般的意味で "Unix" を使 っています。いかなる Unix クローンの OS も等価なコマンドを提供し     ます。Debian システムも例外ではありません。今一部コマンドが思うよ うに機能しなくても心配しないで下さい。エイリアスがシェルで使われ た場合は、対応するコマンドの出力は変わります。次は順番に実行する と言う意味の例ではありません。     非特権ユーザーのアカウントから次のコマンドを全て実行します。 表1.17 基本の Unix コマンドのリスト +---------------------------------------------------------------+ | コマンド | 説明 | |-----------+---------------------------------------------------| |pwd |カレント / ワーキングディレクトリーの名前を表示 | |-----------+---------------------------------------------------| |whoami |現在のユーザー名を表示 | |-----------+---------------------------------------------------| |id |現在のユーザーのアイデンティティ (名前と uid と gid| | |と関連する group) を表示 | |-----------+---------------------------------------------------| |file foo |"foo" ファイルのファイルタイプを表示 | |-----------+---------------------------------------------------| |type -p |"commandname" コマンドのファイルの位置を表示 | |commandname| | |-----------+---------------------------------------------------| |which |, , | |commandname| | |-----------+---------------------------------------------------| |type |"commandname" コマンドに関する情報を表示 | |commandname| | |-----------+---------------------------------------------------| |apropos |"key-word" に関連したコマンドを発見 | |key-word | | |-----------+---------------------------------------------------| |man -k |, , | |key-word | | |-----------+---------------------------------------------------| |whatis |"commandname" コマンドに関する1行の説明を表示 | |commandname| | |-----------+---------------------------------------------------| |man -a |"commandname" コマンドに関する説明を表示 (Unix スタ| |commandname|イル) | |-----------+---------------------------------------------------| |info |"commandname" コマンドに関する比較的長い説明を表示 | |commandname|(GNU スタイル) | |-----------+---------------------------------------------------| |ls |ディレクトリーの内容をリスト (非ドットファイルおよ | | |びディレクトリー) | |-----------+---------------------------------------------------| |ls -a |ディレクトリーの内容をリスト (全ファイルおよびディ | | |レクトリー) | |-----------+---------------------------------------------------| |ls -A |ディレクトリーの内容をリスト (ほとんど全ファイルお | | |よびディレクトリー、".." と "." をスキップ) | |-----------+---------------------------------------------------| |ls -la |ディレクトリーの内容を詳細情報とともにリスト | |-----------+---------------------------------------------------| |ls -lai |ディレクトリーの内容を inode 番号と詳細情報とともに| | |リスト | |-----------+---------------------------------------------------| |ls -d |現ディレクトリーの中の全ディレクトリーをリスト | |-----------+---------------------------------------------------| |tree |ファイルツリーの内容を表示 | |-----------+---------------------------------------------------| |lsof foo |"foo" ファイルのオープンの状態をリスト | |-----------+---------------------------------------------------| |lsof -p pid|プロセス ID: "pid" によってオープンされたファイルを| | |リスト | |-----------+---------------------------------------------------| |mkdir foo |現ディレクトリー中に "foo" という新規ディレクトリー| | |作成 | |-----------+---------------------------------------------------| |rmdir foo |現ディレクトリー中の "foo" というディレクトリーを削| | |除 | |-----------+---------------------------------------------------| | |現ディレクトリー中もしくは "$CDPATH" 変数中にリスト| |cd foo |されたディレクトリー中の "foo" というディレクトリー| | |にディレクトリーを変更 | |-----------+---------------------------------------------------| |cd / |ディレクトリーをルートディレクトリーに変更 | |-----------+---------------------------------------------------| |cd |現在のユーザーのホームディレクトリーにディレクトリ | | |ーを変更 | |-----------+---------------------------------------------------| |cd /foo |絶対ディレクトリーパス "/foo" にディレクトリーを変 | | |更 | |-----------+---------------------------------------------------| |cd .. |親ディレクトリーにディレクトリーを変更 | |-----------+---------------------------------------------------| |cd ~foo |ユーザー "foo" のホームディレクトリーにディレクトリ| | |ーを変更 | |-----------+---------------------------------------------------| |cd - |一つ前のディレクトリーにディレクトリーを変更 | |-----------+---------------------------------------------------| ||"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 的なコマンドは次のように (場合に     よっては一切の引数無しで) 起動すると簡単なヘルプ情報を表示します 。     $ commandname --help $ commandname -h 1.5. シェルプロンプト Debian システムの使い方が少し分かったでしょう。Debian システム上     でのコマンド実行のメカニズムを掘り下げます。初心者のためにちょっ と簡略化してみました。正確な説明は bash(1) を参照下さい。     シンプルなコマンドは、次の要素のシーケンスとなります。 1. 変数代入 (任意) 2. コマンド名     3. 引数 (任意) 4. リダイレクト (任意: > と >> と < と << 等。) 5. 制御演算子 (任意: && と || と改行と ; と & と ( と )) 1.5.1. コマンド実行と環境変数     環境変数の値は Unix コマンドの挙動を変えます。 環境変数のデフォールト値は PAM システムが初期設定されます。その後     次のような何らかのアプリケーションプログラムにより再設定されてい るかもしれません。 * The PAM system such as pam_env may set environment variables by /etc/pam.conf", "/etc/environment" and "/etc/default/ locale".     * The display manager such as gdm3 may reset environment variables for GUI session by "~/.profile". * The user specific program initialization may reset environment variables by "~/.profile", "~/.bash_profile" and "~/.bashrc". 1.5.2. "$LANG" 変数 The default locale is defined in the "$LANG" environment variable     and is configured as "LANG=xx_YY.UTF-8" by the installer or by the subsequent GUI configuration, e.g., "Settings" → "Region & Language" → "Language" / "Formats" for GNOME. 注記     本当に必要な場合でなければ、"$LC_*" 変数を避け、とりあえず "$LANG" 変数のみを用いてシステム環境を設定する事をお薦めします。     "$LANG" 変数に与えられる完全なロケール値は3つの部分からなります: "xx_YY.ZZZZ"。 表1.18 ロケールの値の3つの部分 +-----------------------------------------------------+ |ロケールの値| 意味 | |------------+----------------------------------------|     |xx |ISO 639 言語コード (小文字)、例えば "en"| |------------+----------------------------------------| |YY |ISO 3166 国コード (大文字)、例えば "US" | |------------+----------------------------------------| |ZZZZ |コードセット、常に "UTF-8" と設定 | +-----------------------------------------------------+ 表1.19 推奨ロケールのリスト +------------------------------------------+ |推奨ロケール| 言語 (地域) | |------------+-----------------------------| |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 |ベトナム語 (ベトナム) | +------------------------------------------+     典型的なコマンドの実行は次のようなシェルの行シーケンスを用います 。 $ echo $LANG en_US.UTF-8     $ date -u Wed 19 May 2021 03:18:43 PM UTC $ LANG=fr_FR.UTF-8 date -u mer. 19 mai 2021 15:19:02 UTC     以上で、date(1) プログラムは異なるロケール変数で実行されます。 * 最初のコマンドでは、"$LANG" はシステムのデフォルトのロケール 値 "en_US.UTF-8" に設定されます。     * 二番目のコマンドでは、"$LANG" はフランス語の UTF-8 ロケール値 "fr_FR.UTF-8" に設定されます。     ほとんどのコマンド実行は頭に環境変数定義をつけないのが普通です。 上記の例の代わりに次のように実行します。 $ LANG=fr_FR.UTF-8     $ date -u mer. 19 mai 2021 15:19:24 UTC ヒント     バグを報告する場合、もし非英語環境を使っているならば、プログラム を "en_US.UTF-8" ロケールの下で実行し確認することが望ましいです。     ロケールの詳細に関しては、「ロケール」を参照下さい。 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.20 "$HOME" の値のリスト +---------------------------------------------------------------+ |"$HOME" の値 | プログラム実行状況 | |-------------+-------------------------------------------------| |/ |init プロセスが実行するプログラム (デーモン) | |-------------+-------------------------------------------------| |/root |通常の root シェルから実行されるプログラム | |-------------+-------------------------------------------------| |/home/ |通常のユーザーシェルから実行されるプログラム |     |normal_user | | |-------------+-------------------------------------------------| |/home/ |通常のユーザーの GUI デスクトップメニューから実行| |normal_user |されるプログラム | |-------------+-------------------------------------------------| |/home/ |"sudo program" を用いて root として実行されるプロ| |normal_user |グラム | |-------------+-------------------------------------------------| |/root |"sudo -H program" を用いて root として実行される | | |プログラム | +---------------------------------------------------------------+ ヒント     シェルは、"~/" を現ユーザーのホームディレクトリーである "$HOME/" へと展開します。シェルは、"~foo/" をユーザー foo のホームディレク トリーである "/home/foo/" へと展開します。     See 「Shell environment variables」 if $HOME isn't available for your program. 1.5.5. コマンドラインオプション     プログラムコマンドによっては引数があります。引数は "-" か "--" で 始まり、オプションと呼ばれ、コマンドの挙動をコントロールします。 $ date     Thu 20 May 2021 01:08:08 AM JST $ date -R Thu, 20 May 2021 01:08:12 +0900     上記で、コマンドライン引数 "-R" が date(1) の挙動を RFC2822 準拠 の日付文字列出力と変えています。 1.5.6. シェルグロブ ファイル名を全てタイプせずにファイルのグループをコマンド処理した     いことがよくあります。シェルのグロブ (ワイルドカードとも時々呼ば れる) を用いたファイル名のパターン展開を用いるとこのニーズに答え られます。 表1.21 シェルグロブパターン +---------------------------------------------------------------+ |シェルグロブパターン| マッチルールの説明 | |--------------------+------------------------------------------| |* |"." で始まらないファイル (部分) 名 | |--------------------+------------------------------------------| |.* |"." で始まるファイル (部分) 名 | |--------------------+------------------------------------------|     |? |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.22 コマンドの終了コード +----------------------------------------------+ |コマンドの終了状態|戻り値の数値|戻り値の論理値|     |------------------+------------+--------------| |成功 |ゼロ、0 |真 | |------------------+------------+--------------| |失敗 |非ゼロ、-1 |偽 | +----------------------------------------------+     例えば、次を試してみて下さい。 $ [ 1 = 1 ] ; echo $?     0 $ [ 1 = 2 ] ; echo $? 1 注記     シェルの論理的な観点では、成功は、0 (ゼロ) の値を持つ論理的真とし て扱われることに注意して下さい。少々これは非直感的なのでここで再 確認する必要があります。 1.5.8. 典型的なコマンドシーケンスとシェルリディレクション     次に挙げるシェルコマンドの一部として一行でタイプするシェルコマン ドの慣用句を覚えましょう。 表1.23 シェルコマンドの慣用句 +---------------------------------------------------------------+ |コマンドの | 説明 | | 慣用句 | | |-----------+---------------------------------------------------| |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 3foo 4bar # open files     $ cat <&3 >&4 # redirect stdin to 3, stdout to 4 $ exec 3<&- 4>&- # close files $ cat bar Hello     ファイルデスクリプタの 0-2 は事前定義されています。 表1.24 事前定義されたファイルデスクリプタ +--------------------------------------------+ |デバイス| 説明 |ファイルデスクリプタ| |--------+--------------+--------------------|     |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) をデフォルトで使用するもの: + ed(1) は原始的な行エディターです。     + sed(1) はストリームエディターです。 + egrep(1) はテキストのパターンマッチをします。 + vim(1) はスクリーンエディターです。 + emacs(1) はスクリーンエディターです。(ちょっと拡張された BRE) * 拡張正規表現 (ERE) を使用するもの: + awk(1) は単純なテキスト処理をします。 + egrep(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" を使って自分で見つけましょう。 注記     ソート順や範囲表現はロケールに依存します。コマンドの従来の挙動を 得たい場合は、 UTF-8 がついた通常のロケール(「ロケール」を参照) ではなく、C または C.UTF-8 ロケールを使います。 注記     Perl 正規表現 (perlre(1)) と Perl 互換正規表現 (PCRE) と re モジ ュールで提供される Python 正規表現は ERE に多くの共通の拡張をして います。 1.6.2. 正規表現     正規表現は多くのテキスト処理ツールで使われています。シェルグロブ に類似していますがより複雑で強力です。     正規表現はマッチするパターンを表現し、テキスト文字とメタ文字から なっています。     メタ文字は特別な意味を持った文字です。上記のようにテキストツール によって、BRE と ERE の2つの主要なスタイルがあります。 表1.25 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.26 置換式 +---------------------------------------------------------------+ |置換式| 置換式を置換する文字の説明 | |------+--------------------------------------------------------|     |& |正規表現がマッチしたもの (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=1abc2efg3hij4=     ここで、括弧で囲まれた正規表現のスタイルと、マッチした文字列が異 なるツール上でテキスト置換処理にどう使われるかとに注目下さい。     これらの正規表現は一部エディター内でカーソールの動きやテキスト置 換アクションに対しても使えます。 シェルコマンドラインの行末のバックスラッシュ "\" は改行をホワイト     スペース文字としてエスケープするので、シェルコマンドライン入力を 次行に継続させます。     これらのコマンドを習うために、関連するマニュアルページを全て読ん で下さい。 1.6.4. 正規表現を使ったグローバル置換     ed(1) コマンドは次のようにすると "file" 中に存在する全ての "FROM_REGEX" を "TO_TEXT" に置換できます。 $ ed file < 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.27 コマンドをパイプするためのスクリプト断片 +---------------------------------------------------------------+ |スクリプト断片 (1行| コマンドの効果 | | 入力) | | |-------------------+-------------------------------------------| |find /usr -print |"/usr" の下の全ファイル発見 | |-------------------+-------------------------------------------| |seq 1 100 |1から100までプリント | |-------------------+-------------------------------------------| || xargs -n 1 |パイプからの各項目を引数としてコマンドを反 | |command |復実行 | |-------------------+-------------------------------------------| || xargs -n 1 echo |パイプからのホワイトスペースで分離された項 | | |目を行に分割 | |-------------------+-------------------------------------------| || xargs echo |パイプからの全ての行を1行にマージ | |-------------------+-------------------------------------------| || grep -e |regex_pattern を含む行を抽出 | |regex_pattern | | |-------------------+-------------------------------------------| || grep -v -e |regex_pattern を含まない行を抽出 | |regex_pattern | | |-------------------+-------------------------------------------| || 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) を使って非常に複雑な     操作を多くのファイルに繰り返し実行できます。「ファイル選択の慣用 句」と「ファイルに関してループしながらコマンドを反復実行」を参照 下さい。 シェルの対話モードを使うのが複雑過ぎるようになったときには、シェ     ルのスクリプトを書くのも一計です (「シェルスクリプト」参照下さい) 。 ---------------------------------------------------------------------     ^[1] Even the older vim can starts in the sane "nocompatible" mode by starting it with the "-N" option. 第2章 Debian パッケージ管理 注記     本章は最新安定版リリースがコード名: bullseye と言う前提で書かれて います。 Debian は、フリーソフトウエアーのコンパイル済みバイナリーパッケー     ジからなる整合性あるディストリビューションを作り、そのアーカイブ を通じてそれらを頒布するボランティア組織です。 Debian のアーカイブは、HTTP や FTP 法によるアクセスされるための多     くのリモートのミラーサイトとして提供されています。それは、CD-ROM/ DVD によっても提供されています。     The current Debian package management system which can utilize all these resources is Advanced Packaging Tool (APT). Debian のパッケージ管理システムは、適正に使われれば、バイナリーパ     ッケージの整合性ある組み合わせがアーカイブからシステムにインスト ールされるようになっています。現在、amd64 アーキテクチャーでは 68933 つのパッケージが利用できます。 Debian のパッケージ管理システムは、多彩な歴史があり、使用されるフ     ロントエンドのユーザープログラムやバックエンドのアーカイブへのア クセス方法に多くの選択肢があります。現在は以下を推薦します。 * パッケージのインストール・削除や dist-upgrade を含む全ての対 話的コマンドライン操作を提供する、apt(8)。 * スクリプトから Debian のパッケージ管理をするためによぶ、     apt-get(8)。(古い Debian システム等で)apt が使えない際の控え のオプション。 * インストールされたパッケージを管理したり、使用可能なパッケー ジを探索するためのインタラクティブなテキストインターフェース を提供する、aptitude(8) 表2.1 Debian のパッケージ管理ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |-------------------+------+----+-------------------------------| |dpkg |V:921,|5983|Debian のための低水準パッケージ| | |I:999 | |管理システム(ファイルベース) | |-------------------+------+----+-------------------------------| | |V:877,| |APT front-end to manage | |apt |I:999 |4211|packages with CLI: apt/apt-get/| | | | |apt-cache | |-------------------+------+----+-------------------------------| | |V:60, | |APT front-end to interactively | |aptitude |I:323 |4268|manage packages with full | | | | |screen console: aptitude(8) | |-------------------+------+----+-------------------------------| |tasksel |V:32, |346 |APT front-end to install | | |I:978 | |selected tasks: tasksel(8) | |-------------------+------+----+-------------------------------| | |V:295,| |セキュリティーアップデートの自 | |unattended-upgrades|I:468 |301 |動インストールを可能にする APT | | | | |の拡張パッケージ | |-------------------+------+----+-------------------------------|     |gnome-software |V:129,|3007|Software Center for GNOME (GUI | | |I:231 | |APT front-end) | |-------------------+------+----+-------------------------------| |synaptic |V:41, |7686|グラフィカルなパッケージマネー | | |I:350 | |ジャー (GTK APT フロントエンド)| |-------------------+------+----+-------------------------------| | | | |APT ユーティリティープログラム:| |apt-utils |V:340,|1030|apt-extracttemplates(1) と | | |I:998 | |apt-ftparchive(1) と | | | | |apt-sortpkgs(1) | |-------------------+------+----+-------------------------------| |apt-listchanges |V:316,|423 |パッケージ変更履歴の通知ツール | | |I:856 | | | |-------------------+------+----+-------------------------------| |apt-listbugs |V:6, |475 |APT による各インストール前にク | | |I:10 | |リチカルバグをリストする | |-------------------+------+----+-------------------------------| | |V:16, | |APT パッケージ探索ユーティリテ | |apt-file |I:74 |89 |ィー -- コマンドラインインター | | | | |フェース | |-------------------+------+----+-------------------------------| |apt-rdepends |V:0, |39 |パッケージの依存関係を再帰的に | | |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 random_package" でインストー ルしません。 * ランダムなパッケージを "dpkg --force-all -i random_package" で絶対インストールしません。 * "/var/lib/dpkg/" の中のファイルを消去や改変しません。 * ソースから直接コンパイルしたソフトウエアープログラムをインス トールする際にシステムファイルを上書きしません。 + 必要な場合は "/usr/local/" か "/opt/" 中にインストールし ます。     上記のアクションで起きる Debian パッケージシステムへのコンパチブ ルでない効果はシステムを使えなくするかもしれません。     ミッションクリティカルなサーバーを走らせる真剣な Debian システム 管理者は更なる用心をすべきです。 * 安全な条件下であなたの特定の設定で徹底的にテストすることなく セキュリティーアップデートをも含めた如何なるパッケージもイン ストールをしてはいけません。     + システム管理者のあなたがシステムに対して最終責任がありま す。 + Debian システムの長い安定性の歴史それ自体は何の保証でもあ りません。 2.1.3. 永遠のアップグレード人生 注意     あなたの業務サーバーには、セキュリティーアップデートをした安定版 stable スイーツを推薦します。管理に限られた時間しか割けないデスク トップ PC に関しても同様の事が言えます。     Despite my warnings above, I know many readers of this document may wish to run the newer testing or unstable suites. 以下に記すことにより悟りを開けば、アップグレード地獄という果てし     ない因果応報の葛藤から人は解脱し、Debian の涅槃の境地に到達できま す。     This list is targeted for the self-administered Desktop environment. * Use the testing suite since it is practically the rolling release automatically managed by the Debian archive QA infrastructure such as the Debian continuous integration, the source only upload practices, and the library transition tracking. The packages in the testing suite are updated frequently enough to offer all the latest features.     * Set the codename corresponding to the testing suite (currently "bookworm") in the "/etc/apt/sources.list". * Manually update this codename in the "/etc/apt/sources.list" to the new one only after assessing situation by yourself for about a month after the major suite release. The Debian user and developer mailing list are good sources of information for this, too. The use of the unstable suite isn't recommended. The unstable suite is good for debugging packages as a developer but tends to     expose you to unnecessary risks for the normal Desktop usage. Even though the unstable suite of the Debian system looks very stable for most of the times, there have been some package problems and a few of them were not so trivial to resolve.     Here are some basic precautionary measure ideas to ensure quick and easy recovery from bugs in Debian packages. * Debian システムの安定版 stable スイーツを別のパーティションに インストールし、システムをヂュアルブータブル化 * レスキューブートのためのインストール用 CD を手元に確保 * apt-listbugs をインストールしてアップグレードの前に Debian バ グトラッキングシステム (BTS) をチェックを考慮     * 問題回避するのに十分なだけのパッケージシステムの基盤を学習 * Install a corresponding sandboxed upstream binary package in case of trouble (see 「サンドボックス」) * chroot か類似の環境を作り事前に最新のシステムを実行 (「仮想化 システム」参照下さい) 注意     If you can not do any one of these precautionary actions, you are probably not ready for the testing and unstable suites. 2.1.4. Debian アーカイブの基本     Debian アーカイブをシステムユーザーの視点から見てみます。 ヒント     Debian アーカイブの正式のポリシーは Debian ポリシーマニュアル、第 2章 - Debian アーカイブに規定されています。 典型的な HTTP アクセスの場合、現在の安定版 stable=bullseye システ     ムを例にとると、次の様に "/etc/apt/sources.list" ファイルの中にア ーカイブは規定されています。 deb http://deb.debian.org/debian/ bullseye main contrib non-free deb-src http://deb.debian.org/debian/ bullseye main contrib non-free     deb http://security.debian.org/debian-security bullseye-security main contrib deb-src http://security.debian.org/debian-security bullseye-security main contrib     上記で、次の安定版 stable がリリースされて驚かされ無いように、私 はスイート名の "stable" でなくコード名の "bullseye" を使います。     "/etc/apt/sources.list" の意味は sources.list(5) に記載されていて 、要点は以下です。 * "deb" 行がバイナリーパッケージのための定義です。 * "deb-src" 行がソースパッケージのための定義です。 * 一番目の引数は、Debian アーカイブの root URL です。     * 二番目の引数は、スイーツ名かコード名のどちらかで与えられるデ ィストリビューション名です。 * 三番目次の引数は、Debian アーカイブの中の有効なアーカイブのエ リア名のリストです。 ソース関連のメタデーターにアクセスしない aptitude のためだけなら "deb-src" 行は安全に省略 (もしくは "#" を行頭に挿入してコメントア     ウト) することができます。こうするとアーカイブのメタデーターの更 新速度が向上します。URL は "http://" や "ftp://" や "file://" 等 々の何れも可能です。 ヒント もし上記の例で "bullseye" ではなく "sid" が使われる場合には、セキ     ュリティーアップデートのための "deb: http://security.debian.org/ ..." 行は不要です。安定版 stable とテスト版 testing (即ち bullseye と bookworm) にのみセキュリティーアップデートがあります 。 "sid" (不安定版 unstable) のためにはセキュリティーアップデート のアーカイブが存在しません。     次は設定ファイル内に用いられる Debian アーカイブサイトの URL とス イーツ名もしくはコード名です。 表2.2 Debian アーカイブサイトのリスト +---------------------------------------------------------------+ | アーカイブの URL | スイート名 (コード名) | 目的 | |-------------------+---------------------------+---------------| |http:// | |安定版 | |deb.debian.org/ |stable (bullseye) |(bullseye) のリ| |debian/ | |リース | |-------------------+---------------------------+---------------| |http:// | |テスト版 | |deb.debian.org/ |testing (bookworm) |(bookworm) のリ| |debian/ | |リース | |-------------------+---------------------------+---------------| |http:// | |不安定版 (sid) | |deb.debian.org/ |unstable (sid) |のリリース | |debian/ | | | |-------------------+---------------------------+---------------| |http:// | |実験的プリリリ | |deb.debian.org/ |experimental |ース (任意、開 | |debian/ | |発者専用) | |-------------------+---------------------------+---------------| | | |Updates for the| |http:// |stable-proposed-updates |next stable | |deb.debian.org/ |(bullseye-proposed-updates)|(bullseye) | |debian/ | |point release | | | |(optional) | |-------------------+---------------------------+---------------| | | |compatible |     |http:// | |updates for | |deb.debian.org/ |stable-updates |spam filter, IM| |debian/ |(bullseye-updates) |clients, etc. | | | |for stable | | | |(bullseye) | |-------------------+---------------------------+---------------| | | |newer | |http:// | |backported | |deb.debian.org/ |stable-backports |packages for | |debian/ |(bullseye-backports) |stable | | | |(bullseye) | | | |(optional) | |-------------------+---------------------------+---------------| | | |security | |http:// |stable-security |updates for | |security.debian.org|(bullseye-security) |stable release | |/debian-security/ | |(bullseye) | | | |(important) | |-------------------+---------------------------+---------------| | | |security | | | |updates for | |http:// | |testing release| |security.debian.org|testing-security |(This isn't | |/debian-security/ |(bookworm-security) |actively | | | |supported by | | | |the security | | | |team) | +---------------------------------------------------------------+ 注意 セキュリティーアップデートされた純粋な安定版 stable リリースのみ が最善の安定性を提供します。一部 testing や unstable 由来のパッケ     ージを混用してほとんど stable リリースを走らせることは、純粋な unstable リリースを走らせるよりリスクがあります。stable リリース の下で最新バージョンのいくつかのプログラムが本当に必要なら、 bullseye-updatesや http://backports.debian.org (「Updates と Backports」参照下さい) サービスからのパッケージを使って下さい。こ れらのサービスは細心の注意を持って使う必要があります。 注意 基本的に、stable か testing か unstable のスイーツの内の1つだけを "deb" 行に書くべきです。もし、stable と testing と unstable のス     イーツの何らかの組み合わせを "deb" 行に書けば、APT プログラムは、 最新のアーカイブのみが有効であるにもかかわらず、実行速度が低下し ます。"/etc/apt/preferences" ファイルがはっきりとした目的を持って 使われている場合 (「候補バージョンの調整」) のみ複数のリストに意 味があります。 ヒント     For the Debian system with the stable suite, it is a good idea to include lines with "http://security.debian.org/" in the "/etc/apt /sources.list" to enable security updates as in the example above. 注記 stable アーカイブのセキュリティーバグは Debian のセキュリティーチ ームにより修正されます。本活動は非常に厳格で信頼できるものです。 testing アーカイブのセキュリティーバグは Debian の testing セキュ     リティーチームにより修正されます。諸所の事情で、本活動は stable ほどは厳格ではなく、修正された unstable パッケージの移行を待つ必 要があるかもしれません。unstable アーカイブのセキュリティーバグは 個別のメンテナにより修正されます。活発にメンテされている unstable パッケージはアップストリームのセキュリティー修正を使うことで通常 比較的良い状態です。Debian がセキュリティーバグへ如何に対応するか に関しては Debian security FAQ を参照下さい。 表2.3 Debian アーカイブエリアのリスト +---------------------------------------------------------------+ | エリア |パッケー| パッケージ構成要素のクライテリア | | | ジ数 | | |--------+--------+---------------------------------------------| |main |67632 |DFSG に完全準拠し、non-free のパッケージに非 |     | | |依存 (main = 主要) | |--------+--------+---------------------------------------------| |contrib |337 |DFSG に完全準拠だが、non-free のパッケージに | | | |依存有り (contrib = 寄与) | |--------+--------+---------------------------------------------| |non-free|964 |非 DFSG 準拠 | +---------------------------------------------------------------+ ここで、上記にあるパッケージ数は amd64 アーキテクチャーに関する数     字です。main エリアのアーカイブのみが Debian システムです(「 Debian は 100% フリーソフトウェアーです」参照)。     Debian アーカイブの構成は、各アーカイブの URL の後ろに dists か pool をつけた URL にブラウザーを向ければ学習できます。 ディストリビューションは、スイーツとコード名の2つの方法で言及され     ます。この他にディストリビューションと言う言葉は多くの文書でスイ ーツの同義語としても使われています。スイーツとコード名の関係は次 のようにまとめられます。 表2.4 スイーツとコード名の関係 +---------------------------------------------------------------+ | タイミング |スイーツ = 安定|スイーツ = テス |スイーツ = 不安定| | | 版 stable | ト版 testing | 版 unstable | |------------+---------------+----------------+-----------------|     |bullseye リ |コード名 = |コード名 = |コード名 = sid | |リース後 |bullseye |bookworm | | |------------+---------------+----------------+-----------------| |bookworm リ |コード名 = |コード名 = |コード名 = sid | |リース後 |bookworm |trixie | | +---------------------------------------------------------------+     コード名の歴史は、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 のフリーソフトウエアー基準は非常に 厳格なものとなります。     典型的な 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"     + This declares a weak dependency like Suggests but works in the opposite direction. * "Breaks" + これは通常バージョン制約付きでパッケージのインコンパチビ リティーを宣言します。一般的にこのフィールドにリストされ た全てのパッケージをアップグレードすることで解決します。 * "Conflicts" + これは絶対的排他関係を宣言します。このフィールドにリスト された全てのパッケージを除去しない限り当該パッケージをイ ンストールできません。 * "Replaces" + 当該パッケージによりインストールされるファイルがこのフィ ールドにリストされたパッケージのファイルを置き換える際に これを宣言します。 * "Provides" + 当該パッケージがこのフィールドにリストされたパッケージの ファイルと機能の全てを提供する際にこれを宣言します。 注記     正常な設定として "Provides" と "Conflicts" と "Replaces" とを単一 バーチャルパッケージに対し同時宣言することがあります。こうすると いかなる時にも当該バーチャルパッケージを提供する実パッケージのう ち確実に一つだけがインストールされます。     ソースの依存関係をも含む正式の定義は the Policy Manual: Chapter 7 - Declaring relationships between packages にあります。 2.1.7. パッケージ管理のイベントの流れ     パッケージ管理の簡略化されたイベントの流れをまとめると次のように なります。 * 更新 ("apt update" か "aptitude update" か "apt-get update"): 1. アーカイブメタデーターをリモートアーカイブから取得 2. APT が使えるようローカルメタデーターの再構築と更新 * 更新 ("apt upgrade" と "apt full-upgrade"か、"aptitude safe-upgrade" と "aptitude full-upgrade" か、"apt-get upgrade" と "apt-get dist-upgrade"): 1. 全てのインストール済みパッケージに関して、通常最新の利用 可能なバージョンが選ばれる候補バージョンを選択 (例外につ いては「候補バージョンの調整」参照下さい) 2. パッケージ依存関係解決の実行 3. もし候補バージョンがインストール済みバージョンと異なる際 には、選ばれたバイナリーパッケージをリモートアーカイブか ら取得 4. 取得バイナリーパッケージの開梱 5. preinst スクリプトの実行 6. バイナリーファイルのインストール 7. postinst スクリプトの実行 * インストール ("apt install ..." か "aptitude install ..." か "apt-get install ..."): 1. コマンドラインにリストされたパッケージの選択 2. パッケージ依存関係解決の実行     3. 選ばれたバイナリーパッケージをリモートアーカイブから取得 4. 取得バイナリーパッケージの開梱 5. preinst スクリプトの実行 6. バイナリーファイルのインストール 7. postinst スクリプトの実行 * 削除 ("apt remove ..." か "aptitude remove ..." か "apt-get remove ..."): 1. コマンドラインにリストされたパッケージの選択 2. パッケージ依存関係解決の実行 3. prerm スクリプトの実行 4. 設定ファイル以外のインストール済みファイルの削除 5. postrm スクリプトの実行 * 完全削除 ("apt purge ..." か "aptitude purge ..." か "apt-get purge ..."): 1. コマンドラインにリストされたパッケージの選択 2. パッケージ依存関係解決の実行 3. prerm スクリプトの実行 4. 設定ファイルを含めたインストール済みファイルの削除 5. postrm スクリプトの実行     上記では全体像の理解のためにわざと技術詳細を端折っています。 2.1.8. パッケージ管理のトラブルへの応急対処法 内容が正確な正式文書を読むように心がけるべきです。まず Debian に 特定のことが記載された "/usr/share/doc/package_name/     README.Debian" を最初に読むべきです。また "/usr/share/doc/ package_name/" の中にある他の文書も参照すべきです。「Bash のカス タム化」に書かれたようなシェル設定がされていれば、次のようにタイ プして下さい。 $ cd package_name     $ pager README.Debian $ mc     さらに詳しい情報を得るには "-doc" というサフィクスを持った対応す る文書パッケージをインストールする必要があるかもしれません。     特定パッケージに関する問題に出会った際には、Debian バグトラッキン グシステム (BTS) サイトを必ず確認します。 表2.5 特定パッケージの問題解決のためのキーとなるウェッブサイトの リスト +---------------------------------------------------------------+ | ウェッブサイト | コマンド | |------------------------------+--------------------------------| |Debian バグトラッキングシステ |sensible-browser "http:// |     |ム (BTS) のホームページ |bugs.debian.org/" | |------------------------------+--------------------------------| |既知のパッケージに関するバグレ|sensible-browser "http:// | |ポート |bugs.debian.org/package_name" | |------------------------------+--------------------------------| |既知のバグ番号に関するバグレポ|sensible-browser "http:// | |ート |bugs.debian.org/bug_number" | +---------------------------------------------------------------+     "site:debian.org" や "site:wiki.debian.org" や "site:lists.debian.org" 等を含む検索語で Google を検索します。     バグ報告をする際には、reportbug(1) コマンドを使います。 2.2. 基本的パッケージ管理操作 Debian システム上でのレポジトリーを使ったパッケージ管理操作は     Debian システム上にある多くのAPTを使うパッケージ管理ツールを使い できます。ここでは、apt /apt-get / apt-cache や aptitude といった 3つの基本的なパッケージ管理ツールを説明します。     パッケージをインストールしたりパッケージのメタデーターを更新する ようなパッケージ管理操作には root 権限が必要です。 2.2.1. apt と apt-get/apt-cache と aptitude の比較     aptitude は筆者が主に使う非常に良いインタラクティブツールではあり ますが、注意すべき事実があることを知っておくべきです。 * stable(安定版) Debian システムにおいて、新リリースがあった後 の新リリースシステムへのアップグレードにaptitude コマンドを使 用することは推薦されません。 + それには、"apt full-upgrade" か "apt-get dist-upgrade" を 使うことが推薦されます。Bug #411280 参照ください。 * aptitude コマンドは時折testing(試験版) や unstable (不安定版) Debian システム上でシステムアップグレードをしようとする際に、 大量のパッケージ削除を提案することが時々あります。     + この状況は多くのシステム管理者を驚かせて来ました。パニッ クしないでください。 + このようなことは gnome-core の様なメタパッケージにより依 存・推薦されるパッケージ間のバージョンのずれにより発生す るようです。 + この状況は aptitude コマンドのメニューから "未実行アクシ ョンの取り消し" を選択し、aptitude を終了し、"apt full-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 を使って複数のバ ージョンのパッケージを管理できますが、それはとても面倒です。 apt コマンドはパッケージ管理のための上位コマンドラインインターフ     ェースです。基本的に apt-get や apt-cache 等のコマンドのラッパー で、インタラクティブな用途に良いオプションをデフォルトで有効にし てエンドユーザーインターフェース向けとなっています。 * apt は、apt install としてパッケージをインストールするとフレ ンドリーなプログレスバーを提供します。     * apt は、ダウンロードされたパッケージが上手くインストールされ た後、デフォルトでキャッシュされた .deb パッケージを削除しま す。 ヒント     ユーザーはインタラクティブ用途には apt(8) コマンドを使うことが推 奨されますし、シェルスクリプト中ではapt-get(8) や apt-cache(8) コ マンドを使うことが推奨されます。     aptitude コマンドは最も多芸なAPTを使うパッケージ管理ツールです。 * aptitude はフルスクリーンのインタラクティブなテキストユーザー インターフェースを提供します。 * aptitude はコマンドラインのユーザーインターフェースも提供しま す。 * aptitude はインストールされたパッケージを検査したり利用可能な パッケージを探索したりするような日常のインタラクティブなパッ     ケージ管理に最適です。 * aptitudeはハードウエアリソースへの要求が厳しい。メモリーの消 費は多く、実行速度も遅い。 * aptitude はパッケージメタデータ全てに関する拡張されたregex を 使った探索を提供します。 * aptitude は /etc/apt/preferences を使わずに複数のバージョンの パッケージを管理できますし、それは非常に直感的です。 2.2.2. コマンドラインによる基本的なパッケージ管理操作     apt(8) や aptitude(8) や apt-get(8) /apt-cache(8) を使うコマンド ラインによるパッケージ管理操作を次に記します。 表2.6 apt(8) や aptitude(8) や apt-get(8) /apt-cache(8) を使うコ マンドラインによる基本パッケージ管理操作 +---------------------------------------------------------------+ |apt シンタッ|aptitude シ | apt-get/ | | | クス | ンタックス |apt-cache シ| 説明 | | | | ンタックス | | |------------+------------+------------+------------------------| |apt update |aptitude |apt-get |パッケージアーカイブメタ| | |update |update |データー更新 | |------------+------------+------------+------------------------| |apt install |aptitude |apt-get |"foo" パッケージの候補バ| |foo |install foo |install foo |ージョンをその依存関係と| | | | |ともにインストール | |------------+------------+------------+------------------------| | | | |他のパッケージを削除する| |apt upgrade |aptitude |apt-get |こと無くインストール済み| | |safe-upgrade|upgrade |パッケージの候補バージョ| | | | |ンをインストール | |------------+------------+------------+------------------------| | | | |必要なら他のパッケージを| |apt |aptitude |apt-get |削除しながらインストール| |full-upgrade|full-upgrade|dist-upgrade|済みパッケージの候補バー| | | | |ジョンをインストール | |------------+------------+------------+------------------------| |apt remove |aptitude |apt-get |設定ファイルを残したまま| |foo |remove foo |remove foo |"foo" パッケージを削除 | |------------+------------+------------+------------------------| |apt |N/A |apt-get |既に必要なくなっている自| |autoremove | |autoremove |動済みパッケージを削除 | |------------+------------+------------+------------------------|     |apt purge |aptitude |apt-get |設定ファイルを含めて | |foo |purge foo |purge foo |"foo" パッケージを完全削| | | | |除 | |------------+------------+------------+------------------------| | |aptitude |apt-get |収集されローカルに貯蔵さ| |apt clean |clean |clean |れたパッケージファイルを| | | | |完全消去 | |------------+------------+------------+------------------------| | | | |収集されローカルに貯蔵さ| |apt |aptitude |apt-get |れたパッケージファイルの| |autoclean |autoclean |autoclean |うち古くなったパッケージ| | | | |を消去 | |------------+------------+------------+------------------------| |apt show foo|aptitude |apt-cache |"foo"パッケージに関する | | |show foo |show foo |詳細情報を表示 | |------------+------------+------------+------------------------| |apt search |aptitude |apt-cache |regex とマッチするパッケ| |regex |search regex|search regex|ージを検索 | |------------+------------+------------+------------------------| | |aptitude why| |なぜ regex とマッチする | |N/A |regex |N/A |パッケージがインストール| | | | |されるのかを説明 | |------------+------------+------------+------------------------| | |aptitude | |なぜ regex とマッチする | |N/A |why-not |N/A |パッケージがインストール| | |regex | |されないのかを説明 | |------------+------------+------------+------------------------| | |aptitude |apt-mark |手動インストールされたパ| |N/A |search '~i! |showmanual |ッケージをリスト | | |~M' | | | +---------------------------------------------------------------+     apt / apt-get and aptitude can be mixed without major troubles. "aptitude why regex" は "aptitude -v why regex" とすることで、さ     らに詳しい情報を表示します。同様の情報は "apt rdepends package" や "apt-cache rdepends package" とすることでも得られます。 aptitude コマンドが最初コマンドラインモードで実行されパッケージ間     のコンフリクトのような問題に直面した場合は、プロンプトがでた際に "e" を押すことでフルスクリーンのインタラクティブモードに切り替え られます。 注記 aptitude コマンドはその拡張されたパッケージリゾルバーのような豊富     なフィーチャーとともに提供されますが、この複雑さは Bug #411123 や Bug #514930 や Bug #570377 のようないくつかのリグレッションを引き 起こしました (また起こしているかもしれません)。疑義のある場合には 、aptitude コマンドに代えて apt や apt-get や apt-cache コマンド を使ってください。     "aptitude" のすぐ後ろにコマンドオプションをつけられます。 表2.7 aptitude(8) に関する特記すべきコマンドオプション +---------------------------------------------------------------+ |コマンドオプシ | 説明 | | ョン | | |---------------+-----------------------------------------------| |-s |コマンド結果のシミュレート |     |---------------+-----------------------------------------------| |-d |インストール / アップグレード無しにダウンロード| | |のみする | |---------------+-----------------------------------------------| |-D |自動的なインストールや削除の前に簡単な説明を表 | | |示 | +---------------------------------------------------------------+     詳細は aptitude(8) や "/usr/share/doc/aptitude/README" にある "aptitude user's manual" を参照下さい。 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 によるタグ付け状況を改善するのにご協力下さい !     標準 "パッケージ画面" はパッケージを dselect にいくつかの機能を加 えた感じで分類します。 表2.10 標準パッケージ画面の分類 +---------------------------------------------------------------+ | 分類 | ビューの説明 | |-----------------------------+---------------------------------| |更新可能なパッケージ |section → area → package と整理し| | |てパッケージをリスト | |-----------------------------+---------------------------------| |新規パッケージ |, , | |-----------------------------+---------------------------------| |インストール済みのパッケージ |, , |     |-----------------------------+---------------------------------| |インストールされていないパッ |, , | |ケージ | | |-----------------------------+---------------------------------| |廃止された、またはローカルで |, , | |作成されたパッケージ | | |-----------------------------+---------------------------------| |仮想パッケージ |同一機能のパッケージをリスト | |-----------------------------+---------------------------------| |タスク |タスクに一般的に必要な機能を持つ | | |パッケージのリスト | +---------------------------------------------------------------+ ヒント     Tasks ビューはあなたのタスクに使うパッケージをいいとこ取りするの に使えます。 2.2.6. aptitude を使った探索方法     Aptitude はその regex 式機能を通してパッケージを探索する方法をい くつか提供します。 * シェルコマンドライン: + マッチするパッケージのインストール状態やパッケージ名や短 い説明をリストをすには、"aptitude search 'aptitude_regex '" + パッケージの詳細説明のリストをするには、"aptitude show ' package_name'"     * 対話型フルスクリーンモード: + マッチするパッケージにパッケージビューを絞る、"l" + マッチするパッケージを探す、"/" + マッチするパッケージを逆方向に探す、"\" + 次を探す、"n" + 次を逆方向に探す、"N" ヒント     package_name という文字列は、"~" で始めて regex 式と明示されてい ない限り、パッケージ名との完全な一致検索として扱います。 2.2.7. aptitude の regex 式     aptitude の regex 式は mutt 的な拡張 ERE (「正規表現」参照下さい) で aptitude に特定なマッチ規則の拡張は次に示すとおりです。 表2.11 aptitude の regex 式のリスト +---------------------------------------------------------------+ |拡張マッチ規| regex 式 | | 則の説明 | | |------------+--------------------------------------------------| |パッケージ名|~n名前のregex | |とのマッチ | | |------------+--------------------------------------------------| |記述とのマッ|~d記述のregex | |チ | | |------------+--------------------------------------------------| |タスク名との|~tタスクのregex | |マッチ | | |------------+--------------------------------------------------| |debtag との |~Gdebtagのregex | |マッチ | | |------------+--------------------------------------------------| |メンテナとの|~mmaintainerのregex | |マッチ | | |------------+--------------------------------------------------| |パッケージセ| | |クションとの|~sセクションのregex | |マッチ | | |------------+--------------------------------------------------| |パッケージバ| | |ージョンとの|~Vバージョンのregex | |マッチ | | |------------+--------------------------------------------------| |アーカイブ | | |(archive) と|~A{bullseye,bookworm,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 | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| |type の壊れ | | |た依存関係を| | |宣言している|~Btype | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| |type の壊れ | | |た依存関係を| | |宣言している|~D[type:]pattern | |pattern パッ| | |ケージとマッ| | |チ | | |------------+--------------------------------------------------| |type の壊れ | | |た依存関係を| | |宣言している|~DB[type:]pattern | |pattern パッ| | |ケージとマッ| | |チ | | |------------+--------------------------------------------------| |pattern マッ| | |チするパッケ| | |ージが type | | |の依存関係を|~R[type:]pattern | |宣言している| | |パッケージと| | |マッチ | | |------------+--------------------------------------------------| |pattern マッ| | |チするパッケ| | |ージが type | | |の壊れた依存|~RB[type:]pattern | |関係を宣言し| | |ているパッケ| | |ージとマッチ| | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが依存|~R~i | |するパッケー| | |ジとマッチ | | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが一切|!~R~i | |依存しないパ| | |ッケージとマ| | |ッチ | | |------------+--------------------------------------------------| |他のインスト| | |ール済みパッ| | |ケージが依存|~R~i|~Rrecommends:~i | |もしくは推薦| | |するパッケー| | |ジとマッチ | | |------------+--------------------------------------------------| |フィルターさ| | |れたバージョ|~S filter pattern | |ンの pattern| | |とマッチ | | |------------+--------------------------------------------------| |常に全てのパ| | |ッケージにマ|~T | |ッチ (真) | | |------------+--------------------------------------------------| |どのパッケー| | |ジにもマッチ|~F | |しない (偽) | | +---------------------------------------------------------------+ * regex 部分は、"^" や ".*" や "$" などを使う egrep(1) や awk (1) や perl(1) といった典型的な Unix 的テキストツールで使われ る ERE と同様です。     * 依存関係を表す type はパッケージの相互関係を指定する (depends, predepends, recommends, suggests, conflicts, replaces, provides) の内の1つです。 * デフォールトの依存関係は "depends" です。 ヒント     regex_pattern がヌル文字列の場合は "~T" をコマンドの直後に使って 下さい。     次がショートカットです。 * "~Pterm" == "~Dprovides:term"     * "~Cterm" == "~Dconflicts:term" * "…~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 update; apt dist-upgrade"コマンドを実行すること でシステム全体のアップグレードができます。 安定版 stable からテスト版 testing や不安定版 unstable にアップグ     レードするには、「Debian アーカイブの基本」にある "/etc/apt/ sources.list" 例の "bullseye" を "bookworm" か "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 -plow パッ|もっとも詳細な質問で特定パッケージ | |ケージ名 |を再設定 | |---------------------------+-----------------------------------| |configure-debian |フルスクリーンメニューからパッケー | | |ジを再設定 | |---------------------------+-----------------------------------| |dpkg --audit |部分的にインストールされたパッケー | | |ジに関してシステムを監査 | |---------------------------+-----------------------------------| |dpkg --configure -a |全ての部分的にインストールされたパ | | |ッケージを設定 | |---------------------------+-----------------------------------| |apt-cache policy バイナリー|バイナリーパッケージに関して利用可 | |パッケージ名 |能なバージョンやプライオリティーや | | |アーカイブ情報を表示 | |---------------------------+-----------------------------------| |apt-cache madison パッケー |パッケージに関して利用可能なバージ | |ジ名 |ョンやアーカイブ情報を表示 | |---------------------------+-----------------------------------| |apt-cache showsrc バイナリ |バイナリーパッケージに関してソース | |ーパッケージ名 |パッケージの情報を表示 | |---------------------------+-----------------------------------|     |apt-get build-dep パッケー |パッケージをビルドするのに必要なパ | |ジ名 |ッケージをインストール | |---------------------------+-----------------------------------| |aptitude build-dep |パッケージをビルドするのに必要なパ | |package_name |ッケージをインストール | |---------------------------+-----------------------------------| |apt-get source パッケージ名|(標準アーカイブから) ソースをダウン| | |ロード | |---------------------------+-----------------------------------| |dget URL for dsc file |(他のアーカイブから) ソースをダウン| | |ロード | |---------------------------+-----------------------------------| |dpkg-source -x パッケージ名|ソースパッケージの組 ("*.tar.gz" と| |_バージョン-debianのレビジ |"*.debian.tar.gz" / "*.diff.gz") か| |ョン.dsc |らソースツリーをビルド | |---------------------------+-----------------------------------| |debuild binary |ローカルのソースツリーからパッケー | | |ジをビルド | |---------------------------+-----------------------------------| |make-kpkg kernel_image |カーネルソースツリーからカーネルパ | | |ッケージをビルド | |---------------------------+-----------------------------------| |make-kpkg --initrd |カーネルソースツリーから initramfs | |kernel_image |を有効にしてカーネルパッケージをビ | | |ルド | |---------------------------+-----------------------------------| |dpkg -i パッケージ名_バージ|ローカルパッケージをシステムにイン | |ョン-debianのレビジョン_ア |ストール | |ーキテクチャー名.deb | | |---------------------------+-----------------------------------| |apt install /path/to/ |自動的に依存関係を解決しながらロー | |package_filename.deb |カルパッケージをシステムにインスト | | |ールする | |---------------------------+-----------------------------------| |debi パッケージ名_バージョ |ローカルパッケージ (複数) をシステ | |ン-debianのレビジョン_アー |ムにインストール | |キテクチャー名.dsc | | |---------------------------+-----------------------------------| |dpkg --get-selections '*' >|dpkg レベルのパッケージ選択状態情報| |selection.txt |を保存 | |---------------------------+-----------------------------------| |dpkg --set-selections |dpkg レベルのパッケージ選択状態情報| | /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. 壊れたシステムからの復元     When running testing or unstable system, the administrator is expected to recover from broken package management situation. 注意     ここで説明するいくつかの方法は非常にリスクが高いアクションです。 警告しましたよ! 2.6.1. Failed installation due to missing dependencies If you force to install a package by "sudo dpkg -i ..." to a     system without all dependency packages installed, the package installation will fail as partially installed.     You should install all dependency packages using APT-system or "sudo dpkg -i ...".     Then, configure all partially installed packages with the following command.     # dpkg --configure -a 2.6.2. Caching errors of the package data     Caching errors of the package data cause intriguing errors, such as "GPG error: ... invalid: BADSIG ..." with APT. You should remove all cached data by "sudo rm -rf /var/lib/apt/*     " and try again. (If apt-cacher-ng is used, you should also run "sudo rm -rf /var/cache/apt-cacher-ng/* ".) 2.6.3. 古いユーザーの設定との非互換性 If a desktop GUI program experienced instability after significant upstream version upgrade, you should suspect     interference with old local configuration files created by it. If it is stable under a newly created user account, this hypothesis is confirmed. (This is a bug of packaging and usually avoided by the packager.) 安定性を復元するには、対応するローカル設定ファイルを移動し GUI プ     ログラムを再スタートします。後日設定情報を回復するために古い設定 ファイルの内容を読む必要があるかもしれません。(あまり慌てて消去し ないようにしましょう。) 2.6.4. 重複するファイルを持つ相異なるパッケージ aptitude(8) や apt-get(1) 等の、アーカイブレベルのパッケージ管理     システムはパッケージの依存関係を使って重複するファイルを持つファ イルのインストールしようとさえしません (「パッケージ依存関係」参 照下さい)。 パッケージメインテナによるエラーや、システム管理者による不整合な 混合ソースのアーカイブの採用 (「混合したアーカイブソースからのパ ッケージ」参照下さい) があった場合には、パッケージ依存関係が誤っ     て定義される事態が発生するかもしれません。そういう状況下で重複す るファイルを持つパッケージを aptitude(8) や apt-get(1) を使ってイ ンストールしようとすると、パッケージを展開する dpkg(1) は既存ファ イルを上書きすることなく呼ばれたプログラムにエラーを確実に返しま す。 注意     第三者が作成したパッケージを使うと、root 権限で実行されるシステム に関して何でもできるメンテナスクリプトが実行されるので、システム が重大なリスクにさらされます。dpkg(1) はパッケージを展開するする さいに上書きする事を防止するだけです。     そのような壊れたインストール状況は、まず古い問題原因となっている パッケージ old-package を削除すれば回避できます。     $ sudo dpkg -P old-package 2.6.5. 壊れたパッケージスクリプトの修正 パッケージスクリプト内のコマンドが何らかの理由でエラーを返しスク リプトがエラーで終了した場合には、パッケージ管理システムは動作を     途中終了するので部分的にインストールされたパッケージのある状況が 生まれます。パッケージがその削除スクリプト内にバグを持つ場合には 、パッケージが削除不能になりうるので大変厄介です。     "パッケージ名" のパッケージスクリプトの問題に関しては、次のパッケ ージスクリプトの内容を確認するべきです。 * "/var/lib/dpkg/info/パッケージ名.preinst" * "/var/lib/dpkg/info/パッケージ名.postinst"     * /var/lib/dpkg/info/パッケージ名.prerm * "/var/lib/dpkg/info/パッケージ名.prerm"     スクリプトの問題原因部分を次のようなテクニックを使い root から編 集します。 * 行頭に "#" を挿入し問題行を無効にする     * 行末に "|| true" を挿入し成功を強制的に返さす     Then, follow 「壊れたシステムからの復元」. 2.6.6. dpkg コマンドを使っての救済 dpkg は非常に低レベルのパッケージツールなのでネットワーク接続もな     いブート不能な非常に劣悪な状況下でも機能します。foo パッケージが 壊れていて置き換える必要があると仮定します。 バグの無い古いバージョンの foo パッケージが "/var/cache/apt/ archives/" にあるパッケージキャッシュの中に見つかるかもしれません     。(ここにみつからなければ、https://snapshot.debian.org/ アーカイ ブからダウンロードしたり、機能している機器のパッケージキャッシュ からコピーできます。)     もしブート不可能な場合には、次のコマンドを使ってインストールする こともできます。     # dpkg -i /path/to/foo_old_version_arch.deb ヒント     システムがそれほど壊れていないなら、「緊急ダウングレード」に書か れているようにして、より高レベルの APT システムを通じてシステム全 体をダウングレードする手もあります。     ハードディスクからブートできない場合は、他の方法でのブート方法を 考えるべきです。 1. Debian インストーラー (debian-installer) の CD を使ってレスキ ューモードでブートします。     2. ブートできないハードディスク上のシステムを "/target" にマウン トします。 3. 古いバージョンの foo パッケージを次のようにしてインストールし ます。     # dpkg --root /target -i /path/to/foo_old_version_arch.deb     この例は、たとえハードディスク上の dpkg コマンドが壊れていても機 能します。 ヒント     ハードディスク上の別のシステムであれ、GNU/Linux のライブ CD であ れ、ブート可能な USB キードライブであれ、ネットブートであれ、どの ように起動された GNU/Linux システムでも同様にして壊れたシステムを 救済するのに使えます。 もしこの方法でパッケージをインストールしようとして何らかの依存関 係違反のためにうまくいかなくてどうしようもなくなった場合には、     dpkg の "--ignore-depends" や "--force-depends" や他のオプション を使って依存関係をオーバーライドすることができます。こうした場合 には、後で適正な依存関係を修復するように真剣に取り組む必要があり ます。詳細は dpkg(8) を参照下さい。 注記     システムがひどく壊れた場合には、システムを安全な場所に完全バック アップし (「バックアップと復元」参照下さい)、クリーンインストール を実行するべきです。こうすることは時間の節約でもあり最終的に良い 結果に結びつきます。 2.6.7. パッケージセレクションの復元 もし何らかの理由で "/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): "デスクトップ環境" のようなタスクにリストされ たパッケージ * 依存パッケージにより選ばれたパッケージ (例えば、gcc による gcc-10)     * ポプコン: 投票やインストールの数が多い * changelog: メンテナによる定期的アップデート * BTS: RC bug が無いこと (critical も grave も serious もいずれ のバグも無い) * BTS: バグレポートに反応の良いメンテナ * BTS: 最近修正されたバグの数が多い * BTS: wishlist 以外のバグが少ない Debian は分散型の開発モデルのボランティアプロジェクトですので、そ     のアーカイブには目指すところや品質の異なる多くのパッケージがあり ます。これらをどうするかは自己判断をして下さい。 2.7.2. 混合したアーカイブソースからのパッケージ 注意     安定版 (stable) と security updates と bullseye-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. 候補バージョンの調整 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 "/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 を利用する際には、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 アーカイブと設定されます。     複数アーカイブソースの package に関する Pin-Priority 値は "apt-cache policy package" の出力で表示されます。 * "Package pin:" で始まる行は、package のみとの関連付けが "Package pin: 0.190" 等と定義されている場合に、pin のパッケー ジバージョンを示します。 * package とのみの関連付けが定義されていない場合には、"Package pin:" という行はありません。 * package とのみの関連付けが定義されている場合の Pin-Priority     値は、全バージョン文字列の右側に "0.181 700" 等としてリストさ れます。 * package とのみの関連付けが定義されていない場合には、全バージ ョン文字列の右側に "0" が"0.181 0" 等としてリストされます。 * アーカイブの Pin-Priority 値 ("/etc/apt/preferences" ファイル 中に "Package: *" として定義) はアーカイブへのパスの左側に、 "100 http://deb.debian.org/debian/ bullseye-backports/main Packages" 等としてリストされます。 2.7.4. Updates と Backports     There are bullseye-updates and backports.debian.org archives which provide upgrade packages for stable (bullseye).     これらのアーカイブを使うには、以下に示すように "/etc/apt/ preferences" ファイル中に全ての必要なアーカイブをリストします。 deb http://deb.debian.org/debian/ bullseye main contrib non-free     deb http://security.debian.org/debian-security bullseye-security main contrib deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free deb http://deb.debian.org/debian/ bullseye-backports main contrib non-free "/etc/apt/preferences" ファイル中に Pin-Priority 値を明示的に設定 する必要はありません。より新しいパッケージが利用可能となった場合     はいつも、デフォルトの設定によりもっとも合理的なアップグレードが なされます (「アーカイブレベルの "Release" ファイル」参照下さい) 。 * 全てのインストールされている古いパッケージが bullseye-updates からのより新しいパッケージにアップグレードされます。     * bullseye-backports からインストールしされた古いパッケージのみ が bullseye-backports からのより新しいパッケージにアップグレ ードされます。 "package-name" という名前のパッケージをその依存関係ともども     bullseye-backports アーカイブからインストールしたい時には、"-t" オプションでターゲットリリースを切り替えながら次のコマンドを使い ます。     $ sudo apt-get install -t bullseye-backports package-name 2.7.5. "推奨 (Recommends)" によりパッケージがインストールされるのを阻 止 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 たとえ "推奨 (Recommends)" されていても自動的に特定のパッケージが     引きこまれ無くしたいときには、"/etc/apt/preferences" ファイルを作 成しその中に全てのパッケージを次のように明示的にリストしなければ いけません。 Package: package-1 Pin: version * Pin-Priority: -1     Package: package-2 Pin: version * Pin-Priority: -1 2.7.6. unstable からのパッケージと共に、testing を追いかける 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 testing を追跡しながら、unstable にある特定の新規アップストリーム     バージョンのパッケージが定常的にアップグレードされる、apt-pinning テクニックの例を次に示します。全ての必要なアーカイブを "/etc/apt/ sources.list" ファイル中に次のようにリストします。 deb http://deb.debian.org/debian/ testing main contrib non-free     deb http://deb.debian.org/debian/ unstable main contrib non-free deb http://security.debian.org/debian-security testing-security main contrib     "/etc/apt/preferences" を次のように設定します。 Package: *     Pin: release a=unstable Pin-Priority: 100 "package-name" という名前のパッケージとその依存ファイルを     unstable アーカイブからこの設定の下でインストールしたい場合、"-t" オプションを使ってターゲットのリリースを切り替える (unstable の Pin-Priority が990 になる) 次のコマンドを実行します。     $ sudo apt-get install -t unstable package-name この設定では、通常の "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: package-1 Pin: release a=unstable Pin-Priority: 700     Package: package-2 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://deb.debian.org/debian/ unstable main contrib non-free     deb http://deb.debian.org/debian/ experimental main contrib non-free deb http://security.debian.org/ testing-security main contrib experimental アーカイブのデフォールトの Pin-Priority 値は、 NotAutomatic アーカイブ (「アーカイブレベルの "Release" ファイル 」参照下さい) なので、常に1 (<<100) です。experimental アーカイブ     にある特定パッケージを次回アップグレード時に自動的に追跡しようと しない限り、"/etc/apt/preferences" ファイル中で experimental アー カイブを使うために Pin-Priority 値を明示的に設定する必要はありま せん。 2.7.8. パッケージの自動ダウンロードとアップグレード 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 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. 緊急ダウングレード 警告     初心者のユーザーによる apt-pinning の利用は大トラブル発生を間違い なく起こします。本当に必要な時以外は apt-pinning の利用は避けなけ ればいけません。 注意 Debian では設計としてはダウングレードを正式にサポートしません。緊     急の復元処置の一部としてのみ実行されるべきです。こういう状況であ るにもかかわらず、多くの場合にうまく機能することが知られています 。重要なシステムでは回復処置の後に全ての重要データーをバックアッ プし、最初から新規システムを再インストールします。 壊れたシステムアップグレードからの復元するために、候補バージョン を操作して新しいアーカイブから古いアーカイブにダウングレードする     ことがうまくいくかもしれません (「候補バージョンの調整」参照下さ い)。これは、何度も "dpkg -i broken-package_old-version.deb" コマ ンドを実行する退屈な作業をしないでよくする方法です (「dpkg コマン ドを使っての救済」参照下さい)。     次に記すような "unstable" を追跡する "/etc/apt/sources.list" ファ イル中の行を探します。     deb http://deb.debian.org/debian/ sid main contrib non-free     それを testing を追いかけるように次と交換します。     deb http://deb.debian.org/debian/ bookworm 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: optional Section: admin Description: Circumventing Debian package dependencies This package provides a tool to create trivial Debian packages. Typically these packages contain only dependency information, but they can also include normal installed files like other packages do.     . One use for this is to create a metapackage: a package whose sole purpose is to declare dependencies and conflicts on other packages so that these will be automatically installed, upgraded, or removed. . Another use is to circumvent dependency checking: by letting dpkg think a particular package name and version is installed when it isn't, you can work around bugs in other packages' dependencies. (Please do still file such bugs, though.) 2.7.13. 安定版システムへのパッケージ移植 stable システムの部分アップグレードのためには、その環境内でソース     パッケージを使ってパッケージをリビルドするのが好ましいです。こう することでパッケージ依存関係による大掛かりなアップグレードをしな いで済みます。     stable システムのための "/etc/apt/sources.list" ファイルに次のエ ントリーを追加します。     deb-src http://deb.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:0,| |Debian アーカイブファイルのキャッシュプ| |approx |I:0 |6610|ロキシサーバー (コンパイルされた OCaml |     | | | |プログラム) | |-------------+----+----+---------------------------------------| |apt-cacher |V:0,|266 |Debian パッケージとソースファイルのキャ| | |I:0 | |ッシュプロキシ (Perl プログラム) | |-------------+----+----+---------------------------------------| | |V:4,| |ソフトウエアーパッケージの頒布ためのキ | |apt-cacher-ng|I:5 |1816|ャッシュプロキシ (コンパイルされた C++ | | | | |プログラム) | +---------------------------------------------------------------+ 注意     Debian がそのアーカイブ構造を再編した際に、このような専用のプロキ シツールはパッケージメンテナによるコードの修正が必要で、一定期間 使えなくなることがあります。一方、汎用のウェッブ (http) プロキシ は比較的堅牢ですしそのような変化に合わすのも簡単です。 2.7.15. パッケージ管理の追加参考文書     パッケージ管理に関しては次の文書からさらに学習できます。 * パッケージ管理の一義的文書: + aptitude(8) と dpkg(1) と tasksel(8) と apt(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 Maintainer 向け案内書". 第3章システムの初期化 Debian システムが以下に起動され設定されるかの知っていることはシス     テム管理者として賢明です。正確で詳細な情報がインストールされたパ ッケージのソースや文書中にあるとは言え、我々の大部分にとってはち ょっと大変過ぎます。 Here is a rough overview of the key points of the Debian system     initialization. Since the Debian system is a moving target, you should refer to the latest documentation. * Debian Linux Kernel Handbook is the primary source of information on the Debian kernel.     * systemd に準拠するシステムのブートアッププロセスは bootup(7) に詳述されている。 (最新の Debian) * UNIX System V Release 4 に準拠するシステムのブートアッププロ セスは boot(7) に詳述されている。 (過去の Debian) 3.1. ブートストラッププロセスの概要 コンピューターシステムは、電源投入イベントからユーザーに機能の完     備したオペレーティングシステム (OS) を提供するまでブートストラッ ププロセスを数段通過します。     単純化のため、デフォールトのインストールをした典型的な PC プラッ トフォームに限定し議論します。     典型的なブートストラッププロセスは4段ロケットのようです。各段のロ ケットは次の段のロケットにシステムのコントロールを引き継ぎます。 * 「1段目: UEFI」 * 「2段目: ブートローダー」     * 「3段目: ミニ Debian システム」 * 「4段目: 通常の Debian システム」 もちろん、これらに関して異なる設定をすることはできます。例えば、     自分自身で専用カーネルをコンパイルした場合、ミニ Debian システム のステップをスキップできます。自分自身で確認するまでは、あなたの システムがこの様になっていると決めつけないで下さい。 3.1.1. 1段目: UEFI The Unified Extensible Firmware Interface (UEFI) defines a boot manager as part of the UEFI specification. When a computer is powered on, the boot manager is the 1st stage of the boot process which checks the boot configuration and based on its settings, then executes the specified OS boot loader or operating system kernel (usually boot loader). The boot configuration is defined     by variables stored in NVRAM, including variables that indicate the file system paths to OS loaders or OS kernels. An EFI system partition (ESP) is a data storage device partition that is used in computers adhering to the UEFI specification. Accessed by the UEFI firmware when a computer is powered up, it stores UEFI applications and the files these applications need to run, including operating system boot loaders. (On the legacy PC system, BIOS stored in the MBR may be used instead.) 3.1.2. 2段目: ブートローダー ブートローダーは UEFI によって起動されるブートプロセスの2段目です 。それはシステムのカーネルイメージと initrd イメージをメモリーに     ロードし、それらにコントロールを引き継ぎます。この initrd イメー ジはルートファイルシステムイメージで、そのサポートは使われるブー トローダーによります。 The Debian system normally uses the Linux kernel as the default     system kernel. The initrd image for the current 5.x Linux kernel is technically the initramfs (initial RAM filesystem) image.     多くのブートローダと設定オプションが利用可能です。 表3.1 ブートローダーのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイ|initrd|ブートロ| 説明 | | |コン | ズ | | ーダー | | |--------------+-----+----+------+--------+---------------------| | | | | | |This is smart enough | | | | |サポー|GRUB |to understand disk | |grub-efi-amd64|I:259|159 |ト |UEFI |partitions and | | | | | | |filesystems such as | | | | | | |vfat, ext4, …. (UEFI)| |--------------+-----+----+------+--------+---------------------| | | | | | |This is smart enough | | |V:23,| |サポー| |to understand disk | |grub-pc |I:709|534 |ト |GRUB 2 |partitions and | | | | | | |filesystems such as | | | | | | |vfat, ext4, …. (BIOS)| |--------------+-----+----+------+--------+---------------------| | | | | | |GRUB 2 のブート可能な| |grub-rescue-pc|V:0, |6422|サポー|GRUB 2 |レスキューイメージ | | |I:1 | |ト | |(CD とフロッピー) (PC| | | | | | |/BIOS バージョン) | |--------------+-----+----+------+--------+---------------------|     | |V:0, | |サポー| |ハードディスク上のセ | |lilo |I:1 |697 |ト |Lilo |クター位置に依存しま | | | | | | |す。(旧式) | |--------------+-----+----+------+--------+---------------------| | | | | | |ISO9660 ファイルシス | |syslinux |V:3, |344 |サポー|Isolinux|テムを理解します。ブ | | |I:41 | |ト | |ート CD に使われてい | | | | | | |ます。 | |--------------+-----+----+------+--------+---------------------| | | | | | |MSDOS ファイルシステ | |syslinux |V:3, |344 |サポー|Syslinux|ム (FAT) 理解します。| | |I:41 | |ト | |ブートフロッピーで使 | | | | | | |われます。 | |--------------+-----+----+------+--------+---------------------| | |V:0, | |サポー| |新しいシステムが | |loadlin |I:0 |90 |ト |Loadlin |FreeDOS/MSDOS システ | | | | | | |ムから起動されます。 | |--------------+-----+----+------+--------+---------------------| | | | | | |MSDOS の MBR を代替す| | |V:0, | |非サポ|Neil |るフリーソフトウエア | |mbr |I:5 |50 |ート |Turton |ーです。ディスクパー | | | | | |の MBR |ティションを理解する | | | | | | |だけです。 | +---------------------------------------------------------------+ 警告     grub-rescue-pc パッケージのイメージから作ったブート可能なレスキュ ーメディア (CD かフロッピー) 無しにブートローダーを試してはいけま せん。これさえあると、ハードディスク上に機能するブートローダーが 無くともシステムの起動ができます。 For UEFI system, GRUB2 first reads the ESP partition and uses     UUID specified for search.fs_uuid in "/boot/efi/EFI/debian/ grub.cfg" to determine the partition of the GRUB2 menu configuration file "/boot/grub/grub.cfg".     The key part of the GRUB2 menu configuration file looks like: menuentry 'Debian GNU/Linux' ... { load_video insmod gzio insmod part_gpt insmod ext2     search --no-floppy --fs-uuid --set=root fe3e1db5-6454-46d6-a14c-071208ebe4b1 echo 'Loading Linux 5.10.0-6-amd64 ...' linux /boot/vmlinuz-5.10.0-6-amd64 root=UUID=fe3e1db5-6454-46d6-a14c-071208ebe4b1 ro quiet echo 'Loading initial ramdisk ...' initrd /boot/initrd.img-5.10.0-6-amd64 }     For this part of /boot/grub/grub.cfg, this menu entry means the following. 表3.2 The meaning of the menu entry of the above part of /boot/ grub/grub.cfg +---------------------------------------------------------------+ | 設定 | 変数値 | |------------------------+--------------------------------------| |GRUB2 modules loaded |gzio, part_gpt, ext2 | |------------------------+--------------------------------------| |root file system |partition identified by UUID= | |partition used |fe3e1db5-6454-46d6-a14c-071208ebe4b1 |     |------------------------+--------------------------------------| |kernel image path in the|/boot/vmlinuz-5.10.0-6-amd64 | |root file system | | |------------------------+--------------------------------------| |kernel boot parameter |"root=UUID= | |used |fe3e1db5-6454-46d6-a14c-071208ebe4b1 | | |ro quiet" | |------------------------+--------------------------------------| |initrd image path in the|/boot/initrd.img-5.10.0-6-amd64 | |root file system | | +---------------------------------------------------------------+ ヒント     You can enable to see kerrnel boot log messages by removing quiet in "/boot/grub/grub.cfg". For the persistent change, please edit "GRUB_CMDLINE_LINUX_DEFAULT="quiet"" line in "/etc/default/grub". ヒント     You can customize GRUB splash image by setting GRUB_BACKGROUND variable in "/etc/default/grub" pointing to the image file or placing the image file itself in "/boot/grub/".     "info grub" と grub-install(8) を参照下さい。 3.1.3. 3段目: ミニ Debian システム ミニ Debian システムはブートローダーによって起動されるブートプロ     セスの3段目です。メモリー上でルートファイルシステムとともにシステ ムカーネルを実行します。これはオプションの起動プロセスの準備段階 です。 注記     "ミニ Debian システム" は著者がこの3段目のブートプロセスを本文書 中で記述するために作った言葉です。このシステムは一般に initrd と か initramfs システムと呼ばれています。類似のメモリー上のシステム は Debian インストーラーでも使われています。 "/init" スクリプトはこのメモリー上のルートファイルシステムで最初 に実行されるプログラムです。それはユーザー空間でカーネルを初期化     し次の段階にコントロールを引き継ぐプログラムです。このミニ Debian システムは、メインのブートプロセスが始まる前にカーネルモジュール を追加したり、ルートファイルシステムを暗号化されたファイルシステ ムとしてマウントする等のブートプロセスの柔軟性を提供します。 * initramfs-tools で initramfs が作成された場合には "/init" プ ログラムはシェルプログラムです。 + "break=init" 等をカーネルブートパラメーターとして与えると 、本部分のブートプロセスに割り込み root シェルを獲得でき ます。この他の割り込み条件は "/init" スクリプトを参照下さ い。このシェル環境はあなたの機器のハードウエアーを詳細に 検査できるだけ十分洗練されています。     + このミニ Debian システムで利用可能なコマンドは機能を削っ たコマンドで、主に busybox(1) という GNU ツールで提供され ます。 * dracut で initramfs が作成された場合には "/init" プログラムは バイナリーの systemd プログラムです。 + このミニ Debian システムで利用可能なコマンドは機能を削っ た systemd(1) 環境です。 注意     読出しのみのルートファイルシステム上では、mount コマンドには "-n" オプションを使う必要があります。 3.1.4. 4段目: 通常の Debian システム 通常の Debian システムはミニ Debian システムによって起動されるブ ートプロセスの4段目です。ミニ Debian システムのシステムカーネルは     この環境ででも実行され続けます。ルートファイルシステムはメモリー 上から本当にハードディスク上にあるファイルシステムに切り替えられ ます。 多くのプログラムを起動する主ブートプロセスを行う init プログラム は、PID=1 で最初のプログラムとして実行されます。init プログラムの     デフォールトのファイルパスは "/sbin/init" ですが、"init=/path/to/ init_program" のようなカーネルブートパラメーターにより変更できま す。     Debian 8 jessie (2015年リリース) 以降では "/sbin/init" は "/lib/ systemd/systemd" にシムリンクされています。 ヒント     あなたのシステム上の実際の init コマンドは "ps --pid 1 -f" コマン ドで確認できます。 表3.3 Debian システムののブートユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |-------------------+------+----+-------------------------------| | |V:870,| |並行処理のためのイベント依存の | |systemd |I:951 |9566|init(8) デーモン (sysvinit 代 | | | | |替) | |-------------------+------+----+-------------------------------| | |V:835,| |systemd で sysvinit を置換する | |systemd-sysv |I:949 |71 |のに必要な、マニュアルページと | | | | |リンク | |-------------------+------+----+-------------------------------| |init-system-helpers|V:689,|140 |sysvinit と systemd 間を切り替 | | |I:960 | |える補助ツール | |-------------------+------+----+-------------------------------| |initscripts |V:50, |177 |システムの始動と停止のためのス | | |I:199 | |クリプト | |-------------------+------+----+-------------------------------| |sysvinit-core |V:6, |342 |System-V 的な init(8) ユーティ | | |I:7 | |リティー | |-------------------+------+----+-------------------------------| |sysv-rc |V:102,|85 |System-V 的なランレベル変更メカ| | |I:212 | |ニズム |     |-------------------+------+----+-------------------------------| |sysvinit-utils |V:908,|100 |System-V 的なユーティリティー | | |I:999 | |(startpar(8)、bootlogd(8)、…) | |-------------------+------+----+-------------------------------| |lsb-base |V:901,|12 |Linux Standard Base 3.2 の init| | |I:989 | |スクリプト機能 | |-------------------+------+----+-------------------------------| |insserv |V:126,|153 |LSB init.d スクリプト依存関係を| | |I:210 | |使いブート順序を整理するツール | |-------------------+------+----+-------------------------------| | |V:1, | |Linux が提供するユーザースペー | |uswsusp |I:4 |714 |スソフトウエアーによるサスペン | | | | |ドを使うためのツール | |-------------------+------+----+-------------------------------| |kexec-tools |V:1, |286 |kexec(8) リブートのための kexec| | |I:7 | |ツール (ワームリブート) | |-------------------+------+----+-------------------------------| |systemd-bootchart |V:0, |132 |ブートプロセスのパーフォンマン | | |I:1 | |スアナライザー | |-------------------+------+----+-------------------------------| |mingetty |V:0, |38 |コンソール専用 getty(8) | | |I:3 | | | |-------------------+------+----+-------------------------------| |mgetty |V:0, |315 |インテリジェントモデム用の代替 | | |I:0 | |getty(8) | +---------------------------------------------------------------+ ヒント     ブートプロセスを高速化する最新のティップは Debian wiki: BootProcessSpeedup を参照下さい。 3.2. Systemd init     このセクションは PID=1 (詰まり、init プロセス)の systemd(1) プロ グラムがどのようにシステムを起動するのかを説明します。 The systemd init process spawns processes in parallel based on     the unit configuration files (see systemd.unit(5)) which are written in declarative style instead of SysV-like procedural style. The spawned processes are placed in individual Linux control     groups named after the unit which they belong to in the private systemd hierarchy (see cgroups and 「Linux のセキュリティ機能」).     The unit configuration files are loaded from a set of paths (see systemd-system.conf(5)) as follows: * "/lib/systemd/system": OS のデフォルトの設定ファイル * "/etc/systemd/system": OS デフォルト設定ファイルをオーバーラ     イドするシステム管理者設定ファイル * "/run/systemd/system": OS デフォルト設定ファイルをオーバーラ イドする実行時生成される設定ファイル 相互依存関係は "Wants="、"Requires="、"Before="、"After="、 …     ("MAPPING OF UNIT PROPERTIES TO THEIR INVERSES" in systemd.unit (5) 参照) 等の指示定義によって規定される。リソースのコントロール は (systemd.resource-control(5) 参照)によっても定義される。     unit 設定ファイルのサッフィックスにそのタイプを折込みます: * *.service は systemd がコントロールしたりスーパーバイズするプ ロセスを記述します。systemd.service(5) 参照ください。 * *.device は sysfs(5) 中に udev(7) デバイスツリーとして暴露さ れるデバイスを記述します。See systemd.device(5) を参照くださ い。 * *.mount は systemd がコントロールしたりスーパーバイズするファ イルシステムのマウントポイントを記述します。systemd.mount(5) を参照ください。 * *.automount は systemd がコントロールしたりスーパーバイズする ファイルシステムの自動マウントポイントを記述します。 systemd.automount(5) を参照ください。 * *.swap は systemd がコントロールやスーパーバイズするスワップ デバイスやファイルを記述します。systemd.swap(5) を参照くださ い。     * *.path は systemd がパス基準で起動するために監視するパスを記 述します。systemd.path(5) を参照ください。 * *.socket は systemd がソケット基準で起動するためにコントロー ルしたりスーパーバイズするソケットを記述します。 systemd.socket(5) を参照ください。 * *.timer は systemd がタイマー基準で起動するためにコントロール したりスーパーバイズするタイマーを記述します。systemd.timer (5) を参照ください。 * *.slice は cgroups(7) でリソースを管理します。systemd.slice (5) を参照ください。 * *.scope はシステムプロセスの集合を systemd のバスインターフェ ースを用いて管理するためにプログラムで作られます。 systemd.scope(5) を参照ください。 * *.target は他の unit設定ファイルを組み合わせて始動時同期点を 作ります。systemd.target(5) を参照ください。 システムの始動 (init) されると systemd プロセスは (通常 "graphical.target" にシムリンクされている) "/lib/systemd/system/ default.target を起動しようとします。. 最初に、"local-fs.target"     や "swap.target" や "cryptsetup.target" 等のいくつかの特殊ターゲ ット unit (systemd.special(7) 参照) が引き込まれファイルシステム をマウントします。そして、他のターゲット unit が、ターゲット unit の依存関係で引き込まれます。詳細に関しては bootup(7) を読んで下さ い。 systemd はバックワードコンパティビリティー機能を提供します。"/etc     /init.d/rc[0123456S].d/[KS]name" 中の、SysV-スタイルのブートスク リプトは依然として読み込まれ処理されますし、telinit(8) は systemd の unit 有効化要求に変換されます。 注意     擬似実装された runlevel の 2 から 4 は、すべて同じ "multi-user.target" にシムリンクされます。 3.2.1. ホスト名 カーネルがシステムのホスト名を維持管理します。 systemd-hostnamed.service により起動されたシステム unit が "/etc/     hostname" に保存された名前を使ってブート時にホスト名を設定します 。このファイルには、完全修飾ドメイン名ではなく、システムのホスト 名のみが含まれているべきです。     現在のホスト名を確認するには、hostname(1) を引数無しで実行します 。 3.2.2. ファイルシステム 通常のディスクやネットワークのファイルシテムのマウントオプション     は "/etc/fstab" で設定されます。fstab(5) と「マウントオプションに よるファイルシステムの最適化」を参照下さい。     暗号化されたファイルシステムの設定は "/etc/crypttab" で設定されま す。crypttab(5) を参照ください。     mdadm(8) を用いるソフトウエアー RAID は "/etc/mdadm/mdadm.conf" で設定されます。mdadm.conf(5) を参照ください。 警告     各ブートアップごとに、全てのファイルシステムをマウントした後で、" /tmp" と "/var/lock" と "/var/run" 中の一時ファイルはクリーンされ ます。 3.2.3. ネットワークインターフェースの初期化 最近の systemd下の Debian デスクトップ環境では、ネットワークイン     ターフェースは、lo が "networking.service" で、他のインターフェー スが "NetworkManager.service" で通常初期化されます。     どのように設定するのかは 5章ネットワークの設定を参照下さい。. 3.3. カーネルメッセージ     コンソールに表示されるカーネルのエラーメッセージは、その閾値て設 定できる。     # dmesg -n3 表3.4 カーネルエラーレベルのリスト +--------------------------------------------------------------+ |エラーレベル値|エラーレベル名| 意味 | |--------------+--------------+--------------------------------| |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.4. システムメッセージ Under systemd, both kernel and system messages are logged by the journal service systemd-journald.service (a.k.a journald) either     into a persistent binary data below "/var/log/journal" or into a volatile binary data below "/run/log/journal/". These binary log data are accessed by the journalctl(1) command. For example, you can display log from the last boot as:     $ journalctl -b 表3.5 List of typical journalctl command snippets +---------------------------------------------------------------+ | 操作 | コマンド断片 | |-------------------------------------------+-------------------| |View log for system services and kernel |"journalctl -b | |from the last boot |--system" | |-------------------------------------------+-------------------|     |View log for services of the current user |"journalctl -b | |from the last boot |--user" | |-------------------------------------------+-------------------| |View job log of "$unit" from the last boot |"journalctl -b -u | | |$unit" | |-------------------------------------------+-------------------| |View job log of "$unit" ("tail -f" style) |"journalctl -b -u | |from the last boot |$unit -f" | +---------------------------------------------------------------+ Under systemd, the system logging utility rsyslogd(8) may be uninstalled. If it is installed, it changes its behavior to read the volatile binary log data (instead of pre-systemd default "/     dev/log") and to create traditional permanent ASCII system log data. This can be customized by "/etc/default/rsyslog" and "/etc/ rsyslog.conf" for both the log file and on-screen display. See rsyslogd(8) and rsyslog.conf(5). See also 「ログアナライザー」. 3.5. System management     The systemd offers not only init system but also generic system management operations with the systemctl(1) command. 表3.6 List of typical systemctl command snippets +---------------------------------------------------------------+ | 操作 | コマンド断片 | |------------------------------------+--------------------------| |全ターゲットユニット設定をリスト |"systemctl list-units | | |--type=target" | |------------------------------------+--------------------------| |全サービスユニット設定をリスト |"systemctl list-units | | |--type=service" | |------------------------------------+--------------------------| |全ユニット設定タイプをリスト |"systemctl list-units | | |--type=help" | |------------------------------------+--------------------------| |メモリー中の全ソケット unit のリスト|"systemctl list-sockets" | |------------------------------------+--------------------------| |メモリー中の全タイマー unit のリスト|"systemctl list-timers" | |------------------------------------+--------------------------| |"$unit" 始動 |"systemctl start $unit" | |------------------------------------+--------------------------| |"$unit" 停止 |"systemctl stop $unit" | |------------------------------------+--------------------------| |サービス特定の設定の再ロード |"systemctl reload $unit" | |------------------------------------+--------------------------| |"$unit" 停止と始動 |"systemctl restart $unit" | |------------------------------------+--------------------------| |"$unit" 始動と、他全ての停止 |"systemctl isolate $unit" | |------------------------------------+--------------------------| |"graphical" に切り替え(GUI システム)|"systemctl isolate | | |graphical" | |------------------------------------+--------------------------| |"multi-user" に切り替え(CLI システ |"systemctl isolate | |ム) |multi-user" | |------------------------------------+--------------------------| |"rescue" に切り替え(シングルユーザー|"systemctl isolate rescue"| |CLI システム) | | |------------------------------------+--------------------------| |"$unit" に kill 信号を送る |"systemctl kill $unit" | |------------------------------------+--------------------------| |"$unit" サービスがアクティブかを確認|"systemctl is-active | | |$unit" | |------------------------------------+--------------------------| |"$unit" サービスが失敗かを確認 |"systemctl is-failed | | |$unit" | |------------------------------------+--------------------------| |"$unit|$PID|device" の状態を確認 |"systemctl status $unit| | | |$PID|$device" | |------------------------------------+--------------------------| |"$unit|$job" の属性を表示 |"systemctl show $unit| |     | |$job" | |------------------------------------+--------------------------| |失敗した "$unit" をリセット |"systemctl reset-failed | | |$unit" | |------------------------------------+--------------------------| |全ての unit サービスの依存関係をリス|"systemctl | |ト |list-dependencies --all" | |------------------------------------+--------------------------| |システムにインストールされた unit フ|"systemctl | |ァイルをリスト |list-unit-files" | |------------------------------------+--------------------------| |"$unit" を有効にする(symlink 追加) |"systemctl enable $unit" | |------------------------------------+--------------------------| |"$unit" を無効にする(symlink 削除) |"systemctl disable $unit" | |------------------------------------+--------------------------| |"$unit" のマスクを外す("/dev/null" |"systemctl unmask $unit" | |へのsymlink を削除) | | |------------------------------------+--------------------------| |"$unit" にマスクをかける("/dev/null"|"systemctl mask $unit" | |へのsymlink を追加) | | |------------------------------------+--------------------------| |デフォールトのターゲット設定を取得 |"systemctl get-default" | |------------------------------------+--------------------------| |"graphical" にデフォールトのターゲッ|"systemctl set-default | |トを設定 (GUI システム) |graphical" | |------------------------------------+--------------------------| |"multi-user" にデフォールトのターゲ |"systemctl set-default | |ットを設定 (CLI システム) |multi-user" | |------------------------------------+--------------------------| |ジョブ環境の表示 |"systemctl | | |show-environment" | |------------------------------------+--------------------------| |ジョブ環境 "variable"(変数)を "value|"systemctl set-environment| |(値)に設定する" |variable=value" | |------------------------------------+--------------------------| |ジョブ環境 "variable" (変数)の設定を|"systemctl | |解除する |unset-environment | | |variable" | |------------------------------------+--------------------------| |全 unit ファイルとデーモンを再起動 |"systemctl daemon-reload" | |------------------------------------+--------------------------| |システムをシャットダウンする |"systemctl poweroff" | |------------------------------------+--------------------------| |システムのシャットダウンと再起動 |"systemctl reboot" | |------------------------------------+--------------------------| |システムのサスペンド |"systemctl suspend" | |------------------------------------+--------------------------| |システムのハイバーネート |"systemctl hibernate" | +---------------------------------------------------------------+ ここで、上記の例の中の "$unit" は単一の unit 名 (.service や .target といったサフィックスは任意) とか、多くの場合、現在メモリ     ー中の全 unit の主名称に対して fnmatch(3) を用いて"*" や "?" や " []" 等のシェルスタイルのグロブによる複数 unit 指定であっても良い 。     上記例中のシステムの状態を変えるコマンドは必要な管理特権を獲得さ せるべく "sudo" を通常前置する。     "systemctl status $unit|$PID|$device" の出力は色付きドット ("●") を使い unit の状態が一目瞭然とされる。 * 白い "●" は "活動停止" や "停止済み" の状態を示す。     * 赤い "●" は "失敗発生" や "エラー発生" の状態を示す。 * 緑の "●" は "活動中" や "再起動中" や "起動中" の状態を示す。 3.6. Other system monitors     Here are a list of other monitoring command snippets under systemd. Please read the pertinent manpages including cgroups(7). 表3.7 List of other monitoring command snippets under systemd +---------------------------------------------------------------+ | 操作 | コマンド断片 | |--------------------------------------+------------------------| |それぞれの初期化ステップにかかった時間|"systemd-analyze time" | |を表示する | | |--------------------------------------+------------------------| |初期化にかかった時間を全ての unit に関|"systemd-analyze blame" | |してリストする | | |--------------------------------------+------------------------| |読み込み "$unit" ファイル中のエラーを |"systemd-analyze verify | |検出する。 |$unit" | |--------------------------------------+------------------------|     |Show terse runtime status information |"loginctl user-status" | |of the user of the caller's session | | |--------------------------------------+------------------------| |Show terse runtime status information |"loginctl | |of the caller's session |session-status" | |--------------------------------------+------------------------| |cgroups を用いてブートプロセスを追跡す|"systemd-cgls" | |る | | |--------------------------------------+------------------------| |cgroups を用いてブートプロセスを追跡す|"ps xawf -eo | |る |pid,user,cgroup,args" | |--------------------------------------+------------------------| |cgroups を用いてブートプロセスを追跡す|"/sys/fs/cgroup/systemd/| |る |" の下の sysfs を読む | +---------------------------------------------------------------+ 3.7. systemd のカスタム化 3.7.1. ソケットの起動 デフォルトのインストールでは、多くのネットワークサービス(6章ネッ トワークアプリケーションを参照) はブート時に systemd によってブー     ト時に network.target の後に起動される。"sshd" も例外ではありませ ん。カスタム化の例としてオンデマンド起動に "sshd" をかえましょう 。     最初に、システムがインストールしたサービスの unit を無効化しまし ょう。     $ sudo systemctl stop sshd.service $ sudo systemctl mask sshd.service 古典的 Unix サービスでは indetd (または xinetd) スーパーサーバー     によりオンデマンドでソケットを有効化していました。systemd では、 *.socket や *.service unit 設定ファイルを追加することでこれと同等 のことができます。     聞くソケットを指定するには sshd.socket [Unit] Description=SSH Socket for Per-Connection Servers [Socket]     ListenStream=22 Accept=yes [Install] WantedBy=sockets.target     sshd.socket に対応するサービスファイルの sshd@.service [Unit] Description=SSH Per-Connection Server     [Service] ExecStart=-/usr/sbin/sshd -i StandardInput=socket     そして、再ロードします。     $ sudo systemctl daemon-reload 3.8. udev システム udev システムはハードウエアーの自動検出と初期化のメカニズムを提供 します (udev(7) 参照下さい)。カーネルが各デバイスを発見すると、 udev システムは sysfs ファイルシステム (「procfs と sysfs」参照下     さい) からの情報を使いユーザープロセスを起動し、modprobe(8) プロ グラム (「カーネルモジュール初期化」参照下さい) を使ってそれをサ ポートする必要なカーネルモジュールをロードし、対応するデバイスノ ードを作成します。 ヒント もし "/lib/modules/kernel-version/modules.dep" が何らかの理由で depmod(8) によって適正に生成されていなかった場合には、モジュール は udev システムによる期待にそってロードされないかもしれません。     これを修正するには、"depmod -a" を実行します。 "/etc/fstab" 中のマウントルールでは、デバイス名が静的なデバイス名 である必要がありません。"/dev/sda" 等のデバイス名ではなく UUID を 使ってデバイスをマウントできます。「UUID を使ってパーティションを アクセス」を参照下さい。     udev システムは少々動くターゲットなので、詳細は他のドキュメントに 譲り、ここでは最小限の記述に止めます。 3.8.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/version/     modules.dep" ファイルは、modprobe(8) プログラムによって使われるモ ジュール依存関係を記述します。 注記     ブート時に modprobe(8) を使ってのモジュールロードの問題に出会った 場合には、"depmod -a" として "modules.dep" を再構築をするとこの様 な問題が解消できるかもしれません。     modinfo(8) プログラムは Linux カーネルモジュールに関する情報を表 示します。     lsmod(8) プログラムは "/proc/modules" の内容を読みやすい形式にし て、どのカーネルモジュールが現在ロードされているかを表示します。 ヒント あなたのシステム上の正確なハードウエアーを特定します。「ハードウ エアーの識別」を参照下さい。     ブート時に期待されるハードウエアー機能を有効となるように設定もで きます。「ハードウエアー設定」を参照下さい。 あなたのデバイスのサポートは、カーネルを再コンパイルすれば追加で きます。「カーネル」を参照下さい。 第4章認証とアクセスの制御     人 (またはプログラム) がシステムへのアクセスの要求をした際に、認 証はその正体が信頼できるものだと確認します。 警告     PAM の設定のエラーはあなたをあなた自身のシステムから締め出すかも 知れません。レスキュー CD を手元に置くか代替ブートパーティション 設定を必ずします。復元するには、それらを使ってシステムをブートし そこから修正します。 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 |"user_name" のアカウント情報の閲覧 | |user_name | | |-------------------+-------------------------------------------| |getent shadow |"user_name" のシャドーされたアカウント情報 | |user_name |の閲覧 |     |-------------------+-------------------------------------------| |getent group |"group_name" のグループ情報の閲覧 | |group_name | | |-------------------+-------------------------------------------| |passwd |アカウントのパスワード管理 | |-------------------+-------------------------------------------| |passwd -e |アカウント開設のための一回だけ使えるパスワ | | |ードの設定 | |-------------------+-------------------------------------------| |chage |パスワードのエージング情報管理 | +---------------------------------------------------------------+     一部機能が機能するには root 権限が必要な場合があります。パスワー ドとデーターの暗号化は crypt(3) を参照下さい。 注記     Debian が提供する salsa 機器と同様な 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:27, |380 |mkpasswd |crypt(3) ライブラリーの充実しす| | |I:308 | | |ぎたフロントエンド | |-------+--------+----+---------+-------------------------------| |openssl|V:842, |2269|openssl |パスワードハッシュの計算 | | |I:995 | |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:883,|1030 |差し替え可能な認証モジュール | | |I:999 | |(基本サービス) | |-------------------+------+-----+------------------------------| | |V:1, | |LDAP インターフェースを可能に | |libpam-ldap |I:11 |241 |する差し替え可能な認証モジュー| | | | |ル | |-------------------+------+-----+------------------------------| |libpam-cracklib |V:1, |117 |cracklib のサポートを可能にす | | |I:14 | |る差し替え可能な認証モジュール| |-------------------+------+-----+------------------------------| | |V:476,| |logind のために登録ユーザーセ | |libpam-systemd |I:909 |525 |ッションを登録するプラガブルオ| | | | |ーセンティケーション (PAM) | |-------------------+------+-----+------------------------------| |libpam-doc |I:1 |957 |差し替え可能な認証モジュール | | | | |(html と text の文書) |     |-------------------+------+-----+------------------------------| | |V:930,| |GNU C ライブラリー: "ネームサ | |libc6 |I:999 |12977|ービススイッチ" も提供する共有| | | | |ライブラリー | |-------------------+------+-----+------------------------------| |glibc-doc |I:10 |3447 |GNU C ライブラリー: マンページ| |-------------------+------+-----+------------------------------| | | | |GNU C ライブラリー: info と | |glibc-doc-reference|I:4 |13174|pdf と html フォーマットでのリ| | | | |ファレンスマニュアル | | | | |(non-free) | |-------------------+------+-----+------------------------------| |libnss-mdns |I:490 |141 |マルチキャスト DNS を使った名 | | | | |前解決のための NSS モジュール | |-------------------+------+-----+------------------------------| |libnss-ldap |I:9 |265 |LDAP をネームサービスとして使 | | | | |う NSS モジュール | |-------------------+------+-----+------------------------------| | |V:1, | |LDAP をネームサービスとして使 | |libnss-ldapd |I:15 |154 |う 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 は個別プログラムに関する環境変数をシステム全体のデフォールト 値に初期化する最も基本的な手段です。 systemd の下では、logind のために systemd のコントロールグループ 階層中にユーザーセッションを登録することでユーザーのログインを管     理すべくlibpam-systemd パッケージがインストールされている。 systemd-logind(8) や logind.conf(5) や pam_systemd(8) を参照くだ さい。 4.5.1. PAM と NSS によってアクセスされる設定ファイル     PAM と NSS がアクセスする注目すべき設定ファイルを次に記します。 表4.6 PAM NSS によりアクセスされる設定ファイルのリスト +---------------------------------------------------------------+ |設定ファイル | 機能 | |-------------+-------------------------------------------------| |/etc/pam.d/プ|"program_name" に関する 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 | | |-------------+-------------------------------------------------| |/etc/systemd/|systemd ログイン管理設定の設定(logind.conf(5) と | |logind.conf |systemd-logind.service(8) を参照) | +---------------------------------------------------------------+     パスワード選択の制限は 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 パッケージをインストールすると、より厳格なパスワ ード規則を強制できます。     On a typical GNOME system which automatically installs libpam-gnome-keyring, "/etc/pam.d/common-password" looks like: # here are the per-package modules (the "Primary" block) password requisite pam_cracklib.so retry=3 minlen=8 difok=3 password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt # here's the fallback if no module succeeds password requisite pam_deny.so     # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around password required pam_permit.so # and here are more per-package modules (the "Additional" block) password optional pam_gnome_keyring.so # end of pam-auth-update config 4.6. 認証のセキュリティー 注記     ここに書かれている情報はあなたのセキュリティーのニーズに充分では ないかもしれませんが、良いスタートです。 4.6.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.6.2. セキュアーシェル セキュアーシェル (SSH) プログラムはセキュアーな認証とともにインセ キュアーなネットワークを通過したお互いに信頼し合っていないホスト 間のセキュアーで暗号化された通信を可能にします。OpenSSH クライア     ント ssh(1) と OpenSSH デーモン sshd(8) から成り立っています。SSH はポートフォーワーディング機能を使い POP や X のようなインセキュ アープロトコルの通信をインターネット経由でトンネルするのに使えま す。 クライアントは、ホストベースド認証、公開鍵認証、チャレンジレスポ ンス認証、パスワード認証を使って認証をとろうとします。公開鍵認証     を利用すると、リモートからのパスワード無しログインができるように なります。「リーモートアクセスサーバーとユーティリティー (SSH)」 を参照下さい。 4.6.3. インターネットのためのセキュリティー強化策 Even when you run secure services such as Secure Shell (SSH) and Point-to-point tunneling protocol (PPTP) servers, there are still     chances for the break-ins using brute force password guessing attack etc. from the Internet. Use of the firewall policy (see 「 Netfilter インフラ」) together with the following security tools may improve the security situation. 表4.8 追加セキュリティー策を提供するツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコン|サイ| 説明 | | | | ズ | | |-------------+--------+----+-----------------------------------| |knockd |V:0, I:3|109 |small port-knock daemon knockd(1) |     | | | |and client knock(1) | |-------------+--------+----+-----------------------------------| |fail2ban |V:111, |2127|複数回の認証エラーを発生させる IP | | |I:125 | |を使用禁止にします | |-------------+--------+----+-----------------------------------| |libpam-shield|V:0, I:0|115 |パスワード推測によるリモートからの | | | | |攻撃者を締め出す | +---------------------------------------------------------------+ 4.6.4. root パスワードのセキュリティー確保     あなたの機器に他人が root 権限を持ってアクセスするのを阻止するに は、次のアクションが必要です。 * ハードディスクへの物理的アクセスを阻止 * UEFI/BIOS をロックして、リムーバブルメディアからの起動を阻止     * GRUB のインタラクティブセッションのパスワードを設定 * GRUB のメニュー項目編集に施錠     ハードディスクへの物理的アクセスがあれば、パスワードをリセットす ることは次の手順を使うと比較的簡単です。 1. ハードディスクを CD から起動可能な UEFI/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" パーティション) を使うことです。でも、パスワードがシステム起 動毎に必要になってしまいます。 4.7. 他のアクセスコントロール     There are access controls to the system other than the password based authentication and file permissions. 注記     カーネルのセキュアーアテンションキー (SAK) 機能の制限は「 Alt-SysRq キー」を参照下さい。 4.7.1. sudo sudo はシステム管理者がユーザーに制限付きの root 権限を与え、その root 活動を記録するように設計されたプログラムです。sudo はユーザ     ーの通常パスワードだけが必要です。sudo パッケージをインストールし 、"/etc/sudoers" の中のオプションを設定することによりアクティベー トして下さい。"/usr/share/doc/sudo/examples/sudoers" や「sudo の 設定」の設定例を参照下さい。 単一ユーザーシステムにおける私の sudo の使い方 (「sudo の設定」参 照下さい) は自分自身の失敗からの防衛を目指しています。sudo を使う     ことは、常に root アカウントからシステムを使うよりは良い方法だと 個人的には考えます。例えば、次は "some_file" の所有者を "my_name" に変更します。     $ sudo chown my_name some_file root のパスワード (自分でシステムインストールをした Debian ユーザ     ーなら当然知っています) を知っていれば、どのユーザーアカウントか らいかなるコマンドも "su -c" とすれば root もとで実行できます。 4.7.2. PolicyKit     PolicyKit は Unix系オペレーティングシステムにおけるシステム全体の 特権を制御するオペレーティングシステム構成要素です。 新しいGUIアプリケーションは、特権プロセスとして実行するように設計     されていません。それらは、PolicyKitを経由し管理操作を実行する特権 プロセスに話しかけます。     PolicyKitは、このような操作をDebianシステム上のsudoグループ所属の ユーザーアカウントに限定します。     polkit(8)を参照下さい。 4.7.3. サーバーのサービスへのアクセスの制限 システムのセキュリティーのためにできるだけ多くのサーバープログラ ムを無効とするのは良い考えです。このことはネットワークサーバーの     場合は決定的です。直接デーモンとしてであれスーパーサーバープログ ラム経由であれ有効にされている使っていないサーバーがあることはセ キュリティーリスクと考えられます。 sshd(8) 等の多くのプログラムが PAM を使ったアクセスコントロールを     使っています。サーバーサービスへのアクセスを制限するには多くの方 法があります。 * 設定ファイル: "/etc/default/プログラム名" * デーモンに関する systemd サービス unit 設定 * 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 インフラのネットワークファイアーウォール     「System management」と「PAM と NSS によってアクセスされる設定フ ァイル」と「Netfilter インフラ」を参照下さい。 ヒント     NFS 他の RPC を使うプログラムためには Sun RPC サービスはアクティ ブにする必要があります。 ヒント     もし現代的な Debian システムでリモートアクセスで問題に会った場合 には、"/etc/hosts.deny" 中に "ALL:PARANOID" 等の問題となっている 設定があればコメントアウトします。(ただしこの種の行為に関するセキ ュリティーリスクに注意を払わなければいけません。) 4.7.4. Linux のセキュリティ機能     Linux kernel has evolved and supports security features not found in traditional UNIX implementations.     Linux supports extended attributes which extend the traditional UNIX attributes (see xattr(7)). Linux divides the privileges traditionally associated with     superuser into distinct units, known as capabilities(7), which can be independently enabled and disabled. Capabilities are a per-thread attribute since kernel version 2.2. The Linux Security Module (LSM) framework provides a mechanism     for various security checks to be hooked by new kernel extensions. For example: * AppArmor * Security-Enhanced Linux (SELinux)     * Smack (Simplified Mandatory Access Control Kernel) * Tomoyo Linux Since these extensions may tighten privilege model tighter than     the ordinary Unix-like security model policies, even the root power may be restricted. You are advised to read the Linux Security Module (LSM) framework document at kernel.org. Linux namespaces wrap a global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource.     Changes to the global resource are visible to other processes that are members of the namespace, but are invisible to other processes. Since kernel version 5.6, there are 8 kinds of namespaces (see namespaces(7), unshare(1), nsenter(1)).     As of Debian 11 Bullseye (2021), Debian uses unified cgroup hierarchy (a.k.a. cgroups-v2).     Usage examples of namespaces with cgroups to isolate their processes and to allow resource control are: * Systemd. See 「Systemd init」.     * サンドボックス環境。「サンドボックス」を参照。 * Linux containers such as Docker, LXC. See 「仮想化システム」. These functionalities can't be realized by 「通常の Unix 認証」.     These advanced topics are mostly out-of-scope for this introductory document. 第5章ネットワークの設定 ヒント     最近の Debian に特化したネットワーク設定のガイドは The Debian Administrator's Handbook — Configuring the Network を参照下さい。 ヒント     systemd の下では、networkd がネットワーク管理に使えます。 systemd-networkd(8)y> を参照ください。 5.1. 基本的ネットワークインフラ     現代的な Debian システムの基本的ネットワークインフラをレビューし ます。 表5.1 GUI のネットワーク設定ツール +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | タイプ | 説明 | | | ン | ズ | | | |---------------------+------+-----+-------------+--------------| | | | | |NetworkManager| |network-manager |V:362,|14799|設定::NM |(デーモン): ネ| | |I:427 | | |ットワークを自| | | | | |動管理 | |---------------------+------+-----+-------------+--------------| | |V:121,| | |NetworkManager| |network-manager-gnome|I:353 |5570 |設定::NM |(GNOME フロン | | | | | |トエンド) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークを| | |V:578,| |設 |接続したり切断| |ifupdown |I:984 |199 |定::ifupdown |したりする標準| | | | | |化されたツール| | | | | |(Debian 特定) | |---------------------+------+-----+-------------+--------------| |isc-dhcp-client |V:217,|2857 |設定::低レベ |DHCP クライア | | |I:981 | |ル |ント | |---------------------+------+-----+-------------+--------------| | |V:0, | |設定::ヘルパ |PPPoE コネクシ| |pppoeconf |I:7 |192 |ー |ョンの設定ヘル| | | | | |パー | |---------------------+------+-----+-------------+--------------| | | | | |WPA と WPA2 | |wpasupplicant |V:328,|3851 |, , |(IEEE 802.11i)| | |I:485 | | |のためのクライ| | | | | |アントサポート| |---------------------+------+-----+-------------+--------------| | |V:0, | | |wpa_supplicant| |wpagui |I:2 |758 |, , |の Qt GUI クラ| | | | | |イアント | |---------------------+------+-----+-------------+--------------| | |V:163,| | |Linux のワイヤ| |wireless-tools |I:220 |292 |, , |レス拡張を操作| | | | | |するツール | |---------------------+------+-----+-------------+--------------| | |V:157,| | |Linux のワイヤ| |iw |I:453 |302 |, , |レスデバイスを| | | | | |設定するツール| |---------------------+------+-----+-------------+--------------| | | | | |iproute2、IPv6| | |V:704,| |設 |や他の上級ネッ| |iproute2 |I:958 |3514 |定::iproute2 |トワーク設定: | | | | | |ip(8) や tc(8)| | | | | |等 | |---------------------+------+-----+-------------+--------------| | | | | |パケットフィル| |iptables |V:314,|2408 |設 |ターと NAT の | | |I:890 | |定::Netfilter|ための管理ツー| | | | | |ル (Netfilter)| |---------------------+------+-----+-------------+--------------| | | | | |ホスト名か IP | | | | | |アドレスによっ| | |V:199,| | |てリモートホス| |iputils-ping |I:997 |120 |テスト |トのネットワー| | | | | |クからの到達性| | | | | |をテスト (旧来| | | | | |、GNU) | |---------------------+------+-----+-------------+--------------| | | | | |ARP アドレスに| | | | | |よって特定され| |iputils-arping |V:4, |49 |テスト |るリモートホス| | |I:57 | | |トのネットワー| | | | | |クからの到達性| | | | | |をテスト | |---------------------+------+-----+-------------+--------------| | |V:3, | | |リモートホスト| |iputils-tracepath |I:40 |45 |テスト |へのネットワー| | | | | |クパスを追跡 | |---------------------+------+-----+-------------+--------------| | |V:97, | | |Ethernet デバ | |ethtool |I:278 |668 |テスト |イス設定の表示|     | | | | |と変更 | |---------------------+------+-----+-------------+--------------| | | | | |リモートホスト| | |V:6, | |テスト::低レ |へのネットワー| |mtr-tiny |I:53 |161 |ベル |クパスを追跡す| | | | | |るツール | | | | | |(curses) | |---------------------+------+-----+-------------+--------------| | | | | |リモートホスト| | | | | |へのネットワー| |mtr |V:4, |214 |, , |クパスを追跡す| | |I:44 | | |るツール | | | | | |(curses と | | | | | |GTK) | |---------------------+------+-----+-------------+--------------| | | | | |共通のネットワ| |gnome-nettool |V:1, |2492 |, , |ーク情報操作の| | |I:25 | | |ためのツール | | | | | |(GNOME) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークマ| | |V:25, | | |ッパー / ポー | |nmap |I:224 |4434 |, , |トスキャナー | | | | | |(Nmap、コンソ | | | | | |ール) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークマ| |zenmap |V:0, |2939 |, , |ッパー / ポー | | |I:2 | | |トスキャナー | | | | | |(GTK) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークト| | |V:16, | | |ラフィックアナ| |tcpdump |I:196 |1332 |, , |ライザー | | | | | |(Tcpdump、コン| | | | | |ソール) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークト| | | | | |ラフィックアナ| |wireshark |I:48 |37 |, , |ライザー | | | | | |(Wireshark、 | | | | | |GTK) | |---------------------+------+-----+-------------+--------------| | | | | |ネットワークト| |tshark |V:2, |403 |, , |ラフィックアナ| | |I:29 | | |ライザー (コン| | | | | |ソール) | |---------------------+------+-----+-------------+--------------| | |V:0, | | |tcpdump の出力| |tcptrace |I:2 |401 |, , |から接続状況の| | | | | |まとめを作成 | |---------------------+------+-----+-------------+--------------| | |V:0, | | |柔軟なネットワ| |snort |I:1 |2203 |, , |ーク侵入検知シ| | | | | |ステム (Snort)| |---------------------+------+-----+-------------+--------------| | | | | |ネットワークの| |ntopng |V:1, |15904|, , |使用状況をウェ| | |I:1 | | |ッブブラウザー| | | | | |で表示 | |---------------------+------+-----+-------------+--------------| | | | | |BIND によって | | | | | |提供されるネッ| | |V:26, | | |トワーククライ| |dnsutils |I:372 |259 |, , |アント: | | | | | |nslookup(8) と| | | | | |nsupdate(8) と| | | | | |dig(8) | |---------------------+------+-----+-------------+--------------| | | | | |ネームサーバー| |dlint |V:0, |53 |, , |の閲覧で DNS | | |I:5 | | |のゾーン情報を| | | | | |チェック | |---------------------+------+-----+-------------+--------------| | |V:0, | | |DNS サーバーを| |dnstracer |I:1 |61 |, , |その源流まで追| | | | | |跡 | +---------------------------------------------------------------+ 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 host_name     # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters     各行は IP アドレスで始まり、関連するホスト名がそれに続きます。 本例の2行目の IP アドレス 127.0.1.1 は他の Unix 系システムでは見 かけないかもしれません。bug #719621 に記録されているように、     Debian インストーラーは恒久的 IP アドレスのないシステムのために一 部ソフトウエアー (GNOME等) のための回避策としてこの項目を作成しま す。     host_name は、"/etc/hostname" の中に定義されたホスト名と一致しま す。     恒久的 IP アドレスを持つシステムでは 127.0.1.1 の代えてその恒久的 IP アドレスがここにあるべきです。 恒久的 IP アドレスと Domain 名システム (DNS)が提供する完全修飾ド     メイン名 (FQDN) を持つシステムでは、その標準的な host_name(ホスト 名).domain_name(ドメイン名) が host_name(ホスト名) のみに代えて使 われるべきです。 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. ネットワークインターフェース名     systemd は "enp0s25" のような "予測可能なネットワークインターフェ ース名" を用います。 5.1.3. LAN のためのネットワークアドレス範囲 rfc1918 によってローカルエリアネットワーク (LAN) での使用に予約さ     れている各クラス毎の IPv4 32ビットアドレス範囲を確認します。これ らのアドレスは本来のインターネット上のアドレスとかち合う事が無い ことが保証されています。 注記     コロンのついた IP アドレスは IPv6 アドレスです。たとえば "::1" は localhost です。 表5.2 ネットワークアドレス範囲のリスト +---------------------------------------------------------------+ |クラ|ネットワークアドレス|ネットマスク |ネットマスク / | of | | ス | | | ビット |subnets| |----+--------------------+-------------+---------------+-------| |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. デスクトップのためのモダンネットワーク設定 最近の systemd下の Debian デスクトップ環境では、ネットワークイン     ターフェースは、lo が "networking.service" で、他のインターフェー スが "NetworkManager.service" で通常初期化されます。     Debian では、NetworkManager (NM) (network-manager と関連パッケー ジ) 等の管理デーモン経由でネットワーク接続の管理ができます。 * それらには洒落た GUI やコマンドラインのユーザーインターフェー スとともに提供されます。 * それらのバックエンドシステムとして、自前のデーモンとともに提 供されます。     * それらによりあなたのシステムをインターネットへ容易に接続でき ます。 * それらによりインターネットへの有線や無線のネットワークの管理 が容易にできます。 * それらにより旧来の "ifupdown" パッケージと独立にネットワーク を設定できます。 注記     サーバーにはこの様な自動ネットワーク設定を使わないで下さい。これ らはラップトップ上のモービルデスクトップを主対象としています。 これらの現代的なネットワーク設定ツールは旧来の "ifupdown" パッケ     ージやその "/etc/network/interfaces" 設定ファイルとの競合を避ける ように適正に設定する必要があります。 5.2.1. GUI のネットワーク設定ツール     Debian における NM の公式のドキュメンテーションは "/usr/share/doc /network-manager/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 を再起動します。 $ sudo systemctl restart network-manager 4. GUI 経由でネットワークを設定します。 注記     ifupdown との干渉を避けるために、NM は "/etc/network/interfaces" にリストされてないインターフェースのみを管理します。 ヒント NM のネットワーク設定能力を拡張したい場合には、     network-manager-openconnect、network-manager-openvpn-gnome、 network-manager-pptp-gnome、mobile-broadband-provider-info、 gnome-bluetooth 等の適当なプラグインモジュールや補足パッケージを 探してください。 5.3. GUI無しのモダンネットワーク設定 上記とは異なり、systemd の下では、ネットワークは /etc/systemd/     network/ を使って設定されているかもしれません。systemd-resolved (8) や resolved.conf(5) や systemd-networkd(8) を参照ください。     これによりGUI無しのモダンネットワーク設定ができます。     DHCP クライアントの設定は "/etc/systemd/network/dhcp.network" を 作成することで設定できます。例えば: [Match] Name=en*     [Network] DHCP=yes     静的ネットワーク設定は "/etc/systemd/network/static.network" を作 成することで設定できます。例えば: [Match] Name=en*     [Network] Address=192.168.0.15/24 Gateway=192.168.0.1 5.4. 低水準ネットワーク設定     Linux における低水準のネットワークを設定するには iproute2 プログ ラム (ip(8)、…) を用います。 5.4.1. Iproute2 コマンド Iproute2 コマンドは低水準ネットワーク設定の完全な機能を提供します     。旧式の net-tools コマンドと新しい iproute2 コマンド等との翻訳表 を次に示します。 表5.3 旧式の net-tools コマンドと新しい iproute2 コマンド等との翻 訳表 +---------------------------------------------------------------+ | 旧式の | 新しい | 操作 | | net-tools | iproute2 等 | | |-----------+-------------+-------------------------------------| |ifconfig(8)|ip addr |デバイスのプロトコル (IP または IPv6)| | | |アドレス | |-----------+-------------+-------------------------------------| |route(8) |ip route |ルーティングテーブル |     |-----------+-------------+-------------------------------------| |arp(8) |ip neigh |ARP または NDISC キャッシュ項目 | |-----------+-------------+-------------------------------------| |ipmaddr |ip maddr |マルチキャストアドレス | |-----------+-------------+-------------------------------------| |iptunnel |ip tunnel |IP 経由トンネル | |-----------+-------------+-------------------------------------| |nameif(8) |ifrename(8) |MAC アドレスに基づきネットワークイン | | | |ターフェースを命名 | |-----------+-------------+-------------------------------------| |mii-tool(8)|ethtool(8) |イーサーネットデバイスの設定 | +---------------------------------------------------------------+     ip(8) と IPROUTE2 Utility Suite Howto を参照下さい。 5.4.2. 安全な低レベルネットワーク操作     次の低レベルネットワークコマンドは、ネットワーク設定を変更しない ので安全に使えます。 表5.4 低レベルネットワークコマンドのリスト +---------------------------------------------------------------+ | コマンド | 説明 | |--------------------+------------------------------------------| |ip addr show |有効インターフェースのリンクとアドレスの状| | |態を表示 | |--------------------+------------------------------------------| |route -n |数字を使ったアドレスで全てのルーティングテ| | |ーブルを表示 | |--------------------+------------------------------------------| |ip route show |数字を使ったアドレスで全てのルーティングテ| | |ーブルを表示 | |--------------------+------------------------------------------| |arp |ARP キャッシュテーブルの現状の内容を表示 | |--------------------+------------------------------------------| |ip neigh |ARP キャッシュテーブルの現状の内容を表示 | |--------------------+------------------------------------------| |plog |ppp デーモンのログを表示 | |--------------------+------------------------------------------| |ping yahoo.com |"yahoo.com" までのインターネット接続の確認| |--------------------+------------------------------------------| |whois yahoo.com |ドメインデーターベースに "yahoo.com" を誰 |     | |が登録したかを確認 | |--------------------+------------------------------------------| |traceroute yahoo.com|"yahoo.com" までのインターネット接続の追跡| |--------------------+------------------------------------------| |tracepath yahoo.com |"yahoo.com" までのインターネット接続の追跡| |--------------------+------------------------------------------| |mtr yahoo.com |"yahoo.com" までのインターネット接続の追跡| | |(繰り返し) | |--------------------+------------------------------------------| |dig |"example.com" のDNS レコードを | |[@dns-server.com] |"dns-server.com" で"a" か "mx" か "any" か| |example.com [{a|mx| |のレコードに関して確認します。 | |any}] | | |--------------------+------------------------------------------| |iptables -L -n |パケットフィルターの確認 | |--------------------+------------------------------------------| |netstat -a |オープンポートの発見 | |--------------------+------------------------------------------| |netstat -l --inet |聴取中のポートの発見 | |--------------------+------------------------------------------| |netstat -ln --tcp |聴取中の TCP ポートの発見 (数字) | |--------------------+------------------------------------------| |dlint example.com |"examle.com" の DNS ゾーン情報を確認 | +---------------------------------------------------------------+ ヒント     これらの低レベルネットワーク設定ツールは "/sbin/" 中にあります。" /sbin/ifconfig" 等のような完全コマンドパスを使うか、 "~/.bashrc" 中の "$PATH" リストに "/sbin" を追加する必要があるかもしれません 。 5.5. ネットワークの最適化     一般的なネットワークの最適化は本書の射程外です。ここでは消費者用 の接続に関する課題にのみ触れます。 表5.5 ネットワーク最適化ツールのリスト +---------------------------------------------------------------+ |パッケー |ポプコ |サイ| 説明 | | ジ | ン | ズ | | |---------+-------+----+----------------------------------------| |iftop |V:6, |93 |ネットワークインターフェースの帯域利用情| | |I:114 | |報を表示 | |---------+-------+----+----------------------------------------| |iperf |V:3, |349 |インターネットプロトコルのバンド幅測定ツ| | |I:50 | |ール | |---------+-------+----+----------------------------------------| |ifstat |V:0, |59 |インターフェース統計モニター | | |I:8 | | | |---------+-------+----+----------------------------------------| |bmon |V:1, |144 |可搬型バンド幅モニター兼速度推定機 |     | |I:18 | | | |---------+-------+----+----------------------------------------| |ethstatus|V:0, |40 |ネットワークデバイスのスループットを迅速| | |I:4 | |に測定するスクリプト | |---------+-------+----+----------------------------------------| |bing |V:0, |80 |経験則的確率バンド幅試験ソフト | | |I:1 | | | |---------+-------+----+----------------------------------------| |bwm-ng |V:1, |95 |簡単軽量のコンソール式のバンド幅モニター| | |I:16 | | | |---------+-------+----+----------------------------------------| |ethstats |V:0, |23 |コンソール式のイーサーネット統計モニター| | |I:0 | | | |---------+-------+----+----------------------------------------| |ipfm |V:0, |78 |帯域分析ツール | | |I:0 | | | +---------------------------------------------------------------+ 5.5.1. 最適 MTU の発見     NM normally sets optimal Maximum Transmission Unit (MTU) automatically. In some occasion, you may wish to set MTU manually after experiments with ping(8) with "-M do" option to send a ICMP packet with various data packet size. MTU is the maximum     succeeding data packet size without IP fragmentation plus 28 bytes for the IPv4 and plus 48 bytes for the IPv6. For example the following finds MTU for IPv4 connection to be 1460 and MTU for IPv6 connection to be 1500. $ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org PING (149.20.4.15) 1472(1500) bytes of data. ping: local error: message too long, mtu=1460 --- ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms $ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org PING (130.89.148.77) 1432(1460) bytes of data. 1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms     --- ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms $ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes 1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms --- www.debian.org ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms     このプロセスはパス MTU (PMTU) 発見 (RFC1191) で、tracepath(8) コ マンドで自動化できます。 表5.6 最適 MTU 値の基本的なガイドライン +---------------------------------------------------------------+ | ネットワーク環境 |MTU | 理由 | |--------------------------------------+----+-------------------|     |ダイヤルアップ接続 (IP: PPP) |576 |標準 | |--------------------------------------+----+-------------------| |イーサーネット接続 (IP: DHCP または固 |1500|標準かつデフォール | |定) | |ト | +---------------------------------------------------------------+     In addition to these basic guide lines, you should know the following. * 何らかのトンネル手法 (VPN等) を使うと、それらのオーバーヘッド のために最適 MTU を更に減らすかもしれません。     * MTU 値は実験的に決定される PMTU 値を越すべきではありません。 * もし他の制約条件を満たすなら、MTU 値は一般的に大きい方がいい です。     最大セグメントサイズ (MSS) はパケットサイズの代替尺度として使われ ます。MSS と MTU の関係は次です。 * IPv4 ではMSS = MTU - 40     * IPv6 ではMSS = MTU - 60 注記     iptables(8) (「Netfilter インフラ」参照下さい) を使う最適化は MSS を使ってパッケットサイズを制約できるのでルーターとして有用です。 iptables(8) 中の "TCPMSS" を参照下さい。 5.5.2. WAN TCP の最適化 現代的な高帯域でレイテンシーの大きな WAN では、TCP のスループット は TCP バッファーサイズパラメーターを "TCP Tuning Guide" や "TCP     tuning" に書かれている手順で調整することで最大化できます。今のと ころ現在の Debian のデフォールトは高速の 1G bps の FTTP サービス でつながっている私の LAN でも十分機能しています。 5.6. Netfilter インフラ Netfilter はLinux カーネルのモジュール (「カーネルモジュール初期     化」参照下さい) を利用するステートフルファイアーウォールとネット ワークアドレス変換 (NAT) のインフラを提供します。 表5.7 ファイアーウォールツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |---------------+------+----+-----------------------------------| | |V:314,| |netfilter の管理ツール(IPv4 用の | |iptables |I:890 |2408|iptables(8)、IPv6 用の ip6tables | | | | |(8)) | |---------------+------+----+-----------------------------------| |arptables |V:0, |100 |netfilter の管理ツール(ARP 用の | | |I:2 | |arptables(8)) | |---------------+------+----+-----------------------------------| |ebtables |V:13, |264 |netfilter の管理ツール(Ethernet ブ | | |I:31 | |リッジング用の ebtables(8)) | |---------------+------+----+-----------------------------------| |iptstate |V:0, |119 |netfilter の状態を常時モニター (top| | |I:3 | |(1) と類似) |     |---------------+------+----+-----------------------------------| |shorewall-init |V:0, |68 |Shoreline ファイアーウォール初期化 | | |I:0 | | | |---------------+------+----+-----------------------------------| |shorewall |V:3, |2458|Shoreline ファイアーウォール、 | | |I:10 | |netfilter 設定ファイル生成システム | |---------------+------+----+-----------------------------------| | |V:0, | |Shoreline ファイアーウォール、 | |shorewall-lite |I:0 |65 |netfilter 設定ファイル生成システム | | | | |(軽装備バージョン) | |---------------+------+----+-----------------------------------| | |V:1, | |Shoreline ファイアーウォール、 | |shorewall6 |I:2 |779 |netfilter 設定ファイル生成システム | | | | |(IPv6 バージョン) | |---------------+------+----+-----------------------------------| | |V:0, | |Shoreline ファイアーウォール、 | |shorewall6-lite|I:0 |64 |netfilter 設定ファイル生成システム | | | | |(IPv6 軽装備バージョン) | +---------------------------------------------------------------+ netfilter のユーザー空間の主プログラムは iptables(8) です。シェル     から対話形式で手動で netfilter を設定し、その状態を iptables-save (8) で保存し、iptables-restore(8) を使って init スクリプト経由で システムのリブート時に回復できます。     shorewall のような設定ヘルパースクリプトはこの過程を簡単にします 。     http://www.netfilter.org/documentation/ (または "/usr/share/doc/ iptables/html/" 中) の文書を参照下さい。 * Linux Networking-concepts HOWTO     * Linux 2.4 Packet Filtering HOWTO * Linux 2.4 NAT HOWTO ヒント     これらは Linux 2.4 のために書かれたとはいえ、iptables(8) コマンド も netfilter カーネル機能も現在の Linux 2.6 や 3.x カーネルシリー ズにもあてはまります。 第6章ネットワークアプリケーション     ネットワーク接続を確立した (5章ネットワークの設定参照下さい) あと で、各種のネットワークアプリケーションを実行できます。 ヒント     最近の Debian に特化したネットワークインターフェースのガイドは、 The Debian Administrator's Handbook — Network Infrastructure を参 照ください。 ヒント     もしどこかの ISP で "2段階認証" を有効にした場合、あなたのプログ ラムから POP や SMTP サービスにアクセスするアプリケーションパスワ ードを入手する必要があります。事前にあなたのホスト IP を許可する 必要があるかもしれません。 6.1. ウェッブブラウザー 多くのウェッブブラウザーパッケージがハイパーテキストトランスファ     ープロトコル (HTTP) を使って遠隔コンテントにアクセスするために存 在します。 表6.1 ウェッブブラウザーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイズ|タイ| ウェッブブラウザーの説明 | | | ン | | プ | | |----------------+------+------+----+---------------------------| |chromium |V:38, |212463|X |Chromium、(Google からのオ | | |I:118 | | |ープンオースブラウザー) | |----------------+------+------+----+---------------------------| | | | | |Firefox, (Mozilla からのオ | |firefox |V:8, |223589|, , |ープンソースのブラウザー、 | | |I:14 | | |Debian Unstable でのみ入手 | | | | | |可能) | |----------------+------+------+----+---------------------------| |firefox-esr |V:190,|217325|, , |Firefox ESR, (Firefox 延長 | | |I:416 | | |サポートリリース) | |----------------+------+------+----+---------------------------| |epiphany-browser|V:3, |2232 |, , |GNOME、HIG 準拠、Epiphany | | |I:19 | | | | |----------------+------+------+----+---------------------------| |konqueror |V:18, |25504 |, , |KDE、Konqueror |     | |I:91 | | | | |----------------+------+------+----+---------------------------| |dillo |V:1, |1565 |, , |Dillo, (軽量ブラウザー, | | |I:6 | | |FLTK 準拠) | |----------------+------+------+----+---------------------------| |w3m |V:15, |2828 |テキ|w3m | | |I:191 | |スト| | |----------------+------+------+----+---------------------------| |lynx |V:12, |1935 |, , |Lynx | | |I:124 | | | | |----------------+------+------+----+---------------------------| |elinks |V:3, |1742 |, , |ELinks | | |I:24 | | | | |----------------+------+------+----+---------------------------| |links |V:3, |2302 |, , |Links (テキストのみ) | | |I:33 | | | | |----------------+------+------+----+---------------------------| | |V:1, | |グラ|Links (X を使わないコンソー| |links2 |I:12 |5479 |フィ|ルグラフィクス) | | | | |クス| | +---------------------------------------------------------------+ 6.1.1. Spoofing the User-Agent string In order to access some overly restrictive web sites, you may     need to spoof the User-Agent string returned by the web browser program. See: * MDN Web Docs: userAgent * Chrome Developers: Override the user agent string * How to change your user agent     * How to Change User-Agent in Chrome, Firefox, Safari, and more * How to Change Your Browser’s User Agent Without Installing Any Extensions * How to change the User Agent in Gnome Web (epiphany) 注意     偽装されたユーザーエージェント文字列は Java に対して良からぬ副次 効果を引き起こすかもしれません。 6.1.2. Browser extension     All modern GUI browsers support source code based browser extension and it is becoming standardized as web extensions. 6.2. メールシステム     This section focuses on typical mobile workstations on consumer grade Internet connections. 注意     もしインターネットと直接メール交換するメールサーバーを設定するな ら、このような初歩的文書が不要なぐらいシステムを熟知しているべき です。 6.2.1. Eメールの基本 email メッセージは、メッセージのエンベロープ(封筒)と、メッセージ     のヘッダーと、メッセージの本体との、 3 構成要素から成り立っていま す。 * メッセージエンベロープ中の "To" (宛先)と "From" (差出人) 情報 は SMTP が電子メールを配達するのに用いられます。(メッセージエ ンベロープの "From" 情報はバウンスアドレス、 From_、等とも呼 ばれます。) * メッセージヘッダー中の "To" (宛先)と "From" (差出人) 情報は email クライアントが email を表示するのに用いられます。(通常     これらはメッセージエンベロープの情報と共通ですが、必ずしもそ うとは限りません。) * The email message format covering header and body data is extended by Multipurpose Internet Mail Extensions (MIME) from the plain ASCII text to other character encodings, as well as attachments of audio, video, images, and application programs.     Full featured GUI based email clients offer all the following functions using the GUI based intuitive configuration. * It creates and interprets the message header and body data using Multipurpose Internet Mail Extensions (MIME) to deal the content data type and encoding. * It authenticates itself to the ISP's SMTP and IMAP servers using the legacy basic access authentication or modern OAuth 2.0. (For OAuth 2.0, set it via Desktop environment settings. E.g., "Settings" -> "Online Accounts".)     * It sends the message to the ISP's smarthost SMTP server listening to the message submission port (587). * It receives the stored message on the ISP's server from the TLS/IMAP4 port (993). * 属性によってメールのフィルタリングができます。 * 連絡先、カレンダー、タスク、メモといった追加の機能を提供する ことがあります。 表6.2 メールユーザーエージェント (MUA) のリスト +---------------------------------------------------------------+ |パッケージ |ポプコ |サイズ| タイプ | | | ン | | | |-----------+-------+------+------------------------------------| |evolution |V:26, |470 |X GUI プログラム (GNOME3、グループウ| | |I:226 | |エアスイート) | |-----------+-------+------+------------------------------------| |thunderbird|V:56, |193391|X GUI プログラム (GTK、Mozilla |     | |I:123 | |Thunderbird) | |-----------+-------+------+------------------------------------| |kmail |V:31, |23817 |X GUI プログラム (KDE) | | |I:82 | | | |-----------+-------+------+------------------------------------| |mutt |V:20, |7104 |きっと vim とともに使われるキャラク | | |I:205 | |ターターミナルプログラム | |-----------+-------+------+------------------------------------| |mew |V:0, |2319 |(x)emacs の下でキャラクターターミナ | | |I:0 | |ルプログラム | +---------------------------------------------------------------+ 6.2.2. 現代的メールサービスの限界     スパム(迷惑メール)問題にさらされるのを最小化するために、現代的 なメールサービスには様々な制限があります。 * 確実にメールをリモートホストに直接送るために消費者用インター ネット接続上で SMTP サーバーを実行するのは現実的ではありませ ん。 * A mail may be rejected by any host en route to the     destination quietly unless it appears as authentic as possible. * 無関係の複数の送信元メールアドレスのメールを、単一のスマート ホストを使って確実にリモートホストに送ることを期待するのは現 実的ではありません。     なぜなら: * The SMTP port (25) connections from hosts serviced by the consumer grade network to the Internet are blocked. * The SMTP port (25) connections to hosts serviced by the consumer grade network from the Internet are blocked. * The outgoing messages from hosts serviced by the consumer grade network to the Internet can only be sent via the message submission port (587).     * ドメインキー・アイデンティファイド・メール (DKIM) や SPF 認証 やドメインベースのメッセージ認証、報告および適合 (DMARC) のよ うなアンチスパムテクニックが email のフィルタリングに広範に使 用されています。 * ドメインキー・アイデンティファイド・メールサービスがあなたの メールをスマートホスト経由で送信する際に提供されているかもし れません。 * Eメールアドレスのなりすましを防ぐために、スマートホストによっ てメッセージヘッダ内の送信元メールアドレスがスマートホストの メールアカウントに書き換えられることがあります。 6.2.3. Historic mail service expectation Some programs on Debian expect to access the /usr/sbin/sendmail     command to send emails as their default or customized setting since the mail service on a UNIX system functioned historically as: * An email is created as a text file. * The email is handed to the /usr/sbin/sendmail command. * For the destination address on the same host, the /usr/sbin/ sendmail command makes local delivery of the email by appending it to the /var/mail/$username file.     + Commands expecting this feature: apt-listchanges, cron, at, ... * For the destination address on the remote host, the /usr/sbin /sendmail command makes remote transfer of the email to the destination host found by the DNS MX record using SMTP. + Commands expecting this feature: popcon, reportbug, bts, ... 6.2.4. メール転送エージェント (MTA) In principle, mobile workstations should function without the /     usr/sbin/sendmail command provided by the mail transfer agent (MTA) program. The Debian system usually installs MTA to cope with 「現代的メー     ルサービスの限界」 and 「Historic mail service expectation」 even if mobile workstations installed full featured GUI based email clients. For mobile workstations, the typical choice of MTA is either exim4-daemon-light or postfix with its installation option such     as "Mail sent by smarthost; received via SMTP or fetchmail" selected. These are light weight MTAs that respect "/etc/ aliases". ヒント Configuring exim4 to send the Internet mail via multiple     corresponding smarthosts for multiple source email addresses is non-trivial. If you need such capability for some programs, set them up to use msmtp which is easy to set up for multiple source email addresses. Then leave main MTA only for a single email address. 表6.3 基本的なメール転送エージェント関連パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ |サイ| 説明 | | | ン | ズ | | |------------------+-------+----+-------------------------------| |exim4-daemon-light|V:265, |1493|Exim4 メール転送エージェント | | |I:280 | |(MTA: Debian のデフォルト) | |------------------+-------+----+-------------------------------| |exim4-daemon-heavy|V:7, |1651|Exim4 メール転送エージェント | | |I:7 | |(MTA: 柔軟な代替候補) | |------------------+-------+----+-------------------------------| |exim4-base |V:272, |1667|Exim4 文書 (text) と共通ファイ | | |I:288 | |ル | |------------------+-------+----+-------------------------------| |exim4-doc-html |I:1 |3748|Exim4 文書 (html) | |------------------+-------+----+-------------------------------| |exim4-doc-info |I:1 |639 |Exim4 文書 (info) | |------------------+-------+----+-------------------------------| |postfix |V:141, |3996|Postfix メール転送エージェント | | |I:152 | |(MTA: セキュアな代替候補) | |------------------+-------+----+-------------------------------| |postfix-doc |I:8 |4601|Postfix 文書 (html+text) | |------------------+-------+----+-------------------------------| |sasl2-bin |V:6, |403 |Cyrus SASL API の実装 (SMTP | | |I:16 | |AUTH について postfix を補完) |     |------------------+-------+----+-------------------------------| |cyrus-sasl2-doc |I:1 |2171|Cyrus SASL - 文書 | |------------------+-------+----+-------------------------------| |msmtp |V:6, |573 |軽量 MTA | | |I:12 | | | |------------------+-------+----+-------------------------------| |msmtp-mta |V:5, |122 |軽量 MTA (msmtp の sendmail 互 | | |I:6 | |換性拡張) | |------------------+-------+----+-------------------------------| |esmtp |V:0, |129 |軽量 MTA | | |I:0 | | | |------------------+-------+----+-------------------------------| |esmtp-run |V:0, |32 |軽量 MTA (esmtp の sendmail 互 | | |I:0 | |換性拡張) | |------------------+-------+----+-------------------------------| |nullmailer |V:8, |474 |Strip down MTA, no local mail | | |I:10 | | | |------------------+-------+----+-------------------------------| |ssmtp |V:6, |2 |Strip down MTA, no local mail | | |I:9 | | | |------------------+-------+----+-------------------------------| |sendmail-bin |V:14, |1876|高機能 MTA (既に慣れている場合)| | |I:15 | | | |------------------+-------+----+-------------------------------| |courier-mta |V:0, |2390|超高機能 MTA (ウェブインターフ | | |I:0 | |ェースなど) | +---------------------------------------------------------------+ 6.2.4.1. exim4 設定     スマートホスト経由のインターネットメールに関しては、exim4-* パッ ケージを次のように (再)設定します。     $ sudo systemctl stop exim4 $ sudo dpkg-reconfigure exim4-config     "General type of mail configuration" に関して、"スマートホストで メール送信; SMTP または fetchmail で受信する" を選択します。     "System mail name:" をそのデフォルトである FQDN (「ホスト名の解決 」参照下さい) に設定します。     "IP-addresses to listen on for incoming SMTP connections:" をその デフォルトである "127.0.0.1 ; ::1" と設定します。     "Other destinations for which mail is accepted:" の内容を消去しま す。     "Machines to relay mail for:" の内容を消去します。     "送出スマートホストの IP アドレスまたはホスト名:" を "smtp.hostname.dom:587" と設定します。 "Hide local mail name in outgoing mail?" に対して "No" を選択しま     す。(この代わりに、「メールアドレス設定」にある "/etc/ email-addresses" を使用します。)     "DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?" に次 の内のひとつの返答をします。 * 起動時にインターネットに接続されている場合は、"No" とします。     * 起動時にインターネットに接続されていない場合は、"Yes" としま す。     "Delivery method for local mail:" を"mbox format in /var/mail/" と設定します。     "Split configuration into small files?:" に対して "Yes" を選択し ます。     "/etc/exim4/passwd.client" を編集しスマートホストのためのパスワー ドエントリーを作成します。 $ sudo vim /etc/exim4/passwd.client     ... $ cat /etc/exim4/passwd.client ^smtp.*\.hostname\.dom:username@hostname.dom:password Configure exim4(8) with "QUEUERUNNER='queueonly'", "QUEUERUNNER=     'nodaemon'", etc. in "/etc/default/exim4" to minimize system resource usages. (optional)     次のようにして exim4 を起動します。     $ sudo systemctl start exim4     "/etc/exim4/passwd.client" 中のホスト名はエイリアスであってはいけ ません。真のホスト名は次の様にして確認できます。 $ host smtp.hostname.dom     smtp.hostname.dom is an alias for smtp99.hostname.dom. smtp99.hostname.dom has address 123.234.123.89 エイリアス問題を回避するために "/etc/exim4/passwd.client" の中に     正規表現を用いています。もし ISP がエイリアスで示されるホストを移 動させても SMTP AUTH はおそらく動きます。     次のようにすれば exim4 の設定を手動で更新できます。 * "/etc/exim4/" 中の exim4 設定ファイルの更新。 + MACRO を設定するために "/etc/exim4/ exim4.conf.localmacros" を作成し、"/etc/exim4/ exim4.conf.template" を編集します。(非分割設定)     + "/etc/exim4/exim4.conf.d" サブディレクトリー中で、新規フ ァイルを作成したり既存ファイルを編集したりします。(分割設 定) * "systemctl reload exim4" を実行します。 注意     "DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?" とい う debconf の質問に "No" (デフォールト値) が選ばれシステムがブー ト時にインターネットに繋がっていない場合、exim4 の起動は長い時間 がかかります。         次に示す正式のガイドを読んで下さい: "/usr/share/doc/exim4-base/ README.Debian.gz" と update-exim4.conf(8)。 警告     For all practical consideration, use SMTP with STARTTLS on port 587 or SMTPS SSL (SMTPS) on port 465, instead of plain SMTP on port 25. 6.2.4.2. SASL を使う postfix の設定     スマートホスト経由のインターネットメールに関しては postfix 文書と 重要マニュアルページを読むことから始めるべきです。 表6.4 重要 postfix マニュアルページのリスト +-----------------------------------------------------------+ | コマンド | 機能 | |------------+----------------------------------------------| |postfix(1) |Postfix コントロールプログラム | |------------+----------------------------------------------|     |postconf(1) |Postfix の設定ユーティリティー | |------------+----------------------------------------------| |postconf(5) |Postfix 設定パラメーター | |------------+----------------------------------------------| |postmap(1) |Postfix 検索テーブルのメンテナンス | |------------+----------------------------------------------| |postalias(1)|Postfix エイリアスデーターベースのメンテナンス| +-----------------------------------------------------------+     postfix と sasl2-bin パッケージを次のように (再)設定します。     $ sudo systemctl stop postfix $ sudo dpkg-reconfigure postfix     "スマートホストを使ってインターネット" を選択します。     "SMTP リレーホスト (なければ空):" を "[smtp.hostname.dom]:587" と 設定します。 $ sudo postconf -e 'smtp_sender_dependent_authentication = yes' $ sudo postconf -e 'smtp_sasl_auth_enable = yes'     $ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd' $ sudo postconf -e 'smtp_sasl_type = cyrus' $ sudo vim /etc/postfix/sasl_passwd     スマートホストのパスワードエントリーを作成します。 $ cat /etc/postfix/sasl_passwd     [smtp.hostname.dom]:587 username:password $ sudo postmap hush:/etc/postfix/sasl_passwd     次に記すように postfix を起動します。     $ sudo systemctl start postfix dpkg-reconfigure ダイアログと "/etc/postfix/sasl_passwd" の中で " [" と "]" を使うことで MX レコードを確認せずに指定された hostname     その物を直接使うように確実にします。"/usr/share/doc/postfix/html/ SASL_README.html" の中の "Enabling SASL authentication in the Postfix SMTP client" を参照下さい。 6.2.4.3. メールアドレス設定     メールのトランスポートとデリバリーとユーザーのエージェントが使う メールアドレス設定ファイルが少々存在します。 表6.5 メールアドレス関連のファイルのリスト +---------------------------------------------------------------+ | ファイル | 機能 | アプリケーション | |---------------+---------------------+-------------------------| |/etc/mailname |(送出)メールのデフォ |Debian 固有、mailname(5) | | |ールトのホスト名 | | |---------------+---------------------+-------------------------| |/etc/ |送出メールのホスト名 |exim(8) 固有、 |     |email-addresses|の偽装 |exim4-config_files(5) | |---------------+---------------------+-------------------------| |/etc/postfix/ |送出メールのホスト名 |postfix(1) 固有、postmap | |generic |の偽装 |(1) コマンド実行後有効。 | |---------------+---------------------+-------------------------| | |受入メールのためのア |一般的、newaliases(1) コ | |/etc/aliases |カウント名のエイリア |マンド実行後有効。 | | |ス | | +---------------------------------------------------------------+ 通常 "/etc/mailname" ファイル中の mailname はホストの IP の一つと して解決できる完全修飾ドメイン名 (FQDN) です。解決できる IP アド     レスのあるホスト名を持たない可動ワークステーションの場合には、こ の mailname を "hostname -f" に設定します。(これは exim4-* と postfix の両方に有効な安全な選択肢です。) ヒント "/etc/mailname" の内容は多くの MTA 以外のプログラムによってそのデ     フォールト挙動のために使われます。mutt の場合、~/muttrc ファイル 中の "hostname" と "from" 変数を設定して mailname の値をオーバー ライドします。bts(1) や dch(1) 等の devscripts パッケージ中のプロ グラムの場合、環境変数の "$DEBFULLNAME" や "$DEBEMAIL" をエキスポ ートしてその値をオーバーライドします。 ヒント 通常 popularity-contest パッケージは root アカウントからメールを FQDN 付きで送信します。/usr/share/popularity-contest/default.conf     に記載された様に /etc/popularity-contest.conf 中に MAILFROM を設 定する必要があります。こうしないと、smarthost の SMTP サーバーに よってあなたのメールは拒否されます。少々面倒ですが、root からの全 メールの発信元を書き替えるより、この方法は安全ですし、他のデーモ ンや cron スクリプトに関してもこの方法を適用するべきです。     mailname を"hostname -f" と設定した時には、次によって MTA で発信 元メールアドレスを偽装することが実現できます。 * exim4(8) の場合、exim4-config_files(5) に説明されているように "/etc/email-addresses"     * postfix(1) の場合、generic(5) に説明されているように "/etc/ postfix/generic"     postfix の場合、次に記す追加ステップが必要です。 # postmap hash:/etc/postfix/generic     # postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic' # postfix reload     あなたのメール設定は次のようにするとテストできます。 * exim(8) の場合、-brw, -bf, -bF, -bV, … オプションを使用     * postmap(1) の場合、-q オプションを使用 ヒント     Exim はexiqgrep(8) や exipick(8) のようないくつかのユーティリティ ープログラムとともに供給されます。利用可能なコマンドは "dpkg -L exim4-base|grep man8/" を参照下さい。 6.2.4.4. 基本的な MTA の操作     基本的な MTA 操作が存在します。その一部は sendmail(1) 互換性イン ターフェース経由で実行する事もできます。 表6.6 基本的 MTA 操作のリスト +---------------------------------------------------------------+ |exim コマン| postfix コマンド | 説明 | | ド | | | |-----------+----------------------+----------------------------| |sendmail |sendmail |標準入力からメールを読み配送| | | |を手配 (-bm) | |-----------+----------------------+----------------------------| |mailq |mailq |メールキューを状態とキュー | | | |ID とともにリスト (-bp) | |-----------+----------------------+----------------------------| |newaliases |newaliases |エイリアスデーターベースを初| | | |期化 (-I) | |-----------+----------------------+----------------------------|     |exim4 -q |postqueue -f |待機メールを排出 (-q) | |-----------+----------------------+----------------------------| |exim4 -qf |postsuper -r ALL |全メールを排出 | | |deferred; postqueue -f| | |-----------+----------------------+----------------------------| |exim4 -qff |postsuper -r ALL; |凍結メールをも排出 | | |postqueue -f | | |-----------+----------------------+----------------------------| |exim4 -Mg |postsuper -h queue_id |キュー ID によってメッセージ| |queue_id | |を凍結 | |-----------+----------------------+----------------------------| |exim4 -Mrm |postsuper -d queue_id |キュー ID によってメッセージ| |queue_id | |を削除 | |-----------+----------------------+----------------------------| |N/A |postsuper -d ALL |全メッセージを削除 | +---------------------------------------------------------------+ ヒント     "/etc/ppp/ip-up.d/*" 中のスクリプトで全メールを排出するのは良い考 えかも知れません。 6.3. リーモートアクセスサーバーとユーティリティー (SSH) セキュアーシェル (SSH) はインターネット経由で接続するセキュアーな     方法です。Debian では、OpenSSH と呼ばれるフリーバージョンのSSH が openssh-client と openssh-server パッケージとして利用可能です。 ssh(1) はユーザーにとってより賢明でよりセキュアーな telnet(1) と     して機能します。telnet コマンドと異なり、ssh コマンドは telnet エ スケープ文字 (初期デフォールト CTRL-]) に出会うことで中断される事 がありません。 表6.7 リモートアクセスサーバーとユーティリティーのリスト +--------------------------------------------------------------------+ | パッケージ |ポプコ|サイ| ツール | 説明 | | | ン | ズ | | | |----------------------+------+----+----------------------+----------| | |V:855,| | |セキュアー| |openssh-client |I:997 |5609|ssh(1) |シェルクラ| | | | | |イアント | |----------------------+------+----+----------------------+----------| | |V:738,| | |セキュアー| |openssh-server |I:843 |1867|sshd(8) |シェルサー| | | | | |バー | |----------------------+------+----+----------------------+----------| | | | | |ユーザーに| | | | | |ssh-add 用| |ssh-askpass |V:1, |104 |ssh-askpass(1) |のパスフレ| | |I:28 | | |ーズを尋ね| | | | | |る (プレー| | | | | |ン X) | |----------------------+------+----+----------------------+----------|     | | | | |ユーザーに| | |V:0, | | |ssh-add 用| |ssh-askpass-gnome |I:4 |218 |ssh-askpass-gnome(1) |のパスフレ| | | | | |ーズを尋ね| | | | | |る (GNOME)| |----------------------+------+----+----------------------+----------| | | | | |asks user | | | | | |for a pass| | |V:0, | |ssh-askpass-fullscreen|phrase for| |ssh-askpass-fullscreen|I:0 |48 |(1) |ssh-add | | | | | |(GNOME) | | | | | |with extra| | | | | |eye candy | |----------------------+------+----+----------------------+----------| | | | | |web server| | | | | |for | | |V:0, | | |browser | |shellinabox |I:1 |507 |shellinaboxd(1) |accessible| | | | | |VT100 | | | | | |terminal | | | | | |emulator | +--------------------------------------------------------------------+     Although shellinabox is not a SSH program, it is listed here as an interesting alternative for the remote terminal access.     See also 「Xサーバ接続」 for connecting to remote X client programs. 注意     あなたの SSH がインターネットからアクセスできる場合には、「インタ ーネットのためのセキュリティー強化策」を参照下さい。 ヒント     リモートのシェルプロセスが回線接続の中断の際にも継続するようにす るために screen(1) プログラムを使いましょう (「screen プログラム 」参照下さい)。 6.3.1. SSH の基本     OpenSSH SSH デーモンは SSH プロトコル2のみをサポートします。 Please read "/usr/share/doc/openssh-client/README.Debian.gz", ssh     (1), sshd(8), ssh-agent(1), and ssh-keygen(1), ssh-add(1) and ssh-agent(1). 警告 OpenSSH サーバーを実行したい場合には、"/etc/ssh/     sshd_not_to_be_run" が存在してはいけません。 Don't enable rhost based authentication (HostbasedAuthentication in /etc/ssh/sshd_config). 表6.8 SSH 設定ファイルのリスト +---------------------------------------------------------------+ | 設定ファイル | 設定ファイルの説明 | |----------------+----------------------------------------------| |/etc/ssh/ |SSH クライアントのデフォールト、ssh_config(5) | |ssh_config |参照下さい | |----------------+----------------------------------------------| |/etc/ssh/ |SSH サーバーのデフォールト、sshd_config(5) 参 |     |sshd_config |照下さい | |----------------+----------------------------------------------| |~/.ssh/ |当該 SSH サーバーの当該アカウント接続用にクラ | |authorized_keys |イアントが使用するデフォールト公開 SSH キー | |----------------+----------------------------------------------| |~/.ssh/id_rsa |ユーザーの秘密 SSH-2 RSA キー | |----------------+----------------------------------------------| |~/.ssh/id_ |ユーザの秘密 SSH-2 key-type-name 鍵 (ecdsa, | |key-type-name |ed25519 など) | +---------------------------------------------------------------+     クライアントから ssh(1) 接続を開始するには以下のようにします。 表6.9 SSH クライアント起動例のリスト +---------------------------------------------------------------+ | コマンド | 説明 | |--------------------------------+------------------------------| |ssh username@hostname.domain.ext|デフォルトモードで接続 | |--------------------------------+------------------------------| |ssh -v |デバッグメッセージを有効にして| |username@hostname.domain.ext |デフォルトモードで接続 |     |--------------------------------+------------------------------| |ssh -o PreferredAuthentications=|SSH バージョン 2 でパスワード | |password |を使うことを強制 | |username@hostname.domain.ext | | |--------------------------------+------------------------------| |ssh -t |リモートホストでパスワードを更| |username@hostname.domain.ext |新するために passwd プログラム| |passwd |を実行 | +---------------------------------------------------------------+ 6.3.2. リモートホストでのユーザ名     ローカルホストとリモートホストで同じユーザ名を使っている場合は "username@" と打たなくてもよいです。 たとえローカルとリモートで異なるユーザー名を使う場合でも、"~/.ssh     /config" を用いるとユーザー名を省略できます。例えば Debian Salsa サービスでのユーザー名が "foo-guest" の場合は、"~/.ssh/config" が 次を含むように設定します。     Host salsa.debian.org people.debian.org User foo-guest 6.3.3. リモートパスワード無しでの接続     "PubkeyAuthentication" (SSH-2 プロトコル) を使うと、リモートシス テムのパスワードを覚えなくてもよくなります。     リモートシステムの "/etc/ssh/sshd_config" 中に対応する項目 "PubkeyAuthentication yes" を設定します。     次に示すように、ローカルで認証鍵を生成しリモートシステム上に公開 鍵をインストールします。     $ ssh-keygen -t rsa $ cat .ssh/id_rsa.pub | ssh user1@remote "cat - >>.ssh/authorized_keys" ホストを制限したり特定コマンドを実行したりするには "~/.ssh/     authorized_keys" 中の項目にオプションを追加します。sshd(8) の "AUTHORIZED_KEYS FILE FORMAT" を参照下さい。 6.3.4. 外部 SSH クライアントへの対処法     他のプラットフォーム上で利用可能なフリーな SSH クライアントがいく つかあります。 表6.10 他のプラットフォーム上で使えるフリーな SSH クライアントの リスト +---------------------------------------------------------------+ | 環境 | フリーの SSH プログラム | |------------+--------------------------------------------------| |Windows |puTTY (http://www.chiark.greenend.org.uk/~sgtatham| | |/putty/) (GPL) | |------------+--------------------------------------------------|     |Windows |cygwin 中の SSH (http://www.cygwin.com/) (GPL) | |(cygwin) | | |------------+--------------------------------------------------| |古典的 |macSSH (http://www.macssh.com/) (GPL) | |Macintosh | | |------------+--------------------------------------------------| |Mac OS X |OpenSSH; ターミナルアプリケーションの ssh を使用し| | |ましょう (GPL) | +---------------------------------------------------------------+ 6.3.5. ssh-agent の設定     SSH の認証鍵をパスフレーズで保護する方がより安全です。もしパスフ レーズが設定されていない場合には "ssh-keygen -p" で設定できます。 上記のようにパスワードを使って接続したリモートホスト上の "~/.ssh/     authorized_keys" 中にあなたの公開 SSH 鍵 (例えば "~/.ssh/ id_rsa.pub") を設定します。 $ ssh-agent bash     $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/username/.ssh/id_rsa: Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)     次に示すように、今後リモートパスワードは必要ありません。     $ scp foo username@remote.host:foo     ssh-agent のセッションを終了するのに ^D を押します。 X サーバーの場合、通常の Debian の起動スクリプトは親プロセスとし     て ssh-agent を実行します。だから ssh-add は1回だけ実行すれば十分 です。詳細は ssh-agent(1) と ssh-add(1) を参照下さい。 6.3.6. リモートホストからメールを送信する 適切な DNS 設定がなされたサーバに SSH アカウントを持っている場合     、リモートサーバから真に送られたメールとして、ワークステーション からメールを送信することができます。     $ ssh username@example.org /usr/sbin/sendmail -bm -ti -f "username@example.org" < mail_data.txt 6.3.7. SMTP/POP3 トンネルをするためのポートフォワーディング ssh を通して localhost のポート 4025 から remote-server のポート     25 へと、localhost のポート 4110 から remote-server のポート 110 へと接続するパイプを設定するには、ローカルホスト上で次のように実 行します。     # ssh -q -L 4025:remote-server:25 4110:remote-server:110 username@remote-server このようにするとインターネット経由で SMTP/POP3 サーバーへとセキュ     アーに接続できます。リモートホストの "/etc/ssh/sshd_config" 中の "AllowTcpForwarding" エントリーを "yes" と設定します。 6.3.8. SSH 上のリモートシステムをシャットダウンする方法 "shutdown -h now" (「システムをシャットダウンする方法」参照下さ     い) を実行しているプロセスを at(1) コマンド (「タスク1回実行のス ケジュール」参照下さい) を使って次のようにして SSH が終了すること から守る必要があります。     # echo "shutdown -h now" | at now     "shutdown -h now" をscreen(1) (「screen プログラム」参照下さい) セッション中で実行しても同様のことができます。 6.3.9. SSH のトラブルシュート     問題があるときは設定ファイルのパーミッションを確認し、ssh を"-v" オプションとともに実行します。 root でファイアーウォールと問題を起こした場合には、"-p" オプショ     ンを使いましょう; こうするとサーバーポートの 1 — 1023 を使うのを 回避します。 リモートサイトへの ssh 接続が急に動作し無くなった際は、システム管 理者による変更、特に可能性が高いのはシステムメンテナンス中に     "host_key" が変更された結果かもしれません。実際にこういう状況で誰 も洒落たハックでリモートホストとしてなりすまそうとしていないこと を確認した後に、"host_key" エントリーをローカルホストの "~/.ssh/ known_hosts" から削除すると再び接続できるようになります。 6.4. プリントサーバーとユーティリティー In the old Unix-like system, the BSD Line printer daemon (lpd) was the standard and the standard print out format of the classic     free software was PostScript (PS). Some filter system was used along with Ghostscript to enable printing to the non-PostScript printer. See 「Ghostscript」. In the modern Debian system, the Common UNIX Printing System     (CUPS) is the de facto standard and the standard print out format of the modern free software is Portable Document Format (PDF). The CUPS uses Internet Printing Protocol (IPP). The IPP is now     supported by other OSs such as Windows XP and Mac OS X and has became new cross-platform de facto standard for remote printing with bi-directional communication capability. CUPS システムのファイルフォーマット依存の自動変換機能のおかげで、     どんなデーターでも lpr コマンドに供給すると期待される印刷出力が生 成されます。(CUPS では、lpr はcups-bsd パッケージをインストールす ると有効となります。)     Debian システムには、プリントサーバーやユーティリティーで留意すべ きパッケージがいくつかあります。 表6.11 プリントサーバーとユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ|ポート | 説明 | | | ン | ズ | | | |-------------------------+------+----+-------+-----------------| | |V:3, | |printer|BSD lpr/lpd (ライ| |lpr |I:3 |367 |(515) |ンプリンターデー | | | | | |モン) | |-------------------------+------+----+-------+-----------------| |lprng |V:0, |3060|, , |, , (拡張) | | |I:1 | | | | |-------------------------+------+----+-------+-----------------| |cups |V:112,|1027|IPP |インターネット印 | | |I:405 | |(631) |刷 CUPS サーバー | |-------------------------+------+----+-------+-----------------| | | | | |CUPS 用System V |     | | | | |プリンターコマン | | | | | |ド: lp(1) と | | |V:130,| | |lpstat(1) と | |cups-client |I:435 |388 |, , |lpoptions(1) と | | | | | |cancel(1) と | | | | | |lpmove(8) と | | | | | |lpinfo(8) と | | | | | |lpadmin(8) 等 | |-------------------------+------+----+-------+-----------------| | | | | |CUPS 用BSD プリン| | |V:30, | | |ターコマンド: lpr| |cups-bsd |I:250 |122 |, , |(1) と lpq(1) と | | | | | |lprm(1) と lpc(8)| | | | | |等 | |-------------------------+------+----+-------+-----------------| |printer-driver-gutenprint|V:32, |1219|非該当 |CUPS 用のプリンタ| | |I:179 | | |ードライバー | +---------------------------------------------------------------+ ヒント     CUPS システムはウェッブブラウザーを "http://localhost:631/" に向 けることで設定できます。 6.5. 他のネットワークアプリケーションサーバー     他のネットワークアプリケーションサーバーを次に示します。 表6.12 他のネットワークアプリケーションサーバー +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ|プロト| 説明 | | | ン | ズ | コル | | |-----------------+------+----+------+--------------------------| |telnetd |V:0, |53 |TELNET|TELNET サーバー | | |I:2 | | | | |-----------------+------+----+------+--------------------------| |telnetd-ssl |V:0, |170 |, , |, , (SSL サポート) | | |I:0 | | | | |-----------------+------+----+------+--------------------------| |nfs-kernel-server|V:48, |611 |NFS |Unix 式ファイル共有 | | |I:72 | | | | |-----------------+------+----+------+--------------------------| |samba |V:109,|3932|SMB |Windows のファイルとプリン| | |I:144 | | |ター共有 | |-----------------+------+----+------+--------------------------| |netatalk |V:1, |2000|ATP |Apple/Mac のファイルとプリ|     | |I:2 | | |ンター共有 (AppleTalk) | |-----------------+------+----+------+--------------------------| |proftpd-basic |V:14, |451 |FTP |汎用ファイルダウンロード | | |I:23 | | | | |-----------------+------+----+------+--------------------------| |apache2 |V:237,|565 |HTTP |汎用ウェッブサーバー | | |I:294 | | | | |-----------------+------+----+------+--------------------------| |squid |V:11, |9223|, , |汎用ウェッブプロキシサーバ| | |I:12 | | |ー | |-----------------+------+----+------+--------------------------| |squid3 |V:2, |240 |, , |, , | | |I:6 | | | | |-----------------+------+----+------+--------------------------| |bind9 |V:49, |1130|DNS |他のホストの IP アドレス | | |I:57 | | | | |-----------------+------+----+------+--------------------------| |isc-dhcp-server |V:21, |6061|DHCP |クライアント自身の IP アド| | |I:45 | | |レス | +---------------------------------------------------------------+ コモンインターネットファイルシステムプロトコル (CIFS) はサーバー     メッセージブロック (SMB) と同じプロトコルで Microsoft Windows で 広く使われています。 ヒント     サーバーシステムの統合には、「最新の集中システム管理」を参照下さ い。 ヒント ホスト名の解決は通常 DNS サーバーによって提供されます。ホストの     IP アドレスが DHCP によって動的にアサインされる場合には Debian wiki 上のDDNS ページに書かれているようにして bind9 と isc-dhcp-server を使いホスト名解決のためのダイナミック DNS が設定 できます。 ヒント     Debian アーカイブの全内容のローカルのミラーサーバーを使うより、 squid 等のプロキシサーバーを使う方がはるかにバンド幅を節約上では るかに効率的です。 6.6. 他のネットワークアプリケーションクライアント     他のネットワークアプリケーションクライアントを次に示します。 表6.13 他のネットワークアプリケーションクライアント +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ|プロト| 説明 | | | ン | ズ | コル | | |---------------+------+----+------+----------------------------| |netcat |I:37 |16 |TCP/IP|TCP/IP 用万能ツール (スイス | | | | | |陸軍ナイフ) | |---------------+------+----+------+----------------------------| | |V:842,| | |セキュアソケットレイヤー | |openssl |I:995 |2269|SSL |(SSL) のバイナリーと関連する| | | | | |暗号化ツール | |---------------+------+----+------+----------------------------| |stunnel4 |V:7, |530 |, , |万能 SSL ラッパー | | |I:14 | | | | |---------------+------+----+------+----------------------------| |telnet |V:51, |53 |TELNET|TELNET クライアント | | |I:862 | | | | |---------------+------+----+------+----------------------------| |telnet-ssl |V:0, |207 |, , |, , (SSL サポート) | | |I:3 | | | | |---------------+------+----+------+----------------------------| |nfs-common |V:161,|1111|NFS |Unix 式ファイル共有 | | |I:273 | | | | |---------------+------+----+------+----------------------------| |smbclient |V:20, |1974|SMB |MS Windows のファイルとプリ | | |I:196 | | |ンター共有 | |---------------+------+----+------+----------------------------| | |V:30, | | |リモートの MS Windows ファイ| |cifs-utils |I:121 |317 |, , |ルをマウントやアンマウントす| | | | | |るコマンド | |---------------+------+----+------+----------------------------|     |ftp |V:11, |55 |FTP |FTP クライアント | | |I:178 | | | | |---------------+------+----+------+----------------------------| |lftp |V:5, |2361|, , |, , | | |I:36 | | | | |---------------+------+----+------+----------------------------| |ncftp |V:2, |1389|, , |フルスクリーンの FTP クライ | | |I:18 | | |アント | |---------------+------+----+------+----------------------------| |wget |V:220,|3605|HTTP |ウェッブダウンローダー | | |I:983 | |と FTP| | |---------------+------+----+------+----------------------------| |curl |V:169,|476 |, , |, , | | |I:604 | | | | |---------------+------+----+------+----------------------------| |axel |V:0, |201 |, , |加速ダウンローダー | | |I:4 | | | | |---------------+------+----+------+----------------------------| |aria2 |V:2, |1857|, , |BitTorrent と Metalink サポ | | |I:19 | | |ート付き、加速ダウンローダー| |---------------+------+----+------+----------------------------| |bind9-host |V:136,|380 |DNS |bind9 由来の host(1) コマン | | |I:944 | | |ド、"Priority: standard" | |---------------+------+----+------+----------------------------| |dnsutils |V:26, |259 |, , |bind 由来の dig(1) コマンド | | |I:372 | | |、"Priority: standard" | |---------------+------+----+------+----------------------------| |isc-dhcp-client|V:217,|2857|DHCP |IP アドレスの獲得 | | |I:981 | | | | |---------------+------+----+------+----------------------------| |ldap-utils |V:12, |762 |LDAP |LDAP サーバーからデーター獲 | | |I:72 | | |得 | +---------------------------------------------------------------+ 6.7. システムデーモンの診断     telnet プログラムを使うとシステムデーモンへの手動接続とその診断が できます。     プレーンな POP3 サービスをテストするには、次のようにします。     $ telnet mail.ispname.net pop3 一部の ISP が提供する TLS/SSL を有効にした POP3 サービスをテスト     するには、telnet-ssl か openssl パッケージによる、TLS/SSL を有効 にした telnet クライアントが必要です。     $ telnet -z ssl pop.gmail.com 995     $ openssl s_client -connect pop.gmail.com:995     次の RFC は各システムデーモンに関する必要な知見を提供します。 表6.14 よく使われる RFC のリスト +---------------------------------------------------------------+ | RFC | 説明 | |------------------+--------------------------------------------| |rfc1939 と rfc2449|POP3 サービス | |------------------+--------------------------------------------| |rfc3501 |IMAP4 サービス | |------------------+--------------------------------------------| |rfc2821 (rfc821) |SMTP サービス |     |------------------+--------------------------------------------| |rfc2822 (rfc822) |メールファイルフォーマット | |------------------+--------------------------------------------| |rfc2045 |Multipurpose Internet Mail Extensions (MIME)| |------------------+--------------------------------------------| |rfc819 |DNS サービス | |------------------+--------------------------------------------| |rfc2616 |HTTP サービス | |------------------+--------------------------------------------| |rfc2396 |URI 定義 | +---------------------------------------------------------------+     "/etc/services" の中にポートの使用され方が記載されています。 第7章 GUI システム 7.1. GUI desktop environment     There are several choices for the full featured GUI desktop environment on the Debian system. 表7.1 List of desktop environment +---------------------------------------------------------------+ | タスクパッケージ |ポプ |サイ| 説明 | | |コン | ズ | | |----------------------------+-----+----+-----------------------| |task-gnome-desktop |I:178|9 |GNOME デスクトップ環境 | |----------------------------+-----+----+-----------------------| |task-xfce-desktop |I:96 |9 |Xfce デスクトップ環境 | |----------------------------+-----+----+-----------------------| |task-kde-desktop |I:65 |6 |KDE Plasma デスクトップ| | | | |環境 |     |----------------------------+-----+----+-----------------------| |task-mate-desktop |I:44 |9 |MATE デスクトップ環境 | |----------------------------+-----+----+-----------------------| |task-cinnamon-desktop |I:35 |9 |Cinnamon デスクトップ環| | | | |境 | |----------------------------+-----+----+-----------------------| |task-lxde-desktop |I:30 |9 |LXDE デスクトップ環境 | |----------------------------+-----+----+-----------------------| |task-lxqt-desktop |I:15 |9 |LXQt デスクトップ環境 | |----------------------------+-----+----+-----------------------| |task-gnome-flashback-desktop|I:9 |6 |GNOME Flashback デスク | | | | |トップ環境 | +---------------------------------------------------------------+ ヒント Dependency packages selected by a task metapackage may be out of sync with the latest package transition state under the Debian unstable/testing environment. For task-gnome-desktop, you may need to adjust package selections as follows: * Start aptitude(8) as sudo aptitude -u. * カーサを "Tasks" に移動し "Enter" を押す。 * カーサを "End-user" に移動し "Enter" を押す。 * カーサを "GNOME" に移動し "Enter" を押す。     * カーサを task-gnome-desktop に移動し "Enter" を押す。 * カーサを "Depends" に移動し "m" (手動で manually 選択) を押す 。 * カーサを "Recommends" に移動し "m" (手動で manually 選択) を 押す。 * カーサを "task-gnome-desktop に移動し "-" を押す。 (drop) * Adjust selected packages while dropping problematic ones causing package conflicts. * "g" を押してインストールを開始する。     This chapter will focus mostly on the default desktop environment of Debian: task-gnome-desktop offering GNOME on wayland. 7.2. GUI 通信プロトコル     GNOME デスクトップで使用されうる GUI 通信プロトコル: * Wayland (ディスプレイサーバプロトコル) (ネイティブ)     * X Window System コアプロトコル (xwayland 経由)     Please check freedesktop.org site for how Wayland architecture is different from X Window architecture.     From user's perspective, differences can be colloquially summarized as: * Wayland is a same-host GUI communication protocol: new, simpler, faster, no setuid root binary     * X Window is a network-capable GUI communication protocol: traditional, complex, slower, setuid root binary For applications using Wayland protocol, the access to their     display contents from a remote host is supported by the VNC or RDP. See 「リモートデスクトップ」 Modern X servers have the MIT Shared Memory Extension and communicate with their local X clients using the local shared     memory. This bypasses the network transparent Xlib interprocess communication channel and gains performance. This situation was the background of creating Wayland as a local-only GUI communication protocol.     Using the xeyes program started from the GNOME terminal, you can check GUI communication protocol used by each GUI application.     $ xeyes * If the mouse cursor is on an application such as "GNOME terminal" which uses Wayland display server protocol, eyes don't move with the mouse cursor.     * If the mouse cursor is on an application such as "xterm" which uses X Window System core protocol, eyes move with the mouse cursor exposing not-so-isolated nature of X Window architecture. As of April 2021, many popular GUI applications such as GNOME and LibreOffice (LO) applications have been migrated to the Wayland     display server protocol. I see xterm, gitk, chromium, firefox, gimp, dia, and KDE applications still use X Window System core protocol. 注記 For both the xwayland on Wayland or the native X Window System,     the old X server configuration file "/etc/X11/xorg.conf" shouldn't exist on the system. The graphics and input devices are now configured by the kernel with DRM, KMS, and udev. The native X server has been rewritten to use them. See "modedb default video mode support" in the Linux kernel documentation. 7.3. GUI インフラストラクチャー     Here are notable GUI infrastructure packages for the GNOME on Wayland environment. 表7.2 List of notable GUI infrastructure packages +---------------------------------------------------------------+ | パッケージ |ポプコ|パッケー| 説明 | | | ン |ジサイズ| | |--------------------+------+--------+--------------------------| |mutter |V:3, |199 |GNOME の mutter ウィンドウ| | |I:100 | |マネージャ [自動] | |--------------------+------+--------+--------------------------|     |xwayland |V:174,|2329 |An X server running on top| | |I:238 | |of wayland [auto] | |--------------------+------+--------+--------------------------| | |V:62, | |Remote desktop daemon for | |gnome-remote-desktop|I:144 |1036 |GNOME using PipeWire | | | | |[auto] | |--------------------+------+--------+--------------------------| |gnome-tweaks |V:15, |1202 |Advanced configuration | | |I:199 | |settings for GNOME | +---------------------------------------------------------------+     Here, "[auto]" means that these packages are automatically installed when task-gnome-desktop is installed. ヒント gnome-tweaks is the indispensable configuration utility. For example:     * You can force "Over-Amplification" of sound volume from "General". * You can force "Caps" to become "Esc" from "Keyboard & Mouse" -> "Keyboard" -> "Additional Layout Option". 7.4. GUI アプリケーション 有用な GUI アプリケーションの多くは Debian で利用できるようになり ました。対応する機能が GNOME デスクトップ環境下では利用できないた     め、scribus (KDE) のようなソフトウェアを GNOME デスクトップ環境に インストールするのはまったく問題ありません。しかしながら、機能が 重複するパッケージをインストールしすぎるとあなたのシステムが散ら かってしまいます。     著者の目に止まった GUI アプリケーションのリストを記します。 表7.3 特筆すべき GUI アプリケーションの一覧 +---------------------------------------------------------------+ | |ポプコ|パッケ| | | | パッケージ | ン |ージサ|タイプ| 説明 | | | | イズ | | | |-------------------+------+------+------+----------------------| |evolution |V:26, |470 |GNOME |個人情報管理 (グループ| | |I:226 | | |ウエアと電子メール) | |-------------------+------+------+------+----------------------| |thunderbird |V:56, |193391|GTK |Eメールクライアント | | |I:123 | | |(Mozilla Thunderbird) | |-------------------+------+------+------+----------------------| |kontact |V:1, |2195 |KDE |個人情報管理 (グループ| | |I:12 | | |ウエアと電子メール) | |-------------------+------+------+------+----------------------| |libreoffice-writer |V:119,|38212 |LO |ワードプロセッサ | | |I:413 | | | | |-------------------+------+------+------+----------------------| |abiword |V:1, |3467 |GNOME |ワードプロセッサ | | |I:10 | | | | |-------------------+------+------+------+----------------------| |calligrawords |V:0, |5836 |KDE |ワードプロセッサ | | |I:7 | | | | |-------------------+------+------+------+----------------------| | |V:1, | | |PDF ファイルを編集する| |scribus |I:20 |30234 |KDE |ためのデスクトップパブ| | | | | |リッシング | |-------------------+------+------+------+----------------------| |glabels |V:0, |1338 |GNOME |ラベルエディター | | |I:4 | | | | |-------------------+------+------+------+----------------------| |libreoffice-calc |V:115,|30647 |LO |スプレッドシート | | |I:410 | | | | |-------------------+------+------+------+----------------------| |gnumeric |V:4, |10003 |GNOME |スプレッドシート | | |I:18 | | | | |-------------------+------+------+------+----------------------| |calligrasheets |V:0, |11244 |KDE |スプレッドシート | | |I:5 | | | | |-------------------+------+------+------+----------------------| |libreoffice-impress|V:80, |9098 |LO |プレゼンテーション | | |I:407 | | | | |-------------------+------+------+------+----------------------| |calligrastage |V:0, |5142 |KDE |プレゼンテーション | | |I:5 | | | | |-------------------+------+------+------+----------------------| |libreoffice-base |V:45, |5933 |LO |データーベース管理 | | |I:172 | | | | |-------------------+------+------+------+----------------------| |kexi |V:0, |7118 |KDE |データーベース管理 | | |I:1 | | | | |-------------------+------+------+------+----------------------| |libreoffice-draw |V:81, |13442 |LO |ベクトル画像エディター| | |I:408 | | |(ドロー) | |-------------------+------+------+------+----------------------| |inkscape |V:15, |99316 |GNOME |ベクトル画像エディター| | |I:147 | | |(ドロー) | |-------------------+------+------+------+----------------------| |karbon |V:0, |3581 |KDE |ベクトル画像エディター| | |I:5 | | |(ドロー) | |-------------------+------+------+------+----------------------| |dia |V:2, |3908 |GTK |フローチャートやダイア| | |I:26 | | |グラムエディター | |-------------------+------+------+------+----------------------| |gimp |V:50, |19767 |GTK |ビットマップ画像エディ|     | |I:273 | | |ター (ペイント) | |-------------------+------+------+------+----------------------| |shotwell |V:15, |6548 |GTK |デジタル写真オーガナイ| | |I:232 | | |ザー | |-------------------+------+------+------+----------------------| |digikam |V:2, |265 |KDE |デジタル写真オーガナイ| | |I:11 | | |ザー | |-------------------+------+------+------+----------------------| | |V:4, | | |lighttable and | |darktable |I:14 |29882 |GTK |darkroom for | | | | | |photographers | |-------------------+------+------+------+----------------------| |planner |V:0, |1458 |GNOME |プロジェクト管理 | | |I:3 | | | | |-------------------+------+------+------+----------------------| |calligraplan |V:0, |19013 |KDE |プロジェクト管理 | | |I:1 | | | | |-------------------+------+------+------+----------------------| |gnucash |V:3, |32579 |GNOME |個人会計 | | |I:9 | | | | |-------------------+------+------+------+----------------------| |homebank |V:0, |1232 |GTK |個人会計 | | |I:2 | | | | |-------------------+------+------+------+----------------------| |lilypond |V:1, |7368 |- |music typesetter | | |I:8 | | | | |-------------------+------+------+------+----------------------| |kmymoney |V:0, |13341 |KDE |個人会計 | | |I:2 | | | | |-------------------+------+------+------+----------------------| |librecad |V:1, |8798 |Qt ア |computer-aided design | | |I:16 | |プリ |(CAD) system (2D) | |-------------------+------+------+------+----------------------| |freecad |I:16 |53 |Qt ア |computer-aided design | | | | |プリ |(CAD) system (3D) | |-------------------+------+------+------+----------------------| | |V:2, | | |electronic schematic | |kicad |I:13 |196781|GTK |and PCB design | | | | | |software | |-------------------+------+------+------+----------------------| |xsane |V:12, |2339 |GTK |スキャナーのフロントエ| | |I:147 | | |ンド | |-------------------+------+------+------+----------------------| |libreoffice-math |V:65, |2234 |LO |数式エディター | | |I:411 | | | | |-------------------+------+------+------+----------------------| |calibre |V:7, |62725 |KDE |e-book コンバーターと | | |I:30 | | |ライブラリーの管理 | |-------------------+------+------+------+----------------------| |fbreader |V:1, |2631 |GTK |e-book リーダー | | |I:11 | | | | |-------------------+------+------+------+----------------------| |evince |V:92, |974 |GNOME |文書 (pdf) ビューワー | | |I:305 | | | | |-------------------+------+------+------+----------------------| |okular |V:33, |17297 |KDE |文書 (pdf) ビューワー | | |I:110 | | | | |-------------------+------+------+------+----------------------| | |V:26, | |純粋な| | |x11-apps |I:439 |2476 |X アプ|xeyes(1) など。 | | | | |リ | | |-------------------+------+------+------+----------------------| | |V:168,| |純粋な|xev(1), xwininfo(1) な| |x11-utils |I:556 |712 |X アプ|ど。 | | | | |リ | | +---------------------------------------------------------------+ 7.5. フォント Many useful scalable fonts are available for users on Debian.     User's concern is how to avoid redundancy and how to configure parts of installed fonts to be disabled. Otherwise, useless font choices may clutter your GUI application menus.     Debian system uses FreeType 2.0 library to rasterise many scalable font formats for screen and print: * Type 1 (PostScript) フォント、3次ベジェ曲線を使用 (ほぼ廃れた 形式)     * TrueType フォント、2次ベジェ曲線を使用 (よい選択肢) * OpenType フォント、3次ベジェ曲線を使用 (最良の選択肢) 7.5.1. 基本的なフォント The following table is compiled in the hope to help users to chose appropriate scalable fonts with clear understanding of the metric compatibility and the glyph coverage. Most fonts cover all     Latin fonts, Greek, and Cyril character glyphs. The final choice of activated fonts can also be affected by your aesthetics. These fonts can be used for the screen display or for the paper printing. 表7.4 List of notable TrueType and OpenType fonts +---------------------------------------------------------------+ | | | |サ | | | | | |ポプコ|サイ |ン |セ|等|フォントについ| | パッケージ | ン | ズ |セ |リ|幅| ての注釈 | | | | |リ |フ| | | | | | |フ | | | | |-------------------------+------+-----+---+--+--+--------------| | |V:124,| | | | |Cantarell | |fonts-cantarell |I:287 |572 |59 |- |- |(GNOME 3, | | | | | | | |display) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Noto fonts | |fonts-noto |I:130 |35 |61 |63|40|(Google, | | | | | | | |multi-lingual | | | | | | | |with CJK) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |DejaVu (GNOME | | | | | | | |2, | |fonts-dejavu |I:422 |39 |58 |68|40|MCM:Verdana, | | | | | | | |extended | | | | | | | |Bitstream | | | | | | | |Vera) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Liberation | | |V:116,| | | | |fonts for | |fonts-liberation2 |I:377 |4290 |56 |60|40|LibreOffice | | | | | | | |(Red Hat, | | | | | | | |MCMATC) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Chrome OS: | | |V:20, | | | | |Arimo, Tinos | |fonts-croscore |I:44 |5278 |56 |60|40|and Cousine | | | | | | | |(Google, | | | | | | | |MCMATC) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Chrome OS: | |fonts-crosextra-carlito |V:23, |2728 |57 |- |- |Carlito | | |I:174 | | | | |(Google, | | | | | | | |MCM:Calibri ) | |-------------------------+------+-----+---+--+--+--------------|     | | | | | | |Chrome OS: | | | | | | | |Caladea | |fonts-crosextra-caladea |I:172 |347 |- |55|- |(Google, | | | | | | | |MCM:Cambria ) | | | | | | | |(Latin only ) | |-------------------------+------+-----+---+--+--+--------------| | |V:64, | | | | |GNU FreeFont | |fonts-freefont-ttf |I:226 |6656 |57 |59|40|(extended URW | | | | | | | |Nimbus) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Debian | | | | | | | |task-desktop, | |fonts-quicksand |I:390 |392 |56 |- |- |Quicksand | | | | | | | |(display, | | | | | | | |Latin only) | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |A typeface | | |V:20, | | | |40|designed for | |fonts-hack |I:95 |2508 |- |- |P |source code | | | | | | | |Hack | | | | | | | |(Facebook) | |-------------------------+------+-----+---+--+--+--------------| |fonts-sil-gentiumplus |I:35 |13568|- |54|- |Gentium SIL | |-------------------------+------+-----+---+--+--+--------------| |fonts-sil-charis |I:26 |6406 |- |59|- |Charis SIL | |-------------------------+------+-----+---+--+--+--------------| | | | | | | |URW Nimbus | |fonts-urw-base35 |V:127,|11196|56 |60|40|(Sans, Roman | | |I:368 | | | | |No. 9 L, Mono | | | | | | | |L, MCAHTC) | |-------------------------+------+-----+---+--+--+--------------| |fonts-ubuntu |V:2, |4339 |58 |- |33|Ubuntu fonts | | |I:5 | | | |P |(display) | |-------------------------+------+-----+---+--+--+--------------| |fonts-terminus |V:0, |453 |- |- |33|Cool retro | | |I:2 | | | | |terminal fonts| |-------------------------+------+-----+---+--+--+--------------| | | | | | | |Downloader of | |ttf-mscorefonts-installer|V:0, |85 |56?|60|40|Microsoft | | |I:54 | | | | |non-free fonts| | | | | | | |(see below) | +---------------------------------------------------------------+     Here: * "MCM" stands for "metric compatible with fonts provided by Microsoft" * "MCMATC" stands for "metric compatible with fonts provided by Microsoft: Arial, Times New Roman, Courier New" * "MCAHTC" stands for "metric compatible with fonts provided by Adobe: Helvetica, Times, Courier"     * Numbers in font type columns stands for the rough relative "M" width for the same point size font. * "P" in mono font type columns stands for its usability for programming having clearly distinguishable "0"/"O" and "1"/ "I"/"l". * The ttf-mscorefonts-installer package downloads Microsoft's "Core fonts for the Web" and installs Arial, Times New Roman, Courier New, Verdana, ... . These installed font data are non-free data.     Many free Latin fonts have their lineage traced to URW Nimbus family or Bitstream Vera. ヒント If your locale needs fonts not covered well by the above fonts,     please use aptitude to check under task packages listed under "Tasks" -> "Localization". The font packages listed as "Depends:" or "Recommends:" in the localization task packages are the primary candidates. 7.5.2. Font rasterization Debian uses FreeType to rasterize fonts. Its font choice     infrastructure is provided by the Fontconfig font configuration library. 表7.5 有用フォント環境と関連パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコン|サイ| 説明 | | | | ズ | | |---------------------+--------+----+---------------------------| |libfreetype6 |V:526, |890 |FreeType フォントラスター化| | |I:996 | |ライブラリー | |---------------------+--------+----+---------------------------| |libfontconfig1 |V:523, |579 |Fontconfig、フォント設定ラ |     | |I:854 | |イブラリー | |---------------------+--------+----+---------------------------| |fontconfig |V:408, |617 |fc-*: Fontconfig の CLI コ | | |I:722 | |マンド | |---------------------+--------+----+---------------------------| |font-manager |V:2, I:8|1062|Font Manager: Fontconfig の| | | | |GUI コマンド | |---------------------+--------+----+---------------------------| |nautilus-font-manager|V:0, I:0|37 |Font ManagerのNautilus拡張 | +---------------------------------------------------------------+ ヒント Some font packages such as fonts-noto* install too many fonts. You may also want to keep some font packages installed but disabled under the normal use situation. The multiple glyphs are     expected for some Unicode code points due to Han unification and unwanted gliphs may be chosen by the unconfigured Fontconfig library. One of the most annoying case is "U+3001 IDEOGRAPHIC COMMA" and "U+3002 IDEOGRAPHIC FULL STOP" among CJK countries. You can avoid this problematic situation easily by configuring font availability using Font Manager GUI (font-manager).     You can list font configuration state from the command line, too. * fontconfig のフォントデフォルトに関しては "fc-match(1)"     * fontconfig で利用可能なフォントに関しては "fc-list(1)"     You can configure font configuration state from the text editor but this is non-trivial. See fonts.conf(5). 7.6. サンドボックス     Many mostly GUI applications on Linux are available in binary formats from non-Debian sources. * AppImage -- Linux apps that run anywhere     * FLATHUB -- Apps for Linux, right here * snapcraft -- The app store for Linux 警告     Binaries from these sites may include proprietary non-free software packages. There is some raison d'être for these binary format distributions for Free Software aficionados using Debian since these can     accommodate clean set of libraries used for each application by the respective upstream developer independent of the ones provided by Debian. The inherent risk of running external binaries can be reduced by     using the sandbox environment which leverages modern Linux security features (see 「Linux のセキュリティ機能」). * For binaries from AppImage and some upstream sites, run them in firejail with manual configuration.     * For binaries from FLATHUB, run them in Flatpak . (No manual configuration required.) * For binaries from snapcraft, run them in Snap . (No manual configuration required. Compatible with daemon programs.) The xdg-desktop-portal package provides a standardized API to     common desktop features. See xdg-desktop-portal (flatpak) and xdg-desktop-portal (snap) 表7.6 List of notable sandbox environment and related packages +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |-----------------------------+------+-----+--------------------| | |V:41, | |Flatpak application | |flatpak |I:44 |7350 |deployment framework| | | | |for desktop apps | |-----------------------------+------+-----+--------------------| |gnome-software-plugin-flatpak|V:10, |227 |Flatpak support for | | |I:17 | |GNOME Software | |-----------------------------+------+-----+--------------------| | |V:60, | |Daemon and tooling | |snapd |I:65 |59918|that enable snap | | | | |packages | |-----------------------------+------+-----+--------------------| |gnome-software-plugin-snap |V:1, |112 |Snap support for | | |I:2 | |GNOME Software | |-----------------------------+------+-----+--------------------|     | |V:227,| |desktop integration | |xdg-desktop-portal |I:309 |1773 |portal for Flatpak | | | | |and Snap | |-----------------------------+------+-----+--------------------| | |V:193,| |xdg-desktop-portal | |xdg-desktop-portal-gtk |I:307 |746 |backend for gtk | | | | |(GNOME) | |-----------------------------+------+-----+--------------------| |xdg-desktop-portal-kde |V:6, |1300 |xdg-desktop-portal | | |I:10 | |backend for Qt (KDE)| |-----------------------------+------+-----+--------------------| | |V:0, | |xdg-desktop-portal | |xdg-desktop-portal-wlr |I:1 |123 |backend for wlroots | | | | |(Wayland) | |-----------------------------+------+-----+--------------------| | | | |a SUID security | |firejail |V:1, |1771 |sandbox program | | |I:5 | |firejail for use | | | | |with AppImage | +---------------------------------------------------------------+ This sandbox environment technology is very much like apps on     smart phone OS where apps are executed under controlled resource accesses. Some large GUI applications such as web browsers on Debian also     use sandbox environment technology internally to make them more secure. 7.7. リモートデスクトップ 表7.7 List of notable remote access server Access to the desktop and applications which use Wayland protocol and run on the remote host is supported by the GNOME Remote Desktop on the remote host through VNC or RDP to the local client. Access to the desktop capabilities of all QEMU virtual machines is supported by the SPICE (the Simple Protocol for Independent Computing Environments) protocol. +---------------------------------------------------------------+ | パッケージ |ポプ |サイ|プロトコル| 説明 | | |コン | ズ | | | |--------------------+-----+----+----------+--------------------| |gnome-remote-desktop|V:62,|1036|RDP, RFB |GNOME Remote Desktop| | |I:144| |(VNC) |サーバ | |--------------------+-----+----+----------+--------------------| | |V:4, | |RDP, RFB |Vinagre: GNOME | |vinagre |I:111|4249|(VNC), |remote desktop |     | | | |SPICE, SSH|client | |--------------------+-----+----+----------+--------------------| | | | |RDP, RFB | | |remmina |V:13,|897 |(VNC), |Remmina: GTK remote | | |I:62 | |SPICE, |desktop client | | | | |SSH, ... | | |--------------------+-----+----+----------+--------------------| |krdc |V:1, |3882|RDP, RFB |KRDC: KDE remote | | |I:17 | |(VNC) |desktop client | |--------------------+-----+----+----------+--------------------| | | | |RDP, RFB |Apache Guacamole: | |guacd |V:0, |80 |(VNC), SSH|clientless remote | | |I:0 | |/ HTML5 |desktop gateway | | | | | |(HTML5) | |--------------------+-----+----+----------+--------------------| | | | | |Virtual Machine | |virt-viewer |V:4, |1316|RFB (VNC),|Manager's GUI | | |I:51 | |SPICE |display client of | | | | | |guest OS | +---------------------------------------------------------------+ 7.8. Xサーバ接続     There are several ways to connect from an application on a remote host to the X server including xwayland on the local host. 表7.8 X サーバーへの接続方法のリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| コマンド | 説明 | | | ン | ズ | | | |-----------------+------+----+-----------------+---------------| |openssh-server |V:738,|1867|sshd with option |SSH サーバ (セ | | |I:843 | |X11-forwarding |キュア) | |-----------------+------+----+-----------------+---------------|     |openssh-client |V:855,|5609|ssh -X |SSH クライアン | | |I:997 | | |ト (セキュア) | |-----------------+------+----+-----------------+---------------| |xauth |V:154,|90 |xauth |X 認証ファイル | | |I:952 | | |ユーティリティ | |-----------------+------+----+-----------------+---------------| |x11-xserver-utils|V:284,|576 |xhost |X のサーバアク | | |I:505 | | |セス制御 | +---------------------------------------------------------------+ 7.8.1. X サーバローカル接続 Access to the local X server by the local applications which use X core protocol can be locally connected through a local UNIX domain socket. This can be authorized by the authority file     holding access cookie. The authority file location is identified by the "$XAUTHORITY" environment variable and X display is identified by the "$DISPLAY" environment variable. Since these are normally set automatically, no special action is needed, e.g. "gitk" as the following.     username $ gitk 注記     For xwayland, XAUTHORITY holds value like "/run/user/1000 /.mutter-Xwaylandauth.YVSU30". 7.8.2. X サーバリモート接続 Access to the local X server display from the remote applications     which use X core protocol is supported by using the X11 forwarding feature. * ローカルホスト上で gnome-terminal を開きます。 * Run ssh(1) with -X option to establish a connection with the remote site as the following.     localname @ localhost $ ssh -q -X loginname@remotehost.domain Password: * リモートホスト上の "gitk" 等の X アプリケーションコマンドを次のよ うに実行します。 loginname @ remotehost $ gitk ここに書かれた手法はリモート X クライアントがあたかもローカルの     UNIX ドメインソケット経由でローカル接続されているかのようにして、 リモート X クライアントからの出力を表示できるようにします。     See 「リーモートアクセスサーバーとユーティリティー (SSH)」 for SSH/SSHD. 警告     A remote TCP/IP to the X server is disabled by default on the Debian system for security reasons. Don't enable them by simply setting "xhost +" nor by enabling XDMCP connection, if you can avoid it. 7.8.3. X サーバ chroot 接続 Access to the X server by the applications which use X core protocol and run on the same host but in an environment such as     chroot where the authority file is not accessible, can be authorized securely with xhost by using the User-based access, e.g. "gitk" as the following. username $ xhost + si:localuser:root ; sudo chroot /path/to # cd /src     # gitk # exit username $ xhost - 7.9. クリップボード     For clipping text to clipboard, see 「マウス操作」.     For clipping graphics to clipboard, see 「グラフィクスデーターツ ール」.     Some CLI commands can manipulate character clipboard (PRIMARY and CLIPBOARD), too. 表7.9 List of programs related to manipulating character clipboard +---------------------------------------------------------------+ | |ポプ |パッケ |ターゲ | | | パッケージ |コン |ージサ | ット | 説明 | | | | イズ | | | |------------+-----+-------+-------+----------------------------| |xsel |V:8, |59 |X |X選択のコマンドラインインタ | | |I:41 | | |ーフェース (クリップボード) | |------------+-----+-------+-------+----------------------------|     |xclip |V:10,|64 |X |X選択のコマンドラインインタ | | |I:53 | | |ーフェース (クリップボード) | |------------+-----+-------+-------+----------------------------| | |V:1, | | |wl-copy wl-paste: command | |wl-clipboard|I:5 |141 |Wayland|line interface to Wayland | | | | | |clipboard | |------------+-----+-------+-------+----------------------------| | |V:11,| |Linux |Linux コンソールのマウスイベ| |gpm |I:14 |521 |コンソ |ントを捉えるデーモン | | | | |ール | | +---------------------------------------------------------------+ 第8章 I18N と L10N     アプリケーションソフトの多言語化 (M17N) とかネイティブ言語サポー トは2段階で行います。 * 国際化 (I18N): ソフトが複数のロケール (地域) を扱えるようにし     ます。 * 地域化 (L10N): 特定のロケール (地域) を扱えるようにします。 ヒント     There are 17, 18, or 10 letters between "m" and "n", "i" and "n", or "l" and "n" in multilingualization, internationalization, and localization which correspond to M17N, I18N, and L10N. See Introduction to i18n for details. 8.1. ロケール The behavior of programs supporting internationalization are configured by the environment variable "$LANG" to support     localization. Actual support of locale dependent features by the libc library requires to install locales or locales-all packages. The locales package requires to be initialized properly. If neither locales or locales-all package are installed, support     of locale features are lost and system uses US English messages and handles data as ASCII. This behavior is the same way as "$LANG" is set by "LANG=", "LANG=C", or "LANG=POSIX". GNOME や KDE 等の現代的なソフトは多言語化されています。UTF-8 デー ターを扱えるようにすることで国際化され、gettext(1) インフラで翻訳     されたメッセージを提供することで地域化されています。翻訳されたメ ッセージは別の地域化パッケージとして供給されているかもしれません 。 The current Debian desktop GUI system normally sets the locale under GUI environment as "LANG=xx_YY.UTF-8". Here, "xx" is ISO     639 language codes and "YY" is ISO 3166 country codes. These values are set by the desktop configuration GUI dialogue and change the program behavior. See 「"$LANG" 変数」 8.1.1. UTF-8 ロケールを使う根拠     テキストデータの最も単純な表現は ASCII で、英語には十分で 127 未 満の文字 (7 ビットで表現可能) を使います。 プレーンな英語のテキストですら非 ASCII 文字を含んでいるかもしれま     せん。例えば微妙に曲がった左右のクォテーションマークは ASCII 内で は利用できません。     “double quoted text” is not "double quoted ASCII" ‘single quoted text’ is not 'single quoted ASCII' より多くの文字をサポートするために、多くの言語をサポートする多数     の文字集合とエンコーディング体系が使用されてきました (表11.2「符 号化方式値とその使い方リスト」を参照)。 ユニコード文字セットは実質的に人類が知り得る全ての文字を21ビット     のコードポイント範囲 (16進表記で 0 から 10FFFF まで) で表記できま す。 Text encoding system UTF-8 fits Unicode code points into a sensible 8 bit data stream mostly compatible with the ASCII data processing system. This makes UTF-8 the modern preferred choice.     UTF stands for Unicode Transformation Format. When ASCII plain text data is converted to UTF-8 one, it has exactly the same content and size as the original ASCII one. So you loose nothing by deploying UTF-8 locale. Under UTF-8 locale with the compatible application program, you can display and edit any foreign language text data as long as     required fonts and input methods are installed and enabled. For example under "LANG=fr_FR.UTF-8" locale, gedit(1) (text editor for the GNOME Desktop) can display and edit Chinese character text data while presenting menus in French. ヒント 新標準の "en_US.UTF-8" ロケールと旧標準の "C"/"POSIX" ロケールは     標準アメリカ英語のメッセージを使いますが、ソート順などでわずかに 違います。古い "C" ロケールの挙動を保守する際に、ASCII 文字を扱う だけでなく、UTF-8 でエンコードされた全ての文字を優雅に扱いたい場 合は、非標準の "C.UTF-8" ロケールを Debian で使います。 注記 一部のプログラムは I18N をサポートした後でより多くのメモリーを消     費するようになります。それらのプログラムは、実行速度最適化のため に内部的に UTF-32 (UCS4) で Unicode のサポートをコードされていて 、選ばれたロケールに無関係にそれぞれの ASCII 文字データー毎に4バ イトを消費するからです。ここでも、UTF-8 ロケールを使ったからとい って何も失うわけではありません。 8.1.2. ロケールの再設定     システムが特定のロケールにアクセスできるように、ロケールデータを ロケールデータベースからコンパイルする必要が有ります。     The locales package does not come with pre-compiled locale data. You need to configure it as:     # dpkg-reconfigure locales     このプロセスは2段階あります。 1. Select all required locale data to be compiled into the binary form. (Please make sure to include at least one UTF-8     locale) 2. Set the system wide default locale value by creating "/etc/ default/locale" for use by PAM (see 「PAM と NSS」).     The system wide default locale value set in "/etc/default/locale" may be overridden by the GUI configuration for GUI applications. 注記     Actual traditional encoding system can be identified by "/usr/ share/i18n/SUPPORTED". Thus, the "LANG=en_US" is "LANG= en_US.ISO-8859-1".     The locales-all package comes with all locale data pre-compiled but doesn't creating "/etc/default/locale". 8.1.3. ファイル名の符号化方式 クロスプラットフォームのデーター交換 (「リムーバブルストレージデ バイス」参照下さい) のために、特定の符号化方式 (エンコーディング)     でファイルシステムをマウントする必要があるかもしれません。例えば 、vfat ファイルシステムに関して mount(8) はオプション無しの場合 CP437 とみなします。ファイル名に UTF-8 とか CP932 を使うためには 明示的にマウントオプションを提供する必要があります。 注記 GNOME のような現代的なデスクトップ環境の下では、デスクトップアイ     コンを右クリックし "Drive" タブをクリックし "Setting" を開くよう にクリックし "Mount options:" に"utf8" を入力すれば、ホットプラグ できる USB メモリーを自動マウントする時のマウントオプションを設定 できます。このメモリースティックを次にマウントする機会には UTF-8 でのマウントが有効です。 注記 もしシステムをアップグレードしたり旧式非 UTF-8 システムからディス     クを移動したりする場合には、非 ASCII 文字のファイル名は ISO-8859-1 とか eucJP 等の今は非推奨の歴史的符号化方式で符号化を しているかもしれません。テキスト変換ツールの助力を得て、ファイル 名を UTF-8 に変換します。「テキストデーター変換ツール」を参照下さ い。 Samba は新規クライアント (Windows NT、200x、XP) には Unicode を使 いますが、旧式クライアント (DOS、Windows 9x/Me) には CP850 をデフ     ォールトで使います。この旧式クライアントへのデフォールトは "/etc/ samba/smb.conf" ファイル中の "dos charset" を使って例えば日本語な ら CP932 等と変更できます。 8.1.4. 地域化されたメッセージと翻訳された文書 Debian システム中で表示されるエラーメッセージや標準のプログラムの     出力やメニューやマニュアルページ等のテキストメッセージや文書の多 くに翻訳があります。ほとんどの翻訳行為のバックエンドツールとして GNU gettext(1) コマンドツールチェインが使われています。 "Tasks" → "Localization" の下の aptitude(8) リストは地域化された     メッセージをアプリケーションに追加したり翻訳された文書を提供する 有用なバイナリーパッケージの徹底的なリストを提供します。 例えば、manpages-LANG パッケージをインストールするとマンページで     地域化したメッセージに使えるようになります。programname に関する イタリア語のマンページを "/usr/share/man/it/" から読むには、次を 実行します。     LANG=it_IT.UTF-8 man programname     GNU gettext can accommodate priority list of translation languages with $LANGUAGE environment variable. For example:     $ export LANGUAGE="pt:pt_BR:es:it:fr"     For more, see info gettext and read the section "The LANGUAGE variable". 8.1.5. ロケールの効果     sort(1) のソート順はロケールの言語選択に影響されます。スペイン語 と英語のロケールではソート順が違います。 ls(1) の日付形式はロケールに影響されます。"LANG=C ls -l" と "LANG     =en_US.UTF-8" の日付形式は違います (「時間と日付のカスタム化表示 」を参照)。 Number punctuation are different for locales. For example, in     English locale, one thousand point one is displayed as "1,000.1" while in German locale, it is displayed as "1.000,1". You may see this difference in spreadsheet program. Each detail feature of "$LANG" environment variable may be overridden by setting "$LC_*" variables. These environment variables can be overridden again by setting "$LC_ALL" variable.     See locale(7) manpage for the details. Unless you have strong reason to create complicated configuration, please stay away from them and use only "$LANG" variable set to one of the UTF-8 locales. 8.2. キーボード入力 8.2.1. The keyboard input for Linux console and X Window Debian システムは keyboard-configuration と console-setup パッケ     ージを使い多くの国際キーボード配列として機能するように設定できま す。     # dpkg-reconfigure keyboard-configuration # dpkg-reconfigure console-setup For the Linux console and the X Window system, this updates configuration parameters in "/etc/default/keyboard" and "/etc/     default/console-setup". This also configures the Linux console font. Many non-ASCII characters including accented characters used by many European languages can be made available with dead key, AltGr key, and compose key. 8.2.2. Wayland 向けのキーボード入力 For GNOME on Wayland desktop system, 「The keyboard input for Linux console and X Window」 can't support non-English European languages. IBus was made to support not only Asian languages but     also European languages. The package dependency of GNOME Desktop Environment recommends "ibus" via "gnome-shell". The code of "ibus" has been updated to integrate setxkbmap and XKB option functionalities. You need to configure ibus from "GNOME Settings" or "GNOME Tweaks" for the multilingualized keyboard input. 注記 If ibus is active, your classic X keyboard configuration by the     setxkbmap may be overridden by ibus even under classic X-based desktop environment. You can disable installed ibus using im-config to set input method to "None". For more, see Debian Wiki on keyboard. 8.2.3. IBus を使うインプットメソッドのサポート     Since GNOME Desktop Environment recommends "ibus" via "gnome-shell", "ibus" is the good choice for input method.     アプリケーションへの多言語入力は次のように処理されます。 Keyboard Application | ^     | | +-> Linux kernel -> Input method (ibus) -> Gtk, Qt, X, Wayland +-- Engine--+     IBus とそのエンジンパッケージの一覧は以下の通りです。 表8.1 IBusとエンジンパッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | サポートされたロケール | | | ン | ズ | | |---------------------+------+-----+----------------------------| |ibus |V:160,|1637 |dbus を用いるインプットメソ | | |I:202 | |ッドのフレームワーク | |---------------------+------+-----+----------------------------| |ibus-mozc |V:2, |935 |日本語 | | |I:3 | | | |---------------------+------+-----+----------------------------| |ibus-anthy |V:0, |8825 |, , | | |I:1 | | | |---------------------+------+-----+----------------------------| |ibus-skk |V:0, |243 |, , | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-kkc |V:0, |215 |, , | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-libpinyin |V:0, |2711 |中国語 (zh_CN 用) | | |I:2 | | | |---------------------+------+-----+----------------------------| |ibus-chewing |V:0, |422 |, , (zh_TW 用) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-libzhuyin |I:0 |40987|, , (zh_TW 用) | |---------------------+------+-----+----------------------------|     |ibus-rime |V:0, |79 |, , (for zh_CN/zh_TW) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-cangjie |V:0, |119 |, , (for zh_HK) | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-hangul |V:0, |285 |韓国語 | | |I:2 | | | |---------------------+------+-----+----------------------------| |ibus-libthai |I:0 |90 |タイ語 | |---------------------+------+-----+----------------------------| |ibus-table-thai |I:0 |56 |タイ語 | |---------------------+------+-----+----------------------------| |ibus-unikey |V:0, |318 |ベトナム語 | | |I:0 | | | |---------------------+------+-----+----------------------------| |ibus-keyman |V:0, |129 |Multilingual: Keyman engine | | |I:0 | |for over 2000 languages | |---------------------+------+-----+----------------------------| |ibus-table |V:0, |2118 |IBus 用のテーブルエンジン | | |I:1 | | | |---------------------+------+-----+----------------------------| |ibus-m17n |V:0, |366 |多言語: インド系言語、アラビ| | |I:2 | |ア語、他 | |---------------------+------+-----+----------------------------| | |V:34, | |additional widgets for | |plasma-widgets-addons|I:83 |1974 |Plasma 5 containing Keyboard| | | | |Indicartor | +---------------------------------------------------------------+ 注記 For Chinese, "fcitx5" may be an alternative input method     framework. For Emacs aficionados, "uim" may be an alternative. Either cases, you may need to do extra manual configuration with im-config. Some old classic input methods such as "kinput2" may still exist in Debian repository but are not recommended for the modern environment. 8.2.4. 日本語の例 日本語インプットメソッドを英語環境 ("en_US.UTF-8") 下で起動すると     非常に便利です。Wayland 環境下で IBus を使ってどう実現したかを以 下に記します。 1. Install the Japanese input tool package ibus-mozc (or ibus-anthy) with its recommended packages such as im-config. 2. 有効になっていない場合は "Settings" → "Keyboard" → "Input Sources" → click "+" in "Input Sources" → "Japanese" → "Japanese mozc (or anthy)" を選択し "Add" をクリックします。     3. You may chose as many input sources. 4. ユーザーアカウントに再ログインします。 5. Setup each input source by right clicking the GUI toolbar icon. 6. インプットソース間を、SUPER-SPACE を用いて切り替えます。 (SUPER は通常 Windows キーです。) ヒント If you wish to have access to alphabet only keyboard environment     with the physical Japanese keyboard on which shift-2 has " (double quotation mark) engraved, you select "Japanese" in the above procedure. You can enter Japanese using "Japanese mozc (or anthy)" with physical "US" keyboard on which shift-2 has @ (at mark) engraved. * The GUI menu entry for im-config(8) is "Input method". * あるいは、ユーザのシェルから "im-config" を実行します。     * im-config(8) は実行されるのが root からかどうかによって違った 挙動をします。 * im-config(8) はユーザーからのアクション無しにシステム上で最も 好ましいインプットメソッドを有効にします。 8.3. ディスプレー出力 Linux コンソールは限定された文字しか表示できません。(非 GUI コン     ソール上で非ヨーロッパ言語を表示するには jfbterm(1) のような特別 なターミナルプログラムを使う必要があります。) GUI environment (7章GUI システム) can display any characters in     the UTF-8 as long as required fonts are installed and enabled. (The encoding of the original font data is taken care and transparent to the user.) 8.4. 東アジア不明瞭文字幅文字 東アジアのロケールでは、箱描画文字やギリシャ文字やキリル文字はあ     なたが望むよりも広い幅で表示されて、ターミナル出力が揃わなくなる かもしれません(Unicode標準附属書 #11 参照)。     この問題は回避可能です: * gnome-terminal: Preferences → Profiles → Profile name → Compatibility → Ambiguous-wide characters → Narrow     * ncurses: 環境変数を export NCURSES_NO_UTF8_ACS=0 と設定します 。 第9章システムに関するティップ     主にコンソールからシステムを設定や管理する基本的なティップを次に 記します。 9.1. The console tips     There are some utility programs to help your console activities. 表9.1 List of programs to support console activities +---------------------------------------------------------------+ |パッケー|ポプコ |サイ| 説明 | | ジ | ン | ズ | | |--------+-------+----+-----------------------------------------| |mc |V:53, |1482|「ミッドナイトコマンダー (MC)」を参照 | | |I:227 | | | |--------+-------+----+-----------------------------------------| |bsdutils|V:614, |355 |script command to make typescript of | | |I:999 | |terminal session | |--------+-------+----+-----------------------------------------| |screen |V:90, |997 |VT100/ANSI ターミナルエミュレーションを使| | |I:265 | |ってのターミナルマルチプレクサ | |--------+-------+----+-----------------------------------------| |tmux |V:38, |1106|代替のターミナルマルチプレクサ (代わりに | | |I:148 | |"Control-B" を用いる) | |--------+-------+----+-----------------------------------------|     |fzf |V:3, |2858|ファジーテキストファインダ | | |I:11 | | | |--------+-------+----+-----------------------------------------| |fzy |V:0, |54 |ファジーテキストファインダ | | |I:0 | | | |--------+-------+----+-----------------------------------------| |rlwrap |V:1, |330 |readline feature command line wrapper | | |I:17 | | | |--------+-------+----+-----------------------------------------| |ledit |V:0, |315 |readline feature command line wrapper | | |I:13 | | | |--------+-------+----+-----------------------------------------| |rlfe |V:0, |42 |readline feature command line wrapper | | |I:0 | | | |--------+-------+----+-----------------------------------------| |ripgrep |V:3, |4557|fast recursive string search in the | | |I:14 | |source code tree with automatic filtering| +---------------------------------------------------------------+ 9.1.1. シェルの活動を綺麗に記録 単に script(1) を使ってシェル活動を記録すると (「シェル活動の記録     」参照下さい)、コントロール文字の入ったファイルが生成されます。こ のような事は次のようにして col(1) を使うことで避けられます。     $ script Script started, file is typescript     何なりとします … そして script から脱出するために Ctrl-D を押しま す。     $ col -bx < typescript > cleanedfile $ vim cleanedfile     シェルの活動を記録する他の方法もあります: * tee を使う (initramfs 中のブートプロセスで有用): $ sh -i 2>&1 | tee typescript * Use gnome-terminal with the extend line buffer for scrollback. * Use screen with "^A H" (see 「screen プログラム」) to perform     recording of console. * Use vim with ":terminal" to enter the terminal mode. Use "Ctrl-W N" to exit from terminal mode to normal mode. Use ":w typescript" to write the buffer to a file. * Use emacs with "M-x shell", "M-x eshell", or "M-x term" to enter recording console. Use "C-x C-w" to write the buffer to a file. 9.1.2. screen プログラム screen(1) は複数のプロセスを1つのターミナルウィンドウでうまく動作     させるのみならず、接続が中断してもリモートシェルプロセスを生き延 びさせる事もできます。screen(1) の使われ方の典型的シナリオは次で す。 1. リモート機器にログインします。 2. 単一のコンソール上で screen を起動します。 3. ^A c ("Control-A" に続いて "c") によって作られた screen のウ ィンドウ中で複数のプログラムを実行します。 4. ^A n ("Control-A" に続いて "n") によって、複数の screen のウ ィンドウ間を切り替えます。 5. 突然ターミナルを離れる必要ができたけれども、接続を継続してあ なたが実行中の作業を失いたくありません。 6. 次のようないかなる方法ででも、screen のセッションをデタッチで きます。     + 暴力的にネットワーク接続を引き抜く + ^A d ("Control-A" に続いて "d") とタイプしてリモート接続 から手動でログアウト + ^A DD ("Control-A" に続いて "DD") とタイプして screen を デタッチしてログアウト 7. 同じリモート機器に (たとえ異なるターミナルからでも) 再びログ インします。 8. screen を"screen -r" として起動します。 9. screen は全アクティブなプログラムが実行されている過去の全 screen ウィンドウを魔法のようにリアタッチします。 ヒント     screen を使うと、切断してもプロセスをアクティブにしておけその後で 再接続した時にリアタッチできるので、ダイヤルアップやパケット接続 のような計量されたネットワーク接続での接続料金の節約ができます。 screen セッションではコマンドキーストローク以外の全てのキーボード 入力は現在のウィンドウに送られます。全ての screen コマンドキース     トロークは ^A ("Control-A") と単一キー [プラス何らかのパラメータ ー] をタイプすることによって入力されます。次に覚えておくべき重要 なコマンドキーストロークを記します。 表9.2 screen キーバインディングのリスト +---------------------------------------------------------------+ |キーバインディン| 意味 | | グ | | |----------------+----------------------------------------------| |^A ? |ヘルプスクリーンを表示 (キーバインディングを表| | |示) | |----------------+----------------------------------------------| |^A c |新規ウィンドウを作成しそれに切り替える | |----------------+----------------------------------------------| |^A n |次のウィンドウに切り替える | |----------------+----------------------------------------------| |^A p |前のウィンドウに切り替える | |----------------+----------------------------------------------| |^A 0 |0番のウィンドウに切り替える | |----------------+----------------------------------------------|     |^A 1 |1番のウィンドウに切り替える | |----------------+----------------------------------------------| |^A w |ウィンドウのリストを表示 | |----------------+----------------------------------------------| |^A a |Ctrl-A を現在のウィンドウにキーボード入力とし | | |て送る | |----------------+----------------------------------------------| |^A h |現在のウィンドウのハードコピーをファイルに書く| |----------------+----------------------------------------------| |^A H |現在のウィンドウのファイルへのロギングを開始/ | | |終了する | |----------------+----------------------------------------------| |^A ^X |ターミナルをロック (パスワードで保護) | |----------------+----------------------------------------------| |^A d |ターミナルから screen のセッションをデタッチ | |----------------+----------------------------------------------| |^A DD |screen のセッションをデタッチしてログアウト | +---------------------------------------------------------------+     詳細は screen(1) を参照下さい。     代替コマンドの機能については tmux(1) を参照下さい。 9.1.3. Navigating around directories     In 「Bash のカスタム化」, 2 tips to allow quick navigation around directories are described: $CDPATH and mc.     If you use fuzzy text filter program, you can do without typing the exact path. For fzf, include following in ~/.bashrc. FZF_KEYBINDINGS_PATH=/usr/share/doc/fzf/examples/key-bindings.bash if [ -f $FZF_KEYBINDINGS_PATH ]; then . $FZF_KEYBINDINGS_PATH     fi FZF_COMPLETION_PATH=/usr/share/doc/fzf/examples/completion.bash if [ -f $FZF_COMPLETION_PATH ]; then . $FZF_COMPLETION_PATH fi     たとえば: * You can jump to a very deep subdirectory with minimal efforts. You first type "cd **" and press Tab. Then you will be prompted with candidate paths. Typing in partial path strings, e.g., s/d/b foo, will narrow down candidate paths. You select the path to be used by cd with cursor and return keys.     * You can select a command from the command history more efficiently with minimal efforts. You press Ctrl-R at the command prompt. Then you will be prompted with candidate commands. Typing in partial command strings, e.g., vim d, will narrow down candidates. You select the one to be used with cursor and return keys. 9.1.4. Readline wrapper Some commands such as /usr/bin/dash which lacks command line     history editing capability can add such functionality transparently by running under rlwrap or its equivalents.     $ rlwrap dash -i     This provides convenient platform to test subtle points for dash with friendly bash-like environment. 9.1.5. Scanning the source code tree The rg(1) command in the ripgrep package offers a faster alternative to the grep(1) command for scanning the source code     tree for typical situation. It takes advantage of modern multi-core CPUs and automatically applies reasonable filters to skip some files. 9.2. Vim のカスタム化 After you learn basics of vim(1) through 「Using vim」, please     read Bram Moolenaar's "Seven habits of effective text editing (2000)" to understand how vim should be used. 注意     Don't try to change the default key bindings without very good reasons. 9.2.1. Customizing vim with internal features The behavior of vim can be changed significantly by enabling its     internal features through the Ex-mode commands such as "set ..." to set vim options. These Ex-mode commands can be included in user's vimrc file,     traditional "~/.vimrc" or git-friendly "~/.vim/vimrc". Here is a very simple example ^[2]: colorscheme murphy " from /usr/share/vim/vim??/colors/*.vim filetype plugin indent on " filetype aware behavior syntax enable " Syntax highlight "set spelllang=en_us " Spell check language as en_us "set spell " Enable spell check     set autoindent " Copy indent from current line set smartindent " More than autoindent (Drop/Pop after {/}) set nosmarttab " -key always inserts blanks set backspace=indent,eol,start " Back space through everything set laststatus=2 " Always show status line set statusline=%<%f%m%r%h%w%=%y[U+%04B]%2l/%2L=%P,%2c%V 9.2.2. Customizing vim with external packages Simple customization to enable secure-modelines and classical IDE     can be enabled by installing vim-scripts package and appending the following to user's vimrc file. packadd! secure-modelines packadd! winmanager let mapleader = ' ' " Toggle paste mode with p set pastetoggle=p     " IDE-like UI for files and buffers with w nnoremap w :WMToggle " Use safer keys for moving to another window nnoremap h nnoremap j nnoremap k nnoremap l In order for the above keybindings to function properly, the     terminal program needs to be configured to generate "ASCII DEL" for Backspace-key and "Escape sequence" for Delete-key. The new native Vim package system works nicely with "git" and     "git submodule". One such example configuration can be found at my git repository: dot-vim. This does essentially: * By using "git" and "git submodule", latest external packages, such as "name", are placed into ~/.vim/pack/*/opt/name and similar. * By adding :packadd! name line to user's vimrc file, these     packages are placed on runtimepath. * Vim loads these packages on runtimepath during its initialization. * At the end of its initialization, tags for the installed documents are updated with "helptags ALL".     For more, please start vim with "vim --startuptime vimstart.log" to check actual execution sequence and time spent for each step.     Interesting external plugin packages can be found: * Vim - the ubiquitous text editor -- The official upstream site of Vim and vim scripts     * VimAwsome -- The listing of Vim plugins * vim-scripts -- Debian package: a collection of vim scripts It is quite confusing to see too many ways^[3] to manage and load     these external packages to vim. Checking the original information is the best cure. 表9.3 Information on the initialization of vim +---------------------------------------------------------------+ |key strokes | information | |------------+--------------------------------------------------| |:help |explanation on the vim package mechanism | |package | | |------------+--------------------------------------------------| |:help |explanation on the runtimepath mechanism | |runtimepath | | |------------+--------------------------------------------------| |:version |internal states including candidates for the vimrc|     | |file | |------------+--------------------------------------------------| |:echo $VIM |the environment variable "$VIM" used to locate the| | |vimrc file | |------------+--------------------------------------------------| |:set |list of directories which will be searched for all| |runtimepath?|runtime support files | |------------+--------------------------------------------------| |:echo |the environment variable "$VIMRUNTIME" used to | |$VIMRUNTIME |locate various system provided runtime support | | |files | +---------------------------------------------------------------+ 9.3. データーの記録と表現 9.3.1. ログデーモン     Many traditional programs record their activities in the text file format under the "/var/log/" directory.     logrotate(8) is used to simplify the administration of log files on a system which generates a lot of log files. Many new programs record their activities in the binary file     format using systemd-journald(8) Journal service under the "/var/ log/journal" directory.     You can log data to the systemd-journald(8) Journal from a shell script by using the systemd-cat(1) command.     「システムメッセージ」と「カーネルメッセージ」を参照下さい。 9.3.2. ログアナライザー     注目すべきログアナライザー (aptitude(8) で "~Gsecurity::log-analyzer") を次に記します。 表9.4 システムログアナライザーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ |サイ| 説明 | | | ン | ズ | | |--------------+-------+----+-----------------------------------| |logwatch |V:14, |2328|綺麗な出力の Perl で書かれたログア | | |I:16 | |ナライザー | |--------------+-------+----+-----------------------------------| |fail2ban |V:111, |2127|複数回の認証エラーを発生させる IP | | |I:125 | |を使用禁止にします | |--------------+-------+----+-----------------------------------| |analog |V:3, |3739|ウェッブサーバーのログアナライザー | | |I:100 | | | |--------------+-------+----+-----------------------------------| |awstats |V:8, |6895|強力で機能の多いウェッブサーバーの | | |I:13 | |ログアナライザー | |--------------+-------+----+-----------------------------------| |sarg |V:1, |845 |squid の分析レポートジェネレター | | |I:2 | | | |--------------+-------+----+-----------------------------------|     |pflogsumm |V:2, |109 |Postfix ログ項目サマライザー | | |I:4 | | | |--------------+-------+----+-----------------------------------| |syslog-summary|V:0, |30 |syslog ログファイルの内容をまとめる| | |I:1 | | | |--------------+-------+----+-----------------------------------| |fwlogwatch |V:0, |477 |ファイアウォールログアナライザー | | |I:0 | | | |--------------+-------+----+-----------------------------------| |squidview |V:0, |189 |squid の access.log ファイルのモニ | | |I:0 | |ターと分析 | |--------------+-------+----+-----------------------------------| |swatch |V:0, |99 |正規表現マッチ、ハイライト、フック | | |I:0 | |機能付きログファイルビューワー | |--------------+-------+----+-----------------------------------| |crm114 |V:0, |1119|制御可能な正規表現切断機とスパムフ | | |I:0 | |ィルター (CRM114) | |--------------+-------+----+-----------------------------------| |icmpinfo |V:0, |44 |ICMP メッセージの解釈 | | |I:0 | | | +---------------------------------------------------------------+ 注記     CRM114 はTRE 正規表現ライブラリーを使うファジーなフィルターを書く 言語インフラを提供します。そのよくある応用はスパムメールのフィル ターですが、ログアナライザーとしても使えます。 9.3.3. テキストデーターのカスタム化表示 more(1) や less(1) 等のページャーツール (「ページャー」参照下さ い) や、ハイライトやフォーマット用のカスタムツール (「プレーンテ     キストデーターをハイライトとフォーマット」参照下さい) はテキスト データーを綺麗に表示できますが、汎用エディター (「テキストエディ ター」参照下さい) が最も汎用性がありカスタム化が可能です。 ヒント     vim(1) やそのページャーモードのエイリアス view(1) では、":set hls" とするとハイライトサーチが可能になります。 9.3.4. 時間と日付のカスタム化表示 The default display format of time and date by the "ls -l"     command depends on the locale (see 「タイムスタンプ」 for value). The "$LANG" variable is referred first and it can be overridden by the "$LC_TIME" or "$LC_ALL" exported environment variables. The actual default display format for each locale depends on the     version of the standard C library (the libc6 package) used. I.e., different releases of Debian had different defaults. For iso-formats, see ISO 8601. ロケール以上にこの時間や日付の表示フォーマットをカスタム化したい     と真摯に望むなら、"--time-style" 引数か "$TIME_STYLE" 値を使って 時間スタイル値を設定するべきです (ls(1) と date(1) と "info coreutils 'ls invocation'" を参照下さい)。 表9.5 Display examples of time and date for the "ls -l" command with the time style value +---------------------------------------------------------------+ |時間スタイル | ロケール | 時間と日付の表示 | | 値 | | | |-------------+-----------------+-------------------------------| |iso |任意 |01-19 00:15 | |-------------+-----------------+-------------------------------| |long-iso |任意 |2009-01-19 00:15 | |-------------+-----------------+-------------------------------| |full-iso |任意 |2009-01-19 00:15:16.000000000 | | | |+0900 | |-------------+-----------------+-------------------------------|     |locale |C |Jan 19 00:15 | |-------------+-----------------+-------------------------------| |locale |en_US.UTF-8 |Jan 19 00:15 | |-------------+-----------------+-------------------------------| |locale |es_ES.UTF-8 |ene 19 00:15 | |-------------+-----------------+-------------------------------| |+%d.%m.%y |任意 |19.01.09 00:15 | |%H:%M | | | |-------------+-----------------+-------------------------------| |+%d.%b.%y |C または |19.Jan.09 00:15 | |%H:%M |en_US.UTF-8 | | |-------------+-----------------+-------------------------------| |+%d.%b.%y |es_ES.UTF-8 |19.ene.09 00:15 | |%H:%M | | | +---------------------------------------------------------------+ ヒント     コマンドの別名を使えばコマンドライン上で長いオプションを入力しな くてもよくなります (「コマンドエイリアス」を参照下さい)。 alias ls='ls --time-style=+%d.%m.%y %H:%M' 9.3.5. 着色化されたシェル出力 殆どの現代的なターミナルへのシェル出力は ANSI エスケープコードを     使って着色化できます ("/usr/share/doc/xterm/ctlseqs.txt.gz" を参 照下さい)。     例えば、次を試してみて下さい: $ RED=$(printf "\x1b[31m")     $ NORMAL=$(printf "\x1b[0m") $ REVERSE=$(printf "\x1b[7m") $ echo "${RED}RED-TEXT${NORMAL} ${REVERSE}REVERSE-TEXT${NORMAL}" 9.3.6. 着色化されたコマンド     着色化されたコマンドは対話環境で出力を検査するのに便利です。私は 、私の "~/.bashrc" に次を含めています。 if [ "$TERM" != "dumb" ]; then eval "`dircolors -b`" alias ls='ls --color=always' alias ll='ls --color=always -l' alias la='ls --color=always -A' alias less='less -R' alias ls='ls --color=always'     alias grep='grep --color=always' alias egrep='egrep --color=always' alias fgrep='fgrep --color=always' alias zgrep='zgrep --color=always' else alias ll='ls -l' alias la='ls -A' fi エイリアスを使うことで色効果を対話コマンド使用時に限定します。こ うすると less(1) 等のページャープログラムの下でも色を見られるので     、環境変数 "export GREP_OPTIONS='--color=auto'" をエキスポートす るより都合が良いです。他のプログラムにパイプする際に色を使いたく なければ、先ほどの "~/.bashrc" 例中で代わりに "--color=auto" とし ます。 ヒント     対話環境でシェルを "TERM=dumb bash" として起動することで、このよ うな着色するエイリアスを無効にできます。 9.3.7. 複雑な反復のためにエディターでの活動を記録     複雑な反復のためにエディターでの活動を記録できます。     Vim の場合以下のようにします。 * "qa": 名前付きレジスタ "a" にタイプした文字の記録を開始。 * … エディターでの活動     * "q": タイプした文字の記録を終了。 * "@a": レジスター "a" の内容を実行。     Emacs の場合は以下のようにします。 * "C-x (": キーボードマクロの定義開始。 * … エディターでの活動     * "C-x )": キーボードマクロの定義終了。 * "C-x e": キーボードマクロの実行。 9.3.8. X アプリケーションの画像イメージの記録     xterm の表示を含めた、X アプリケーションの画像イメージを記録する にはいくつか方法があります。 表9.6 画像の操作ツールのリスト +----------------------------------------------------------------+ | パッケージ |ポプコン|サイ | screen | コマンド | | | | ズ | | | |----------------+--------+-----+--------+-----------------------| |gnome-screenshot|V:24, |1134 |Wayland |screenshot application | | |I:259 | | |for GNOME | |----------------+--------+-----+--------+-----------------------| |flameshot |V:6, |3361 |Wayland |screenshot application | | |I:12 | | |on steroid |     |----------------+--------+-----+--------+-----------------------| |gimp |V:50, |19767|Wayland |screenshot in GUI menu | | |I:273 | |+ X | | |----------------+--------+-----+--------+-----------------------| |x11-apps |V:26, |2476 |X |xwd(1) | | |I:439 | | | | |----------------+--------+-----+--------+-----------------------| |imagemagick |I:327 |176 |X |import(1) | |----------------+--------+-----+--------+-----------------------| |scrot |V:5, |129 |X |scrot(1) | | |I:68 | | | | +----------------------------------------------------------------+ 9.3.9. 設定ファイルの変更記録     There are specialized tools to record changes in configuration files with help of DVCS and to make system snapshots on Btrfs. 表9.7 設定の履歴を記録するパッケージのリスト +---------------------------------------------------------------+ |パッケー |ポプ |サイ| 説明 | | ジ |コン | ズ | | |---------+-----+----+------------------------------------------| | |V:28,| |Git (デフォールト) か Mercurial か Bazaar | |etckeeper|I:31 |163 |を使って設定ファイルとそのメタデーターを保|     | | | |存 (新規) | |---------+-----+----+------------------------------------------| |timeshift|V:3, |3155|system restore utility using rsync or | | |I:6 | |BTRFS snapshots | |---------+-----+----+------------------------------------------| |snapper |V:4, |2233|Linux filesystem snapshot management tool | | |I:5 | | | +---------------------------------------------------------------+     You may also think about local script 「Personal backup」 approach. 9.4. プログラム活動の監視と制御と起動     プログラム活動は専用ツールを用いて監視と制御できます。 表9.8 プログラム活動の監視と制御のツールのリスト +---------------------------------------------------------------+ |パッケー |ポプコ|サイ | 説明 | | ジ | ン | ズ | | |---------+------+-----+----------------------------------------| |coreutils|V:910,|18062|nice(1): スケジューリングの優先順位の変 | | |I:999 | |更してプログラムを実行 | |---------+------+-----+----------------------------------------| |bsdutils |V:614,|355 |renice(1): 実行中プロセスのスケジューリ | | |I:999 | |ングの優先順位を変更 | |---------+------+-----+----------------------------------------| | |V:760,| |"/proc" ファイルシステムのユーティリティ| |procps |I:999 |2091 |ー: ps(1) と top(1) と kill(1) と watch | | | | |(1) 等 | |---------+------+-----+----------------------------------------| | |V:424,| |"/proc" ファイルシステムのユーティリティ| |psmisc |I:799 |909 |ー: killall(1) と fuser(1) と pstree(1) | | | | |と pstree(1) | |---------+------+-----+----------------------------------------| |time |V:10, |129 |time(1): 時間に関するシステムリソース使 | | |I:183 | |用状況を報告するためにプログラムを実行 | |---------+------+-----+----------------------------------------| |sysstat |V:163,|1785 |sar(1)、iostat(1)、mpstat(1)、…: Linux | | |I:186 | |用のシステムパーフォーマンスツール | |---------+------+-----+----------------------------------------|     |isag |V:0, |106 |sysstat の対話型システムアクティビティー| | |I:3 | |グラフ化ソフト | |---------+------+-----+----------------------------------------| |lsof |V:388,|482 |lsof(8): "-p" オプションを使い実行中のプ| | |I:942 | |ロセスが開いているファイルをリスト | |---------+------+-----+----------------------------------------| |strace |V:13, |2367 |strace(1): システムコールやシグナルを追 | | |I:136 | |跡 | |---------+------+-----+----------------------------------------| |ltrace |V:0, |338 |ltrace(1): ライブラリーコールを追跡 | | |I:19 | | | |---------+------+-----+----------------------------------------| |xtrace |V:0, |353 |xtrace(1): X11 のクライアントとサーバー | | |I:0 | |の間の通信を追跡 | |---------+------+-----+----------------------------------------| |powertop |V:10, |650 |powertop(1): システムの電力消費情報 | | |I:197 | | | |---------+------+-----+----------------------------------------| |cron |V:850,|220 |cron(8) デーモンからバックグランドでスケ| | |I:996 | |ジュール通りプロセスを実行 | |---------+------+-----+----------------------------------------| |anacron |V:373,|91 |1日24時間動作でないシステム用の cron 類 | | |I:453 | |似のコマンドスケジューラー | |---------+------+-----+----------------------------------------| |at |V:124,|159 |at(1) と batch(1) コマンド: 特定の時間や| | |I:206 | |特定のロードレベル以下でジョブを実行 | +---------------------------------------------------------------+ ヒント     procps パッケージはプログラム活動の監視と制御と起動の基本中の基本 を提供します。このすべてを習得するべきです。 9.4.1. プロセスの時間計測     コマンドが起動したプロセスにより使われた時間を表示します。 # time some_command >/dev/null     real 0m0.035s # time on wall clock (elapsed real time) user 0m0.000s # time in user mode sys 0m0.020s # time in kernel mode 9.4.2. スケジューリングの優先度     ナイス値はプロセスのスケジューリングの優先度を制御するのに使われ ます。 表9.9 スケジューリングの優先度のためのナイス値のリスト +------------------------------------------------------------+ |ナイス値| スケジューリングの優先度 | |--------+---------------------------------------------------|     |19 |優先度が最低のプロセス (ナイス) | |--------+---------------------------------------------------| |0 |ユーザーにとっての優先度が非常に高いプロセス | |--------+---------------------------------------------------| |-20 |rootにとっての優先度が非常に高いプロセス (非ナイス)| +------------------------------------------------------------+     # nice -19 top # very nice # nice --20 wodim -v -eject speed=2 dev=0,0 disk.img # very fast     極端なナイス値はシステムに害を与えるかもしれません。本コマンドは 注意深く使用下さい、 9.4.3. ps コマンド     Debian 上の ps(1) コマンドは BSD と SystemV 機能の両方をサポート しプロセスの活動を静的に特定するのに有用です。 表9.10 ps コマンドのスタイルのリスト +----------------------------------------+ |スタイル|典型的コマンド| 特徴 |     |--------+--------------+----------------| |BSD |ps aux |%CPU %MEM を表示| |--------+--------------+----------------| |System V|ps -efH |PPID を表示 | +----------------------------------------+     ゾンビ (動作していない) 子プロセスに関して、"PPID" フィールドで識 別される親プロセス ID を使ってプロセスを停止できます。     pstree(1) コマンドはプロセスの木 (ツリー) を表示します。 9.4.4. top コマンド     Debian 上の top(1) は機能が豊富で、どのプロセスがおかしな動きをし ているかを動的に識別することに役立ちます。 それはインタラクティブなフルスクリーンプログラムです。"h"-キーを     押すことで使用法のヘルプが得られ、 "q"-キーを押すことで終了できま す。 9.4.5. プロセスによって開かれているファイルのリスト     プロセス ID (PID)、例えば1を使うプロセスによって開かれている全フ ァイルは次のようにしてリストできます。     $ sudo lsof -p 1     PID=1 は通常 init プログラムです。 9.4.6. プログラム活動の追跡 プラグラムの活動状況は、システムコールとシグナルは strace(1) で、     ライブラリーコールは ltrace(1) で、X11 のクライアントとサーバーの 通信は xtrace(1) でプラグラムの活動状況を追跡できます。     ls コマンドのシステムコールを次のようにして追跡できます。     $ sudo strace ls ヒント     Use strace-graph script found in /usr/share/doc/strace/examples/ to make a nice tree view 9.4.7. ファイルやソケットを使っているプロセスの識別     例えば "/var/log/mail.log" 等のファイルを使っているプロセスは fuser(1) によって次のようにして識別できます。 $ sudo fuser -v /var/log/mail.log     USER PID ACCESS COMMAND /var/log/mail.log: root 2946 F.... rsyslogd     "/var/log/mail.log" ファイルが rsyslogd(8) コマンドによって書込み のために開かれている事が分かります。     例えば "smtp/tcp" 等のソケットを使っているプロセスは fuser(1) に よって次のようにして識別できます。 $ sudo fuser -v smtp/tcp     USER PID ACCESS COMMAND smtp/tcp: Debian-exim 3379 F.... exim4     SMTP ポート (25) への TCP 接続を処理するためにあなたのシステムで は exim4(8) が実行されている事がこれで分かります。 9.4.8. 一定間隔でコマンドを反復実行     watch(1) はプログラムを一定間隔で反復実行しながらフルスクリーンで その出力を表示します。     $ watch w     こうすると2秒毎更新でシステムに誰がログオンしているかを表示します 。 9.4.9. ファイルに関してループしながらコマンドを反復実行 例えばグロブパターン "*.ext" へのマッチ等の何らかの条件にマッチす     るファイルに関してループしながらコマンドを実行する方法がいくつか あります。     * シェルの for-loop 法 (「シェルループ」参照下さい):     for x in *.ext; do if [ -f "$x"]; then command "$x" ; fi; done     * find(1) と xargs(1) の組み合わせ:     find . -type f -maxdepth 1 -name '*.ext' -print0 | xargs -0 -n 1 command     * コマンド付きの "-exec" オプションを使って find(1):     find . -type f -maxdepth 1 -name '*.ext' -exec command '{}' \;     * 短いシェルスクリプト付きの "-exec" オプションを使って find (1):     find . -type f -maxdepth 1 -name '*.ext' -exec sh -c "command '{}' && echo 'successful'" \; 上記の例はスペースを含む等の変なファイル名でも適正に処理できるよ     うに書かれています。find(1) に関する上級の使用法の詳細は「ファイ ル選択の慣用句」を参照下さい。 9.4.10. GUI からプログラムをスタート コマンドラインインターフェース (CLI) の場合、$PATH 環境変数で指定     されるディレクトリー中で最初にマッチした名前のプログラムが実行さ れます。「"$PATH" 変数」を参照ください。 For the graphical user interface (GUI) compliant to the freedesktop.org standards, the *.desktop files in the /usr/share/ applications/ directory provide necessary attributes for the GUI menu display of each program. Each package which is compliant to     Freedesktop.org's xdg menu system installs its menu data provided by "*.desktop" under "/usr/share/applications/". Modern desktop environments which are compliant to Freedesktop.org standard use these data to generate their menu using the xdg-utils package. See "/usr/share/doc/xdg-utils/README". 例えば chromium.desktop ファイルは、プログラム名の "Name" や、プ     ログラムの実行パスと引数の "Exec" や、使用するアイコンの "Icon" 等の属性(Desktop Entry Specification 参照)を "Chromium Web Browser" に関して以下のようにして定義します: [Desktop Entry] Version=1.0 Name=Chromium Web Browser GenericName=Web Browser Comment=Access the Internet Comment[fr]=Explorer le Web Exec=/usr/bin/chromium %U     Terminal=false X-MultipleArgs=false Type=Application Icon=chromium Categories=Network;WebBrowser; MimeType=text/html;text/xml;application/xhtml_xml;x-scheme-handler/http;x-scheme-handler/https; StartupWMClass=Chromium StartupNotify=true     これは簡略化しすぎた記述ですが、*.desktop ファイルは以下のように してスキャンされます。     デスクトップ環境は $XDG_DATA_HOME と $XDG_DATA_DIR 環境変数を設定 します。例えば GNOME 3 では: * $XDG_DATA_HOME が未設定。(デフォルト値の $HOME/.local/share が使われます。)     * $XDG_DATA_DIRS は /usr/share/gnome:/usr/local/share/:/usr/ share/ に設定されます。 以上により、ベースディレクトリー (XDG Base Directory     Specification 参照) や applications ディレクトリーは以下となりま す。 * $HOME/.local/share/ → $HOME/.local/share/applications/ * /usr/share/gnome/ → /usr/share/gnome/applications/     * /usr/local/share/ → /usr/local/share/applications/ * /usr/share/ → /usr/share/applications/     *.desktop ファイルはこれらの applications ディレクトリーでこの順 番でスキャンされます。 ヒント     ユーザーによるカスタムの GUI メニュー項目は *.desktop ファイルを $HOME/.local/share/applications/ ディレクトリーに追加することで生 成できます。 ヒント 同様に、もしこれらのベースディレクトリーの下の autostart ディレク     トリーの中に*.desktop ファイルが作成されれば、*.desktop ファイル 中に指定されたプログラムがデスクトップ環境が起動された時点に自動 実行されます。Desktop Application Autostart Specification を参照 ください。 ヒント     同様に、もし$HOME/Desktop ディレクトリーの中に*.desktop ファイル が作成され、デスクトップ環境がローンチャーアイコンを表示する機能 を有効としていれば、そこに指定されたプログラムがアイコンをクリッ クした際に実行されます。xdg-user-dirs-update(1) を参照ください。 9.4.11. スタートするプログラムのカスタム化     一部のプログラムは他のプログラムを自動的にスタートします。このプ ロセスをカスタム化する上でのチェックポイントを次に記します。 * アプリケーション設定メニュー: + GNOME3 デスクトップ: "Settings" → "System" → "Details" → "Default Applications" + KDE デスクトップ: "K" → "Control Center" → "KDE Components" → "Component Chooser" + Iceweasel ブラウザー: "Edit" → "Preferences" → "Applications" + mc(1): "/etc/mc/mc.ext"     * Environment variables such as "$BROWSER", "$EDITOR", "$VISUAL", and "$PAGER" (see environ(7)) * "editor" や "view" や "x-www-browser" や "gnome-www-browser" や "www-browser" 等のプログラムに関する update-alternatives (8) システム (「デフォールトのテキストエディターの設定」参照 下さい) * MIME タイプとプログラムと関係づける、"~/.mailcap" や "/etc/ mailcap" ファイルの内容 (mailcap(5) 参照下さい) * ファイル拡張子と MIME タイプとプログラムと関係づける、"~ /.mime.types" や "/etc/mime.types" ファイルの内容 (run-mailcap(1) 参照下さい) ヒント     update-mime(8) は"/etc/mailcap.order" ファイルを使って "/etc/ mailcap" ファイルを更新します (mailcap.order(5) 参照下さい)。 ヒント     debianutils パッケージは、どのエディターやページャーやウェッブブ ラウザーを呼び出すかに関してそれぞれ賢明な判断をする sensible-browser(1) や sensible-editor(1) や sensible-pager(1) を 提供します。これらのシェルスクリプトを読む事をお薦めします。 ヒント In order to run a console application such as mutt under GUI as your preferred application, you should create an GUI application as following and set "/usr/local/bin/mutt-term" as your preferred     application to be started as described. # cat /usr/local/bin/mutt-term <> $HOME/tmp/out 2>&1     # run at 14:15 on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly # run at 22:00 on weekdays(1-5), annoy Joe. % for newline, last % for cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every Sunday" # run at 03:40 on the first Monday of each month 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args ヒント     連続的に稼働していないシステムでは、機器のアップタイム上可能な限 り指定間隔に近く定期的にコマンドをスケジュールするために anacron パッケージをインストールします。anacron(8) と anacrontab(5) を参 照下さい。 ヒント スケジュールされたシステムメインテナンススクリプトは、そのような     スクリプトを "/etc/cron.hourly/" か "/etc/cron.daily/" か "/etc/ cron.weekly/" か "/etc/cron.monthly/" 中に置くことで root アカウ ントからそれらを定期的に実行できます。これらのスクリプトの実行時 間は "/etc/crontab" と "/etc/anacrontab" でカスタム化できます。 Systemd has low level capability to schedule programs to run     without cron daemon. For example, /lib/systemd/system/ apt-daily.timer and /lib/systemd/system/apt-daily.service set up daily apt download activities. See systemd.timer(5) . 9.4.15. Alt-SysRq キー     Pressing Alt-SysRq (PrtScr) followed by one keys does the magic of rescuing control of the system. 表9.12 List of notable SAK command keys +---------------------------------------------------------------+ |Alt-SysRq に| アクションの説明 | | 続くキー | | |------------+--------------------------------------------------| |k |kill all processes on the current virtual console | | |(SAK) | |------------+--------------------------------------------------|     |s |データーが壊れないように全てのマウントされたファイ| | |ルシステムをsync (同期)します。 | |------------+--------------------------------------------------| |u |全てのマウントされたファイルシステムを読出し専用で| | |再マウント (アンマウント、umount) | |------------+--------------------------------------------------| |r |X クラッシュの後でキーボードを raw (生コード発生) | | |モードから復旧 | +---------------------------------------------------------------+     See more on Linux kernel user’s and administrator’s guide » Linux Magic System Request Key Hacks ヒント SSH ターミナルなどからは、"/proc/sysrq-trigger" に書き込むことで     Alt-SysRq 機能が使えます。例えば、リモートのシェルプロンプトから "echo s > /proc/sysrq-trigger; echo u > /proc/sysrq-trigger" とす ると、全てのマウントされたファイルシステムを sync (同期) して u mount (アンマウント) します。     The current (2021) Debian amd64 Linux kernel has /proc/sys/kernel /sysrq=438=0b110110110: * 2 = 0x2 - enable control of console logging level (ON) * 4 = 0x4 - enable control of keyboard (SAK, unraw) (ON) * 8 = 0x8 - enable debugging dumps of processes etc. (OFF) * 16 = 0x10 - enable sync command (ON)     * 32 = 0x20 - enable remount read-only (ON) * 64 = 0x40 - enable signaling of processes (term, kill, oom-kill) (OFF) * 128 = 0x80 - allow reboot/poweroff (ON) * 256 = 0x100 - allow nicing of all RT tasks (ON) 9.5. システム管理ティップ 9.5.1. だれがシステムを利用している?     だれがシステムを利用しているかは、次のようにしてチェックできます 。 * who(1) shows who is logged on. * w(1) shows who is logged on and what they are doing.     * last(1) shows listing of last logged in user. * lastb(1) は、最後にログイン失敗したユーザーのリストを表示しま す。 ヒント     "/var/run/utmp" と "/var/log/wtmp" はこのようなユーザー情報を保持 します。login(1) と utmp(5) を参照下さい。 9.5.2. 全員への警告     wall(1) を使うと、次のようにしてシステムにログオンしている全員に メッセージを送れます。     $ echo "We are shutting down in 1 hour" | wall 9.5.3. ハードウエアーの識別 PCI 的デバイス (AGP、PCI-Express、CardBus、ExpressCard、等) では     、 (きっと "-nn" オプションとともに使う) lspci(8) がハードウエア ー識別の良いスタート点です。 この代わりに、"/proc/bus/pci/devices" の内容を読むか、"/sys/bus/     pci" の下のディレクトリーツリーを閲覧することでハードウエアーの識 別ができます (「procfs と sysfs」参照下さい)。 表9.13 ハードウエアー識別ツールのリスト +---------------------------------------------------------------+ |パッケージ |ポプコン |サイ| 説明 | | | | ズ | | |-----------+---------+----+------------------------------------| |pciutils |V:222, |210 |Linux PCI ユーティリティー: lspci(8)| | |I:989 | | | |-----------+---------+----+------------------------------------| |usbutils |V:70, |325 |Linux USB ユーティリティー: lsusb(8)| | |I:854 | | | |-----------+---------+----+------------------------------------| |nvme-cli |V:8, I:15|1295|NVMe utilities for Linux: nvme(1) | |-----------+---------+----+------------------------------------|     |pcmciautils|V:8, I:13|91 |Linux のための PCMCIA ユーティリティ| | | | |ー: pccardctl(8) | |-----------+---------+----+------------------------------------| |scsitools |V:0, I:3 |375 |SCSI ハードウエアー管理のためのツー | | | | |ル集: lsscsi(8) | |-----------+---------+----+------------------------------------| |procinfo |V:0, I:11|132 |"/proc" から得られるシステム情報: | | | | |lsdev(8) | |-----------+---------+----+------------------------------------| |lshw |V:13, |919 |ハードウエアー設定に関する情報: lshw| | |I:96 | |(1) | |-----------+---------+----+------------------------------------| |discover |V:36, |98 |ハードウエアー識別システム: discover| | |I:950 | |(8) | +---------------------------------------------------------------+ 9.5.4. ハードウエアー設定 GNOME や KDE のような現代的な GUI のデスクトップ環境ではほとんど     のハードウエアー設定が付随する GUI 設定ツールを通じて管理できます が、それらの設定の基本的手法を知っておくのは良い事です。 表9.14 ハードウエアー設定ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |-----------------+------+-----+--------------------------------| |console-setup |V:85, |425 |Linux コンソールのフォントとキー| | |I:963 | |テーブルユーティリティー | |-----------------+------+-----+--------------------------------| |x11-xserver-utils|V:284,|576 |X サーバーユーティリティー: xset| | |I:505 | |(1)、xmodmap(1) | |-----------------+------+-----+--------------------------------| | |V:108,| |Advanced Configuration and Power| |acpid |I:207 |154 |Interface (ACPI) によって起こる | | | | |イベントの管理のためのデーモン | |-----------------+------+-----+--------------------------------| |acpi |V:12, |45 |ACPI デバイス上の情報を表示する | | |I:192 | |ユーティリティー | |-----------------+------+-----+--------------------------------| |sleepd |V:0, |86 |非使用状況のときにラップトップを| | |I:0 | |スリープさせるデーモン |     |-----------------+------+-----+--------------------------------| | |V:241,| |ハードディスクアクセスの最適化 (| |hdparm |I:465 |256 |「ハードディスクの最適化」参照下| | | | |さい) | |-----------------+------+-----+--------------------------------| |smartmontools |V:189,|2199 |S.M.A.R.T. を使ってストレージシ | | |I:237 | |ステムを制御監視 | |-----------------+------+-----+--------------------------------| |setserial |V:4, |103 |シリアルポートの管理ツール集 | | |I:8 | | | |-----------------+------+-----+--------------------------------| |memtest86+ |V:0, |12681|メモリーハードウエアー管理のため| | |I:24 | |のツール集 | |-----------------+------+-----+--------------------------------| |scsitools |V:0, |375 |SCSI ハードウエアー管理のための | | |I:3 | |ツール集 | |-----------------+------+-----+--------------------------------| |setcd |V:0, |35 |コンパクトデバイスアクセス最適化| | |I:0 | | | |-----------------+------+-----+--------------------------------| |big-cursor |I:0 |26 |X のための大きなマウスカーソール| +---------------------------------------------------------------+     上記で、ACPI はAPM より新しい電力管理システムの枠組みです。 ヒント     最近のシステム上の CPU フリーケンシースケーリングは acpi_cpufreq のようなカーネルモジュールで管理されています。 9.5.5. システムとハードウエアーの時間     以下はシステムとハードウエアーの時間を MM/DD hh:mm, CCYY (月/日 時:分, 年) に設定します。 # date MMDDhhmmCCYY     # hwclock --utc --systohc # hwclock --show     Debian システムでは時間は通常地域の時間が表示されますが、ハードウ エアーとシステムの時間は通常 UTC(GMT) を使います。     If the hardware time is set to UTC, change the setting to "UTC= yes" in the "/etc/default/rcS".     Debian システムが使うタイムゾーンは以下のようにして再設定できます 。     # dpkg-reconfigure tzdata ネットワーク経由でシステムの時間を更新したい場合には、ntp や     ntpdate や chrony 等のパッケージを使って NTP サービスを利用するこ とを考えます。 ヒント     systemd の下では、ネットワーク時間同期には上記と代わり systemd-timesyncd を使います。詳細は systemd-timesyncd(8) を参照 ください。     次を参照下さい。 * 正確な日時の管理ハウツー     * NTP 公共サービスプロジェクト * ntp-doc パッケージ ヒント     ntp パッケージ中の ntptrace(8) を使うと、NTP サービスの継がりを第 一義的根源まで溯ることができます。 9.5.6. ターミナルの設定     文字コンソールと ncurses(3) システム機能を設定するのはいくつかの 要素があります。 * "/etc/terminfo/*/*" ファイル (terminfo(5))     * "$TERM" 環境変数 (term(7)) * setterm(1)、stty(1)、tic(1)、toe(1) もし xterm 用の terminfo エントリーが非 Debian のxterm でうまく機 能しない場合には、リモートから Debian システムにログインする時に     ターミナルタイプ、"$TERM"、を "xterm" から "xterm-r6" のような機 能限定版に変更します。詳細は "/usr/share/doc/libncurses5/FAQ" を 参照下さい。"dumb" は"$TERM" の最低機能の共通項です。 9.5.7. 音のインフラ 現在の Linux のためのサウンドカードのためのデバイスドライバーは     Advanced Linux Sound Architecture (ALSA) で提供されています。ALSA は過去の Open Sound System (OSS) と互換性のためのエミュレーション モードを提供します。 Application softwares may be configured not only to access sound devices directly but also to access them via some standardized     sound server system. Currently, PulseAudio, JACK, and PipeWire are used as sound server system. See Debian wiki page on Sound for the latest situation. 各ポピュラーなデスクトップ環境では普通共通のサウンドエンジンがあ     ります。アプリケーションに使われるそれぞれのサウンドエンジンはそ れと異なるサウンドサーバーにつなぐようにもできます。 ヒント     "cat /dev/urandom > /dev/audio" か speaker-test(1) を使ってスピー カをテストします。(^C で停止) ヒント     音が出ない場合ですが、あなたのスピーカーが消音された出力につなが っているかもしれません。現代的なサウンドシステムには多くの出力が あります。alsa-utils パッケージ中の alsamixer(1) は音量や消音の設 定をするのに便利です。 表9.15 サウンドパッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |-------------------------------+------+----+-------------------| |alsa-utils |V:311,|2475|ALSA を設定し使用す| | |I:443 | |るユーティリティー | |-------------------------------+------+----+-------------------| | |V:2, | |ALSA の下で "/dev/ | |oss-compat |I:22 |20 |dsp not found" エラ| | | | |ーを防ぐ OSS 互換性| |-------------------------------+------+----+-------------------| | | | |audio and video | | | | |processing engine | |pipewire |V:234,|95 |multimedia server -| | |I:296 | |metapackage (unify | | | | |JACK and | | | | |PulseAudio) | |-------------------------------+------+----+-------------------| | | | |audio and video | | | | |processing engine | |pipewire-bin |V:250,|1516|multimedia server -| | |I:296 | |programs (unify | | | | |JACK and | | | | |PulseAudio) | |-------------------------------+------+----+-------------------| | | | |audio and video | | | | |processing engine |     | | | |multimedia server -| |pipewire-audio-client-libraries|V:0, |26 |audio client | | |I:2 | |libraries to | | | | |replace ALSA, JACK | | | | |and PulseAudio | | | | |(experimental) | |-------------------------------+------+----+-------------------| |pulseaudio |V:354,|6462|PulseAudio server | | |I:438 | |(standard) | |-------------------------------+------+----+-------------------| |libpulse0 |V:383,|969 |PulseAudio client | | |I:566 | |library (standard) | |-------------------------------+------+----+-------------------| | | | |JACK Audio | |jackd |V:2, |9 |Connection Kit. | | |I:22 | |(JACK) サーバー (低| | | | |遅延) | |-------------------------------+------+----+-------------------| | | | |JACK Audio | |libjack0 |V:1, |329 |Connection Kit. | | |I:10 | |(JACK) ライブラリー| | | | |(低遅延) | |-------------------------------+------+----+-------------------| |libgstreamer1.0-0 |V:404,|5404|GStreamer: GNOME サ| | |I:570 | |ウンドエンジン | |-------------------------------+------+----+-------------------| |libphonon4 |I:34 |680 |Phonon: KDE サウン | | | | |ドエンジン | +---------------------------------------------------------------+ 9.5.8. スクリーンセーバーの無効化     スクリーンセーバーを無効にするには、次のコマンドを使います。 表9.16 スクリーンセーバーを無効にするコマンドのリスト +---------------------------------------------------------------+ | 環境 | コマンド | |-------------------------------------+-------------------------| |Linux コンソール |setterm -powersave off | |-------------------------------------+-------------------------|     |X Window (スクリーンセーバー消去) |xset s off | |-------------------------------------+-------------------------| |X Window (dpms 無効) |xset -dpms | |-------------------------------------+-------------------------| |X Window (スクリーンセーバーの GUI 設|xscreensaver-command | |定) |-prefs | +---------------------------------------------------------------+ 9.5.9. ブザー音の無効化     PC スピーカーのコネクタを外すとブザー音は確実に無効にできます。 pcspkr カーネルモジュールを削除すると同じ事ができます。     次のようにすると bash(1) が使う readline(3) プログラムが "\a" (ASCII=7) に出会った際にブザー音を発生するのを防げます。     $ echo "set bell-style none">> ~/.inputrc 9.5.10. メモリー使用状況     メモリー使用状況を確認するのに2つのリソースがあります。 * "/var/log/dmesg" 中にあるカーネルブートメッセージには、利用可 能なメモリーの正確な全サイズが書かれています。     * free(1) や top(1) は稼働中システムのメモリーリソース情報を表 示します。     以下がその例です。 # grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k     total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572 「dmesg は 990 MB 空いているという一方、free -k は 320 MB 空いて     いると言っている。 600 MB 以上行方不明だ …」と不思議かもれません 。 "Mem:" 行の "used" のサイズが大きかったり "free" のサイズが小さか     ったりについて悩まないでおきましょう。それらの1行下の (次の例では 675404と321780) を読んで安心して下さい。     1GB=1048576k の DRAM (video システムがこのメモリーの一部を使用) が付いている私の MacBook では次のようになっています。 表9.17 報告されるメモリーサイズのリスト +--------------------------------------------------------+ | 報告 | サイズ | |--------------------------+-----------------------------| |dmesg 中の全サイズ (Total)|1016784k = 1GB - 31792k |     |--------------------------+-----------------------------| |dmesg 中の未使用 (free) |990528k | |--------------------------+-----------------------------| |shell 下での全 (total) |997184k | |--------------------------+-----------------------------| |shell 下での未使用 (free) |20256k (しかし実質は 321780k)| +--------------------------------------------------------+ 9.5.11. システムのセキュリティーと整合性のチェック     ダメなシステム管理をするとあなたのシステムを外界からの攻撃にさら すことになるかもしれません。     システムのセキュリティーと整合性のチェックには、次の事から始める べきです。 * debsums パッケージ、debsums(1) と「トップレベルの "Release" ファイルと信憑性」を参照下さい。 * chkrootkit パッケージ、chkrootkit(1) 参照下さい。     * clamav パッケージ類、clamscan(1) と freahclam(1) 参照下さい。 * Debian セキュリティー FAQ. * Securing Debian Manual. 表9.18 システムセキュリティーや整合性確認のためのツールリスト +---------------------------------------------------------------+ |パッケージ|ポプ |サイ | 説明 | | |コン | ズ | | |----------+-----+-----+----------------------------------------| |logcheck |V:7, |102 |システムログの異常を管理者にメールするデ| | |I:9 | |ーモン | |----------+-----+-----+----------------------------------------| | |V:5, | |MD5 チェックサムを使ってインストールされ| |debsums |I:41 |108 |たパッケージファイルを検証するユーティリ| | | | |ティー | |----------+-----+-----+----------------------------------------| |chkrootkit|V:4, |922 |ルートキット検出ソフト | | |I:20 | | | |----------+-----+-----+----------------------------------------| |clamav |V:10,|29115|Unix 用アンチウィルスユーティリティー - | | |I:51 | |コマンドラインインターフェース |     |----------+-----+-----+----------------------------------------| |tiger |V:2, |7800 |システムセキュリティーの脆弱性を報告 | | |I:2 | | | |----------+-----+-----+----------------------------------------| |tripwire |V:2, |11951|ファイルやディレクトリーの整合性チェック| | |I:3 | |ソフト | |----------+-----+-----+----------------------------------------| |john |V:2, |471 |アクティブなパスワードクラッキングツール| | |I:10 | | | |----------+-----+-----+----------------------------------------| |aide |V:1, |248 |先進的進入検出環境 - 静的ライブラリー | | |I:1 | | | |----------+-----+-----+----------------------------------------| |integrit |V:0, |324 |ファイル整合性確認プログラム | | |I:0 | | | |----------+-----+-----+----------------------------------------| |crack |V:0, |152 |パスワード推定プログラム | | |I:1 | | | +---------------------------------------------------------------+     次のシンプルなスクリプトを使うと、典型的な間違いの全員書込み可の ファイルパーミッションをチェックできます。     # find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \) 注意     debsums パッケージはローカルに保存された MD5 チェックサムを使うの で、悪意ある攻撃に対抗するセキュリティー監査ツールとしては完全に は信頼できません。 9.6. データー保存のティップ Linux のlive CDs とかレスキューモードで debian-installer CDs であ     なたのシステムをブートすることでブートデバイス上のデーターストレ ージの再設定が簡単にできます。 You may need to umount(8) some devices manually from the command     line before operating on them if they are automatically mounted by the GUI desktop system. 9.6.1. ディスク空間の利用状況     ディスク空間使用状況は mount と coreutils と xdu パッケージが提供 するプログラムで評価できます: * mount(8) はマウントされたファイルシステム (= ディスク) すべて を報告します。     * df(1) はファイルシステムのディスク空間使用状況を報告します。 * du(1) はディレクトリーツリーのディスク空間使用状況を報告しま す。 ヒント     du(8) の出力を xdu(1x) に "du -k . |xdu" や "sudo du -k -x / | xdu" 等として注ぎ込むとそのグラフィカルでインタラクティブな表現が 作成できます。 9.6.2. ディスクパーティション設定 ディスクのパーティションの設定に関して、fdisk(8) は標準と考えられ     てきていますが、parted(8) も注目に値します。"ディスクパーティショ ンデーター" や "パーティションテーブル" や "パーティションマップ" や "ディスクラベル" は全て同意語です。 Older PCs use the classic Master Boot Record (MBR) scheme to hold     disk partitioning data in the first sector, i.e., LBA sector 0 (512 bytes). Recent PCs with Unified Extensible Firmware Interface (UEFI),     including Intel-based Macs, use GUID Partition Table (GPT) scheme to hold disk partitioning data not in the first sector.     fdisk(8) はディスクパーティションツールの標準でしたが、parted(8) がそれを置き換えつつあります。 表9.19 ディスクパーティション管理パッケージのリスト +---------------------------------------------------------------+ |パッケージ|ポプコン|サイ| 説明 | | | | ズ | | |----------+--------+----+--------------------------------------| |util-linux|V:897, |4974|fdisk(8) と cfdisk(8) を含む雑多なシス| | |I:999 | |テムユーティリティー | |----------+--------+----+--------------------------------------| |parted |V:384, |122 |GNU Parted ディスクパーティションとリ |     | |I:545 | |サイズのプログラム | |----------+--------+----+--------------------------------------| |gparted |V:15, |2109|libparted ベースの GNOME パーティショ | | |I:111 | |ンエディター | |----------+--------+----+--------------------------------------| |gdisk |V:356, |885 |partition editor for the GPT/MBR | | |I:505 | |hybrid disk | |----------+--------+----+--------------------------------------| |kpartx |V:22, |74 |パーティション用のデバイスマッピングを| | |I:35 | |作成するプログラム | +---------------------------------------------------------------+ 注意     parted(8) はファイルシステムを生成やリサイズも出きるということで すが、そのようなことは mkfs(8) (mkfs.msdos(8) と mkfs.ext2(8) と mkfs.ext3(8) とmkfs.ext4(8) と …) とか resize2fs(8) 等の最もよく メンテされている専用ツールを使って行う方がより安全です。 注記 GPT と MBR 間で切り替えるには、ディスクの最初数ブロックの内容を直     接消去し (「ファイル内容の消去」参照下さい)、"parted /dev/sdx mklabel gpt" か "parted /dev/sdx mklabel msdos" を使ってそれを設 定する必要があります。ここで "msdos" がMBR のために使われているこ とを覚えておきます。 9.6.3. UUID を使ってパーティションをアクセス Although reconfiguration of your partition or activation order of removable storage media may yield different names for partitions,     you can access them consistently. This is also helpful if you have multiple disks and your BIOS/UEFI doesn't give them consistent device names. * "-U" オプションを使って mount(8) を実行すると "/dev/sda3" の ようなファイル名を使うのではなく UUID を使ってブロックデバイ スをマウントできます。     * "/etc/fstab" (fstab(5) 参照下さい) は UUID を使えます。 * ブートローダー (「2段目: ブートローダー」) もまた UUID を使え ます。 ヒント     ブロックスペシャルデバイスの UUID はblkid(8) を使って見極められま す。 You can also probe it and other information with "lsblk -f". 9.6.4. LVM2 LVM2 は Linux カーネル用の論理ボリュームマネージャーです。LVM2 を     使うと、ディスクパーティションを物理的ハードディスクではなく論理 ボリューム上の作成できるようになります。     LVMには以下が必要です。 * Linux カーネルによる device-mapper サポート (Debian カーネル ではデフォルト)     * ユーザースペースの device-mapper サポートライブラリー (libdevmapper* パッケージ) * ユーザースペースの LVM2 ツール (lvm2 パッケージ)     以下のマンページから LVM2 を学び始めましょう。 * lvm(8): LVM2 機構の基本 (全 LVM2 コマンドのリスト) * lvm.conf(5): LVM2 の設定ファイル     * lvs(8): 論理ボリュームの情報を報告します * vgs(8): ボリュームグループの情報を報告します * pvs(8): 物理ボリュームの情報を報告します 9.6.5. ファイルシステム設定     ext4 ファイルシステム用に e2fsprogs パッケージは次を提供します。 * 新規の ext4 ファイルシステムを作成するための mkfs.ext4(8) * 既存の ext4 ファイルシステムをチェックと修理するための fsck.ext4(8)     * ext4 ファイルシステムのスーパーブロックを設定するための tune2fs(8) * debugfs(8) を使ってext4 ファイルシステムをインタラクティブに デバグします。(削除したファイルを回復する undel コマンドがあ ります。) mkfs(8) と fsck(8) コマンドは各種ファイルシステム依存プログラム (mkfs.fstype や fsck.fstype) のフロントエンドとして e2fsprogs に     より提供されています。ext4 ファイルシステム用は、mkfs.ext4(8) と fsck.ext4(8) で、それぞれ mke2fs(8) と e2fsck(8) にシムリンクされ ています。     Linux によってサポートされる各ファイルシステムでも、類似コマンド が利用可能です。 表9.20 ファイルシステム管理用パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 説明 | | | ン | ズ | | |--------------+------+----+------------------------------------| |e2fsprogs |V:706,|1480|ext2/ext3/ext4 ファイルシステムのた | | |I:999 | |めのユーティリティー | |--------------+------+----+------------------------------------| |btrfs-progs |V:42, |4281|btrfs ファイルシステムのためのユーテ| | |I:72 | |ィリティー | |--------------+------+----+------------------------------------| |reiserfsprogs |V:9, |1132|Reiserfs ファイルシステムのためのユ | | |I:27 | |ーティリティー | |--------------+------+----+------------------------------------| |zfsutils-linux|V:27, |1610|utilities for the OpenZFS filesystem| | |I:29 | | | |--------------+------+----+------------------------------------| | |V:147,| |FAT ファイルシステムのためのユーティ| |dosfstools |I:504 |315 |リティー (Microsoft: MS-DOS, | | | | |Windows) | |--------------+------+----+------------------------------------| |exfatprogs |V:12, |281 |utilities for the exFAT filesystem | | |I:210 | |maintained by Samsung. | |--------------+------+----+------------------------------------|     |exfat-fuse |V:10, |75 |read/write exFAT filesystem | | |I:236 | |(Microsoft) driver for FUSE. | |--------------+------+----+------------------------------------| |exfat-utils |V:9, |231 |utilities for the exFAT filesystem | | |I:231 | |maintained by the exfat-fuse author.| |--------------+------+----+------------------------------------| |xfsprogs |V:21, |3444|XFS ファイルシステムのためのユーティ| | |I:101 | |リティー (SGI: IRIX) | |--------------+------+----+------------------------------------| | |V:127,| |read/write NTFS filesystem | |ntfs-3g |I:488 |1469|(Microsoft: Windows NT, …) driver | | | | |for FUSE. | |--------------+------+----+------------------------------------| |jfsutils |V:0, |1577|JFS ファイルシステムのためのユーティ| | |I:10 | |リティー (IBM: AIX, OS/2) | |--------------+------+----+------------------------------------| |reiser4progs |V:0, |1367|Reiser4 ファイルシステムのためのユー| | |I:3 | |ティリティー | |--------------+------+----+------------------------------------| |hfsprogs |V:0, |394 |HFS と HFS Plus ファイルシステムのた| | |I:6 | |めのユーティリティー (Apple: Mac OS)| |--------------+------+----+------------------------------------| |zerofree |V:4, |25 |ext2/3/4 ファイルシステムのフリーブ | | |I:127 | |ロックをゼロにセットするプログラム | +---------------------------------------------------------------+ ヒント Ext4 ファイルシステムは Linux システムのためのデフォルトのファイ ルシステムで、特定の使用しない理由がない限りこれを使用することが 強く推奨されます。     Btrfs status can be found at Debian wiki on btrfs and kernel.org wiki on btrfs. It is expected to be the next default filesystem after the ext4 filesystem. 一部のツールはファイルシステムへのアクセスを Linux カーネルのサポ ート無しでも可能にします (「ディスクをマウントせずに操作」参照下 さい)。 9.6.6. ファイルシステムの生成と整合性チェック mkfs(8) コマンドは Linux システム上でファイルシステムを生成します     。fsck(8) コマンドは Linux システム上でファイルシステムの整合性チ ェックと修理機能を提供します。     現在 Debian は、ファイルシステム形成後に定期的な fsck 無しがデフ ォルトです。 注意     一般的に fsck をマウントされているファイルシステムに実行すること は安全ではありません。 ヒント "/etc/mke2fs.conf" 中に "enable_periodic_fsck" と設定し、"tune2fs -c0 /dev/partition_name"を実行して最大マウント回数を 0 と設定すれ     ば、再起動時にfsck(8) コマンドを root ファイルシステムを含む全フ ァイルシステムに安全に実行可能です。mke2fs.conf(5) と tune2fs(8) を参照ください。 ブートスクリプトから実行される fsck(8) コマンドの結果を "/var/log /fsck/" 中のファイルからチェックします。 9.6.7. マウントオプションによるファイルシステムの最適化     "/etc/fstab" により静的なファイルシステム設定がなされます。例えば 、 «file system» «mount point» «type» «options» «dump» «pass» proc /proc proc defaults 0 0     UUID=709cbe4c-80c1-56db-8ab1-dbce3146d2f7 / ext4 errors=remount-ro 0 1 UUID=817bae6b-45d2-5aca-4d2a-1267ab46ac23 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 ヒント     UUID (「UUID を使ってパーティションをアクセス」参照下さい) は、"/ dev/hda3" や "/dev/hda3" 等の通常のブロックデバイス名の代わりにブ ロックデバイスを指定するのに使えます。     Since Linux 2.6.30, the kernel defaults to the behavior provided by "relatime" option.     See fstab(5) and mount(8). 9.6.8. スーパーブロックによるファイルシステムの最適化     tune2fs(8) コマンドを用いてファイルシステムのスーパーブロックによ ってファイルシステムを最適化できます。 * "sudo tune2fs -l /dev/hda1" を実行するとそのファイルシステム スーパーブロックを表示します。 * "sudo tune2fs -c 50 /dev/hda1" を実行するとファイルシステムの チェック (ブートアップ時の fsck 実行) の頻度を50回のブート毎 に変更します。     * "sudo tune2fs -j /dev/hda1" の実行は ext2 から ext3 へとファ イルシステム変換してファイルシステムにジャーナリングの機能を 追加します。(アンマウントしたファイルシステムに対して実行しま す。) * "sudo tune2fs -O extents,uninit_bg,dir_index /dev/hda1 && fsck -pf /dev/hda1" の実行はファイルシステムを ext3 から ext4 に変換します。(アンマウントしたファイルシステムに対して実行し ます。) ヒント     tune2fs(8) は、その名前にもかかわらず、ext2 ファイルシステムに機 能するだけでなく ext3 とか ext4 ファイルシステムに関しても機能し ます。 9.6.9. ハードディスクの最適化 警告     ハードディスクの設定はデーターの整合性にとって非常に危険な事なの で、その設定をさわる前にお使いのハードウエアーをチェックし hdparam(8) のマンページをチェックします。 例えば "/dev/hda" に対して "hdparm -tT /dev/hda" とするとハードデ ィスクのアクセス速度をテストできます。(E)IDE を使って接続された一     部のハードディスクでは、"(E)IDE 32ビット I/O サポート" を有効にし "using_dma フラグ" を有効にし "interrupt-unmask フラグ" を設定し "複数16セクター I/O" を設定するように、"hdparm -q -c3 -d1 -u1 -m16 /dev/hda" とすると高速化できます (危険です!)。 例えば "/dev/sda" に対して "hdparm -W /dev/sda" とするとハードデ     ィスクの書込みキャッシュ機能をテストできます。"hdparm -W 0 /dev/ sda" とするとハードディスクの書込みキャッシュ機能を無効にできます 。     不良プレスの CDROM を現代的な高速 CD-ROM ドライブで読むには、 "setcd -x 2" としてそれを減速して使えば読めるかもしれません。 9.6.10. ソリッドステートドライブの最適化     Solid state drive (SSD) is auto detected now.     Reduce unnecessary disk accesses to prevent disk wear out by mounting "tmpfs" on volatile data path in /etc/fstab. 9.6.11. SMART を用いたハードディスクの破壊の予測     smartd(8) デーモンを使うと SMART に文句を言うハードディスクの監視 と記録ができます。 1. BIOS のSMART 機能を有効にします。 2. smartmontools パッケージをインストールします。 3. df(1) を使ってリストすることであなたのハードディスクを識別し ます。 + 監視対象のハードディスクを "/dev/hda" と仮定します。 4. SMART 機能が実際に有効となっているかを "smartctl -a /dev/hda"     のアウトプットを使ってチェックします。 + もし有効でない場合には、"smartctl -s on -a /dev/hda" とし て有効にします。 5. 次のようにして smartd(8) デーモンを実行します。 + "/etc/default/smartmontools" ファイル中の "start_smartd= yes" をアンコメントします。 + restart the smartd(8) daemon by "sudo systemctl restart smartmontools". ヒント     smartd(8) デーモンは、警告の通知の仕方を含めて /etc/smartd.conf ファイルを用いてカスタム化できます。 9.6.12. $TMPDIR 経由で一時保存ディレクトリーを指定 通常アプリケーションは一時保存ディレクトリー "/tmp" のもとに一時     ファイルを作成します。もし "/tmp" が十分なスペースを提供できない 場合、行儀のいいプログラムなら $TMPDIR 変数を使ってそのような一時 保存ディレクトリを指定できます。 9.6.13. LVM を使う使用可能なストレージ空間の拡張 インストール時に論理ボリュームマネージャー (LVM) (Linux 機能) 上 に作られたパーティションは、大掛かりなシステムの再設定無しに複数     のストレージデバイスにまたがる LVM 上のエクステントを継ぎ足したり その上のエクステントを切り捨てることで簡単にサイズ変更が出きます 。 9.6.14. 他パーティションをマウントする使用可能なストレージ空間の拡張 空のパーティションがあれば (例えば "/dev/sdx")、それを mkfs.ext4     (1) を使ってフォーマットし、それをあなたが空間をより必要とするデ ィレクトリーに mount(8) することができます。(元来あったデーター内 容はコピーする必要があります。) $ sudo mv work-dir old-dir $ sudo mkfs.ext4 /dev/sdx     $ sudo mount -t ext4 /dev/sdx work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir ヒント     上記の代わりに、空のディスクイメージファイル (「空のディスクイメ ージ作成」参照下さい) をループデバイスとしてマウントする (「ディ スクイメージファイルをマウント」参照下さい) 事もできます。実際の ディスク使用は実際にデーターを溜め込むとともに成長します。 9.6.15. 他ディレクトリーをバインドマウントする使用可能なストレージ空 間の拡張 使える空間がある他のパーティション中に空のディレクトリーがあれば     (例えば "/path/to/emp-dir")、そのディレクトリーを --bind" オプシ ョンを使って、空間を必要としているディレクトリー (例えば "work-dir")にマウントすることができます。     $ sudo mount --bind /path/to/emp-dir work-dir 9.6.16. 他ディレクトリーをオーバーレーマウントすることで使用可能なス トレージ空間を拡張 Linux カーネル 3.18 以降 (Debian Stetch 9.0 以降) を使うと、他の パーティション中に使える空間 (例えば "/path/to/empty" と "/path/     to/work") があれば、その中にディレクトリーを作成し、容量が必要な 古いディレクトリー(e.g., "/path/to/old")の上に OverlayFS を使って 積み重ねることができます。     $ sudo mount -t overlay overlay \ -olowerdir=/path/to/old-dir,upperdir=/path/to/empty,workdir=/path/to/work ここで、"/path/to/old" 上に書き込むには、読み書きが許可されたパー     ティション上に "/path/to/empty" と "/path/to/work" があることが必 要です。 9.6.17. シムリンクを使う使用可能なストレージ空間の拡張 注意     ここに書かれている事は非推奨です。ソフトウエアーによっては「ディ レクトリーへのシムリンク」ではうまく機能しません。上記の「マウン トする」アプローチを代わりに使ってください。 使える空間がある他のパーティション中に空のディレクトリーがあれば     (例えば "/path/to/emp-dir")、そのディレクトリーへ ln(8) を使って シムリンクを作成することができます。 $ sudo mv work-dir old-dir $ sudo mkdir -p /path/to/emp-dir     $ sudo ln -sf /path/to/emp-dir work-dir $ sudo cp -a old-dir/* work-dir $ sudo rm -rf old-dir 警告     "ディレクトリーへのシムリンク" を "/opt" のようなシステムが管理す るディレクトリーに使用してはいけません。システムがアップグレード される際にそのようなシムリンクは上書きされるかもしれません。 9.7. ディスクイメージ     次に、ディスクイメージの操作を論じます。 9.7.1. ディスクイメージの作成 例えば2番目の SCSI もしくはシリアル ATA ドライブ "/dev/sdb" 等の     、アンマウントされたドライブのディスクイメージファイル "disk.img" はcp(1) か dd(1) を用いれば次のようにして作れます。     # cp /dev/sdb disk.img # dd if=/dev/sdb of=disk.img プライマリ IDE ディスクの最初のセクターにある伝統的 PC のマスター     ブートレコード (MBR) (「ディスクパーティション設定」参照下さい) のディスクイメージは、dd(1) を用いれば次のようにして作れます。 # dd if=/dev/hda of=mbr.img bs=512 count=1     # dd if=/dev/hda of=mbr-nopart.img bs=446 count=1 # dd if=/dev/hda of=mbr-part.img skip=446 bs=1 count=66 * "mbr.img": パーティションテーブル付きの MBR     * "mbr-nopart.img": パーティションテーブル抜きの MBR。 * "mbr-part.img": MBR のパーティションテーブルのみ。     ブートディスクとして SCSI ドライブもしくはシリアル ATA デバイスが 使われる場合、"/dev/hda" を"/dev/sda" に置き換えて下さい。     オリジナルディスクのパーティションのイメージを作る場合には、"/dev /hda" を"/dev/hda1" 等で置き換えます。 9.7.2. ディスクに直接書込み ディスクイメージファイル "disk.img" はdd(1) を使ってサイズがマッ     チする例えば "/dev/sdb" という2番目の SCSI ドライブに次のようにし て書き込むことができます。     # dd if=disk.img of=/dev/sdb 同様にディスクパーティションイメージファイル "partition.img" はサ     イズがマッチする例えば "/dev/sdb1" という2番目の SCSI ドライブの1 番目のパーティションに次のようにして書き込むことができます。     # dd if=partition.img of=/dev/sdb1 9.7.3. ディスクイメージファイルをマウント     単一パーティションイメージを含むディスクイメージ "partition.img" は次のように loop デバイスを使いマウントしアンマウントできます。 # losetup -v -f partition.img Loop device is /dev/loop0 # mkdir -p /mnt/loop0     # mount -t auto /dev/loop0 /mnt/loop0 ...hack...hack...hack # umount /dev/loop0 # losetup -d /dev/loop0     これは以下のように簡略化出来ます。 # mkdir -p /mnt/loop0     # mount -t auto -o loop partition.img /mnt/loop0 ...hack...hack...hack # umount partition.img 複数のパーティションを含むディスクイメージ "disk.img" の各パーテ     ィションは loop デバイスを使ってマウント出来ます。loop デバイスは パーティションをデフォルトでは管理しないので、次のようにそれをリ セットする必要があります。 # modinfo -p loop # verify kernel capability max_part:Maximum number of partitions per loop device     max_loop:Maximum number of loop devices # losetup -a # verify nothing using the loop device # rmmod loop # modprobe loop max_part=16     これで、loop デバイスは16パーティションまで管理出来ます。 # losetup -v -f disk.img Loop device is /dev/loop0 # fdisk -l /dev/loop0 Disk /dev/loop0: 5368 MB, 5368709120 bytes 255 heads, 63 sectors/track, 652 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x452b6464     Device Boot Start End Blocks Id System /dev/loop0p1 1 600 4819468+ 83 Linux /dev/loop0p2 601 652 417690 83 Linux # mkdir -p /mnt/loop0p1 # mount -t ext4 /dev/loop0p1 /mnt/loop0p1 # mkdir -p /mnt/loop0p2 # mount -t ext4 /dev/loop0p2 /mnt/loop0p2 ...hack...hack...hack # umount /dev/loop0p1 # umount /dev/loop0p2 # losetup -d /dev/loop0     この他、同様の効果は kpartx パッケージの kpartx(8) により作られる デバイスマッパーデバイスを用いて次のようにして実現も出来ます。 # kpartx -a -v disk.img ... # mkdir -p /mnt/loop0p2 # mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2     ... ...hack...hack...hack # umount /dev/mapper/loop0p2 ... # kpartx -d /mnt/loop0 注記     MBR 等をスキップするオフセットを使った loop デバイスによっても、 このようなディスクイメージの単一パーティションをマウント出来ます 。しかしこれは失敗しがちです。 9.7.4. ディスクイメージのクリーニング ディスクイメージファイル "disk.img" は消去済みのファイルを綺麗に     無くした綺麗なスパースイメージ "new.img" に次のようにしてできます 。 # mkdir old; mkdir new # mount -t auto -o loop disk.img old # dd bs=1 count=0 if=/dev/zero of=new.img seek=5G # mount -t auto -o loop new.img new     # cd old # cp -a --sparse=always ./ ../new/ # cd .. # umount new.img # umount disk.img     もし "disk.img" が ext2 か ext3 か ext4 の場合には、zerofree パッ ケージの zerofree(8) を使うことも出来ます。 # losetup -f -v disk.img     Loop device is /dev/loop3 # zerofree /dev/loop3 # cp --sparse=always disk.img new.img 9.7.5. 空のディスクイメージ作成     5GiB まで成長可能な空のディスクイメージファイル "disk.img" はdd (1) と mke2fs(8) を使って次のようにして作成できます。     $ dd bs=1 count=0 if=/dev/zero of=disk.img seek=5G     Instead of using dd(1), specialized fallocate(8) may be used here.     loop デバイスを使ってこのディスクイメージ "disk.img" 上に ext4 フ ァイルシステムを作成できます。 # losetup -f -v disk.img Loop device is /dev/loop1 # mkfs.ext4 /dev/loop1 ...hack...hack...hack     # losetup -d /dev/loop1 $ du --apparent-size -h disk.img 5.0G disk.img $ du -h disk.img 83M disk.img "sparse" に関して、そのファイルサイズは 5.0GiB でその実ディスク使     用はたったの 83MiB です。この相違は ext4 がスパースファイルを保持 できるから可能となっています。 ヒント     スパースファイルによる実際のディスク使用はそこに書かれるデーター とともに成長します。 「ディスクイメージファイルをマウント」にあるように loop デバイス またはデバイスマッパーデバイスによりデバイスに同様の操作をするこ     とで、このディスクイメージ "disk.img" をparted(8) または fdisk(8) を使ってパーティションし mkfs.ext4(8) や mkswap(8) 等を使ってファ イルシステムを作れます。 9.7.6. ISO9660 イメージファイル作成 "source_directory" のソースディレクトリーツリーから作られる     ISO9660 イメージファイル"cd.iso" はcdrkit が提供する genisoimage (1) を使って次のようにして作成できます。     # genisoimage -r -J -T -V volume_id -o cd.iso source_directory 同様に、ブート可能な ISO9660 イメージファイル "cdboot.iso" は、     debian-installer のような "source_directory" にあるディレクトリー ツリーから次のようにして作成できます。 # genisoimage -r -o cdboot.iso -V volume_id \     -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table source_directory     上記では、Isolinux ブートローダー (「2段目: ブートローダー」参照 下さい) がブートに使われています。     次のようにすると CD-ROM デバイスから直接 md5sum 値を計算し ISO9660 イメージを作成できます。 $ isoinfo -d -i /dev/cdrom CD-ROM is in ISO 9660 format ...     Logical block size is: 2048 Volume size is: 23150592 ... # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror | md5sum # dd if=/dev/cdrom bs=2048 count=23150592 conv=notrunc,noerror > cd.iso 警告     正しい結果を得るために上記のように Linux の ISO9660 ファイルシス テム先読みバグを注意深く避けなければいけません。 9.7.7. CD/DVD-R/RW に直接書込み ヒント     DVD は、cdrkit が提供する wodim(1) にとっては単に大きな CD です。     使えるデバイスは次のようにするとみつかります。     # wodim --devices そしてブランクの CD-R をドライブに挿入して、例えば "/dev/hda" と     いうこのデバイスに ISO9660 イメージファイル "cd.iso" にwodim(1) を使って次のようにして書込みます。     # wodim -v -eject dev=/dev/hda cd.iso     もし CD-R ではなく CD-RW が使われている場合には、次を代わりに実行 して下さい。     # wodim -v -eject blank=fast dev=/dev/hda cd.iso ヒント     もしあなたのデスクトップシステムが CD を自動的にマウントする場合 、wodim(1) を使う前に "sudo unmount /dev/hda" として CD をアンマ ウントします。 9.7.8. ISO9660 イメージファイルをマウント     もし "cd.iso" の内容が ISO9660 イメージの場合、次のようにするとそ れを "/cdrom" に手動でマウントできます。     # mount -t iso9660 -o ro,loop cd.iso /cdrom ヒント     現代的なデスクトップシステムではISO9660フォーマットされた CD のよ うなリムーバブルメディアを自動的にマウントします (「リムーバブル ストレージデバイス」参照下さい)。 9.8. バイナリーデーター     次に、ストレージメディア上のバイナリーデーターを直接操作すること を論じます。 9.8.1. バイナリーデーターの閲覧と編集     もっとも基本的なバイナリーファイルを閲覧方法は "od -t x1" コマン ドを使うことです。 表9.21 バイナリーデーターを閲覧や編集するパッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |---------------+------+-----+----------------------------------| | |V:910,| |ファイルをダンプする od(1) がある | |coreutils |I:999 |18062|基本パッケージ (HEX, ASCII, OCTAL,| | | | |…) | |---------------+------+-----+----------------------------------| | |V:19, | |ファイルをダンプする hd(1) がある | |bsdmainutils |I:505 |27 |ユーティリティーパッケージ (HEX, | | | | |ASCII, OCTAL, …) | |---------------+------+-----+----------------------------------|     |hexedit |V:0, |73 |バイナリーエディターとビューワー | | |I:10 | |(HEX, ASCII) | |---------------+------+-----+----------------------------------| |bless |V:0, |924 |フル機能の16進エディター (GNOME) | | |I:3 | | | |---------------+------+-----+----------------------------------| |okteta |V:0, |1580 |フル機能の16進エディター (KDE4) | | |I:12 | | | |---------------+------+-----+----------------------------------| |ncurses-hexedit|V:0, |132 |バイナリーエディターとビューワー | | |I:1 | |(HEX, ASCII, EBCDIC) | |---------------+------+-----+----------------------------------| |beav |V:0, |137 |バイナリーエディターとビューワー | | |I:0 | |(HEX, ASCII, EBCDIC, OCTAL, …) | +---------------------------------------------------------------+ ヒント HEX は底が16の16進フォーマットです。OCTAL は底が8の8進フォーマッ     トです。ASCII (アスキー) は情報交換用アメリカ標準コードで、通常の 英文テキストです。EBCDIC (エビシディック) は IBM メインフレームオ ペレーティングシステム上で使われる拡張二進化十進数互換コードです 。 9.8.2. ディスクをマウントせずに操作     ディスクをマウントせずに読出しや書込みをするツールがあります。 表9.22 ディスクをマウントせずに操作するパッケージのリスト +---------------------------------------------------------------+ |パッケー|ポプコン|サイ | 説明 | | ジ | | ズ | | |--------+--------+-----+---------------------------------------|     |mtools |V:9, |399 |MSDOS ファイルをマウントせずに使うツー | | |I:72 | |ル | |--------+--------+-----+---------------------------------------| |hfsutils|V:0, I:5|184 |HFS や HFS+ ファイルをマウントせずに使 | | | | |うツール | +---------------------------------------------------------------+ 9.8.3. データーの冗長性 Linux カーネルが提供するソフトウエアー RAID システムは高いレベル     のストレージ信頼性を達成するためにカーネルのファイルシステムのレ ベルでデーターの冗長性を提供します。     アプリケーションプログラムレベルでストレージの高い信頼性を達成す るようにデーター冗長性を付加するツールもあります。 表9.23 ファイルにデーターの冗長性を追加するツールのリスト +---------------------------------------------------------------+ |パッケージ|ポプコ|サイ| 説明 | | | ン | ズ | | |----------+------+----+----------------------------------------| |par2 |V:7, |268 |ファイルのチェックと修理のためのパリティ|     | |I:67 | |ーアーカイブセット | |----------+------+----+----------------------------------------| |dvdisaster|V:0, |1742|CD/DVD メディアのデーターロス/傷つき/老 | | |I:1 | |化の防止 | |----------+------+----+----------------------------------------| |dvbackup |V:0, |413 |MiniDV カメラレコーダを使うバックアップ | | |I:0 | |ツール (rsbep(1) を提供) | +---------------------------------------------------------------+ 9.8.4. データーファイルの復元と事故の証拠解析     データーファイルの復元と事故の証拠解析のツールがあります。 表9.24 データーファイルの復元と事故の証拠解析のリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイ| 説明 | | |コン | ズ | | |-------------+-----+----+--------------------------------------| |testdisk |V:2, |1413|パーティションのスキャンとディスク復元| | |I:32 | |のためのユーティリティー | |-------------+-----+----+--------------------------------------| |magicrescue |V:0, |255 |マジックバイトを探してファイルを復元す| | |I:2 | |るユーティリティー | |-------------+-----+----+--------------------------------------| |scalpel |V:0, |88 |質素で高性能なファイル彫刻刀 | | |I:3 | | | |-------------+-----+----+--------------------------------------| |myrescue |V:0, |83 |破壊したハードディスクからデーターを救| | |I:3 | |出 | |-------------+-----+----+--------------------------------------| |extundelete |V:0, |147 |ext3/4 ファイルシステム上のファイルの | | |I:9 | |削除復元ユーティリティー | |-------------+-----+----+--------------------------------------| |ext4magic |V:0, |233 |ext3/4 ファイルシステム上のファイルの | | |I:4 | |削除復元ユーティリティー | |-------------+-----+----+--------------------------------------|     |ext3grep |V:0, |293 |ext3 ファイルシステム上のファイルの削 | | |I:2 | |除復元ヘルプツール | |-------------+-----+----+--------------------------------------| |scrounge-ntfs|V:0, |50 |NTFS ファイルシステム上のデーター復元 | | |I:2 | |プログラム | |-------------+-----+----+--------------------------------------| |gzrt |V:0, |33 |gzip 復元ツールキット | | |I:0 | | | |-------------+-----+----+--------------------------------------| |sleuthkit |V:2, |1607|証拠解析のためのツール (Sleuthkit) | | |I:25 | | | |-------------+-----+----+--------------------------------------| |autopsy |V:0, |1027|SleuthKit のための GUI | | |I:1 | | | |-------------+-----+----+--------------------------------------| |foremost |V:0, |102 |データー復元のための証拠解析アプリケー| | |I:6 | |ション | |-------------+-----+----+--------------------------------------| |guymager |V:0, |1021|Qt 使用の証拠解析用イメージ作成ソフト | | |I:1 | | | |-------------+-----+----+--------------------------------------| |dcfldd |V:0, |113 |証拠解析とセキュリティーのための dd の| | |I:4 | |強化版 | +---------------------------------------------------------------+ ヒント     e2fsprogs パッケージ中の debugfs(8) の list_deleted_inodes または undel コマンドを用いると ext2 ファイルシステム上でファイルのアン デリートができます。 9.8.5. 大きなファイルを小さなファイルに分割 単一ファイルでバックアップするにはデーターが大きすぎる場合、その     ファイル内容を例えば 2000MiB の断片にしてバックアップし、それらの 断片を後日マージしてオリジナルのファイルに戻せます。     $ split -b 2000m large_file $ cat x* >large_file 注意     名前がかち合わないように "x" で始まるファイル名のファイルが無いよ うにします。 9.8.6. ファイル内容の消去 ログファイルのようなファイルの内容を消去するためには、rm(1) を使 ってファイルを消去しその後新しい空ファイルを作成することは止めま     しょう。コマンド実行間にファイルがアクセスされているかもしれない のがこの理由です。次のようにするのがファイル内容を消去する安全な 方法です。     $ :>file_to_be_cleared 9.8.7. ダミーファイル     次のコマンドはダミーや空のファイルを作成します。 $ dd if=/dev/zero of=5kb.file bs=1k count=5     $ dd if=/dev/urandom of=7mb.file bs=1M count=7 $ touch zero.file $ : > alwayszero.file     次のファイルを見つかります。 * "5kb.file" は5KB のゼロの連続です。 * "7mb.file" は7MB のランダムなデーターです。     * "zero.file" は0バイト長のファイルかもしれません。もしファイル が存在する時は、その mtime を更新しその内容と長さを保持します 。 * "alwayszero.file" は常に0バイト長ファイルです。もしファイルが 存在する時は mtime を更新しファイル内容をリセットします。 9.8.8. ハードディスクの全消去     "/dev/sda" にある USB メモリースティック等のハードディスク類似デ バイス全体のデーターを完全に消すいくつかの方法があります。 注意     次のコマンドを実行する前にまず USB メモリースティックの場所を mount(8) を使ってチェックします。"/dev/sda" によって指し示される デバイスは SCSI ハードディスクかも知れませんしあなたの全システム のあるシリアル ATA ハードディスクかも知れません。     次のようにしてデーターを0にリセットして全消去します。     # dd if=/dev/zero of=/dev/sda     次のようにしてランダムデーターを上書きして全消去します。     # dd if=/dev/urandom of=/dev/sda     次のようにしてランダムデーターを非常に効率的に上書きして全消去し ます。     # shred -v -n 1 /dev/sda     You may alternatively use badblocks(8) with -t random option. Debian インストーラ CD 等の多くのブート可能な Linux の CD のシェ ルから dd(1) が利用可能ですから、"/dev/hda" や "/dev/sda" 等のシ     ステムハードディスクに対して同類のメディアから消去コマンドを実行 することでインストールされたシステムを完全に消去することができま す。 9.8.9. ハードディスク未使用部分の全消去 データーの消去はファイルシステムからアンリンクされているだけなの で、例えば "/dev/sdb1" のようなハードディスク (USB メモリースティ     ック) 上の使用されていない領域には消去されたデーター自身が含まれ ているかもしれません。これらに上書きすることで綺麗に消去できます 。 # mount -t auto /dev/sdb1 /mnt/foo # cd /mnt/foo # dd if=/dev/zero of=junk     dd: writing to `junk': No space left on device ... # sync # umount /dev/sdb1 警告     あなたの USB メモリースティックではこれで普通十分です。でもこれは 完璧ではありません。消去されたファイル名や属性はファイルシステム 中に隠れて残っているかもしれません。 9.8.10. 削除されたがまだオープン中のファイルの復活法 ファイルをうっかり消去しても、そのファイルが何らかのアプリケーシ     ョン (読出しか書込み) によって使われている限り、そのようなファイ ルを回復出来ます。     例えば、次を試してみて下さい: $ echo foo > bar $ less bar $ ps aux | grep ' less[ ]' bozo 4775 0.0 0.0 92200 884 pts/8 S+ 00:18 0:00 less bar $ rm bar     $ ls -l /proc/4775/fd | grep bar lr-x------ 1 bozo bozo 64 2008-05-09 00:19 4 -> /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -l -rw-r--r-- 1 bozo bozo 4 2008-05-09 00:25 bar $ cat bar foo     この代わりに、(lsof パッケージがインストールされている時) もう一 つのターミナルで次のように実行します。 $ ls -li bar 2228329 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:02 bar $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar $ rm bar     $ lsof |grep bar|grep less less 4775 bozo 4r REG 8,3 4 2228329 /home/bozo/bar (deleted) $ cat /proc/4775/fd/4 >bar $ ls -li bar 2228302 -rw-r--r-- 1 bozo bozo 4 2008-05-11 11:05 bar $ cat bar foo 9.8.11. 全てのハードリンクを検索     ハードリンクのあるファイルは "ls -li" を使って確認できます、 $ ls -li total 0     2738405 -rw-r--r-- 1 root root 0 2008-09-15 20:21 bar 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 baz 2738404 -rw-r--r-- 2 root root 0 2008-09-15 20:21 foo "baz" も "foo" もリンク数が "2" (>1) でハードリンクがある事を示し ています。これらの inode 番号は共通の "2738404" です。これはこれ     らがハードリンクされた同じファイルということを意味します。ハード リンクされた全てのファイルを偶然うまく見つけられない場合は、それ を例えば "2738404" という inode で次のようにして探せます。     # find /path/to/mount/point -xdev -inum 2738404 9.8.12. 見えないディスクスペースの消費 削除されたがオープンされたままのファイルは、通常の du(1) では見え     ませんが、ディスクスペースを消費します。これらは次のようにすれば そのサイズとともにリストできます。     # lsof -s -X / |grep deleted 9.9. データー暗号化ティップ あなたの PC への物理的アクセスがあると、誰でも簡単に root 特権を 獲得できあなたの PC の全てのファイルにアクセスできます (「root パ スワードのセキュリティー確保」参照下さい)。これが意味するところは     、あなたの PC が盗まれた場合にログインのパスワードではあなたのプ ライベートでセンシティブなデーターを守れないと言うことです。それ を達成するにはデーターの暗号化技術を適用しなければいけません。GNU プライバシーガード (「データーセキュリティーのインフラ」参照下さ い) はファイルを暗号化できますが、少々手間がかかります。     Dm-crypt facilitates automatic data encryption via native Linux kernel modules with minimal user efforts using device-mapper. 表9.25 データー暗号化ユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイ| 説明 | | |コン | ズ | | |--------------+-----+----+-------------------------------------| | |V:24,| |暗号化されたブロックデバイス | |cryptsetup |I:77 |406 |(dm-crypt / LUKS) のためのユーティリ | | | | |ティー | |--------------+-----+----+-------------------------------------|     | | | |ノーマルユーザーによるマウント/アンマ| |cryptmount |V:3, |231 |ウントに焦点を当てた暗号化されたブロ | | |I:4 | |ックデバイス (dm-crypt / LUKS) のため| | | | |のユーティリティー | |--------------+-----+----+-------------------------------------| |fscrypt |V:0, |4447|utilities for Linux filesystem | | |I:1 | |encryption (fscrypt) | |--------------+-----+----+-------------------------------------| |libpam-fscrypt|V:0, |3981|PAM module for Linux filesystem | | |I:0 | |encryption (fscrypt) | +---------------------------------------------------------------+ 注意     Data encryption costs CPU time etc. Encrypted data becomes inaccessible if its password is lost. Please weigh its benefits and costs. 注記     debian-installer (lenny 以降) を使うと、dm-crypt/LUKS と initramfs を使って、全 Debian システムを暗号化したディスク上にイ ンストールできます。 ヒント     ユーザー空間での暗号化ユーティリティーに関しては「データーセキュ リティーのインフラ」を参照下さい: GNU プライバシーガード。 9.9.1. dm-crypt/LUKS を使ったリムーバブルディスクの暗号化 例えば "/dev/sdx" にある USB メモリースティックのようなリムーバブ     ルストレージデバイスの内容を dm-crypt/LUKS を使って暗号化できます 。それを単に次のようにフォーマットします。 # fdisk /dev/sdx ... "n" "p" "1" "return" "return" "w" # cryptsetup luksFormat /dev/sdx1 ... # cryptsetup open /dev/sdx1 secret ...     # ls -l /dev/mapper/ total 0 crw-rw---- 1 root root 10, 60 2021-10-04 18:44 control lrwxrwxrwx 1 root root 7 2021-10-04 23:55 secret -> ../dm-0 # mkfs.vfat /dev/mapper/secret ... # cryptsetup close secret Then, it can be mounted just like normal one on to "/media/ username/disk_label", except for asking password (see 「リムーバ     ブルストレージデバイス」) under modern desktop environment using the udisks2 package. The difference is that every data written to it is encrypted. The password entry may be automated using keyring (see 「Password keyring」). You may alternatively format media in different filesystem, e.g., ext4 with "mkfs.ext4 /dev/mapper/sdx1". If btrfs is used instead,     the udisks2-btrfs package needs to be installed. For these filesystems, the file ownership and permissions may need to be configured. 9.9.2. dm-crypt/LUKS で暗号化されたディスクのマウント For example, an encrypted disk partition created with dm-crypt/     LUKS on "/dev/sdc5" by Debian Installer can be mounted onto "/ mnt" as follows: $ sudo cryptsetup open /dev/sdc5 ninja --type luks Enter passphrase for /dev/sdc5: **** $ sudo lvm lvm> lvscan inactive '/dev/ninja-vg/root' [13.52 GiB] inherit     inactive '/dev/ninja-vg/swap_1' [640.00 MiB] inherit ACTIVE '/dev/goofy/root' [180.00 GiB] inherit ACTIVE '/dev/goofy/swap' [9.70 GiB] inherit lvm> lvchange -a y /dev/ninja-vg/root lvm> exit Exiting. $ sudo mount /dev/ninja-vg/root /mnt 9.10. カーネル     Debian はモジュール化された Linux カーネルをサポートされるアーキ テクチャに対してパッケージとしてディストリブートしています。     If you are reading this documentation, you probably don't need to compile Linux kernel by yourself. 9.10.1. カーネル変数     多くの Linux の機能はカーネル変数を使い次のように設定されます。 * ブートローダーにより初期化されたカーネル変数 (「2段目: ブート ローダー」参照下さい) * 実行時に sysfs によりアクセスできるカーネル変数に関して     sysctl(8) を用い変更されたカーネル変数 (「procfs と sysfs」参 照下さい) * モジュールが起動された際の modprobe(8) の引数により設定される モジュール変数 (「ディスクイメージファイルをマウント」参照下 さい)     See "The Linux kernel user’s and administrator’s guide » The kernel’s command-line parameters" for the detail. 9.10.2. カーネルヘッダー ほとんどの普通のプログラムはカーネルヘッダーを必要としませんし、 コンパイルするのにそれらを直接用いるとコンパイルがうまくいかない     かもしれません。普通のプログラムは Debian システム上では (glibc ソースパッケージから生成される) libc6-dev パッケージが提供する "/ usr/include/linux" や "/usr/include/asm" 中のヘッダを使ってコンパ イルするべきです。 注記 For compiling some kernel-specific programs such as the kernel     modules from the external source and the automounter daemon (amd), you must include path to the corresponding kernel headers, e.g. "-I/usr/src/linux-particular-version/include/", to your command line. 9.10.3. カーネルと関連モジュールのコンパイル     Debian にはカーネルと関連モジュールをコンパイルする独自の方法があ ります。 表9.26 Debian システム上でカーネルの再コンパイルためにインストー ルする重要パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |----------------+------+-----+---------------------------------| |build-essential |I:487 |20 |Debian パッケージをビルドする上で| | | | |不可欠なパッケージ: make、gcc、… | |----------------+------+-----+---------------------------------| |bzip2 |V:158,|121 |bz2 ファイルのための圧縮と解凍ユ | | |I:970 | |ーティリティー | |----------------+------+-----+---------------------------------| |libncurses5-dev |I:94 |6 |ncurses のためのデベロッパ用ライ | | | | |ブラリーと文書 | |----------------+------+-----+---------------------------------| | |V:322,| |git: Linux カーネルによって使われ|     |git |I:519 |44424|ている分散型リビジョンコントロー | | | | |ルシステム | |----------------+------+-----+---------------------------------| |fakeroot |V:29, |208 |パッケージを非 root としてビルド | | |I:499 | |するための fakeroot 環境を提供 | |----------------+------+-----+---------------------------------| |initramfs-tools |V:364,|113 |initramfs をビルドするツール | | |I:990 | |(Debian 固有) | |----------------+------+-----+---------------------------------| |dkms |V:56, |183 |動的カーネルモジュールサポート | | |I:183 | |(DKMS) (汎用) | |----------------+------+-----+---------------------------------| |module-assistant|V:1, |406 |helper tool to make module | | |I:25 | |package (Debian specific) | |----------------+------+-----+---------------------------------| |devscripts |V:7, |2777 |Debian パッケージメンテナ用ヘルパ| | |I:46 | |ースクリプト (Debian 固有) | +---------------------------------------------------------------+ 「2段目: ブートローダー」中で initrd を使う場合、initramfs-tools     (8) と update-initramfs(8) と mkinitramfs(8) と initramfs.conf(5) 中の関連情報をしっかり読んで下さい。 警告     Linux カーネルソースをコンパイルする時にソースツリー中のディレク トリー (例えば "/usr/src/linux*") から "/usr/include/linux" や "/ usr/include/asm" へのシムリンクを張ってはいけません。(古くなった 一部文書はまだこれをすることを提案しています。) 注記 Debian の stable (安定版) システム上で最新の Linux カーネルをコン パイルする際には、Debian のunstable (非安定版) システムからバック ポートされた最新のツールが必要かもしれません。 module-assistant(8) (or its short form m-a) helps users to build     and install module package(s) easily for one or more custom kernels. 動的カーネルモジュールサポート (DKMS) は、カーネル全体を変えるこ と無く個別カーネルモジュールをアップグレードできるようにする新し いディストリビューションに依存しない枠組みです。これはアウトオブ ツリーのモジュールの管理方法です。これはあなたがカーネルをアップ グレードする際のモジュールの再構築を簡単にもします。 9.10.4. カーネルソースのコンパイル: Debian カーネルチーム推奨 アップストリームのカーネルソースからカーネルバイナリーパッケージ     を作成するには、それが提供するターゲットを用いて "deb-pkg" としま す。 $ sudo apt-get build-dep linux $ cd /usr/src $ wget http://www.kernel.org/pub/linux/kernel/v3.11/linux-version.tar.bz2 $ tar -xjvf linux-version.tar.bz2     $ cd linux-version $ cp /boot/config-version .config $ make menuconfig ... $ make deb-pkg ヒント     linux-source-version パッケージはDebian パッチがあたった Linux カ ーネルソースを "/usr/src/linux-version.tar.bz2" として提供します 。 Debian カーネルソースパッケージから特定のバイナリパッケージをビル     ドするには、"debian/rules.gen" 中の "binary-arch_architecture_ featureset_flavour" ターゲットを使います。 $ sudo apt-get build-dep linux     $ apt-get source linux $ cd linux-3.* $ fakeroot make -f debian/rules.gen binary-arch_i386_none_686     詳細は以下参照下さい: * Debian Wiki: KernelFAQ     * Debian Wiki: Debianカーネル * Debian Linux カーネルハンドブック: https:// kernel-handbook.debian.net 9.10.5. ハードウエアードライバーとファームウエアー The hardware driver is the code running on the main CPUs of the     target system. Most hardware drivers are available as free software now and are included in the normal Debian kernel packages in the main area. * GPU ドラーバー + Intel GPU ドラーバー (main) + AMD/ATI GPU ドラーバー(main)     + NVIDIA GPU ドライバー (nouveau ドライバーは main、ベンダ ーにサポートされたバイナリーのみ提供のドライバーは non-free 。) * ソフトモデムドライバー + martian-modem や sl-modem-dkms パーケージ (non-free) The firmware is the code or data loaded on the device attach to the target system (e.g., CPU microcode, rendering code running on GPU, or FPGA / CPLD data, …). Some firmware packages are     available as free software but many firmware packages are not available as free software since they contain sourceless binary data. Installing these firmware data is essential for the device to function as expected. * The firmware data packages containing data loaded to the volatile memory on the target device. + firmware-linux-free (main) + firmware-linux-nonfree (non-free) + firmware-linux-* (non-free) + *-firmware (non-free) + intel-microcode (non-free)     + amd64-microcode (non-free) * The firmware update program packages which update data on the non-volatile memory on the target device. + fwupd (main): Firmware update daemon which downloads firmware data from Linux Vendor Firmware Service. + gnome-firmware (main): GTK front end for fwupd + plasma-discover-backend-fwupd (main): Qt front end for fwupd non-free や contrib パッケージは Debian システムの一部でないこと に注意して下さい。non-free や contrib エリアへのアクセスの有効化     や無効化は「Debian アーカイブの基本」に説明されています。「Debian は 100% フリーソフトウェアーです」に記載されているように non-free や contrib パッケージを使用に付帯するマイナスを認識すべきです。 Please also note that the firmware data downloaded by fwupd from     Linux Vendor Firmware Service and loaded to the running Linux kernel may be non-free. 9.11. 仮想化システム     仮想化されたシステムを利用すると単一ハード上で同時に複数のシステ ムのインスタンスを実行することが加能となります。 ヒント     http://wiki.debian.org/SystemVirtualization を参照下さい。 9.11.1. Virtualization and emulation tools     There are several virtualization and emulation tool platforms. * Complete hardware emulation packages such as ones installed by the games-emulator metapackage * Mostly CPU level emulation with some I/O device emulations such as QEMU * Mostly CPU level virtualization with some I/O device emulations such as Kernel-based Virtual Machine (KVM) * OS level container virtualization with the kernel level support such as LXC (Linux Containers), Docker, ...     * OS level filesystem access virtualization with the system library call override on the file path such as chroot * OS level filesystem access virtualization with the system library call override on the file ownership such as fakeroot * OS API emulation such as Wine * Interpreter level virtualization with its executable selection and run-time library overrides such as virtualenv and venv for Python     The container virtualization uses 「Linux のセキュリティ機能」 and it is the backend technology of 「サンドボックス」.     Here are some packages to help you to setup the virtualized system. 表9.27 仮想化ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイズ| 説明 | | |コン | | | |------------------+-----+------+-------------------------------| |schroot |V:6, |2508 |Debian バイナリーパッケージを | | |I:8 | |chroot 中で実行する専用ツール | |------------------+-----+------+-------------------------------| | |V:1, | |Debian ソースから Debian バイナ| |sbuild |I:4 |242 |リーパッケージをビルドするツー | | | | |ル | |------------------+-----+------+-------------------------------| | |V:5, | |基本的な Debian システムのブー | |debootstrap |I:60 |279 |トストラップ (sh で書かれてい | | | | |る) | |------------------+-----+------+-------------------------------| |cdebootstrap |V:0, |111 |Debian システムのブートストラッ| | |I:2 | |プ (C で書かれている) | |------------------+-----+------+-------------------------------| | |V:10,| |仮想マシンマネージャー: 仮想マ | |virt-manager |I:42 |2296 |シンを管理するデスクトップアプ | | | | |リケーション | |------------------+-----+------+-------------------------------| |libvirt-clients |V:43,|1304 |libvirt ライブラリー用のプログ | | |I:63 | |ラム | |------------------+-----+------+-------------------------------| |games-emulator |I:0 |26 |games-emulator: Debian's | | | | |emulators for games | |------------------+-----+------+-------------------------------| |bochs |V:0, |6956 |Bochs: IA-32 PC エミュレーター | | |I:1 | | | |------------------+-----+------+-------------------------------| |qemu |I:26 |97 |QEMU: 高速で汎用のプロセッサエ | | | | |ミュレーター | |------------------+-----+------+-------------------------------| |qemu-system |I:21 |59 |QEMU: フルシステムエミュレーシ | | | | |ョンのバイナリ |     |------------------+-----+------+-------------------------------| |qemu-user |V:1, |100502|QEMU: ユーザーモードエミュレー | | |I:8 | |ションのバイナリ | |------------------+-----+------+-------------------------------| |qemu-utils |V:12,|6875 |QEMU: ユーティリティー | | |I:107| | | |------------------+-----+------+-------------------------------| | |V:2, | |KVM: ハードウエア補助仮想化を利| |qemu-kvm |I:19 |107 |用する x86 ハードウエア上のフル| | | | |仮想化 | |------------------+-----+------+-------------------------------| |virtualbox |V:9, |126611|VirtualBox: i386 と amd64 上で | | |I:12 | |の x86 仮想化解決策 | |------------------+-----+------+-------------------------------| |xen-tools |V:0, |727 |Debian XEN 仮想サーバーの管理ツ| | |I:3 | |ール | |------------------+-----+------+-------------------------------| |wine |V:13,|130 |Wine: Windows API の実装 (標準 | | |I:65 | |スイート) | |------------------+-----+------+-------------------------------| | |V:2, | |DOSBox: Tandy/Herc/CGA/EGA/VGA/| |dosbox |I:17 |2671 |SVGA グラフィクス、サウンド、 | | | | |DOS 付きの x86 エミュレーター | |------------------+-----+------+-------------------------------| |lxc |V:9, |25643 |Linux コンテナ - ユーザースペー| | |I:13 | |スツール | |------------------+-----+------+-------------------------------| | | | |venv for creating virtual | |python3-venv |I:60 |6 |python environments (system | | | | |library) | |------------------+-----+------+-------------------------------| | |V:9, | |virtualenv for creating | |python3-virtualenv|I:53 |406 |isolated virtual python | | | | |environments | |------------------+-----+------+-------------------------------| | |V:0, | |pipx for installing python | |pipx |I:1 |887 |applications in isolated | | | | |environments | +---------------------------------------------------------------+     異なるプラットフォーム仮想化策の詳細な比較は Wikipedia の記事 Comparison of platform virtual machines を参照下さい。 9.11.2. 仮想化の業務フロー 注記     lenny 以降の Debian のデフォルトカーネルは KVM をサポートしていま す。     仮想化のための典型的な業務フローにはいくつかの段階があります。 * 空のファイルシステムの作成 (ファイルツリーもしくはディスクイ メージ)。 + ファイルツリーは "mkdir -p /path/to/chroot" として作成で きる。 + raw ディスクイメージファイルは dd(1) を使って作れます (「 ディスクイメージの作成」と「空のディスクイメージ作成」参 照下さい)。 + qemu-img(1) はQEMU によりサポートされたディスクイメージの 作成や変換に使えます。 + raw と VMDK ファイルフォーマットは仮想ツール間の共通フォ ーマットとして使えます。 * mount(8) を使ってディスクイメージをファイルシステムにマウント する (任意)。 + raw のディスクイメージファイルに関しては、loop デバイスま たはデバイスマッパーデバイス (「ディスクイメージファイル をマウント」参照下さい) としてマウント。     + QEMU がサポートするディスクイメージファイルに関しては、ネ ットワークブロックデバイス (「仮想ディスクイメージファイ ルをマウント。」参照下さい) としてマウント。 * 必要なシステムデーターを用いて対象のファイルシステムを充足。 + debootstrap や cdebootstrap のようなプログラムがこのプロ セスを援助します (「Chroot システム」参照下さい)。 + OS のインストーラーをフルシステムエミュレーション下で利用 。 * 仮想化環境下でプログラムを実行。 + chroot は、仮想環境の中でプログラムのコンパイルやコンソー ルアプリケーションの実行やデーモンの実行等をするのに十分 な基本的仮想環境を提供します。 + QEMU: クロスプラットフォームの CPU エミュレーションを提供 + KVM と共の QEMU はハードウエア補助仮想化によるフルシステ ムエミュレーションを提供します。 + VirtualBox はハードウエア補助仮想化の有無によらず i386 と amd64 上でのフルシステムエミュレーションを提供します。 9.11.3. 仮想ディスクイメージファイルをマウント。     raw ディスクイメージファイルに関しては、「ディスクイメージ」を参 照下さい。 他の仮想ディスクイメージに関しては、qemu-nbd(1) を使ってネットワ     ークブロックデバイスプロトコルを用いてそれらをエクスポートし nbd カーネルモジュールを使ってそれらをマウントできます。 qemu-nbd(1) はQEMU がサポートする次のディスクフォーマットをサポー     トします: raw、qcow2、qcow、vmdk、vdi、bochs、cow (user-mode Linux の copy-on-write)、parallels、dmg、cloop、vpc、vvfat (virtual VFAT)、host_device。 ネットワークブロックデバイスはloop デバイスと同様の方法でパーティ     ションをサポートします (「ディスクイメージファイルをマウント」参 照下さい)。"image.img" の最初のパーティションは次のようにするとマ ウントできます。 # modprobe nbd max_part=16 # qemu-nbd -v -c /dev/nbd0 disk.img     ... # mkdir /mnt/part1 # mount /dev/nbd0p1 /mnt/part1 ヒント     qemu-nbd(8) に"-P 1" オプションを用いると、"disk.img" の最初のパ ーティションだけをエクスポートできます。 9.11.4. Chroot システム If you wish to try a new Debian environment from a terminal console, I recommend you to use chroot. This enables you to run     console applications of Debian unstable and testing without usual risks associated and without rebooting. chroot(8) is the most basic way. 注意     Examples below assumes both parent system and chroot system share the same amd64 CPU architecture.     Although you can manually create a chroot(8) environment using debootstrap(1). But this requires non-trivial efforts. The sbuild package to build Debian packages from source uses the     chroot environment managed by the schroot package. It comes with helper script sbuild-createchroot(1). Let's learn how it works by running it as follows. $ sudo mkdir -p /srv/chroot     $ sudo sbuild-createchroot -v --include=eatmydata,ccache unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian ... You see how debootstrap(8) populates system data for unstable     environment under "/srv/chroot/unstable-amd64-sbuild" for a minimal build system.     You can login to this environment using schroot(1).     $ sudo schroot -v -c chroot:unstable-amd64-sbuild     You see how a system shell running under unstable environment is created. 注記     The "/usr/sbin/policy-rc.d" file which always exits with 101 prevents daemon programs to be started automatically on the Debian system. See "/usr/share/doc/sysv-rc/ README.policy-rc.d.gz". 注記 Some programs under chroot may require access to more files from     the parent system to function than sbuild-createchroot provides as above. For example, "/sys", "/etc/passwd", "/etc/group", "/var /run/utmp", "/var/log/wtmp", etc. may need to be bind-mounted or copied. ヒント The sbuild package helps to construct a chroot system and builds     a package inside the chroot using schroot as its backend. It is an ideal system to check build-dependencies. See more on sbuild at Debian wiki and sbuild configuration example in "Guide for Debian Maintainers". 9.11.5. 複数のデスクトップシステム If you wish to try a new GUI Desktop environment of any OS, I recommend you to use QEMU or KVM on a Debian stable system to run     multiple desktop systems safely using virtualization. These enable you to run any desktop applications including ones of Debian unstable and testing without usual risks associated with them and without rebooting.     Since pure QEMU is very slow, it is recommended to accelerate it with KVM when the host system supports it. Virtual Machine Manager also known as virt-manager is a     convenient GUI tool for managing KVM virtual machines via libvirt. QEMU 用の Debian システムを含む仮想ディスクイメージ     "virtdisk.qcow2" はdebian-installer: 小さな CD を使って次のように 作成できます。 $ wget http://cdimage.debian.org/debian-cd/5.0.3/amd64/iso-cd/debian-503-amd64-netinst.iso     $ qemu-img create -f qcow2 virtdisk.qcow2 5G $ qemu -hda virtdisk.qcow2 -cdrom debian-503-amd64-netinst.iso -boot d -m 256 ... ヒント     Ubuntu や Fedra 等の GNU/Linux ディストリビューションを仮想化の下 で実行するのは設定ティップを学ぶ非常に良い方法です。他のプロプラ イエタリな OS もこの GNU/Linux の仮想化の下で上手く実行できます。     See more tips at Debian wiki: SystemVirtualization. ---------------------------------------------------------------------     ^[2] More elaborate customization examples: "Vim Galore", "sensible.vim", "#vim Recommendations" ...     ^[3] vim-pathogen was popular. 第10章データー管理     バイナリーとテキストのデーターを Debian システム上で管理するツー ルとティップを記します。 10.1. 共有とコピーとアーカイブ 警告     競合状態とならないようにするために、アクティブにアクセスされてい るデバイスやファイルに複数プロセスから調整なく書き込みアクセスを してはいけません。flock(1) を使ったファイルロック機構がこの回避に 使えます。     データーのセキュリティーとそのコントロールされた共有はいくつかの 側面があります。 * データーアーカイブの作成 * 遠隔ストレージアクセス * 複製     * 変更履歴の追跡 * データー共有のアシスト * 不正なファイルへのアクセスの防止 * 不正なファイルの改変の検出     こういったことは次の組み合わせを使うことで実現できます。 * アーカイブと圧縮ツール * コピーと同期ツール * ネットワークファイルシステム * リムーバブルストレージメディア     * セキュアーシェル * 認証システム * バージョンコントロールシステムツール * ハッシュや暗号学的暗号化ツール 10.1.1. アーカイブと圧縮ツール     Debian システム上で利用可能なアーカイブと圧縮ツールのまとめを以下 に記します。 表10.1 アーカイブと圧縮ツールのリスト +---------------------------------------------------------------+ |パッケージ|ポプコ|サイ|拡張 |コマン | コメント | | | ン | ズ | 子 | ド | | |----------+------+----+-----+-------+--------------------------| |tar |V:922,|3144|.tar |tar(1) |標準アーカイバー (デファク| | |I:999 | | | |ト標準) | |----------+------+----+-----+-------+--------------------------| | |V:392,| | | |Unix System V スタイルのア| |cpio |I:998 |1141|.cpio|cpio(1)|ーカイバー、find(1) ととも| | | | | | |に使用 | |----------+------+----+-----+-------+--------------------------| |binutils |V:152,|109 |.ar |ar(1) |静的ライブラリー生成用のア| | |I:644 | | | |ーカイバー | |----------+------+----+-----+-------+--------------------------| |fastjar |V:1, |183 |.jar |fastjar|Java 用のアーカイバー (zip| | |I:19 | | |(1) |類似) | |----------+------+----+-----+-------+--------------------------| | |V:10, | | | |新規 POSIX 標準アーカイバ | |pax |I:18 |170 |.pax |pax(1) |ー、tar と cpio の間の妥協| | | | | | |点 | |----------+------+----+-----+-------+--------------------------| | | | | |gzip | | |gzip |V:885,|252 |.gz |(1), |GNU LZ77 圧縮ユーティリテ | | |I:999 | | |zcat |ィー (デファクト標準) | | | | | |(1), … | | |----------+------+----+-----+-------+--------------------------| | | | | |bzip2 |gzip(1) より高い圧縮比 | | |V:158,| | |(1), |(gzip より遅い、類似シンタ| |bzip2 |I:970 |121 |.bz2 |bzcat |ックス) の Burrows-Wheeler| | | | | |(1), … |ブロック並び替え圧縮ユーテ| | | | | | |ィリティー | |----------+------+----+-----+-------+--------------------------|     | | | | | |LZMA compression utility | |lzma |V:1, |149 |.lzma|lzma(1)|with higher compression | | |I:21 | | | |ratio than gzip(1) | | | | | | |(deprecated) | |----------+------+----+-----+-------+--------------------------| | | | | | |bzip2(1) より高い圧縮比の | | |V:429,| | |xz(1), |XZ 圧縮ユーティリティー | |xz-utils |I:979 |1166|.xz |xzdec |(gzip より遅いが bzip2 よ | | | | | |(1), … |り早い、LZMA 圧縮ユーティ | | | | | | |リティーの代替) | |----------+------+----+-----+-------+--------------------------| | | | | |zstd | | |zstd |V:27, |2027|.zstd|(1), |Zstandard fast lossless | | |I:90 | | |zstdcat|compression utility | | | | | |(1), … | | |----------+------+----+-----+-------+--------------------------| | |V:108,| | |7zr(1),|高い圧縮比をもつ 7-Zip 圧 | |p7zip |I:453 |987 |.7z |p7zip |縮ユーティリティー (LZMA | | | | | |(1) |圧縮) | |----------+------+----+-----+-------+--------------------------| | |V:112,| | |7z(1), |高い圧縮比をもつ 7-Zip 圧 | |p7zip-full|I:459 |4664|.7z |7za(1) |縮ユーティリティー (LZMA | | | | | | |圧縮、他) | |----------+------+----+-----+-------+--------------------------| | | | | | |gzip(1) より高い圧縮と解凍| |lzop |V:13, |164 |.lzo |lzop(1)|の速度 (gzip より低い圧縮 | | |I:133 | | | |比、類似シンタックス) の | | | | | | |LZO 圧縮ユーティリティー | |----------+------+----+-----+-------+--------------------------| |zip |V:46, |623 |.zip |zip(1) |InfoZIP: DOS アーカイブと | | |I:399 | | | |圧縮ツール | |----------+------+----+-----+-------+--------------------------| |unzip |V:99, |385 |.zip |unzip |InfoZIP: DOS アーカイブ解 | | |I:773 | | |(1) |凍と圧縮解凍ツール | +---------------------------------------------------------------+ 警告     何が起こるかを理解せずに "$TAPE" 変数を設定してはいけません。設定 すると tar(1) の挙動が変わります。 * gzip 圧縮された tar(1) アーカイブは ".tgz" とか ".tar.gz" と いったファイル拡張子を使います。 * xz 圧縮された tar(1) アーカイブは ".txz" とか ".tar.xz" とい ったファイル拡張子を使います。 * tar(1) 等の FOSS ツールでのポピュラーな圧縮方法は次のように変 遷しています: gzip → bzip2 → xz * cp(1) と scp(1) と tar(1) は特殊ファイルに関して一部制約があ るかもしれません。cpio(1) は最も汎用性があります。     * cpio(1) はfind(1) 等のコマンドとともに使うようにできていて、 ファイルの選定部分のスクリプトを独立にテストできるのでバック アップスクリプトを作るのに向いています。 * Libreoffice データーファイルの内部構造は ".jar" ファイルで、 unzip で開くことができます。 * デファクトのクロスプラットフォームのアーカイブツールは zip で す。最大限のコンパチビリティーのためには "zip -rX" として使っ てください。もし最大ファイルサイズが問題となる際には "-s" オ プションも使ってください。 10.1.2. コピーと同期ツール     Debian システム上で利用可能な単純なコピーとバックアップツールのま とめを以下に記します。 表10.2 コピーと同期ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ |ツー| 機能 | | | ン | ズ | ル | | |--------------+------+-----+----+------------------------------| |coreutils |V:910,|18062|GNU |ファイルやディレクトリーのロー| | |I:999 | |cp |カルコピー ("-a" で再帰的実行)| |--------------+------+-----+----+------------------------------| | |V:855,| | |ファイルやディレクトリーのリモ| |openssh-client|I:997 |5609 |scp |ートコピー (クライアント、"-r"|     | | | | |で再帰実行) | |--------------+------+-----+----+------------------------------| |openssh-server|V:738,|1867 |sshd|ファイルやディレクトリーのリモ| | |I:843 | | |ートコピー (リモートサーバー) | |--------------+------+-----+----+------------------------------| |rsync |V:269,|776 | |単方向リモート同期とバックアッ| | |I:569 | | |プ | |--------------+------+-----+----+------------------------------| |unison |V:3, |14 | |双方向リモート同期とバックアッ| | |I:15 | | |プ | +---------------------------------------------------------------+     rsync(8) を使ってのファイルのコピーには他の方法より豊かな機能があ ります。 * 転送元のファイルと転送先の既存ファイル間の相違のみを送信する 差分転送アルゴリズム * サイズか最終変更時間に変更があったファイルのみを探す (デフォ     ルトで採用される) 急速確認アルゴリズム * tar(1) 類似の "--exclude" や "--exclude-from" オプション * 転送先に追加ディレクトリーレベルを作成しなくする「転送元ディ レクトリ後スラシュ (/) 付加」文法 ヒント     表10.14「List of other version control system tools」に記されたバ ージョンコントロールシステム (VCS) ツールは多方向のコピーと同期の ツールとして機能します。 10.1.3. アーカイブの慣用句     "./source" ディレクトリー中の全内容を異なるツールを用いてアーカイ ブしアーカイブ解凍するいくつかの方法を以下に記します。     GNU tar(1):     $ tar -cvJf archive.tar.xz ./source $ tar -xvJf archive.tar.xz     この代わりに、次のようにも出来ます。     $ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -F -     cpio(1):     $ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio $ zcat archive.cpio.xz | cpio -i 10.1.4. コピーの慣用句     "./source" ディレクトリー中の全内容を異なるツールを用いてコピーす るいくつかの方法を以下に記します。 * ローカルコピー: "./source" ディレクトリー → "/dest" ディレク トリー     * リモートコピー: ローカルホストの "./source" ディレクトリー → "user@host.dom" ホストの "/dest" ディレクトリー     rsync(8):     # cd ./source; rsync -aHAXSv . /dest # cd ./source; rsync -aHAXSv . user@host.dom:/dest     「転送元ディレクトリー後スラシュ付加」文法を上記の代わりに使えま す。     # rsync -aHAXSv ./source/ /dest # rsync -aHAXSv ./source/ user@host.dom:/dest     この代わりに、次のようにも出来ます。     # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest # cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest     GNU cp(1) と openSSH scp(1):     # cd ./source; cp -a . /dest # cd ./source; scp -pr . user@host.dom:/dest     GNU tar(1):     # (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - ) # (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'     cpio(1):     # cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest "." を含むすべての例で "." は"foo" で代替でき、ファイルを "./     source/foo" ディレクトリーから "/dest/foo" ディレクトリにコピーで きます。 "." を含むすべての例で "." を絶対パスの "/path/to/source/foo" で     代替でき、"cd ./source;" を削除することができます。これらは使うツ ール次第で異なる場所にファイルをコピーします。 * "/dest/foo": rsync(8)、GNU cp(1)、scp(1)     * "/dest/path/to/source/foo": GNU tar(1) と cpio(1) ヒント     rsync(8) や GNU cp(1) には転送先のファイルが新しい場合にスキップ する "-u" オプションがあります。 10.1.5. ファイル選択の慣用句 アーカイブやコピーコマンド (「アーカイブの慣用句」と「コピーの慣 用句」参照下さい) のためや xargs(1) (「ファイルに関してループしな     がらコマンドを反復実行」参照下さい) のためにファイルを選択するの に find(1) が使われます。これの操作は find(1) のコマンド引数を使 うことで強化できます。     find(1) の基本シンタックスは次のようにまとめられます。 * 条件の引数は左から右へと評価されます。 * 結果が決まった時点で評価は終了します。 * "論理 OR" (条件間に "-o" で指定) は、"論理 AND" (条件間に "-a" または何もなしで指定) より低い優先順位です。 * "論理 NOT" (条件前に "!" で指定) は、"論理 AND" より高い優先 順位です。 * "-prune" は常に論理真 (TRUE) を返し、ディレクトリーの場合には この点以降のファイル探索を停止します。 * "-name" はシェルのグロブ (「シェルグロブ」参照下さい) を使っ     てファイル名のベースにマッチし、さらに "*" and "?" 等のメタ文 字で最初の "." ともマッチします。(新規の POSIX 機能) * "-regex" はデフォールトでは emacs スタイルの BRE (「正規表現 」参照下さい) を用いてフルパスをマッチします。 * "-size" はファイルサイズ ("+" が前に付いた値はより大きい、"-" が前に付いた値はより小さい) に基づいてファイルをマッチします 。 * "-newer" はその引数に指定されたファイルより新しいファイルとマ ッチします。 * "-print0" は常に論理真 (TRUE) を返し、フルファイル名を (null 終端処理して) 標準出力へプリントします。     find(1) はしばしば慣用的なスタイルで使われます。 # find /path/to \ -xdev -regextype posix-extended \     -type f -regex ".*\.cpio|.*~" -prune -o \ -type d -regex ".*/\.git" -prune -o \ -type f -size +99M -prune -o \ -type f -newer /path/to/timestamp -print0     これは次のアクションをすることを意味します。 1. "/path/to" からはじまる全ファイルを探索 2. 探索開始したファイルシステムに探索を全体的に制約し、デフォー ルトの代わりに ERE (「正規表現」参照下さい) を使用 3. 正規表現 ".*\.cpio" か ".*~" にマッチするファイルを処理停止を することで探索から除外     4. 正規表現 ".*/\.git" にマッチするディレクトリーを処理停止をす ることで探索から除外 5. 9MiB(1048576バイトの単位) より大きいファイルを処理停止をする ことで探索から除外 6. 上記の探索条件に合致し "/path/to/timestamp" より新しいファイ ル名をプリントします     上記例中でファイルを検索から除外するときの "-prune -o" の慣用的な 使い方に注目して下さい。 注記 非 Debian のUnix 的システムでは、一部のオプションは find(1) によ     ってサポートされていないかもしれません。そのような場合には、マッ チング方法を調整したり "-print0" を"-print" で置き換えることを考 慮します。これに関連するコマンドも調整する必要があるかもしれませ ん。 10.1.6. アーカイブメディア 重要なデーターアーカイブのためのコンピューターデーターストレージ メディアを選ぶ時にはそれらの限界について注意を払うべきです。小さ     な個人的なバックアップのためには、著者としては名前が知られている 会社の CD-R と DVD-R を使い、クールで日陰の乾燥した埃の無い環境に 保存しています。(プロ用途ではテープアーカイブメディアに人気がある ようです。) 注記     耐火金庫は紙の文書のためのものです。ほとんどのコンピューターデー ターストレージメディアは紙よりも耐熱性がありません。著者は通常複 数の安全な場所に保管された複数のセキュアーな暗号化されたコピーに 頼っています。     ネット上に散見するアーカイブメディアの楽観的なストレージ寿命 (ほ とんどベンダー情報由来)。 * 100+年: インクと中性紙 * 100年: オプティカルストレージ (CD/DVD、CD/DVD-R)     * 30年: 磁気ストレージ (テープ、フロッピー) * 20年: 相変化オプティカルストレージ (CD-RW)     これらは取扱いによる機械的故障等は考慮していません。     ネット上に散見するアーカイブメディアの楽観的な書込み回数 (ほとん どベンダー情報由来)。 * 250,000+回: ハードディスク * 10,000+回: フラッシュメモリー     * 1,000回: CD/DVD-RW * 1回: CD/DVD-R、紙 注意     ここにあるストレージ寿命や書込み回数の数字はクリチカルなデーター ストレージに関する決定に使うべきではありません。製造者によって提 供される特定の製品情報を参照下さい。 ヒント     CD/DVD-R や紙は1回しか書けないので、本質的に重ね書きで間違ってデ ーターを消すことを防げます。これは、利点です! ヒント     もし高速で頻繁な大量のデーターのバックアップをする必要がある場合 、高速のネットワーク接続でつながっているリモートホスト上のハード ディスクが唯一の現実的なオプションかもしれません。 ヒント     If you use re-writable media for your backups, use of filesystem such as btrfs or zfs which supports read-only snapshots may be a good idea. 10.1.7. リムーバブルストレージデバイス     リムーバブルストレージデバイスは次の何れも指します。 * USB フラッシュドライブ * Hard ディスクドライブ     * 光学ディスクドライブ * デジタルカメラ * デジタル音楽プレーヤー     これらは次の何れかで接続できます。 * USB     * IEEE 1394 / FireWire * PC カード GNOME や KDE のような最近のデスクトップ環境は、"/etc/fstab" エン     トリーにマッチが無いリムーバブルデバイスを自動的にマウントする事 ができます。 * udisks2 package provides a daemon and associated utilities to mount and unmount these devices.     * D-bus は、自動的なプロセスを開始するイベントを作成します。 * PolicyKit が必要な特権を提供します。 ヒント     自動的にマウントされたデバイスは、umount(8) によって利用される "uhelper=" マウントオプションが設定されているかもしれません。 ヒント     "/etc/fstab" にリムーバブルメディアデバイスの記載が無い時のみ、現 代的なデスクトップ環境下での自動マウントは起こります。     Mount point under modern desktop environment is chosen as "/media /username/disk_label" which can be customized by the following. * FAT ファイルシステムでは、mlabel(1) を使います。 * ISO9660 ファイルシステムでは、genisoimage(1) を"-V" オプショ     ンとともに使います。 * ext2/ext3/ext4 ファイルシステムでは、tune2fs(1) を"-L" オプシ ョンとともに使います。 ヒント     符号化方式 (エンコーディング) の選択をマウントオプションとして与 える必要があるかもしれません (「ファイル名の符号化方式」参照下さ い)。 ヒント     ファイルシステムをアンマウンとする際に GUI メニューを使うと、動的 に生成された "/dev/sdc" 等のデバイスノード削除するかもしれません 。もしそのデバイスノードの削除したくない場合にはシェルのコマンド プロンプトから umount(8) コマンドを使いましょう。 10.1.8. データー共有用のファイルシステム選択 リムーバブルストレージデバイスを使ってデーターを共有する際には、     両方のシステムにサポートされた共通のファイルシステムでそれをフォ ーマットするべきです。ファイルシステム選択のリストを次に示します 。 表10.3 典型的な使用シナリオに合わせたリムーバブルストレージデバイ スのファイルシステムの選択肢のリスト +---------------------------------------------------------------+ |filesystem| typical usage scenario | | name | | |----------+----------------------------------------------------| |FAT12 |フロッピーディスク上のクロスプラットフォームのデータ| | |ー共有 (<32MiB) | |----------+----------------------------------------------------| |FAT16 |小さなハードディスク類似のデバイス上のクロスプラット| | |フォームのデーター共有 (<2GiB) | |----------+----------------------------------------------------| | |大きなハードディスク類似のデバイス上のクロスプラット| |FAT32 |フォームのデーター共有 (<8TiB, MS Windows95 OSR2 以 | | |降でサポート有り) | |----------+----------------------------------------------------| | |cross platform sharing of data on the large hard | |exFAT |disk like device (<512TiB, supported by WindowsXP, | | |Mac OS X Snow Leopard 10.6.5, and Linux kernel since| | |5.4 release) | |----------+----------------------------------------------------| | |大きなハードディスク類似のデバイス上のクロスプラット|     |NTFS |フォームのデーター共有 (MS Windows NT 以降でネイティ| | |ブにサポート、Linux 上では FUSE 経由の NTFS-3G でサ | | |ポート) | |----------+----------------------------------------------------| |ISO9660 |CD-R and DVD+/-R 上の静的データーのクロスプラットフ | | |ォームの共有 | |----------+----------------------------------------------------| |UDF |CD-R や DVD+/-R 上への増分データーの書込み (新規) | |----------+----------------------------------------------------| |MINIX |フロッピーディスク上へのスペース効率の良い unix ファ| | |イルデーターのストレージ | |----------+----------------------------------------------------| |ext2 |古い Linux システムとハードディスク類似デバイス上の | | |データーを共有 | |----------+----------------------------------------------------| |ext3 |古い Linux システムとハードディスク類似デバイス上の | | |データーを共有 | |----------+----------------------------------------------------| |ext4 |最新の Linux システムとハードディスク類似デバイス上 | | |のデーターを共有 | |----------+----------------------------------------------------| |btrfs |sharing of data on the hard disk like device with | | |current Linux systems with read-only snapshots | +---------------------------------------------------------------+ ヒント     デバイスレベルの暗号化を使ったクロスプラットフォームのデーター共 有に関しては、「dm-crypt/LUKS を使ったリムーバブルディスクの暗号 化」を参照下さい。 FAT ファイルシステムはほとんど全ての現代的なオペレーティングシス     テムでサポートされていて、ハードディスク類似のメディア経由でのデ ーター交換目的に非常に有用です。 クロスプラットフォームの FAT ファイルシステムを使ったデーター共有     にリムーバブルハードディスク類似デバイスをフォーマットする時の安 全な選択肢は次です。 * fdisk(8) か cfdisk(8) か parted(8) (「ディスクパーティション 設定」参照下さい) を使ってそれを単一のプライマリパーティショ ンにパーティションしそれを次のようにマークします。 + 2GB より小さなメディアには FAT16 となるように "6" とタイ プします + 大きなメディアには FAT32 (LBA) となるように "c" とタイプ     します * 第1パーティションを mkfs.vfat(8) を使って次のようにフォーマッ トします。 + FAT16 となるように "/dev/sda1" 等とそのデバイス名だけを使 います + FAT32 となるように "-F 32 /dev/sda1" 等と明示的なオプショ ン指定とそのデバイス名を使います     FAT とか ISO9660 ファイルシステムを使ってデーターを共有する際の安 全への配慮を次に記します。 * tar(1) や cpio(1) を使ってアーカイブファイルに最初にファイル をアーカイブすることで長いファイル名やシンボリックリンクやオ リジナルの Unix ファイルパーミッションとオーナー情報を保持し ます。     * split(1) コマンドを使ってアーカイブファイルを 2GiB 以下の塊に 分割してファイルサイズの制約から保護します。 * アーカイブファイルを暗号化してその内容を不正アクセスから保護 します。 注記 FAT ファイルシステムはその設計上最大ファイルサイズは (2^32 - 1)     bytes = (4GiB - 1 byte) です。古い 32 ビット OS 上の一部アプリケ ーションは、最大ファイルサイズはさらに小さく (2^31 - 1) bytes = (2GiB - 1 byte) です。Debian は後者の問題に苦しむことはありません 。 注記 Microsoft 自身も 200MB を越すドライブやパーティションに FAT を使     うことを勧めていません。マイクロソフトは、彼らの "Overview of FAT, HPFS, and NTFS File Systems" で非効率的なディスク領域の使用 等の欠点をハイライトしています。もちろん私たちは Linux では通常 ext4 ファイルシステムを使うべきです。 ヒント     ファイルシステムとファイルシステムのアクセスに関しての詳細は、 "Filesystems HOWTO" を参照下さい。 10.1.9. ネットワーク経由でのデーター共有     データーをネットワーク経由で他のシステムと共有するときには、共通 のサービスを使うべきです。次に一部のヒントを記します。 表10.4 典型的使用シナリオの場合のネットワークサービスの選択のリス ト +---------------------------------------------------------------+ |ネットワークサービス | 典型的使用シナリオの説明 | |---------------------+-----------------------------------------| |Samba を使う SMB/CIFS|"Microsoft Windows Network" 経由でのファ | |ネットワーク経由マウ |イル共有、smb.conf(5) と The Official | |ントファイルシステム |Samba 3.x.x HOWTO and Reference Guide か | | |samba-doc パッケージ参照下さい | |---------------------+-----------------------------------------| |Linux カーネルを使う |"Unix/Linux Network" 経由のファイル共有、|     |NFS ネットワークマウ |exports(5) と Linux NFS-HOWTO 参照下さい | |ントファイルシステム |。 | |---------------------+-----------------------------------------| |HTTP サービス |ウェッブサーバー/クライアント間のファイル| | |共有 | |---------------------+-----------------------------------------| | |暗号化されたセキュアーソケットレイヤー | |HTTPS サービス |(SSL) もしくは Transport Layer Security | | |(TLS) を使ったウェッブサーバー/クライアン| | |ト間のファイル共有 | |---------------------+-----------------------------------------| |FTP サービス |FTP サーバー/クライアント間のファイル共有| +---------------------------------------------------------------+ このようなネットワーク経由でマウントされたファイルシステムやネッ     トワーク経由のファイル転送法はデーター共有のために非常に便利です が、インセキュアーかもしれませんこれらのネットワーク接続は次に記 すようにしてセキュアーにされなければいけません。 * SSL/TLS を使い暗号化 * SSH 経由でそれをトンネル     * VPN 経由でそれをトンネル * セキュアーファイアウォールの背後に限定     さらに「他のネットワークアプリケーションサーバー」と「他のネット ワークアプリケーションクライアント」を参照下さい。 10.2. バックアップと復元 コンピューターはいつか壊れるとか、人間によるエラーがシステムやデ     ーターをへの損害を及ぼすことは皆知っています。バックアップと復元 の操作は正しいシステム管理の必須構成要素です。考えうる全ての故障 モードはいつかの日にやって来ます。 ヒント     バックアップのシステムは簡単にしておき、システムのバックアップは 頻繁にします。バックアップデーターが存在することは、あなたのバッ クアップ方法が技術的に如何に良いかよりも重要です。 10.2.1. Backup and recovery policy     実際のバックアップと復元の方針を決める上で3つの要素があります。 1. 何をバックアップし復元するかを知っていること + あなた自身が作成したデーターファイル: "~/" 中のデーター + あなた自身が使用したアプリケーションが作成したデーターフ ァイル: "/var/" ("/var/cache/" と "/var/run/" と "/var/ tmp/" は除外) 中のデーター + システム設定ファイル: "/etc/" 中のデーター + Local programs: data in "/usr/local/" or "/opt/" + システムインストール情報: 要点 (パーティション、…) をプレ ーンテキストで書いたメモ + 実証済みのデーターセット: 事前に実験的復元操作をして確認 済み o Cron job as a user process: files in "/var/spool/cron /crontabs" directory and restart cron(8). See 「タス ク定期実行のスケジュール」 for cron(8) and crontab (1). o Systemd timer jobs as user processes: files in "~ /.config/systemd/user" directory. See systemd.timer (5) and systemd.service(5). o Autostart jobs as user processes: files in "~/.config /autostart" directory. See Desktop Application Autostart Specification. 2. バックアップと復元の方法を知っていること + セキュアーなデーターのストレージ: 上書きやシステム障害の 防止 + 頻繁なバックアップ: スケジュールされたバックアップ + 冗長なバックアップ: データーのミラーリング + フルプルーフなプロセス: 簡単な単一コマンドバックアップ     3. 関わっているリスクと費用の評価 + Risk of data when lost o Data should be at least on different disk partitions preferably on different disks and machines to withstand the filesystem corruption. Important data are best stored on a read-only filesystem. ^[4] + Risk of data when breached o Sensitive identity data such as "/etc/ssh/ ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/ share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" should be backed up as encrypted. ^[5] (See 「データー暗号化ティップ」.) o Never hard code system login password nor decryption passphrase in any script even on any trusted system. (See 「Password keyring」.) + 故障モードとその確率 o Hardware (especially HDD) will break o Filesystem may be corrupted and data in it may be lost o Remote storage system can't be trusted for security breaches o Weak password protection can be easily compromised o File permission system may be compromised + バックアップに必要なリソース: 人的、ハードウエアー、ソフ トウエアー、… o Automatic scheduled backup with cron job or systemd timer job 注記     /proc や /sys や /tmp や /run 上にある擬似ファイルシステム (「 procfs と sysfs」と「tmpfs」参照) の内容をバックアップしてはいけ ません。あなた自身が自分がしていることの意味を余程よく分かってい なければ、これらの内容は巨大で無用なデーターです。 注記     データーをバックアップする際には MTA (「メール転送エージェント (MTA)」参照下さい) 等のアプリケーションデーモンを停止するのも一計 です。 10.2.2. バックアプユーティリティーのスイート     Debian システム上で利用可能でバックアップユーティリティーのスイー トのなかで際立った選ばれたリストを記します。 表10.5 バックアップスイートのユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイ | 説明 | | |コン | ズ | | |--------------+-----+-----+------------------------------------| |dump |V:1, |351 |ext2/ext3/ext4 ファイルシステム用の | | |I:5 | |4.4 BSD 由来の dump(8) と restore(8)| |--------------+-----+-----+------------------------------------| | |V:0, | |GNU/Linux と IRIX 上の XFS ファイル | |xfsdump |I:8 |848 |システム用の xfsdump(8) と | | | | |xfsrestore(8) を使う dump と restore| |--------------+-----+-----+------------------------------------| |backupninja |V:3, |367 |軽量で拡張可のメタバックアップシステ| | |I:4 | |ム | |--------------+-----+-----+------------------------------------| | |V:10,| |Bacula: ネットワークバックアップ、復| |bacula-common |I:12 |2120 |元および検証 - 共通のサポートファイ | | | | |ル | |--------------+-----+-----+------------------------------------| | | | |Bacula: ネットワークバックアップ、復| |bacula-client |I:3 |183 |元および検証 - クライアントメタパッ | | | | |ケージ | |--------------+-----+-----+------------------------------------| |bacula-console|V:1, |104 |Bacula: ネットワークバックアップ、復| | |I:4 | |元および検証 - テキストコンソール | |--------------+-----+-----+------------------------------------| | | | |Bacula: ネットワークバックアップ、復| |bacula-server |I:1 |183 |元および検証 - サーバーメタパッケー | | | | |ジ | |--------------+-----+-----+------------------------------------| |amanda-common |V:0, |9937 |Amanda: Advanced Maryland Automatic | | |I:2 | |Network Disk Archiver (ライブラリー)|     |--------------+-----+-----+------------------------------------| |amanda-client |V:0, |1085 |Amanda: Advanced Maryland Automatic | | |I:2 | |Network Disk Archiver (クライアント)| |--------------+-----+-----+------------------------------------| |amanda-server |V:0, |1077 |Amanda: Advanced Maryland Automatic | | |I:0 | |Network Disk Archiver (サーバー) | |--------------+-----+-----+------------------------------------| |backup-manager|V:0, |571 |コマンドラインのバックアップツール | | |I:1 | | | |--------------+-----+-----+------------------------------------| | |V:0, | |マウントできるメディアのための低メン| |backup2l |I:0 |115 |テナンスのバックアップ/復旧ツール | | | | |(ディスクベース) | |--------------+-----+-----+------------------------------------| | |V:2, | |BackupPC は高性能でエンタープライズ | |backuppc |I:2 |3178 |級の、PC をバックアップするためのシ | | | | |ステム (ディスクベース) | |--------------+-----+-----+------------------------------------| |duplicity |V:19,|1875 |(リモート) 増分バックアップ | | |I:40 | | | |--------------+-----+-----+------------------------------------| |flexbackup |V:0, |243 |(リモート) 増分バックアップ | | |I:0 | | | |--------------+-----+-----+------------------------------------| |rdiff-backup |V:5, |764 |(リモート) 増分バックアップ | | |I:12 | | | |--------------+-----+-----+------------------------------------| |restic |V:2, |21593|(リモート) 増分バックアップ | | |I:5 | | | |--------------+-----+-----+------------------------------------| |slbackup |V:0, |151 |(リモート) 増分バックアップ | | |I:0 | | | +---------------------------------------------------------------+     バックアップツールにはそれぞれの特別な狙いがあります。 * Mondo Rescue を使うと、通常のインストールプロセスを経ずにバッ クアップ CD/DVD 等から完全なシステムを迅速に復旧できます。     * Bacula と Amanda と BackupPC は、ネットワーク越しの定期的バッ クアップに焦点のあるフル機能のバックアップスイートです。 * Regular backups of user data can be realized by a simple script (「Personal backup」). 「アーカイブと圧縮ツール」や「コピーと同期ツール」に記された基本     的なツールを使うとカスタムスクリプト経由のシステムバックアップが できます。そのようなスクリプトは次を使うと強化できます。 * restic パッケージは差分(遠隔)バックアップを提供します。 * rdiff-backup パッケージは (リモートの) 増分バックアップを可能     にします。 * dump パッケージは全ファイルシステムの効率的かつ増分のバックア ップと復旧を補助します。 ヒント     dump パッケージに関して学ぶには、"/usr/share/doc/dump/" の中のフ ァイルと "Is dump really deprecated?" を参照下さい。 10.2.3. Personal backup For a personal Debian desktop system running testing suite, I     only need to protect personal and critical data. I reinstall system once a year anyway. Thus I see no reason to backup the whole system or to install a full featured backup utility. At the same time, it is very valuable to have frequent recent     snapshots of personal data and system configuration, and occasional full backups of personal data. I usually make these snapshots and backups with a simple shell script bss. This script is a short shell which uses standard     utilities: btrfs subvolume snapshot, rsync. For data encryption, disk image is created by fallocate(1) and configured with cryptsetup(8). ヒント     debconf の設定データーは "debconf-set-selections debconf-selections" で、dpkg の選択データーは "dpkg --set-selection 1.2.1-2) パッケ ージはこのような壊れたサブキーを取り扱えます。gpg(1) の "--repair-pks-subkey-bug" オプションの説明を参照下さい。 10.3.2. GnuPG をファイルに使用     基本的なキー管理に関する GNU プライバシガードコマンドを次に記しま す。 表10.9 ファイルに使用する GNU プライバシーガードコマンドのリスト +---------------------------------------------------------------+ | コマンド | 説明 | |---------------------------+-----------------------------------| |gpg -a -s file |ファイルを ASCII 文字化した | | |file.asc と署名 | |---------------------------+-----------------------------------| |gpg --armor --sign file |, , | |---------------------------+-----------------------------------| |gpg --clearsign file |メッセージをクリアサイン | |---------------------------+-----------------------------------| |gpg --clearsign file|mail |foo@example.org にクリアサインされ | |foo@example.org |たメッセージをメールする | |---------------------------+-----------------------------------| |gpg --clearsign | | |--not-dash-escaped |パッチファイルをクリアサイン | |patchfile | | |---------------------------+-----------------------------------| |gpg --verify file |クリアサインされたファイルを確認 | |---------------------------+-----------------------------------| |gpg -o file.sig -b file |署名を別ファイルで作成 | |---------------------------+-----------------------------------| |gpg -o file.sig |, , | |--detach-sig file | | |---------------------------+-----------------------------------| |gpg --verify file.sig file |file.sig を使ってファイルを確認 |     |---------------------------+-----------------------------------| |gpg -o crypt_file.gpg -r |file からバイナリー crypt_file.gpg | |name -e file |への name 宛公開キー暗号化 | |---------------------------+-----------------------------------| |gpg -o crypt_file.gpg | | |--recipient name --encrypt |, , | |file | | |---------------------------+-----------------------------------| |gpg -o crypt_file.asc -a -r|file から ASCII 文字化された | |name -e file |crypt_file.asc への name 宛公開キー| | |暗号化 | |---------------------------+-----------------------------------| |gpg -o crypt_file.gpg -c |file からバイナリー crypt_file.gpg | |file |への対称暗号化 | |---------------------------+-----------------------------------| |gpg -o crypt_file.gpg |, , | |--symmetric file | | |---------------------------+-----------------------------------| |gpg -o crypt_file.asc -a -c|file から ASCII 文字化された | |file |crypt_file.asc への対称暗号化 | |---------------------------+-----------------------------------| |gpg -o file -d |暗号解読 | |crypt_file.gpg -r name | | |---------------------------+-----------------------------------| |gpg -o file --decrypt |, , | |crypt_file.gpg | | +---------------------------------------------------------------+ 10.3.3. Mutt で GnuPG を使用 インデックスメニュー上で "S" とすれば GnuPG が使えるようにしてお     きながら、遅い GnuPG が自動的に起動しないように "~/.muttrc" に次 の内容を追加します。     macro index S ":toggle pgp_verify_sig\n" set pgp_verify_sig=no 10.3.4. Vim で GnuPG を使用     The gnupg plugin let you run GnuPG transparently for files with extension ".gpg", ".asc", and ".ppg".^[6]     $ sudo aptitude install vim-scripts $ echo "packadd! gnupg" >> ~/.vim/vimrc 10.3.5. MD5 和     md5sum(1) はrfc1321 の方法を使ってダイジェストファイルを作成し各 ファイルをそれで確認するユーティリティーを提供します。 $ md5sum foo bar >baz.md5 $ cat baz.md5 d3b07384d113edec49eaa6238ad5ff00 foo     c157a79031e1c40f85931829bc5fc552 bar $ md5sum -c baz.md5 foo: OK bar: OK 注記     MD5 和の計算は GNU プライバシーガード (GnuPG) による暗号学的署名 の計算より CPU への負荷がかかりません。通常、一番上のレベルのダイ ジェストファイルだけがデーターの整合性のために暗号学的に署名され ます。 10.3.6. Password keyring     On GNOME system, the GUI tool seahorse(1) manages passwords and stores them securely in the keyring ~/.local/share/keyrings/*.     secret-tool(1) can store password to the keyring from the command line.     Let's store passphrase used for LUKS/dm-crypt encrypted disk image     $ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img Password: ********     This stored password can be retrieved and fed to other programs, e.g., cryptsetup(8). $ secret-tool lookup LUKS my_disk.img | \     cryptsetup open disk.img disk_img --type luks --keyring - $ sudo mount /dev/mapper/disk_img /mnt ヒント     Whenever you need to provide password in a script, use secret-tool and avoid directly hardcoding the passphrase in it.. 10.4. ソースコードマージツール     ソースコードをマージする多くのツールがあります。次のコマンドが著 者の目に止まりました。 表10.10 ソースコードマージツールのリスト +---------------------------------------------------------------+ |パッケージ|ポプコ|サイ| コマンド | 説明 | | | ン | ズ | | | |----------+------+----+-----------+----------------------------| |patch |V:79, |248 |patch(1) |差分ファイルをオリジナルに適| | |I:704 | | |用 | |----------+------+----+-----------+----------------------------| |vim |V:95, |3570|vimdiff(1) |vim で2つのファイルを並べて | | |I:392 | | |比較 | |----------+------+----+-----------+----------------------------| |imediff |V:0, |169 |imediff(1) |対話型フルスクリーンの2方/3 | | |I:0 | | |方マージツール | |----------+------+----+-----------+----------------------------| |meld |V:10, |3500|meld(1) |ファイルを比較やマージ (GTK)| | |I:34 | | | | |----------+------+----+-----------+----------------------------| |wiggle |V:0, |174 |wiggle(1) |リジェクトされたパッチを適用| | |I:0 | | | | |----------+------+----+-----------+----------------------------| |diffutils |V:878,|1597|diff(1) |1行ごとにファイルを比較 | | |I:995 | | | | |----------+------+----+-----------+----------------------------| |diffutils |V:878,|1597|diff3(1) |1行ごとにファイルを比較やマ | | |I:995 | | |ージ | |----------+------+----+-----------+----------------------------| |quilt |V:3, |773 |quilt(1) |パッチのシリーズを管理 | | |I:26 | | | | |----------+------+----+-----------+----------------------------| |wdiff |V:8, |648 |wdiff(1) |テキストファイル間のワードの| | |I:59 | | |相違表示 | |----------+------+----+-----------+----------------------------| |diffstat |V:12, |74 |diffstat(1)|差分ファイルによる変化のヒス| | |I:127 | | |トグラム作成 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |combinediff|2つの積み重ねパッチから1つの| | |I:125 | |(1) |合計パッチを生成 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |dehtmldiff |HTML ページから差分ファイル | | |I:125 | |(1) |を抽出 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |filterdiff |差分ファイルから差分ファイル|     | |I:125 | |(1) |を抽出や削除 | |----------+------+----+-----------+----------------------------| | |V:14, | |fixcvsdiff |CVS により作成された patch | |patchutils|I:125 |232 |(1) |(1) が誤解する差分ファイルを| | | | | |修正 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |flipdiff(1)|古い2つのパッチを交換 | | |I:125 | | | | |----------+------+----+-----------+----------------------------| | |V:14, | | |正規表現にマッチするパッチに| |patchutils|I:125 |232 |grepdiff(1)|よって変更されるファイルを表| | | | | |示 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |interdiff |2つのユニファイド差分ファイ | | |I:125 | |(1) |ル間の違いを表示 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |lsdiff(1) |どのファイルがパッチによって| | |I:125 | | |変更されるかを表示 | |----------+------+----+-----------+----------------------------| | |V:14, | |recountdiff|ユニファイドコンテキスト差分| |patchutils|I:125 |232 |(1) |ファイルのカウントやオフセッ| | | | | |トを再計算 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |rediff(1) |手編集された差分ファイルのカ| | |I:125 | | |ウントやオフセットを再計算 | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |splitdiff |増分パッチの分離 | | |I:125 | |(1) | | |----------+------+----+-----------+----------------------------| |patchutils|V:14, |232 |unwrapdiff |ワードラップされたパッチを復| | |I:125 | |(1) |元 | |----------+------+----+-----------+----------------------------| |dirdiff |V:0, |167 |dirdiff(1) |ディレクトリーツリー間で相違| | |I:2 | | |点の表示と変更のマージ | |----------+------+----+-----------+----------------------------| |docdiff |V:0, |553 |docdiff(1) |2つのファイルをワード毎/文字| | |I:0 | | |毎に比較 | |----------+------+----+-----------+----------------------------| |makepatch |V:0, |100 |makepatch |拡張パッチファイルの生成 | | |I:0 | |(1) | | |----------+------+----+-----------+----------------------------| |makepatch |V:0, |100 |applypatch |拡張パッチファイルの適用 | | |I:0 | |(1) | | +---------------------------------------------------------------+ 10.4.1. ソースファイル間の相違の抽出 ふたつのソースファイル間の相違を抽出したユニファイド差分ファイル     は、以下の要領でファイル位置に対応し "file.patch0" か "file.patch1" として作成されます。     $ diff -u file.old file.new > file.patch0 $ diff -u old/file new/file > file.patch1 10.4.2. ソースファイルに更新をマージ 差分ファイル (別名、パッチファイル) はプログラム更新を送るのに使     われます。受け取った側はこの更新を別のファイルに次のようにして適 用します。     $ patch -p0 file < file.patch0 $ patch -p1 file < file.patch1 10.4.3. Interactive merge     If you have two versions of a source code, you can perform 2-way merge interactively using imediff(1) by the following.     $ imediff -o file.merged file.old file.new     If you have three versions of a source code, you can perform 3-way merge interactively using imediff(1) by the following.     $ imediff -o file.merged file.yours file.base file.theirs 10.5. Git Git is the tool of choice these days for the version control     system (VCS) since Git can do everything for both local and remote source code management.     Debian は Debian Salsa サービス経由でフリーの Git サービスを提供 します。その説明文書は https://wiki.debian.org/Salsa にあります。     Here are some Git related packages. 表10.11 git 関連のパッケージとコマンドのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | コマンド | 説明 | | | ン | ズ | | | |----------------+------+-----+----------------+----------------| | | | | |git: 高速、スケ | |git |V:322,|44424|git(7) |ーラブル、分散型| | |I:519 | | |リビジョンコント| | | | | |ロールシステム | |----------------+------+-----+----------------+----------------| | |V:5, | | |GUI による履歴付| |gitk |I:36 |1792 |gitk(1) |き Git レポジト | | | | | |リーブラウザー | |----------------+------+-----+----------------+----------------| |git-gui |V:1, |2386 |git-gui(1) |Git 用の GUI (履| | |I:20 | | |歴無し) | |----------------+------+-----+----------------+----------------| | |V:0, | |git-send-email |Git からパッチの| |git-email |I:10 |1040 |(1) |集合の email と | | | | | |して送信 | |----------------+------+-----+----------------+----------------|     | |V:1, | |git-buildpackage|Git を使って | |git-buildpackage|I:10 |7351 |(1) |Debian パッケー | | | | | |ジ化を自動化 | |----------------+------+-----+----------------+----------------| | | | | |git | |dgit |V:0, |481 |dgit(1) |interoperability| | |I:1 | | |with the Debian | | | | | |archive | |----------------+------+-----+----------------+----------------| | |V:0, | | |interactive git | |imediff |I:0 |169 |git-ime(1) |commit split | | | | | |helper tool | |----------------+------+-----+----------------+----------------| |stgit |V:0, |601 |stg(1) |Git 上の quilt | | |I:0 | | |(Python) | |----------------+------+-----+----------------+----------------| |git-doc |I:13 |12989|N/A |正式 Git 文書 | |----------------+------+-----+----------------+----------------| | | | | |"Git マジック"、| |gitmagic |I:0 |721 |N/A |Git に関する分か| | | | | |り易いガイド | +---------------------------------------------------------------+ 10.5.1. Git クライアントの設定     Git は使うあなたの名前や email アドレス等を "~/.gitconfig" 中のい くつかのグローバル設定に設定したいなら次のようにします。     $ git config --global user.name "Name Surname" $ git config --global user.email yourname@example.com     You may also customize the Git default behavior by the following. $ git config --global init.defaultBranch main     $ git config --global pull.rebase true $ git config --global push.default current     もしあなたが CVS や Subversion コマンドに慣れ過ぎている場合には、 いくつかのコマンドエイリアスを次のように設定するのも一計です。     $ git config --global alias.ci "commit -a" $ git config --global alias.co checkout     あなたのグローバル設定は次のようにするとチェックできます。     $ git config --global --list 10.5.2. Basic Git commands     Git operation involves several data. * The working tree which holds user facing files and you make changes to them. + The changes to be recorded must be explicitly selected and staged to the index. This is git add and git rm commands. * The index which holds staged files. + Staged files will be committed to the local repository upon the subsequent request. This is git commit command. * The local repository which holds committed files. + Git records the linked history of the committed data and organizes them as branches in the repository. + The local repository can send data to the remote repository by git push command.     + The local repository can receive data from the remote repository by git fetch and git pull commands. o The git pull command performs git merge or git rebase command after git fetch command. o Here, git merge combines two separate branches of history at the end to a point. (This is default of git pull without customization and may be good for upstream people who publish branch to many people.) o Here, git rebase creates one single branch of sequential history of the remote branch one followed by the local branch one. (This is pull.rebase true customization case and may be good for rest of us.) * The remote repository which holds committed files. + The communication to the remote repository uses secure communication protocols such as SSH or HTTPS. The working tree is files outside of the .git/ directory. Files     inside of the .git/ directory hold the index, the local repository data, and some git configuration text files.     Here is an overview of main Git commands. 表10.12 Main Git commands +---------------------------------------------------------------+ | Git command | 機能 | |---------------+-----------------------------------------------| |git init |(ローカル) レポジトリーを作成 | |---------------+-----------------------------------------------| |git clone URL |clone the remote repository to a local | | |repository with the working tree | |---------------+-----------------------------------------------| |git pull origin|update the local main branch by the remote | |main |repository origin | |---------------+-----------------------------------------------| |git add . |add file(s) in the working tree to the index | | |for pre-existing files in index only | |---------------+-----------------------------------------------| |git add -A . |add file(s) in the working tree to the index | | |for all files including removals | |---------------+-----------------------------------------------| |git rm filename|remove file(s) from the working tree and the | | |index | |---------------+-----------------------------------------------|     |git commit |commit staged changes in the index to the local| | |repository | |---------------+-----------------------------------------------| | |add all changes in the working tree to the | |git commit -a |index and commit them to the local repository | | |(add + commit) | |---------------+-----------------------------------------------| |git push -u |update the remote repository origin by the | |origin |local branch_name branch (initial invocation) | |branch_name | | |---------------+-----------------------------------------------| |git push origin|update the remote repository origin by the | |branch_name |local branch_name branch (subsequent | | |invocation) | |---------------+-----------------------------------------------| |git diff |show difference between treeish1 commit and | |treeish1 |treeish2 commit | |treeish2 | | |---------------+-----------------------------------------------| |gitk |GUI display of VCS repository branch history | | |tree | +---------------------------------------------------------------+ 10.5.3. Git tips     Here are some Git tips. 表10.13 Git tips +---------------------------------------------------------------+ | Git command line | 機能 | |------------------------+--------------------------------------| | |see complete Git history and operate | | |on them such as resetting HEAD to | |gitk --all |another commit, cheery-picking | | |patches, creating tags and branches | | |... | |------------------------+--------------------------------------| |git stash |get the clean working tree without | | |loosing data | |------------------------+--------------------------------------| |git remote -v |check settings for remote | |------------------------+--------------------------------------| |git branch -vv |check settings for branch | |------------------------+--------------------------------------| |git status |show working tree status | |------------------------+--------------------------------------| |git config -l |list git settings | |------------------------+--------------------------------------| |git reset --hard HEAD; |revert all working tree changes and | |git clean -x -d -f |clean them up completely | |------------------------+--------------------------------------| |git rm --cached filename|revert staged index changed by git add| | |filename | |------------------------+--------------------------------------| | |get reference log (useful for | |git reflog |recovering commits from the removed | | |branch) | |------------------------+--------------------------------------| |git branch |create a new branch from reflog | |new_branch_name HEAD@{6}|information | |------------------------+--------------------------------------| |git remote add |add a new_remote remote repository | |new_remote URL |pointed by URL | |------------------------+--------------------------------------| |git remote rename origin|rename the remote repository name from| |upstream |origin to upstream | |------------------------+--------------------------------------| |git branch -u upstream/ |set the remote tracking to the remote | |branch_name |repository upstream and its branch | | |name branch_name. | |------------------------+--------------------------------------| |git remote set-url | | |origin https://foo/ |change URL of origin | |bar.git | |     |------------------------+--------------------------------------| |git remote set-url |disable push to upstream (Edit .git/ | |--push upstream DISABLED|config to re-enable) | |------------------------+--------------------------------------| |git checkout -b |make a new topic_branch and push it to| |topic_branch ; git push |origin | |-u topic_branch origin | | |------------------------+--------------------------------------| |git branch -m oldname |rename local branch name | |newname | | |------------------------+--------------------------------------| |git push -d origin |remove remote branch (new method) | |branch_to_be_removed | | |------------------------+--------------------------------------| |git push origin |remove remote branch (old method) | |:branch_to_be_removed | | |------------------------+--------------------------------------| |git checkout --orphan |create a new unconnected branch | |unconnected | | |------------------------+--------------------------------------| |git fetch upstream |create a local (possibly orphan) | |foo:upstream-foo |upstream-foo branch as a copy of foo | | |branch the upstream repository | |------------------------+--------------------------------------| |git rebase -i origin/ |reorder/drop/squish commits from | |main |origin/main to clean branch history | |------------------------+--------------------------------------| |git reset HEAD^; git |squash last 2 commits into one | |commit --amend | | |------------------------+--------------------------------------| |git checkout |squash entire topic_branch into a | |topic_branch ; git merge|commit | |--squash topic_branch | | |------------------------+--------------------------------------| |git fetch --unshallow | | |--update-head-ok origin |convert a shallow clone to the full | |'+refs/heads/*:refs/ |clone of all branches | |heads/*' | | |------------------------+--------------------------------------| | |split the last commit into a series of| |git ime |file-by-file smaller commits etc. | | |(imediff package required) | |------------------------+--------------------------------------| | |repack the local repository into | |git repack -a -d; git |single pack (this may limit chance of | |prune |lost data recovery from erased branch | | |etc.) | +---------------------------------------------------------------+ 警告     たとえ gitk(1) 等の一部ツールが受け付けるからといって、タグ文字列 中にスペースを使ってはいけません。他の git コマンドで支障が起こる かもしれません。 注意 If a local branch which has been pushed to remote repository is     rebased or squashed, pushing this branch has risks and requires --force option. This is usually not an acceptable for main branch but may be acceptable for a topic branch before merging to main branch. 注意     git サブコマンドを直接 "git-xyz" としてコマンドラインから起動する のは2006年初以来推奨されません。 ヒント     If there is a executable file git-foo in the path specified by $PATH, entering "git foo" without hyphen to the command line invokes this git-foo. This is a feature of the git command. 10.5.4. Git リファレンス     次を参照下さい。 * マンページ: git(1) (/usr/share/doc/git-doc/git.html) * Git ユーザーマニュアル (/usr/share/doc/git-doc/ user-manual.html) * git へのチュートリアル導入 (/usr/share/doc/git-doc/ gittutorial.html)     * git へのチュートリアル導入: 第2部 (/usr/share/doc/git-doc/ gittutorial-2.html) * Everyday GIT With 20 Commands Or So (/usr/share/doc/git-doc/ giteveryday.html) * Git マジック (/usr/share/doc/gitmagic/html/index.html) 10.5.5. Other version control systems The version control systems (VCS) is sometimes known as the     revision control system (RCS), or the software configuration management (SCM).     Here is a summary of the notable other non-Git VCS on the Debian system. 表10.14 List of other version control system tools +---------------------------------------------------------------+ | |ポプ |サイ | |VCS | | |パッケージ|コン | ズ | ツール |タイ| コメント | | | | | | プ | | |----------+-----+-----+----------+----+------------------------| |mercurial |V:5, |2013 |Mercurial |分散|Python と一部 C で書かれ| | |I:37 | | |型 |た DVCS | |----------+-----+-----+----------+----+------------------------| |darcs |V:0, |34070|Darcs |分散|パッチに関して賢い計算を| | |I:7 | | |型 |する DVCS (遅い) | |----------+-----+-----+----------+----+------------------------| | | | | |分散|DVCS influenced by tla | |bzr |I:11 |28 |Bazaar |型 |written in Python | | | | | | |(historic) | |----------+-----+-----+----------+----+------------------------| |tla |V:0, |1022 |GNU arch |分散|DVCS mainly by Tom Lord |     | |I:1 | | |型 |(historic) | |----------+-----+-----+----------+----+------------------------| | |V:15,| | |リモ|"CVS done right", newer | |subversion|I:86 |4838 |Subversion|ート|standard remote VCS | | | | | | |(historic) | |----------+-----+-----+----------+----+------------------------| |cvs |V:4, |4620 |CVS |リモ|previous standard remote| | |I:33 | | |ート|VCS (historic) | |----------+-----+-----+----------+----+------------------------| | |V:0, | | |リモ|VCS (CVS, Subversion, | |tkcvs |I:1 |1498 |CVS, … |ート|RCS) レポジトリーツリー | | | | | | |の GUI 表示 | |----------+-----+-----+----------+----+------------------------| |rcs |V:2, |564 |RCS |ロー|"Unix SCCS done right" | | |I:16 | | |カル|(historic) | |----------+-----+-----+----------+----+------------------------| |cssc |V:0, |2044 |CSSC |ロー|clone of the Unix SCCS | | |I:2 | | |カル|(historic) | +---------------------------------------------------------------+ --------------------------------------------------------------------- ^[4] A write-once media such as CD/DVD-R can prevent overwrite accidents. (See 「バイナリーデーター」 for how to write to the     storage media from the shell commandline. GNOME desktop GUI environment gives you easy access via menu: "Places→CD/DVD Creator".)     ^[5] Some of these data can not be regenerated by entering the same input string to the system.     ^[6] If you use "~/.vimrc" instead of "~/.vim/vimrc", please substitute accordingly. 第11章データー変換     Debian システム上のデーターフォーマット変換のツールとティップを記 します。     標準に準拠したツールは非常に良い状態ですが、プロプライエタリデー ターフォーマットのサポートは限定的です。 11.1. テキストデーター変換ツール     テキストデーター変換のための次のパッケージが著者の目に止まりまし た。 表11.1 テキストデーター変換ツールのリスト +---------------------------------------------------------------+ |パッケー|ポプコ|サイ |キーワー | 説明 | | ジ | ン | ズ | ド | | |--------+------+-----+---------+-------------------------------| | |V:930,| |文字セッ |iconv(1) によるロケール間のテキ| |libc6 |I:999 |12977|ト |スト符号化方式変換ソフト (基本 | | | | | |的) | |--------+------+-----+---------+-------------------------------| | |V:3, | |文字セッ |ロケール間のテキスト符号化方式 | |recode |I:22 |603 |ト + 行末|変換ソフト (機能豊富、より多い | | | | |文字 |エイリアスと機能) | |--------+------+-----+---------+-------------------------------| |konwert |V:1, |134 |文字セッ |ロケール間のテキスト符号化方式 | | |I:50 | |ト |変換ソフト (高級機能) | |--------+------+-----+---------+-------------------------------|     |nkf |V:0, |360 |文字セッ |日本語のための文字セット翻訳ソ | | |I:10 | |ト |フト | |--------+------+-----+---------+-------------------------------| |tcs |V:0, |518 |文字セッ |文字セット翻訳ソフト | | |I:0 | |ト | | |--------+------+-----+---------+-------------------------------| |unaccent|V:0, |35 |文字セッ |アクセント付き文字をアクセント | | |I:0 | |ト |の無しの等価文字に置換 | |--------+------+-----+---------+-------------------------------| | |V:1, | | |DOS と Unix 間のテキストフォー | |tofrodos|I:21 |55 |行末文字 |マット変換ソフト: fromdos(1) と| | | | | |todos(1) | |--------+------+-----+---------+-------------------------------| | |V:0, | | |Macintosh と Unix 間のテキスト | |macutils|I:0 |312 |行末文字 |フォーマット変換ソフト: frommac| | | | | |(1) and tomac(1) | +---------------------------------------------------------------+ 11.1.1. テキストファイルを iconv を使って変換 ヒント     iconv(1) はlibc6 パッケージの一部として提供されていて、文字の符号 化方式変換のために実質的に全てのUnix的システムで常に利用可能です 。     次のようにするとテキストファイルを iconv(1) を使って変換できます 。     $ iconv -f encoding1 -t encoding2 input.txt >output.txt 符号化方式 (エンコーディング) 値をマッチングする際には、大文字小     文字の区別は無く、"-" や "_" を無視します。"iconv -l" コマンドに より、サポートされている符号化方法が確認できます。 表11.2 符号化方式値とその使い方リスト +---------------------------------------------------------------+ |符号化方式 | 使い方 | | 値 | | |-----------+---------------------------------------------------| |ASCII |情報交換用米国標準コード (ASCII); アクセント文字無 | | |しの7ビットコード | |-----------+---------------------------------------------------| |UTF-8 |全現代的 OS のための現行多言語標準 | |-----------+---------------------------------------------------| |ISO-8859-1 |西欧州言語用の旧標準、ASCII + アクセント文字 | |-----------+---------------------------------------------------| |ISO-8859-2 |東欧州言語用の旧標準、ASCII + アクセント文字 | |-----------+---------------------------------------------------| |ISO-8859-15|西欧州言語用の旧標準、ユーロ文字付き ISO-8859-1 | |-----------+---------------------------------------------------| |CP850 |コードページ 850、西欧州言語用グラフィック文字付き | | |Microsoft DOS 文字、ISO-8859-1 の変種 | |-----------+---------------------------------------------------| |CP932 |コードページ 932、日本語用 Microsoft Windows スタイ| | |ル Shift-JIS の変種 | |-----------+---------------------------------------------------| |CP936 |コードページ 936、簡体中国語用 Microsoft Windows ス|     | |タイル GB2312 か GBK か GB18030 の変種 | |-----------+---------------------------------------------------| |CP949 |コードページ 949、韓国語用 Microsoft Windows スタイ| | |ル EUC-KR か統一ハングルコードの変種 | |-----------+---------------------------------------------------| |CP950 |コードページ 950、繁体中国語用 Microsoft Windows ス| | |タイル Big5 の変種 | |-----------+---------------------------------------------------| |CP1251 |コードページ 1251、キリル文字用 Microsoft Windows | | |スタイル符号化方式 | |-----------+---------------------------------------------------| |CP1252 |コードページ 1252、西欧州言語用 Microsoft Windows | | |スタイル ISO-8859-15 の変種 | |-----------+---------------------------------------------------| |KOI8-R |キリル文字用の旧ロシアの UNIX 標準 | |-----------+---------------------------------------------------| |ISO-2022-JP|7ビットコードのみを用いる日本語 email の標準符号化 | | |方式 | |-----------+---------------------------------------------------| |eucJP |Shift-JIS とはまったく違う、旧日本の UNIX 標準8ビッ| | |トコード | |-----------+---------------------------------------------------| |Shift-JIS |日本語のための JIS X 0208 Appendix 1 標準 (CP932 参| | |照下さい) | +---------------------------------------------------------------+ 注記     Some encodings are only supported for the data conversion and are not used as locale values (「ロケール」). ASCII や ISO-8859 文字セットのような1バイトに収まる文字セットに付     いては、文字の符号化方式 (エンコーディング) とは文字セットとほと んど同じ事を意味します。 日本語のための JIS X 0213 や実質的に全ての言語のためのユニコード     文字セット (UCS, Unicode, ISO-10646-1) のような多くの文字を含む文 字セットの場合には、バイトデーター列に落とし込む多くの符号化手法 があります。 * 日本語用には、EUC と ISO/IEC 2022 (別名 JIS X 0202)     * ユニコード用には、UTF-8 と UTF-16/UCS-2 と UTF-32/UCS-4     これらに関しては、文字セットと文字符号化方式の間にはっきりとした 区別があります。     コードページは、一部のベンダー固有のコードページで文字符号化テー ブルと同義語として使用されています。 注記 ほとんどの符号化システムが7ビット文字に関して ASCII と同じコード を共有している事を覚えておいて下さい。もちろん例外はありますが。     もし古い日本語の C プログラムや URL のデーターをカジュアルにシフ ト JIS と呼ばれている符号化フォーマットから UTF-8 フォーマットに 変換する際には、期待される結果を得るために "shift-JIS" ではなく "CP932" を使いましょう: 0x5C → "\" と 0x7E → "~"。こうしないと、 これらが間違った文字に変換されます。 ヒント     recode(1) は、十分使えますし、iconv(1) と fromdos(1) と todos(1) と frommac(1) と tomac(1) を組み合わせ以上の機能を提供します。詳 しくは "info recode" を参照下さい。 11.1.2. ファイルが UTF-8 であると iconv を使い確認     次のようにするとテキストファイルが UTF-8 でエンコードされていると iconv(1) を使って確認できます。     $ iconv -f utf8 -t utf8 input.txt >/dev/null || echo "non-UTF-8 found" ヒント     最初の非 UTF-8 文字を見つけるには上記例中で "--verbose" オプショ ンを使います。 11.1.3. iconv を使ってファイル名変換 次に、単一ディレクトリー中の旧 OS 下で作成されたファイル名から現     代的な UTF-8 のファイル名に符号化方式を変換するスクリプト例を示し ます。 #!/bin/sh ENCDN=iso-8859-1     for x in *; do mv "$x" "$(echo "$x" | iconv -f $ENCDN -t utf-8)" done "$ENCDN" 変数値には、旧OS下で用いられたファイル名に用いられた元と     なる表11.2「符号化方式値とその使い方リスト」中にあるエンコーディ ングを指定します。 もっと複雑な場合にはそのようなファイル名を含有するファイルシステ ム (ディスクドライブ上のパーティション等) を mount(8) オプション     に適正な符号化方式 (エンコーディング) (「ファイル名の符号化方式」 参照下さい) を指定してマウントし、その全内容を他の UTF-8 でマウン トされたファイルシステムに "cp -a" コマンドを使ってコピーします。 11.1.4. 行末変換     テキストファイルのフォーマット、特に行末 (EOL) コード、はプラット フォーム依存です。 表11.3 異なるプラットフォーム上での行末スタイルのリスト +--------------------------------------------------------+ | プラットフォーム |行末コード|コントロール|10進数|16進数| |------------------+----------+------------+------+------|     |Debian (unix) |LF |^J |10 |0A | |------------------+----------+------------+------+------| |MSDOS と Windows |CR-LF |^M^J |13 10 |0D 0A | |------------------+----------+------------+------+------| |Apple の Macintosh|CR |^M |13 |0D | +--------------------------------------------------------+ 行末 (EOL) フォーマット変換プログラムに関して、fromdos(1) と     todos(1) と frommac(1) と tomac(1) は非常に便利です。recode(1) も また役に立ちます。 注記     python-moinmoin パッケージ用の wiki のデーター等の Debian システ ム上の一部データーは、MSDOS スタイルの CR-LF を行末コードとして用 います。あくまで上記は一般則と言うだけです。 注記     ほとんどのエディター (例えば vim や emacs や gedit 等) は MSDOS スタイルの行末を透過的に取り扱えます。 ヒント MSDOS と Unix スタイルが混在する行末スタイルを MSDOS スタイルに統     一するには、todos(1) を使う代わりに "sed -e '/\r$/!s/$/\r/'" を使 う方がより好ましいです。(例えば、2つの MSDOS スタイルファイルを diff3(1) を使ってマージした後。) todos は全ての行に CR を追加する というのがこの理由です。 11.1.5. タブ変換     タブコードを変換するための良く使われる専用プログラムがいくつかあ ります。 表11.4 bsdmainutils と coreutils パッケージ中のタブ変換コマンドの リスト +---------------------------------------------------+ | 機能 |bsdmainutils|coreutils|     |----------------------------+------------+---------| |タブからスペースに展開する |"col -x" |expand | |----------------------------+------------+---------| |スペースからタブに逆展開する|"col -h" |unexpand | +---------------------------------------------------+     indent パッケージにある indent(1) コマンドは C プログラム中のホワ イトスペースを完全にリフォーマットします。 vim や emacs 等のエディタープログラムもまたタブ変換に使えます。例     えば vim を使うと、":set expandtab" として ":%retab" するコマンド シーケンスでタブ変換が出来ます。これを元に戻すのは、":set noexpandtab" として ":%retab!" とするコマンドシーケンスです。 11.1.6. 自動変換付きエディター vim プログラムなどのインテリジェントな現代的なエディターは大変良     く出来ていていかなる符号化方式やいかなるファイルフォーマットでも 機能します。これらのエディターを UTF-8 ロケール下で UTF-8 を扱え るコンソール中で使用することで最良の互換性が得られます。 latin1 (iso-8859-1) 符号化方式で保存された古い西欧州の Unix テキ     ストファイル "u-file.txt" は、単純に vim を使って次のようにして編 集出来ます。     $ vim u-file.txt     vim 中の符号化方式自動判定機構が、最初は UTF-8 符号化方式を仮定し 、それが上手く行かなかった際に latin1 を仮定するから可能です。 latin2 (iso-8859-2) 符号化方式で保存された古いポーランドの Unix     テキストファイル "pu-file.txt" は、vim を使って次のようにして編集 出来ます。     $ vim '+e ++enc=latin2 pu-file.txt'     eucJP 符号化方式で保存された古い日本の Unix テキストファイル "ju-file.txt" は、vim を使って次のようにして編集出来ます。     $ vim '+e ++enc=eucJP ju-file.txt' shift-JIS 符号化方式 (より正確には: CP932) で保存された古い日本の     MS-Windows テキストファイル "jw-file.txt" は、vim を使って次のよ うにして編集出来ます。     $ vim '+e ++enc=CP932 ++ff=dos jw-file.txt' "++enc" や "++ff" オプションを使ってファイルが開かれた時は、Vim コマンドライン中の ":w" がオリジナルのファイルフォーマットでオリ     ジナルのファイルを上書きします。例えば ":w ++enc=utf8 new.txt" 等 と Vim コマンドライン中で保存フォーマットや保存ファイル名を指定す ることも出来ます。 vim オンラインヘルプ中の mbyte.txt "multi-byte text support" と、     "++enc" に使われるロケール値に関する表11.2「符号化方式値とその使 い方リスト」を参照下さい。     emacs ファミリーのプログラムもまた同様の機能の実行ができます。 11.1.7. プレーンテキスト抽出 以下はウェッブページを読みテキストファイルに落とします。ウェッブ     から設定を取ってくる時や grep(1) 等の基本的な Unix テキストツール をウェッブページに適用するときに非常に有用です。     $ w3m -dump http://www.remote-site.com/help-info.html >textfile     同様に、次を用いることで他のフォーマットからプレーンテキストデー ターを抽出出来ます。 表11.5 プレーンテキストデーター抽出ツールのリスト +---------------------------------------------------------------+ |パッケー |ポプ |サイ| キーワード | 機能 | | ジ |コン | ズ | | | |---------+-----+----+---------------+--------------------------| | |V:15,| | |"w3m -dump" コマンドを使う| |w3m |I:191|2828|html→text |HTML からテキストへの変換 | | | | | |ソフト | |---------+-----+----+---------------+--------------------------| |html2text|V:2, |274 |html→text |先進的 HTML からテキストへ| | |I:29 | | |の変換ソフト (ISO 8859-1) | |---------+-----+----+---------------+--------------------------| | |V:12,| | |"lynx -dump" コマンドを使 | |lynx |I:124|1935|html→text |う HTML からテキストへの変| | | | | |換ソフト | |---------+-----+----+---------------+--------------------------| | |V:3, | | |"elinks -dump" コマンドを | |elinks |I:24 |1742|html→text |使う HTML からテキストへの| | | | | |変換ソフト | |---------+-----+----+---------------+--------------------------| | |V:3, | | |"links -dump" コマンドを使|     |links |I:33 |2302|html→text |う HTML からテキストへの変| | | | | |換ソフト | |---------+-----+----+---------------+--------------------------| | |V:1, | | |"links2 -dump" コマンドを | |links2 |I:12 |5479|html→text |使う HTML からテキストへの| | | | | |変換ソフト | |---------+-----+----+---------------+--------------------------| |catdoc |V:12,|686 |MSWord→text,TeX|MSWord ファイルをプレーン | | |I:125| | |テキストか TeX に変換 | |---------+-----+----+---------------+--------------------------| |antiword |V:1, |589 |MSWord→text,ps |MSWord ファイルをプレーン | | |I:8 | | |テキストか ps に変換 | |---------+-----+----+---------------+--------------------------| |pstotext |V:0, |122 |ps/pdf→text |PostScript と PDF ファイル| | |I:1 | | |からテキストを抽出 | |---------+-----+----+---------------+--------------------------| |unhtml |V:0, |40 |html→text |HTML ファイルからマークア | | |I:0 | | |ップタグを削除 | |---------+-----+----+---------------+--------------------------| |odt2txt |V:1, |60 |odt→text |OpenDocument テキストから | | |I:12 | | |テキストへの変換ソフト | +---------------------------------------------------------------+ 11.1.8. プレーンテキストデーターをハイライトとフォーマット     次のようにしてプレーンテキストデーターをハイライトとフォーマット 出来ます。 表11.6 プレーンテキストデーターをハイライトするツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプ |サイズ|キーワード| 説明 | | |コン | | | | |----------------+-----+------+----------+----------------------| | | | | |":source $VIMRUNTIME/ | | |V:19,| | |syntax/html.vim" を使 | |vim-runtime |I:423|36201 |ハイライト|ってソースコードを | | | | | |HTML に変換するための | | | | | |Vim MACRO | |----------------+-----+------+----------+----------------------| | |V:0, | | |C プログラムから latex| |cxref |I:0 |1190 |c→html |か HTML への変換ソフト| | | | | |(C 言語) | |----------------+-----+------+----------+----------------------| | |V:0, | | |多くのソースコードの | |src2tex |I:0 |622 |ハイライト|TeX への変換ソフト (C | | | | | |言語) | |----------------+-----+------+----------+----------------------| | | | | |多くのソースコードを | | | | | |HTML と XHTML と LaTeX| |source-highlight|V:0, |1989 |ハイライト|と Texinfo と ANSI カ | | |I:6 | | |ラーエスケープシーケン| | | | | |スと DocBook にハイラ | | | | | |イト付きで変換 (C++) | |----------------+-----+------+----------+----------------------| | | | | |多くのソースコードを | | |V:0, | | |HTML と XHTML と LaTeX| |highlight |I:7 |1084 |ハイライト|と Tex と AXSL-FO にハ|     | | | | |イライト付きで変換 | | | | | |(C++) | |----------------+-----+------+----------+----------------------| |grc |V:0, |208 |text→color|汎用着色化ソフト | | |I:4 | | |(Python) | |----------------+-----+------+----------+----------------------| |pandoc |V:9, |168398|text→any |汎用マークアップコンバ| | |I:45 | | |ーター (Haskel) | |----------------+-----+------+----------+----------------------| | | | | |ReStructured テキスト | |python3-docutils|V:13,|1777 |text→any |文書の XML へのフォー | | |I:49 | | |マット化ソフト | | | | | |(Python) | |----------------+-----+------+----------+----------------------| | |V:0, | | |Markdown text document| |markdown |I:10 |58 |text→html |formatter to (X)HTML | | | | | |(Perl) | |----------------+-----+------+----------+----------------------| | |V:0, | | |AsciiDoc text document| |asciidoctor |I:8 |97 |text→any |formatter to XML/HTML | | | | | |(Ruby) | |----------------+-----+------+----------+----------------------| | | | | |ReStructured Text | |python3-sphinx |V:5, |2791 |text→any |based document | | |I:22 | | |publication system | | | | | |(Python) | |----------------+-----+------+----------+----------------------| | |V:0, | | |Markdown based static | |hugo |I:5 |51718 |text→html |site publication | | | | | |system (Go) | +---------------------------------------------------------------+ 11.2. XML データー     Extensible Markup Language (XML) は構造化情報を含む文書のためのマ ークアップ言語です。     XML.COM にある入門情報を参照下さい。 * "What is XML?" * "What Is XSLT?"     * "What Is XSL-FO?" * "What Is XLink?" 11.2.1. XML に関する基本ヒント XML テキストはちょっと HTML のようにも見えます。これを使うと一つ     の文書から複数のフォーマットのアウトプット管理できるようになりま す。簡単な XML システムの一つはここで使っている docbook-xsl パッ ケージです。     各 XML ファイルは次のような標準的な XML 宣言でスタートします。         XML 要素の基本的シンタックスは次のようにマークアップされます。     content     空の XML 要素は次の短縮形を使ってマークアップされます。         上記例中の "attribute="value"" はオプションです。     XML 中のコメントセクションは次のようにマークアップされます。         マークアップを追加する以外に、XML は次の文字に関して事前定義され たエンティティを使い内容を少し改変する必要があります。 表11.7 XML で事前定義されているエントリーのリスト +---------------------------------------------+ |事前定義されたエンティティ| 変換先の文字 | |--------------------------+------------------| |" |" : 引用符 | |--------------------------+------------------|     |' |' : アポストロフィ| |--------------------------+------------------| |< |< : 以下 | |--------------------------+------------------| |> |> : 以上 | |--------------------------+------------------| |& |& : アンパサンド | +---------------------------------------------+ 注意     "<" と "&" はアトリビュートやエレメントには使えません。 注記     When SGML style user defined entities, e.g. "&some-tag;", are used, the first definition wins over others. The entity definition is expressed in "". 注記     XML のマークアップがタグ名の何らかの組み合わせで (あるデーターを 内容としてであれアトリビュート値としてであれ) 整合性を持ってされ ている限り、他の XML の変換は拡張可能スタイルシート言語変換 (XSLT) を使うととっても簡単な作業です。 11.2.2. XML 処理     拡張可能スタイルシート言語 (XSL) のような XML ファイルを処理に利 用可能なツールは沢山あります。 基本的に、良くできた XML ファイルを一度作ると、いかなるフォーマッ     トへも拡張可能なスタイルシート言語変換 (XSLT) を使って変換できま す。 フォーマットオブジェクト用拡張可能スタイルシート言語 (XSL-FO) が フォーマットのための答えとなるはずです。fop パッケージは Java プ     ログラム言語に依存するため Debian の main アーカイブでは新規です 。このため、 LaTeX コードが XML から XSLT を使って通常作成され、 DVI や PostScript や PDF 等のプリンタブルなファイルが LaTeX シス テムを使って作成されます。 表11.8 XML ツールのリスト +---------------------------------------------------------------+ |パッケージ |ポプ |サイ |キーワ| 説明 | | |コン | ズ | ード | | |-----------+-----+-----+------+--------------------------------| |docbook-xml|I:361|2134 |xml |DocBook 用 XML ドキュメントタイ | | | | | |プ定義 (DTD) | |-----------+-----+-----+------+--------------------------------| | |V:9, | |xml/ |DocBook XML を XSLT を使って各種| |docbook-xsl|I:137|14870|xslt |アウトプットへ処理する XSL スタ | | | | | |イルシート | |-----------+-----+-----+------+--------------------------------| | |V:16,| | |XSLT コマンドラインプロセスソフ |     |xsltproc |I:87 |162 |xslt |ト (XML→ XML, HTML, plain text, | | | | | |他) | |-----------+-----+-----+------+--------------------------------| |xmlto |V:1, |130 |xml/ |XSLT を用いて XML から全てへの変| | |I:18 | |xslt |換ソフト | |-----------+-----+-----+------+--------------------------------| |fop |V:0, |285 |xml/ |Docbook XML ファイルを PDF に変 | | |I:16 | |xsl-fo|換 | |-----------+-----+-----+------+--------------------------------| |dblatex |V:3, |4643 |xml/ |XSLT を使って Docbook ファイルを| | |I:12 | |xslt |DVI, PostScript, PDF 文書へ変換 | |-----------+-----+-----+------+--------------------------------| |dbtoepub |V:0, |37 |xml/ |DocBook XML から .epub へのコン | | |I:0 | |xslt |バーター | +---------------------------------------------------------------+ XML は標準一般化マークアップ言語 (SGML) のサブセットなので、ドキ     ュメントスタイル構文規程言語 (DSSSL) 等の SGML 用として利用可能な 広範なツールで処理できます。 表11.9 DSSLツールのリスト +---------------------------------------------------------------+ | |ポプ|サイ|キー | | | パッケージ |コン| ズ |ワー | 説明 | | | | | ド | | |-------------+----+----+-----+---------------------------------| |openjade |V:1,|1019|dsssl|ISO/IEC 10179: 1996 標準 DSSSL プ| | |I:31| | |ロセッサ (最新版) | |-------------+----+----+-----+---------------------------------| | |V:0,| |xml/ |DocBook XML を各種出力フォーマッ |     |docbook-dsssl|I:16|2605|dsssl|トに DSSSL を使って処理するための| | | | | |DSSSL スタイルシート | |-------------+----+----+-----+---------------------------------| | | | | |docbook2* コマンドで DSSSL を使っ| |docbook-utils|V:0,|287 |xml/ |て DocBook ファイルを他のフォーマ| | |I:12| |dsssl|ットに (HTML, RTF, PS, man, PDF) | | | | | |変換するなどのユーティリティー | |-------------+----+----+-----+---------------------------------| |sgml2x |V:0,|90 |SGML/|DSSSL スタイルシートを使う SGML | | |I:0 | |dsssl|や XML からの変換ソフト | +---------------------------------------------------------------+ ヒント     GNOME の yelp は DocBook XML ファイルを X 上に体裁良く表示するの で時々便利です。 11.2.3. XML データー抽出     他のフォーマットから以下を使うと HTML とか XML のデーターを抽出出 来ます。 表11.10 テキストデーター変換ツールのリスト +---------------------------------------------------------------+ |パッケー |ポプ|サイ| キーワード | 説明 | | ジ |コン| ズ | | | |---------+----+----+---------------+---------------------------| |man2html |V:0,|138 |manpage→html |manpage から HTML への変換 | | |I:2 | | |ソフト (CGI サポート) | |---------+----+----+---------------+---------------------------| |doclifter|V:0,|451 |troff→xml |troff から DocBook XML への| | |I:0 | | |変換ソフト | |---------+----+----+---------------+---------------------------| |texi2html|V:0,|1833|texi→html |Texinfo から HTML への変換 | | |I:6 | | |ソフト | |---------+----+----+---------------+---------------------------| |info2www |V:1,|76 |info→html |GNU info から HTML への変換|     | |I:2 | | |ソフト (CGI サポート) | |---------+----+----+---------------+---------------------------| |wv |V:0,|741 |MSWord→any |Microsoft Word から HTML や| | |I:5 | | |LaTeX 等への文書変換ソフト | |---------+----+----+---------------+---------------------------| |unrtf |V:0,|148 |rtf→html |RTF から HTML 等への文書変 | | |I:3 | | |換ソフト | |---------+----+----+---------------+---------------------------| |ooo2dbk |V:0,|217 |sxw→xml |OpenOffice.org SXW 文書から| | |I:0 | | |DocBook XML への変換ソフト | |---------+----+----+---------------+---------------------------| | | | | |WordPerfect 5.0 と 5.1 ファ| |wp2x |V:0,|202 |WordPerfect→any|イルから TeX と LaTeX と | | |I:0 | | |troff と GML と HTML への変| | | | | |換ソフト | +---------------------------------------------------------------+ 11.2.4. The XML data lint     非 XML の HTML ファイルの場合は、これらを整合性ある XML である XHTML に変換できます。XHTML は XML ツールで処理できます。     Syntax of XML files and goodness of URLs found in them may be checked. 表11.11 XML整形印刷ツールのリスト +---------------------------------------------------------------+ | |ポプ |サ | | | | パッケージ |コン |イ | 機能 | 説明 | | | |ズ | | | |-------------+-----+---+--------------+------------------------| | | | | |xmllint(1) (シンタクスチ| |libxml2-utils|V:18,|180|xml↔html↔xhtml|ェック、リフォーマット、| | |I:210| | |整形、他) を含むコマンド| | | | | |ライン XML ツール |     |-------------+-----+---+--------------+------------------------| | |V:1, | | |HTML シンタックスチェッ | |tidy |I:11 |84 |xml↔html↔xhtml|クソフトとリフォーマット| | | | | |ソフト | |-------------+-----+---+--------------+------------------------| |weblint-perl |V:0, |32 |lint |HTML 用のシンタックス最 | | |I:1 | | |小限の文体チェックソフト| |-------------+-----+---+--------------+------------------------| | |V:0, | | |高速リンクチェックソフト| |linklint |I:0 |344|link check |とウェッブサイトメンテツ| | | | | |ール | +---------------------------------------------------------------+     一度適正な XML が生成されれば、XSLT 技術を使ってマークアップコン テキスト等に基づいてデーターを抽出出来ます。 11.3. タイプセッティング     Unix のtroff プログラムは最初 AT&T で開発されました。それはマンペ ージを作成するのに通常使われます。 Donald Knuth 氏によって作成された TeX は非常に強力な組版ツールで     デファクト標準です。最初 Leslie Lamport 氏によって書かれた LaTeX は TeX の力への高レベルアクセスを可能にします。 表11.12 タイプ設定ツールのリスト +--------------------------------------------------------------+ |パッケ |ポプコ |サイ |キーワ | 説明 | | ージ | ン | ズ | ード | | |-------+-------+-----+-------+--------------------------------|     |texlive|V:4, |56 |(La)TeX|組版、校正、印刷のための TeX シ | | |I:41 | | |ステム | |-------+-------+-----+-------+--------------------------------| |groff |V:2, |10557|troff |GNU troff テキストフォーマティン| | |I:48 | | |グシステム | +--------------------------------------------------------------+ 11.3.1. roff タイプセッティング 伝統的には、roff が主な Unix テキスト処理システムです。roff(7) と     groff(7) と groff(1) と grotty(1) と troff(1) と groff_mdoc(7) と groff_man(7) と groff_ms(7) と groff_me(7) と groff_mm(7) と "info groff" を参照下さい。     groff パッケージをインストールすると "/usr/share/doc/groff/" 中に "-me"マクロに関する良い入門書や参考書が読めます。 ヒント     "groff -Tascii -me -" はANSI エスケープコードを含むプレーンテキス トを生成します。もしマンページのような多くの "^H" や "_" を含む出 力が欲しい場合には、この代わりに "GROFF_NO_SGR=1 groff -Tascii -me -" を使います。 ヒント     groff が生成した "^H" や "_" をテキストから削除するには、それを "col -b -x" でフィルターします。 11.3.2. TeX/LaTeX TeX Live ソフトウエアーディストリビューションは完全な TeX システ     ムを提供します。texlive メタパッケージは、ほとんどの一般的タスク に十分な TeX Live パッケージのまともな選択を提供します。     TeX と LaTeX に関する多くの参考書が利用可能です。 * The teTeX HOWTO: The Linux-teTeX Local Guide * tex(1) * latex(1) * texdoc(1)     * texdoctk(1) * "The TeXbook"、Donald E. Knuth 著 (Addison-Wesley) * "LaTeX - A Document Preparation System"、Leslie Lamport 著 (Addison-Wesley) * "The LaTeX Companion"、Goossens と Mittelbach と Samarin 著 (Addison-Wesley) これはもっとも強力な組版環境です。多くの SGML 処理ソフトはこれを バックエンドのテキスト処理ソフトとしています。多くの人が Emacs や     Vim をソースのエディターとして使う一方、lyx パッケージが提供する Lyx と texmacs パッケージが提供する GNU TeXmacs は洒落た LaTeX の WYSIWYG 編集環境を提供します。     多くのオンラインリソースが利用可能です。 * TEX Live ガイド - TEX Live 2007 ("/usr/share/doc/ texlive-doc-base/english/texlive-en/live.html") (texlive-doc-base パッケージ)     * A Simple Guide to Latex/Lyx * Word Processing Using LaTeX * Local User Guide to teTeX/LaTeX 文書が大きくなると、TeX はエラーを発生する事があります。この問題     の解決には (正しくは "/etc/texmf/texmf.d/95NonPath" を編集し update-texmf(8) を実行することで) "/etc/texmf/texmf.cnf" 中のプー ルの数を増やし修正しなければいけません。 注記 このファイルには必要なマクロのほとんど全てが含まれます。この文書     は7から10行をコメントして "\input manmac \proofmodefalse" を追加 すると tex(1) で処理できると聞いた事があります。オンラインバージ ョンを使うのではなくこの本 (さらに Donald E. Knuth 氏による全ての 本) を購入される事を強く勧めます。しかし、そのソースは TeX の入力 の非常に良い例です! 11.3.3. マニュアルページを綺麗に印刷     次のコマンドでマンページを PostScript で上手く印刷できます。     $ man -Tps some_manpage | lpr 11.3.4. マニュアルページの作成     プレーンな troff フォーマットでマンページ (マニュアルページ) を書 く事は可能ですが、それを作成するヘルパーパッケージがあります。 表11.13 マンページ作成を補助するパッケージのリスト +---------------------------------------------------------------+ | |ポプ |サ | | | | パッケージ |コン |イ | キーワード | 説明 | | | |ズ | | | |--------------+-----+---+------------+-------------------------| |docbook-to-man|V:0, |191|SGML→manpage|DocBook SGML から roff | | |I:10 | | |man マクロへの変換ソフト |     |--------------+-----+---+------------+-------------------------| |help2man |V:0, |542|text→manpage|--help からの自動マンペー| | |I:8 | | |ジ生成ソフト | |--------------+-----+---+------------+-------------------------| |info2man |V:0, |134|info→manpage|GNU info から POD かマン | | |I:0 | | |ページへの変換ソフト | |--------------+-----+---+------------+-------------------------| |txt2man |V:0, |112|text→manpage|ベタの ASCII テキストから| | |I:1 | | |マンページ形式へ変換 | +---------------------------------------------------------------+ 11.4. 印刷可能データー Debian システム上では印刷可能なデーターは PostScript フォーマット     で表現されます。共通 Unix 印刷システム (CUPS) は非 PostScript プ リンタ用のラスタ化のバックエンドプログラムとして Ghostscript を使 用します。 11.4.1. Ghostscript     印刷データー処理の核心はラスタ画像を生成する Ghostscript という PostScript (PS) インタープリタです。 表11.14 Ghostscript PostScript インタープリタのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |----------------+------+-----+---------------------------------| |ghostscript |V:179,|195 |GPL 版 Ghostscript PostScript/PDF| | |I:570 | |インタープリタ | |----------------+------+-----+---------------------------------| | |V:5, | |GPL 版 Ghostscript PostScript/PDF| |ghostscript-x |I:54 |87 |インタープリタ - X ディスプレーサ|     | | | |ポート | |----------------+------+-----+---------------------------------| |libpoppler102 |V:42, |4274 |xpdf PDF ビューワー派生PDF レンダ| | |I:292 | |リングライブラリー | |----------------+------+-----+---------------------------------| |libpoppler-glib8|V:250,|484 |PDF レンダリングライブラリー | | |I:460 | |(GLib 準拠共有ライブラリー) | |----------------+------+-----+---------------------------------| |poppler-data |V:74, |13089|PDF レンダリングライブラリー用 | | |I:597 | |CMaps (CJK サポート: Adobe-*) | +---------------------------------------------------------------+ ヒント     "gs -h" とすると Ghostscript の設定が表示されます。 11.4.2. 2つの PS や PDF ファイルをマージ     2つの PostScript (PS) や Portable Document Format (PDF) ファイル は Ghostscript のgs(1) をつかってマージできます。     $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf 注記     PDF は、クロスプラットフォームの印刷可能フォーマットとして広範に 使われていて、本質的にいくつかの追加機能と拡張がされている、圧縮 PS フォーマットです。 ヒント     コマンドラインの場合、psutils パッケージ中の psmerge(1) 等のコマ ンドは PostScript 文書を操作するのに便利です。pdftk パッケージの pdftk(1) も PDF 文書を操作するのに便利です。 11.4.3. 印刷可能データーユーティリティー     印刷可能なデーターに用いる次のパッケージが著者の目に止まりました 。 表11.15 プリントできるデーターのユーティリティーのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| キーワード | 説明 | | | ン | ズ | | | |-------------+------+----+-------------+-----------------------| | | | | |PDF ユーティリティー: | |poppler-utils|V:169,|717 |pdf→ps,text,…|pdftops, pdfinfo, | | |I:438 | | |pdfimages, pdftotext, | | | | | |pdffonts | |-------------+------+----+-------------+-----------------------| |psutils |V:9, |219 |ps→ps |PostScript 文書変換ツー| | |I:82 | | |ル | |-------------+------+----+-------------+-----------------------| |poster |V:0, |58 |ps→ps |PostScript ページから大| | |I:4 | | |きなポスターを作る | |-------------+------+----+-------------+-----------------------| | | | | |ASCII テキストから | |enscript |V:1, |2132|text→ps, |PostScript か HTML か | | |I:17 | |html, rtf |RTF か Pretty-Print へ | | | | | |の変換 | |-------------+------+----+-------------+-----------------------| | |V:5, | | |全てを PostScript に変 | |a2ps |I:12 |3648|text→ps |換するソフトと綺麗印刷 | | | | | |ソフト | |-------------+------+----+-------------+-----------------------| |pdftk |I:46 |28 |pdf→pdf |PDF 文書変換ツール: | | | | | |pdftk | |-------------+------+----+-------------+-----------------------| |html2ps |V:0, |261 |html→ps |HTML から PostScript へ| | |I:3 | | |の変換ソフト | |-------------+------+----+-------------+-----------------------| |gnuhtml2latex|V:0, |27 |html→latex |html から latex への変 |     | |I:1 | | |換ソフト | |-------------+------+----+-------------+-----------------------| |latex2rtf |V:0, |480 |latex→rtf |LaTeX から MS Word で読| | |I:5 | | |める RTF へと文書変換 | |-------------+------+----+-------------+-----------------------| | | | | |PostScript から EPS (カ| |ps2eps |V:2, |99 |ps→eps |プセル化済み | | |I:50 | | |PostScript) への変換ソ | | | | | |フト | |-------------+------+----+-------------+-----------------------| | | | | |日本語符号化サポート付 | |e2ps |V:0, |109 |text→ps |きの Text から | | |I:0 | | |PostScript への変換ソフ| | | | | |ト | |-------------+------+----+-------------+-----------------------| |impose+ |V:0, |119 |ps→ps |PostScript ユーティリテ| | |I:0 | | |ィー | |-------------+------+----+-------------+-----------------------| | | | | |多くのソースコード (C, | | |V:0, | | |C++, Java, Pascal, | |trueprint |I:0 |146 |text→ps |Perl, Pike, Sh, | | | | | |Verilog) の PostScript | | | | | |への綺麗印刷 (C 言語) | |-------------+------+----+-------------+-----------------------| | | | | |PDF からスケール可のベ | |pdf2svg |V:0, |30 |ps→svg |クトルグラフィクス | | |I:4 | | |(SVG) フォーマットへの | | | | | |変換ソフト | |-------------+------+----+-------------+-----------------------| | |V:0, | | |PDF から IPE の XML フ | |pdftoipe |I:0 |65 |ps→ipe |ォーマットへの変換ソフ | | | | | |ト | +---------------------------------------------------------------+ 11.4.4. CUPS を使って印刷 Common Unix Printing System (CUPS) が提供する、lp(1) と lpr(1) コ     マンドの両方が印刷可能なデーターの印刷をカスタム化するオプション を提供します。     以下のコマンドの内のひとつを使い一つのファイルに対し3部の印刷を ページ順に揃えてできます。     $ lp -n 3 -o Collate=True filename     $ lpr -#3 -o Collate=True filename さらに、コマンドライン印刷とオプションに書かれているように "-o     number-up=2" や "-o page-set=even", "-o page-set=odd" や "-o scaling=200" や "-o natural-scaling=200" 等の印刷オプションを使っ てカスタム化できます。 11.5. メールデーター変換     テキストデーター変換のための次のパッケージが著者の目に止まりまし た。 表11.16 メールデーター変換を補助するパッケージのリスト +---------------------------------------------------------------+ |パッケー |ポプ|サイ|キーワ | 説明 | | ジ |コン| ズ | ード | | |---------+----+----+-------+-----------------------------------| |sharutils|V:3,|1415|メール |shar(1) と unshar(1) と uuencode(1)| | |I:45| | |と uudecode(1) | |---------+----+----+-------+-----------------------------------| |mpack |V:1,|108 |MIME |MIME メッセージの符号化と逆符号化の|     | |I:14| | |ソフト: mpack(1) と munpack(1) | |---------+----+----+-------+-----------------------------------| | |V:0,| | |Microsoft のみのフォーマットの | |tnef |I:8 |110 |ms-tnef|"application/ms-tnef" タイプの MIME| | | | | |アタッチメントを開梱 | |---------+----+----+-------+-----------------------------------| | |V:0,| | |次のフォーマットのエンコーダーとデ | |uudeview |I:4 |109 |メール |コーダー: uuencode, xxencode, | | | | | |BASE64, quoted printable, BinHex | +---------------------------------------------------------------+ ヒント     The Internet Message Access Protocol version 4 (IMAP4) server may be used to move mails out from proprietary mail systems if the mail client software can be configured to use IMAP4 server too. 11.5.1. メールデーターの基本 Mail (SMTP) data should be limited to series of 7 bit data. So binary data and 8 bit text data are encoded into 7 bit format     with the Multipurpose Internet Mail Extensions (MIME) and the selection of the charset (see 表11.2「符号化方式値とその使い方リ スト」). 標準のメールストレージフォーマットは RFC2822 (RFC822 の更新版) に     より定義される mbox フォーマットです。mbox(5) (mutt パッケージが 提供) を参照下さい。 欧州言語の場合、ほとんど8ビット文字が無いので ISO-8859-1 文字セッ トとともに "Content-Transfer-Encoding: quoted-printable" が通常メ     ールに使われます。欧州のテキストが UTF-8 符号化された場合、ほとん どが7ビット文字なので "Content-Transfer-Encoding: quoted-printable" が大体使われます。 日本語には、テキストを7ビットにしておくために伝統的に "Content-Type: text/plain; charset=ISO-2022-JP" がメールに使われ     ます。しかし、古い Microsoft システムは適正な宣言無しに Shift-JIS でメールデーターを送るかもしれません。日本語のテキストが UTF-8 で 符号化される場合、多くの8ビットデーターを含むので Base64 が大体使 われます。他のアジアの言語でも状況は同様です。 注記     If your non-Unix mail data is accessible by a non-Debian client software which can talk to the IMAP4 server, you may be able to move them out by running your own IMAP4 server. 注記     もし他のメールストレージフォーマットを使っている場合、mbox フォー マットに移動するのが良い第一歩です。mutt(1) のような汎用クライア ントプログラムはこれに非常に便利です。     メールボックスの内容は procmail(1) と formail(1) を使って各メッセ ージに分割できます。 各メールメッセージは mpack パッケージにある munpack(1) (または他     の専用ツール) を使って開梱して MIME 符号化された内容を取り出せま す。 11.6. グラフィクスデーターツール     印刷可能なデーターに用いる次のパッケージが著者の目に止まりました 。 表11.17 画像データーツールのリスト +----------------------------------------------------------------+ | パッケージ |ポプ |サイ | キーワード | 説明 | | |コン | ズ | | | |------------------------+-----+-----+------------+--------------| |gimp |V:50,|19767|画像 |GNU イメージ操| | |I:273| |(bitmap) |作プログラム | |------------------------+-----+-----+------------+--------------| |imagemagick |I:327|176 |画像 |画像操作プログ| | | | |(bitmap) |ラム | |------------------------+-----+-----+------------+--------------| | | | | |画像操作プログ| |graphicsmagick |V:2, |5445 |画像 |ラム | | |I:15 | |(bitmap) |(imagemagick | | | | | |のフォーク) | |------------------------+-----+-----+------------+--------------| | | | | |GTK に基づく | | |V:12,| |画像 |SANE (Scanner | |xsane |I:147|2339 |(bitmap) |Access Now | | | | | |Easy) 用の X11| | | | | |フロントエンド| |------------------------+-----+-----+------------+--------------| |netpbm |V:23,|8200 |画像 |画像変換ツール| | |I:337| |(bitmap) | | |------------------------+-----+-----+------------+--------------| | | | | |MS Windows の | | | | | |アイコンやカー| |icoutils |V:8, |221 |png↔ico |ソールと PNG | | |I:66 | |(bitmap) |フォーマット間| | | | | |の変換 | | | | | |(favicon.ico) | |------------------------+-----+-----+------------+--------------| |scribus |V:1, |30234|ps/pdf/SVG/…|Scribus DTP エ| | |I:20 | | |ディター | |------------------------+-----+-----+------------+--------------| | |V:81,| |画像 |LibreOffice | |libreoffice-draw |I:408|13442|(vector) |office スイー | | | | | |ト - ドロー | |------------------------+-----+-----+------------+--------------| | | | | |SVG (スケーラ | |inkscape |V:15,|99316|画像 |ブルベクトルグ| | |I:147| |(vector) |ラフィクス) エ| | | | | |ディター | |------------------------+-----+-----+------------+--------------| |dia |V:2, |3908 |画像 |ダイアグラムエ| | |I:26 | |(vector) |ディター (Gtk)| |------------------------+-----+-----+------------+--------------| | |V:0, | |画像 |X11 下でインテ| |xfig |I:13 |7798 |(vector) |ラクティブ生成| | | | | |するソフト | |------------------------+-----+-----+------------+--------------| | | | | |PostScript と | | | | | |PDF ファイルか| |pstoedit |V:2, |1005 |ps/pdf→画像 |ら編集可能なベ| | |I:65 | |(vector) |クトルグラフィ| | | | | |クスへの変換ソ| | | | | |フト (SVG) | |------------------------+-----+-----+------------+--------------| | | | | |Windows メタフ| |libwmf-bin |V:7, |180 |Windows/画像|ァイル (ベクト| | |I:155| |(vector) |ル画像データ | | | | | |ー) 変換ツール| |------------------------+-----+-----+------------+--------------| | | | | |XFig ファイル | | |V:0, | |fig→sxd |を | |fig2sxd |I:0 |151 |(vector) |OpenOffice.org| | | | | |Draw フォーマ | | | | | |ットに変換 | |------------------------+-----+-----+------------+--------------| | |V:2, | | |OCR 用のスキャ| |unpaper |I:18 |412 |画像→画像 |ンしたページの| | | | | |後処理ツール | |------------------------+-----+-----+------------+--------------| | | | | |HP の商用 OCR | |tesseract-ocr |V:7, |2135 |画像→テキス |エンジンの基づ| | |I:36 | |ト |くフリーの OCR| | | | | |ソフトウエアー| |------------------------+-----+-----+------------+--------------| | | | | |OCR エンジンデ| | |V:7, | |画像→テキス |ーター: | |tesseract-ocr-eng |I:36 |4032 |ト |tesseract-ocr | | | | | |の英文用言語フ| | | | | |ァイル | |------------------------+-----+-----+------------+--------------| |gocr |V:1, |545 |画像→テキス |フリー OCR ソ | | |I:9 | |ト |フト | |------------------------+-----+-----+------------+--------------| |ocrad |V:0, |578 |画像→テキス |フリー OCR ソ | | |I:4 | |ト |フト | |------------------------+-----+-----+------------+--------------| | |V:54,| | |画像ビューアー| |eog |I:258|7836 |画像(Exif) |プログラム Eye| | | | | |of GNOME | |------------------------+-----+-----+------------+--------------| | |V:4, | | |画像ビューアー| |gthumb |I:19 |5395 |画像(Exif) |兼ブラウザー | | | | | |(GNOME) | |------------------------+-----+-----+------------+--------------| |geeqie |V:4, |15398|画像(Exif) |GTK を用いた画| | |I:17 | | |像ビューアー | |------------------------+-----+-----+------------+--------------| | |V:15,| | |デジタル写真オ|     |shotwell |I:232|6548 |画像(Exif) |ーガナイザー | | | | | |(GNOME) | |------------------------+-----+-----+------------+--------------| | | | | |デジタルカメラ| | |V:0, | | |からメディアを| |gtkam |I:5 |1154 |画像(Exif) |回収するアプリ| | | | | |ケーション | | | | | |(GTK) | |------------------------+-----+-----+------------+--------------| | | | | |gphoto2 デジタ| |gphoto2 |V:0, |947 |画像(Exif) |ルカメラコマン| | |I:10 | | |ドライン版クラ| | | | | |イアント | |------------------------+-----+-----+------------+--------------| |gwenview |V:25,|11604|画像(Exif) |画像ビューア | | |I:90 | | |(KDE) | |------------------------+-----+-----+------------+--------------| | | | | |KDE アプリケー| |kamera |I:90 |983 |画像(Exif) |ション用デジタ| | | | | |ルカメラサポー| | | | | |ト | |------------------------+-----+-----+------------+--------------| | |V:2, | | |デジタル写真管| |digikam |I:11 |265 |画像(Exif) |理アプリケーシ| | | | | |ョン | |------------------------+-----+-----+------------+--------------| | |V:2, | | |EXIF/IPTC メタ| |exiv2 |I:32 |275 |画像(Exif) |データー操作ツ| | | | | |ール | |------------------------+-----+-----+------------+--------------| | |V:1, | | |デジタルカメラ| |exiftran |I:17 |70 |画像(Exif) |の jpeg 画像を| | | | | |変換 | |------------------------+-----+-----+------------+--------------| | | | | |Exif に準拠の | | |V:1, | | |JPEG (デジタル| |jhead |I:10 |131 |画像(Exif) |カメラ写真) フ| | | | | |ァイルの非画像| | | | | |部を操作 | |------------------------+-----+-----+------------+--------------| | | | | |JPEG ファイル | | |V:1, | | |中の EXIF 情報| |exif |I:16 |339 |画像(Exif) |を表示するコマ| | | | | |ンドラインユー| | | | | |ティリティー | |------------------------+-----+-----+------------+--------------| | | | | |デジタルカメラ| | |V:0, | | |の JPEG ファイ| |exiftags |I:4 |292 |画像(Exif) |ルから Exif タ| | | | | |グを読むユーテ| | | | | |ィリティー | |------------------------+-----+-----+------------+--------------| | |V:0, | | |デジタル写真か| |exifprobe |I:3 |499 |画像(Exif) |らメタデーター| | | | | |を読み出す | |------------------------+-----+-----+------------+--------------| | |V:1, | |画像(Raw) |生のデジタルカ| |dcraw |I:15 |583 |→ppm |メラ画像のデコ| | | | | |ード | |------------------------+-----+-----+------------+--------------| | |V:0, | |画像 |視覚的な類似画| |findimagedupes |I:1 |76 |→fingerprint|像と重複画像の| | | | | |検出 | |------------------------+-----+-----+------------+--------------| | | | | |忠実度を上げた| |ale |V:0, |839 |画像→画像 |りモザイクを作| | |I:0 | | |成するための画| | | | | |像のマージ | |------------------------+-----+-----+------------+--------------| | |V:0, | |画像(Exif) |イメージから静| |imageindex |I:1 |145 |→html |的な HTML ギャ| | | | | |ラリーを生成 | |------------------------+-----+-----+------------+--------------| | |V:0, | | |普遍的 | |outguess |I:1 |230 |jpeg,png |Steganographic| | | | | |ツール | |------------------------+-----+-----+------------+--------------| |librecad |V:1, |8798 |DXF |CAD データーエ| | |I:16 | | |ディター (KDE)| |------------------------+-----+-----+------------+--------------| | | | | |アニメーション| |blender |V:2, |87149|blend, TIFF,|等用の 3D コン| | |I:31 | |VRML, … |テントエディタ| | | | | |ー | |------------------------+-----+-----+------------+--------------| | |V:0, | |ms3d, obj, |OpenGL 準拠の | |mm3d |I:0 |3868 |dxf, … |3D モデルエデ | | | | | |ィター | |------------------------+-----+-----+------------+--------------| | | | | |オープンフォン| |open-font-design-toolkit|I:0 |10 |ttf, ps, … |トデザイン用の| | | | | |メタパッケージ| |------------------------+-----+-----+------------+--------------| | | | | |PS と TrueType| |fontforge |V:0, |3980 |ttf, ps, … |と OpenType の| | |I:7 | | |フォント用フォ| | | | | |ントエディター| |------------------------+-----+-----+------------+--------------| | | | | |TrueType フォ | | |V:0, | | |ントをグリッド| |xgridfit |I:0 |806 |ttf |フィッティング| | | | | |とヒンティング| | | | | |用のプログラム| +----------------------------------------------------------------+ ヒント     aptitude(8) の正規表現 "~Gworks-with::image" (「aptitude を使った 探索方法」参照下さい) を使ってさらなる画像ツールを探しましょう。 gimp(1) のような GUI プログラムは非常に強力ですが、imagemagick(1)     等のコマンドラインツールはスクリプトでイメージ操作を自動化するの に非常に便利です。 デジタルカメラのファイルフォーマットのデファクト標準は、追加のメ     タデーター付きの JPEG 画像ファイルフォーマットである交換可能な画 像ファイルフォーマット (EXIF) です。EXIF は日付や時間やカメラ設定 等の情報を保持できます。 Lempel-Ziv-Welch (LZW) ロス無しデーター圧縮特許の期限は切れました     。LZW データー圧縮を使う画像交換フォーマット (GIF) ユーティリティ ーは Debian システム上で自由に利用可能となりました。 ヒント     リムーバブル記録メディア付きのどのデジタルカメラやスキャナーも、 カメラファイルシステム用デザインルールに準拠し FAT ファイルシステ ムを使っているので USB ストレージ読取り機を経由すれば Linux で必 ず機能します。「リムーバブルストレージデバイス」参照下さい。 11.7. その他のデーター変換 多くのデーター変換プログラムがあります。aptitude(8) で     "~Guse::converting" という正規表現 (「aptitude を使った探索方法」 参照下さい) を使い次のプログラムが私の目に止まりました。 表11.18 その他のデーター変換ツールのリスト +---------------------------------------------------------------+ |パッケー |ポプ|サイ |キーワー | 説明 | | ジ |コン| ズ | ド | | |---------+----+-----+---------+--------------------------------| |alien |V:1,|163 |rpm/ |外来のパッケージの Debian パッケ| | |I:24| |tgz→deb |ージへの変換ソフト |     |---------+----+-----+---------+--------------------------------| | | | | |"Electric Book" (日本で人気) か | |freepwing|V:0,|421 |EB→EPWING|ら単一の JIS X 4081 フォーマット| | |I:0 | | |(EPWING V1 のサブセット) への変 | | | | | |換ソフト | |---------+----+-----+---------+--------------------------------| |calibre |V:7,|62725|any→EPUB |e-book コンバーターとライブラリ | | |I:30| | |ーの管理 | +---------------------------------------------------------------+     RPM フォーマットからのデーター抽出もまた次のようにするとできます 。     $ rpm2cpio file.src.rpm | cpio --extract 第12章プログラミング Debian システム上でプログラミングを学ぶ人がパッケージ化されたソー     スコードを読み込めるようになるための指針を示します。以下はプログ ラムに関する特記すべきパッケージと対応する文書パッケージです。 オンラインリファレンスは manpages と manpages-dev パッケージをイ ンストールした後で "man name" とタイプすると利用可能です。GNU ツ ールのオンラインリファレンスは該当する文書パッケージをインストー     ルした後で "info program_name" とタイプすると使えます。一部の GFDL 文書は DFSG に準拠していないと考えられているので main アーカ イブに加えて contrib や non-free アーカイブを含める必要があるかも しれません。     Please consider to use version control system tools. See 「Git」. 警告     "test" を実行可能なテストファイルの名前に用いてはいけません。 "test" はシェルのビルトインです。 注意     ソースから直接コンパイルしたソフトウエアープログラムは、システム プログラムとかち合わないように、"/usr/local" か "/opt" の中にイン ストールします。 ヒント     "99ボトルのビールの歌" 作成のコード例はほとんど全てのプログラム言 語に関する理解のための非常に好適です。 12.1. シェルスクリプト     シェルスクリプトは実行ビットがセットされたテキストファイルで、以 下に示すフォーマットのコマンドを含んでいます。     #!/bin/sh ... command lines     最初の行はこのファイル内容を読み実行するシェルインタープリタを指 定します。 シェルスクリプトを読むのは Unix 的なシステムがどのように機能して いるのかを理解する最良の方法です。ここでは、シェルプログラムに関     する指針や心がけを記します。失敗から学ぶために "シェルの失敗" (http://www.greenend.org.uk/rjk/2001/04/shell.html) を参照下さい 。 シェル対話モード (「シェルプロンプト」と「Unix 的テキスト処理」参     照下さい) と異なり、シェルスクリプトは変数や条件文やループを繁用 します。 12.1.1. POSIX シェル互換性     Many system scripts may be interpreted by any one of POSIX shells (see 表1.13「シェルプログラムのリスト」). * The default non-interactive POSIX shell "/bin/sh" is a symlink pointing to /usr/bin/dash and used by many system     programs. * The default interactive POSIX shell is /usr/bin/bash. 全ての POSIX シェル間でポータブルとするために bashisms や zshisms     を使うシェルスクリプトを書くのを避けましょう。checkbashisms(1) を 使うとこれがチェックできます。 表12.1 典型的 bashizms のリスト +---------------------------------------------------------------+ | 推薦: POSIX | 回避すべき: bashism | |-------------------------------+-------------------------------| |if [ "$foo" = "$bar" ] ; then …|if [ "$foo" == "$bar" ] ; then | | |… | |-------------------------------+-------------------------------|     |diff -u file.c.orig file.c |diff -u file.c{.orig,} | |-------------------------------+-------------------------------| |mkdir /foobar /foobaz |mkdir /foo{bar,baz} | |-------------------------------+-------------------------------| |funcname() { … } |function funcname() { … } | |-------------------------------+-------------------------------| |8進表記: "\377" |16進表記: "\xff" | +---------------------------------------------------------------+     "echo" コマンドはその実装がシェルビルトインや外部コマンド間で相違 しているので次の注意点を守って使わなければいけません。 * "-n" 以外のどのコマンドオプション使用も避けます。     * 文字列中にエスケープシーケンスはその取扱いに相違があるので使 用を避けます。 注記     "-n" オプションは実は POSIX シンタックスではありませんが、一般的 に許容されています。 ヒント     出力文字列にエスケープシーケンスを埋め込む必要がある場合には、 "echo" コマンドの代わりに "printf" コマンドを使います。 12.1.2. シェル変数     特別なシェルパラメーターがシェルスクリプト中ではよく使われます。 表12.2 シェル変数のリスト +-------------------------------------------------------+ |シェル変数| 変数値 | |----------+--------------------------------------------| |$0 |シェルまたはシェルスクリプトの名前 | |----------+--------------------------------------------| |$1 |最初 (1番目) のシェル引数 | |----------+--------------------------------------------| |$9 |9番目のシェル引数 | |----------+--------------------------------------------|     |$# |シェル引数の数 | |----------+--------------------------------------------| |"$*" |"$1 $2 $3 $4 … " | |----------+--------------------------------------------| |"$@" |"$1" "$2" "$3" "$4" … | |----------+--------------------------------------------| |$? |最新のコマンドの終了状態 | |----------+--------------------------------------------| |$$ |このシェルスクリプトの PID | |----------+--------------------------------------------| |$! |最近スタートしたバックグラウンドジョブの PID| +-------------------------------------------------------+     覚えておくべき基本的なパラメーター展開を次に記します。 表12.3 シェル変数展開のリスト +---------------------------------------------------------------+ |パラメーター |var が設定されて |var が設定されていないときの値 | | 式形 | いるときの値 | | |-------------+-----------------+-------------------------------| |$ |"$var" |"string" | |{var:-string}| | | |-------------+-----------------+-------------------------------|     |$ |"string" |"null" | |{var:+string}| | | |-------------+-----------------+-------------------------------| |${var:= |"$var" |"string" (合わせて "var=string"| |string} | |を実行) | |-------------+-----------------+-------------------------------| |${var:? |"$var" |"string" をstderr に出力 (エラ | |string} | |ーとともに exit する) | +---------------------------------------------------------------+     ここで、これら全てのオペレーターのコロン ":" は実際はオプションで す。 * ":" 付き = 演算子は存在と非ヌル文字列をテストします     * ":" 無し = 演算子は存在のみをテストします 表12.4 重要なシェル変数置換のリスト +-----------------------------------------------------+ |パラメーター置換形| 結果 | |------------------+----------------------------------| |${var%suffix} |最短のサフィックスパターンを削除 |     |------------------+----------------------------------| |${var%%suffix} |最長のサフィックスパターンを削除 | |------------------+----------------------------------| |${var#prefix} |最短のプレフィックスパターンを削除| |------------------+----------------------------------| |${var##prefix} |最長のプレフィックスパターンを削除| +-----------------------------------------------------+ 12.1.3. シェル条件式     各コマンドは条件式に使えるエグジットステイタスを返します。 * 成功: 0 ("真")     * エラー: 非0 ("偽") 注記     シェル条件文の文脈において "0" は "真" を意味しますが、C 条件文の 文脈では "0" は "偽" を意味します。 注記     "[" は、"]" までの引数を条件式として評価する、test コマンドと等価 です。     覚えておくべき基本的な条件文の慣用句は次です。 * "command && 成功したらこのcommandも実行 || true"     * "command || もしcommandが成功しないとこのコマンドも実行 || true" * 次のような複数行のスクリプト断片 if [ conditional_expression ]; then if_success_run_this_command     else if_not_success_run_this_command fi ここで、シェルが "-e" フラグ付きで起動された際にシェルスクリプト     がこの行で誤って exit しないようにするために、末尾の "|| true" が 必要です。 表12.5 条件式中のファイル比較演算子 +------------------------------------------------------------+ | 式 | 論理真を返す条件 | |---------------+--------------------------------------------| |-e file |file が存在する | |---------------+--------------------------------------------| |-d file |file が存在しディレクトリーである | |---------------+--------------------------------------------| |-f file |file が存在し通常ファイルである |     |---------------+--------------------------------------------| |-w file |file が存在し書込み可能である | |---------------+--------------------------------------------| |-x file |file が存在し実行可能である | |---------------+--------------------------------------------| |file1 -nt file2|file1 が file2 よりも新しい (変更) | |---------------+--------------------------------------------| |file1 -ot file2|file1 が file2 よりも古い (変更) | |---------------+--------------------------------------------| |file1 -ef file2|file1 と file2 は同デバイス上の同 inode 番号| +------------------------------------------------------------+ 表12.6 条件式中での文字列比較演算子のリスト +---------------------------------------------------------+ | 式 | 論理真を返す条件 | |------------+--------------------------------------------| |-z str |str の長さがゼロ | |------------+--------------------------------------------| |-n str |str の長さが非ゼロ |     |------------+--------------------------------------------| |str1 = str2 |str1 と str2 は等しい | |------------+--------------------------------------------| |str1 != str2|str1 と str2 は等しく無い | |------------+--------------------------------------------| |str1 < str2 |str1 のソート順が str2 より前 (ロケール依存)| |------------+--------------------------------------------| |str1 > str2 |str1 のソート順が str2 より後 (ロケール依存)| +---------------------------------------------------------+     条件式中の算術整数比較演算子は "-eq" と "-ne" と "-lt" と "-le" と "-gt" と "-ge" です。 12.1.4. シェルループ     POSIX シェル中で使われるループの慣用句があります。 * "for x in foo1 foo2 … ; do コマンド ; done" は "foo1 foo2 …" リストの項目を変数 "x" に代入し "コマンド" を実行してループし ます。 * "while 条件 ; do コマンド ; done" は"条件" が真の場合 "コマン ド" を繰り返します。     * "until 条件 ; do コマンド ; done" は"条件" が真でない場合 "コ マンド" を繰り返します。 * "break" によってループから脱出できます。 * "continue" によって次のループ初めに戻りループを再開します。 ヒント     C 言語のような数字の繰り返しは "foo1 foo2 ..." 生成に seq(1) 使っ て実現します。 ヒント     「ファイルに関してループしながらコマンドを反復実行」を参照下さい 。 12.1.5. Shell environment variables Some popular environment variables for the normal shell command     prompt may not be available under the execution environment of your script. * For "$USER", use "$(id -un)"     * For "$UID", use "$(id -u)" * For "$HOME", use "$(getent passwd "$(id -u)"|cut -d ":" -f 6) " (this works also on 「最新の集中システム管理」) 12.1.6. シェルコマンドライン処理シーケンス     シェルはおおよそ次のシーケンスでスクリプトを処理します。 * シェルは1行読み込みます。 * シェルは、もし "…" や '…' の中なら、行の一部を1つのトークンと してグループします。 * シェルは1行を次のによってトークンに分割します。 + 空白: space tab newline + Metacharacters: | ; & ( ) * "…" や '…' の中でない場合、シェルは各トークンを予約語に対して チェックしその挙動を調整します。 + 予約語: if then elif else fi for in while unless do done case esac * "…" や '…' の中でない場合、シェルはエイリアスを展開します。 * "…"や'…'の中でない場合、シェルはティルダを展開します。 + "~" → 現ユーザーのホームディレクトリー + "~user" → user のホームディレクトリー * '…' の中でない場合、シェルはパラメーター"をその値に展開します     。 + パラメーター: "$PARAMETER" or "${PARAMETER}" * '…' の中でない場合、シェルはコマンド置換を展開します。 + "$( command )" → "command" の出力 + "` command `" → "command" の出力 * "…" や '…' の中でない場合、シェルはパス名のグロブを展開します 。 + * → あらゆる文字 + ? → 1文字 + […] → "…" 中の1つ * シェルはコマンドを次から検索して実行します。 + 関数定義 + ビルトインコマンド + "$PATH" 中の実行ファイル * シェルは次行に進みこのプロセスを一番上から順に反復します。     ダブルクォート中のシングルクォートに効果はありません。 シェル環境中で "set -x" を実行したり、シェルを "-x" オプションで     起動すると、シェルは実行するコマンドを全てプリントするようになり ます。これはデバグをするのに非常に便利です。 12.1.7. シェルスクリプトのためのユーティリティープログラム Debian システム上でできるだけポータブルなシェルプログラムとするに     は、ユーティリティープログラムを essential パッケージで提供される プログラムだけに制約するのが賢明です。 * "aptitude search ~E" はessential (必須) パッケージをリストし ます。     * "dpkg -L パッケージ名 |grep '/man/man.*/'" はパッケージ名パッ ケージによって提供されるコマンドのマンページをリストします。 表12.7 シェルスクリプト用の小さなユーティリティープログラムを含む パッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコン |サイ | 説明 | | | | ズ | | |-------------+---------+-----+---------------------------------| |dash |V:896, |191 |small and fast POSIX-compliant | | |I:995 | |shell for sh | |-------------+---------+-----+---------------------------------| |coreutils |V:910, |18062|GNU コアユーティリティー | | |I:999 | | | |-------------+---------+-----+---------------------------------| |grep |V:806, |1245 |GNU grep, egrep and fgrep | | |I:999 | | | |-------------+---------+-----+---------------------------------| |sed |V:795, |987 |GNU sed |     | |I:999 | | | |-------------+---------+-----+---------------------------------| |mawk |V:395, |263 |小さく高速な awk | | |I:997 | | | |-------------+---------+-----+---------------------------------| |debianutils |V:921, |243 |Debian 特有の雑多なユーティリティ| | |I:999 | |ー | |-------------+---------+-----+---------------------------------| |bsdutils |V:614, |355 |4.4BSD-Lite 由来の基本ユーティリ | | |I:999 | |ティー | |-------------+---------+-----+---------------------------------| |bsdextrautils|V:450, |337 |4.4BSD-Lite 由来の追加のユーティ | | |I:545 | |リティー | |-------------+---------+-----+---------------------------------| |moreutils |V:13, |244 |追加の Unix ユーティリティー | | |I:39 | | | +---------------------------------------------------------------+ ヒント     Although moreutils may not exist outside of Debian, it offers interesting small programs. Most notable one is sponge(8) which is quite useful when you wish to overwrite original file.     See 「Unix 的テキスト処理」 for examples. 12.2. Scripting in interpreted languages 表12.8 List of interpreter related packages +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ| 文書 | | | ン | ズ | | |-------------------------+------+----+-------------------------| | |V:896,| |sh: small and fast | |dash |I:995 |191 |POSIX-compliant shell for| | | | |sh | |-------------------------+------+----+-------------------------| |bash |V:821,|7163|sh: "info bash" provided | | |I:999 | |by bash-doc | |-------------------------+------+----+-------------------------| |mawk |V:395,|263 |AWK: small and fast awk | | |I:997 | | | |-------------------------+------+----+-------------------------| |gawk |V:316,|2456|AWK: "info gawk" provided| | |I:403 | |by gawk-doc | |-------------------------+------+----+-------------------------| | | | |Perl: perl(1) and html | |perl |V:643,|669 |pages provided by | | |I:990 | |perl-doc and | | | | |perl-doc-html |     |-------------------------+------+----+-------------------------| | |V:2, | |Perl extension for the | |libterm-readline-gnu-perl|I:30 |379 |GNU ReadLine/History | | | | |Library: perlsh(1) | |-------------------------+------+----+-------------------------| |libreply-perl |V:0, |171 |PerlのREPL: reply(1) | | |I:0 | | | |-------------------------+------+----+-------------------------| |libdevel-repl-perl |V:0, |237 |PerlのREPL: re.pl(1) | | |I:0 | | | |-------------------------+------+----+-------------------------| | |V:726,| |Python: python-doc が提供| |python3 |I:931 |78 |する python3(1) と html | | | | |ページ | |-------------------------+------+----+-------------------------| |tcl |V:27, |22 |Tcl: tcl-doc が提供する | | |I:269 | |tcl(3) と詳細なマンページ| |-------------------------+------+----+-------------------------| |tk |V:22, |22 |Tk: tk-doc が提供する tk | | |I:262 | |(3) と詳細なマンページ | |-------------------------+------+----+-------------------------| |ruby |V:111,|29 |Ruby: ruby(1), erb(1), | | |I:255 | |irb(1), rdoc(1), ri(1) | +---------------------------------------------------------------+ When you wish to automate a task on Debian, you should script it     with an interpreted language first. The guide line for the choice of the interpreted language is: * Use dash, if the task is a simple one which combines CLI programs with a shell program. * Use python3, if the task isn't a simple one and you are     writing it from scratch. * Use perl, tcl, ruby, ... if there is an existing code using one of these languages on Debian which needs to be touched up to do the task. If the resulting code is too slow, you can rewrite only the     critical portion for the execution speed in a compiled language and call it from the interpreted language. 12.2.1. Debugging interpreted language codes     Most interpreters offer basic syntax check and code tracing functionalities. * “dash -n script.sh” - Syntax check of a Shell script * “dash -x script.sh” - シェルスクリプトのトレース * “python -m py_compile script.py” - Syntax check of a Python script     * “python -mtrace --trace script.py” - Trace a Python script * “perl -I ../libpath -c script.pl” - Syntax check of a Perl script * “perl -d:Trace script.pl” - Trace a Perl script     For testing code for dash, try 「Readline wrapper」 which accommodates bash-like interactive environment. For testing code for perl, try REPL environment for Perl which     accommodates Python-like REPL (=READ + EVAL + PRINT + LOOP) environment for Perl. 12.2.2. GUI program with the shell script The shell script can be improved to create an attractive GUI     program. The trick is to use one of so-called dialog programs instead of dull interaction using echo and read commands. 表12.9 ダイアログプログラムのリスト +---------------------------------------------------------------+ |パッケー |ポプコ|サイ| 説明 | | ジ | ン | ズ | | |---------+------+----+-----------------------------------------| |x11-utils|V:168,|712 |xmessage(1): window 中にメッセージや質問 | | |I:556 | |を表示 (X) | |---------+------+----+-----------------------------------------| |whiptail |V:250,|56 |シェルスクリプトからユーザーフレンリーな | | |I:996 | |ダイアログボックスを表示 (newt) | |---------+------+----+-----------------------------------------|     |dialog |V:12, |1213|シェルスクリプトからユーザーフレンリーな | | |I:114 | |ダイアログボックスを表示 (ncurses) | |---------+------+----+-----------------------------------------| |zenity |V:74, |172 |シェルスクリプトからグラフィカルなダイア | | |I:356 | |ログボックスを表示 (GTK) | |---------+------+----+-----------------------------------------| | |V:0, | |シェルスクリプトフロントエンドツール | |ssft |I:0 |75 |(gettext を使った zenity や kdialog や | | | | |dialog のラッパー) | |---------+------+----+-----------------------------------------| |gettext |V:55, |5825|"/usr/bin/gettext.sh": メッセージ翻訳 | | |I:279 | | | +---------------------------------------------------------------+     Here is an example of GUI program to demonstrate how easy it is just with a shell script.     This script uses zenity to select a file (default /etc/motd) and display it.     GUI launcher for this script can be created following 「GUI から プログラムをスタート」. #!/bin/sh -e # Copyright (C) 2021 Osamu Aoki , Public Domain # vim:set sw=2 sts=2 et: DATA_FILE=$(zenity --file-selection --filename="/etc/motd" --title="Select a file to check") || \ ( echo "E: File selection error" >&2 ; exit 1 ) # Check size of archive     if ( file -ib "$DATA_FILE" | grep -qe '^text/' ) ; then zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="$(head -n 20 "$DATA_FILE")" else zenity --info --title="Check file: $DATA_FILE" --width 640 --height 400 \ --text="The data is MIME=$(file -ib "$DATA_FILE")" fi This kind of approach to GUI program with the shell script is     useful only for simple choice cases. If you are to write any program with complexities, please consider writing it on more capable platform. 12.2.3. Custom actions for GUI filer GUI filer programs can be extended to perform some popular     actions on selected files using additional extension packages. They can also made to perform very specific custom actions by adding your specific scripts. * For GNOME, see NautilusScriptsHowto. * For KDE, see Creating Dolphin Service Menus.     * For Xfce, see Thunar - Custom Actions and https:// help.ubuntu.com/community/ThunarCustomActions. * For LXDE, see Custom Actions. 12.2.4. 究極の短い Perl スクリプト In order to process data, sh needs to spawn sub-process running     cut, grep, sed, etc., and is slow. On the other hand, perl has internal capabilities to process data, and is fast. So many system maintenance scripts on Debian use perl.     Let's think following one-liner AWK script snippet and its equivalents in Perl.     awk '($2=="1957") { print $3 }' |     これは次の数行のどれとも等価です。     perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' |     perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' |     perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' |     perl -lane 'print $F[2] if $F[1] eq "1957"' |     perl -lane 'print$F[2]if$F[1]eq+1957' |     最後のスクリプトは謎々状態です。Perl の次の機能を利用しています。 * ホワイトスペースはオプション。 * 数字から文字列への自動変換が存在します。     * Perl execution tricks via command line options: perlrun(1) * Perl special variables: perlvar(1)     This flexibility is the strength of Perl. At the same time, this allows us to create cryptic and tangled codes. So be careful.     For more crazy Perl scripts, Perl Golf may be interesting. 12.3. Coding in compiled languages 表12.10 コンパイラ関連のパッケージのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ |サイ | 説明 | | | ン | ズ | | |----------------+-------+-----+--------------------------------| |gcc |V:145, |47 |GNU C コンパイラ | | |I:567 | | | |----------------+-------+-----+--------------------------------| |libc6-dev |V:244, |11954|GNU C Library: Development | | |I:583 | |Libraries and Header Files | |----------------+-------+-----+--------------------------------| |g++ |V:54, |14 |GNU C++ compiler | | |I:505 | | | |----------------+-------+-----+--------------------------------| |libstdc++-10-dev|V:37, |17587|GNU Standard C++ Library v3 | | |I:269 | |(development files) | |----------------+-------+-----+--------------------------------| |cpp |V:312, |30 |GNU C プリプロセッサ | | |I:728 | | | |----------------+-------+-----+--------------------------------| |gettext |V:55, |5825 |GNU 国際化ユーティリティ | | |I:279 | | | |----------------+-------+-----+--------------------------------| |glade |V:0, |1209 |GTK User Interface Builder | | |I:6 | | | |----------------+-------+-----+--------------------------------|     |valac |V:0, |717 |C# like language for the GObject| | |I:5 | |system | |----------------+-------+-----+--------------------------------| |flex |V:8, |1260 |LEX-compatible fast lexical | | |I:82 | |analyzer generator | |----------------+-------+-----+--------------------------------| |bison |V:8, |3116 |YACC互換のパーサジェネレータ | | |I:89 | | | |----------------+-------+-----+--------------------------------| |susv2 |I:0 |16 |"The Single UNIX Specifications | | | | |v2" を取得 | |----------------+-------+-----+--------------------------------| |susv3 |I:0 |16 |"The Single UNIX Specifications | | | | |v3" を取得 | |----------------+-------+-----+--------------------------------| |golang |I:20 |12 |Go programming language compiler| |----------------+-------+-----+--------------------------------| |rustc |V:3, |7753 |Rust systems programming | | |I:13 | |language | |----------------+-------+-----+--------------------------------| |haskell-platform|I:4 |12 |標準 Haskell ライブラリーとツー | | | | |ル | |----------------+-------+-----+--------------------------------| |gfortran |V:7, |16 |GNU Fortran 95 compiler | | |I:75 | | | |----------------+-------+-----+--------------------------------| |fpc |I:3 |102 |Free Pascal | +---------------------------------------------------------------+ Here, 「Flex — 改良版 Lex」 and 「Bison — 改良版 Yacc」 are     included to indicate how compiler-like program can be written in C language by compiling higher level description into C language. 12.3.1. C     C プログラム言語で書かれたプログラムをコンパイルする適正な環境を 次のようにして設定できます。     # apt-get install glibc-doc manpages-dev libc6-dev gcc build-essential GNU C ライブラリーパッケージである libc6-dev パッケージは、C プロ     グラム言語で使われるヘッダーファイルやライブラリールーチンの集合 である C 標準ライブラリーを提供します。     C のリファレンスは以下を参照下さい。 * "info libc" (C ライブラリー関数リファレンス) * gcc(1) と "info gcc"     * 各 C ライブラリー関数名(3) * Kernighan & Ritchie 著, "The C Programming Language", 第2版 (Prentice Hall) 12.3.2. 単純な C プログラム (gcc)     簡単な例の "example.c" は"libm" ライブラリーを使って実行プログラ ム "run_example" に次のようにしてコンパイル出来ます。 $ cat > example.c << EOF #include #include #include int main(int argc, char **argv, char **envp){ double x; char y[11]; x=sqrt(argc+7.5);     strncpy(y, argv[0], 10); /* prevent buffer overflow */ y[10] = '\0'; /* fill to make sure string ends with '\0' */ printf("%5i, %5.3f, %10s, %10s\n", argc, x, y, argv[1]); return 0; } EOF $ gcc -Wall -g -o run_example example.c -lm $ ./run_example 1, 2.915, ./run_exam, (null) $ ./run_example 1234567890qwerty 2, 3.082, ./run_exam, 1234567890qwerty ここで、"-lm" はsqrt(3) のために libc6 パッケージで提供されるライ     ブラリー "/usr/lib/libm.so" をリンクするのに必要です。実際のライ ブラリーは "/lib/" 中にあるファイル名 "libm.so.6" で、それは "libm-2.7.so" にシムリンクされています。     出力テキスト中の最後のパラメーターを良く見ましょう。"%10s" が指定 されているにもかかわらず10文字以上あります。 上記のオーバーラン効果を悪用するバッファーオーバーフロー攻撃を防     止のために、sprintf(3) や strcpy(3) 等の境界チェック無しのポイン ターメモリー操作関数の使用は推奨できません。これに代えて snprintf (3) や strncpy(3) を使います。 12.3.3. Flex — 改良版 Lex     Flex はLex 互換の高速字句解析生成ソフトです。     flex(1) の入門書は "info flex" の中にあります。 自分で作った "main()" と "yywrap()" を供給する必要があります。そ うでない場合にはあなたの flex プログラムは次のようでなければライ     ブラリー無しにコンパイル出来ません。これというのは "yywrap" はマ クロで、"%option main" とすると "%option noyywrap" が暗示的に有効 になるからです。 %option main     %% .|\n ECHO ; %% 上記の代わりにとして、cc(1) のコマンドラインの最後に (ちょうど AT     &T-Lex が"-ll" 付きであるように) "-lfl" リンカーオプションを使い コンパイルすることが出来ます。この場合、"%option" は必要なくなり ます。 12.3.4. Bison — 改良版 Yacc     Yacc 互換の前方参照可能な LR パーサーとか LALR パーサー生成ソフト は、いくつかのパッケージによって Debian 上で提供されています。 表12.11 Yacc 互換の LALR パーサー生成ソフトのリスト +----------------------------------------------------------------+ |パッケ |ポプコ |サイ| 説明 | | ージ | ン | ズ | | |-------+-------+----+-------------------------------------------| |bison |V:8, |3116|GNU LALR パーサー生成ソフト |     | |I:89 | | | |-------+-------+----+-------------------------------------------| |byacc |V:0, |258 |Berkeley LALR パーサー生成ソフト | | |I:5 | | | |-------+-------+----+-------------------------------------------| |btyacc |V:0, |243 |byacc に基づいたバックトラッキング機能付き | | |I:0 | |パーサー生成ソフト | +----------------------------------------------------------------+     bison(1) の入門書は "info bison" の中にあります。 あなた自身の "main()" と "yyerror()" を供給する必要があります。     "main()" は、しばしば Flex によって提供される "yylex()" を呼び出 す "yyparse()" を呼び出します。 %%     %% 12.4. 静的コード分析ツール     Lint like tools can help automatic static code analysis.     Indent like tools can help human code reviews by reformatting source codes consistently.     Ctags like tools can help human code reviews by generating an index (or tag) file of names found in source codes. ヒント Configuring your favorite editor (emacs or vim) to use     asynchronous lint engine plugins helps your code writing. These plugins are getting very powerful by taking advantage of Language Server Protocol. Since they are moving fast, using their upstream code instead of Debian package may be a good option. 表12.12 静的コード分析ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ |サイ | 説明 | | | ン | ズ | | |---------------+-------+-----+---------------------------------| |vim-ale |I:0 |2591 |Asynchronous Lint Engine for Vim | | | | |8 and NeoVim | |---------------+-------+-----+---------------------------------| |vim-syntastic |I:3 |1379 |Syntax checking hacks for vim | |---------------+-------+-----+---------------------------------| |elpa-flycheck |V:0, |792 |modern on-the-fly syntax checking| | |I:1 | |for Emacs | |---------------+-------+-----+---------------------------------| |elpa-relint |V:0, |133 |Emacs Lisp regexp mistake finder | | |I:0 | | | |---------------+-------+-----+---------------------------------| |cppcheck-gui |V:0, |6196 |静的 C/C++ コード分析ツール (GUI)| | |I:1 | | | |---------------+-------+-----+---------------------------------| |shellcheck |V:2, |18987|シェルスクリプトのリントツール | | |I:11 | | | |---------------+-------+-----+---------------------------------| |pyflakes3 |V:1, |24 |passive checker of Python 3 | | |I:14 | |programs | |---------------+-------+-----+---------------------------------| |pylint |V:5, |1976 |Python コード静的チェックソフト | | |I:17 | | | |---------------+-------+-----+---------------------------------| |perl |V:643, |669 |静的コードチェックソフト付きのイ | | |I:990 | |ンタープリタ: B::Lint(3perl) | |---------------+-------+-----+---------------------------------| |rubocop |V:0, |3247 |Ruby 静的コード分析ツール | | |I:0 | | |     |---------------+-------+-----+---------------------------------| |clang-tidy |V:1, |21 |clang-based C++ linter tool | | |I:8 | | | |---------------+-------+-----+---------------------------------| |splint |V:0, |2320 |C プログラムを静的にバグのチェッ | | |I:3 | |クするためのツール | |---------------+-------+-----+---------------------------------| |flawfinder |V:0, |205 |C/C++ ソースコードを検査してセキ | | |I:0 | |ュリティーの脆弱性を探すツール | |---------------+-------+-----+---------------------------------| |black |V:1, |557 |uncompromising Python code | | |I:8 | |formatter | |---------------+-------+-----+---------------------------------| |perltidy |V:0, |2338 |Perl スクリプトのインデントとリフ| | |I:4 | |ォーマット | |---------------+-------+-----+---------------------------------| |indent |V:0, |426 |C language source code formatting| | |I:10 | |program | |---------------+-------+-----+---------------------------------| |astyle |V:0, |761 |Source code indenter for C, C++, | | |I:3 | |Objective-C, C#, and Java | |---------------+-------+-----+---------------------------------| |bcpp |V:0, |111 |C(++) beautifier | | |I:0 | | | |---------------+-------+-----+---------------------------------| |xmlindent |V:0, |53 |XML ストリームリフォーマッタ | | |I:1 | | | |---------------+-------+-----+---------------------------------| |global |V:1, |1896 |ソースコードの検索と閲覧のツール | | |I:2 | | | |---------------+-------+-----+---------------------------------| |exuberant-ctags|V:3, |345 |build tag file indexes of source | | |I:26 | |code definitions | +---------------------------------------------------------------+ 12.5. デバグ デバッグはプログラミング活動において重要です。プログラムのデバッ     グ法を知ることで、あなたも意味あるバグリポートを作成できるような 良い Debian ユーザーになれます。 表12.13 デバッグパッケージのリスト +-----------------------------------------------------------+ |パッケージ| ポプコン |サイズ| 文書 |     |----------+-----------+------+-----------------------------| |gdb |V:12, I:102|10847 |gdb-doc が提供する "info gdb"| |----------+-----------+------+-----------------------------| |ddd |V:0, I:9 |4105 |ddd-doc が提供する "info ddd"| +-----------------------------------------------------------+ 12.5.1. 基本的な gdb 実行     Debian 上の第一義的デバッガは、実行中のプログラムを検査できるよう にする gdb(1) です。     gdb と関連プログラムを次のようにインストールしましょう。     # apt-get install gdb gdb-doc build-essential devscripts     gdb のよいチュートリアルについては以下を参照ください: * “info gdb”     * “Debugging with GDB” in /usr/share/doc/gdb-doc/html/gdb/ index.html * “ウェブ上のチュートリアル”     次は gdb(1) を"-g" を使ってデバッグ情報を付けてコンパイルされた "program" に使う簡単な例です。 $ gdb program (gdb) b 1 # set break point at line 1 (gdb) run args # run program with args (gdb) next # next line ...     (gdb) step # step forward ... (gdb) p parm # print parm ... (gdb) p parm=12 # set value to 12 ... (gdb) quit ヒント     多くの gdb(1) コマンドは省略できます。タブ展開はシェル同様に機能 します。 12.5.2. Debian パッケージのデバグ Since all installed binaries should be stripped on the Debian system by default, most debugging symbols are removed in the normal package. In order to debug Debian packages with gdb(1), *-dbgsym packages need to be installed (e.g. coreutils-dbgsym in     the case of coreutils). The source packages generate *-dbgsym packages automatically along with normal binary packages and those debug packages are placed separately in debian-debug archive. Please refer to articles on Debian Wiki for more information. デバッグしようとしているパッケージに*-dbgsym パッケージが無い場合     は、次のようにしてリビルドした後でインストールする必要があります 。 $ mkdir /path/new ; cd /path/new $ sudo apt-get update $ sudo apt-get dist-upgrade     $ sudo apt-get install fakeroot devscripts build-essential $ apt-get source package_name $ cd package_name* $ sudo apt-get build-dep ./     必要に応じてバグを修正します。 例えば次のように、既存パッケージを再コンパイルする時は "+debug1"     を後ろに付けたり、リリース前のパッケージをコンパイルする時は "~pre1" を後ろに付けたりと、正規の Debian バージョンとかち合わな いようにパッケージバージョンを増やします。     $ dch -i     次のようにしてデバグシンボル付きでパッケージをコンパイルしてイン ストールします。 $ export DEB_BUILD_OPTIONS="nostrip noopt"     $ debuild $ cd .. $ sudo debi package_name*.changes     パッケージのビルドスクリプトを確認して、バイナリーのコンパイルに 確実に "CFLAGS=-g -Wall" が使われているようにします。 12.5.3. バックトレースの収集     プログラムがクラッシュするのに出会った場合に、バックトレース情報 をバグレポートに切り貼りして報告するのは良い考えです。     The backtrace can be obtained by gdb(1) using one of the following approaches: * Crash-in-GDB approach: + GDB からプログラムを実行します。 + プログラムがクラッシュします。 + GDB プロンプトで "bt" と打ちます。 * Crash-first approach: + Update the “/etc/security/limits.conf” file to include the following:     * soft core unlimited + シェルプロンプトで "ulimit -c unlimited" と打ちます。 + このシェルプロンプトからプログラムを実行します。 + プログラムがクラッシュしてコアダンプファイルができます。 + Load the core dump file to GDB as "gdb gdb ./ program_binary core" . + GDB プロンプトで "bt" と打ちます。 For infinite loop or frozen keyboard situation, you can force to     crash the program by pressing Ctrl-\ or Ctrl-C or executing “kill -ABRT PID”. (See 「プロセスの停止」) ヒント しばしば、一番上数行が "malloc()" か "g_malloc()" 中にあるバック トレースを見かけます。こういったことが起こる場合は、大体あまりあ     なたのバックトレースは役に立ちません。有用な情報を見つけるもっと も簡単な方法は環境変数 "$MALLOC_CHECK_" の値を 2と設定することで す (malloc(3))。gdb を実行しながらこれを実行するには次のようにし ます。 $ MALLOC_CHECK_=2 gdb hello 12.5.4. 上級 gdb コマンド 表12.14 上級 gdb コマンドのリスト +---------------------------------------------------------------+ | コマンド | コマンド目的の説明 | |-------------------+-------------------------------------------| |(gdb) thread apply |マルチスレッドプログラムの全てのスレッドの | |all bt |バックトレースを取得 | |-------------------+-------------------------------------------| |(gdb) bt full |関数コールのスタック上に来たパラメーターを | | |取得 |     |-------------------+-------------------------------------------| |(gdb) thread apply |異常のオプションの組み合わせでバックトレー | |all bt full |スとパラメーターを取得 | |-------------------+-------------------------------------------| |(gdb) thread apply |無関係の出力を切り最後の10のコールに関する | |all bt full 10 |バックトレースとパラメーターを取得 | |-------------------+-------------------------------------------| |(gdb) set logging |gdb アウトプットをファイルに書き出す (デフ | |on |ォールトは "gdb.txt") | +---------------------------------------------------------------+ 12.5.5. ライブラリーへの依存の確認     次のように ldd(1) を使ってプログラムのライブラリーへの依存関係を みつけだします。 $ ldd /bin/ls librt.so.1 => /lib/librt.so.1 (0x4001e000)     libc.so.6 => /lib/libc.so.6 (0x40030000) libpthread.so.0 => /lib/libpthread.so.0 (0x40153000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)     `chroot` された環境下で ls(1) が機能するには、上記ライブラリーが あなたの `chroot` された環境内で利用可能である必要があります。     「プログラム活動の追跡」を参照下さい。 12.5.6. Dynamic call tracing tools     There are several dynamic call tracing tools available in Debian. See 「プログラム活動の監視と制御と起動」. 12.5.7. X エラーのデバグ     GNOME プログラム preview1 が X エラーを受けると、次のようなメッセ ージが見つかります。     The program 'preview1' received an X Window System error. このような場合には、プログラムを "--sync" 付きで実行して、バック     トレースを得るために "gdk_x_error" 関数上で停止するようにしてみま しょう。 12.5.8. メモリーリーク検出ツール     Debian にはメモリーリークを検出するプログラムがいくつか利用可能で す。 表12.15 メモリーリーク検出ツールのリスト +---------------------------------------------------------------+ | パッケージ |ポプコ|サイ | 説明 | | | ン | ズ | | |--------------+------+-----+-----------------------------------| |libc6-dev |V:244,|11954|mtrace(1): glibc 中の malloc デバッ| | |I:583 | |グ機能 | |--------------+------+-----+-----------------------------------| |valgrind |V:6, |77683|メモリーデバッガとプロファイラ | | |I:39 | | | |--------------+------+-----+-----------------------------------|     |electric-fence|V:0, |73 |malloc(3) デバッガ | | |I:4 | | | |--------------+------+-----+-----------------------------------| |libdmalloc5 |V:0, |393 |メモリーアロケーションのデバグ用ラ | | |I:3 | |イブラリー | |--------------+------+-----+-----------------------------------| | |V:0, | |C および C++ プログラムのバッファオ| |duma |I:0 |293 |ーバーランとアンダーランを検出する | | | | |ライブラリー | |--------------+------+-----+-----------------------------------| |leaktracer |V:0, |56 |C++ プログラム用のメモリーリーク追 | | |I:2 | |跡ソフト | +---------------------------------------------------------------+ 12.5.9. バイナリーのディスアッセンブリー     次のように objdump(1) を使ってバイナリーコードをディスアッセンブ ルできます。     $ objdump -m i386 -b binary -D /usr/lib/grub/x86_64-pc/stage1 注記     gdb(1) は対話的にコードをディスアッセンブルするのに使えます。 12.6. ビルドツール 表12.16 ビルドツールパッケージのリスト +---------------------------------------------------------------+ |パッケージ |ポプコン|サイ | 文書 | | | | ズ | | |-----------+--------+-----+------------------------------------| |make |V:138, |1592 |make-doc が提供する "info make" | | |I:576 | | | |-----------+--------+-----+------------------------------------| |autoconf |V:33, |2025 |autoconf-doc が提供する "info | | |I:259 | |autoconf | |-----------+--------+-----+------------------------------------| |automake |V:34, |1837 |automake1.10-doc が提供する "info | | |I:257 | |automake" | |-----------+--------+-----+------------------------------------|     |libtool |V:28, |1213 |libtool-doc が提供する "info | | |I:242 | |libtool" | |-----------+--------+-----+------------------------------------| |cmake |V:15, |28897|cmake(1) cross-platform, open-source| | |I:117 | |make system | |-----------+--------+-----+------------------------------------| |ninja-build|V:4, |417 |ninja(1) small build system closest | | |I:34 | |in spirit to Make | |-----------+--------+-----+------------------------------------| |meson |V:2, |3451 |meson(1) high productivity build | | |I:20 | |system on top of ninja | |-----------+--------+-----+------------------------------------| |xutils-dev |V:1, |1485 |imake(1), xmkmf(1), 他 | | |I:10 | | | +---------------------------------------------------------------+ 12.6.1. Make Make はプログラムのグループを管理するためのユーティリティーです。 make(1) を実行すると、make は"Makefile" というルールファイルを読     み、ターゲットが最後に変更された後で変更された前提ファイルにター ゲットが依存している場合やターゲットが存在しない場合にはターゲッ トを更新します。このような更新は同時並行的にされるかもしれません 。     ルールファイルのシンタックスは以下の通りです。 target: [ prerequisites ... ]     [TAB] command1 [TAB] -command2 # ignore errors [TAB] @command3 # suppress echoing 上記で、"[TAB]" は TAB コードです。各行は make による変数置換後シ     ェルによって解釈されます。スクリプトを継続する行末には "\" を使い ます。シェルスクリプトの環境変数のための "$" を入力するためには "$$" を使います。     ターゲットや前提に関するインプリシット (暗黙) ルールは、例えば次 のように書けます。     %.o: %.c header.h 上記で、ターゲットは "%" という文字を (1つだけ) 含んでいます。"%"     は実際のターゲットファイル名の空でないいかなる部分文字列ともマッ チします。前提もまた同様にそれらの名前が実際のターゲットファイル 名にどう関連するかを示すために "%" を用いることができます。 表12.17 make の自動変数のリスト +---------------------------------------------------+ |自動変数| 変数値 | |--------+------------------------------------------| |$@ |ターゲット | |--------+------------------------------------------|     |$< |最初の前提条件 | |--------+------------------------------------------| |$? |全ての新規の前提条件 | |--------+------------------------------------------| |$^ |全ての前提条件 | |--------+------------------------------------------| |$* |"%" はターゲットパターンの軸にマッチします| +---------------------------------------------------+ 表12.18 make 変数の展開のリスト +--------------------------+ | 変数展開 | 説明 | |-----------+--------------|     |foo1 := bar|一回だけの展開| |-----------+--------------| |foo2 = bar |再帰的展開 | |-----------+--------------| |foo3 += bar|後ろに追加 | +--------------------------+     "make -p -f/dev/null" を実行して自動的な内部ルールを確認下さい。 12.6.2. Autotools     Autotools is a suite of programming tools designed to assist in making source code packages portable to many Unix-like systems. * Autoconf is a tool to produce a shell script "configure" from "configure.ac". + "configure" is used later to produce "Makefile" from "Makefile.in" template.     * Automake is a tool to produce "Makefile.in" from "Makefile.am". * Libtool is a shell script to address the software portability problem when compiling shared libraries from source code. 12.6.2.1. プログラムをコンパイルとインストール 警告     システムファイルをあなたがコンパイルしたプログラムでインストール する時に上書きしてはいけません。 Debian は"/usr/local/" とか "/opt" 中のファイルに触れません。プロ     グラムをソースからコンパイルする場合、Debian とかち合わないように それを "/usr/local/" の中にインストールします。 $ cd src     $ ./configure --prefix=/usr/local $ make # this compiles program $ sudo make install # this installs the files in the system 12.6.2.2. プログラムのアンインストール オリジナルのソースを保有し、それが autoconf(1)/automake(1) と使用     しあなたがそれをどう設定したかを覚えているなら、次のように実行し てソフトウエアーをアンイストールします。     $ ./configure all-of-the-options-you-gave-it $ sudo make uninstall この代わりに、"/usr/local/" の下にだけインストールプロセスがファ     イルを置いたことが絶対に確実でそこに重要なものが無いなら、次のよ うにしてその内容を消すことが出来ます。     # find /usr/local -type f -print0 | xargs -0 rm -f If you are not sure where files are installed, you should     consider using checkinstall(8) from the checkinstall package, which provides a clean path for the uninstall. It now supports to create a Debian package with "-D" option. 12.6.3. Meson     The software build system has been evolving: * Autotools on the top of Make has been the de facto standard for the portable build infrastructure since 1990s. This is extremely slow. * CMake initially released in 2000 improved speed significantly but was still build on the top of inherently slow Make.     * Ninja initially released in 2012 is meant to replace Make for the further improved build speed but is also designed to have its input files generated by a higher-level build system. * Meson initially released in 2013 is the new popular and fast higher-level build system which uses Ninja as its backend.     See documents found at "The Meson Build system" and "The Ninja build system". 12.7. ウェッブ     基本的な対話式動的ウェッブページは次のようにして作られます。 * 質問 (クエリー) はブラウザーのユーザーに HTML フォームを使っ て提示されます。 * フォームのエントリーを埋めたりクリックすることによって次の符 号化されたパラメーター付きの URL 文字列をブラウザーからウェッ ブサーバーに送信します。 + "http://www.foo.dom/cgi-bin/program.pl?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3" + "http://www.foo.dom/cgi-bin/program.py?VAR1=VAL1&VAR2= VAL2&VAR3=VAL3"     + "http://www.foo.dom/program.php?VAR1=VAL1&VAR2=VAL2&VAR3= VAL3" * URL 中の "%nn" は16進数で nn の値の文字と置き換えられます。 * 環境変通は次のように設定されます: "QUERY_STRING="VAR1=VAL1 VAR2=VAL2 VAR3=VAL3"". * ウェッブサーバー上の CGI プログラム ("program.*" のいずれで も) が環境変数 "$QUERY_STRING" とともに起動されます。 * CGI プログラムの STDOUT (標準出力) がウエブブラウザーに送られ 対話式の動的なウェッブページとして表示されます。 セキュリティー上、CGI パラメーターを解釈する手作りの急ごしらえの プログラムは作らない方が賢明です。Perl や Python にはこのための確     立したモジュールが存在します。PHP はこの様な機能とともに提供され ます。クライアントでのデーターのストレージの必要がある場合、HTTP クッキーが使われます。クライアントサイドのデーター処理が必要な場 合、Javascript が良く使われます。     詳しくは、Common Gateway Interface や The Apache Software Foundation や JavaScript を参照下さい。 http://www.google.com/search?hl=en&ie=UTF-8&q=CGI+tutorial を URL     として直接ブラウザーのアドレスに入れ Google で"CGI tutorial" を検 索するとグーグルサーバー上の CGI スクリプトが動いているのを観察す る良い例です。 12.8. ソースコード変換     ソースコード変換するプログラムがあります。 表12.19 ソースコード変換ツールのリスト +---------------------------------------------------------------+ |パッケー |ポプコ|サ |キーワー | | | ジ | ン |イ | ド | 説明 | | | |ズ | | | |---------+------+---+---------+--------------------------------| |perl |V:643,|669|AWK→PERL |AWK から PERL へのソースコード変|     | |I:990 | | |換シフト: a2p(1) | |---------+------+---+---------+--------------------------------| |f2c |V:0, |442|FORTRAN→C|FORTRAN 77 から C/C++ へのソース| | |I:4 | | |コード変換ソフト: f2c(1) | |---------+------+---+---------+--------------------------------| | |V:0, | | |NASM (Intel フォーマット) から | |intel2gas|I:0 |178|intel→gas|GNU Assembler (GAS) への変換ソフ| | | | | |ト | +---------------------------------------------------------------+ 12.9. Debian パッケージ作成     Debian パッケージを作りたい場合には、次を読みましょう。 * 基本的なパッケージシステムの理解には2章Debian パッケージ管理 * 基本的なポーティングプロセスの理解のために、「安定版システム へのパッケージ移植」 * 基本的な chroot 技術の理解のために、「Chroot システム」 * debuild(1), and sbuild(1)     * リコンパイルとデバグは「Debian パッケージのデバグ」 * Guide for Debian Maintainers (debmake-doc パッケージ) * Debian Developer's Reference (developers-reference パッケー ジ) * Debian ポリシーマニュアル (debian-policy パッケージ)     debmake や dh-make や dh-make-perl 等のパッケージングを補助するパ ッケージがあります。 付録A 補遺     以下が本文書の背景です。 A.1. Debian 迷路 Linux システムはネットワーク化されたコンピューターのための非常に パワフルなコンピュータープラットフォームです。しかし、Linux の全     能力を利用する方法を学ぶことはたやすいことではありません。非 PostScript プリンタが接続された LPR プリンタの設定がこんなつまず く点の良い例でした。(最近のインストレーションでは CUPS システムが 使われるのでもうこの様な問題はありません。) "ソースコード" という完全かつ詳細なマップが存在します。これは非常 に正確ですが理解することが難しいものです。また、HOWTO や     mini-HOWTO と呼ばれるリファレンスもあります。これらは理解はしやす いのですが、詳細過ぎて全体像を失いがちです。ちょっとコマンドを実 行する必要がある時に、長大な HOWTO の該当する章を探すのには骨が折 れることが時々あります。 この "Debian リファレンス (第2.99版)" (2023-01-24 06:15:51 UTC)     が Debian 迷路の真っ只中にいる皆様にとって解決の糸口となることを 望みます。 A.2. 著作権の経緯 Debian リファレンスは青木修 が個人用シ     ステム管理メモとして書き始められました。多くの内容が debian-user メーリングリストや他の Debian のリソースから得られた知識由来です 。 当時 Debian Documentation Project で非常にアクティブであった、     Josip Rodin 氏の助言に従い、 DDP 文書の一部として "Debian リファ レンス (第1版、2001-2007)"を作りました。 6年経った時点で、青木はオリジナルの "Debian リファレンス (第1版)"     が時代遅れとなっている事に気づき多くの内容を書き換え始めました。 新たな "Debian リファレンス (第2版)" が2008年にリリースされました 。 I have updated "Debian Reference (version 2)" to address new topics (Systemd, Wayland, IMAP, PipeWire, Linux kernel 5.10) and     removed outdated topics (SysV init, CVS, Subversion, SSH protocol 1, Linux kernels before 2.5). References to Jessie 8 (2015-2020) release situation or older are mostly removed. This "Debian Reference (version 2.99)" (2023-01-24 06:15:51 UTC)     covers mostly Bullseye (=stable) and Bookworm (=testing) Debian releases.     チュートリアルの内容はその内容とインスピレーションを次から得まし た。 * "Linux User's Guide" Larry Greenfield 著 (1996年12月) + "Debian Tutorial" によって陳腐化 * "Debian Tutorial" Havoc Pennington 著。 (1998年12年11日) + Oliver Elphick と Ole Tetlie と James Treacy と Craig     Sawyer と Ivan E. Moore II による一部著作 + "Debian GNU/Linux: Guide to Installation and Usage" によ って陳腐化 * "Debian GNU/Linux: Guide to Installation and Usage" John Goerzen and Ossama Othman 著(1999年) + "Debian リファレンス (第1版)" によって陳腐化     パッケージやアーカイブに関する記述はそのオリジンやインスピレーシ ョンの一部を次に遡ることができます。     * "Debian FAQ" (Josip Rodin が維持していた 2002年3月版)     他の内容はそのオリジンやインスピレーションを次に遡ることができま す。 * "Debian リファレンス (第1版)" 青木修著 (2001年〜2007年)     + 2018年のより新しい "Debian リファレンス (第2版)" によって 陳腐化     以前の "Debian リファレンス (第1版)" は次によって作られました。 * ネットワーク設定に関する大部分の内容は Thomas Hood が寄稿 * X と VCS に関連するかなりの内容は Brian Nelson が寄稿     * ビルドスクリプトや多くの内容に関する訂正で Jens Seidel が寄与 * David Sewell による徹底的な校正 * 翻訳者やコントリビューターやバグ報告者達による多くの寄与 Many manual pages and info pages on the Debian system as well as upstream web pages and Wikipedia documents were used as the primary references to write this document. To the extent Osamu     Aoki considered within the fair use, many parts of them, especially command definitions, were used as phrase pieces after careful editorial efforts to fit them into the style and the objective of this document. gdb デバッガーに関する記述は Arii Pollak と Loïc Minier と Dafydd     Harries の了承のもと backtrace に関する Debian wiki の内容を拡張 して使いました。 既に上記で触れた項目を除く現在の "Debian リファレンス (第2.99版)"     (2023-01-24 06:15:51 UTC) の内容はほとんど私自身の仕事です。これ らはコントリビュータ−によっても更新されています。     "Debian リファレンス (第1版)" は、角田慎一さんがすべて日本語訳し ました。 "Debian リファレンス (第2版)" は、英文原著者の青木修自身がすべて を日本語訳しました。その際に "Debian リファレンス (第1版)" から内     容が比較的変更されていない「第1章 GNU/Linux チュートリアル」等で は、角田さんの旧訳文を青木が文体や内容を調整した上で一部再利用さ せて頂きました。     著者である青木修は本文書を世に送ることにご助力戴いた皆様に感謝い たします。 A.3. 文書のフォーマット The source of the English original document is currently written     in DocBook XML files. This Docbook XML source are converted to HTML, plain text, PostScript, and PDF. (Some formats may be skipped for distribution.)