
スラッシュ(/
)は実際にLinuxのルートディレクトリ名の一部ですか?それとも、それのシンボルなのでしょうか?
だから/etc
何?
修正する
/dev/sda2
Linuxルートディレクトリのブロックデバイスであるとします。
$sudo debugfs /dev/sda2 debugfs 1.44.1(2018年3月24日) デバッグ: パスワード [pwd] INODE: 2 パス: / [ルート] INODE: 2 パス: / デバッグ: 統計/ インデックスノード:2 タイプ: ディレクトリ モード: 0755 フラグ: 0x80000 世代: 0 バージョン: 0x00000000:00000077 ユーザー: 0 グループ: 0 プロジェクト: 0 サイズ: 4096 ファイルアクセス制御リスト:0 リンク:25ブロック:8 ピース:住所:0数量:0サイズ:0 ctime:0x5b13c9f1:3f017990 - 2018年6月3日日曜日15:28:57 atime:0x5b13ca0f:3b3ee380 - 2018年6月3日日曜日15:29:27 時間:0x5b13c9f1:3f017990 - 2018年6月3日日曜日15:28:57 crtime:0x5aad1843:00000000 - 2018年3月17日土曜日16:59:39 追加のinodeフィールドサイズ:32 範囲: (0):9249
したがって、そこにinode#2というディレクトリがありますが、名前はありません。
答え1
POSIX.1-2008 標準表現
単一パス名は、
/
プロセスのルートディレクトリとして解決する必要があります。空のパス名は正常に解決されません。
標準はさらに差別化されます。ファイル名そしてパス名。/
ルートディレクトリのパス名。ディレクトリ名は「root」ですが、ファイルシステムには名前がなく、ファイル名もありません。ファイル名がある場合、その名前はルートディレクトリの上のディレクトリのディレクトリエントリになり、そのようなディレクトリはありません。
この文字は/
パス区切り文字なので、ファイル名の一部にすることはできません。
明確にするために:/
いいえ名前ルートディレクトリですが、道それに、そのパス名。
/etc
別のパス名です。これはそのディレクトリへの絶対パスですetc
。パスのディレクトリ名はetc
(ファイル名はetc
)です。
/usr/local/bin/curl
は実行可能ファイルのパス名で、ディレクトリのパス名と同じですcurl
。/etc
etc
答え2
スラッシュ仕切り;目次名前区切り記号は含まれませんが、フルパス名区切り文字を含みます。
だから「ルートレベル」 /
いいえ名前。ほとんどのUnixファミリーシステムでは、これは.
およびなどの特殊なケースとして扱われます..
(もちろん、2つの間のルートレベルでは違いはありません)。
名称は異なる場合があります。 POSIX.1-2017を例に挙げると、一般的に使用される一部定義:
-
1つ以上の文字で
<slash>
始まるパス名も参照してください。パス名。 -
ファイルを識別するために使用される文字列です。 POSIX.1-2008の文脈では、パス名は終了ヌルバイトを含む{PATH_MAX}バイトに制限される可能性があります。オプションの開始
<slash>
文字が続き、その後にはゼロ<slash>
文字以上で区切られたファイル名が続きます。パス名には、オプションで 1 つ以上の末尾の<slash>
文字を含めることができます。複数の連続した文字は、正確に2つの先行文字がある場合を除いて、<slash>
1と同じように扱われます。注:パス名に移植可能なファイル名文字セットの文字に対応するバイトのみが含まれている場合(参照)<slash>
<slash>
移植可能なファイル名文字セット)、<slash>
文字、およびシングルエンド<NUL>
文字で構成されている場合、パス名はサポートされているすべてのロケールで文字列として使用されます。それ以外の場合、パス名は(文字列の代わりに)文字列にすることができます。さらに、文字のシングルバイトエンコーディング<slash>
要件はすべてのロケールで同じであり、マルチバイト文字内には表示されないため、パス名が文字でない場合<slash>
でも、パス名の文字への参照は明確に定義された文字列です。ただし、このプロパティは、移植可能なファイル名文字セットの残りの文字に必ずしも適用されるわけではありません。 -
ファイル名を見るファイル名。
-
{NAME_MAX}
ファイル名を指定するために使用される1からバイトまでのバイトシーケンス。名前を構成するバイトに文字を含めることはできません<NUL>
。<slash>
パス名の文脈では、各ファイル名の後には1つ<slash>
以上の<NUL>
文字が続く必要があります。他の場所では、ファイル名の後に文字が続くと<NUL>
文字列が形成されます(必ずしも文字列である必要はありません)。ファイル名指すそしてdot-dot
特別な意味があります。ファイル名は「パス名コンポーネント」とも呼ばれます。また、見ることができますパス名。
だから...探しているなら言う、それは最初の目的地ではないかもしれません。こんなチュートリアルUnixの概念このページは、たとえば、「フルパス名」が「絶対」パス名と同義語であることを指摘するのに役立ちます。
答え3
Unixでは、ファイル(ディレクトリはファイルのみです)には「名前」はありません。リンク名前があり、リンクは名前をファイルにマップするディレクトリのエントリです。
あなた可能話す、リンクする与えるファイル名。ただし、注:これは複数のリンクを持つことができるため、ファイルが複数の名前を持つことができることを意味します。
ルートディレクトリはルートディレクトリにすぎないため、接続できる「親」ディレクトリがないため、関連付けられた名前を持つことはできません。理論的には、他のディレクトリのルートディレクトリへのリンクを追加することは可能ですが、ほとんどのUnicesはファイルシステム階層(実際に方向性グラフ)でサイクルが発生する可能性があり、グラフ内の検出ループが高価であるため、既存のディレクトリにリンクします。を追加することを禁止します。カーネルが名前を解決しようとしたときにそれを検出しないと、無限再帰が発生する可能性があります。
したがって、デフォルトでは、ルートディレクトリには名前を記録できるディレクトリがないため、名前はありません。
他の回答で指摘したように、名前とパス(名前)を区別する必要があります。ルートディレクトリできるpath(name)と呼ばれます/
。
答え4
「名前」という言葉は、使用において多少柔軟性があります。 「完全なパス名」を表すことができ、「ディレクトリエントリ」を表すことができます。
たとえば、および/etc/foo
と/var/tmp/../../etc/foo
は/tmp/../../../../../../foo
両方とも同じファイルを参照する方法です。名前、ディレクトリにあるfoo
ときと同じです/etc
。
それでは基本に戻りましょう。
Unixのファイル名は次の部分で構成されています。要素ディレクトリ区切り文字で区切られます/
。コンポーネントのほとんど唯一の制限は、/
またはNUL文字を含めることができないことです。
したがって、「完全なパス名」は/etc
完全な文字列です/etc
。これはetc
、ルートディレクトリにコンポーネントがあることを意味します。
同様に、コンポーネントはディレクトリに/x/y/z/foo
あります。foo
/x/y/z
これで、ルートディレクトリは親ディレクトリにコンポーネントがないため一意です。ただ名前にはフルパス名があります/
。