はじめに
Linux等の、*Nix系OSを使い始めた人向けに。
Linuxを初めて触った時や、まだ慣れない時に、「なにがどこにあるかよくわからない」とか「そもそもなにがあるかわからない」とか、「ログを読め」とか言われるけどログってどこにあるの???とか思うことがあると思います。
で、慣れてくると「なんかログは/var/log
ディレクトリにあるらしい」とか、「設定ファイルは/etc
にあるらしい」とかをなんとなく知ったり、覚えたりしていきます。
このディレクトリについてのお話。
Filesystem Hierarchy Standard
これ、「Filesystem Hierarchy Standard」という名前で標準化されています。
Filesystem Hierarchy Standard / Wikipedia
Wikipediaより。
Filesystem Hierarchy Standard(ファイルシステム・ヒエラルキー・スタンダード、FHS、ファイルシステム階層標準)は、Linuxを含むUNIX系オペレーティングシステムでの主なディレクトリとその内容を定めたものである。
現在のFilesystem Hierarchy Standardのバージョンは、3.0です。
Filesystem Hierarchy Standard Specifications Archive
The Filesystem Hierarchy Standard (FHS)
バージョン 3.0の仕様から、いくつか見てみましょう。
Filesystem Hierarchy Standard Version 3.0
-
/
… ルートファイルシステム The Root Filesystem -
/home
… ユーザーのホームディレクトリ User home directories (optional) -
/etc
… 設定ファイルを置くディレクトリ Host-specific system configuration -
/bin
… すべてのユーザーで必要となるコマンドを置くディレクトリEssential user command binaries (for use by all users) -
/usr/bin
… 多くのユーザーが使うコマンドを置くディレクトリ Most user commands -
/var/log
… ログファイルを置くディレクトリ Log files and directories
などなど。
この仕様書の目次(の他にも、Wikipediaなど)に書かれているディレクトリをさらっと眺めてみるだけでも、「このディレクトリ、見たことある」といった印象を持ったりするのではないでしょうか?
また、yum
やapt
といった、各Linuxディストリビューションのパッケージマネージャーを使ってインストールされるパッケージなどもFilesystem Hierarchy Standardに従ったものが多いので、これに慣れるとなんとなく「設定ファイルは/etc/foo
にあるんだろう」とか、「ログは/var/log/bar
にあるんだろう」といった推測が立てられるようになり、理解が早くなりますね。
自分でファイルを置いたり作ったりする場合も、このあたりのディレクトリ構成を意識するようにすると、他の人が後から見ても意図が伝わりやすかったりするでしょう。
環境変数PATH
ここからは、少しオマケ的に。
よく「PATH
を通す」とか言われるやつですね。この環境変数に:
区切りで設定したディレクトリ内にあるコマンドは、シェルがパスを解決することができます。
例えばVagrantで起動した仮想マシン(CentOS 7)ですが、環境変数PATH
の内容を表示してみます。
$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin
これを見ると、/usr/local/bin
や/usr/local/sbin
配下にもパスが通っていて、デフォルトではこれらのディレクトリ内にはなにもないのですが、ユーザーがコマンドを配置することで全体で使える共通的なコマンドをインストールすることができます。
$ ll /usr/local/bin
total 0
docker-compose
とかが、/usr/local/bin
ディレクトリを使ったインストール例になっていますね。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
一般ユーザーに、どのようなパスが設定されるのかは$HOME/.bashrc
、$HOME/.bash_profile
、/etc/bashrc
、/etc/profile
などを見ることになります。
ところで、root
ユーザーだと環境変数PATH
に設定されている内容が、少し変わります。
# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
このあたりですね。
/sbin
これは、/sbin
がシステム管理者用のコマンドを置くディレクトリだからですね。
あとは、/usr/local/sbin
が/usr/local/bin
の前にあるなど、細かく違ったりもします。
/usr/local/sbin:/usr/local/bin
systemctl
/ journalctl
でサービスの状態やログを見る
ログファイルを見る以外にも、サービス(デーモンプロセス)の状態を確認したり、システムのログを確認したりすることがsystemctl
、journalctl
を使って行うことができます。
サービスの状態を確認する。
$ sudo systemctl status [ユニット名]
サービスやOSの出力したログを確認する。
# サービスユニットを指定してログを見る
$ sudo journalctl -u [ユニット名]
# カーネルログを見る
$ sudo journalctl -k
# 全ログを出力
$ sudo journalctl
このあたりの情報を押さえつつ、ログを見たりしつつ、少しずつLinuxに慣れて強くなっていくとよいでしょう。
そして、より強い相手に立ち向かっていきましょう。