Frage zu Links (hard/symbolic) und Aliase

Blain

Aktives Mitglied
Thread Starter
Dabei seit
06.07.2006
Beiträge
1.621
Reaktionspunkte
78
Hallo Leute,

also ein Alias ist doch das gleiche wie ein Symbolic Link, nur dass ich beim Alias in der Shell nur an den 0 Bytes der Größe erkenne dass es sich um einen handelt. Ausserdem hat der Alias doch den Nachteil dass ich nur in der Aqua-Oberfläche rausfinden kann wo das original liegt (rechtsklick --> Original anzeigen)

Ein Symbolic Link wird ja im Directory als solcher ausgewiesen, da ja nach einem ls -l bei den permissions "lrwxr-xr-x" angezeigt wird und das l auf einen Link hinweist. Ausserdem habe ich den Vorteil dass ich auch in der Shell sehe wohin die reise geht.

Wenn ich sowohl beim Symbolic Link als auch beim Alias das Original umbenenne greifen beide ins Leere

Bis jetzt denke ich habe ich alles verstanden. So und jetzt erklärt mir einer mal einen Hard link:

Ich habe eine Datei namens hossa.txt und ich lege jetzt mittels "ln hossa.txt mahlzeit.txt" einen harten link an. Wenn ich nun aber in hossa.txt was ändere, so ist das NICHT in mahlzeit.txt mitgeändert....

Für mich schaut das so aus als wäre es eine stinknormale Kopie der Datei...

Grüße Blain
 
Ein Symbolic Link wird ja im Directory als solcher ausgewiesen, da ja nach einem ls -l bei den permissions "lrwxr-xr-x" angezeigt wird und das l auf einen Link hinweist. Ausserdem habe ich den Vorteil dass ich auch in der Shell sehe wohin die reise geht.

Wenn ich sowohl beim Symbolic Link als auch beim Alias das Original umbenenne greifen beide ins Leere

Bis jetzt denke ich habe ich alles verstanden. So und jetzt erklärt mir einer mal einen Hard link:
Also:
Ein INODE ist ein Eintrag in Dateisystemindex.
In diesem sind diverse Sachen wie Rechte usw, aber auch der Speicherort auf der Festplatte abgelegt.
Das heisst es gibt eine Tabelle mit folgenden Einträgen:
ID;Rechte,Owner,Gruppe,Linkzähler usw.
Wenn jetzt eine Datei erzeugt wird dann wird eine neue Verknüpfung Name1->ID1 erzeugt.
Legst du jetzt einen Softlink an, dann wird eine neue Datei erzeugt, welche als Inhalt den Pfad des Ziels hat, also NAME1->ID2.
Legst du einen Hardlink an, dann Wird im Dateisystem eine neue Datei mit der ID des Ziels erzeugt, also NAME3->ID1.

leg mal eine Datei mit
Code:
echo "test" >testdatei
an.
dann erzeugst du mit
Code:
ln testdatei testhardlink
und
Code:
ln -s testdatei testsoftlink
zwei links an.
Schau dir jetzt die informationen die
Code:
ls -li
liefert an.
Du siehst, testdatei und testhardlink haben die selbe inode, sind also quasi die selbe Datei wärend testsoftlink selbstständig ist. Deswegen kannst du jetzt auch testdatei löschen. testhardlink bleibt weiterhin gültig.
Hier sieht man ganz gut wie im Dateisystem eine Datei gelöscht wird. Es wird einfach nur die Zuordnung Dateiname->Inode gelöscht. nicht jedoch die Datei an sich.

Ich habe eine Datei namens hossa.txt und ich lege jetzt mittels "ln hossa.txt mahlzeit.txt" einen harten link an. Wenn ich nun aber in hossa.txt was ändere, so ist das NICHT in mahlzeit.txt mitgeändert....
Da scheint was gehörig schief zu laufen!

Hier gibts noch ne kleine Übersicht. Ganz am Ende der Seite ist eine Tabelle mit einem Vergleich von Softlink<->Hardlink<->OSX-Alias:
http://r-goetz.de/linux/bg/fs.html

Eine andere Erklärung steht in der manpage zu ln:
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/ln.1.html
 
  • Gefällt mir
Reaktionen: Blain
...

Hallo Blain,

