序章


LinuxおよびUnixライクなオペレーティングシステムを初めて使用する場合、オペレーティングシステムを操作およびナビゲートするための基本的な方法は、複雑で混乱を招くように思われる可能性があります。 新規ユーザーが苦労している領域の1つは、ファイルシステムの構造を理解する方法です。

この記事では、標準のLinuxファイルシステムのさまざまな部分について説明します。 最も興味深いディレクトリのいくつかと、サーバー環境でさまざまなコンポーネントを探す場所について説明します。

デモンストレーションの目的で、Ubuntu12.04サーバーを使用します。 他のLinuxディストリビューションは、わずかに異なる方法で実装しているため、フォローしていて、自分のシステムとの不一致に気付いた場合は、ディストリビューションのドキュメントを確認してください。

Linuxファイルシステムレイアウトの歴史に関する簡単なメモ


Linuxは、ファイルシステム編成の概念の多くをUnixの前身から継承しています。 1979年までさかのぼると、Unixは、準拠システムがファイルを編成する方法を制御するための標準を確立していました。

Linux Filesystem Hierarchy Standard(略してFHS)は、Linux Foundationによって維持されている規範的な標準であり、相互運用性、管理の容易さ、およびクロスディストリビューションアプリケーションを確実に実装する機能のためにLinuxディストリビューションが維持する必要のある組織レイアウトを確立します。

これらのシステムを扱うときに言及する重要なことの1つは、Linuxがほぼすべてをファイルとして実装することです。 つまり、テキストファイルはファイル、ディレクトリはファイル(単に他のファイルのリスト)、プリンターはファイルで表されます(デバイスドライバーはプリンターファイルに書き込まれたものをすべて物理プリンターに送信できます)など。 。

これは場合によっては過度に単純化されていますが、システムの設計者が推奨したアプローチ、つまりテキストとバイトを前後に渡し、さまざまなコンポーネントの編集とアクセスに同様の戦略を適用できることを示しています。

この記事では、ディストリビューションが実際の標準から逸脱することが多いため、仕様に正確に従うことはしません。 代わりに、Ubuntu 12.04サーバーをチェックして、実装された実際のディレクトリ構造を見つけます。 これは、平均的なユーザーにとってはるかに便利です。

シンプルなナビゲーション


実際にファイルシステムのレイアウトを詳しく調べる前に、コマンドラインからファイルシステムをナビゲートする方法についていくつかの基本を知っておく必要があります。 私たちはあなたをあなたの足に乗せるためにここで最低限をカバーします。

自分を方向付ける


最初に行う必要があるのは、ファイルシステムに自分自身を向けることです。 これを行うにはいくつかの方法がありますが、最も基本的な方法の1つは、「printworkingdirectory」を表すpwdコマンドを使用することです。

pwd

/root

これは単にあなたが現在いるディレクトリを返します。 結果を解釈する方法を少し学びます。

見回す


現在のディレクトリにあるファイルを確認するには、「list」を表すlsコマンドを発行します。

ls

bin   etc         lib         mnt   root  selinux  tmp  vmlinuz
boot  home        lost+found  opt   run   srv      usr
dev   initrd.img  media       proc  sbin  sys      var

これにより、現在のディレクトリ内のすべてのディレクトリとファイルがわかります。

lsコマンドは、いくつかのオプションのフラグを取ることができます。 フラグは、コマンドのデフォルトの動作を変更して、データを別の方法で処理または表示します。

たとえば、ディレクトリエントリの後に「/」を表示してファイルとディレクトリを簡単に区別したい場合は、-Fフラグを追加できます。

ls -F

bin/   home/        media/  root/     srv/  var/
boot/  [email protected]  mnt/    run/      sys/  [email protected]
dev/   lib/         opt/    sbin/     tmp/
etc/   lost+found/  proc/   selinux/  usr/

最も一般的な2つのフラグは、-l-aの可能性があります。 最初のフラグは、コマンドに情報を長い形式で出力するように強制します。

ls -l

total 76
drwxr-xr-x  2 root root  4096 Apr 26  2012 bin
drwxr-xr-x  3 root root  4096 Apr 26  2012 boot
drwxr-xr-x 13 root root  3900 Dec  4 18:03 dev
drwxr-xr-x 78 root root  4096 Dec  4 19:29 etc
drwxr-xr-x  3 root root  4096 Dec  4 19:28 home
lrwxrwxrwx  1 root root    33 Apr 26  2012 initrd.img -> /boot/initrd.img-3.2.0-24-virtual
drwxr-xr-x 16 root root  4096 Apr 26  2012 lib
. . .

