第10章 特別なシステム機能

目次

10.1. 特殊ソフトウェアパッケージ
10.2. バーチャルコンソール
10.3. キーボードマッピング
10.4. 言語および国固有の設定

概要

この章では、まず、さまざまなソフトウェアパッケージ、バーチャルコンソール、およびキーボードレイアウトについて説明します。bashcron、およびlogrotateといったソフトウェアコンポーネントについても説明します。これらは、前回のリリースサイクルで変更または強化されたからです。これらのコンポーネントはそれほど重要ではないと思われるかもしれませんが、システムと密接に結びついているものなので、デフォルトの動作を変更したい場合もあることでしょう。この章の最後では、言語および国固有設定(I18NおよびL10N)について説明します。

10.1. 特殊ソフトウェアパッケージ

bashcronlogrotatelocateulimitfreeといったプログラムは、システム管理者および多くのユーザにとって非常に重要です。manのページとinfoのページは、コマンドについての2つの役立つ情報源ですが、その両方が常に利用できるとは限りません。GNU Emacsは、人気のある、自由度に設定できるテキストエディタです。

10.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ファイルから書き戻します。

10.1.2. cronパッケージ

コマンドを、前もって決めた時間に、定期的かつ自動的にバックグラウンドで実行したい場合、cronを用います。cronは特別な形式のタイムテーブルに従って起動します。その一部はシステムに付属しています。ユーザは必要に応じ、独自のテーブルを作成できます。

cronテーブルは、/var/cron/tabsにあります。/etc/crontabはシステム全体のcronテーブルとして機能します。ユーザ名を入力して、タイムテーブルの後、コマンドの前に直接コマンドを実行するようにします。例10.1「/etc/crontab内のエントリ」では、rootが入力されています。/etc/cron.dにあるパッケージ固有のテーブルも同じ形式です。cronのマニュアルページを参照してください(man cron使用)。

例10.1 /etc/crontab内のエントリ

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

/etc/crontabを、crontab -eコマンドで編集することはできません。これは、エディタに直接ロードして、変更し、保存する必要があります。

複数のパッケージによりシェルスクリプトが/etc/cron.hourly/etc/cron.daily/etc/cron.weekly、および/etc/cron.monthlyの各ディレクトリにインストールされます。これらの実行は、/usr/lib/cron/run-cronsによって制御されます。/usr/lib/cron/run-cronsは、 15分おきにメインテーブル(/etc/crontab)から実行されます。これにより、無視されていたプロセスが、適切な時刻に実行されることが保証されます。

hourlydaily、または他の特定の周期の管理スクリプトをカスタム時間で実行するには、/etc/crontabのエントリを使用して、定期的にタイムスタンプファイルを削除します(例10.2「/etc/crontab:タイムスタンプファイルの削除」を参照してください。そこでは、hourlyという名前の付いているファイルが毎時59分に、dailyという名前の付いているファイルが毎日午前2時14分に削除されるようになっています)。

例10.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

または、/etc/sysconfig/cronDAILY_TIMEcron.dailyを起動する時刻に設定します。MAX_NOT_RUNの設定では、ユーザが長期間、指定したDAILY_TIMEにコンピュータを起動しなくても、毎日のタスクの実行がトリガされるようにします。MAX_NOT_RUNの最大値は14日です。

日常のシステムメンテナンスジョブは、わかりやすいようにさまざまなスクリプトに分散されています。これらはパッケージaaa_base. /etc/cron.dailyに含まれています。このパッケージには、たとえば、コンポーネントsuse.de-backup-rpmdbsuse.de-clean-tmp、またはsuse.de-cron-localが含まれています。

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

カーネルそのものと一緒になって、定期的にシステムスのステータスおよび特定イベントをログファイルに記録するシステムサービス(デーモン)が数多くあります。これにより、管理者は、一定間隔でシステムのステータスを定期的にチェックし、エラーまたは障害のある機能を認識し、そのトラブルシューティングをピンポイントで実行できます。通常、これらのログファイルは、FHSで指定されるように/var/log内に格納され、毎日記録が追加されるためにサイズが増大します。logrotateパッケージを使用して、これらのファイルが増大するのを制御できます。

