第18章 特殊なシステム機能

目次

18.1. 特殊なソフトウエアパッケージに関する情報
18.2. 仮想コンソール
18.3. キーボードマッピング
18.4. 言語と国の設定

概要

本章では、仮想コンソールやキーボードレイアウトに関する、様々なソフトウエア パッケージに関する情報を提供しています。それぞれ bash, cron, logrotate などのソフトウエア コンポーネントに関して言及していますが、これらは以前のリリース版から変更されたり 拡張されたりしているものであるためです。それらの変更が小規模であったり、 重要度の低いものであったりした場合でも、これらのコンポーネントはシステムと 強い結びつきがあるため、ユーザ側で既定の振る舞いを変更したい場合があります。 また本章では、言語や国固有の設定 (I18N や L10N と呼ばれるもの) にも言及して います。

18.1. 特殊なソフトウエアパッケージに関する情報

システム管理者や多くのユーザにとって、 The programs bash, cron, logrotate, locate, ulimit, free などのプログラムはとても 重要な存在です。またマニュアルページや info ページは、それぞれコマンドに 関する情報源になっていますが、両方が常に利用できるというわけではありません。 また、 GNU Emacs は有名かつとても機能に富んだテキストエディタです。

18.1.1. bash パッケージと /etc/profile

bash は既定のシステムシェルです。ログインシェルとして使用した場合は、 いくつかの初期化ファイルを読み込みます。また、 bash は下記の順序で ファイルを読み込みます:

  1. /etc/profile

  2. ~/.profile

  3. /etc/bash.bashrc

  4. ~/.bashrc

カスタムな設定は、 ~/.profile または ~/.bashrc のいずれかに対して行ないます。これらの ファイルを正しく処理するようにするには、それぞれ /etc/skel/.profile ファイルや /etc/skel/.bashrc ファイルを、ユーザのホーム ディレクトリにコピーしてください。また、システム更新を行なった後は、 /etc/skel から設定をコピーすることをお勧めします。 なお、下記のように実行すると、個人の設定を失わずに済みます:

mv ~/.bashrc ~/.bashrc.old
cp /etc/skel/.bashrc ~/.bashrc
mv ~/.profile ~/.profile.old
cp /etc/skel/.profile ~/.profile

上記のように実行した後、それぞれ個人の設定を *.old ファイルから反映し直してください。

18.1.2. cron パッケージ

事前に設定した時刻にコマンドを定期的かつ自動的に裏で実行させたい場合は、 cron を使うのが便利です。 cron は専用のタイムテーブル設定を持っていて、 システムで設定されているものが存在するほか、必要であればユーザ側でも設定を 行なうことができます。

cron のタイムテーブルは、 /var/spool/cron/tabs ディレクトリ内に存在します。また、 /etc/crontab には システム全体に反映される cron テーブルが書かれています。このファイルの場合は タイムテーブルとコマンドの間に、コマンドを直接実行させたいユーザのユーザ名を 入力します。 例18.1「/etc/crontab の項目」 の例では root が入力されています。 なお、パッケージ固有のタイムテーブルは /etc/cron.d ファイル内に存在していて、上記と同様の書式になっています。詳しくは /etc/cron.d ファイルのマニュアルページ (man cron) をお読みください。

例18.1 /etc/crontab の項目

1-59/5 * * * *   root   test -x /usr/sbin/atrun && /usr/sbin/atrun

なお、 crontab -e コマンドでは /etc/crontab ファイルを編集することはできません。このファイルはエディタで直接開いて編集し、 保存しなければなりません。

また、 /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly の各ディレクトリには、多数のパッケージがシェルスクリプトをインストールします。 これらの動作は /usr/lib/cron/run-crons が制御しています。 /usr/lib/cron/run-crons は、メインテーブル (/etc/crontab) で定義されているもので、 15 分間隔で 動作するように設定されています。そのため、実行されずに無視されるかもしれない 処理であっても、適切な日時に実行されるようになっています。

毎時間毎日 などの ように、定期的にメンテナンススクリプトを実行したい場合は、 /etc/crontab の項目を利用してタイムスタンプを 定期的に除去してください (例18.2「/etc/crontab: タイムスタンプファイルの除去」 の例では、毎正時になる前に hourly ファイルを削除したり、 毎日午前 2:14 に daily ファイルを削除したりしています) 。

