web-dev-qa-db-ja.com

スラッシュ(/)は、Linuxルートディレクトリの名前の一部ですか?

スラッシュ(/)Linuxルートディレクトリの名前の一部ですか?それとも単なる象徴なのでしょうか?

/etc 等々?

更新

と仮定します/dev/sda2は、Linuxルートディレクトリのブロックデバイスです。

ドル Sudo debugfs /dev/sda2
debugfs 1.44.1(24-Mar-2018)
debugfs:  pwd 
 [pwd] INODE:2 PATH:/
[root] INODE:2 PATH:/
debugfs:  stat /
inode:2 タイプ:ディレクトリ    モード:0755フラグ:0x80000 
生成:0バージョン:0x00000000:00000077 
ユーザー:0グループ:0プロジェクト:0サイズ:4096 
ファイルACL:0 
リンク:25ブロック数:8 
フラグメント:アドレス:0番号:0サイズ:0 
 ctime:0x5b13c9f1:3f017990-Sun Jun 3 15:28:57 2018 
 atime: 0x5b13ca0f:3b3ee380-2018年6月3日15:29:27 
 mtime:0x5b13c9f1:3f017990-2018年6月3日15:28:57 
 crtime:0x5aad1843:00000000-3月17日16:59:39 2018 
追加のiノードフィールドのサイズ:32 
 EXTENTS:
(0):9249 

したがって、そこにディレクトリがあり、iノード#2ですが、名前がありません。

46
mlibre

POSIX.1-2008標準は言う

単一の/で構成されるパス名は、プロセスのルートディレクトリに解決されます。 nullパス名は正常に解決されません。

この規格では、さらにfilenamespathnamesを区別しています。 /は、ルートディレクトリのパスのパス名です。ディレクトリの名前は「ルートディレクトリ」ですが、ファイルシステムでは名前がなく、ファイル名がありません。ファイル名がある場合、その名前はルートディレクトリの上のディレクトリのディレクトリエントリであり、そのようなディレクトリはありません。

文字/はパス区切り文字であるため、ファイル名の一部にすることはできません。

明確にするために:/は、ルートディレクトリのnameではなく、pathであり、そのpathnameです。

/etcは別のパス名です。 etcディレクトリへの絶対パスの名前です。そのパスにあるディレクトリの名前はetcです(ファイル名はetcです)。

/usr/local/bin/curlcurl実行可能ファイルのパス名で、/etcetcディレクトリのパス名と同じです。

62
Kusalananda

スラッシュはセパレーター;ディレクトリnamesにはセパレータは含まれませんが、フルパス名にはセパレータが含まれます。

したがって、「ルートレベル」/にはnameがありません。ほとんどのUnixライクなシステムでは、これは...のような特別なケースとして扱われます(もちろん、ルートレベルでは2つの間に違いはありません)。

命名法は異なる場合があります。たとえば、POSIX.1-2017には、一般的に使用されるいくつかの definitions がリストされています。

  • .2絶対パス名

    1つまたは2つ以上の<slash>文字で始まるパス名。 パス名 も参照してください。

  • .271パス名

    ファイルを識別するために使用される文字列。 POSIX.1-2008のコンテキストでは、パス名は終端のnullバイトを含めて{PATH_MAX}バイトに制限される場合があります。オプションの<slash>文字で始まり、その後に<slash>文字で区切られた0個以上のファイル名が続きます。パス名には、オプションで1つ以上の末尾の<slash>文字を含めることができます。複数の連続する<slash>文字は、先頭の2つの<slash>文字の場合を除いて、1つの<slash>と同じであると見なされます。

    注:パス名がポータブルファイル名の文字セット( Portable Filename Character Set を参照)、<slash>文字、および単一の終了文字<NUL>からなる文字に対応するバイトのみで構成される場合、パス名はサポートされているすべてのロケールで文字列として使用できます。それ以外の場合、パス名は(文字列ではなく)文字列のみである可能性があります。さらに、<slash>文字のシングルバイトエンコーディングはすべてのロケールで同じである必要があり、マルチバイト文字内で発生しない必要があるため、パス名内の<slash>文字への参照は、パス名が文字列。ただし、このプロパティは、ポータブルファイル名の文字セット内の残りの文字に対して必ずしも適用されるわけではありません。

  • .272パス名コンポーネント

    Filename のFilenameを参照してください。

  • .170ファイル名

    ファイルの名前に使用される1〜{NAME_MAX}バイトで構成されるバイトのシーケンス。名前を構成するバイトには、<NUL>または<slash>文字を含めないでください。パス名のコンテキストでは、各ファイル名の後に<slash>または<NUL>文字が続きます。他の場所では、<NUL>文字が後に続くファイル名は文字列を形成します(ただし、文字列である必要はありません)。ファイル名dotおよびdot-dot特別な意味があります。ファイル名は、「パス名コンポーネント」と呼ばれることもあります。 パス名 も参照してください。

だから...clarificationを探しているなら、それが最初の目的ではないかもしれません。このNIX Conceptsページなどのチュートリアルは役に立ちます。たとえば、「絶対パス名」は「絶対パス名」と同義であることを指摘します。

37
Thomas Dickey

Unixでは、ファイル(およびディレクトリは単なるファイル)に「名前」はありません。 Links名前があり、リンクは名前をファイルにマップするディレクトリ内のエントリです。

あなたは可能性があります言う、ファイルに名前giveをリンクしますが、注意:これは、複数のリンクを持つことができるため、ファイルに複数の名前を付けることができることを意味します。

ルートディレクトリはルートディレクトリなので、リンクが存在する可能性のある「上位」のディレクトリは存在しないため、関連付けられた名前はありません。理論的には、他のディレクトリ内のルートディレクトリにリンクを追加することは可能ですが、ほとんどのUnicesは、既存のディレクトリへのリンクの追加を禁止しています。グラフではコストがかかりますが、それらを検出しないと、カーネル内で名前を解決しようとしたときに無限再帰が発生する可能性があります。

したがって、基本的に、ルートディレクトリには名前がありません。名前を記録できるディレクトリがその上にないためです。

他の回答で指摘されたように、名前とパス(名前)を区別する必要があります。ルートディレクトリcanは、パス(名前)/を介して参照されます。

19
Jörg W Mittag

「名前」という単語の使用は少し柔軟です。 「完全修飾パス名」を参照できます。 「ディレクトリエントリ」を参照できます。これは、さまざまな関数またはルーチンに渡される「ファイル名」を参照できます。

したがって、たとえば、/etc/fooおよび/var/tmp/../../etc/fooおよび/tmp/../../../../../../fooは、すべて同じファイルを参照する方法です。それらはすべて有効ですnames/etcディレクトリにある場合はfooです。

基本に戻りましょう。

UNIXのファイル名は、ディレクトリ区切り文字/で区切られたcomponentsで構成されています。コンポーネントに対するほとんど唯一の制限は、それらが/またはNUL文字を含むことができないことです。それ以外は許可されます。

したがって、/etcの「完全修飾パス名」は完全な文字列/etcです。これは、ルートディレクトリにetcコンポーネントがあることを意味します。

同様に、/x/y/z/foo/x/y/zディレクトリにfooコンポーネントを持ちます。

現在、ルートディレクトリは、親ディレクトリにコンポーネントがないという点で一意です。 it onlyはフルパス名を名前として持っています:/

7
Stephen Harris