IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Linux - Anwendungssoftware - Das Kommando ln



Das Kommando ln

Das konzept von sym - und hardlinks wird anhand des ls kommandos erklaert. die optionen von ls und find zum erkennen von links werden vorgestellt.


Autor: Franz Schaefer (mond)
Datum: 23-01-2002, 19:31:54
Referenzen: man ln
info ln
man find
info find
man ls
Schwierigkeit: Anfänger
Ansichten: 4407x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

heute mal wieder ein kurzer einfacher und auch nuetzlicher befehel. oft
will man datein auch nocht unter einem anderen namen ansprechen koennen
als den den sie haben. dazu macht man einen sogenannten "link" auf die
datei.

das zugehoerige unix kommando hat nach alter tradition den 1. und den 3.
buchstaben dieses wortes als befehl: ln

es gibt zwei arten dieser links "hardlink" und "symlink" (symlinks werden
oft auch als "softlinks" oder "symbolic links" bezeichnet. die
zugehoeritge option bei ln heisst -s )

aber zuerst zu den (an und fuersich eher weniger gebraeuchlichen)
hardlinks: angenommen du hast eine datei blabla.txt die du auch unter dem
namen blibli.txt ansprechen koennen willst:

ln blabla.txt blibli.txt

erzeugt jetzt diesen hardlink. blabla.txt und blibli.txt sind jetzt zwei
verschiedenen namen fuer das selbe file. d.h. wenn du das file blibli.txt
editierst oder ueberschreibst dann ist auch das blabla.txt geaendert. die
zugriffsrechte auf die datei sind auch immer identisch. das einzige
verschiedene ist der name. die beiden namen sind ansonsten voellig
gleichwertig (es laesst sich nicht mehr entscheiden ob nun blabla.txt ein
link auf blibli.txt oder umgekehrt). wenn du mit rm einen der beiden namen
loescht existiert das file noch weiter unter dem anderen namen. erst wenn
der letzte name eines files entfernt wurde wird auch das file tatsaechlich
geloescht. (damit das funktioniert wird beim file gespeichert wieviele
links auf ein file zeigen. wenn der zaehler auf 0 geht dann wird das files
echt geloescht)

also:

rm blabla.txt

cat blibli.txt ..... geht noch. rm blibli.txt ......jetzt ist das file
wirklich weg.

solche hardlinks kannst du auch in andere verzeichnisse legen.. also z.b.

ln arbeiten/bla.txt wichtig/bli.txt

hardlinks kann man aber nicht ueber verschiedenen filsysteme hingweg
legen. also:

ln /cdrom/README blabla.txt

geht nicht weil die daten unterhalb von /cdrom i.a. in einem eigenen
filesystem liegen.

man kann i.a. auch keine hardlinks auf directories machen.

praktischer und viel oefter verwendet werden daher die symlinks:

ln -s blabla.txt blibli.txt

erzeigt einen symlink mit dem namen blibli.txt der auf das file blabla.txt
zeigt.

mit

ls -l *.txt

siehst du das auch.. ( in der ausgabe siehst du einben " -> " pfeil der
sagt dass es sich um einen link handelt und wohin der zeigt)

die files sind jetzt nicht mehr voellig gleichwertig. blabla.txt ist das
echte file und blibli.txt nur eine verweis darauf. (d.h. wenn du
blabla.txt loescht dann existiert ein symlink der "ins leere" zeigt.
("dangling symlink")

du kannst symlinks auch ueber filesystem grenzen hinweg legen und auch
fuer ganze verzeichnisse setzten. z.b.:

ln -s "/var/www/meine.domain/bilder/" meinewebfiles

wuerde das windows verzeichniss bilder in deinem homverzeichniss als
"meinewebfiles/" verlinken. solche links sind oft praktisch weil man damit
lange pfadangaben fuer oft gebrauchte files vermeiden kann.

mit dem gestern erlernt find kommando kann man auch nach symlinks suchen:

find /etc -type l

wuerde alle file unterhalb von /etc finden die ein symlink sind.

um hardlinks aufzuspueren kann man die find option -link +n verwenden die
alle files findet die mehr als n links (in diesem falle hardlinks) haben.
(gilt nicht fuer directorys)

find /usr -links +1 -type f

wuerde alle normalen files unterhalb von /usr finden deren link zaehler
groesser als 1 ist. also alle namen von hardlink files. wie findet man
raus welcher name jetzt link auf welches file ist?

mit

ls -i

sieht man zu jedem file eine nummer die "inode nummer" genannt wird. die
ist eine interne representation des files. files mit der selben inode
nummer sind hardlinks aufeinander.

find /usr -links +1 -type f -exec ls -i {} \; |sort

wuerde also eine liste geben wo anhand der gleichen nummern (nach dem sort
stehen die untereinander) gut zu sehen ist welches file ein hardlink auf
ein anderes ist) noch eleganter:

find /usr -links +1 -type f -printf "%i %p\n" |sort -n

(%i beim -printf argument gibt die inode nummer aus so wie ls -i )

EXERCISES:

* lege ein file an und mache einen oder mehrere hardlinks auf dieses
files. eventuell auch aus verschiedenen verzeichnissen heraus.

* sieh dir mit dem ls -i die inode nummern der files an.

* editiere eines der files oder aendere mit chmod die permissions. aendern
sich auch die anderen files?

* loesche einen oder mehrer der hardlinks. wann ist das file wirklich weg?

* leg dir in deinem homeverzeichniss einen symlink auf ein oft gebrauchtes
file oder verzeichniss an

* wie sind die symlinks mit dem ls kommando zu sehen?

* welche moeglichkeiten bietet der find befehl zum aufspueren von symlinks
und zum aufspueren von hardlinks?

_______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04503
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16551
Queueeinträge:06238
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1138
Comments: 0