Was ist der Unterschied zwischen Symbolic Link und Shortcut?

Antworten:

57

Ich denke, der wichtige Punkt ist, dass Verknüpfungen nur eine Datei sind. Sie haben eine Größe (eine kleine, die nur auf die Stelle verweist, auf die sie verweisen) und benötigen eine Anwendung, die diesen Dateityp unterstützt, um verwendet zu werden.

Eine symbolische Verknüpfung befindet sich auf Dateisystemebene und wird von allen als Originaldatei angesehen. Eine Anwendung benötigt keine spezielle Unterstützung, um einen symbolischen Link zu verwenden.

Phoshi
quelle
6
Tree - Walking - Befehle ( so etwas wie die Unix - Werkzeugen find, tar, duetc) Sie müssen über symbolische Links wissen , oder sie können einige sehr dumme Dinge tun. Zum Beispiel kann das Blenden nach symbolischen Links Zyklen im Dateisystem erzeugen, und das ist schlecht .
dmckee
9
@dmckee; Sehr guter Punkt, obwohl keine Anwendung spezielle Unterstützung benötigt, um ihnen zu folgen, brauchen sie spezielle Unterstützung, um ihnen nicht zu folgen!
Phoshi
Ja, ich brauche keine Unterstützung, um sie zu nutzen , aber ich muss über sie Bescheid wissen .
dmckee
@Phoshi Was genau meinst du mit "und sie benötigen eine Anwendung, um diesen Dateityp zu unterstützen, um verwendet zu werden." Können Sie das bitte an einem Beispiel erläutern?
Geek
6
@ Geek: Eine "Verknüpfung" ist effektiv eine Datei, die den Dateipfad einer anderen Datei enthält. Wenn Sie es lesen, lesen Sie eine speziell formatierte Datei, die Ihnen sagt, wo Sie als nächstes suchen müssen. Wenn Ihre Anwendung nicht abhört und die Datei nur wörtlich liest, folgen Sie ihr nicht. Eine symbolische Verknüpfung befindet sich auf Dateisystemebene. Das Dateisystem selbst enthält den "wahren" Pfad zu den Daten. Wenn Sie versuchen, darauf zuzugreifen, rufen Sie die Daten ab, auf die verwiesen wird.
Phoshi
20

Ein "symbolischer Link" kann in funktionaler Weise als Ersatz für ein Verzeichnis oder eine Datei fungieren und wird häufig in Unix / Linux-Umgebungen verwendet. Obwohl dies anscheinend in Windows unterstützt wird, habe ich noch keine tatsächliche Verwendung davon gesehen.

Eine "Verknüpfung" ist nur eine reguläre Datei, die einen Verweis auf die Zieldatei oder das Zielverzeichnis enthält, zusammen mit einigen anderen Dingen wie dem anzuzeigenden Symbol. Anders als bei einem symbolischen Link können Sie unter DOS nicht "cd ./shortcut-name" verwenden (unter Unix / Linux können Sie "cd ./symlink-name" verwenden, und dies funktioniert genau wie ein echtes Unterverzeichnis).

Wenn Sie in den meisten Windows-Anwendungen in einem der Dialogfelder Datei-> GUI öffnen auf eine Verknüpfung klicken, wird das Feld Dateiname mit dem Dateinamen dieser Verknüpfung sowie mit dem Namen eines Unterverzeichnisses gefüllt, während die grafische Benutzeroberfläche in Unix / Linux behandelt wird ein symbolischer Link als Pfad (ohne das Dateinamenfeld zu ändern).

Randolf Richardson
quelle
In Unix / Linux gibt es auch "Hard Links", die immer nur auf Dateien (nicht auf Verzeichnisse) angewendet werden. Hierbei handelt es sich um natürliche Dateinameneinträge im Dateisystem, die zufällig auf dieselben Dateidaten verweisen wie ein anderer Dateinameneintrag an einer anderen Stelle (sie müssen sich nicht im selben Verzeichnis befinden).
Randolf Richardson
4
@Randolf: 1) Hardlinks existieren auch in Windows. 2) Eine Funktion der Shell-Verknüpfungen ist die automatische Zielverfolgung. Wenn das Ziel verschoben wird, funktionieren die meisten Verknüpfungen weiterhin. (In einer AD-Domäne ist es sogar möglich, Dateien über Computer zu verfolgen, wenn Sie beispielsweise eine Festplatte an einen anderen Ort verschieben.) 3) Eine Verwendung von Symlinks besteht darin, eine Datei oder ein Verzeichnis an einen anderen Ort umzuleiten - sie können auf Dateien verweisen (im Gegensatz zu Junctions) ) und Verzeichnisse (im Gegensatz zu Hardlinks), Cross-Dateisysteme (im Gegensatz zu Hardlinks) und AFAIK können sogar auf Netzwerkspeicherorte verweisen.
Grawity
Später Kommentar, und ich bin mir nicht sicher, ob ich nicht weiß, was ich mit Shorcuts mache, aber ich musste einen symbolischen Link anstelle einer Verknüpfung für meine vimrc-Datei erstellen (ich verweise auf ein Dotfiles-Projekt, in dem ich verwende) ein separates Verzeichnis).
Making3
10

