ubuntuusers.de

Symbolischer Link auf versteckte Datei

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 12.04 (Precise Pangolin)
Antworten |

linzus

Anmeldungsdatum:
31. Dezember 2015

Beiträge: 147

Hallo,

ich habe gerade versucht einen symbolischen Link auf eine versteckte Datei zu erzeugen:

1
ln -s /.quelle /ziel

leider funktioniert der Link nach dem anklicken nicht, sondern sagt die Datei wäre nicht existent.

Wieso ist das so, und wie kann ich trotzdem einen funktionierenden Link erzeugen?

Vielen Dank und ebensolche Grüße,

....

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

linzus schrieb:

Hallo,

ich habe gerade versucht einen symbolischen Link auf eine versteckte Datei zu erzeugen:

1
ln -s /.quelle /ziel

leider funktioniert der Link nach dem anklicken nicht, sondern sagt die Datei wäre nicht existent.

Wieso ist das so, und wie kann ich trotzdem einen funktionierenden Link erzeugen?

Aus der Hilfe zu ln:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
~$ ln --help
Aufruf: ln [OPTION]... [-T] ZIEL LINK_NAME     (1. Form)
 oder:  ln [OPTION]... ZIEL                    (2. Form)
 oder:  ln [OPTION]... ZIEL... VERZ            (3. Form)
 oder:  ln [OPTION]... -t VERZ ZIEL...         (4. Form)
In der 1. Form: Eine Verknüpfung namens LINK_NAME auf ZIEL erstellen
In der 2. Form: Eine Verknüpfung auf ZIEL im aktuellen Verzeichnis erstellen
In der 3. und 4. Form: Verknüpfungen zu jedem ZIEL in VERZ erstellen
Als Standardvorgabe werden harte Verknüpfungen erstellt, für symbolische
Verknüpfungen ist die Option --symbolic anzugeben.
Beim Erzeugen von harten Verknüpfungen muss jedes ZIEL existieren. Bei
symbolischen Verknüpfungen kann dagegen beliebiger Text stehen; bei späterer
Auflösung wird eine relative Verknüpfung bezogen auf ihr beinhaltendes
Verzeichnis interpretiert.

Ohne den Parameter -T gibst Du nur das Ziel an, für das Du eine Verknüpfung erstellen möchtest. So sollte es funktionieren:

1
ln -T ziel Linkname

lionlizard

Avatar von lionlizard

Anmeldungsdatum:
20. September 2012

Beiträge: 6244

Wohnort: Berlin

linzus schrieb:

1
ln -s /.quelle /ziel

Du versuchst im Root-Verzeichnis einen Link "ziel" zu erzeugen, der auf die versteckte Datei ".quelle" im Root-Verzeichnis verweist. Das kann so nicht funktionieren, weil Du ohne sudo keine Schreibrechte im Root-Verzeichnis hast. Was Du vermutlich eigentlich machen wolltest ist

ln -s ./.quelle ./ziel

bzw.

ln -s .quelle ziel

was in beiden Fällen im aktuellen Verzeichnis einen Symlink "ziel" erstellt, der auf die versteckte Datei ".quelle" verweist, die sich ebenfalls im aktuellen Verzeichnis befindet. Soll "ziel" nicht im aktuellen Verzeichnis erstellt werden, dann kann man entweder vorher in das Zielverzeichnis wechseln, dann kann man den Pfad zu ".quelle" als relativen Pfad angeben

~$ cd Dokumente
~/Dokumente$ ln -s ~/.bashrc ziel

, oder man gibt den Pfad zu ".quelle" als absoluten Pfad an, dann darf "ziel" einen relativen Pfad enthalten

~$ /home/$USER/.bashrc Dokumente/ziel

Während

~$ ln -s ~/.bashrc ~/Dokumente/ziel

zwar einen Link erzeugt, dieser weist aber nicht auf die versteckte Datei ".bashrc" im Home-Verzeichnis.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13207

Bleys schrieb:

Ohne den Parameter -T gibst Du nur das Ziel an, für das Du eine Verknüpfung erstellen möchtest.

Ich finde diese Erläuterung etwas irreführend, zumindest unvollständig. Die Option -T beeinflusst, ob ln den Link bei Angabe eines Verzeichnisses in das Verzeichnis packt oder nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
$ ls -l
total 0
$ mkdir a
$ touch b
$ ls -l
total 4
drwxrwxr-x 2 robert robert 4096 Feb 24 08:23 a/
-rw-rw-r-- 1 robert robert    0 Feb 24 08:23 b
$ ln -svT b a
ln: failed to create symbolic link ‘a’: File exists
$ ln -sv b a
‘a/b’ -> ‘b’
$ ln -svT b c
‘c’ -> ‘b’
$ ls -l *
-rw-rw-r-- 1 robert robert    0 Feb 24 08:23 b
lrwxrwxrwx 1 robert robert    1 Feb 24 08:24 c -> b

a:
total 0
lrwxrwxrwx 1 robert robert 1 Feb 24 08:23 b -> b

Der Fehler in Zeile 10 entsteht, weil "a" bereits existiert und ln keinen Link "a → b" anlegen kann. Wenn man -T weglässt und als Ziel ein Verzeichnis angibt, wird der Link in das Verzeichnis gelegt (Zeilen 11f).

So sollte es funktionieren:

1
ln -T ziel Linkname

Ich denke, das löst in diesem Fall das Problem nicht (siehe lionlizard Erläuterung).

linzus

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2015

Beiträge: 147

hallo,

vielen Dank für eure Hilfe!

leider bin ich nicht früher zum Antworten gekommen, weil mich die Antworten erst etwas verwirrt haben, weswegen ich es verschoben habe ☺

ich habe etwas schludrig formuliert: ich wollte natürlicherweise schon

1
ln -s /home/ich/Desktop/.test.txt ../Documents/test.txt

schreiben.

Die Option -T ist interessant, sie hilft mir nur in meinem Fall nicht direkt weiter.

Ich habe es gerade nochmals versucht, weil ihr mich ja bestätigt habt, es möge so funktionieren, ich erhalte auch den link "test.txt", allerding kann ich ihn nicht öffnen (wobei ich mich gerade gefragt habe, was durch den doppelklick überhaupt geschieht → eigentlich sollte er ja dann versuchen ".test.txt" mit einem Editor zu öffnen...)

Mit Ordnern klappt das linken wunderbar, mit nicht versteckten Dateien auch, nur eben nicht mit versteckten....

edit: alles gelogen! gerade hat es mit nurnoch mit Ordnern funktioniert, selbst mit einer nicht versteckten Datei nicht mehr. Allerdings habe ich dem Link auch dummerweise den gedit zugewiesen, und er öffnet jetzt immer den Editor, anstatt dem link zu folgen :-/

Viele Grüße,

...

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das Problem dürfte darin liegen, dass es das Verzeichnis ../Documents überhaupt nicht gibt.

Ansonsten funktioniert das nämlich:

track@track:~$ echo Marmelade > Desktop/.test.txt
track@track:~$ ln -s /home/track/Desktop/.test.txt ../Documents/test.txt
ln: Erzeuge symbolische Verknüpfung „../Documents/test.txt“: Datei oder Verzeichnis nicht gefunden
track@track:~$ ln -sv /home/track/Desktop/.test.txt 2_test.txt
„2_test.txt“ -> „/home/track/Desktop/.test.txt“
track@track:~$ cat 2_test.txt
Marmelade 

Dir ist aber schon klar was ../ bedeutet ? - das scheint mir nämlich de Knackpunkt zu sein.

LG,

track

drhawo

Anmeldungsdatum:
6. September 2010

Beiträge: 159

Eine einfache Lösung ist beim Erstellen von Softlinks den absoluten Pfad zu verwenden. Dies hat zweierlei Vorteile:

1. Obige Missverständnisse bleiben aus,

2. ich kann diesen Symlink auch beliebig verschieben,