これにより、ファイルまたはディレクトリごとに1行の出力が生成されます(名前は右端にあります)。 これには、私たちが今興味を持っていない多くの情報があります。 私たちが興味を持っているの一部は、最初の文字であり、それがどのようなファイルであるかを示しています。 最も一般的な3つのタイプは次のとおりです。

  • :通常のファイル
  • d :ディレクトリ(他のファイルを一覧表示する特定の形式のファイル)
  • l :ハードリンクまたはソフトリンク(基本的にはシステム上の別のファイルへのショートカット)

-aフラグは、隠しファイルを含むすべてのファイルを一覧表示します。 Linuxでは、ファイルがドットで始まる場合、ファイルは自動的に非表示になります。

ls -a

.  ..  .bash_logout  .bashrc  .profile

この例では、すべてのファイルが非表示になっています。 最初の2つのエントリ、...は特別です。 .ディレクトリは、「現在のディレクトリ」を意味するショートカットです。 ..ディレクトリは、「現在のディレクトリの親ディレクトリ」を意味するショートカットです。 これらを活用する方法をすぐに学びます。

動き回る


ファイルシステム内のどこにいるかを確認し、周囲の状況を確認できるようになったので、ファイルシステム全体を移動する方法を学習します。

別のディレクトリに移動するには、「ディレクトリの変更」を表すcdコマンドを発行します。

cd /bin

コマンドの後には、絶対パス名または相対パス名を指定できます。

絶対パスは、ディレクトリツリーの最上位からディレクトリの場所を指定するファイルパスです(これについては後で説明します)。 上記のように、絶対パスは「/」で始まります。

相対パスは、現在の作業ディレクトリからの相対パスです。 これは、ディレクトリ構造の先頭から場所を定義する代わりに、現在の場所に関連して場所を定義することを意味します。

たとえば、documentsという現在のディレクトリ内のディレクトリに移動する場合は、次のコマンドを発行できます。

cd documents

最初から「/」がない場合は、現在のディレクトリをパスを探すためのベースとして使用するように指示されます。

ここで..ディレクトリが役に立ちます。 現在のディレクトリの親ディレクトリに移動するには、次のように入力します。

cd ..

Linuxファイルシステムレイアウトの概要


Linuxファイルシステムを表示するときに最初に知っておく必要があるのは、組み込まれているデバイスの数に関係なく、ファイルシステムが単一のツリー内に含まれていることです。

これが意味するのは、オペレーティングシステムにアクセス可能なすべてのコンポーネントがメインファイルシステムのどこかに表されているということです。 プライマリオペレーティングシステムとしてWindowsを使用している場合、これは以前とは異なります。 Windowsでは、各ハードドライブまたはストレージスペースは独自のファイルシステムとして表され、文字指定でラベル付けされます(C:システムファイル階層の標準の最上位ディレクトリであり、追加のドライブまたはストレージスペースには他の文字ラベルが付けられます)。

Linuxでは、システム上のすべてのファイルとデバイスは、開始「/」で示される「ルート」ディレクトリの下にあります。

注:これは、「ルート」とも呼ばれるデフォルトの管理ユーザーとは異なります。 また、「/root」にあるデフォルトの管理ユーザーのホームディレクトリとも異なります。

したがって、オペレーティングシステム全体の最上位ディレクトリに移動して、そこに何があるかを確認したい場合は、次のように入力できます。

cd /
ls

bin   etc         lib         mnt   root  selinux  tmp  vmlinuz
boot  home        lost+found  opt   run   srv      usr
dev   initrd.img  media       proc  sbin  sys      var

すべてのファイル、デバイス、ディレクトリ、またはアプリケーションは、この1つのディレクトリの下にあります。 この下で、残りのディレクトリ構造の始まりを見ることができます。 以下で詳細を説明します。

/置き場


このディレクトリには、起動時に最小限の作業環境を実現するために必要な基本的なコマンドとプログラムが含まれています。 これらは、ファイルシステムの他の部分が損傷したり使用できなくなったりした場合でも、メンテナンスのためにシステムを起動できるように、システム上の他のプログラムとは別に保持されます。

