Category: Linux

Benutzt man das Programm telnet unter Linux, wird man beispielsweise mit folgender Meldung begrüsst:

Möchte man diese Verbindung schließen, müsste man den „Escape character“ ( ^] ) eingeben. Nur: Hierbei handelt es sich keinesfalls um die beiden ASCII-Zeichen „^“ und „]“. Bei diesen handelt es sich mehr um die Darstellung eine bestimmten Tastenkombination. Das fiese: Oft kommt man nichtmal mit dem altbewährten Strg+c aus der Sache raus …

Um diesen Escape character einzugeben verwendet man folgende Tastenkombination: STRG + AltGr + 9
Hinweis: Die „+“ Zeichen sollen nicht eingetippt werden, sondern anzeigen, das die drei Tasten gleichzeitig gedrückt werden müssen.

Schon sollte die Konsole sich wieder im telnet-Kommando-Modus befinden. Dort kann man mit dem Befehlt „quit“ wieder auf die normale Linux-Shell:

Jedes Mal, wenn ich mir ein neues Linux-System einrichte, muss ich erst nochmal schnell Googlen oder die Manpage wälzen; daher notiere ich es mir hier jetzt endlich mal:

Es gibt ein Sicherheitsfeature bei openSSH, welches einen warnt wenn man sich zu einem Host/einer IP verbinden möchte und sich die ID des Zieles seit dem letzten Mal verändert hat. Das macht zwar durchaus Sinn und ich finde das generell eine gute Sache. Aber es kann wirklich sehr nerven, besonders wenn man mit DHCP arbeitet und die Zielrechner dauernd Ihre IP durchtauschen, man mit virtuellen Maschinen arbeitet und diese nur kurz benutzt werden oder häufig per SSH auf Live-CD-Systeme konnektiert.

Normalerweise muss man die entsprechende Zeile in der Datei ~/.ssh/known_hosts die angemeckerte Zeile löschen; z.B. bei:

müsste man die Zeile 3 entfernen.

Hierzu muss man etwas wie „sed -i 3d ~/.ssh/known_hosts“ losjagen oder die Datei in einem Editor von Hand bereinigen. Wie schon gesagt: Auf Dauer sehr nervig!

Wenn einem das nur vereinzelt passiert, kann man sich mit Kommandozeilenoptionen helfen: „ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@192.168.1.12„; ist jedoch schon eine recht sportliche Aufgabe sich das a) zu merken und b) jedes Mal wegzutippen.

Wem das permanent passiert, kann dieses Verhalten dauerhaft einstellen. Und zwar sowohl global wie auch userbasiert. In beiden Fällen müssen die beiden o.g. Optionen in die passende Config-Datei eingetragen werden:

UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no

Um diese Einstellung global zu setzen (nicht empfohlen), trägt man diese Optionen in die Datei „/etc/ssh/ssh_config“ ein.

Um diese Einstellung nur für einen bestimmten User zu setzen, trägt man diese Optionen in die Datei „~/.ssh/config“ ein.

Das ganze hebelt natürlich den als Sicherheitsmaßnahme gegen „Man-in-the-middle“ – Attacken gemeinten Schutz vor diesem Angriffstyp aus. Um das ganze wenigstens etwas sicherer zu machen, kann man auch nur einzelne Hosts und Hostbereiche derart von dieser Regel ausnehmen. Die Beispielhafte Syntax dazu lautet dann:

Möchte man dieses immer und für alle Verbindungen deaktivieren, lässt man die „Host“ – Zeile einfach weg.

Aber Achtung: Bitte nur anwenden wenn Ihr wisst was Ihr tut! Das ganze hebelt, wie gesagt, einen sinnvollen Schutz des SSH Systems aus.

[follow_me]

Wir hatten im Rahmen der jüngst in der Bash bekannt gewordenen Sicherheitslücken die zweifelhafte Ehre, für nicht länger supportete SuSE Linux Systeme diese aus den Source-RPMs neu zu kompilieren. Dabei fielen uns in der darin enthaltenen .spec – Datei komische Variablen wie %{_mandir} oder %{_libdir} auf, die wir nicht zuordnen konnten. Ein Auszug:

./configure --build=%{_target_cpu}-suse-linux \
--prefix=/usr \
--with-curses \
--mandir=%{_mandir} \
--infodir=%{_infodir} \
--libdir=%{_libdir}

Dieses sind RPM interne Variablen, welche mit folgendem Aufruf ausgegeben werden können:

rpm --eval '%_libdir'
rpm --eval '%_mandir'
...

Ich hatte vor einiger Zeit auf einem Sabayon Linux System das Problem, das ich unter Skype absolut nichts verstehen konnte. Aus dem Kopfhörer drang nur eine Art „knirschen“; da es auch beim Skype Echo Service auftrat, war klar das es an mir und nicht an der Gegenseite liegt. Es trat jedoch nur bei Skype auf; keine andere Anwendung war hiervon betroffen.

Ich verwende KDE und damit unter Sabayon Standardmäßig PulseAudio. Ein Beitrag der User „ball“ und „swordfish“ brachten mir letzten Endes die Lösung, indem Sie im ArchLinux Forum auf Bug #50510 im FreeDesktop.org Bugtracker verwiesen:

Wenn man Skype wie folgt mit einer Wert von 30 in der Umgebungsvariable PULSE_LATENCY_MSEC startet, gibt es von jetzt auf gleich keine Probleme mehr:

bash -c „PULSE_LATENCY_MSEC=30 skype %U“

Diese Meldung bekam ich nach einem Update auf meinem Raspberry Pi unter ArchLinux jedes Mal, wenn ich mit

die root-Crontab aufrufen wollte.

Die Lösung ist total einfach: Selbst als User root muss man Mitglied der Gruppe fcron sein; schon geht’s! Aus- und wieder einloggen nicht vergessen! 😉

GNU Screen ist ein Terminal Multiplexer, welcher einem über in der Manpage dokumentierte Tastenkombinationen die komfortable Steuerung mehrerer Terminal-Sitzungen über nur eine „echte“ Konsole ermöglicht. Dieses kann man sich vorstellen wie „Tabs“, welche man heutzutage von allen Internet Browsern her kennt. Ein weiterer Vorteil ist, das man so einen Container einfach mitsamt den darin laufenden Sitzungen in den Hintergrund schicken kann und die darin enthaltenen Sitzungen weiterhin ausgeführt werden. Dieses gilt auch für „unfreiwilliges“ schließen der Verbindung; beispielsweise wenn die Internetverbindung abbricht, der Computer abstürzt, etc.

Ich suche mir jedes Mal die folgende Information neu aus dem Internet heraus, daher notiere ich sie mir einmal, leicht auffindbar, hier.

Man kann in Screen auch in jeder einzelnen Sitzung scrollen. Jedoch sind die Zeilen, die Screen dabei speichert, von Haus aus auf recht wenige eingestellt: 100 Zeilen; das ist, bei heutigen Auflösungen der meisten Konsolen, gerade mal etwas mehr als ein Bildschirm. Für mich ist das viel zu wenig! Daher erhöhe ich das meistens per Default auf 5000. Das kann, je nach Einsatzgebiet auch zu viel sein; wenn jemand nun 200 Konsolen darin startet und in jeder ein Logfile mit „tail -f“ durchlaufen lässt, kann hierbei schonmal recht viel Arbeitsspeicher für belegt werden. Daher: Bitte diese Einstellung nicht ungeprüft übernehmen.

Es gibt zwei Konfigurationsdateien für GNU Screen:

  1. Globale Konfigurationsdatei : /etc/screenrc
  2. Userbezogene Konfigurationsdatei : ~/.screenrc

Beide verwenden soweit dieselbe Syntax; Details sind der Manpage zu Screen zu entnehmen.

Nun aber zum Kern des Artikels:

Man füge folgende Einstellung hinzu:

Fertig 🙂

Ich habe hier das Buch „Shell-Programmierung“ (ISBN: 978-3-8362-1157-4) von Jürgen Wolf im Original im Hardcover liegen; ein rund 800 Seiten starker Trümmer randvoll mit praktischen Tipps, Anwendungsbeispielen und nachvollziehbaren Erklärungen rund um die Programmierung in den verbreitetsten Linux-Shells. Das Buch ist super! Ich schaue regelmäßig rein und finde nach wie vor immer wieder etwas neues. Besonders als Referenz finde ich es einsame spitze!