das Ganze ist etwas kompliziert.
Der Alias ist ein Finder eigenes "Ding" der geht nach der File ID deshalb kann man beides Alias und Original umbenennen oder verschieben. Die Zuordnung übernimmt der Alias Manager. Die Shell kann diesem nicht folgen (oder nur mit einem Zusatztool).

Der Symbolische Link geht nach dem Pfad. Da kann man logischerweise nichts umbenennen oder verschieben. Das ist ein Shell "Ding" der Finder kann aber einem Symbolischen Link folgen.

Der Hard Link ist wie von magheinz beschrieben ein weiterer Eintrag der selben Datei. Du kannst in der Shell eins von beiden mit z.B pico verändern und die Veränderung ist in beiden. Änderst Du eins aber mit z.B. TextEdit und sicherst wird das ganze Konstrukt aufgelöst und eine neue Datei geschrieben - drum kommt's Dir nur als Kopie vor. Ist also auch ein Shell "Ding" und GUI Programme ignorieren das. Im Finder kannst Du aber eins von beiden löschen und das andere bleibt erhalten.

Jetzt gibt es noch das "Ding" in der Seitenleiste des Finders. Benennt man das um wird auch das Original umbenannt. Löscht man es wird auch das Original gelöscht - ganz böse...

Gruß Andi
 
  • Gefällt mir
Reaktionen: Blain
Änderst Du eins aber mit z.B. TextEdit und sicherst wird das ganze Konstrukt aufgelöst und eine neue Datei geschrieben - drum kommt's Dir nur als Kopie vor.
Das würde ich aber mal eindeutig als Bug bezeichnen.
Wieso sollte TextEdit eine neue Datei erzeugen wenn schon eine vorhanden ist?
 
...

Hallo magheinz,

Das würde ich aber mal eindeutig als Bug bezeichnen.
ja - wundert mich auch. Weil im Eingangspost so ziemlich nichts gestimmt hat, habe ich das ausprobiert.
pico geht TextEdit nicht.
Für das Warum habe ich auch keine Erklärung.
Vielleicht kann das noch Jemand mal probieren...

Gruß Andi
 
Vielleicht kann das noch Jemand mal probieren...
Ich hab ein paar Tage frei und deshalb grad keinen mac in reichweite.
Falls du Zeit und Lust hast schau doch mal nach ob sich die inode der Datei ändert wenn man sie mit textedit editiert hat.
Mich würde interessieren ob das Teil eventuell einfach in einer temporärer Datei arbeitet und beim Speichern die original löscht und eine neue anlegt. Das wäre nämlich ziemlich dämlich.

Interessant wäre es auch ob das nur beim Speichern passiert oder ob textedit das generell macht, ich hoffe ja nicht.
 
...

Hallo magheinz,

der inode ändert sich. TextEdit scheint einfach eine neue Datei "über" die alte zu schreiben. Bei erneuter Veränderung durch TextEdit bleibt der inode aber gleich...

10.4.11

Gruß Andi
 
der inode ändert sich. TextEdit scheint einfach eine neue Datei "über" die alte zu schreiben. Bei erneuter Veränderung durch TextEdit bleibt der inode aber gleich...
Ok, dann siehts wirklich nach einem bug aus.
kann man sowas irgendwo bei apple melden?
 
...

Hallo magheinz,

sicher kann man Bugs bei Apple melden. Nur ob es einer ist, ist die Frage.
Shell und Aqua sind halt zwei Paar Schuhe. Den Alias kennt die Shell ja auch nicht...

Gruß Andi

PS: Hoffentlich ist das nicht nur bei mir und dem TE so :rolleyes:
 
Hallo magheinz,

sicher kann man Bugs bei Apple melden. Nur ob es einer ist, ist die Frage.
Shell und Aqua sind halt zwei Paar Schuhe. Den Alias kennt die Shell ja auch nicht...

Gruß Andi

PS: Hoffentlich ist das nicht nur bei mir und dem TE so :rolleyes:

Shell und Aqua dürften aber keine Unterschiede imho machen. Ich tendiere auch zu einem Bug, aber lass mich gerne belehren, was das für einen Sinn haben soll (und v.a. wie das so ohne weiteres geht?!?)
 