/etc/logrotate.confファイルを使用して、logrotateを設定します。特に、includeには、最初に読み込む追加ファイルを設定します。ログファイルを生成しないプログラムは、個別の環境設定ファイルを/etc/logrotate.dにインストールします。たとえば、そのようなファイルは、出荷時には、apache2パッケージ (/etc/logrotate.d/apache2)およびsyslogdパッケージ (/etc/logrotate.d/syslog)に含まれています。

例10.3 /etc/logrotate.confの例

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own lastlog or wtmp - we'll rotate them here
#/var/log/wtmp {
#    monthly
#    create 0664 root utmp
#    rotate 1
#}

# system-specific logs may be also be configured here.

logrotateは、cronによって制御され、/etc/cron.daily/logrotateにより毎日呼び出されます。

[Important]

createオプションは、管理者によって/etc/permissions*内に作成されるすべての設定を読み取ります。個人的な変更によっていずれの競合も発生することがないようにしてください。

10.1.4. locateコマンド

ファイルをすばやく検索するためのコマンドlocateは、標準のインストール済みソフトウェアには含まれていません。必要であれば、パッケージfindutils-locateをインストールしてください。updatedbプロセスは、毎晩、またはシステムをブートしてから約15分で自動的に起動します。

10.1.5. ulimitコマンド

ulimit(user limits)コマンドを使用すると、システムリソースの使用量に制限を設定して、それを表示できます。ulimitはアプリケーションが使用できるメモリの制限に特に役立ちます。これを使用して、アプリケーションがシステムリソースを過剰に使用して速度が低下したり、オペレーティングシステムをハングさせたりすることを防止できます。

ulimitコマンドには、さまざまなオプションがあります。メモリの使用量を制限するには、表10.1「ulimit:ユーザのためのリソースの設定」に示すオプションを使用します。

表10.1 ulimit:ユーザのためのリソースの設定

-m

最大常駐セットサイズ

-v

シェルが使用できる仮想メモリの最大量

-s

最大スタックサイズ

-c

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

-a

すべての現在の制限値の報告


システム全体のエントリは、/etc/profileで設定できます。コアファイルの作成を有効にします(プログラマがデバッグを行うために必要)。通常のユーザは、/etc/profileファイルでシステム管理者が指定した値を大きくすることはできませんが、~/.bashrcに特別なエントリを作成することは可能です。

例10.4 ulimit:~/.bashrc中の設定

# Limits maximum resident set size (physical memory):
ulimit -m 98304
 
# Limits of virtual memory:
ulimit -v 98304

メモリ割り当ては、KB単位で指定する必要があります。詳細については、man bashコマンドでmanページを参照してください。

[Important]

すべてのシェルがulimitディレクティブをサポートするわけではありません。ユーザが制約を包括的に設定する必要がある場合、PAM(たとえば、pam_limits)を使用すれば、包括的な調整が可能になります。

10.1.6. freeコマンド

freeコマンドは、空いている物理メモリ、使用済み物理メモリ、システム内のスワップ領域のほか、カーネルによって消費されたバッファとキャッシュの合計量を表示します。利用可能な RAM という概念は、統一的なメモリ管理が生まれる以前の遺物です。空きメモリは悪いメモリというスローガンは、Linux にぴったりです。結果として、Linuxでは、空きメモリや未使用メモリを実質的に発生させず、キャッシュの量を調整するよう努力が重ねられてきました。

基本的に、カーネルは、アプリケーションやユーザデータについての直接的な知識はありません。その代わりにカーネルは、ページキャッシュのアプリケーションとユーザデータを管理します。メモリが不足すると、その一部はスワップパーティションかファイルに書き込まれ、そこから mmapコマンドで読み込まれます(man mmap コマンドでmanページを参照)。

カーネルには、たとえば、ネットワークアクセスに使用されたキャッシュが格納されているslabキャッシュなどの別のキャッシュがあります。これが/proc/meminfoのカウンタ間の違いになります。全部ではありませんが、これらのキャッシュのほとんどは、/proc/slabinfoでアクセスできます。