例18.2 /etc/crontab: タイムスタンプファイルの除去

59 *  * * *     root  rm -f /var/spool/cron/lastrun/cron.hourly
14 2  * * *     root  rm -f /var/spool/cron/lastrun/cron.daily
29 2  * * 6     root  rm -f /var/spool/cron/lastrun/cron.weekly
44 2  1 * *     root  rm -f /var/spool/cron/lastrun/cron.monthly

もしくは、 cron.daily が開始する時刻を、 /etc/sysconfig/cron ファイル内の DAILY_TIME から設定することもできます。また、 MAX_NOT_RUN の設定を行なうと、 DAILY_TIME で指定した時刻に長時間コンピュータの電源を入れていなかった場合でも、毎日 処理するタスクを処理するようになります。 MAX_NOT_RUN で指定できる最大値は 14 日です。 DAILY_TIME for a longer period of time. The maximum value of MAX_NOT_RUN is 14 days.

システムメンテナンスジョブは、それらをわかりやすくするために、複数のスクリプト として配布されています。これらは aaa_base パッケージ内に含まれています。たとえば /etc/cron.daily には、 suse.de-backup-rpmdb, suse.de-clean-tmp, suse.de-cron-local が含まれています。

18.1.3. ログファイル: logrotate パッケージ

システムサービス (デーモン) には多くの種類があり、 カーネルそれ自身のほか、システム状態を規則正しく記録したり、固有のイベントを 記録したりなどの処理をログファイルに行ないます。そのため、管理者は定期的に その時点でのシステムの状態を確認できることになり、機能のエラーや失敗などを 認識し、ピンポイントの精度でトラブルを解決することができます。 これらのログファイルは通常、 FHS で規定されている /var/log ディレクトリ内に保存され、日々増加していく形になります。 logrotate パッケージは、これらのファイルの増加を コントロールするための手助けを行ないます。

logrotate の設定は、 /etc/logrotate.conf で行ないます。また、 include を指定すると、読み込むべき追加のファイルを 指定することができます。ログファイルを生成するプログラムは、 /etc/logrotate.d 内に個別の設定ファイルを生成します。 上記のような設定を生成するものとして、たとえば apache2 (/etc/logrotate.d/apache2) や syslogd (/etc/logrotate.d/syslog) などがあります。

例18.3 /etc/logrotate.conf の設定例

# 詳細は "man logrotate" をお読みください
# ログファイルを週単位で切り替える
weekly

# 4 週間分までの過去分を保存する
rotate 4

# 古いログファイルに切り替わったら、新しい (中身のない) ログファイルを生成する
create

# ログファイルを圧縮しておきたい場合、下記の行のコメントを外してください
#compress

# RPM パッケージは下記のディレクトリにログ切り替え情報を配置する
include /etc/logrotate.d

# lastlog や wtmp はパッケージ管理外であるため、独自に切り替える
#/var/log/wtmp {
#    monthly
#    create 0664 root utmp
#    rotate 1
#}

# システム固有のログは下記で設定します

logrotate は cron でコントロールするもので、毎日 /etc/cron.daily/logrotate から呼び出されます。

[Important]

create オプションは、 /etc/permissions* ファイル内に管理者が作成した 全ての設定を読み込みます。独自の修正を行なった場合は、矛盾が生じないように ご注意ください。

18.1.4. locate コマンド

locate コマンドはファイルを素早く検索するためのコマンドで、 標準インストールの範囲には含まれていません。必要であれば findutils-locate パッケージをインストールしてください。 また、 updatedb プロセスは毎晩または起動後 15 分経過すると、自動的に開始されます。

18.1.5. ulimit コマンド

ulimit (user limits (ユーザ制限)) コマンドを利用すると、システム資源の使用について制限を設定することができるほか、 設定内容を表示させることができます。 ulimit は特に、 アプリケーションに対するメモリ制限を設定するのに便利です。アプリケーションが システム資源を多く使いすぎることを防ぎ、オペレーティングシステムがスローダウン したりハングアップしたりすることを防ぐことができます。

