30 特別なシステム機能 #
この章では、まず、特定のソフトウェアパッケージ、バーチャルコンソール、およびキーボードレイアウトについて説明します。bash、cron、logrotateといったソフトウェアコンポーネントについても説明します。これらは、前回のリリースサイクルで変更または強化されたからです。これらのコンポーネントはそれほど重要ではないと思われるかもしれませんが、システムと密接に結びついているものなので、デフォルトの動作を変更することをお勧めします。この章の最後では、言語および国固有設定(I18NおよびL10N)について説明します。
30.1 特殊ソフトウェアパッケージに関する情報 #
次の章では、次のツール(bash、cron、logrotate、locate、ulimit、free)に関する基本的な情報を提供します。
30.1.1 bashパッケージと/etc/profile #
Bashはデフォルトのシステムシェルです。ログインシェルとして使用する場合には、いくつかの初期化ファイルを読み込みます。Bashは、各ファイルを次の順序で処理します。
/etc/profile~/.profile/etc/bash.bashrc~/.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ファイルから書き戻します。
30.1.2 cronパッケージ #
cronを使用すると、事前に定義された時間にバックグラウンドでコマンドを自動的に実行できます。cronは特別な形式のタイムテーブルを使用し、ツールには複数のデフォルトのタイムテーブルが付属しています。必要に応じて、ユーザはカスタムテーブルを指定することもできます。
cronテーブルは/var/spool/cron/tabsに置かれます。/etc/crontabはシステム全体のcronテーブルとして機能します。ユーザ名を入力して、タイムテーブルの後、コマンドの前に直接コマンドを実行するようにします。例30.1「/etc/crontab内のエントリ」では、rootが入力されています。/etc/cron.dにあるパッケージ固有のテーブルも同じ形式です。cronマニュアルページ(man cron)を参照してください。
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)から実行されます。これにより、無視されていたプロセスが、適切な時刻に実行されることが保証されます。
hourly、dailyまたは他の特定の周期の管理スクリプトをカスタム時間で実行するには、/etc/crontabのエントリを使用して、定期的にタイムスタンプファイルを削除します(例30.2「/etc/crontab: タイムスタンプファイルの削除」を参照してください。そこでは、hourlyという名前の付いているファイルが毎時59分に、dailyという名前の付いているファイルが毎日午前2時14分に削除されるようになっています)。
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/cronのDAILY_TIMEをcron.dailyを起動する時刻に設定します。MAX_NOT_RUNの設定では、ユーザが長時間、指定したDAILY_TIMEにコンピュータを起動しなくても、毎日のタスクの実行がトリガされるようにします。MAX_NOT_RUNの最大値は14日です。
30.1.3 cronステータスメッセージの停止 #
cronステータスメッセージによって大量の電子メールが生成されるのを避けるため、新しいインストールでは、/etc/sysconfig/cronのデフォルト値SEND_MAIL_ON_NO_ERRORが「no」に設定されています。cronのマニュアルページで説明されているように、この設定が「no」になっていても、cronのデータ出力は引き続きMAILTOアドレスに送信されます。
アップデートの場合は、ニーズに合わせてこれらの値を設定することをお勧めします。
30.1.4 ログファイル: パッケージlogrotate #
カーネルそのものと一緒になって、定期的にシステムのステータスおよび特定イベントをログファイルに記録するシステムサービス(「デーモン」)が複数あります。これにより、管理者は、一定間隔でシステムのステータスを定期的にチェックし、エラーまたは障害のある機能を認識し、そのトラブルシューティングをピンポイントで実行できます。通常、これらのログファイルは、FHSで指定されるように/var/log内に格納され、毎日記録が追加されるためにサイズが増大します。logrotateパッケージを使用して、これらのファイルが増大するのを制御できます。詳細については、Section 3.3, “Managing log files with logrotate”を参照してください。
30.1.5 locateコマンド #
ファイルをすばやく検索するためのコマンドlocateは、標準のインストール済みソフトウェアには含まれていません。必要に応じて、findutils-locateの後継パッケージであるmlocateパッケージをインストールします。updatedbプロセスは、毎晩、またはシステムをブートしてから約15分で自動的に起動します。
30.1.6 ulimitコマンド #
ulimit (user limits)コマンドを使用すると、システムリソースの使用量に制限を設定して、それを表示できます。ulimitはアプリケーションが使用できるメモリの制限に特に役立ちます。これを使用して、アプリケーションがシステムリソースを過剰に使用して速度が低下したり、オペレーティングシステムをハングさせたりすることを防止できます。
ulimitコマンドには、さまざまなオプションがあります。メモリの使用量を制限するには、表30.1「ulimit: ユーザのためのリソースの設定」に示すオプションを使用します。
ulimit: ユーザのためのリソースの設定 #|
|
最大常駐セットサイズ |
|
|
シェルが使用できる仮想メモリの最大量 |
|
|
最大スタックサイズ |
|
|
作成されるコアファイルの最大サイズ |
|
|
すべての現在の制限値の報告 |
システム全体のデフォルトエントリは、/etc/profileで設定されます。このファイルを直接編集することはお勧めしません。システムをアップグレードすると変更内容が上書きされるためです。システム全体のプロファイル設定をカスタマイズするには、/etc/profile.localを使用します。ユーザごとの設定は、~USER/.profileで行う必要があります。
ulimit: ~/.bashrc中の設定 ## Limits maximum resident set size (physical memory): ulimit -m 98304 # Limits of virtual memory: ulimit -v 98304
メモリ割り当ては、KB単位で指定する必要があります。詳細については、man bashを参照してください。
ulimit サポート
すべてのシェルがulimitディレクティブをサポートするわけではありません。PAM (pam_limitsなど)は、ulimitの代わりに使用できる包括的な調整手段を提供しています。
30.1.7 freeコマンド #
freeコマンドは、空いている物理メモリ、使用済み物理メモリ、システム内のスワップ領域のほか、カーネルによって消費されたバッファとキャッシュの合計量を表示します。利用可能な RAMという概念は、統一的なメモリ管理が生まれる以前の遺物です。空きメモリは悪いメモリというスローガンは、Linux にぴったりです。結果として、Linuxでは、空きメモリや未使用メモリを発生させず、キャッシュの量を調整するよう努力が重ねられてきました。
カーネルは、アプリケーションやユーザデータについての直接的な情報を持っていません。その代わりにカーネルは、ページキャッシュのアプリケーションとユーザデータを管理します。メモリが不足すると、その一部はスワップパーティションかファイルに書き込まれ、そこからmmapコマンドで読み込まれます(man mmapコマンドでmanページを参照)。
カーネルには、たとえば、ネットワークアクセスに使用されたキャッシュが格納されているslabキャッシュなどの別のキャッシュがあります。これが/proc/meminfoのカウンタ間の違いになります。全部ではありませんが、これらのキャッシュのほとんどは、/proc/slabinfoでアクセスできます。
ただし、目的が現在のRAM使用量である場合は、/proc/meminfoで情報を見つけてください。
30.1.8 manページとinfoページ #
一部のGNUアプリケーション(tarなど)では、manページが提供されなくなりました。manページが用意されていたコマンドについては、--helpオプションを使用して簡単な概要を表示するか、詳細な手順を説明するページを使用します。infoは、GNUのハイパーテキストシステムです。このシステムについての説明は、「info info」と入力してください。Infoページは、「emacs -f info」コマンドを入力してEmacsを起動するか、コンソールで直接「info」と入力します。あるいは、tkinfo、xinfo、またはヘルプシステムを使用して、infoページを表示できます。
30.1.9 manコマンドを使用したマニュアルページの選択 #
マニュアルページを読み込むには、「man
MAN_PAGE」を入力します。同じ名前でさまざまなセクションに存在するマニュアルページは、対応するセクション番号とともに一覧表示されます。表示するマニュアルページを選択します。セクション番号を数秒内に入力しないと、最初のマニュアルページが表示されます。
これをデフォルトのシステム動作に戻すには、~/.bashrcなどのシェル初期化ファイルでMAN_POSIXLY_CORRECT=1を設定します。
30.1.10 GNU Emacs用の設定 #
GNU Emacsは、複合作業環境です。ここでは、GNU Emacsを起動する際に処理される設定ファイルについて説明します。詳細については、https://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 Desktopでは、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でシステム全体の設定を指定できます。
これらのファイルの詳細については、info:/emacs/InitFileの「Init File」にあるEmacs情報ファイルを参照してください。これらのファイルを無効にする(必要な場合)方法についても記載されています。
Emacsのコンポーネントは、次のいくつかのパッケージに分かれています。
基本パッケージの
emacs。emacs-x11(通常インストールされている): X11をサポートしているプログラム。emacs-nox: X11をサポートしていないプログラム。emacs-info: info形式のオンラインマニュアル。emacs-el: Emacs Lisp内のコンパイルされていないライブラリファイル。これらは、実行時には必要ありません。必要に応じて
emacs-auctex(LaTeX)、psgml(SGMLおよびXML)、gnuserv(クライアント/サーバ操作)など、さまざまなアドオンパッケージをインストールできます。
30.2 バーチャルコンソール #
Linuxは、マルチユーザ、マルチタスクのシステムです。これらの機能は、スタンドアロンのPCシステム上でも利用できます。テキストモードでは、6つのバーチャルコンソールが使用できます。Alt–F1~Alt–F6を使用して切り替えます。7番目のコンソールはX用に予約されており、10番目のコンソールにはカーネルメッセージが表示されます。
Xを終了せずにXからコンソールに切り替えるには、Ctrl–Alt–F1~Ctrl–Alt–F6を使用します。Xに戻るには、Alt–F7を押します。
30.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エントリを使用するアプリケーション、またはその設定ファイルが直接変更されるアプリケーション(vi、emacsなど)にのみ影響します。システムに付随しないアプリケーションは、これらのデフォルト値に合わせる必要があります。
Xの下では、<compose>キー(マルチキー)を/etc/X11/Xmodmapで説明されているように有効化できます。
詳しい設定は、Xキーボード拡張(XKB)を使って行うことができます。
XKBに関する情報は、/usr/share/doc/packages/xkeyboard-config (xkeyboard-configパッケージの一部)に記載されている文書を参照してください。
30.4 言語および国固有の設定 #
本システムは、非常に広い範囲で国際化されており、現地の状況に合わせて柔軟に変更できます。国際化(「I18N」)が特定のローカライズ(「L10N」)を可能にします。I18NとL10Nという略語は、語の最初と最後の文字の間に、省略されている文字数を挟み込んだ表記です。
設定は、ファイル/etc/sysconfig/languageで定義されたLC_変数で行います。これは、単なる現地語サポートだけでなく、Messages(メッセージ) (言語)、Character Set(文字セット)、Sort Order(ソート順)、Time and Date(時刻と日付)、Numbers(数字)およびMoney(通貨)の各カテゴリも指します。これらのカテゴリはそれぞれ、独自の変数を使用して直接定義することも、ファイルlanguageにあるマスタ変数を使用して間接的に定義することも可能です(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またはctype(デフォルト)に設定できます。yesに設定される場合、rootは言語および国固有の設定を使用します。設定されていない場合、システム管理者は常にPOSIX環境で作業します。
変数は、YaSTのsysconfigエディタで設定できます。このような変数の値には、言語コード、国コード、エンコーディング、および修飾子が入っています。個々のコンポーネントは特殊文字で結合されます。
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
30.4.1 システム全体のロケール設定 #
systemdは初期起動時に/etc/locale.confを読み込みます。このファイルで設定されたロケール設定は、個別の設定がない限り、すべてのサービスまたはユーザによって継承されます。
以前のバージョンのSUSE Linux Enterprise Desktopは、/etc/sysconfig/language、/etc/sysconfig/keyboard、および/etc/sysconfig/consoleからロケール設定を読み込みます。SUSE Linux Enterprise Desktop
15 GA以降、これらのファイルは廃止されたものとみなされています。systemdでは、これらのファイルから設定を読み込まなくなりました。代わりに、systemdでは、/etc/locale.confを読み込みます。
ただし、/etc/sysconfig/languageで定義された変数は引き続き使用されます。システムワイドロケールを上書きし、ユーザシェルの異なるロケール設定を定義するために使用できます(30.4.2項 「例」を参照)。
システム全体のロケールを設定するには、次のいずれかを実行できます。
/etc/locale.confに設定を書き込む。各行は環境に似た変数割り当てです(変数のリストについては、man 5 locale.confを参照してください):LANG=de_DE.UTF-8
設定を微調整するには、1行に1つ変数を追加することができます。
localectlコマンドを使用する:#localectlset-locale LANG=de_DE.UTF-8ここでも、
localectl set-localeコマンドの後に追加の変数を指定することもできます。
systemdパッケージの更新中に古いシステムとの後方互換性を維持するために、言及されているすべての変数は、まだ定義されていない場合は、sysconfigから最終的な宛先にマイグレートされます。
30.4.2 例 #
言語コードと国コードは必ず一緒に設定する必要があります。言語の設定は、https://www.evertype.com/standards/iso639/iso639-en.htmlおよびhttps://www.loc.gov/standards/iso639-2/で入手できる、ISO 639規格に従います。国コードはISO 3166に一覧にされています(https://en.wikipedia.org/wiki/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への変更は、次のプロセスチェーンで有効になります。
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に加えられたすべての変更が、これらを手動で有効にしなくても、各シェルへの次回ログイン時に使用可能になります。
ユーザは、同様に~/.bashrcファイルを編集して、システムのデフォルトを上書きすることができます。たとえば、システム設定のen_USをプログラムメッセージに使用しない場合は、LC_MESSAGES=es_ESを指定してメッセージが英語の代わりにスペイン語で表示されるようにします。
30.4.3 ~/.i18nでのロケール設定 #
ロケールシステムのデフォルトが不十分な場合、Bashスクリプトの構文に従って~/.i18nの設定を変更してください。~/.i18n内のエントリは、/etc/sysconfig/languageのシステムデフォルトを上書きします。同じ変数名を使用しますが、RC_ネームスペースプレフィクスは付けません。たとえば、RC_LANGの代わりにLANGを使用します。
LANG=cs_CZ.UTF-8 LC_COLLATE=C
30.4.4 言語サポートの設定 #
カテゴリMessagesのファイルは、フォールバックを確保するため、対応する言語ディレクトリ(たとえば、en)にのみ格納されることになっています。LANGをen_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がdeのような2文字の言語コードにのみ設定されているのに、glibcが使用している定義ファイル/usr/share/lib/de_DE/LC_NUMERICに存在している場合に生じます。それで、区切り文字の定義がシステムに認識されるようにするには、LC_NUMERICをde_DEに設定する必要があります。
30.4.5 詳細情報 #
『The GNU C Library Reference Manual』の「Locales and Internationalization」の章。パッケージ glibc-info。
『UTF-8 and Unicode FAQ for Unix/Linux』、Markus Kuhn著。Webページhttps://www.cl.cam.ac.uk/~mgk25/unicode.html (現在のアドレス)を参照してください。