本章では、仮想コンソールやキーボードレイアウトなどのソフトウエアパッケージについて説明を行っています。特に bash
, cron
, logrotate
については、直近のリリースサイクルで変更や機能追加が行われていることから、これらを詳しく説明しています。これらのソフトウエアは、いずれもシステムに密接に繋がっていることから、小さな変更やあまり重要ではない変更についても、ユーザ側に影響があるためです。また、本章では言語や国固有の設定 (I18N や L10N と呼ばれるもの) についても説明しています。
本章では、 bash
, cron
, logrotate
, locate
, ulimit
, free
の各ツールに対する基本的な情報を提供しています。
bash
パッケージと /etc/profile
の関係 #Edit sourcebash は既定のシステムシェルです。ログインシェルとして使用した場合、いくつかの設定ファイルを読み込みます。設定ファイルの処理順序は、下記のとおりです:
/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
ファイル内にある変更を、新しいファイルに反映させてください。
cron
システムは、指定した時刻に自動的に裏でコマンドを実行するための仕組みです。 cron
では特殊な書式のタイムテーブルと、あらかじめ決められたスケジュールのファイルを利用して、時刻の指定と実行すべきコマンドを指定します。一般ユーザでも同様に、独自のタイムテーブルを設定することができます。
cron のタイムテーブルは /var/spool/cron/tabs
ディレクトリ内に配置されます。システム全体のタイムテーブルは /etc/crontab
ファイルにあります。 /etc/crontab
内では、日時の指定の後ろにユーザ名を指定して、そのユーザでコマンドを実行するようにすることができます。たとえば 例15.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
ファイルは、メインのタイムテーブル ( /etc/crontab
) 内に設定されていて、 15 分に一度動作するようになっています。これにより、見逃されやすい処理も正しく実行できるようになっています。
hourly
や daily
のほか、その他の定期的なメンテナンススクリプトを独自の時間に実行したい場合は、 /etc/crontab
内に項目 (ジョブ) を追加して、タイムスタンプファイルを削除するように設定してください (たとえば 例15.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 日です。
cron の状態メールでメールボックスが溢れないようにする目的で、新規インストールでは /etc/sysconfig/cron
内の SEND_MAIL_ON_NO_ERROR
が " no
" に設定されるようになっています。ただし、 " no
" に設定した場合でも、 cron のマニュアルページに書かれているとおり、 MAILTO
アドレスに対しては実行結果のメールが配信されます。
古いバージョンから更新している場合は、お使いの環境の要件にあわせて値を指定してください。
様々なシステムサービス ( デーモン ) だけでなく、カーネル自身も、様々な状態やイベントを通知する目的で、ログファイルに書き込みを行います。このログファイルが存在するおかげで、システム管理者はその当時のシステムの状態を確認できるほか、様々なトラブルの原因調査と解決を行うことができるようになっています。これらのログファイルは通常、 FHS で規定されている /var/log
内に保存され、日々の運用でサイズが増加していきます。 logrotate
パッケージは、そのようなサイズの肥大化を解決するための仕組みです。詳しくは 3.3項 「logrotate
によるログの管理」 をお読みください。
locate
コマンド #Edit sourcelocate
コマンドはファイルを素早く見つけるためのコマンドですが、インストール済みのソフトウエアを見つけるためだけのコマンドではありません。必要であれば mlocate
(findutils-locate
パッケージの後継パッケージ) をインストールすることで、様々なファイルを検索できるようになります。なお、 updatedb
プロセスは、毎晩もしくはシステムの起動後 15 分経過後に自動で開始されるプログラムです。
ulimit
コマンド #Edit sourceulimit
( ユーザ制限 (User Limits) ) を利用することで、システム資源の使用範囲に制限を設定したり、それらの制限を表示したりすることができます。 ulimit
は特に、アプリケーションに対して利用を許すメモリサイズを制限する用途で役に立ちます。これを利用することで、アプリケーションがシステム資源を使用しすぎることで、オペレーティングシステムの動作を遅くしてしまったり、場合によってはハングアップ (反応がなくなる) させてしまったりするようなことを防げます。
ulimit
には様々なオプションが用意されています。たとえばメモリの使用を制限するには、 表15.1「ulimit
: ユーザに対する資源の制限」 に示されているオプションをお使いください:
ulimit
: ユーザに対する資源の制限 #
|
最大常駐セットサイズ |
|
シェルに対して開放する最大仮想メモリサイズ |
|
最大スタックサイズ |
|
作成されるコアファイルの最大サイズ |
|
現在の制限を全て表示する |
システム全体に対する設定は、 /etc/profile
内で行われています。ただし、このファイルを直接修正することはお勧めしません。なぜなら、システムのアップグレードを行うと、上記のファイルが上書きされてしまうためです。システム全体のプロファイル設定をカスタマイズしたい場合は /etc/profile.local
ファイルに、ユーザ単位で設定を行いたい場合は ~ユーザ名/.profile
ファイルにそれぞれ記述してください。
ulimit
: ~/.bashrc
内での設定 ## 最大常駐セットサイズ (物理メモリ) の制限: ulimit -m 98304 # 仮想メモリの制限: ulimit -v 98304
メモリの割り当てはキロバイト (KB) 単位で行います。詳しくは man bash
をお読みください。
ulimit
のサポートについてシェルによっては ulimit
ディレクティブに対応していないものがあります。また、 PAM の仕組みを利用することで、 ulimit
に代わる広範囲な調整機能を利用することができます (pam_limits
など) 。
free
コマンド #Edit sourcefree
コマンドは、物理メモリやスワップ領域の空き容量と使用済み容量を表示するほか、カーネルが消費しているバッファやキャッシュのサイズを表示することができるツールです。 利用可能なメモリ量 の考え方は、統一されたメモリ管理機構が生まれるよりも前に遡ります。 メモリを空けておくなんてもったいない の考え方は Linux にも当てはまり、不要なメモリを解放するよりは、できる限りキャッシュとして使用したほうが良い、という動作になっています。
なお、カーネル側ではアプリケーションなのかユーザデータなのかを直接知っているわけではありません。アプリケーションやユーザデータは ページキャッシュ という仕組みで管理されています。そのため、メモリが枯渇すると、まず mmap
コマンドを利用して準備したそれらを、スワップ領域かファイルに書き込んで開放する動作を行います。
また、カーネル側ではそのほかのキャッシュ機構も用意されています。そのうちの 1 つがslab キャッシュ で、ネットワークアクセスに対するキャッシュを補完します。これにより、 /proc/meminfo
のカウンタ間での差を説明することができます。なお、 slab キャッシュ のうちのほとんどの統計情報については、 /proc/slabinfo
からアクセスすることができます。
ただし、どれだけのメモリが使用されているのかを調べたいような場合は、従来通り /proc/meminfo
ファイルが適切でしょう。
GNU アプリケーションによっては、マニュアルページがメンテナンスされなくなってしまっているものもあります (例: tar) 。これらのコマンドについては --help
オプションを指定して実行することで、コマンドの概要説明を得ることができます。また、より詳しい説明を読みたい場合は、 info ページをお使いください。 info ページは GNU 製のハイパーテキストシステムで、 info ページの説明そのものも info ページで提供されています。詳しくは info
info
と入力して実行してください。また、 info ページは emacs 内に表示することもできます。こちらについては、 emacs
-f info
と入力して実行してください。このほか、 tkinfo, xinfo やデスクトップ環境のヘルプシステムでも、 info ページを表示することができます。
man
コマンドでのマニュアルページの選択 #Edit sourceマニュアルページを読むには、 man
ページ名 のように入力して実行します。なお、異なるセクションに同じ名前のマニュアルページが存在する場合は、セクション番号の一覧が表示され、いずれかを選択するように促されます。この場合、何も入力せずにしばらく経過すると、最初に一致したマニュアルページを表示します。
このような既定の動作を変更したい場合は、 MAN_POSIXLY_CORRECT=1
を ~/.bashrc
のようなシェル設定ファイルで指定してください。
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
(クライアント/サーバ操作) など
Linux はマルチユーザ/マルチタスクシステムです。これらの仕組みによる利点は、 PC 1 台の中だけでも生かすことができます。たとえばテキストモードでは、 6 個の仮想コンソールを利用することができます。仮想コンソール間の切り替えは Alt–F1 から Alt–F6 までのキー入力で行うことができます。なお、 7 番目のコンソールは X 向けに、 10 番目のコンソールはカーネルメッセージの表示向けにそれぞれ予約されています。
X 環境をシャットダウンすることなく仮想コンソールを切り替えたい場合は、Ctrl–Alt–F1 から Ctrl–Alt–F6 までのキー入力を行ってください。なお、 X に戻る場合は Alt–F7 を押してください。
プログラムによるキーボードマッピングを標準化するため、下記のファイルに対して変更が加えられています:
/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
パッケージ) をお読みください。
システムとは、非常に幅広い意味で国際化され、地域の要件にあわせた変更が加えられます。つまり、国際化 (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=<言語>[[_<国コード>].<エンコーディング>[@<修飾子>]]
systemd
は起動時の早い段階で /etc/locale.conf
を読み込みます。このファイル内に書かれたロケール設定は、個別に設定した場合を除いて、サービスやユーザに継承されます。
以前のバージョンでは、 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 パッケージの更新時にこれらの変数設定が存在すると、新しいほうの設定を書き込むようになっています。
言語と国コードについては、必ず指定してください。言語は 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
を設定することで、英語ではなくスペイン語で表示することができるようになります。
~/.i18n
内でのロケール (言語) 設定 #Edit sourceシステム側で設定された既定値では不都合がある場合は、 ~/.i18n
ファイルを bash のスクリプト形式で記述することで、設定を変更することができます。 ~/.i18n
内での記述は /etc/sysconfig/language
の設定を上書きすることができます。なお、変数名は /etc/sysconfig/language
のものから、 RC_
の接頭辞を取り除いて指定してください。たとえば RC_LANG
ではなく LANG
のようになります:
LANG=cs_CZ.UTF-8 LC_COLLATE=C
メッセージ に対する言語の設定には、フォールバック (後退) という仕組みが用意されています。これはたとえば、優先して使用したい言語のメッセージがアプリケーション側に用意されていない場合、提供されている言語の中からいずれか (一般的には 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
も異なる形式になることに注意してください。
なお、言語の設定によって数値の桁区切り文字が正しく認識されない、という問題が発生する場合があります。これは LANG
に 2 桁の言語コードのみを指定した場合 (例: de
) に起こります。 glibc では /usr/share/lib/de_DE/LC_NUMERIC
に区切り文字の設定があるため、de
では区切り文字が読み込まれないためです。この場合は、 LC_NUMERIC
に de_DE
のような正しい言語コードおよび国コードを入力して、区切り文字を読み込めるようにしてください。
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 にあります。