UNIXやLinuxのシステム管理(システム・コマンド・設定)に関する世界観6(システム情報と設定)です。
Linuxの設定ファイルは、基本的に/etcディレクトリに存在する。
/etcディレクトリの中に、システムの設定はほとんどある。特に重要なディレクトリは/etc/rc.d/や/etc/init.d/で、Linuxが起動時にinitで実行する設定スクリプトがある。
また、Red Hat系のLinuxでは、/etc/sysconfig/にさまざまなシステムの設定ファイルがあり、/etc/init.d/networkや/etc/sysconfig/network、/etc/sysconfig/network-scripts/ifcfg-eth0などは見慣れて久しい。
Linuxでは、/usr以下のディレクトリは個人で変更するのは控えた方が良いところがあるが(システムのバイナリリソースが置かれており、パッケージ管理システムで管理すべき)、逆に/etc以下のディレクトリはどんどん個人で変更して構わない。
また、/etc以外のディレクトリにも、Linuxの管理に必要なディレクトリがいくつかある。
/varディレクトリは、/etcとは違い「使っていて容量が変化するファイル」を置くディレクトリで、システムによって使っている間に変化していく。ログファイルやスプールファイルが置かれる。全てのログファイルは/var/log/以下にある。
/tmpディレクトリには、一時的なファイルが保管される。一時的に生まれては消えていく。
/mntディレクトリには、静的にマウントしたデバイスのファイルシステムが置かれる。
/mediaディレクトリには、/mntディレクトリと同じようにマウントしたディレクトリが置かれるが、デバイスを接続するたびに自動的にマウントされる。
/devディレクトリには、デバイスドライバによって利用可能となったデバイスファイルが置かれる。今のLinuxではudevがこのデバイスファイルを自動作成する。
/sysにはカーネルの情報やudevのためのデバイスの情報が入っている。
/procにはプロセスの情報が入っている。/sysに移動する前は、カーネルの情報も/procに含まれていた。
また、これら以外にも、/usr以下にシステム管理のためのファイルが入っていることがある。たとえばudevでは、カスタマイズしたルールファイルは/etc/udev/rules.dにあるが、そのデフォルトの設定は/usr/lib/udev/rules.dにある。また、/usr/share/docにはドキュメントが置かれ、/usr/share/fontsにはフォントが置かれる。
Linuxファイルシステム階層も参照のこと。
2023.02.13編集
こうしたシステムの設定ファイルの他に、ユーザー個人個人のための設定ファイルが、原則ホームディレクトリ(/home/username/以下)に置かれる。
これらのファイルは、UNIXの慣習から、ファイル名の最初が「.」から始まる。たとえば、「.emacs」とか「.bashrc」といった具合である。これらを「ドットファイル」と呼ぶ。
ドットファイルは、標準のlsなどのコマンドやファイルマネージャなどでは「隠しファイル」として扱われるため、表示されないことがある。適切なコマンドオプションやアプリケーションの設定を変えることで、これらのドットファイルを含めて全てのファイルを表示できる。
ドットファイルにアクセスするためには、ホームディレクトリにcdしてvi .bashrcのようにするか、ホームディレクトリを表す「~」を使って~/.bashrcとしたり、/home/username/.bashrcとすれば良い。
Linuxでは、/etcの設定を空白のタブで区切られたプレーンテキストで行い、ドットファイルは「初期化スクリプト」とすることが慣習的にままある(そうでない場合も多い)。特に.bashrcや.xinitrcなどは内部がシェルスクリプトであり、アプリケーションの起動時に自動的に読み込まれ実行される。
ドットファイルには、こうしたホームディレクトリに置かれるファイルの他、いくつか例外的に、それぞれのデータディレクトリの中に作られることもある。Apacheのディレクトリ単位での設定ファイルである.htaccessや、gitの.gitディレクトリなどがこれに当たる。
シェル変数は、シェルの中だけで保たれる。
$ HOGE=hoge
シェル変数を参照するには、$を変数名につける。
$ echo $HOGE hoge
環境変数は、システム全体に適用される変数。設定するにはシェル変数を指定した後でexportする。
$ HOGE=hoge $ export HOGE
たとえば以下のようにPATHを変更できる。
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin $ PATH=$PATH:/home/assy/bin $ export PATH
.bash_profileや.bashrc、.xsessionや.xinitrcなどに上記設定を記述することで、システムで常に同じ設定を使用できる。
シェル変数の一覧はsetコマンド、環境変数の一覧はenvコマンドで表示できる。
現在のシェルでのスクリプトの読み込みにはsourceコマンドを使う。
$ source .bashrc
一時的に設定を変えることで、「LANG=Cの状態でmanを見る」などということもできる。
$ LANG=C man ls
以下の設定・初期化ファイルに環境変数などの設定を行う。
設定ファイル | 説明 |
---|---|
.bash_profile | Bashにログインした時に実行される。 |
.bash_logout | Bashからログアウトした時に実行される。 |
.bashrc | Bashの起動時(ログイン後の起動を含む)に毎回実行される。 |
.bash_history | コマンド履歴が記録される。 |
.xsession | Xのディスプレイマネージャ(GNOMEなどのログイン画面)からログインした時に実行される。 |
.xinitrc | xinitやstartxなど、手動でXを立ち上げた時に実行される。 |
このほか、Xアプリケーション(たとえばkterm)のリソース(たとえば背景や文字の色)を設定できる.Xdefaultsや.Xresources、Xにおけるキーマップを変更できる.Xmodmapがある。詳しくはX11設定とプログラミングを参照のこと。
(以上は初期設定 - 山下陽介のページを参考に執筆しました。)
標準のシェルでshを使うことは少ないとは言うが、Debianなどでは/bin/shにsh互換のdashを使うため、シェルスクリプトでbashの機能は利用できない。注意すること。
設定ファイル | 説明 |
---|---|
/etc/ld.so.conf | ライブラリのパスを記述する。 |
/etc/fstab | マウント設定。 |
/etc/crontab | cronに実行させる処理。 |
/etc/passwd | パスワードの設定。 |
/etc/shadow | シャドウパスワードの設定。 |
/etc/group | グループの設定。 |
/etc/gshadow | グループのシャドウパスワードの設定。 |
/etc/sudoers | sudo設定ファイル。 |
/etc/shells | ログインシェルの一覧。 |
以下のページが参考になります。
以下のページが参考になります。
[改訂第3版]Linuxコマンドポケットリファレンスを参考にしています。
システムの基本的な情報を表示・設定する4つのコマンド。
コマンド | 説明 |
---|---|
arch | マシンのアーキテクチャ名を表示する。 |
uname | システム情報(カーネルの名前とかバージョンとか。uname -aで全部の情報を表示)を表示する。 |
hostname | ホスト名を表示・設定する。システムのホスト名の設定ファイルは/etc/hostnameとなる。 |
sysctl | カーネルパラメータを表示・設定する。 |
以下を参照のこと。
以下のコマンドは以下のハードウェア情報を表示する。
コマンド | 説明 |
---|---|
lspci | PCIバスについてのデバイス情報。 |
lsusb | USBデバイス。 |
lsscsi | SCSIデバイス。 |
lscpu | CPU情報。 |
lsblk | ブロックデバイス一覧。 |
ディスクの空き領域を表示するdfコマンド、ディレクトリ内のファイル容量を表示するduコマンドなどもある。
Linux アーカイブ・同期・デバイス処理も参照のこと。
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道を参考に執筆しました。
/procディレクトリはプロセスファイルシステム(procfs)で、プロセスやカーネルの情報を取得したり変更したりすることができる。
たとえば、プロセスIDが1ならば、/proc/1からプロセスの情報を得ることができる。
もともとはプロセスだけの仕組みだったが、次第にカーネルの中のシステム情報をリアルタイムで取得したり、動的に設定を変更することができる機構として使われるようになった。
後日注記:Linux 2.6では、/procに存在したプロセスとは無関係のカーネルの情報を/sysディレクトリ(sysfs)に移動しました。
/procファイルシステムには、カーネルやコンピュータのさまざまな情報がアクセスできるようになっている。
コンピュータのCPUを見る場合、
cat /proc/cpuinfo
を実行すると、CPUの情報にアクセスできる。また、
cat /proc/meminfoでメモリの情報を確認できる。
2024.10.06編集
ロギングとは、ログを取ること。システムの基本的なログは/var/log/syslogにある。
UNIXシステム管理(8A.システムロガー)を参照のこと。
モニタリングとは、システムの稼働状況を監視すること。特にサーバーなどのマシンでは、自分からプロセスを実行しなくても、稼働中のシステムが勝手にプロセスを動かす。
プロセスやスレッドの情報を監視するためには、topコマンドを使う。
Linux モニタリングを参照のこと。
Webmin/Cockpitを参照のこと。
hoge.confはhoge.conf.org、さらにhoge.conf.org1やhoge.conf.org2のようにバックアップファイルを作りましょう。
Apacheも参照のこと。
wdはworking directory(作業ディレクトリ)の略。
また、pgはprocess group(プロセスグループ)の略。policy group(ポリシーグループ)と間違えやすいので注意しよう。
最近は、dotfiles(ユーザーのホームディレクトリにある、ユーザー設定を行うためのドットから始まるファイル)をGitHubのようなリポジトリで管理する手法が流行っています。
dotfilesをリポジトリ管理することで、複数の環境で設定を共通化でき、新しい環境を設定することが簡単になります。
詳しくは以下を参照のこと。
Gitも参照のこと。
2023.06.29
Linuxの設定には、一時的な設定と永続的(恒久的)な設定があります。
一時的な設定とは、すぐさま設定が有効になる代わり、システムを再起動すると失われてしまう設定のことで、多くがコマンドの実行で設定します。
永続的な設定とは、システムを再起動しても残り続ける設定のことで、次回の起動時から有効になります。
永続的な設定をするには、設定ファイルを編集します。LinuxやUNIXの共通の設定ファイル(/etc/*.confなど。名前に.confが付かない場合もある)である場合もあれば、sysconfigのようにディストリビューション固有の設定になる場合もあります。あるいは、.bashrcのように、ドットファイルの初期化スクリプトで設定する場合もあります。デーモンの起動スクリプト(RCスクリプト)の場合は、chkconfigなどのコマンドで設定・管理する場合もあります。
また、設定を有効にするためのコマンドを、間隔をあけて定期的に実行したい場合もあります。このような時にはcronを使います。cronで実行したいスクリプトを書いて、それをcronの設定ファイルであるcrontabに、実行する時間・間隔と一緒に指定します。そうすると、cronデーモンが指定した時間にスクリプトを実行してくれるようになります。
よりユーザーフレンドリーな設定の方法として、ディストリビューションによって用意されているGUIの設定フロントエンドを使う方法もあります。設定ファイルをviなどのテキストエディタで編集するのと同じことが、GUIから直感的に行えます。ユーザーがLinuxの初心者・入門者で、設定ファイルの記法や構成を何も知らない場合は、そのようなGUIの設定ツールを使うこともできます。ただし、このようなツールはディストリビューションごとに異なり、またどの設定ファイルの項目に設定内容が反映されるか分かりづらいため、上級者を目指すのであれば、設定ファイルを手動で設定する方法も知っておくべきでしょう。
2023.08.26
Linuxネットワーク(1.コマンド)とLinuxネットワーク(2.設定)を参照のこと。
UNIXシステム管理7(タイムゾーンとロケール)を参照のこと。
設定ファイル。
ネットワークの設定。
ハードウェアの設定。
印刷とプリンターの設定。
Linuxプリンターを参照のこと。
X11の設定。
X11設定とプログラミングを参照のこと。
フォントの設定。
Linuxフォントを参照のこと。