GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Absolute / kanonische / relative Pfade?

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 -Zeichen

beginnt

und „relativer Pfadname“ wie folgt:

Ein Pfadname, der nicht mit einem -Zeichen beginnt.

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.)


Linux
  1. Nginx- und Apache-Standardpfade

  2. Wie verschiebe ich einen relativen symbolischen Link?

  3. Bestimmen Sie, ob relativer oder absoluter Pfad im Shell-Programm

  4. Entfernen Sie redundante Pfade aus der $PATH-Variablen

  5. So sehen Sie den vollständigen absoluten Pfad eines Symlinks

Navigieren im Dateisystem mit relativen Pfaden in der Befehlszeile

Wie entferne ich Leerzeichen in Pfaden für Scp in Linux?

Rsync:Wie verschiebt man absolute Symlinks?

Absoluter vs. relativer Pfad in Linux:Was ist der Unterschied?

Wie schließe ich absolute Pfade für tar aus?

Wie erhalte ich das absolute Verzeichnis einer Datei in Bash?