beides funktionierte bei mir:

ln -s /home/hans/.bashrc  /home/hans/Dokumente/dateilink

ln -s /home/hans/.local  /home/hans/Dokumente/ordnerlink

Dabei ist es völlig egal, in welchem Verzeichnis ich mich bei der Erstellung des Links befinde. Beide Links funktionierten auch nach einer Verschiebung in mein Homeverzeichnis unter veränderten Pfadverhältnissen.

linzus

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2015

Beiträge: 147

@ track & hans:

also ich dachte ".." steht für das übergeordnete VZ, und da ich die Sprache auf englisch habe, kommt dort Documents, dachte ich zumindest. Ich meine ich finde die Links ja auch immer, nur funktionieren sie dann eben nicht....

so jetzt habe ich es gerade mit dem gleichen Beispiel und absoluten VZ's versucht wie hans, und es hat tatsächlich funktioniert. Auch eine erstellte txt funktioniert mit absoluten links.....

mit relativen Pfaden allerdings funktionieren sie nicht...auch wenn die VZ's ganz sicher richtig sind...

Grüße,

...

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

linzus schrieb:

mit relativen Pfaden allerdings funktionieren sie nicht...auch wenn die VZ's ganz sicher richtig sind...

Sind sie eben nicht !° - guck Dir doch einfach mal den Inhalt des übergeordneten Verzeichnisses an, mit

ls -la  ..

und dann erzähl mal, wo Du da drin den Ordner Documents findest ... 😉

LG,

track

drhawo

Anmeldungsdatum:
6. September 2010

Beiträge: 159

Hallo track,

muss hier eine Lanze für linzus brechen, obwohl das eigentlich mit dem Thema nichts mehr zu tun hat.

track schrieb:

und dann erzähl mal, wo Du da drin den Ordner Documents findest ... 😉

natürlich gibt es diese Variante

cd /home/hans/Videos
ls ../Documents

Kann aus Videos natürlich den Geschwisterordner Documents über den Elternordner .. ansprechen. Ich wiederhole mich: Schreibt einfach absolute Pfadnamen und es klappt immer.

linzus

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2015

Beiträge: 147

ja also ich verstehe jetzt nicht, wieso der Ordner nicht existieren sollte.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
drwxr-xr-x  2 loli loli 4096 Mär  3 11:03 .
drwxr-xr-x 26 loli loli 4096 Mär  3 10:57 ..
-rw-rw-r--  1 loli loli   18 Mär  3 11:02 .test.txt
loli@lolis:~/Desktop$ cd ../Documents/
loli@lolis:~/Documents$ ls -al
total 68
drwxr-xr-x  3 loli loli  4096 Mär  3 11:09 .
drwxr-xr-x 26 loli loli  4096 Mär  3 10:57 ..
lrwxrwxrwx  1 loli loli     9 Mär  3 11:09 dateilink.txt -> .test.txt
drwxrwxr-x  4 loli loli  4096 Mär  2 23:15 Treiber
-rw-r--r--  1 root root 54161 Feb 29 22:53 Zugangsdaten_NoRestriction.pdf
loli@lolis:~/Documents$ 

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wenn Du in ein passendes Verzeichnis wechselst, dann können die Pfade stimmen, ja.

Allerdings ist das aktuelle Verzeichnis, wenn Du ein Terminal öffnest, normalerweise erstmal ~, also /home/lolis .
Und von dort aus stimmt der Pfad natürlich nicht.

Es wäre jetzt natürlich die Frage, in welchem Verzeichnis Du zu Anfang dieses Strangs das ln versucht hattest.
Nur mit solchen Randinformationen könnte man eingrenzen, wo das Problem lag. (also mal pwd und ls -al .. fragen)

LG,

track

linzus

(Themenstarter)

Anmeldungsdatum:
31. Dezember 2015

Beiträge: 147

achso. ja schon. Also ich stand anfangs in /home/ich/Desktop und habe dann einen link nach ../Documents erstellt...

Antworten |