Da sich nun leider nach mehreren Jahren der regelmäßigen Benutzung die Bindung mancher Seiten in den wohlverdienten Ruhestand verabschieden, wollte ich eben mal schauen ob man das nicht zufällig als digitale Kopie erstehen kann.
Tatsächlich: Kann man! Und zwar inzwischen kostenlos als Galileo OpenBook!

Ich kann nur jedem an diesem Thema interessiertem empfehlen: Downloaden!

Hallo zusammen,

das Gentoo/Funtoo Paket ‚media-sound/teamspeak-server-bin‘ benötigt noch MySQL 5.1; dieses ist jedoch im ebuild nicht richtig aufgelöst, so das es nicht als Installationsbedingung aufgelistet wird. Installiert man das Paket, setzt in der Datei ‚/etc/teamspeak3-server/server.conf‘ ‚dbplugin=ts3db_mysql‘ (um die Einstellungen statt in einer SQLite-DB in einer MySQL-DB zu speichern) und versucht dann den TeamSpeak3 Server zu starten, bekommt man im Log folgende Meldung:

|INFO |ServerLibPriv | | TeamSpeak 3 Server 3.0.5 (2012-04-23 04:46:12)
|INFO |DatabaseQuery | | Please make sure you use the supplied ts3server_minimal_runscript.sh to run the server, or set LD_LIBRARY_PATH yourself
|CRITICAL|DatabaseQuery | | unable to load database plugin library „libts3db_mysql.so“, halting!

LD_LIBRARY_PATH ist aber (im Init-Script) schon auf das Verzeichnis gesetzt, in welchem die Datei libts3db_mysql.so liegt: /opt/teamspeak3-server/, also was soll die Meldung?
Das ganze wird klar, wenn man sich mit ldd einmal die  shared library dependencies der Datei /opt/teamspeak3-server/libts3db_mysql.so anzeigen lässt:

ldd /opt/teamspeak3-server/libts3db_mysql.so
linux-vdso.so.1 =>  (0x00007fff4efa4000)
libmysqlclient.so.15 => not found
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.3.4/libstdc++.so.6 (0x00007f17f2bc0000)
libm.so.6 => /lib/libm.so.6 (0x00007f17f293d000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f17f2727000)
libc.so.6 => /lib/libc.so.6 (0x00007f17f23ca000)
/lib64/ld-linux-x86-64.so.2 (0x00007f17f30fd000)

Es fehlt also die Datei libmysqlclient.so.15 ; diese ist jedoch leider nur in MySQL 5.1 enthalten. Nun hat man zwei Möglichkeiten:

  1. Man installiert und betreibt MySQL 5.1 . Dann löst sich das Problem ohne weiteres Zutun, jedoch finde ich es blöd sich von einem einzigen Programm eine veraltete MySQL Version aufzwingen zu lassen.
  2. Man besorgt sich die libmysqlclient.so.15.0.0 Datei von einem Build-Chain kompatiblen System (gleiche GCC Version, gleiche Arch, etc.). Das geht z.B. indem man erst MySQL in Version 5.1 installiertst, die Datei wegkopiert und wieder die MySQL Version, die man eigentlich haben möchte installiert.

Sofern man sich für Variante 2 entscheidet, kopiert man, während MySQL 5.1 installiert ist, die Datei /usr/lib64/mysql/libmysqlclient.so.15.0.0 nach /usr/local/lib/, erstellt einen Symlink von /usr/local/lib/libmysqlclient.so.15 auf /usr/local/lib/libmysqlclient.so.15.0.0 und installiert anschließend wieder die eigentliche Version von MySQL.

Hat man dieses alles erledigt, sollte sich der Teamspeak3 Server problemlos starten lassen.

Nachzulesen ist das ganze außerdem im Gentoo Forum. Auf die Idee gebracht hat mich der Blogeintrag von Alexander Winkler.