ただし、目的が現在のRAM使用量である場合は、/proc/meminfoで情報を見つけてください。

10.1.7. manページとinfoページ

一部のGNUアプリケーション(tarなど)では、manページが提供されなくなりました。manページが用意されていたコマンドについては、--helpオプションを使用して簡単な概要を表示するか、詳細な手順を説明するinfoページを使用します。infoは、GNUのハイパーテキストシステムです。このシステムについての説明は、「info info」と入力してください。Info ページは、「emacs -f info」コマンドを入力してEmacsを起動するか、コンソールで直接「info」と入力します。あるいは、tkinfo、xinfo、またはヘルプシステムを使用して、infoページを表示できます。

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

マニュアルページを読み込むには、man_page マニュアルページを入力します。同じ名前でさまざまなセクションに存在するマニュアルページは、対応するセクション番号とともに一覧表示されます。表示するマニュアルページを選択します。セクション番号を数秒内に入力しないと、最初のマニュアルページが表示されます。

これをデフォルトのシステム動作に戻すには、~/.bashrcなどのシェル初期化ファイルでMAN_POSIXLY_CORRECT=1を設定します。

10.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ファイルをcustom-fileとして定義します。Emacsでcustomizeを使用して設定を行う場合、この設定は、~/.gnu-emacs-customに保存されます。

SUSE Linux Enterprise Serverでは、emacsパッケージはsite-start.elファイルを /usr/share/emacs/site-lispディレクトリにインストールします。site-start.elファイルは、~/.emacs初期化ファイルの前にロードされます。site-start.elは、psgmlなどのEmacsアドオンパッケージと共に配布される特殊な設定ファイルが自動的にロードされるようにします。この種類の設定ファイルも/usr/share/emacs/site-lispに置かれ、ファイル名は常にsuse-start-で始まります。ローカルのシステム管理者は、default.elでシステム全体の設定を指定できます。

これらのファイルに関する詳しい説明は、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(クライアント/サーバ操作)など、さまざまなアドオンパッケージをインストールできます。

10.2. バーチャルコンソール

Linuxは、マルチユーザ、マルチタスクのシステムです。これらの機能は、スタンドアロンのPCシステム上でも利用できます。テキストモードでは、6つのバーチャルコンソールが使用できます。<Alt> + <F1>から<Alt> + <F6>を使用して切り替えます。7番目のコンソールはX用に予約されており、10番目のコンソールにはカーネルメッセージが表示されます。コンソールの割り当て数は、/etc/inittabファイルを修正すれば変更できます。

Xを終了せずにXからコンソールに切り替えるには、<Ctr> + <Alt> + <F1>から<Ctrl> + <Alt> + <F6>を使用します。Xに戻るには、<Alt> + <F7>を押します。

