ABSTRACT: das konzept von sym - und hardlinks wird anhand des ls kommandos erklaert. die optionen von ls und find zum erkennen von links werden vorgestellt. AUDIENCE: beginners SYSTEM: any unix SECTION: basic unix commands AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt 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? REFERENCES: man ln info ln man find info find man ls