Wie bereits erwähnt, ist eine symbolische Verknüpfung eine der auf Dateisystemebene verfügbaren Verknüpfungsarten, die sie für Anwendungen transparent macht. Ich habe diese Dokumentation als sehr hilfreich empfunden (insbesondere den Abschnitt "Beschneiden / Abrollen / Äußere Verbindungsstellen verbinden / Symbolische Links"). Und das Tool dort sieht auch gut aus. (Wenn Sie dies und mklink erwähnen, werden hoffentlich mehr Suchanfragen diese Diskussion finden.)

Eine Verknüpfung ist eine Datei, keine echte Verknüpfung, und wird im Allgemeinen nur dann erfolgreich als Verknüpfung verwendet, wenn sie von der Windows-Benutzeroberfläche (Benutzeroberfläche) interpretiert wird. Wenn Sie beispielsweise auf eine Ordnerverknüpfung doppelklicken, werden Sie von Windows an diesen anderen Speicherort umgeleitet. (Dies schließt die allgemeinen Dialogfelder zum Öffnen und Speichern von Dateien ein, die von den meisten Anwendungen aufgerufen werden.) Auf meinem Desktop habe ich eine Verknüpfung zu diesem Ordner: C: \ ProgramData \ Microsoft \ Windows \ Startmenü \ Programme \ G

Der Shorcut-Dateiname lautet: C: \ Users \ user5 \ Desktop \ Games.lnk, obwohl Windows die Erweiterung .lnk unterdrückt und nur "Games" anzeigt, selbst wenn Sie "Erweiterungen für bekannte Dateitypen ausblenden" deaktivieren. Wenn Sie jedoch eine Eingabeaufforderung öffnen und ein Verzeichnis erstellen, wird Folgendes angezeigt:

C:\Users\user5\Desktop>dir "g*"
 Volume in drive C has no label.
 Volume Serial Number is 900...
 Directory of C:\Users\user5\Desktop
03/08/2014  05:30 PM             1,710 Games.lnk
               1 File(s)          1,710 bytes
               0 Dir(s)  246,818,222,080 bytes free

Ich kann das Äquivalent mit einem Symlink erstellen, indem ich die Option \ D (für Verzeichnis) verwende:

C:\Users\user5\Desktop>mklink /D mysymlink  "C:\ProgramData\Microsoft\Windows\S
tart Menu\Programs\G"
symbolic link created for mysymlink <<===>> C:\ProgramData\Microsoft\Windows\Sta
rt Menu\Programs\G

C:\Users\user5\Desktop>cd mysymlink

C:\Users\user5\Desktop\mysymlink>

(Eine Verzeichnisverknüpfung (\ J) ist ebenfalls eine Option, da dies eine Ordnerverknüpfung ist.) Mit Windows Explorer können Sie, genau wie mit dieser Konsole und den meisten Anwendungen, "nach unten" in dieses scheinbare Unterverzeichnis navigieren, anstatt (a) umzuleiten "across" zu einem anderen Ort oder (b) fehlgeschlagen.

Verknüpfungen verhalten sich nicht wie Unterverzeichnisse. Mit diesem Befehl kann ich das Standardverhalten der Windows-Benutzeroberfläche aufrufen (dies öffnet den Ordner "G" im Windows-Explorer):

C:\Users\user5\Desktop>"Games.lnk"

Während mysymlink als echtes Unterverzeichnis aufgeführt ist (siehe Anzahl) und nicht auf diese Weise gestartet werden kann:

C:\Users\user5\Desktop>dir "my*"
 Volume in drive C has no label.
 Volume Serial Number is 900...

 Directory of C:\Users\user5\Desktop

03/29/2014  06:08 PM    <DIR>          mysubdir
03/29/2014  05:40 PM    <SYMLINKD>     mysymlink [C:\ProgramData\Microsoft\Windo
ws\Start Menu\Programs\G]
               0 File(s)              0 bytes
               2 Dir(s)  246,816,153,600 bytes free

C:\Users\user57\Desktop>mysubdir
'mysubdir' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\user57\Desktop>mysymlink
'mysymlink' is not recognized as an internal or external command,
operable program or batch file.

Umgekehrt können Sie das Verzeichnis nicht in eine Verknüpfung ändern:

C:\Users\user5\Desktop>cd "Games.lnk"
The directory name is invalid.

In der Windows-Benutzeroberfläche können Sie mit der rechten Maustaste klicken, um die Eigenschaften einer Verknüpfung zu bearbeiten. Das Folgende zeigt genau, was tatsächlich in der .lnk-Datei (Binärdaten) gespeichert ist, obwohl ein Hex-Editor dies besser darstellen würde:

C:\Users\user5\Desktop>notepad.exe "Games.lnk"

Beim Versuch, Notepad für einen aktuellen Unterordner auszuführen, wird die Fehlermeldung "Zugriff verweigert" und ein leerer Notepad angezeigt.

Umgekehrt kann ich einen Dateisymlink (kein Ordnersymlink) mit Notepad starten. Von den folgenden Aufrufen von "notepad.exe" funktionieren die ersten beiden und die dritte schlägt fehl (sie öffnet die .LNK-Datei, das binäre Gobbledegook).

C:\Users\user5\Desktop>mklink symplain.txt plain.txt
symbolic link created for symplain.txt <<===>> plain.txt

C:\Users\user5\Desktop>notepad.exe "symplain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt"

C:\Users\user5\Desktop>notepad.exe "plain.txt.lnk"

Dies ist nicht nur eine Konsolensache. Wenn Sie eine Verknüpfung zu Notepad auf meinen Desktop kopieren und versuchen, jede der drei Verknüpfungen per Drag & Drop darauf abzulegen, zeigt sich genau dasselbe Verhalten. (Da die Anwendung im Gegensatz zum Doppelklick die Verknüpfung durch Ziehen und Ablegen interpretieren kann.)

In Bezug auf die Unterschiede zwischen Verzeichnissymlinks und Junctions finden Sie in dieser Diskussion eine sehr hilfreiche Beschreibung :

"Ein wesentlicher Unterschied in der Art und Weise, wie Windows symbolische Verknüpfungen und Verzeichnisverbindungen auflöst, besteht darin, wo die Verarbeitung stattfindet. Windows verarbeitet symbolische Verknüpfungen auf dem lokalen System, auch wenn sie auf einen Speicherort auf einem Remote-Dateiserver verweisen. Windows verarbeitet Verzeichnisverbindungen, die auf eine Remote verweisen Dateiserver auf dem Server selbst. Symbolische Verknüpfungen auf einem Server können sich daher auf Speicherorte beziehen, auf die nur von einem Client aus zugegriffen werden kann, wie auf anderen Client-Volumes, wohingegen Verzeichnisverknüpfungen dies nicht können. Um dies zu beheben, unterstützt Windows Vista den neuen symbolischen Verknüpfungstyp für beide Dateien und Verzeichnisse.

"Viele Dateisystembefehle wurden aktualisiert, um die Auswirkungen symbolischer Verknüpfungen zu verstehen. Der Befehl" Löschen "folgt beispielsweise nicht den Verknüpfungen, was zum Löschen des Ziels führen würde, sondern löscht stattdessen die Verknüpfung. Allerdings sind nicht alle Anwendungen betroffen Wenn Sie eine symbolische Verknüpfung erstellen möchten, benötigen Sie die neue Berechtigung "Symbolische Verknüpfung erstellen", über die standardmäßig nur Administratoren verfügen. "

Jon Coombs
quelle
2

"Symbolische Verknüpfungen unterscheiden sich von Verknüpfungen darin, dass sie einen transparenten * Pfad zum gewünschten Datenobjekt bieten. Mit einer Verknüpfung (.lnk) muss etwas den Inhalt der Verknüpfungsdatei lesen und interpretieren und dann die Datei öffnen, auf die sie verweist (d. H Dies ist ein zweistufiger Prozess. Wenn eine Anwendung einen Symlink verwendet, erhält sie sofort Zugriff auf das Datenobjekt, auf das durch den Symlink verwiesen wird (dh es ist ein einstufiger Prozess). "

Quelle: http://schinagl.priv.at/nt/hardlinkshellext/linkshellextension.html

ariefcfa
quelle
0

Manchmal ist es gut, ein Funktionsbeispiel zu haben, also erkläre schlecht, wie ich diese Funktion benutze.

Ich verwende Google Drive, um Dateien zu sichern, aber manchmal möchte ich Dateien in einem bestimmten Ordner sichern (ich kann sie nicht auf ../google drive verschieben). Besonders mit Windows 10 Universal Apps werden Konfigurationsdateien und ähnliches in appdata gespeichert und die meiste Zeit kann ich diesen Ort nicht ändern.

Ich verwende die native Windows-Stikynot-App und wollte meine Notizen sichern. Deshalb habe ich hier einen Symlink verwendet. Google Drive erkennt den Link als tatsächliche Datei und synchronisiert die Dateien einwandfrei, während sich die tatsächliche Datei noch im Ordner "appdata" befindet.

Wenn ich lokal Dateien wie Projektordner habe, die nicht mit der Cloud synchronisiert werden sollen, verwende ich Verknüpfungen (Kopieren, Einfügen-> Verknüpfung einfügen).

sommmen
quelle