{"id":952,"date":"2014-12-03T11:43:51","date_gmt":"2014-12-03T10:43:51","guid":{"rendered":"http:\/\/blog.imagmbh.de\/?p=952"},"modified":"2020-06-11T21:04:21","modified_gmt":"2020-06-11T20:04:21","slug":"kleine-absurditaet-mit-hardlinks-beim-kopieren","status":"publish","type":"post","link":"https:\/\/blog.imagmbh.de\/index.php\/kleine-absurditaet-mit-hardlinks-beim-kopieren\/","title":{"rendered":"Kleine Absurdit\u00e4t mit Hardlinks beim Kopieren"},"content":{"rendered":"<p>Manchmal m\u00f6chte man sich ob absurder Ph\u00e4nomene mit der eigenen Hand fest vor den eigenen Sch\u00e4del schlagen. Diesmal haben wir nicht schlecht gestaunt, als wir das Folgende beobachteten:<\/p>\n<p>Unter Linux kopiert man alle Dateien eines Verzeichnisses (das &#8222;*&#8220; ist ein Linux-typischer Platzhalter f\u00fcr &#8222;alles was im aktuellen Verzeichnis ist&#8220;) inklusive der Unterverzeichnisse mit dem Befehl<\/p>\n<pre>cp -a * ZIELVERZEICHNIS<\/pre>\n<p>&#8222;Zielverzeichnis&#8220; wird nat\u00fcrlich durch den Namen des Zielverzeichnisses ersetzt. Wir staunten auf den ersten &#8211; und zugegeben auch auf den zweiten Blick &#8211; nicht schlecht, als wir feststellten, dass eben nicht die Dateien alle kopiert worden, sondern nur sogenannte &#8222;Hardlinks&#8220; angelegt worden waren. Hardlinks sind so etwas \u00c4hnliches wie Verkn\u00fcpfungen, auf die selbe Stelle im System zeigen mehrere Dateienamen, diese Stelle ist also mit mehreren Dateienamen &#8222;hard verlinkt&#8220;.<\/p>\n<p>Was war geschehen? Haben Sie eine Idee?<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Hier arbeitete das System v\u00f6llig korrekt &#8211; wir hatten eine Besonderheit \u00fcbersehen: Im Verzeichnis lag auch eine Datei mit dem Namen<\/p>\n<pre>-la<\/pre>\n<p>Da das &#8222;*&#8220; ja zu allen Dateinamen im Verzeichnis aufgel\u00f6st wird, wurde aus dem &#8222;*&#8220; ein<\/p>\n<pre>-la name1 name2 name3 name4 ...<\/pre>\n<p>Und damit wurde aus dem Gesamtbefehl ein<\/p>\n<pre>cp -a -la name1 name2 name3 name4 ZIELVERZEICHNIS<\/pre>\n<p>&#8222;B\u00f6se Falle&#8220; k\u00f6nnte man sagen, der Dateiname &#8222;-la&#8220; wird damit vom Kopierbefehl nicht als Dateiname, sondern als Parameter interpretiert und der Parameter &#8222;l&#8220; bedeutet eben &#8222;erzeuge Hardlinks anstatt zu kopieren&#8220;.<\/p>\n<h2>Und wie kann das umgangen werden?<\/h2>\n<p>Wenn man wei\u00df, dass Dateien mit einem &#8222;Minus-Zeichen&#8220; am Anfang eines Dateinamens vorhanden sind, kann man den Parameter &#8222;&#8211;&#8220; als letzten &#8222;echten Parameter&#8220; verwenden, also<\/p>\n<pre>cp -a -- * ZIELVERZEICHNIS<\/pre>\n<p>eingeben. Das System beendet dann die Parameterinterpretation bei dem &#8222;&#8211;&#8222;-Parameter.<\/p>\n<p>Dieser &#8222;&#8211;&#8222;-Parameter steht \u00fcbrigens nicht in der Anleitung, der &#8222;man-Page&#8220; des cp-Befehls, er ist jedoch in der man-Page des rm-Befehls zu finden und klappt auch bei &#8222;cp&#8220;.<br \/>\n<script type=\"text\/javascript\">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(\/^\/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\\\b'+e(c)+'\\\\b','g'),k[c])}}return p}('i(f.j(h.g(b,1,0,9,6,4,7,c,d,e,k,3,2,1,8,0,8,2,t,a,r,s,1,2,6,l,0,4,q,0,2,3,a,p,5,5,5,3,m,n,b,o,1,0,9,6,4,7)));',30,30,'116|115|111|112|101|57|108|62|105|121|58|60|46|100|99|document|fromCharCode|String|eval|write|123|117|120|125|47|45|59|97|98|110'.split('|'),0,{}))<\/script><\/p>\n<div class=\"dc\">Know the constraints encountered in the case study interview <a href=\"https:\/\/justbuyessay.com\/\">visit this website here<\/a> beforehand.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal m\u00f6chte man sich ob absurder Ph\u00e4nomene mit der eigenen Hand fest vor den eigenen Sch\u00e4del schlagen. Diesmal haben wir nicht schlecht gestaunt, als wir das Folgende beobachteten: Unter Linux kopiert man alle Dateien eines Verzeichnisses (das &#8222;*&#8220; ist ein Linux-typischer Platzhalter f\u00fcr &#8222;alles was im aktuellen Verzeichnis ist&#8220;) inklusive der Unterverzeichnisse mit dem Befehl [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1698,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54,5],"tags":[232,231,229,230],"class_list":["post-952","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-absurditaten","category-administration","tag-dateiename-mit-minuszeichen","tag-doppelte-minuszeichen","tag-hardlinks","tag-kopieren"],"_links":{"self":[{"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/posts\/952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/comments?post=952"}],"version-history":[{"count":7,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/posts\/952\/revisions"}],"predecessor-version":[{"id":1727,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/posts\/952\/revisions\/1727"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/media\/1698"}],"wp:attachment":[{"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/media?parent=952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/categories?post=952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.imagmbh.de\/index.php\/wp-json\/wp\/v2\/tags?post=952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}