Shell und Aqua dürften aber keine Unterschiede imho machen. Ich tendiere auch zu einem Bug, aber lass mich gerne belehren, was das für einen Sinn haben soll (und v.a. wie das so ohne weiteres geht?!?)
Also soft und hardlinks sind eine Eigenschaft des Dateisystems.
Der Bug selber hat aber nix damit zu tun. Der Bug ist meiner Meinung nach das textedit beim Dateiöffnen eine neue Datei anlegt was einfach falsch ist.
Beim Dateiöffnen sollte eigentlich die vorhandene Datei geöffnet werden und nicht eine vorhandene gelöscht und dann einfach neu abgespeichert werden.
Das dürfte ja auch zu unerfreulichen Nebeneffekten führen.
Das erklärt ja auch das Problem vom OP. Wenn er eine Datei hat und einen Hardlink auf diese und jetzt die Datei gelösct wird und von Textedit neu angelegt wird, was passiert mit dem hardlink? Der zeigt ja jetzt auf eine andere Datei.
 
...

Hallo magheinz und timbajr,

ehrlich gesagt wäre mir wohler wenn das Jemand bestätigen bzw. widerlegen könnte...

Darüber wie es sein sollte sind wir uns ja einig.
So hab ich es gemacht:

administrators-power-mac-g4:~ admin$ cd /Users/admin/Documents/Hardlinktest/
administrators-power-mac-g4:~/Documents/Hardlinktest admin$ touch test.txt
administrators-power-mac-g4:~/Documents/Hardlinktest admin$ ln test.txt testhl.txt
administrators-power-mac-g4:~/Documents/Hardlinktest admin$ ls -li
total 0
2807611 -rw-r--r-- 2 admin staff 0 Apr 3 15:40 test.txt
2807611 -rw-r--r-- 2 admin staff 0 Apr 3 15:40 testhl.txt

(test.txt mit TextEdit geöffnet und gespeichert)

administrators-power-mac-g4:~/Documents/Hardlinktest admin$ ls -li
total 8
2807618 -rw-r--r-- 1 admin staff 4 Apr 3 15:41 test.txt
2807611 -rw-r--r-- 1 admin staff 0 Apr 3 15:40 testhl.txt

(test.text nochmals geöffnet und gespeichert)

administrators-power-mac-g4:~/Documents/Hardlinktest admin$ ls -li
total 8
2807618 -rw-r--r-- 1 admin staff 8 Apr 3 15:45 test.txt
2807611 -rw-r--r-- 1 admin staff 0 Apr 3 15:40 testhl.txt

wenn ich das Ganze mit pico anstatt TextEdit mache funktioniert es wie erwartet.

Gruß Andi
 
Melde Dich halt an, tut doch nicht weh ;).
 
...

Hallo maceis,

...tut doch nicht weh

vielleicht nur die Antwort:

It's not a bug - It's a feature.

Ich kann's mir nur so erklären, dass es einfacher/sicherer ist bei Änderungen in einer Datei die ganze Datei neu zu schreiben und wenn das erfolgreich war das Original zu löschen. Bei CL-Programmen mag das anders sein...

Ist dann ein Entwicklerproblem.

Gruß Andi
 
It's not a bug - It's a feature.

Ich kann's mir nur so erklären, dass es einfacher/sicherer ist bei Änderungen in einer Datei die ganze Datei neu zu schreiben und wenn das erfolgreich war das Original zu löschen. Bei CL-Programmen mag das anders sein...

Das halte ich für Unsinn. Datei öffnen ist nunmal Datei öffnen und nicht Kopie von Datei öffnen und original löschen.
Vor allem wenn man dabei Dateisystemfeatures wie z.B: links kaputt macht.

Man kann auch Problem los in einer Temporären Datei arbeiten, aber man sollte dann trotzdem beim Abspeichern die Originaldatei überschreiben und nicht eine neue erzeugen. Das ist einfach unsauber.

Übrigens, beim zweiten mal öffnen einer Datei macht textedit das ja anscheinend nicht. Nur wenn der linkcounter größer 1 ist.
 
Moment, das findet schon beim Öffnen statt? Ich dachte hier war vom Ändern die Rede, sprich vom Speichern?
 
...

Hallo magheinz,

ich finde das auch nicht gut. Wie sieht es mit Leopard aus? Hat das nicht eine UNIX-Zertifizierung? Da dürfte das ja nicht sein - oder?

Gruß Andi
 
Moment, das findet schon beim Öffnen statt? Ich dachte hier war vom Ändern die Rede, sprich vom Speichern?
richtig:
Datei speichern ist nunmal Datei speichern und nicht Kopie von Datei speichern und original löschen. ;)
 
Zurück
Oben Unten