Jaaaa – also ich betreibe ja seit einigen Jahren diesen Server. Seit dem letzten Umzug im August 2010 läuft er unter einem bei Strato angemietetem „Dedicated Power-Server MR (v5.4)“. Dabei handelt es sich um „echte“ Hardware, nicht um ein virtualisiertes System. Schon länger reicht dieses recht spartanisch ausgestattete System nicht mehr wirklich für die Anforderungen. Aktuell laufen 8 nicht ganz inaktive Homepages auf der Maschine (keine statischen HTML Dateien: PHP Scriptseiten wie WordPress, TYPO3, phpBB Foren, etc.), er ist Mailserver für etwa 9 Domains (samt Spamfilter), berechnet Statistiken, das System selbst (Gentoo Linux -> Software wird kompiliert) will auch gewartet werden, …

Kurz: Das Teil hat einiges zu tun! Dabei war nichtmal unbedingt der Prozessor das Problem, sondern RAM und Storage. Das ganze System ist recht betagt, wie wir gleich noch sehen werden. Neben diesen Diensten mit 1 GB RAM auch noch gescheit einen MySQL Server darauf zu betreiben „geht“ technisch zwar, macht aber nicht wirklich Spass.
Es musste also ein zweiter Server als MySQL Host her. Seitdem laufen diese Seiten auf 2 Servern. Seitdem denke ich jedoch auch, das der Basis-Server nicht mehr wirklich rentabel funktioniert. Also habe ich mal die Fühler nach günstigeren Angeboten ausgestreckt. Kriterien waren dabei:

  • Speicherplatz mindestens 50 GB ( ~ 30 aktuell verwendet )
  • Möglichkeit ein Gentoo / Funtoo auf dem System installieren zu können
  • CPU und RAM mehr / schneller als aktuell
  • Preis sollte geringer sein als aktuell
  • Keine Mindestvertragslaufzeit

Ob das ganze virtuell oder physikalisch ist, ist mir dabei erstmal egal.

Ich bin also letztendlich auf die vServer der Firma netcup aufmerksam geworden. Server4You, Domain Factory und (wieder) Strato haben zwar auch atraktive Angebote, jedoch schneiden sie (für meine Anforderungen) leider „schlechter“* ab als netcup:

*:
Kurzes Vorwort zu „schlechter“: Um fair zu bleiben: Ich habe hier nur reine Zahlen aus den Angeboten verglichen. Ich habe mich nicht in jedem Angebot eingelogged und die Performance so detailiert verglichen wie zwischen netcup und Strato. Jedoch: Wenn die Anbieter die absolute Performance Ihrer Produkte in’s Feld führen möchten, sollten Sie diese Zahlen mit in die Angebote aufnehmen.
PS: @Alle Hoster: Sollte irgendwer daran interessiert sein, das ich deren Angebot hier kostenlos Re-Evaluiere: Über mein Mailformular könne Sie mir gerne unverbindliche Probezugänge zu Ihren Produkten mit der Bitte um Tests zukommen lassen 😉

  • Strato
    Das Angebot für „Dedicated Server“ ist zwar nach wie vor nahezu ungeschlagen gut was das Preis-/Leistungsverhältnis angeht ( HighQ-Server XS ist sehr cool! ), jedoch hat man hier leider ( selbst als Stammkunde ) wenigstens 6 Monate Mindestvertragslaufzeit. Ebenso muss man 29,- € für die Grundeinrichtung bezahlen. Beides etwas, was ich nicht mehr möchte.
    Die vServer von Strato können (mich) da jedoch schon weniger überzeugen: Die Preise beginnen (mit powerServer A) bei 7,90 / Monat (was OK, aber mehr ist als bei netcup), der RAM beträgt nur 512 MB (statt 1 GB bei der Konkurenz), der Speicherplatz beträgt nur 25 GB (ebenfalls Markt-Schlusslicht), … nichts für mich.
  • Domain Factory / JiffyBox
    Domain Factory hat mit seinem „JiffyBox“ getauften vServer Angebot schon eine coole Sache am Start: Man meldet sich an und bezahlt erstmal nichts. Man kann in Minuten neue (v-)Server hochfahren, herunterfahren, einfrieren, löschen, klonen, … sehr cool! Man bezahlt dann nur für die Nutzung der tatsächlich genutzten Maschinen. Allerdings: Will man diese dauerhaft betreiben wird’s verhätnismäßig teuer: Selbst das günstigste Angebot kostet dann rund 14,90 € / Monat (0,02 ct pro Stunde * 744 Stunden pro Monat). Das ist für temporäre Präsenzen OK, aber auf Dauer gibt es günstigere Alternativen.
  • Server4You
    Für meine Anforderungen: Einfach zu teuer! 8,85 € / Monat für einen vServer mit 25 GB Storage: netcup ist auch hier wieder günstiger. Allerdings: Man kann deren Produkte unverbindlich 4 Tage lang testen und herausfinden, ob sie passen oder nicht. Allerdings scheidet das Angebot für mich wegen des Storage-/Preisverhältnisses aus.
  • netcup
    Ich habe mich für das Angebot vS Uranus light entschieden. Das ganze hat eigentlich alles was ich brauche, ist mit 6,99 € / Monat sehr günstig und deckt alle zuvor genannten Kriterien ab. Details folgen.

