/ / Warum Baumbefehl Symlink als rekursiv markieren? - Linux, Baum

Warum soll ein Baumbefehl Symlink als rekursiv markieren? - Linux, Baum

Ich habe den folgenden Verzeichnisbaum:

.
└── aaa
└── bbb
└── ccc

Und erstelle einen Symlink:

ln -s ~/test/aaa/bbb slink

Danach fĂĽhre ich den Befehl tree aus:

tree -l

und sehen

.
├── aaa
│   └── bbb
│       └── ccc
└── slink -> /home/kaa/test/aaa/bbb  [recursive, not followed]

Warum Slink als rekursiv markiert? Ist es ein Fehler oder missverstehe ich etwas?

Antworten:

2 fĂĽr Antwort â„– 1

Du hast das benutzt -l Möglichkeit:

Verfolgt symbolische Links, wenn sie auf Verzeichnisse verweisen, als wären sie Verzeichnisse. Symbolische Verknüpfungen, die zu einer Rekursion führen, werden beim Erkennen vermieden.

Der Grund, warum diese Warnung gedruckt wird, ist nicht, dass dies der Fall wäre tatsächlich rekursieren. Wir können klar sehen, dass es einfach die Liste würde bbb/ccc wieder Baum.

Ich vermute, dass das eigentliche Problem das ist halt problem: das tree Befehl kann nicht wissen, ob es wird oder nichtrecurse unendlich, daher muss es bereits angehalten werden, wenn es einen Symlink zu einem Verzeichnis erkennt, das es bereits besucht hat - auch wenn das Befolgen dieses Verzeichnisses nur einen Teilbaum drucken und nicht recurse.

Selbst wenn Sie vorzeitig oder nach einer vordefinierten Anzahl von Rekursionen anhalten könnten, geschieht dies alles, um nicht unendlich viel Speicherplatz zu verbrauchen. Zumindest ist das meine Interpretation.

Der jeweilige Code lautet Hier, Apropos. Wenn die Inode-Nummer des Verzeichnisses, auf das der Symlink verweist, in der Hash-Tabelle gefunden wird (diejenige, mit der gefĂĽllt ist) saveino und findino), wird es einfach ĂĽbersprungen.