10.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/VERSION/site-lisp/term/*.el

これらの変更は、terminfoエントリを使用するアプリケーション、またはその設定ファイルが直接変更されるアプリケーション(viemacsなど)にのみ影響します。システムに付随しないアプリケーションは、これらのデフォルト値に合わせる必要があります。

Xの下では、<compose>キー(マルチキー)を/etc/X11/Xmodmapで説明されているように有効化できます。

詳しい設定は、Xキーボード拡張(XKB)を使って行うことができます。この拡張機能は、デスクトップ環境GNOME(gswitchit)およびKDE (kxkb)によっても使用されます。

[Tip]詳細情報

XKBに関する情報は、/usr/share/doc/packages/xkeyboard-config (xkeyboard-configパッケージの一部)に記載されている文書を参照してください。

10.4. 言語および国固有の設定

本システムは、非常に広い範囲で国際化されており、現地の状況に合わせて柔軟に変更できます。言い換えれば、国際化( I18N )が特定のローカライズ( L10N )を可能にします。I18NとL10Nという略語は、語の最初と最後の文字の間に、省略されている文字数を挟み込んだ表記です。

設定は、ファイル/etc/sysconfig/languageの変数LC_で定義します。これは、単なる現地語サポートだけでなく、Messages(メッセージ) (言語)、Character Set(文字セット)、Sort Order(ソート順)、Time and Date(時刻と日付)、Numbers(数字)およびMoney(通貨)の各カテゴリも指します。これらのカテゴリはそれぞれ、独自の変数を使用して直接定義することも、ファイルlanguageにあるマスタ変数を使用して間接的に定義することも可能です(man localeコマンドでmanページを参照)。

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エディタで設定できます(8.3.1項 「YaSTのsysconfigエディターを使ってシステム設定を変更する」を参照してください)。このような変数の値には、言語コード、国コード、エンコーディング、および修飾子が入っています。個々のコンポーネントは特殊文字で接続されます。

  LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]

10.4.1. 例

言語コードと国コードは必ず一緒に設定する必要があります。言語の設定は、http://www.evertype.com/standards/iso639/iso639-en.htmlおよびhttp://www.loc.gov/standards/iso639-2/で入手できる、ISO 639規格に従います。国コードは、http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.htmlで入手できる、ISO 3166にリストされています。

使用可能な説明ファイルが/usr/lib/localeに存在する場合のみ、値を設定する意味があります。追加の記述ファイルは、/usr/share/i18n のファイルを使用し、コマンド localedef を実行して作成できます。記述ファイルは、glibc-i18ndataパッケージに含まれています。en_US.UTF-8の説明ファイル(英語および米国)は以下のように作成します。

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

インストール時にAmerican Englishを選択すると、これがデフォルトの設定になります。他の言語を選択した場合、その言語が有効になりますが、文字コードは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をサポートしない場合にのみ役に立ちます。

以前のリリースでは、/etc/sysconfig/languageの変更後は必ず、SuSEconfigを実行する必要がありました。その場合、SuSEconfigは、変更内容を/etc/SuSEconfig/profile/etc/SuSEconfig/csh.loginに書き込みました。これらのファイルは、ログイン時に、/etc/profile (Bashの場合)または/etc/csh.login (tcshの場合)によって読み込まれました。

最近のリリースでは、/etc/SuSEconfig/profile/etc/profile.d/lang.shで置換され、/etc/SuSEconfig/csh.login/etc/profile.de/lang.cshで置換されています。ただし、それらのレガシファイルが存在する場合には、ログイン時にそれらのファイルがまだ読み込みまれます。

現在のプロセスチェーンは、次のとおりです。

  • Bashの場合は、 /etc/profileによって読み込まれた/etc/profile.d/lang.shが、/etc/sysconfig/languageを解析します。

  • tcshの場合は、ログイン時に/etc/csh.loginによって読み込まれた/etc/profile.d/lang.cshが、/etc/sysconfig/languageを解析します。

これによって、/etc/sysconfig/languageに加えられたすべての変更が、SuSEconfigを実行しなくても、各シェルへの次回ログイン時に使用可能になります。

ユーザは、同様に~/.bashrcファイルを編集して、システムのデフォルトを上書きすることができます。たとえば、システム設定のen_USをプログラムメッセージに使用しない場合は、LC_MESSAGES=es_ESを指定してメッセージが英語の代わりにスペイン語で表示されるようにします。

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

ロケールシステムのデフォルトが不十分な場合、Bashスクリプトの構文に従って~/.i18nの設定を変更してください。~/.i18n内のエントリは、/etc/sysconfig/languageのシステムデフォルトを上書きします。同じ変数名の、RC_ネームスペースプレフィクスなしで使用します。たとえば、RC_LANGではなく、LANGを使用します。

LANG=cs_CZ.UTF-8
LC_COLLATE=C

10.4.3. 言語サポートの設定

カテゴリMessagesのファイルは、フォールバックを確保するため、対応する言語ディレクトリ(たとえば、en)にのみ格納されることになっています。たとえばLANGen_USに設定したが、messageファイルが/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つの問題は、数字の桁を区切るための文字が正しく認識されないことです。このことは、LANGdeのような2文字の言語コードにのみ設定されているのに、glibcが使用している定義ファイル/usr/share/lib/de_DE/LC_NUMERICに存在している場合に生じます。それで、区切り文字の定義がシステムに認識されるようにするには、LC_NUMERICde_DEに設定する必要があります。

10.4.4. 詳細情報