このディレクトリを検索すると、lspwdの両方がここにあることがわかります。 cdコマンドは、実際には、このディレクトリにもある(bash)を使用しているシェルに組み込まれています。

/ブート


このディレクトリには、システムの起動に必要な実際のファイル、イメージ、およびカーネルが含まれています。 /binには基本的で不可欠なユーティリティが含まれていますが、/bootには、システムを実際に起動できるようにするコアコンポーネントが含まれています。

システムのブートローダーを変更する必要がある場合、または実際のカーネルファイルと初期ramdisk(initrd)を確認したい場合は、ここでそれらを見つけることができます。 このディレクトリは、非常に早い段階でシステムにアクセスできる必要があります。

/ dev


このディレクトリには、システム上のデバイスを表すファイルが格納されています。 システムで使用可能なすべてのハードドライブ、端末デバイス、入力または出力デバイスは、ここではファイルで表されます。 デバイスに応じて、さまざまな方法でデバイスを操作できます。

たとえば、/dev/sdaのようなハードドライブを表すデバイスの場合、ファイルシステムにマウントしてアクセスできます。 一方、/dev/lprのようなラインプリンターを表すファイルがある場合は、そのファイルに直接書き込んで情報をプリンターに送信できます。

/等


これは、システム管理者として作業している場合に多くの時間を費やすファイルシステムの1つの領域です。 このディレクトリは基本的に、さまざまなシステム全体のサービスの構成ディレクトリです。

デフォルトでは、このディレクトリには多くのファイルとサブディレクトリが含まれています。 機能に関係なく、システム上のほとんどのアクティビティの構成ファイルが含まれています。 複数の構成ファイルが必要な場合、多くの場合、これらのファイルを保持するためにアプリケーション固有のサブディレクトリが作成されます。 システム全体のサービスまたはプログラムを構成しようとしている場合は、これが最適な場所です。

/家


この場所には、システム上のすべてのユーザー(管理ユーザー、rootを除く)のホームディレクトリが含まれます。 他のユーザーを作成した場合、通常、そのユーザー名に一致するディレクトリがこのディレクトリの下に作成されます。

各ホームディレクトリ内で、関連付けられたユーザーに書き込みアクセス権があります。 通常、通常のユーザーは自分のホームディレクトリへの書き込みアクセスしかできません。 これにより、ファイルシステムがクリーンに保たれ、誰もが重要な構成ファイルを変更できないようになります。

ホームディレクトリ内では、多くの場合、ツールのユーザー固有の構成を可能にする隠しファイルとディレクトリ(開始ドットで表されます)です。 多くの場合、/etcディレクトリでシステムのデフォルトを設定でき、各ユーザーは必要に応じて自分のホームディレクトリでそれらを上書きできます。

/ lib


このディレクトリは、/binおよび/sbinディレクトリに必要なすべての共有システムライブラリに使用されます。 これらのファイルは基本的に、システム上の他のプログラムに機能を提供します。 これは、頻繁にアクセスする必要のないディレクトリの1つです。

/ lost + found


これは、Linuxファイルシステム修復プログラムである/fsckによって回復されたファイルを含む特別なディレクトリです。 ファイルシステムが破損してリカバリが実行された場合、ファイルは検出されることがありますが、それらの場所への参照は失われます。 この場合、システムはそれらをこのディレクトリに配置します。

ほとんどの場合、このディレクトリは空のままになります。 破損または同様の問題が発生し、回復操作を実行せざるを得ない場合は、終了時にこの場所を確認することをお勧めします。

/メディア


このディレクトリは通常、起動時に空です。 その本当の目的は、リムーバブルメディア(CDなど)をマウントする場所を提供することです。 サーバー環境では、これはほとんどの状況で使用されません。 ただし、Linuxオペレーティングシステムがメディアディスクをマウントしていて、それがどこに配置されているかわからない場合は、これが安全な方法です。

/ mnt


このディレクトリは、デバイスの組織のマウントポイントとしてのみ機能するという点で、/mediaディレクトリに似ています。 この場合、この場所は通常、外付けハードドライブなどのファイルシステムをマウントするために使用されます。

このディレクトリは、ネットワークアクセス可能なドライブをマウントするためにVPS環境でよく使用されます。 サーバーにマウントしたいリモートシステム上のファイルシステムがある場合、これはそれを行うのに適した場所です。

/ opt


