Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
適用先 openSUSE Leap 15.7

15 特殊なシステム機能 Edit source

概要

本章では、仮想コンソールやキーボードレイアウトなどのソフトウエアパッケージについて説明を行っています。特に bash , cron , logrotate については、直近のリリースサイクルで変更や機能追加が行われていることから、これらを詳しく説明しています。これらのソフトウエアは、いずれもシステムに密接に繋がっていることから、小さな変更やあまり重要ではない変更についても、ユーザ側に影響があるためです。また、本章では言語や国固有の設定 (I18N や L10N と呼ばれるもの) についても説明しています。

15.1 特殊なソフトウエアパッケージについての情報 Edit source

本章では、 bash , cron , logrotate , locate , ulimit, free の各ツールに対する基本的な情報を提供しています。

15.1.1 bash パッケージと /etc/profile の関係 Edit source

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 ファイル内にある変更を、新しいファイルに反映させてください。

15.1.2 cron パッケージ Edit source

cron システムは、指定した時刻に自動的に裏でコマンドを実行するための仕組みです。 cron では特殊な書式のタイムテーブルと、あらかじめ決められたスケジュールのファイルを利用して、時刻の指定と実行すべきコマンドを指定します。一般ユーザでも同様に、独自のタイムテーブルを設定することができます。

cron のタイムテーブルは /var/spool/cron/tabs ディレクトリ内に配置されます。システム全体のタイムテーブルは /etc/crontab ファイルにあります。 /etc/crontab 内では、日時の指定の後ろにユーザ名を指定して、そのユーザでコマンドを実行するようにすることができます。たとえば 例15.1「/etc/crontab の内容」 では、 root を指定しています。また、パッケージ固有のタイムテーブルは /etc/cron.d ディレクトリ内に同じ形式で配置します。詳しくは cron のマニュアルページ ( man cron ) をお読みください。

例 15.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 ファイルは、メインのタイムテーブル ( /etc/crontab ) 内に設定されていて、 15 分に一度動作するようになっています。これにより、見逃されやすい処理も正しく実行できるようになっています。

hourlydaily のほか、その他の定期的なメンテナンススクリプトを独自の時間に実行したい場合は、 /etc/crontab 内に項目 (ジョブ) を追加して、タイムスタンプファイルを削除するように設定してください (たとえば 例15.2「/etc/crontab: タイムスタンプファイルの削除」 では、 hourly を毎時 59 分に、 daily を毎日午前 2:14 に削除したりしています) 。

例 15.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/cron ファイル内の DAILY_TIME を設定する方法があります。この変数は、 cron.daily を開始すべき時刻を指定するものです。また、 MAX_NOT_RUN は、ユーザが DAILY_TIME で指定していた時刻にコンピュータを起動していなかった場合、どれだけの日数が経過するとジョブを即時に実行するかを指定します。なお、 MAX_NOT_RUN の最大値は 14 日です。

15.1.3 cron の状態メッセージの停止 Edit source

cron の状態メールでメールボックスが溢れないようにする目的で、新規インストールでは /etc/sysconfig/cron 内の SEND_MAIL_ON_NO_ERROR が " no " に設定されるようになっています。ただし、 " no " に設定した場合でも、 cron のマニュアルページに書かれているとおり、 MAILTO アドレスに対しては実行結果のメールが配信されます。

古いバージョンから更新している場合は、お使いの環境の要件にあわせて値を指定してください。

15.1.4 ログファイル: logrotate パッケージ Edit source

様々なシステムサービス ( デーモン ) だけでなく、カーネル自身も、様々な状態やイベントを通知する目的で、ログファイルに書き込みを行います。このログファイルが存在するおかげで、システム管理者はその当時のシステムの状態を確認できるほか、様々なトラブルの原因調査と解決を行うことができるようになっています。これらのログファイルは通常、 FHS で規定されている /var/log 内に保存され、日々の運用でサイズが増加していきます。 logrotate パッケージは、そのようなサイズの肥大化を解決するための仕組みです。詳しくは 3.3項 「logrotate によるログの管理」 をお読みください。

15.1.5 locate コマンド Edit source

