61
35

More than 3 years have passed since last update.

Linuxとかの、/etcとか/var/logとかいうディレクトリってなんだ?

Last updated at Posted at 2019-12-05

はじめに

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)

Filesystem Hierarchy Standard

バージョン 3.0の仕様から、いくつか見てみましょう。

Filesystem Hierarchy Standard Version 3.0

などなど。

この仕様書の目次(の他にも、Wikipediaなど)に書かれているディレクトリをさらっと眺めてみるだけでも、「このディレクトリ、見たことある」といった印象を持ったりするのではないでしょうか?

また、yumaptといった、各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ディレクトリを使ったインストール例になっていますね。

Install Docker Compose

$ 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がシステム管理者用のコマンドを置くディレクトリだからですね。

System binaries

あとは、/usr/local/sbin/usr/local/binの前にあるなど、細かく違ったりもします。

/usr/local/sbin:/usr/local/bin

systemctl / journalctlでサービスの状態やログを見る

ログファイルを見る以外にも、サービス(デーモンプロセス)の状態を確認したり、システムのログを確認したりすることがsystemctljournalctlを使って行うことができます。

サービスの状態を確認する。

$ sudo systemctl status [ユニット名]

サービスやOSの出力したログを確認する。

# サービスユニットを指定してログを見る
$ sudo journalctl -u [ユニット名]

# カーネルログを見る
$ sudo journalctl -k

# 全ログを出力
$ sudo journalctl

このあたりの情報を押さえつつ、ログを見たりしつつ、少しずつLinuxに慣れて強くなっていくとよいでしょう。

そして、より強い相手に立ち向かっていきましょう。

61
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
61
35