Was ist der Unterschied zwischen absoluten / kanonischen / relativen Pfaden?
Ich denke, dass absolute mit einem /
beginnt . Darf es /../
enthalten ?
Unterscheidet sich ein kanonischer Pfad von einem absoluten Pfad darin, dass er /../
nicht enthalten darf? ?
Ist foo
ein relativer Pfad?
Googeln posix canonical path
ist nicht viel aufgetaucht ... Wie lauten die POSIX-Referenzen für diese Begriffe?
Akzeptierte Antwort:
POSIX definiert „absoluter Pfadname“ wie folgt:
Ein Pfadname, der mit einem oder mehr als zwei
und „relativer Pfadname“ wie folgt:
Ein Pfadname, der nicht mit einem
Das ist alles für relative und absolute Pfade.
Kanonische Pfade sind in POSIX nicht definiert, aber der Begriff bezieht sich normalerweise auf vergleichbare Pfade, d.h. Wenn Sie zwei Pfade zu einem Dateisystemobjekt nehmen und sie in eine kanonische Form konvertieren, sollte das Ergebnis genau dann identisch sein, wenn die beiden Dateisystemobjekte identisch sind. Dies beinhaltet das Entfernen von "..", wie Sie erwähnt haben, aber es bedeutet auch, symbolische Links aufzulösen; ein kanonischer Pfad könnte also definiert werden als
Ein Pfadname, dessen Komponenten alle echte Verzeichnisse oder Dateien sind, mit Ausnahme von „.“ und „..“ und deren Schrägstriche nicht wiederholt werden
In POSIX-Begriffen ist ein kanonischer Pfadname effektiv ein aufgelöster Pfadname (solange Sie akzeptieren, dass kanonische Pfadnamen nur für existierende Dateisystemobjekte bestimmt werden können).
Beachten Sie, dass dies nur funktioniert, weil fest verknüpfte Verzeichnisse nicht erlaubt sind …
Um Ihre Fragen zu beantworten:
- ein absoluter Pfad kann
/../
enthalten; - ein kanonischer Pfad darf
/../
nicht enthalten , noch darf es/./
enthalten ,//
(außer wohl an erster Stelle) oder symbolische Links; foo
ist ein relativer Pfad.
(Pedanterweise sind das alles Pfad-Namen , nicht nur Pfade.)