Verzeichnisstruktur ohne Dateien kopieren

Folgendes bekam ich die Tage als Aufgabenstellung. Eine Bekannte von mir hat auf einer Festplatte ein Hauptverzeichnis. Darin enthalten sind Unterverzeichnisse. In diesen sind ebenfalls Unterverzeichnisse usw. In manchen Verzeichnissen liegen Dateien in manchen nicht. Gewünscht war nun, die ganze Verzeichnisstruktur exklusive der Dateien in ein neues Hauptverzeichnis auf einer anderen Platte zu packenn. Das ganze möglichst automatisch, da ein erster manueller Versuch wohl frustriert aufgegeben wurde (sehr viele Verzeichniss und viele Dateien).

Gelöst habe ich ganze wie folgt (mit der Konsole war ich bereits auf dem betreffenden Mountpoint der Festplatte mit den Verzeichnissen inkl. der Dateien).

cd Hauptverzeichnis
find . -type d -exec mkdir -p /mountpoint_der_neuen_platte/Hauptverzeichnis{} ';'

Und schon wurde auf der neuen Platte ein Hauptverzeichnis mit den ganzen Unterverzeichnissen exklusive der Dateien erstellt.

Automatisches Aufräumen von temporären Dateien unter systemd steuern

In den letzten Wochen war es mal wieder hip gegen systemd zu sticheln. Einige Personen hatten es zum Beispiel auf den Service systemd-tmpfiles-clean abgesehen. Mit diesem werden temporäre Dateien nach einer bestimmten Zeitspanne automatisch gelöscht. Die Standardeinstellung für /tmp ist 10 Tage, die für /var/tmp 30 Tage.

Es wurde nun argumentiert, dass diese Einstellungen für die meisten Nutzer blödsinnig wären. Wie gut, dass man etwas dagegen machen kann. Fangen wir mal damit an, die Fristen auf die persönlichen Bedürfnisse anzupassen. Die betreffende Konfigurationsdatei findet man unter /usr/lib/tmpfiles.d/ und nennt sich tmp.conf. Diese sieht bei mir wie folgt aus.

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# See tmpfiles.d(5) for details

# Clear tmp directories separately, to make them easier to override
d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d

# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

Die ersten beiden Zeilen setzen sich wie folgt zusammen. |Typ|Pfad|Rechte|UID|GID|Alter|. Für viele ist vermutlich das Alter interessant ab dem gelöscht wird. Hier kann man sich entsprechend austoben. Mögliche Zeiteinheiten sind s, min, h, d, w, ms, m, us. Diese müssen ohne Lehrzeichen angegeben werden. Also z. B. 10d oder 10d12h.

Will man z. B. ein Unterverzeichnis vom automatischen Bereinigen ausnehmen ist der Typ x, wie man es im zweiten Block sehen kann, die Wahl der Waffe.

Unter http://www.freedesktop.org/software/systemd/man/tmpfiles.d.html (englisch) kann man sich den ganzen Spaß noch genauer und ausführlicher durchlesen.

Was aber, wenn man gar kein automatisches Bereinigen der temporären Dateien wünscht? Am einfachsten ist es wohl den Service einfach zu deaktivieren.

Abschließend bleibt mir eigentlich nur noch eines zu sagen. Dieses Argument gegen systemd ist eigentlich gar kein Argument. Es zeigt eigentlich nur, dass sich viele systemd-Gegner nicht wirklich mit systemd-Projekt beschäftigt haben. Und nein, systemd ist trotz allem nicht der heilige Gral. Ich musste mich auch schon einige Zeit mit der Meldung “a stop stop ist running for User Manager for UID 1026″ und dem damit verbundenen Countdown von 90 Sekunden beim Herunterfahren meines Hauptrechners herumschlagen.

Zeit mittels timesyncd synchronisieren