locate コマンドはファイルを素早く見つけるためのコマンドですが、インストール済みのソフトウエアを見つけるためだけのコマンドではありません。必要であれば mlocate (findutils-locate パッケージの後継パッケージ) をインストールすることで、様々なファイルを検索できるようになります。なお、 updatedb プロセスは、毎晩もしくはシステムの起動後 15 分経過後に自動で開始されるプログラムです。

15.1.6 ulimit コマンド Edit source

ulimit ( ユーザ制限 (User Limits) ) を利用することで、システム資源の使用範囲に制限を設定したり、それらの制限を表示したりすることができます。 ulimit は特に、アプリケーションに対して利用を許すメモリサイズを制限する用途で役に立ちます。これを利用することで、アプリケーションがシステム資源を使用しすぎることで、オペレーティングシステムの動作を遅くしてしまったり、場合によってはハングアップ (反応がなくなる) させてしまったりするようなことを防げます。

ulimit には様々なオプションが用意されています。たとえばメモリの使用を制限するには、 表15.1「ulimit : ユーザに対する資源の制限」 に示されているオプションをお使いください:

表 15.1: ulimit : ユーザに対する資源の制限

-m

最大常駐セットサイズ

-v

シェルに対して開放する最大仮想メモリサイズ

-s

最大スタックサイズ

-c

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

-a

現在の制限を全て表示する

システム全体に対する設定は、 /etc/profile 内で行われています。ただし、このファイルを直接修正することはお勧めしません。なぜなら、システムのアップグレードを行うと、上記のファイルが上書きされてしまうためです。システム全体のプロファイル設定をカスタマイズしたい場合は /etc/profile.local ファイルに、ユーザ単位で設定を行いたい場合は ~ユーザ名/.profile ファイルにそれぞれ記述してください。

例 15.3: ulimit : ~/.bashrc 内での設定
# 最大常駐セットサイズ (物理メモリ) の制限:
ulimit -m 98304

# 仮想メモリの制限:
ulimit -v 98304

メモリの割り当てはキロバイト (KB) 単位で行います。詳しくは man bash をお読みください。

重要
重要: ulimit のサポートについて

シェルによっては ulimit ディレクティブに対応していないものがあります。また、 PAM の仕組みを利用することで、 ulimit に代わる広範囲な調整機能を利用することができます (pam_limits など) 。

15.1.7 free コマンド Edit source

free コマンドは、物理メモリやスワップ領域の空き容量と使用済み容量を表示するほか、カーネルが消費しているバッファやキャッシュのサイズを表示することができるツールです。 利用可能なメモリ量 の考え方は、統一されたメモリ管理機構が生まれるよりも前に遡ります。 メモリを空けておくなんてもったいない の考え方は Linux にも当てはまり、不要なメモリを解放するよりは、できる限りキャッシュとして使用したほうが良い、という動作になっています。

なお、カーネル側ではアプリケーションなのかユーザデータなのかを直接知っているわけではありません。アプリケーションやユーザデータは ページキャッシュ という仕組みで管理されています。そのため、メモリが枯渇すると、まず mmap コマンドを利用して準備したそれらを、スワップ領域かファイルに書き込んで開放する動作を行います。

また、カーネル側ではそのほかのキャッシュ機構も用意されています。そのうちの 1 つがslab キャッシュ で、ネットワークアクセスに対するキャッシュを補完します。これにより、 /proc/meminfo のカウンタ間での差を説明することができます。なお、 slab キャッシュ のうちのほとんどの統計情報については、 /proc/slabinfo からアクセスすることができます。

ただし、どれだけのメモリが使用されているのかを調べたいような場合は、従来通り /proc/meminfo ファイルが適切でしょう。

15.1.8 マニュアルページと info ページ Edit source

GNU アプリケーションによっては、マニュアルページがメンテナンスされなくなってしまっているものもあります (例: tar) 。これらのコマンドについては --help オプションを指定して実行することで、コマンドの概要説明を得ることができます。また、より詳しい説明を読みたい場合は、 info ページをお使いください。 info ページは GNU 製のハイパーテキストシステムで、 info ページの説明そのものも info ページで提供されています。詳しくは info info と入力して実行してください。また、 info ページは emacs 内に表示することもできます。こちらについては、 emacs -f info と入力して実行してください。このほか、 tkinfo, xinfo やデスクトップ環境のヘルプシステムでも、 info ページを表示することができます。

