BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Smart Array RAID Controller auf FreeBSD verwalten

Auf einem Server mit einem Smart Array Controller kann der RAID Controller mit Hilfe des hpacucli (HP Array Configuration Utility CLI) direkt aus dem Betriebssystem heraus verwaltet werden. hpacucli findet man im FreeBSD Portsbaum unter sysutils/hpacucli:

# cd /usr/ports/sysutils/hpacucli && make install clean

Danach kann hpacucli gestartet werden, wobei die vorhandenen RAID Controller erkannt werden. Möchte man sich danach alle verfügbaren Kommandos von hpacucli anschauen, kann help eingegeben werden.

# hpacucli
HP Array Configuration Utility CLI 7.50.18.0
Detecting Controllers...Done.
Type "help" for a list of supported commands.
Type "exit" to close the console.

=>

Alle verfügbaren Informationen zu allen verfügbaren RAID Controllern, in diesem Beispiel nur einer, erhält man mit ctrl all show:

=> ctrl all show 
Controller Smart Array P400 at 0
Bus Interface: PCI
Slot: 0
Serial Number: 123456789
Cache serialnumber: 123456789
RAID 6 (ADG) Status: Enabled
RAID 6 (ADG) Enabler Status: Enabled
Controller Status: OK
Chassis Slot: 1
Hardware Revision: Rev D
Firmware Version: 2.08
Rebuild Priority: Medium
Expand Priority: Medium
Surface Scan Delay: 15 sec
Cache Board Present: True
Cache Status: OK
Accelerator Ratio: 100/0 (read/write)
Total Cache Size: 512 MB
Battery Pack Count: 1
Battery Status: OK

Möchte man sich nur den Status des Controllers anzeigen lassen, kann dies mit ctrl all show status gemacht werden:

=> ctrl all show status
Smart Array P400 in Slot 0
Controller Status: OK
Cache Status: OK
Battery Status: OK

Möchte man sich nun die Komponenten des Controllers genauer anschauen, kann der Controller festgelegt werden:

=> set target ctrl slot=0
controller slot=0

Nun lassen sich die Informationen zu allen Festplatten an diesem Controller mit pd all show anzeigen:

=> pd all show
Smart Array P400 in Slot 0
physicaldrive 1:1
Port: 2I
Box: 1
Bay: 1
Status: OK
Drive Type: Data Drive
Interface Type: SAS
Size: 73.4 GB
Transfer Speed: 3.0 Gbps
Rotational Speed: 10000
Firmware Revision: HPD5
Serial Number: 3123456789
physicaldrive 1:2
Port: 2I
Box: 1
Bay: 2
Status: OK
Drive Type: Data Drive
Interface Type: SAS
Size: 73.4 GB
Transfer Speed: 3.0 Gbps
Rotational Speed: 10000
Firmware Revision: HPD5
Serial Number: 123456789

Auch die daraus erstellten "Logical Drives" können mit ld all show angezeigt werden:

=> ld all show
Smart Array P400 in Slot 0
Logical Drive: 1
Size: 68.3 GB
Fault Tolerance: 1+0
Heads: 255
Sectors Per Track: 32
Cylinders: 17562
Stripe Size: 128 KB
Status: Ok
Array Accelerator: Enabled
Has Data On Drive: True
Unique Identifier: 123456704C3953554112345678
Preferred Controller Chassis Slot: 1

Nun kann man mit hpacucli direkt neue "Logical Drives" erstellen und Parameter des Controllers während des Betriebs verändern. Eine komplette Übersicht der Befehle findet man auf folgender Seite: http://people.freebsd.org/~jcagle/hpacucli-readme

Mehr Informationen zu FreeBSD auf HP Proliant Servern findet man auf folgender Seite: http://people.freebsd.org/~jcagle/

Der Status eines "Logical Drives" kann auch mit cciss_vol_status ausgelesen werden.

 Permalink

Temperatur bei neueren Intel Prozessoren auslesen