ulimit コマンドには様々なオプションを指定することができます。 メモリの使用量を制限したい場合は、 表18.1「ulimit: ユーザに対する資源設定」 にあるオプションをお使いください。

表18.1 ulimit: ユーザに対する資源設定

-m

最大常駐セットサイズ

-v

シェルに対して解放する仮想メモリの最大値

-s

スタックの最大サイズ

-c

作成するコアファイルの最大サイズ

-a

現在の制限全てを表示


システム全体の設定は、 /etc/profile に指定することが できます。ここではコアファイルの生成 (デバッグ 目的で プログラマが必要とするもの) を有効にしています。通常のユーザは、システム管理者が /etc/profile で設定した値を増やすことができませんが、 独自の設定を ~/.bashrc で指定することができます。

例18.4 ulimit: ~/.bashrc 内の設定

# 最大常駐セットサイズ (物理メモリ):
ulimit -m 98304
 
# 仮想メモリの制限:
ulimit -v 98304

メモリの割り当ては KB (キロバイト) 単位で指定しなければなりません。 詳しい情報は、 man bash をお読みください。

[Important]

全てのシェルが ulimit に対応しているわけではありません。 PAM (たとえば pam_limits) では、これらの制限を含む 広範囲の機能を提供しています。

18.1.6. free コマンド

free コマンドは、どれだけの RAM が現在使用中であるかを 調べる目的であるように間違えるという意味で、誤解を生んでいます。そのような 情報は /proc/meminfo から調べることができます。 現在では、 Linux のような構造の新しいオペレーティングシステムにアクセスしている ユーザが、メモリについて心配する必要はありません。このような 利用可能な RAM という考え方は、統合的なメモリ管理を行なうよりも前に存在した 考え方です。 空きメモリは無駄なメモリ の発想は Linux にも当てはまるもので、その結果として Linux は空きまたは未使用のメモリを生じ させずにキャッシュのバランスをとる動作を行なっています。

基本的にカーネルはアプリケーションやユーザデータに関する直接の知識は持って いません。その代わり、アプリケーションやユーザデータを ページキャッシュ 内で管理しています。メモリが不足しはじめると、それらの一部は それらがもともと mmap コマンド経由で読み込んでいた スワップパーティションやファイルに書き込まれるようになります (詳しくは man mmap をお読みください) 。

また、カーネルには上記以外のキャッシュ機能があります。たとえばネットワーク アクセスのキャッシュ情報を保存する slab キャッシュ などがあります。これは /proc/meminfo 内のカウンタ 間の違いを説明するもので、それらの多く (ただし全てではありません) は /proc/slabinfo からアクセスすることができます。

18.1.7. マニュアルページと info ページ

いくつかの GNU アプリケーション (たとえば tar など) では、マニュアルページの メンテナンスが行なわれていないものがあります。これらのコマンドの場合は、 より詳しい手順の書かれている info ページの概要を、 --help オプションで得ることができます。 info ページは GNU のハイパーテキストシステム です。 info ページ自身の情報については、 info info と入力することで表示することができます。 info ページは emacs から emacs -f info と入力する ことで閲覧できるほか、 info と入力することで直接読むことも できます。これ以外にも tkinfo, xinfo やヘルプシステムを利用して閲覧することも できます。

18.1.8. man コマンドを利用したマニュアルページの選択

man マニュアルページ と入力 すると、通常はマニュアルページを直接読むことができます。ただし現在は、異なる セクションで同じ名前のマニュアルページが存在した場合、 man はユーザに対して、どのセクションを読むのかを問い合わせるようになっています。 ユーザが必要なセクションを入力することで、該当のマニュアルページが表示されます。

従来のような動作に戻したい場合は、 ~/.bashrc などの シェル初期化ファイルに対し、 MAN_POSIXLY_CORRECT=1 を 設定してください。

18.1.9. GNU Emacs の設定

GNU Emacs は複雑な作業環境です。本章では、 GNU Emacs が起動する際に処理される 設定ファイルについて述べています。本章よりも詳しい情報については、 http://www.gnu.org/software/emacs/ をご利用ください。

