webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen Symbolic Link und Shortcut?

Was ist der Unterschied zwischen einem symbolischen Link und einer Verknüpfung?

76
deepthi tm

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 zeigen) 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 die ursprüngliche Datei angesehen. Eine Anwendung benötigt keine spezielle Unterstützung, um einen symbolischen Link zu verwenden.

55
Phoshi

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 einen symbolischen Link als Pfad (ohne das Dateinamenfeld zu ändern).

19

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 fand diese Dokumentation sehr hilfreich (insbesondere den Abschnitt "Beschneiden/Abrollen/Außenverbindungsstellen 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 "über" zu einem anderen Ort oder (b) scheitern.

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 Notepad.exe-Aufrufen funktionieren die ersten beiden, und der dritte schlägt fehl (er ö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.)

Bezüglich der Unterschiede zwischen Verzeichnissymbolen und Junctions siehe diese Diskussion und hier ist 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, während Verzeichnis-Junctions 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 "weiß beispielsweise, dass Verknüpfungen nicht folgen, was zum Löschen des Ziels führen würde, sondern stattdessen die Verknüpfung löschen. Allerdings nicht alle Anwendungen kann symbolische Verknüpfungen korrekt behandeln, das Erstellen einer symbolischen Verknüpfung erfordert die neue Berechtigung "Symbolische Verknüpfung erstellen", über die standardmäßig nur Administratoren verfügen. "

10
Jon Coombs

"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

2
ariefcfa

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

0
sommmen