15.1.9 man コマンドでのマニュアルページの選択 Edit source

マニュアルページを読むには、 man ページ名 のように入力して実行します。なお、異なるセクションに同じ名前のマニュアルページが存在する場合は、セクション番号の一覧が表示され、いずれかを選択するように促されます。この場合、何も入力せずにしばらく経過すると、最初に一致したマニュアルページを表示します。

このような既定の動作を変更したい場合は、 MAN_POSIXLY_CORRECT=1~/.bashrc のようなシェル設定ファイルで指定してください。

15.1.10 GNU Emacs の設定 Edit source

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 内に保存されます。

openSUSE Leap では、 emacs パッケージをインストールすると、 /usr/share/emacs/site-lisp ディレクトリ内に site-start.el ファイルをインストールします。この site-start.el ファイルは ~/.emacs よりも前に読み込まれるファイルで、たとえば psgml などの emacs アドオンパッケージに同梱される特別な設定ファイルを、自動的に読み込むようにする目的で作られています。この種類の設定ファイルは /usr/share/emacs/site-lisp 内にも存在していて、それぞれは suse-start- で始まるファイル名になっています。ローカルのシステム管理者であれば、システム全体の設定を default.el で行うことができます。

これらのファイルについてのより詳しい説明は、 emacs 内の info ファイルで提供されています。詳しくは Init File : info:/emacs/InitFile をお読みください。また、これらのファイルの読み込みを無効化する方法についても、ここに記されています。

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

  • 基本パッケージ: emacs

  • X11 サポート 付き の emacs (通常はこちらがインストールされます): emacs-x11

  • X11 サポート 無し の emacs : emacs-nox

  • info 形式でのオンライン文書 : emacs-info

  • Emacs Lisp 形式でのコンパイル前のライブラリファイル (実行時には不要です) : emacs-el

  • 必要であればインストールできる各種のアドオンパッケージ: emacs-auctex (LaTeX), psgml (SGML および XML), gnuserv (クライアント/サーバ操作) など

15.2 仮想コンソール Edit source

Linux はマルチユーザ/マルチタスクシステムです。これらの仕組みによる利点は、 PC 1 台の中だけでも生かすことができます。たとえばテキストモードでは、 6 個の仮想コンソールを利用することができます。仮想コンソール間の切り替えは AltF1 から AltF6 までのキー入力で行うことができます。なお、 7 番目のコンソールは X 向けに、 10 番目のコンソールはカーネルメッセージの表示向けにそれぞれ予約されています。

X 環境をシャットダウンすることなく仮想コンソールを切り替えたい場合は、CtrlAltF1 から CtrlAltF6 までのキー入力を行ってください。なお、 X に戻る場合は AltF7 を押してください。

15.3 キーボードマッピング Edit source

プログラムによるキーボードマッピングを標準化するため、下記のファイルに対して変更が加えられています:

/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 キーボード拡張 (X Keyboard Extensions (XKB)) を利用して行うことができます。

ヒント
ヒント: さらなる情報

XKB に関する詳細は、 /usr/share/doc/packages/xkeyboard-config 内にある文書 (xkeyboard-config パッケージ) をお読みください。

15.4 言語および国固有の設定 Edit source