このディレクトリの使用法はかなりあいまいです。 一部のディストリビューションで使用されていますが、他のディストリビューションでは無視されています。 通常、オプションのパッケージを保存するために使用されます。 Linuxディストリビューションの世界では、これは通常、リポジトリからインストールされなかったパッケージとアプリケーションを意味します。

たとえば、ディストリビューションが通常パッケージマネージャーを介してパッケージを提供しているが、ソースからプログラムXをインストールした場合、このディレクトリはそのソフトウェアに適した場所になります。 この種のソフトウェアのもう1つの一般的なオプションは、/usr/localディレクトリにあります。

/ proc


/procディレクトリは、実際には単なる通常のディレクトリではありません。 実際には、そのディレクトリにマウントされるのは、それ自体の疑似ファイルシステムです。 procファイルシステムには実際のファイルは含まれていませんが、代わりにLinuxカーネルの内部状態を反映するように動的に生成されます。

これは、カーネル自体とは異なる情報をリアルタイムで確認および変更できることを意味します。 たとえば、cat /proc/meminfoと入力すると、メモリ使用量に関する詳細情報を取得できます。

/根


これは、管理ユーザー(「ルート」と呼ばれる)のホームディレクトリです。 通常のホームディレクトリとまったく同じように機能しますが、代わりにここに格納されます。

/走る


このディレクトリは、オペレーティングシステムがブートプロセスの初期段階で一時的なランタイム情報を書き込むためのものです。 一般に、このディレクトリ内の情報の多くについて心配する必要はありません。

/ sbin


このディレクトリは、オペレーティングシステムの使用に不可欠と見なされるプログラムが含まれているという点で、/binディレクトリによく似ています。 違いは通常、/sbinにはシステム管理者が使用できるコマンドが含まれ、他のディレクトリにはシステムのすべてのユーザー向けのプログラムが含まれていることです。

/ selinux


このディレクトリには、セキュリティが強化されたLinuxに関する情報が含まれています。 これは、オペレーティングシステムへのアクセス制御を提供するために使用されるカーネルモジュールです。 ほとんどの場合、これは無視できます。

/ srv


このディレクトリは、コンピュータが提供するサービスのデータファイルを格納するために使用されます。 ほとんどの場合、このディレクトリの機能はファイルシステムの他の場所に実装できるため、このディレクトリはあまり使用されません。

/ tmp


これは、システムに一時ファイルを保存するために使用されるディレクトリです。 コンピュータ上の誰でも書き込み可能であり、再起動しても持続しません。 これは、ほんの少しだけ必要なファイルをここに置くことができることを意味します。 システムがシャットダウンすると、それらは自動的に削除されます。

/ usr


このディレクトリは、システム上で最大のディレクトリの1つです。 基本的に、/usr/bin/usr/libなど、ルート/ディレクトリにあるものと同様のフォルダのセットが含まれています。 この場所は、基本的に、システムの最小限の使用に必要のないすべての重要でないプログラム、それらのドキュメント、ライブラリ、およびその他のデータを格納するために使用されます。

これは、システム上のほとんどのファイルが保存される場所です。 重要なサブディレクトリには、/usr/localがあります。これは、ローカルでコンパイルされたプログラムを格納するための/optディレクトリの代替です。 チェックアウトするもう1つの興味深い点は、/usr/shareディレクトリです。このディレクトリには、ドキュメント、構成ファイル、およびその他の便利なファイルが含まれています。

/ var


このディレクトリには、変数データが含まれているはずです。 実際には、これは、システムの使用に伴って増大すると予想される情報またはディレクトリを含むために使用されることを意味します。

たとえば、システムログとバックアップはここに格納されます。 このディレクトリのもう1つの一般的な使用法は、Webサーバーを操作している場合にWebコンテンツを保存することです。

結論


物が保管される場所の詳細はディストリビューションごとに異なる可能性がありますが、一般に、ここで説明した場所は正しい方向にあなたを導くはずです。

ファイルシステムを探索する最良の方法は、さまざまなディレクトリをトラバースして、内部のファイルが何のためにあるのかを調べることです。 さまざまなディレクトリをさまざまな機能に関連付け、特定のタスクの実行先を推測できるようになります。 各ディレクトリの目的に関するクイックリファレンスが必要な場合は、次のように入力して、組み込みのマニュアルページを使用できます。

man hier

これにより、一般的なファイルシステムレイアウトの概要と各場所の目的がわかります。