【Linux】FHS-ディレクトリ構造とは?必須のファイルと役割

この記事からわかること

  • LinuxFHS(Filesystem Hierarchy Standard)とは?
  • ルートディレクトリ直下のディレクトリ群種類役割
  • 「/bin」「/boot」「/dev」「/etc」など

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

FHS(Filesystem Hierarchy Standard)とは?

FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)とはLinuxにおけるディレクトリ構造が定義されている『標準』の指標です。

具体的にいうとディレクトリの名称や役割、構造が定められており標準化されたその定義に基づくことでディストリビューション(配布されているOS製品)が異なっても共通の認識で開発や操作を行えるようになっています。

FHSにもバージョンがあり2015年6月3日に更新された「3.0」が現在でも最新のようです。

ルートファイルシステム

ファイル構造はルートファイルシステムと呼ばれ最上層を/で表しルートディレクトリと呼びます。ルートディレクトリ配下に色々な役割を持ったディレクトリが配置され、ツリー状の階層構造が出来上がっています。

ルートディレクトリ配下のディレクトリ一覧を表示させるにはコマンドラインでlsコマンドを実行することで確認できます。 引数に渡すのは/(ルートディレクトリ)を指定します。これは使用しているOS(ディストリビューション)によって多少異なるので参考にしてみてください。

CentOSの場合

$ ls /
bin boot erc lib media opt root sbin sys usr
book dev lib64 mnt proc run srv tmp var 

MacOSの場合

$ ls /
Applications	Users		cores		home		sbin		var
Library		Volumes		dev		opt		tmp
System		bin		etc		private		usr

標準化されているディレクトリ一覧

/ (ルートディレクトリ) 
├──  bin   : 基本的なコマンドファイル
├──  boot  : 初期起動時に必要な処理の設定ファイル
├──  dev   : デバイスファイル
├──  etc   : システムに関わる設定ファイル
├──  home  : 各ユーザーのディレクトリ
├──  lib   : 共有ライブラリファイル
├──  media : リムーバブル媒体のマウントポイント
├──  mnt   : 一時的なマウントポイント
├──  opt   : ソフトウェアやパッケージなどのプログラムが
├──  proc  : カーネルやプロセス情報にアクセスできる仮想的なファイルシステム
├──  root  : スーパーユーザーである「root」のホームディレクトリ
├──  run   : 動作させた時に実行される一時的なデータ
├──  sbin  : システムに関するコマンドファイル
├──  tmp   : テンポラリファイル(一時的に作成されるファイル)
├──  usr   : ユーザー共有のコマンドやライブラリ
└──  var   : ログファイルやスプールファイル

bin

参考記事:bin-コマンド一覧

コマンドライン上で実行する一般ユーザーでも使用可能なコマンドファイル(BINaries)が配置されていきます。catecholsなど基本的でよく使うコマンドはここに登録されています。 使用しているOSによって多少異なりますが、コマンドの実態の場所を検索できるwhichコマンドを使うと以下のように返ってきます。

$ which mv
/bin/mv

$ which date
/bin/date

$ which echo  // Mac OSの場合echoは組み込みコマンド
echo: shell built-in command

「/bin」に登録されているコマンドを確認する