システムとは、非常に幅広い意味で国際化され、地域の要件にあわせた変更が加えられます。つまり、国際化 (internationalization ( I18N )) は特定の地域への対応 (localization ( L10N ) を含む意味になります。ちなみに、 I18N や L10N とは、最初と最後の文字だけを残して、その途中の文字を文字数で省略した表現です。

LC_ 変数に対する設定は、 /etc/sysconfig/language ファイル内で行います。ここでの設定は 言語サポート という意味だけでなく、 メッセージ (言語), 文字セット , 並び替え順序 , 日付と時刻の表示形式 , 数字の表記方法 , 通貨単位 などの分野があります。それぞれの分野に対する設定は、直接指定することができるほか、 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 もしくは ctype (既定値) を指定する変数です。 yes を指定すると、 root に対して言語や国に固有の設定を適用するようになりますが、そうでない場合、システム管理者は POSIX 環境を使用するようになります。

なお、これらの変数は YaST sysconfig エディタで設定することができます。これらの変数の値は言語コードや国コード、エンコーディングや修飾子などが含まれます。具体的には、下記のような書式になります:

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

15.4.1 システム全体の言語設定 Edit source

systemd は起動時の早い段階で /etc/locale.conf を読み込みます。このファイル内に書かれたロケール設定は、個別に設定した場合を除いて、サービスやユーザに継承されます。

注記
注記: openSUSE Leap openSUSE Leap における古い設定ファイルの動作について

以前のバージョンでは、 openSUSE Leap/etc/sysconfig/language , /etc/sysconfig/keyboard , /etc/sysconfig/console の各ファイルから設定を読み込んでいました。 openSUSE Leap 15.0 15 では、これらのファイルは廃止予定としてマークされるようになっています。 systemd でも、これらのファイルを読み込むことは行っていません。 SUSE Linux Enterprise Server 15 およびそれ以降では /etc/locale.conf を読み込みます。

ただし、 /etc/sysconfig/language 内での設定はシステム全体のロケールを上書きするために使用されているほか、ユーザのシェルに対して異なるロケール設定を行うためにも使用されています (詳しくは 15.4.2項 「いくつかの例」 をお読みください) 。

システム全体のロケールを設定するには、下記のいずれかを実施します:

  • /etc/locale.conf ファイル内に設定を書き込みます。各行は環境変数のような書式で変数設定を行います (変数の一覧については man 5 locale.conf をお読みください):

    LANG=ja_JP.UTF-8

    さらに細かい設定を行いたい場合は、 1 行に 1 つの変数を記述する方式で、設定を追加していってください。

  • localectl コマンドを使用してもかまいません:

    # localectl set-locale LANG=ja_JP.UTF-8

    こちらの場合でも、 localectl set-locale コマンドの後ろに追加の変数を指定することができます。

後方互換性を維持するため、 systemd パッケージの更新時にこれらの変数設定が存在すると、新しいほうの設定を書き込むようになっています。

15.4.2 いくつかの例 Edit source

言語と国コードについては、必ず指定してください。言語は ISO 639 (一覧は https://ja.wikipedia.org/wiki/ISO_639-1%E3%82%B3%E3%83%BC%E3%83%89%E4%B8%80%E8%A6%A7 にあります) を、国コードは ISO 3166 (一覧は https://ja.wikipedia.org/wiki/ISO_3166-1 にあります) をそれぞれお使いください。

なお、 /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 には対応していないアプリケーションを使用する際に便利です。

/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 を設定することで、英語ではなくスペイン語で表示することができるようになります。

15.4.3 ~/.i18n 内でのロケール (言語) 設定 Edit source

システム側で設定された既定値では不都合がある場合は、 ~/.i18n ファイルを bash のスクリプト形式で記述することで、設定を変更することができます。 ~/.i18n 内での記述は /etc/sysconfig/language の設定を上書きすることができます。なお、変数名は /etc/sysconfig/language のものから、 RC_ の接頭辞を取り除いて指定してください。たとえば RC_LANG ではなく LANG のようになります:

LANG=cs_CZ.UTF-8
LC_COLLATE=C

15.4.4 言語に対応するための設定 Edit source

メッセージ に対する言語の設定には、フォールバック (後退) という仕組みが用意されています。これはたとえば、優先して使用したい言語のメッセージがアプリケーション側に用意されていない場合、提供されている言語の中からいずれか (一般的には 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 も異なる形式になることに注意してください。

なお、言語の設定によって数値の桁区切り文字が正しく認識されない、という問題が発生する場合があります。これは LANG に 2 桁の言語コードのみを指定した場合 (例: de) に起こります。 glibc では /usr/share/lib/de_DE/LC_NUMERIC に区切り文字の設定があるため、de では区切り文字が読み込まれないためです。この場合は、 LC_NUMERICde_DE のような正しい言語コードおよび国コードを入力して、区切り文字を読み込めるようにしてください。

15.4.5 さらなる情報 Edit source

  • The GNU C Library Reference Manual (英語) 内の Locales and Internationalization 章。この文書は glibc-info パッケージ内に含まれています。

  • Markus Kuhn 氏による UTF-8 and Unicode FAQ for Unix/Linux (英語): 現時点では https://www.cl.cam.ac.uk/~mgk25/unicode.html にあります。

このページを印刷