Seit FreeBSD 7.0 lässt sich die Kerntemperatur von neuen Intel Prozessoren, welche der Familie der Intel Core oder Neuer angehören, auslesen. Dazu muss zuerst das coretemp Kernel-Modul geladen werden:

# kldload coretemp

Werden die Sensoren erkannt, wird dies in der dmesg angezeigt:

# dmesg | grep coretemp
coretemp0: <CPU On-Die Thermal Sensors> on cpu0
coretemp1: <CPU On-Die Thermal Sensors> on cpu1
coretemp2: <CPU On-Die Thermal Sensors> on cpu2
coretemp3: <CPU On-Die Thermal Sensors> on cpu3

Soll das Modul automatisch beim Systemstart geladen werden, so kann folgender Eintrag in der /boot/loader.conf gemacht werden:

coretemp_load="YES"

Nun lassen sich die Temperaturen mit Hilfe von sysctl(8) auslesen. Die Temperaturen werden dabei in Grad Celsius angezeigt:

# sysctl dev.cpu | grep temperature
dev.cpu.0.temperature: 23
dev.cpu.1.temperature: 21
dev.cpu.2.temperature: 19
dev.cpu.3.temperature: 15

Mehr Informationen zu coretemp findet man in der Manpage coretemp(4).

Comments (5)  Permalink

Aufzeichnen welche Dateien von einem Programm angelegt werden

Mit Hilfe von ftrace lässt sich aufzeichnen, welche Dateien von einem Programm erstellt werden. ftrace findet man in den FreeBSD Ports unter sysutils/ftrace:

# cd /usr/ports/sysutils/ftrace/ && make install clean

Im folgenden Beispiel wird aufgezeichnet, welche Dateien angelegt werden, wenn man ein make install in /usr/ports/ports-mgmt/portsopt ausführt. Das Ergebnis wird nach /tmp/filelist geschrieben:

# cd /usr/ports/ports-mgmt/portsopt
# ftrace /tmp/filelist make install
===> Extracting for portsopt-1.4
=> MD5 Checksum OK for portsopt-1.4.tar.gz.
=> SHA256 Checksum OK for portsopt-1.4.tar.gz.
===> Patching for portsopt-1.4
===> Configuring for portsopt-1.4
===> Installing for portsopt-1.4
===> Generating temporary packing list
===> Checking if ports-mgmt/portsopt already installed
install -o root -g wheel -m 555 /usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt /usr/local/sbin
===> Registering installation for portsopt-1.4
# cat /tmp/filelist
/usr/ports/ports-mgmt/portsopt/work
/usr/ports/ports-mgmt/portsopt/work/portsopt-1.4
/usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt
/usr/ports/ports-mgmt/portsopt/work/.extract_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.patch_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.configure_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.build_done.portsopt._usr_local
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/ports/ports-mgmt/portsopt/work/.PLIST.mktmp
/usr/local/share/nls/POSIX
/usr/local/share/nls/en_US.US-ASCII
/usr/local/sbin/portsopt
/var/db/pkg/portsopt-1.4
/var/db/pkg/portsopt-1.4/+CONTENTS
/var/db/pkg/portsopt-1.4/+DESC
/var/db/pkg/portsopt-1.4/+COMMENT
/var/db/pkg/portsopt-1.4/+MTREE_DIRS
/usr/ports/ports-mgmt/portsopt/work/.PLIST.flattened
/usr/ports/ports-mgmt/portsopt/work/.PLIST.setuid
/usr/ports/ports-mgmt/portsopt/work/.PLIST.writable
/usr/ports/ports-mgmt/portsopt/work/.PLIST.objdump
/usr/ports/ports-mgmt/portsopt/work/.install_done.portsopt._usr_local

Sollen versteckte Dateien nicht aufgezeichnet werden, kann die -i Option verwendet werden:

# cd /usr/ports/ports-mgmt/portsopt && ftrace -i /tmp/filelist make install
===> Extracting for portsopt-1.4
=> MD5 Checksum OK for portsopt-1.4.tar.gz.
=> SHA256 Checksum OK for portsopt-1.4.tar.gz.
===> Patching for portsopt-1.4
===> Configuring for portsopt-1.4
===> Installing for portsopt-1.4
===> Generating temporary packing list
===> Checking if ports-mgmt/portsopt already installed
install -o root -g wheel -m 555 /usr/ports/ports-mgmt/portsopt/work/portsopt-1.4/portsopt /usr/local/sbin
===> Registering installation for portsopt-1.4
# cat /tmp/filelist
/usr/local/share/nls/POSIX
/usr/local/share/nls/en_US.US-ASCII
/usr/local/sbin/portsopt
/var/db/pkg/portsopt-1.4
/var/db/pkg/portsopt-1.4/+CONTENTS
/var/db/pkg/portsopt-1.4/+DESC
/var/db/pkg/portsopt-1.4/+COMMENT
/var/db/pkg/portsopt-1.4/+MTREE_DIRS
 Permalink

Kernel und Optionen für nächsten Start konfigurieren

Mit nextboot(8) kann der Kernel festgelegt werden, welcher automatisch beim nächsten Neustart geladen werden soll. So können auch Boot-Optionen dem Kernel übergeben werden. Folgendes Beispiel lädt beim nächsten Neustart den Kernel kernel.old und übergibt dem Kernel die -s Option, damit das System im Single User Mode gestartet wird:

# nextboot -o "-s" -k kernel.old

Möchte man nur den Kernel festlegen, welcher als nächstes gestartet wird, kann dies auch mit reboot gemacht werden.

 Permalink

FreeBSD binär auf eine neue Version aktualisieren

Mit Hilfe von freebsd-update(8) kann man ein FreeBSD System binär aktualisieren. Folgende Anleitung funktioniert allerdings nur, wenn man auf eine Version des gleichen Branches aktualisiert. In diesem Beispiel wird ein FreeBSD 6.1-RELEASE binär auf ein FreeBSD 6.3-RELEASE aktualisiert.

# uname -a
FreeBSD test.chruetertee.ch 6.1-RELEASE FreeBSD 6.1-RELEASE #0: Sun May 7 04:32:43 UTC 2006 root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

Zuerst muss freebsd-update heruntergeladen werden. Danach empfiehlt es sich, die Signatur von freebsd-update mit Hilfe von gpg(1) zu überprüfen:

# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz 
freebsd-update-upgrade.tgz 100% of 21 kB 38 kBps
# fetch http://www.daemonology.net/freebsd-update/freebsd-update-upgrade.tgz.asc
freebsd-update-upgrade.tgz.asc 100% of 187 B 1251 kBps
# gpg --verify freebsd-update-upgrade.tgz.asc freebsd-update-upgrade.tgz
gpg: Signature made Fr 16 Nov 15:01:38 2007 CET using DSA key ID CA6CDFB2
gpg: Good signature from "FreeBSD Security Officer <security-officer@FreeBSD.org>"

Sollte das Verzeichnis /var/db/freebsd-update nicht vorhanden sein, muss es angelegt werden, da sonst das Skript nicht funktioniert:

# sh freebsd-update.sh -f freebsd-update.conf -r 6.3-RELEASE upgrade
freebsd-update.sh: Directory does not exist or is not writable: /var/db/freebsd-update
# mkdir /var/db/freebsd-update

Nun kann das System auf die gewünschte Version aktualisiert werden. freebsd-update analysiert, welche Komponenten installiert sind und aktualisiert werden müssen:

# sh freebsd-update.sh -f freebsd-update.conf -r 6.3-RELEASE upgrade
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
Fetching public key from update1.FreeBSD.org... done.
Fetching metadata signature for 6.1-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.

The following components of FreeBSD seem to be installed:
kernel/generic world/base

