UNIXwork

Tags

c unix dav shell linux xattr solaris links x11 java rant webdav fun gnome apple sync wtf oracle ldap network xnedit windows analytics macos benchmark curl apache bsd graalvm mac virtualbox arm zfs rhel microsoft tomcat freebsd hardware sparc

Extended Attributes Teil 5: Solaris Commandline Tools

12. Dezember 2016

In Solaris sind Extended Attributes keine Key/Value-Paare, sondern werden als Dateien repräsentiert. Hinter jeder Datei im Dateisystem steckt eine weitere Datei-Hierarchie, die jedoch auf normale Dateien beschränkt ist, also keine Unterverzeichnisse oder Links erlaubt. Attribute sind somit nur Dateien, für die die selben Limits für die Dateigröße oder Namen gelten. Außerdem haben sie eigene Zugriffsrechte. Nur einen absoluten Pfad haben sie nicht.

Für den Zugriff auf Attribute über die Shell gibt es das runat Tool. Dieses macht nichts weiter als das Working-Directory auf das versteckte Attributverzeichnis zu setzen und dann ein gewünschtes Kommando auszuführen. Man kann auch einfach eine Shell für dieses Verzeichnis starten. Um die Attribute dann zu lesen, schreiben oder aufzulisten können prinzipiell alle Programme verwendet werden.

$ touch test.txt
$ runat test.txt sh
$ echo "xattr test string" > testattribute
$ echo "text/plain" > mime_type
$ ls
mime_type      SUNWattr_ro    SUNWattr_rw    testattribute
$ cat testattribute
xattr test string
$ exit

Kommen wir zu der Unterstützung für Extended Attributes in den Standard-Unix-Tools.

  • mv erhält immer alle Attribute. Wenn mv eine Datei auf ein anderes Dateisystem verschieben will, und dort die Extended Attributes nicht repliziert werden können, wird die Operation abgebrochen und die Quelldatei wird nicht gelöscht.

  • ls zeigt mit der -@ Option ein @-Zeichen nach den Zugriffsrechten an, wenn eine Datei Extended Attributes besitzt.

  • cp und tar ignorieren standardmäßig Extended Attributes, auch hier hilft die -@ Option.

Dateisysteme werden nicht nur ZFS und UFS unterstützt, sondern auch NFS. Und betreibt man einen Solaris smb-Server werden die Extended Attributes dort auch über smb als NTFS Alternate Data Stream zur Verfügung gestellt.

Siehe auch: fsattr(5)

Programme anhalten und fortsetzen

11. Dezember 2016

Es ist möglich Programme einfach anzuhalten, und zu einem beliebigen Zeitpunkt fortzusetzen. Zum stoppen schickt man das SIGSTOP-Signal an den Prozess, zum fortsetzen SIGCONT.

Kleine Demonstration, in der der Sekundenzeiger von xclock angehalten wird.

$ xclock -update 1 &
$ kill -STOP $!
$ kill -CONT $!

Spezielle Dateisystemattribute

10. Dezember 2016

Diesmal geht es nicht um Extended Attributes, jedoch um eine andere Art von Dateiattributen, die auch für den Kernel von Bedeutung sind. Mit diesen kann man beispielsweise Dateien unveränderbar machen oder einstellen, dass an die Datei nur neue Daten angehangen werden können, aber nicht der bisherige Inhalt überschrieben werden kann. Das ganze ist völlig unabhängig von den eigentlichen Rechten der Datei.

Beispiel unter Linux:

# chattr +i myfile

Danach ist die Datei unveränderbar. Selbst root kann die Datei nicht verändern, solange das Attribut gesetzt ist. Natürlich könnte root es entfernen und danach die Datei verändern.

Unter Solaris verändert man diese Attribute mit chmod. Interessant ist da z.B. das nounlink-Attribut.

# chmod S+vnounlink myfile
rm: myfile not removed: Not owner
# echo newcontent > myfile
# chmod S-vnounlink myfile
# rm myfile
# 

Das verhindert effektiv, dass man sich wichtige Dateien versehentlich löscht.

Applying Special Attributes to ZFS Files chattr (ubuntuusers Wiki)

progress - Fortschrittsanzeige in der Shell

09. Dezember 2016

Dauert cp mal wieder länger? Hat ja leider auch nicht mal eine Fortschrittsanzeige.

Mit dem Tool progress kann man sich jedoch für Programme wie cp, dd und andere den Fortschritt und Kopiergeschwindigkeit anzeigen lassen. Das Programm durchsucht /proc nach bestimmten Programmen und schaut für diese jeweils welche Dateien geöffnet sind und zeigt dann den Fortschritt für die größte Datei. Also wärend cp läuft einfach in einem 2. Terminal progress -w aufrufen:

$ progress -w
[25534] cp /storage/bigfile
	67.4% (673.8 MiB / 1000 MiB) 22.2 MiB/s remaining 0:00:14

Kopiert man allerdings mehrere Dateien mit cp, dann wird natürlich nur der Fortschritt der aktuellen Datei angezeigt.

Extended Attributes Teil 4: FreeBSD Syscalls

08. Dezember 2016

Um auf Extended Attributes in C zuzugreifen gibt es unter FreeBSD die extattr_*-Syscalls. Auch hier gibt es Varianten, die mit Pfaden arbeiten, welche für Filedeskriptoren und welche die im Falle eines symbolischen Links den Link selber betreffen.

Alle Funktionen erwarten als 2. Parameter ein int für den Namespace. Hierfür gibt es die Makros EXTATTR_NAMESPACE_USER und EXTATTR_NAMESPACE_SYSTEM.

Um an alle Namen der Attribute zu kommen gibt es die Funktion extattr_list_file (und noch die beiden anderen Varianten). Im Gegensatz zu Linux werden hier die Namen nicht einfach Null-terminiert hintereinander in den Buffer geschrieben, sondern vor jedem Namen steht zunächst ein einzelnes Bytes, welches die Länge des Namens angibt. Danach folgt der Name, jedoch ist dieser nicht Null-terminiert. Die anderen Funktionen sind alle recht trivial zu benutzen.

Da FreeBSD keine Tools hat, um Dateien mit ihren Extended Attributes zu kopieren, hab ich ein kleines Beispielprogramm geschrieben, dass alle Attribute aus dem User-Namespace von einer Datei auf eine andere kopiert.

Zurück Weiter