Emacs は起動時にいくつかのファイルを読み込み、ユーザやシステム管理者、もしくは ディストリビュータのカスタマイズや事前設定を反映します。設定ファイル ~/.emacs/etc/skel から それぞれのユーザのホームディレクトリにインストールされます。 また .emacs は、 /etc/skel/.gnu-emacs を読み出す構成になっています。プログラムをカスタマイズするには、 .gnu-emacs ファイルをホームディレクトリにコピー (cp /etc/skel/.gnu-emacs ~/.gnu-emacs) し、必要な 設定を記入してください。

.gnu-emacs~/.gnu-emacs-custom ファイルを、 カスタムファイル として定義しています。 Emacs 内で customize (カスタマイズ) オプションを利用して 設定を行なうと、それらは ~/.gnu-emacs-custom 内に保存されます。

openSUSE では、 emacs パッケージは /usr/share/emacs/site-lisp 内に site-start.el ファイルをインストールします。 このファイルは、 ~/.emacs の初期化ファイルよりも先に 読み込まれるため、その他のスクリプトとあわせて、 Emacs のアドオンパッケージ (たとえば psgml) とともに配布される、 特別な設定ファイルを自動で読み込むことができるようになっています。この種類の 設定ファイルは /usr/share/emacs/site-lisp にも含まれ、 suse-start- で始まるファイル名になっています。ローカルの システム管理者は、システム全体の設定を default.el で 指定することができるようになっています。

これらのファイルについてさらに詳しい情報は、 Emacs の info ファイル内、 Init File 以下にあります: info:/emacs/InitFile これらのファイルの (必要に応じて) 読み込みを無効化するための情報についても、 この場所に書いてあります。

Emacs のコンポーネントは、複数のパッケージに分割されています:

  • emacs: 基本パッケージ。

  • emacs-x11: X11 対応 のプログラム (通常インストールされます) 。

  • emacs-nox: X11 に対応していない プログラム。

  • emacs-info: info フォーマットで書かれたオンラインドキュメント。

  • emacs-el: Emacs Lisp 形式の非コンパイルライブラリファイル。 実行に際して必要となるものではありません。

  • emacs-auctex (LaTeX), psgml (SGML と XML), gnuserv (クライアント およびサーバ動作) など: 必要に応じて様々なアドオンパッケージをインストールできます。

18.2. 仮想コンソール

Linux はマルチユーザ・マルチタスクのシステムです。これらの機能はスタンドアロンの PC システムであっても便利なもので、テキストモードで 6 つの仮想コンソールが 利用できるようになっています。それぞれは Alt+F1 から Alt+F6 までを利用して切り替えることができます。 7 番目のコンソールは X システム用に予約されているもので、 10 番目のコンソールは カーネルのメッセージを表示するためのものです。 /etc/inittab ファイルを編集することで、コンソールの割り当てを増やしたり減らしたりすることが できます。

X システムをシャットダウンせずにコンソールを切り替えたい場合は、 Ctrl+Alt+F1 から Ctrl+Alt+F6 までの範囲でキーを押してください。 X システムに戻るには、 Alt+F7 を押します。

18.3. キーボードマッピング

各プログラムによるキーボードマッピング機能を標準化するため、それぞれ下記の ファイルに変更を行ないます:

/etc/inputrc
/etc/X11/Xmodmap
/etc/skel/.emacs
/etc/skel/.gnu-emacs
/etc/skel/.vimrc
/etc/csh.cshrc
/etc/termcap
/usr/share/terminfo/x/xterm
/usr/share/X11/app-defaults/XTerm
/usr/share/emacs/バージョン/site-lisp/term/*.el

これらの変更は terminfo の項目を使用する アプリケーションにだけ影響し、設定ファイルを直接変更する場合 (vi, emacs など) にのみ影響があります システムに同梱されていないアプリケーションは、これらの既定値には 影響されません。

X 環境下では、コンポーズキー (マルチキー) は /etc/X11/Xmodmap に説明されているとおりの方法で 有効にすることができます。

さらなる設定は、 X キーボード拡張 (XKB) を使用することで実現できます。 この拡張は GNOME (gswitchit) や KDE (kxkb) でも使用されています。

[Tip]さらなる情報

XKB に関する詳しい情報は、 /usr/share/doc/packages/xkeyboard-config ファイル (xkeyboard-config パッケージ内) に示されている 文書をお読みください。

18.4. 言語と国の設定

システムはかなり広い範囲で国際化対応が行なわれているため、各言語や国の 要件に合わせて自由に設定することができます。言い換えれば、国際化 (I18N) を行なうことが地域化 (L10N) にもつながるということになります。それぞれ I18N と L10N は、それぞれの 単語の始めと終わりの文字を示し、その間に省略された文字数を入れるという 省略表現です (I18N = Internationalization, L10N = Localization)。

それぞれの国際化設定は、 /etc/sysconfig/language ファイル内にある LC_ で始まる変数に設定を行なう ことで実現します。これらの変数では 各国語対応 だけ でなく、 メッセージ (翻訳), 文字セット , 並べ替え順序, 日付と時刻 , 数字, 通貨 などの 領域にも適用されます。それぞれの分野は個別の変数を使用して別々に指定を 行なうこともできますし、ファイル language から 間接的に指定することもできます (詳しくは locale の マニュアルページをお読みください) 。

RC_LC_MESSAGES (メッセージ), RC_LC_CTYPE (文字分類), RC_LC_COLLATE (文字照合), RC_LC_TIME (日付と時刻), RC_LC_NUMERIC (数値), RC_LC_MONETARY (通貨)

これらの変数は RC_ の接頭辞を抜いた形で シェルに渡され、それぞれの範囲に適用されます。なお、関連するシェル プロファイルは下記に示しています。また、現在の設定は locale コマンドで表示できます。

RC_LC_ALL

この変数が設定されていれば、上記で説明した変数はそれぞれ上書き されます。

RC_LANG

上記の変数がいずれも設定されていない場合は、これが次点の候補と なります。既定では RC_LANG だけが設定 されます。この変数は、それぞれ個別に設定するよりも簡単に利用 できるようにするために設けられています。

ROOT_USES_LANG

yes または no の値を設定する 変数です。 no に設定した場合は、 root ユーザは常に POSIX 環境で作業を行なうことになります。

また、これらの値は YaST sysconfig エディタから設定することもできます (詳しくは 16.3.1項 「YaST sysconfig エディタを利用したシステム設定の変更」 をお読みください) 。 値として設定する内容には、言語コードのほか国コードやエンコーディング、 修飾子などを入れることができます。それぞれの要素はそれぞれ特殊文字で 下記のようにつなぎます:

  LANG=<言語>[[_<国>].<エンコーディング>[@<修飾子>]]

18.4.1. いくつかの例

言語と国については常にセットで指定してください。言語には ISO 639 に 準拠した値を設定します。詳しくは http://www.evertype.com/standards/iso639/iso639-en.htmlhttp://www.loc.gov/standards/iso639-2/ をお読みください。 国については ISO 3166 に準拠した値を設定します。詳しくは http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html をお読みください。

なお、設定可能な値の組み合わせについては、 /usr/lib/locale ディレクトリ内をご覧ください。このディレクトリ以下のサブディレクトリとして それぞれ設定可能な組み合わせが存在しています。また、追加の説明ファイルに ついては、 localedef コマンドを使用することで /usr/share/i18n ディレクトリ以下のファイルから作成する ことができます。説明ファイルは glibc-i18ndata パッケージの構成の一部です。たとえば en_US.UTF-8 (アメリカ英語) 向けの説明ファイルを作成するには、下記のように入力します:

localedef -i en_US -f UTF-8 en_US.UTF-8
LANG=en_US.UTF-8

上記は、インストール時にアメリカ英語を選択した場合に設定される言語の 既定値です。他の言語を選択した場合は、その選択した言語に合わせて 設定が作成されますが、 UTF-8 については常に有効になります。

LANG=en_US.ISO-8859-1

上記は言語を英語に、国をアメリカに設定し、文字セットを ISO-8859-1 に設定した場合の例です。この文字セットでは ユーロ記号に対応していませんが、 UTF-8 に対応して いないプログラムを動作させる場合には便利な設定です。文字セットの定義 文字列 (この場合は ISO-8859-1) は、 emacs などの プログラム側で処理されます。

LANG=en_IE@euro

上記の例は、言語設定にユーロ記号を含めるよう明示的に設定している例です。 この設定は、既に UTF-8 ではユーロ記号が含まれることから、古い表現です。 この設定は ISO-8859-15 に対応していて UTF-8 には対応していない アプリケーションを動作させる場合にのみ有効です。

また、 SuSEconfig は /etc/sysconfig/language 内にある変数を読み込み、 必要な変更があれば /etc/SuSEconfig/profile/etc/SuSEconfig/csh.cshrc にそれぞれ書き込みを 行ないます。 /etc/SuSEconfig/profile ファイルは /etc/profile から読み込まれたり ソースファイルとして指定されたり します。 また、 /etc/csh.cshrc からは /etc/SuSEconfig/csh.cshrc を読み込みます。 これにより、設定をシステム全体に行き渡らせることができるように なっています。

なお、ユーザ側でも自分用の設定を行なうことができます。これを行なうには、 ~/.bashrc に設定を行なってください。たとえば システム側で設定されている en_US をプログラムの メッセージ表示に使いたくない場合は、上記のファイルに LC_MESSAGES=es_ES という行を追加すると、 メッセージはスペイン語で表示されるようになります。

18.4.2. ~/.i18n 内でのロケール設定

お使いのシステム言語設定の既定値に満足できない場合は、 bash スクリプトの 書式で ~/.i18n ファイルを作成することで、設定を変更 することができます。 ~/.i18n ファイルは、 /etc/sysconfig/language ファイルにあるシステムの 既定値を上書きすることができます。それぞれ RC_ の 接頭辞を抜いて変数を指定してください。たとえば RC_LANG を上書きしたい場合は、 LANG と指定して下記のように 指定します:

LANG=cs_CZ.UTF-8
LC_COLLATE=C

18.4.3. 言語サポートの設定

メッセージ のファイル分類では、決まり事として 関連する言語ディレクトリ (たとえば en) だけを次点 候補として利用します。たとえば LANGen_US に設定している環境の場合、メッセージファイルが /usr/share/locale/en_US/LC_MESSAGES 内に存在 しなかったときは、 /usr/share/locale/en/LC_MESSAGES ファイルを次点候補とします。

言語の候補は自由に設定することができます。たとえばブルトン語が存在すれば そのメッセージを表示し、存在しない場合はフランス語で表示したい場合は下記 のようになります:

LANGUAGE="br_FR:fr_FR"

また、ガリシア語/スペイン語/ポルトガル語の順で表示したい場合は下記の ように設定します:

LANGUAGE="gl_ES:es_ES:pt_PT"

また必要であれば、ノルウェー語のニーノシュクとブークモールを試すような 設定を行なうこともできます (さらなる候補として no も 指定しています):

LANG="nn_NO"

LANGUAGE="nn_NO:nb_NO:no"

または

LANG="nb_NO"

LANGUAGE="nb_NO:nn_NO:no"

なお、ノルウェー語では LC_TIME もそれぞれ別々に 扱われます。

なお、このような設定を利用する場合には 1 つだけ問題が発生する可能性が 考えられます。それは、文字間を区切るセパレータ (区切り子) の存在です。 たとえば LANG 変数に 2 文字の言語コードだけを 指定したような場合 (例: de) 、 glibc が使用する定義 ファイルが /usr/share/lib/de_DE/LC_NUMERIC のような ディレクトリに置かれていると、読み出すことができなくなってしまいます。 この場合は、 LC_NUMERICde_DE のような指定を行なってください。

18.4.4. さらなる情報

  • The GNU C Library Reference Manual 内の Locales and Internationalization 章をお読みください。 この文書は glibc-info パッケージに含まれています。

  • http://www.cl.cam.ac.uk/~mgk25/unicode.html から 参照できる、 Markus Kuhn 氏による UTF-8 and Unicode FAQ for Unix/Linux

  • howto パッケージ に含まれる、 Bruno Haible 氏 による Unicode-Howto (/usr/share/doc/howto/en/txt/Unicode-HOWTO.gz)