The following components of FreeBSD do not seem to be installed:
kernel/smp src/base src/bin src/contrib src/crypto src/etc src/games
src/gnu src/include src/krb5 src/lib src/libexec src/release src/rescue
src/sbin src/secure src/share src/sys src/tools src/ubin src/usbin
world/catpages world/dict world/doc world/games world/info
world/manpages world/proflibs

Does this look reasonable (y/n)? y

Fetching metadata signature for 6.3-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Fetching 1 metadata patches. done.
Applying metadata patches... done.
Fetching 1 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 2033 patches.....10....20....30....40....50....60....70....80....90....100....110....120....130....140....150....160....170....180....190....200....210....220....230....240....250....260....270....280....290....300....310....320....330....340....350....360....370....380....390....400....410....420....430....440....450....460....470....480....490....500....510....520....530....540....550....560....570....580....590....600....610....620....630....640....650....660....670....680....690....700....710....720....730....740....750....760....770....780....790....800....810....820....830....840....850....860....870....880....890....900....910....920....930....940....950....960....970....980....990....1000....1010....1020....1030....1040....1050....1060....1070....1080....1090....1100....1110....1120....1130....1140....1150....1160....1170....1180....1190....1200....1210....1220....1230....1240....1250....1260....1270....1280....1290....1300....1310....1320....1330....1340....1350....1360....1370....1380....1390....1400....1410....1420....1430....1440....1450....1460....1470....1480....1490....1500....1510....1520....1530....1540....1550....1560....1570....1580....1590....1600....1610....1620....1630....1640....1650....1660....1670....1680....1690....1700....1710....1720....1730....1740....1750....1760....1770....1780....1790....1800....1810....1820....1830....1840....1850....1860....1870....1880....1890....1900....1910....1920....1930....1940....1950....1960....1970....1980....1990....2000....2010....2020....2030. done.
Applying patches... done.
Fetching 124 files... done.
The following files will be removed as part of updating to 6.3-RELEASE-p1:
/boot/kernel/hptmv.ko
/etc/periodic/weekly/120.clean-kvmdb
/usr/include/c++/3.4/ext/demangle.h
/usr/lib/libpcap.so.4
/usr/lib/libpthread.so.2
[...]
/var/named/etc/namedb/PROTO.localhost-v6.rev
/var/named/etc/namedb/PROTO.localhost.rev
/var/named/etc/namedb/make-localhost
The following files will be added as part of updating to 6.3-RELEASE-p1:
/bin/pgrep
/bin/pkill
/boot/kernel/acpi_dock.ko
/boot/kernel/amdsmb.ko
/boot/kernel/coretemp.ko
/boot/kernel/geom_md.ko
[...]
/usr/share/zoneinfo/Europe/Volgograd
/var/named/etc/namedb/master/empty.db
/var/named/etc/namedb/master/localhost-forward.db
/var/named/etc/namedb/master/localhost-reverse.db
The following files will be updated as part of updating to 6.3-RELEASE-p1:
/COPYRIGHT
/bin/[
/bin/cat
/bin/chflags
/bin/chio
/bin/chmod
[...]
/usr/share/zoneinfo/zone.tab
/var/named/etc/namedb/named.conf
/var/named/etc/namedb/named.root
/var/yp/Makefile.dist

Nun kann der neue Kernel installiert werden:

# sh freebsd-update.sh -f freebsd-update.conf install
Installing updates...
Kernel updates have been installed. Please reboot and run
"freebsd-update.sh install" again to finish installing updates.

Ist der Kernel installiert, muss das System neu gestartet werden:

# shutdown -r now

Nun kann der Rest des Systems aktualisiert werden:

# freebsd-update.sh -f freebsd-update.conf install
Installing updates...
Completing this upgrade requires removing old shared object files.
Please rebuild all installed 3rd party software (e.g., programs
installed from the ports tree) and then run "freebsd-update.sh install"
again to finish installing updates.

Danach sollten die Ports neu gebaut werden. Zum Beispiel kann man alle Ports deinstallieren und anschliessend neu bauen. Dazu kann portmaster(8) zur Hilfe genommen werden:

# portmaster -l > ~/installed-port-list
# portsnap fetch update
# portmaster --clean-distfiles-all
# portmaster -Faf
# pkg_delete *

portmaster erstellt eine Liste aller installierten Ports. Möchte man alle diese Ports wieder installieren, nachdem man sie gelöscht hat, so müssen nur die Root- und Leaf-Ports installiert werden. Alle anderen werden automatisch als Abhängigkeit installiert.

# cat ~/installed-port-list
===>>> Root ports (No dependencies, not depended on)
===>>> cciss_vol_status-1.03
===>>> libtool-1.5.24
===>>> poptop-1.3.4_1
===>>> portaudit-0.5.12
===>>> portmaster-2.1
===>>> portsopt-1.4
===>>> rsync-2.6.9_2
===>>> screen-4.0.3_1
===>>> sudo-1.6.9.6
===>>> 9 root ports

===>>> Trunk ports (No dependencies, are depended on)
===>>> autoconf-wrapper-20071109
===>>> expat-2.0.0_1
===>>> libiconv-1.11_1
===>>> m4-1.4.9,1
===>>> mysql-client-5.0.51
===>>> perl-5.8.8_1
===>>> pkg-config-0.22_1
===>>> 7 trunk ports

===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.0.63
===>>> gettext-0.16.1_3
===>>> libxml2-2.6.30
===>>> p5-DBD-mysql50-4.005
===>>> p5-DBI-1.60.1
===>>> p5-Storable-2.18
===>>> p5-gettext-1.05_1
===>>> pear-1.6.2_1
===>>> pear-DB-1.7.13,1
===>>> php5-5.2.5
===>>> php5-mysql-5.2.5
===>>> php5-pcre-5.2.5
===>>> php5-session-5.2.5
===>>> php5-xml-5.2.5
===>>> 14 branch ports

===>>> Leaf ports (Have dependencies, not depended on)
===>>> autoconf-2.61_2
===>>> gmake-3.81_2
===>>> help2man-1.36.4_1
===>>> mysql-server-5.0.51
===>>> tinderbox-2.4.2
===>>> vim-lite-7.1.175
===>>> 6 leaf ports

===>>> 36 total installed ports

Nun können noch die alten Libraries gelöscht werden:

# sh freebsd-update.sh -f freebsd-update.conf install
Installing updates... done.

Danach sollte das System nochmals neu gestartet werden:

# shutdown -r now

Nach dem Neustart ist die Aktualisierung abgeschlossen.

# uname -a
FreeBSD test.chruetertee.ch 6.3-RELEASE-p1 FreeBSD 6.3-RELEASE-p1 #0: Wed Feb 13 02:40:56 UTC 2008 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC i386
Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

UFS-Snapshots verwenden

Mit Hilfe eines Snapshots kann man den Stand eines Dateisystems festhalten. Verwendet man UFS als Dateisystem, so kann mit mount(8) ein Snapshot erzeugt werden. Folgendes Beispiel erzeugt einen Snapshot mit dem Namen snap1 von /var im Verzeichnis /var/.snap:

# mount -u -o snapshot /var/.snap/snap1 /var

Möchte man nun Daten des Snapshots lesen, so kann dieser mit Hilfe von mdconfig(8) und mount ins System eingebunden werden. Werden nun Änderungen am Dateisystem vorgenommen, sind diese im Snapshot nicht sichtbar:

# echo "test" > /var/testdatei
# mount -u -o snapshot /var/.snap/snap1 /var
# mdconfig -a -t vnode -f /var/.snap/snap1  -u 0
WARNING: opening backing store: /var/.snap/snap1 readonly
# mkdir /mnt/snap1
# mount -o ro /dev/md0 /mnt/snap1
# cat /mnt/snap1/testdatei
test
# echo "test2" >> /var/testdatei
# cat /var/testdatei
test
test2
# cat /mnt/snap1/testdatei
test

Vorhandene Snapshots können mit Hilfe von snapinfo(8) gefunden werden:

# snapinfo -a
/var/.snap/snap1

Eine detailliertere Ausgabe erhält man mit der -v Option:

# snapinfo -v -a
/dev/ad0s1a mounted on /
        no snapshots found
/dev/ad0s1d mounted on /tmp
        no snapshots found
/dev/ad0s1f mounted on /usr
        no snapshots found
/dev/ad0s1e mounted on /var
        snapshot /var/.snap/snap1 (inode 172)

Wird der Snapshot nicht mehr benötigt, kann er mit Hilfe vom umount(8), mdconfig und rm(1) aus dem System entfernt und gelöscht werden:

# umount /mnt/snap1
# mdconfig -d -u 0
# rm -f /var/.snap/snap1

Benutzt man ZFS als Dateisystem, stehen auch Shapshots zur Verfügung, diese werden allerdings mit Hilfe von zfs(1) verwaltet.

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink

Inhalt zweier Verzeichnisse vergleichen

Um den Inhalt zweier Verzeichnisse zu vergleichen kann man DirComp verwenden. DirComp findet man im FreeBSD Portsbaum unter sysutils/dircomp. Falls man die grafische Oberfläche zu DirComp nicht installieren möchte, kann der Port mit WITHOUT_X11 installiert werden:

# cd /usr/ports/sysutils/dircomp && make -DWITHOUT_X11 install clean

Nun können die beiden Verzeichnisse, welche vergleichen werden sollen, an DirComp übergeben werden. Verwendet man die -s Option, so werden auch die Dateien in den Unterverzeichnissen verglichen. Die Ausgabe wird dabei aus Sicht des zweiten übergebenen Verzeichnisses ausgegeben:

# DirComp -s dir1 dir2
DirComp V1.3

Older          : Datei1
Older          : Datei2
Deleted        : Datei3
Younger        : dir/AuchEineDatei
New            : dir/UndNochEine

Verglichen werden dabei die Zeiten zu denen die Datei das letzte Mal verändert wurde. Sollen die Dateien anhand Ihres Inhaltes verglichen werden, kann die -c Option verwendet werden:

# DirComp -c dir1 dir2
DirComp V1.3

Älter          : Datei2
Gelöscht       : Datei3
 Permalink

Zusammenfassung aus sendmail-Logdatei erstellen

Mit Hilfe von mreport lässt sich eine Zusammenfassung aus einer sendmail-Logdatei generieren. mreport findet man in den FreeBSD Ports unter mail/mreport:

# cd /usr/ports/mail/mreport && make install clean

Ruft man mreport ohne Argumente auf, so wird eine Zusammenfassung von /var/log/maillog erstellt:

# mreport
[mailserver.chruetertee.ch] [/var/log/maillog]
* [ 101] 2547567 mail1@cheutertee.ch empfänger1@example.org
[ 22] 3471 mail1@cheutertee.ch empfänger2@example.org
[ 10] 2452 mail2@cheutertee.ch empfänger1@example.org
[ 4] 1152 mail2@cheutertee.ch empfänger2@example.org

=====================
Total Bytes : 2561966
Number of Records : 137
---------------------
Host Name : mailserver.chruetertee.ch
Input File : /var/log/maillog
Output File : stdout
First Record : Mar 9 10:34:37
Last Record : Mar 14 12:30:07
---------------------
Time Taken : 773 µs
=====================
mreport-0.9 by Jason Armstrong

In der ersten Spalte wird angezeigt, wieviele Mails von diesem Absender an den Empfänger gesendet wurden. Die zweite Spalte zeigt die Gesamtgrösse aller Mails in Byte an, danach wird die Absenderadresse und die Empfängeradresse ausgegeben. Mit der -i Option kann ein alternativer Pfad zur sendmail-Logdatei angegeben werden. Verwendet man die -o Option, wird die Ausgabe in eine Datei geschrieben:

# mreport -i /var/log/maillog.archive -o /tmp/mreport.out

Soll nur eine Zusammenfassung für bestimmte Mailadressen generiert werden, kann mit der -p Option ein Teil der Mail-Adresse angegeben werden. Verwendet man die -l Option, so werden nur Adressen, welche das übergebene Argument im Domainnamen haben, in der Statistik berücksichtigt:

# mreport -l test
[mailserver.chruetertee.ch] [/var/log/maillog]

[ 4] 2452 root@test.chreutertee.ch empfänger1@example.org

=====================
Total Bytes : 2452
Number of Records : 1
---------------------
Host Name : mailserver.chruetertee.ch
Input File : /var/log/maillog
Output File : stdout
First Record : Mar 9 10:34:37
Last Record : Mar 14 12:30:07
---------------------
Time Taken : 694 µs
=====================
mreport-0.9 by Jason Armstrong

Mehr Informationen zu mreport findet man in der Manpage mreport(8).

 Permalink

Verzeichnis überwachen und auf Veränderungen reagieren

Mit Hilfe von wait_on kann zum Beispiel mittels eines Shell-Skripts ein Verzeichnis oder eine Datei überwacht und falls neue Dateien in das Verzeichnis geschrieben werden oder die überwachte Datei geändert wird, darauf reagiert werden. wait_on findet man im FreeBSD Portbaum unter sysutils/wait_on:

# cd /usr/ports/sysutils/wait_on && make install clean

Als Argument kann wait_on zum Beispiel ein Verzeichnis übergeben werden. Danach wartet wait_on, bis in diesem Verzeichnis zum Beispiel eine neue Datei gespeichert oder gelöscht wird. Sobald eine solche Änderung erkannt wird, beendet sich wait_on. Anhand des Rückgabewertes von wait_on kann bestimmt werden, was für eine Änderung im Verzeichnis vorgenommen wurde. Verwendet man die -h Option werden zusätzliche Informationen zur Änderung ausgegeben:

# sleep 10 && touch /tmp/test &
# wait_on -h /tmp/
/tmp/: written
# echo $?
2

Die Bedeutungen aller Rückgabewerte sind in der Manpage von wait_on beschrieben.

Nun kann zum Beispiel ein Shell-Skript erstellt werden, welches auf neue Dateien in einem Verzeichnis reagiert.

#!/bin/sh
SOURCE=/var/upload


while :; do
wait_on $SOURCE
....
<Verarbeitet neue Dateien>
...
done

Mehr Informationen zu wait_on findet man in der Manpage wait_on(1).

 Permalink

Text einer Word-Datei auslesen

Mit Hilfe von antiword kann der Text einer Word-Datei ausgelesen und wenn gewünscht in eine Textdatei geschrieben werden. antiword findet man in den FreeBSD Ports unter textproc/antiword:

# cd /usr/ports/textproc/antiword && make install clean

Der Pfad zur Word-Datei muss als Argument an antiword übergeben werden. Der Text wird dann auf der Standardausgabe ausgegeben. Dieser kann wenn gewünscht in eine Textdatei umgelenkt werden:

# antiword <.doc-Datei> > <Text-Datei>

Wird die -f Option verwendet, werden in der Textausgabe fett geschriebene Textpassagen mit *Sternchen*, kursiver Text durch /Slashes/ und unterstrichener Text mit _Unterstrichen_ gekennzeichnet. Verwendet man die -a Option und gibt das gewünschte Papierformat an, wird ein PDF im entsprechenden Format generiert:

# antiword -a a4 <.doc-Datei> > <PDF-Datei>

Möchte man ein PostScript erstellen, kann die -p Option und das gewünschte Papierformat angegeben werden:

# antiword -p a4 <.doc-Datei> > <PS-Datei>
Mehr Informationen zu antiword findet man in der Manpage antiword(1).
 Permalink
Prev Next61-70/84