Was bei netcup sehr cool ist: Man kann das Angebot in Ruhe unter die Lupe nehmen (da monatlich kündbar). Ebenso hat man alle Zeit der Welt für eine Migration, da man für ~ 7 € / Monat ruhig mal einen bis zwei Monate diese Server parallel betreiben kann.

Für mich ist jetzt natürlich wichtig, das ich das, was bereits auf diesem Server besteht und läuft, übernehmen kann und dabei nichts merkbar langsamer wird. Also habe ich einmal einen Benchmark der beiden Systeme in den für mich relevanten Bereichen durchgeführt:

  1. Storage-Performance
  2. RAM-Performance
  3. CPU-Performance

Um dieses zu messen, habe ich auf dem aktuellen Server alle Dienste beendet (was die Downtime zwischen 15 und 23 Uhr am 01.04.2012 erklärt) und auf diesem wie dem netcup-System die folgenden Tests durchgeführt:

Im folgenden die Ergebnisse.
Zunächst einmal ein reiner Listenleistung-Vergleich:

Strato netcup
RAM
Typ DDR2 133 Unbekannt
Menge 1 GB 1 GB
HDD
Typ Hitachi HDT725025VLA380 Unbekannt
Größe 250 GB 80 GB
CPU
Typ AMD Opteron 1210 HE Intel Xeon CPU E5620
Anzahl 1×2 Cores (2) 4×4 Cores (16)
Geschwindigkeit (Liste) 1,8 GHz 2,5 GHz
Preis
29,90 € 6,99 €

HDD ist zwar bei netcup deutlich kleiner als beim aktuellen Stratovertrag, aber für meine Anforderungen ausreichend.
Alles andere sieht laut Liste deutlich besser aus. OK, fairer weise muss man sagen, das das aktuelle Strato Angebot besser ist (HighQ-Server XS), aber für mich halt nicht so leicht zu wechseln wie zu netcup. Weder kann ich so lange günstig parallel fahren wie bei netcup, noch sehe ich die Notwendigkeit weiterhin monatlich fast 30 € zu bezahlen, wo es rund 7 € auch tun. So viel ist „Platz nach oben“ nun im privatem Sektor auch wieder nicht wert.

Kommen wir zu den Messergebnissen:

Als Messgrundlage dienen dd , bonnie++ (v1.96) und sysbench (v0.4.10).

Die ausgeführten Kommandos lauten:

  • sysbench –test=memory –memory-scope=$scope –memory-oper=$operation –memory-access-mode=$accessmode run
  • sysbench –test=cpu –num-threads=$numthreads –cpu-max-prime=20000 run
  • dd if=/dev/urandom of=benchfile bs=1024K count=1024
  • bonnie++ -u root | bon_csv2html

Die mit „$“-vorangestellten Werte zu sysbench findet man in folgender Tabelle nebst Ergebnissen:

Strato netcup
sysbench – RAM
$scope=global, $operation=read, $accessmode=seq 839.4359s 36.9148s
$scope=global, $operation=read, $accessmode=rnd 839.9471s 39.1572s
$scope=global, $operation=write, $accessmode=seq 869.6518s 66.8758s
$scope=global, $operation=write, $accessmode=rnd 848.0943s 41.8068s
$scope=local, $operation=read, $accessmode=seq 837.1526s 37.4726s
$scope=local, $operation=read, $accessmode=rnd 849.7811s 38.9301s
$scope=local, $operation=write, $accessmode=seq 877.9626s 67.3201s
$scope=local, $operation=write, $accessmode=rnd 852.2366s 40.9074s
sysbench – CPU
$numthreads=2 60.5573s 20.1742s
$numthreads=16 n/a 4.2365s

