So erstellen Sie einen Symlink zu root

13

Ich möchte einen Symlink zum root ( /) -Ordner in meinem Home-Verzeichnis erstellen . Aber wenn ich das versuche, bekomme ich

~$ ln -s /
ln: failed to create symbolic link './': File exists

Ich kann das natürlich mit Nautilus Ctrl+ machen D, also weiß ich, dass es möglich ist.

Wie geht das mit dem Terminal?

Ankur S
quelle
Dies ist zwar eine gute Frage, aber ich möchte wissen, warum Sie dies tun möchten. Ist es zu schwer einzutippen cd /? Oder möchten Sie einen Link erstellen, der immer wieder eine Schleife durchläuft? Beispiel: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . etc.
Terrance
nicht wirklich. Sie könnten dies tun, ohne auf root verlinken zu müssen. Eigentlich war ich nur neugierig, warum Sie es nicht tun können
Ankur S
Meinetwegen. Vielen Dank für die Beantwortung meiner Frage. =)
Terrance

Antworten:

17

Du vermisst den Namen des Links, es sollte sein:

cd ~
ln -s / root

Was dann einen Symlink namens root in Ihrem Home-Verzeichnis erstellen würde. Die korrekte Verwendung ist also:

ln -s <target> <link-name>

Die Fehlermeldung, die angezeigt wird, ist, dass ./immer eine Verknüpfung vorhanden ist und mit diesem Namen keine Verknüpfung erstellt werden kann. Verwenden Sie am besten den lnBefehl 2 mit beiden Parametern, um eine falsche Verknüpfung zu verhindern.

Von man ln:

ZUSAMMENFASSUNG

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  

BESCHREIBUNG

Erstellen Sie im ersten Formular einen Link TARGETmit dem Namen LINK_NAME. Erstellen Sie im 2. Formular einen Link zum TARGETaktuellen Verzeichnis. Erstellen Sie im 3. und 4. Formular Verknüpfungen zu den einzelnen TARGETEinträgen DIRECTORY. Standardmäßig feste Links erstellen, symbolische Links mit --symbolic. Standardmäßig sollte nicht jedes Ziel (Name des neuen Links) bereits vorhanden sein. 4 . Beim Erstellen von festen Links muss jeder TARGETvorhanden sein. Symbolische Links können beliebigen Text enthalten. Bei einer späteren Auflösung wird ein relativer Link in Bezug auf das übergeordnete Verzeichnis interpretiert.

Obligatorische Argumente für lange Optionen sind auch für kurze Optionen obligatorisch.

OPTIONEN

Der letzte Parameter ist <link-name>standardmäßig der letzte Teil des Ziels. Wenn also das Ziel der Linkname ist, /path/dirwird dieser standardmäßig verwendet, dirwenn nichts angegeben wird. 1 Und wenn Sie zum Beispiel erstellen ~/etcmit mkdir ~/etcund führen Sie dann ln -s /etcin ~den Link nicht erstellen kann , weil der Name / Verzeichnis existiert bereits. 3

Und Sie können den in Ihrem Home-Verzeichnis erstellten Link sehen (hier als Beispiel können Sie ihn natürlich beliebig benennen):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 Danke an @thomasrutter für den Hinweis.
2 Siehe auch man linkund man symlink
3 Danke an @steeldriver für das Bereitstellen eines Beispiels in Kommentaren.
4 Hervorgehobener Teil, um den Text hervorzuheben, da er für die Frage relevant ist.

Videonauth
quelle
mein einziger verbleibender zweifel ist, warum ein befehl so ln -s /etcfunktionieren sollte wie dieser nicht? Vielen Dank für die Antwort,
Ankur S
Es wird erstellt, weil es einen Verzeichnisnamen hat, /root oder eine Pfadkomponente sein kann, sodass das Programm nicht wissen kann, was jetzt gemeint ist. /etcist nur ein expliziter unterscheidbarer Pfad.
Videonauth
7
@AnkurSonawane da ./wird es immer geben - ./etcnicht so wahrscheinlich. Versuchen Sie es mkdir etczuerst, und dann ln -s /etc- Sie werden auchFile exists
Steeldriver
8
Der letzte Parameter, link-name, wird standardmäßig auf den letzten Teil des Ziels gesetzt, wenn er nicht angegeben wird. Wenn also das Ziel der Linkname ist, /some/dirwird dieser standardmäßig verwendet, dirwenn nichts angegeben wird. Wenn das Ziel jedoch gerecht /ist, wird dies nicht funktionieren.
Thomasrutter
Ich bin nicht der Meinung, dass dies äußerst bedeutsam ist, aber die Erklärung von @steeldriver klingt angesichts der File ExistsAusgabe vernünftiger . Nicht, dass es sowieso wichtig wäre, da dies der entartete Fall ist
Ankur S