$ ls /bin/
[		dash		expr		ln		pwd		sync
bash		date		hostname	ls		rm		tcsh
cat		dd		kill		mkdir		rmdir		test
chmod		df		ksh		mv		sh		unlink
cp		echo		launchctl	pax		sleep		wait4path
csh		ed		link		ps		stty		zsh

boot

初期起動時に必要な処理を実行する設定ブートローダー(※1)やカーネル(※2)などが配置されます。

※1 ブートローダー:起動時に実行する処理(ブートストラップ)を読み込むためのプログラム

※2 カーネル:OSの心臓部分でソフトウェアとハードウェアを繋ぐ架け橋

ちなみに初期起動時に一番最初に実行されるのはBIOS(バイオス:Basic Input Output System)です。ハードウェアの管理や日付や時刻の設定、各種デバイスの使用権限などを設定、制御しています。

dev

コンピュータに組み込まれているパーツ類(ハードディスク(HDD)/SSD/メモリーなど)周辺機器のハードウェア類(キーボード/プリンタ/マウス/CD-ROMなど)デバイスファイルが配置されます。

Linuxではこれらのデバイスもテキストファイルなどのようにファイルで管理しており、その名称をデバイスファイルと呼びます。デバイスファイルは「udev(Userspace Device management)」という仕組みによって接続時に自動生成されます。

$ ls /dev
aes_0				ptysa				ttyq2
afsc_type5			ptysb				ttyq3
ptyq0				rdisk0s2			ttyu9
ptyq1				rdisk0s3			ttyua
ptyq2				rdisk1				ttyub

etc

主にシステムやアプリケーションに関わる設定ファイルが配置されます。

ユーザー情報が格納されている/etc/passwdファイルや各ユーザーのログインパスワードが格納されている/etc/shadowファイルなどが設置されています。

$ ls /etc
aliases					ntp_opendirectory.conf
apache2					pam.d
asl			    		passwd
bashrc					pf.conf
csh.login				profile
localtime				ssl

home

各ユーザーが自由に扱えるディレクトリが配置されます。一般ユーザーを追加するとここにそのユーザー名のディレクトリが作成され、その中に「desktop」や「downloads」などのディレクトリが存在します。

$ ls /home
ame hare yuki

lib

共有ライブラリ(library)ファイルが配置されます。プログラミング言語(pythonやjava)やデバイスドライバなどが主に格納されています。

Macの場合はlibではなくLibraryでした。

$ ls /lib
NetWorkManager firewalld  python2.7   modules 
rpm            udev       debug       kernel   
sendmail       systemd    yum-plugin  locale 

Macの場合もっと馴染み深い「Fonts」や「Bluetooth」などがここに格納されています。

Mac OSの場合

$ ls /Library
Apple			DriverExtensions	LaunchDaemons		Security
Application Support	Extensions		Logs			Speech
Audio			Filesystems		Modem Scripts		Spotlight
Bluetooth		Fonts			OSAnalytics		StagedDriverExtensions
Catacomb		GPUBundles		Perl			StartupItems
Components		Input Methods		Printers		SystemProfiler
CoreAnalytics		Java			Ruby			User TemplateWebServer
DirectoryServices	Keychains		ScriptingAdditions

media

CR-ROMやDVDなどのリムーバブル媒体(取り外しが可能なメディア媒体)のマウントポイントが配置される。

マウントポイントとは接続したメディア(リムーバブル媒体)などにコンピュータからアクセスできるようにファイルの1つとして追加(マウント)するためのディレクトリなどのこと。

$ ld /media
dvdrom

mnt

一時的にマウント(MouNT)されるマウントポイントが配置される。

opt

オプション(OPTion)のソフトウェアやパッケージなどのプログラムが配置されます。

LinuxやMacOSパッケージ管理システムの1つhomebrewなどもここに格納されています。homebrewはプログラミング言語やソフトウェアのバージョン管理、インストールなどを管理しやすくしてくれるシステムです。

Macの場合

$  ls /opt
homebrew

proc

カーネルに関する情報やプロセス(PROCess)の状態などにアクセスできる仮想的なファイルシステムです。

仮想的に作成されているディレクトリなので実際のファイルとして存在する訳ではありません。procの中にはCPUの情報が記述される「cpuinfo」やメモリ情報が記述される「meminfo」などが格納されています。lspcilsusbなどのコマンドで該当ファイルを表示させることもできます。

パス 概要
/proc/cpuinfo cpuの情報
/proc/interrupts IRQの情報
/proc/ioports I/Oの情報
/proc/meminfo メモリの情報
/proc/modules モジュールの情報
/proc/bus/usb/ USBの情報
/proc/bus/pci/ PCIの情報

root

スーパーユーザーである「root」のホームディレクトリです。一般ユーザーではここにはアクセスできません。

$ ls /root
ls: cannot open directory /root: Permission denied

run

動作させた時に実行される一時的なデータなどが配置されます。

拡張子が「.pid」である実行中のプロセスに関する情報が格納されたファイルなどが主に格納されています。

$ ls /run
NetWorkManager log    auditd.pid   crond.pid   
mount          httpd  sudo         udev

sbin

システムに関するコマンドファイル(System BINaries)が配置されます。

カーネルの処理を確認できるdmesgコマンドやファイルシステムをマウントするmount、シャットダウンするためのshutdownなど、システムに直接関わるようなコマンドが数多く格納されています。

$ ls /sbin
dmesg			halt			mount		newfs_udf
fsck			launchd			mount_msdos		pfctl
fsck_apfs		md5			mount_nfs		ping
fsck_cs			mknod			mount_ntfs	  shutdown
fstyp			mount_apfs		mpioutil		umount

tmp

テンポラリファイル(temporary files:一時的に作成されるファイル)が配置されるディレクトリです。

usr

User Services and Routines(:ユーザーサービスとルーチン)の略称。全ユーザーが使えるコマンドや共有で使用するライブラリなどを格納していきます。/usr/配下にさらにディレクトリが設置されていて役割が分かれています。

usr/bin

ユーザーが使用する一般的なコマンドが配置されています。エイリアスやviエディタ、ファイルのzip形式での圧縮コマンドなどが格納されています。

$ ls /usr/bin
alias	   cal			cd
less		 col			locale			
sudo  	 nl				uname
vi       find			vim
wall     from			perl
which    git			head
pp				zip

usr/sbin

システムに関するコマンドファイルが配置されています。

usr/lib

共有ライブラリが配置されています。

usr/local

ローカルシステムに使用されるコマンドなどが配置されています。

usr/share

アーキテクチャ(x86など)に依存しないファイルが配置されています。

usr/src

カーネルのソースコードなどが配置されています。

var

ログファイルやプリンタのスプールなど中身が可変的(VARiable)なファイルが配置されます。usrディレクトリと同じくさらに中にディレクトリが分かれています。

var/cache

キャッシュファイルが配置されます。

var/lock

ロックファイルが配置されます。

var/log

ログファイルが配置されます。

var/run

稼働中のシステムに関する情報を保持したファイルが格納されます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index