Vor ein paar Minuten ist mit aufgefallen, dass die Uhr unter lxde um ein paar Minuten falsch läuft. Wie es sich herausgestellt hat, hatte ich schlicht und ergreifend vergessen NTPD zu installieren. Bei der Gelegenheit habe ich jetzt allerdings timesyncd getestet. Dies ist ein Service aus dem systemd-Projekt (nicht dem init-Dienst) welcher für meine Anforderungen das gleiche wie NTP macht. Es gleicht die Uhr meines Rechners mit einem Zeitserver im Internet ab.

Als erstes habe ich mir die Konfigurationsdatei /etc/systemd/timesyncd.conf vorgenommen. Diese ist im Auslieferungszustand sehr übersichtlich.

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# See timesyncd.conf(5) for details

[Time]
#Servers=time1.google.com time2.google.com time3.google.com time4.google.com

Eigentlich muss man in der letzten Zeile nur das # entfernen und die Datei speichern.

Als nächstes habe ich dann mittels “systemctl start timesyncd” den Service gestartet. Da es keinerlei Beschwerden gab, folgte ein “systemctl enable timesyncd” um den Service automatisch zu starten. Abschließend habe ich den Rechner neu gestartet. Und die Uhr lief trotzdem um ein paar Minuten falsch… Also mal Tante Google fragen. Nach wenigen Sekunden hatte ich die Antwort. Damit timesyncd funktioniert muss auch systemd-networkd laufen. Da ich aber netctl für meine Netzwerkverbindungen nutze, ist mir das aber nicht so recht. Aber vielleicht reicht es ja, wenn systemd-networkd nur läuft aber nicht konfiguriert ist… Probieren wir es aus und aktivieren wir den Dienst mittels “systemctl enable systemd-networkd” und starten die Büchse neu. Und schwupps funktioniert timesyncd, obwohl ich netctl nutze. Vermutlich werde ich aber trotzdem wieder auf ntpd umschwenken, da ich damit systemd-networkd nicht laufen lassen muss.

Bootzeit unter systemd analysieren

Wenn man herausfinden will, welcher Service beim Booten mit systemd den Bootprozess verlangsamt, kann man dies mittels folgendem Befehl recht gut darstellen.

systemd-analyze critical-chain | sed 's/^/    /'

Heraus kommt dann so etwas wie

multi-user.target @28.246s
└─clamav-freshclam.service @27.657s +247ms
  └─clamav-daemon.service @3.042s +24.604s
    └─basic.target @3.026s
      └─sockets.target @3.023s
        └─dbus.socket @3.021s
          └─sysinit.target @3.017s
            └─ferm.service @2.756s +259ms
              └─network.target @2.752s
                └─networking.service @427ms +2.323s
                  └─local-fs.target @410ms
                    └─run-lock.mount @396ms +11ms
                      └─local-fs-pre.target @384ms
                        └─systemd-udevd.service @303ms +20ms
                          └─systemd-tmpfiles-setup-dev.service @208ms +80ms
                            └─systemd-journald.socket @114ms
                              └─-.mount @100ms

Die Angabe nach dem @ zeigt an, wie lange der Service aktiv ist. Die Zahl hinter dem + zeigt an, wie lange der Service zum Starten gebraucht hat. So kann man recht gut herausfinden, welcher Probleme macht.

Cool-old-term – Terminal Emulator der alten Schule

Kennt Ihr noch die Monitore mit der bernsteinfarbenen Schrift? Vermisst ihr sie? Wenn ja, ist das folgende eventuell etwas für euch. Ein Terminal Emulator der der dieses “Old-School-Feeling” wieder bringt. Selbst an die auftretenden Störungen wurde gedacht. Aber seht selbst.

Den Blog-Eintrag des Entwicklers mit weiterführenden Links findet man unter http://swordfishslabs.wordpress.com/2014/07/29/brace-yourself-cool-old-term-is-coming/

Persönlich muss ich sagen, sinnlos wie sau. Installieren werde ich mir den Terminal Emulator aber dennoch einmal. :D