ディレクトリ構造とファイルシステム


10

ディレクトリ構造ファイルシステムの違いは何ですか?
Unix / Linux ディレクトリファイルシステムは次のようになります。

次の2つのディレクトリは明らかにディレクトリを知っています。

  /home/abc/xyzdir1 --is a directory
  /home/abc/xyzdir2 -- is a directory

次の3つのサンプルは、ファイルシステムと言っています。

/proc -- is a file system
/ -- is a file system
/bin -- is a file system

上記のコードスニペットからファイルシステムディレクトリを識別するにはどうすればよいですか?


ファイルシステムには、1つ以上のディレクトリが含まれています。すべてのディレクトリが(を含むファイルシステムの一部であり/proc//bin私はあなたが「違い」を特定する方法をクリアしていないよので、あなたの例から)。
roaima

@roaimaはサンプルのコードスニペットを見つけてください
Premraj

あなたの質問はまだあいまいです。/proc/および/binディレクトリです。それらは「ファイルシステム」ではありません。ファイルシステムのマウントポイント(ルート)でもあるディレクトリを特定したいということですか?
roaima

回答:


8

人々はファイルシステムをあまり注意深く使用していません。あなたの例では、私はと言います//binそして/proc、パーティション全体(など/dev/sdb1)がそれらのディレクトリにマウントされているため、ファイルシステムです。私のArch linuxシステムには/binファイルシステムがないため、この例は完全ではありませんが...

% ls -lid /proc /home /boot /
2 drwxr-xr-x  17 root root 4096 Feb 24 12:12 //
2 drwxr-xr-x   4 root root 4096 May 16 14:29 /boot/
2 drwxr-xr-x   5 root root 4096 Mar 14 18:11 /home/
1 dr-xr-xr-x 116 root root    0 May 16 17:18 /proc/

iノード番号2は、従来、オンディスクファイルシステム全体の「ルート」iノードです(これは、フレーズの他の使用法です)。//bootおよび/homeすべてのiノード番号が2であるのに対し/proc、は完全にカーネルによって提示され、ディスク上に存在しないので、iノード1を持っています。これらのiノード番号は、ディスク上のファイルシステム全体、または仮想ファイルシステムを示します。その名前を使用してマウントされます。

/home/abc/xyzdir1「ディレクトリです」という文は、基本的にその名前を使用してディスク上のファイルシステムがマウントされていないことを意味します。ls -lidディレクトリで同じコマンドを実行すると、次のような結果が得られます。

 % ls -lid /home/bediger/src
3670039 drwxr-xr-x 29 bediger bediger 4096 May 17 19:57 /home/bediger/src/

iノード番号3670039は、にマウントされた(私のマシンに)ディスク上のファイルシステムから割り当てられたiノード/homeです。

mountコマンドを呼び出してファイルシステムを見つけることもできます。マウントされているすべてのファイルシステムと、それらがマウントされている場所が一覧表示されます。


「マジックiノード」番号は、ext2シリーズのファイルシステムに固有です。xfsやbtrfsなど、他のほとんど(すべて?)には適用されません。
psusi

私はそれを言うだろう//bin/procパーティション全体が...これらのディレクトリにマウントされているため、ファイルシステムです。/proc後で答えが示すように、 これはには当てはまりません。
Max Nanasy、2015年

1
@MaxNanasy-「ファイルシステム」の2つの意味が一般的に使用されている場合(1.ツリー構造におけるディレクトリの名前と配置、および2.ファイルとディレクトリの構造化データのディスク上のフォーマットとレイアウト、および維持して使用するためのコード)、わかりやすく、循環的な方法で定義されておらず、技術的に正しい用語を考え出すのはかなり困難です。私は他の用語の代わりに、わかりやすいものを選び、「パーティション」を使用しました。より正確な用語を提案することをお勧めします。途方に暮れています。
Bruce Ediger、2015年

4

大幅に単純化しすぎるリスクがある

  • ファイルシステムは、車のエンジンやその他の内部システムのようなものです。
  • ディレクトリ構造は、運転する場所の地図のようなものです。

アンコールを求められて以来、

  • ファイルシステムは、オーディオ/ビデオ信号の配信/伝播のメカニズム(実装の詳細)に似ています。アナログRFブロードキャスト、デジタルRFブロードキャスト、ケーブル、インターネット、ビデオテープ、ビデオディスクなどです。
  • ディレクトリ構造は、テレビ番組のコンテンツのようなもので、コメディ、ドラマ、ニュース、ドキュメンタリー、ゲーム番組、スポーツなどに分類されています。

コードが必要な場合は、この回答の前半で 、Linuxファイルシステムが実行中のシステムに属しているかどうかを確認する方法(検証チェックを行う部分)を参照してくださいroot_dir。それはブルースが言ったことをやっているだけです。それがディレクトリであることを確認し、そのiノード番号が1か2かを確認します。


1
ELI5は良いですが、コードスニペットの回答を追加できますか?ファイルシステムとディレクトリのどちらを識別すること
user1717828

4

私がそれを見る方法、つまりUNIXの意味でのファイルシステムは、ディレクトリツリー(ディレクトリ構造)を実装する方法です。より正確には、UNIXファイルシステムAPIを実装する方法です。ルートファイルシステムは1つの特定の実装によって支えられており、マウントポイントディレクトリに入るときはいつでも、何か別のものに支えられたサブツリーに入ります。

インターフェースは常に同じですが、バックエンドに特定のディスクパーティションがある場合と、ストレージデバイスに書き込みを行わないプログラムがある場合があります。procファイルシステムはカーネルが公開内部というソフトウェアによって補助されます。tmpfsRAMへの書き込み、および他のファイルシステムは、ネットワークへの書き込みや他の場所かもしれないことをソフトウェアによってバックアップされます。

UNIX以外の言葉で言うと、ファイルシステムはデータストレージを編成する方法の1つです。ext4btrfsfat、そしてntfsこの意味ではなく、ファイルシステムのAPIを実装UNIXyの-彼らはある意味でのファイルシステムです。procデータストレージを整理しないため、このより制限されたパラダイム内のファイルシステムとして分類されません。

TL; DR:

  • ディレクトリ構造/ツリー=フロントエンド
  • ファイルシステム=バックエンド

2

ファイルシステムについて話す場合、ディレクトリの受け入れは明確ですが、ファイルシステムは、あなたが話している内容によって異なる意味を持つ場合があります。

あなたの例では、リストされたすべてのパスはディレクトリですが、それらの一部のみがファイルシステムのマウントポイントでもあります。

このdfコマンドを使用して、特定のファイルまたはディレクトリがどのファイルシステムであるかを知ることができます。また、mountほとんどのUnixおよびLinux実装のコマンドを使用して、マシンに存在するファイルシステム、そのタイプ、およびマウントポイントを把握できます。例えば:

$ df /proc
Filesystem     1K-blocks  Used Available Use% Mounted on
proc                   0     0         0    - /proc
$ mount | grep -w /proc
/proc is a file system of type proc

ステートメント/binは、ファイルシステムに疑わしいもので/binあり、ほとんどの場合にマウントされ/ます。

$ df -k /bin
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda5      206292664 180687360  15103212  93% /
$ mount | grep -w /
/dev/sda5 on / type ext4 (rw,errors=remount-ro)

1

最初に、ファイルシステムとディレクトリに関する想定の修正。ファイルシステムには、1つ以上のディレクトリが含まれています。例を使用すると/proc//binがディレクトリになります。それら自体は「ファイルシステム」ではありませんが、それぞれのファイルシステムのルートである可能性があります。

ファイルシステムのマウントポイント(ルート)でもあるディレクトリを特定する場合は、次のように使用できます。

F="$PWD"    # The directory to be tested
if test -d "$F"
then
    echo "$F is a directory"
    test "X$(stat --format '%m' "$F")" = "X$PWD" && echo "$F is a mountpoint"
fi

1

ファイルシステムは、システムの管理が容易になるように、大量のデータを論理的に整理して保存するための方法論です。ファイルシステムは、ファイル、他のファイルとの関係、および各ファイルの属性(ファイルタイプ、ファイル名、ファイルサイズ、ファイル所有者、ファイルタイムスタンプ)で構成されます。

ディレクトリ:たとえば、Unixファイルシステムは基本的にファイルとディレクトリで構成されます。ディレクトリは、他のファイルを含む可能性のある特別なファイルです。最上位のディレクトリは/(スラッシュ)であり、その直下のディレクトリはシステムディレクトリです。 ここに画像の説明を入力してください

/ Linuxファイルシステムのルート

/bin バイナリ実行可能ファイルはここに保持されます

/boot 起動関連ファイルはここに保持されます

/dev デバイスファイルはここに保持されます

/etc システム全体の構成ファイルはここに保持されます

/home 一般ユーザーのホームディレクトリの場所

/lib64 バイナリ実行可能ファイルのライブラリはここに保持されます

/mnt DVD-Rom、USBフラッシュドライブの一時的なマウントポイント。

/optオプションのプログラムは、Windowsのプログラムファイルのようにここにインストールされます

/proc カーネル疑似ファイルシステム

/root スーパーユーザーrootのホームディレクトリ

/sbin システムバイナリ実行可能ファイルはここに保持されます

/tmp 一時ファイルはここに保持されます

/usr ユーザーファイルシステム

/var 変数ファイルはここに保持されます

/srv はサーブフォルダで、このシステムによって提供されるサイト固有のデータが含まれています。

SRCおよび多くのため

次の2つのディレクトリは、ユーザー定義のディレクトリです。

 /home/abc/xyzdir1 --is a directory
 /home/abc/xyzdir2 -- is a directory

その図はひどく時代遅れです。FHS 3.0は2015年6月にリリースされました。FHSはLinuxディストリビューションにのみ適用されることにも注意してください。
fpmurphy 2017

1

pathがディレクトリか、mountpoint(1)を使用しないかを通知するコマンドだけが必要な場合。

私にとっては

$ mountpoint /
/ is a mountpoint
$ mountpoint /bin
/bin is not a mountpoint
$ mountpoint some-file
some-file is not a mountpoint

良いのは、終了ステータスが同じであることを示すため、次のようにスクリプトで使用できることです。

if mountpoint "$foo" >/dev/null; then
  : do mountpoint stuff
elif [ -d "$foo" ]; then
  : do directory stuff
elif [ -e "$foo" ]; then
  : do file stuff 
else
  echo "$foo does not exist!" >/2
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.