Wir sehen also schonmal zum Thema CPU und RAM: Das netcup vServer – System hat hier klar die Nase vorn! Der RAM ist rund 20x schneller als der des Strato-Systems und die CPU ist bei der Berechnung von Primzahlen bei „nur“ 2 von 16 möglichen, parallelen Threads ebenfalls etwa 3x schneller. Gesteht man der Primzahlenberechnung die zur Verfügung stehenden 16 parallelen Threads zu, ist sie beim netcup-System gar ca. 15x schneller.

Im Bereich RAM und CPU also klarer Sieger: netcup vServer!

Schaut man sich an wie lange es dauert eine 1GB große Datei wegschreiben zu lassen gewinnt hingegen klar das Strato-System:

Strato netcup
dd – Benchmark
dd if=/dev/urandom of=benchfile bs=1024K count=1024 140 Sekunden 245 Sekunden

Der dd-Test zeigt eine Schreibperformance beim Strato-System, die rund 1,75x so schnell ist wie die des netcup vServers. Klar, das ist ein sehr realitätsferner Test, aber es folgt noch ein Test mit bonnie++, welcher diesen Eindruck unterstreicht:

Version 1.96 Sequential Output Sequential Input Random
Seeks
Sequential Create Random Create
Size Per Char Block Rewrite Per Char Block Num Files Create Read Delete Create Read Delete
K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU
netcup vServer
2G 559 95 118663 23 130356 15 2958 97 3083240 98 11990 168 16 86 0 +++++ +++ 92 0 1986 15 +++++ +++ 8211 58
Latency 33601us 6533us 14883us 15201us 3187us 5198us Latency 14321us 915us 73617us 1517ms 1302us 26563us

 

Version 1.96 Sequential Output Sequential Input Random
Seeks
Sequential Create Random Create
Size Per Char Block Rewrite Per Char Block Num Files Create Read Delete Create Read Delete
K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU K/sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU /sec % CPU
Strato Server
2G 276 99 50075 20 31729 14 1207 98 73802 15 411.0 10 16 16859 66 +++++ +++ 23837 73 18097 75 +++++ +++ 23827 73
Latency 50975us 1783ms 968ms 20773us 44806us 375ms Latency 11620us 2495us 2336us 307us 27us 356us

In puncto Storage hat also sowohl in Größe wie in Geschwindigkeit das (nicht-virtuelle) Strato-System klar die Nase vorn.

Wie sieht das ganze bei einem etwas realitätsnäherem Test aus? Zum Vergleich habe ich einmal den Gnu C Compiler (gcc) in Version 4.5.3 auf beiden Systemen kompiliert. Hier die Ergebnisse:

Strato netcup
Gnu C Compiler Kompilierung – Benchmark
Kompileren (emerge =sys-devel/gcc-4.5.3) 57m57.791s 24m55.387s

Ergo: Das netcup System ist hierbei gut doppelt so schnell.

Da das Ganze ja nun doch recht I/O – lastig werden wird, bin ich mir noch nicht ganz sicher ob das wirklich die richtige Entscheidung ist, das bestehende System gegen dieses netcup vServer System zu ersetzen. Wir werden sehen.

Soweit zumindest schonmal meine Analyse 🙂

Wie immer bin ich für Kritik offen und dankbar.

Boah – funktioniert noch alles hier … krass! Ewig nichts gepostet … ;D

Es kommt auch nur ein Kurztipp. Eigentlich trivial, aber ich kam mit den Erklärungen in der Manpage zu „find“ gerade nicht zurande, daher notiere ich mir die Syntax hier:

Wenn man auf einem System nach Symlinks suchen möchte, deren Ziel nicht existiert, dann geht das wie folgt:

Möchte man stattdessen das nichtexistente Ziel des toten Symlinks auflisten um das beispielsweise in Scripten zu verwenden, behelfe ich mir derzeit wie folgt:

Funktioniert, geht aber sicher auch noch eleganter. Schreibt doch gerne in den Kommentaren wie 🙂