Zum Inhalt springen

Softlink: Unterschied zwischen den Versionen

Aus Foxwiki
Markierung: Manuelle Zurücksetzung
K Textersetzung - „line>“ durch „line copy>“
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Softlink''' - (symbolic link) Zeiger auf einen anderen Punkt im Dateisystem
'''Softlink''' - Zeiger auf einen anderen Punkt im Dateisystem (symbolic link)


== Beschreibung ==
== Beschreibung ==
Zeile 5: Zeile 5:
* Ein Softlink ist im Prinzip ein Zeiger, der auf eine Datei zeigt
* Ein Softlink ist im Prinzip ein Zeiger, der auf eine Datei zeigt
* Er belegt nur wenig Speicherplatz auf dem Datenträger, auf dem er angelegt wurde
* Er belegt nur wenig Speicherplatz auf dem Datenträger, auf dem er angelegt wurde
* Die Besonderheiten eines Softlinks sind
 
Die Besonderheiten eines Softlinks sind
* Er kann sowohl auf Dateien als auch auf Verzeichnisse verweisen
* Er kann sowohl auf Dateien als auch auf Verzeichnisse verweisen
* Er kann auf Dateien und Verzeichnisse einer anderen oder der Partition angewandt werden, auf der er sich selbst befindet
* Er kann auf Dateien und Verzeichnisse einer anderen oder der Partition angewandt werden, auf der er sich selbst befindet
Zeile 13: Zeile 14:


== Anwendung ==
== Anwendung ==
Die folgenden kommentierten Kommandos demonstrieren das Verhalten von Softlinks
Die folgenden Kommandos demonstrieren das Verhalten von Softlinks
<syntaxhighlight lang="bash" highlight="1" line>
</syntaxhighlight>


=== Softlink erstellen ===
=== Softlink erstellen ===
Zeile 22: Zeile 21:
* Mit dem zweiten Kommando wird das Ergebnis der Aktion überprüft
* Mit dem zweiten Kommando wird das Ergebnis der Aktion überprüft


<syntaxhighlight lang="bash" highlight="1-2" line>
<syntaxhighlight lang="bash" highlight="1-2" line copy>
  sudo ln -s file1 softlink
  ln -s file1 softlink
  sudo ls -l
  ls -l
  total 44
  total 44
  drwxr-xr-x 2 root root 4096 Jan 2 18:00  
  drwxr-xr-x 2 root root 4096 Jan 2 18:00  
Zeile 37: Zeile 36:
Wenn Sie nun den Modus dieses Links verändern, ändert sich stattdes-sen der Modus der Zieldatei
Wenn Sie nun den Modus dieses Links verändern, ändert sich stattdes-sen der Modus der Zieldatei


<syntaxhighlight lang="bash" highlight="1-2" line>
<syntaxhighlight lang="bash" highlight="1-2" line copy>
sudo chmod a+w softlink
chmod a+w softlink
sudo ls -l
sudo ls -l
  total 44
  total 44
  drwxr-xr-x 2 root root 4096 Jan 2 18:00  
  drwxr-xr-x 2 root root 4096 Jan 2 18:00  
Zeile 50: Zeile 49:
* Diese Rechte werden aber stattdessen der Datei file1 hinzugefügt,wie Sie sehen.Es gibt mehrere Methoden, sich die Auswirkungen von Links anzusehen
* Diese Rechte werden aber stattdessen der Datei file1 hinzugefügt,wie Sie sehen.Es gibt mehrere Methoden, sich die Auswirkungen von Links anzusehen


Mit dem Kommando ls-li kann z.&nbsp;B.&nbsp; nachgewiesen werden, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden
Mit dem Kommando ls-li kann beispielsweise  nachgewiesen werden, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden


<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo ls -li
ls -li
  total 44
  total 44
  1896834 drwxr-xr-x 2 root root 4096 Jan 2 18:00  
  1896834 drwxr-xr-x 2 root root 4096 Jan 2 18:00  
Zeile 65: Zeile 64:
Mit dem Kommando stat kann Ähnliches nachgewiesen werden
Mit dem Kommando stat kann Ähnliches nachgewiesen werden


<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo stat softlink
stat softlink
  File: `softlink' -> `file1'
  File: `softlink' -> `file1'
  Size: 5 Blocks: 0 IO Block: 4096 symbolic link
  Size: 5 Blocks: 0 IO Block: 4096 symbolic link
Zeile 81: Zeile 80:
* Wenden Sie dasselbe Kommando auf die Zieldatei des Links an, ergibt sich folgendes Bild
* Wenden Sie dasselbe Kommando auf die Zieldatei des Links an, ergibt sich folgendes Bild


<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo stat file1
stat file1
  File: `file1'
  File: `file1'
  Size: 35184 Blocks: 72 IO Block: 4096 regular file
  Size: 35184 Blocks: 72 IO Block: 4096 regular file
Zeile 98: Zeile 97:
Mit den nächsten Kommandos wird demonstriert, was geschieht, wenn Sie die Zieldatei eines symbolischen Links löschen, den Link selbst aber nicht
Mit den nächsten Kommandos wird demonstriert, was geschieht, wenn Sie die Zieldatei eines symbolischen Links löschen, den Link selbst aber nicht


<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo rm file1
rm file1
</syntaxhighlight>
</syntaxhighlight>


Die Zieldatei ist nun gelöscht
Die Zieldatei ist nun gelöscht
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line copy>
sudo ls -l
ls -l
  total 8
  total 8
  drwxr-xr-x 2 root root 4096 Jan 2 18:40  
  drwxr-xr-x 2 root root 4096 Jan 2 18:40  
Zeile 112: Zeile 111:


Der Softlink ist, wie Sie sehen, bestehen geblieben
Der Softlink ist, wie Sie sehen, bestehen geblieben
* Wenn Sie nun versuchen, über diesen Link auf die nicht mehr existieren
* Wenn Sie nun versuchen, über diesen Link auf die nicht mehr existierende Datei zuzugreifen, erhalten Sie jedoch eine Fehlermeldung
 
<syntaxhighlight lang="bash" highlight="1" line copy>
de Datei zuzugreifen, erhalten Sie jedoch eine Fehlermeldung
cat softlink
<syntaxhighlight lang="bash" highlight="1" line>
sudo cat softlink
  cat: softlink: No such file or directory
  cat: softlink: No such file or directory
</syntaxhighlight>
</syntaxhighlight>


Ein typisches Beispiel für die praktische Verwendung von Softlinks sind die Verlinkungen der init-Skripte, die beim Systemstart abgearbeitet werden. »Runlevel wechseln und das System anhalten oder neu starten«, behandelt
Ein typisches Beispiel für die praktische Verwendung von Softlinks sind die Verlinkungen der init-Skripte, die beim Systemstart abgearbeitet werden. ''Runlevel wechseln und das System anhalten oder neu starten'', behandelt


* Sie sehen hier einen Teil der Links, die zum Runlevel 3 eines Systems gehören
Sie sehen hier einen Teil der Links, die zum Runlevel 3 eines Systems gehören
 
<syntaxhighlight lang="bash" highlight="1" line copy>
<syntaxhighlight lang="bash" highlight="1" line>
  /etc/rc.d/rc3.d # ls -l
  /etc/rc.d/rc3.d # ls -l
  total 8
  total 8
Zeile 134: Zeile 130:
  lrwxrwxrwx 1 root root 8 Jul 20 2017 K05squid -> ../squid*
  lrwxrwxrwx 1 root root 8 Jul 20 2017 K05squid -> ../squid*
</syntaxhighlight>
</syntaxhighlight>
 
(weitere Zeilen wurden entfernt)
* weitere Zeilen wurden entfernt


[[Datei:Hardlink.png]]
[[Datei:Hardlink.png]]


=== Problembehebung ===
== Problembehebung ==
=== find all files that link to this file ===
'''[[Softlink/Problembehebung]]'''


==== It depends ====
if you are trying to find links to a specific file that is called <tt>foo.txt,</tt> then this is the only good way:


find -L / -samefile path/to/foo.txt
<noinclude>


On the other hand, if you are just trying to find links to ''any'' file that happens to be named <tt>foo.txt</tt>, then something like
find / -lname foo.txt
or
find . -lname \*foo.txt
ignore leading pathname components
* problem solved beautifully. Thanks to all people that replied.
* As I commented on a deleted answer, you can use <tt>-xtype l</tt> to have find only list symlinks
* you may want to recurse, as any of the files pointing to foo.txt may themselves be pointed-at by some other links... ex: A->B->foo.txt, /tmp/C->B->foo.txt, etc.
* this can work too if your name component is a parent directory named in the link, by searching <tt>find . -lname '*foo.dir*'</tt> (matches e.g. <tt>file.txt -> ../foo.dir/file.txt</tt>)
* This answer is really helpful, thanks so much. By the way, if we want to get more info about the results of "find", we can pass the output of "find" to "ls": <tt>find -L /usr -samefile /usr/share/pyshared/lsb_release.py 2>/dev/null | xargs ls -al</tt>
Find the inode number of the file and then search for all files with the same inode number
$ ls -i foo.txt
41525360 foo.txt
$ find . -follow -inum 41525360
Alternatively, try the <tt>lname</tt> option of <tt>find</tt>, but this won't work if you have relative symlinks e.g. <tt>a -> ../foo.txt</tt>
$ find . -lname /path/to/foo.txt*
If using a recent version of GNU find, you can also use the <tt>-samefile</tt> option with <tt>-L</tt> for the same effect, without having to look up the inode yourself
* But this will also find files on other file systems that happen to have the same inode number.
* If <tt>foo</tt> is a directory, use <tt>ln -di</tt>, in one line: <tt>find . -follow -inum $(ls -di foo.txt |cut -d" " -f1)</tt>
This answer is wrong
* A symlink doesn't have the same inode as its target. This will only work for a file inside a symlinked folder. But this is not what was asked.
==== symlinks utility ====
; I prefer to use the <tt>symlinks</tt> utility, which also is handy when searching for broken symlinks.
Install by:
sudo apt install symlinks
Show all symlinks in current folder and subfolders:
symlinks -rv .* <tt>-r</tt>: recursive
* <tt>-v</tt>: verbose (show all symlinks, not only broken ones)
To find a specific symlink, just <tt>grep</tt>
symlinks -rv . | grep foo.txt*
Never heard of symlinks before (repo). 'A useful utility for maintainers of FTP sites, CDROMs, and Linux software distributions. It scans directories for symbolic links and lists them on stdout, often revealing flaws in the filesystem tree.' Great little ancient tool by ancient kernel hacker Mark Lord, the 'original developer and maintainer of the IDE Performance Package for linux, the Linux IDE Driver subsystem, hdparm', now maintained by J. Brandt Buckley.
Works great and is fast. Note, however, that you'll need to do a search in each discrete partition of interest (as <tt>symlinks</tt> does not reliably (AFAIK) search across what is calls "different filesystems"). Also, <tt>symlinks -rv . 2>/dev/null | grep foo.txt</tt> may result in "cleaner" output...
== Konfiguration ==
=== Dateien ===
<noinclude>
== Anhang ==
== Anhang ==
=== Siehe auch ===
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
==== Dokumentation ====
=== Dokumentation ===


===== Man-Page =====
; Man-Page
===== Info-Pages =====
;Info-Page
==== Links ====
=== Links ===
===== Projekt =====
==== Projekt ====
===== Weblinks =====
==== Weblinks ====


{{DEFAULTSORT:Softlink}}
{{DEFAULTSORT:Softlink}}

Aktuelle Version vom 11. Mai 2025, 13:45 Uhr

Softlink - Zeiger auf einen anderen Punkt im Dateisystem (symbolic link)

Beschreibung

Softlinks werden auch als symbolische Links bezeichnet

  • Ein Softlink ist im Prinzip ein Zeiger, der auf eine Datei zeigt
  • Er belegt nur wenig Speicherplatz auf dem Datenträger, auf dem er angelegt wurde

Die Besonderheiten eines Softlinks sind

  • Er kann sowohl auf Dateien als auch auf Verzeichnisse verweisen
  • Er kann auf Dateien und Verzeichnisse einer anderen oder der Partition angewandt werden, auf der er sich selbst befindet
  • Er verwendet die Dateiberechtigungen der Zieldatei und ist deshalb immer mit Lese-, Schreib- und Ausführungsrechten versehen
  • Ein Softlink bleibt bestehen, wenn die Zieldatei gelöscht wird
  • Man bezeichnet einen solchen verwaisten Link auch als gebrochenen Link

Anwendung

Die folgenden Kommandos demonstrieren das Verhalten von Softlinks

Softlink erstellen

Das erste Kommando ln-s erzeugt einen Softlink mit der Bezeichnung

  • softlink,der auf die existierende Datei file1 verweist
  • Mit dem zweiten Kommando wird das Ergebnis der Aktion überprüft
 ln -s file1 softlink
 ls -l
 total 44
 drwxr-xr-x 2 root root 4096 Jan 2 18:00 
 drwxr-xr-x 24 root root 4096 Jan 2 17:55 
 -rw-r--r-- 1 root root 35184 Jan 2 17:55 file1
 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1

Die erste Spalte der letzten Zeile des Kommandos ls-l zeigt an, dass es sich um einen Link handelt

  • Beachten Sie bitte auch, dass in der Zugriffssteuerungsliste alle Rechte gesetzt sind

Wenn Sie nun den Modus dieses Links verändern, ändert sich stattdes-sen der Modus der Zieldatei

chmod a+w softlink
sudo ls -l
 total 44
 drwxr-xr-x 2 root root 4096 Jan 2 18:00 
 drwxr-xr-x 24 root root 4096 Jan 2 17:55 
 -rw-rw-rw- 1 root root 35184 Jan 2 17:55 file1
 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1

Das erste Kommando fügt zu softlink Schreibrechte für alle hinzu

  • Diese Rechte werden aber stattdessen der Datei file1 hinzugefügt,wie Sie sehen.Es gibt mehrere Methoden, sich die Auswirkungen von Links anzusehen

Mit dem Kommando ls-li kann beispielsweise nachgewiesen werden, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden

ls -li
 total 44
 1896834 drwxr-xr-x 2 root root 4096 Jan 2 18:00 
 2 drwxr-xr-x 24 root root 4096 Jan 2 17:55 
 1896921 -rw-rw-rw- 1 root root 35184 Jan 2 17:55 file1
 1896920 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1

Die Datei file1 verwendet den Inode 1896921, während der Softlink softlink den Inode 1896920 belegt

Mit dem Kommando stat kann Ähnliches nachgewiesen werden

stat softlink
 File: `softlink' -> `file1'
 Size: 5 Blocks: 0 IO Block: 4096 symbolic link
 Device: 302h/770d Inode: 1896920 Links: 1
 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
 Access: 2017-01-02 18:26:45.000000000 +0100
 Modify: 2017-01-02 18:00:07.000000000 +0100
 Change: 2017-01-02 18:00:07.000000000 +0100

In der zweiten Zeile der Kommandoausgabe wird angezeigt, dass es sich um einen symbolischen Link handelt

  • Die Zugriffsrechte sind auch noch einmal deutlich dargestellt
  • Wenden Sie dasselbe Kommando auf die Zieldatei des Links an, ergibt sich folgendes Bild
stat file1
 File: `file1'
 Size: 35184 Blocks: 72 IO Block: 4096 regular file
 Device: 302h/770d Inode: 1896921 Links: 1
 Access: (0666/-rw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root)
 Access: 2017-01-02 17:55:38.000000000 +0100
 Modify: 2017-01-02 17:55:38.000000000 +0100
 Change: 2017-01-02 18:01:03.000000000 +0100

Die zweite Zeile besagt, dass es sich um eine gewöhnliche Datei handelt

  • Auch hier sieht man deutlich, dass die Zieldatei und der Softlink zwei verschiedene Inodes verwenden

Mit den nächsten Kommandos wird demonstriert, was geschieht, wenn Sie die Zieldatei eines symbolischen Links löschen, den Link selbst aber nicht

rm file1

Die Zieldatei ist nun gelöscht

ls -l
 total 8
 drwxr-xr-x 2 root root 4096 Jan 2 18:40 
 drwxr-xr-x 24 root root 4096 Jan 2 17:55 
 lrwxrwxrwx 1 root root 5 Jan 2 18:00 softlink -> file1

Der Softlink ist, wie Sie sehen, bestehen geblieben

  • Wenn Sie nun versuchen, über diesen Link auf die nicht mehr existierende Datei zuzugreifen, erhalten Sie jedoch eine Fehlermeldung
cat softlink
 cat: softlink: No such file or directory

Ein typisches Beispiel für die praktische Verwendung von Softlinks sind die Verlinkungen der init-Skripte, die beim Systemstart abgearbeitet werden. Runlevel wechseln und das System anhalten oder neu starten, behandelt

Sie sehen hier einen Teil der Links, die zum Runlevel 3 eines Systems gehören

 /etc/rc.d/rc3.d # ls -l
 total 8
 drwxr-xr-x 2 root root 4096 Oct 19 21:53 ./
 drwxr-xr-x 11 root root 4096 Dec 19 11:04 ../
 lrwxrwxrwx 1 root root 7 Jul 20 2017 K03cron -> ../cron*
 lrwxrwxrwx 1 root root 8 Jul 20 2017 K03smbfs -> ../smbfs*
 lrwxrwxrwx 1 root root 6 Jul 20 2017 K05smb -> ../smb*
 lrwxrwxrwx 1 root root 8 Jul 20 2017 K05squid -> ../squid*

(weitere Zeilen wurden entfernt)

Problembehebung

Softlink/Problembehebung



Anhang

Siehe auch

Dokumentation

Man-Page
Info-Page

Links

Projekt

Weblinks