BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Coredump analysieren

Benutzer der kommenden FreeBSD Versionen 6.4 und 7.1 können mit Hilfe von crashinfo automatisch einen Coredump nach einem Absturz analysieren. Dazu muss ein coredump in /var/crash vorhanden sein:

# ls /var/crash/
bounds          info.0          minfree         vmcore.0

Sind mehrere Coredumps vorhanden wird der aktuellste Coredump analysiert. Wird crashinfo aufgerufen, werden automatisch Debuggerinformationen und Systeminformationen zur Zeit des Absturzes mit Hilfe von ps, vmstat, pstat, iostat, ipcs, nfsstat, netstat, fstat und dmesg aus dem Coredump ausgelesen und in einer Textdatei gespeichert:

# crashinfo
Writing crash summary to /var/crash/core.txt.0.

Eine Beispielausgabe von crashinfo findet man hier: core.txt.0. Mehr Informationen zu crashinfo findet man in der Manpage crashinfo(8).

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

FreeBSD Portbaum durchsuchen

Mit Hilfe von psearch kann der FreeBSD Portbaum nach einem gesuchten Wort durchsucht werden. Standardmässig wird dabei der Portname und die "Short description" durchsucht. Im Portbaum findet man psearch unter ports-mgmt/psearch:

# cd /usr/ports/ports-mgmt/psearch/ && make install clean

Bei der Suche mit psearch wird die Gross-/Kleinschreibung ignoriert, es kann einfach das gewünschte Wort angegeben werden nach dem der Portsbaum durchsucht werden soll:

# psearch KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
ports-mgmt/portconf       A universal tool to set specific port knobs
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile

Verwendet man die -l Option wird zusätzlich noch die Beschreibung der gefundenen Ports angezeigt:

# psearch -l KNOBS
ports-mgmt/lsknobs        Simple script to help configure ports knobs and options
    lsknobs is a simple sh(1) script designed to help configure
    ports knobs and options by listing them together with their
    status (either enabled or not). It uses portconf for knobs.
    
ports-mgmt/portconf       A universal tool to set specific port knobs
    Portconf is a simple framework to set ports options in an
    universal way. Knobs set to specific ports are honoured
    by portmaster, portupgrade, portmanager and 'make install'.
    
    - Alex Dupre
    ale@FreeBSD.org
    
ports-mgmt/portsopt       Shows WITH(OUT)-knobs of a port makefile
    Shows WITH(OUT)-knobs of a port makefile and if you want also the knobs of
    all port dependencies.
    
    WWW: http://www.chruetertee.ch/portsopt/

Möchte man zusätzlich die ausführlichen Beschreibungen aus pkg-descr durchsuchen, so kann die -s Option verwendet werden. Mit der -c Option kann die zu durchsuchende Kategorie eingeschränkt werden:

# psearch -s -c www linkchecker
www/linkchecker           Check HTML documents for broken links
www/p5-HTTP-SimpleLinkChecker Check the HTTP response code for a link
www/p5-W3C-LinkChecker    Checks the validity of links in an HTML or XHTML document
www/p5-chklinks           A non-threaded Perl link checker

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

 Permalink

Automatisch ZFS Snapshots erstellen

Verwendet man das ZFS Dateisystem, können mit zfs-snapshot-mgmt regelmässig automatisch ZFS Snapshots erstellt werden. Im FreeBSD Portbaum findet man zfs-snapdhot-mgmt unter sysutils/zfs-snapshot-mgmt:

# cd /usr/ports/sysutils/zfs-snapshot-mgmt && make install clean

Nun kann unter /usr/local/etc/zfs-snapshot-mgmt.conf eine Konfiguration erstellt werden, in der festgelegt wird, wann Snapshots erstellt werden sollen, wie lange die verschiedenen Snapshots erhalten bleiben sollen und wann sie dementsprechend automatisch wieder gelöscht werden:

# Automatic ZFS snapshot management configuration file
#
# This is a YAML file (see http://www.yaml.org)
# Use exactly 2 spaces for each indentation level
#
snapshot_prefix: auto-
filesystems:
  tank/home:
    # Create snapshots every 10 minutes, starting at midnight
    creation_rule:
      at_multiple: 10
      offset: 0
    # Keep all snapshots for the first 90 minutes,
    # then only those that were created at 30 minute intervals for 12 hours
    # (after snapshot creation),
    # then only those that were created at 3 hour intervals, counting at 2:00
    # (i.e. 2:00, 5:00, 8:00, 11:00, 14:00, 17:00, 20:00, 23:00)
    # for 7 days
    preservation_rules:
      - { for_minutes:    90, at_multiple:    0, offset:    0 }
      - { for_minutes:   720, at_multiple:   30, offset:    0 }
      - { for_minutes: 10080, at_multiple:  180, offset:  120 }
  tank/ports:
    # Create snapshots every 24 hours, starting at 20:00.
    creation_rule:
      at_multiple: 1440
      offset: 1200
    # Keep daily snapshots created at 20:00 (in this case all).
    preservation_rules:
      - { for_minutes: 5760, at_multiple: 1440, offset: 1200 }

Ist die Konfiguration erstellt, kann der benötigte crontab-Eintrag gemacht werden, so dass die Snapshots automatisch erstellt und gelöscht werden:

# echo "*/5 * * * *       root   /usr/local/bin/zfs-snapshot-mgmt" >> /etc/crontab

Die aktuell vorhandenen Snapshots können mit zfs list angezeigt werden:

# zfs list
NAME                               USED  AVAIL  REFER  MOUNTPOINT
tank                              3,06G  11,6G    18K  /tank
tank/home                          982M  11,6G   770M  /usr/home
tank/home@auto-2008-09-06_10.00   65,3M      -   682M  -
tank/home@auto-2008-09-07_11.00   54,4M      -   682M  -
tank/home@auto-2008-09-07_16.00       0      -   682M  -
tank/home@auto-2008-09-07_21.00       0      -   682M  -
tank/home@auto-2008-09-08_22.00       0      -   682M  -
tank/home@auto-2008-09-09_13.00       0      -   682M  -
tank/home@auto-2008-09-09_18.00       0      -   682M  -
tank/home@auto-2008-09-09_23.00       0      -   682M  -
tank/home@auto-2008-09-10_09.00       0      -   682M  -
tank/home@auto-2008-09-10_14.00       0      -   682M  -
tank/home@auto-2008-09-11_00.00       0      -   682M  -
tank/home@auto-2008-09-11_10.00       0      -   682M  -
tank/home@auto-2008-09-11_15.00     36K      -   682M  -
tank/home@auto-2008-09-12_09.00    286K      -   746M  -
tank/home@auto-2008-09-12_09.30    247K      -   746M  -
tank/home@auto-2008-09-12_10.00     49K      -   763M  -
tank/home@auto-2008-09-12_10.30       0      -   763M  -
tank/home@auto-2008-09-12_11.00       0      -   763M  -
tank/home@auto-2008-09-12_11.30       0      -   763M  -
tank/home@auto-2008-09-12_12.00       0      -   763M  -
tank/home@auto-2008-09-12_12.30       0      -   763M  -
tank/home@auto-2008-09-12_13.00       0      -   763M  -
tank/home@auto-2008-09-12_13.30     29K      -   770M  -
tank/home@auto-2008-09-12_14.00       0      -   770M  -
tank/home@auto-2008-09-12_14.30       0      -   770M  -
tank/home@auto-2008-09-12_14.50       0      -   770M  -
tank/home@auto-2008-09-12_15.00       0      -   770M  -
tank/home@auto-2008-09-12_15.10       0      -   770M  -
tank/home@auto-2008-09-12_15.20       0      -   770M  -
tank/home@auto-2008-09-12_15.30       0      -   770M  -
tank/home@auto-2008-09-12_15.40       0      -   770M  -
tank/home@auto-2008-09-12_15.50       0      -   770M  -
tank/home@auto-2008-09-12_16.00       0      -   770M  -
tank/home@auto-2008-09-12_16.10       0      -   770M  -
tank/obj                          1,62G  11,6G  1,62G  /usr/obj
tank/ports                         800M  11,6G   800M  /usr/ports
tank/ports@auto-2008-09-09_10.00    36K      -   493M  -
tank/src                           493M  11,6G   493M  /usr/src

Mehr Informationen findet man in der Manpage zfs-snapshot-mgmt(8). Eine Einführung in das Arbeiten mit ZFS und ZFS Snapshots findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
ZFS Dateisystemoptionen verwenden
Comments (2)  Permalink

SSH Schlüssel mit ssh-agent verwalten

Mit Hilfe eines Public Keys kann man sich ohne eine Passworteingabe an einem Rechner anmelden. Trotzdem sollte der Schlüssel selbst mit einem Passwort versehen werden, so dass bei jeder SSH Verbindung ein Passwort eingegeben werden muss. Mit Hilfe von ssh-agent kann der Schlüssel gespeichert werden, so dass das Passwort nur einmal eingegeben werden muss. Dazu muss zuerst eine Shell mit ssh-agent gestartet werden, in welcher die Schlüssel ohne Passwort verwendet werden können:

# ssh-agent tcsh

Danach können die Schlüssel mit Hilfe von ssh-add hinzugefügt werden. ssh-add sucht dabei nach vorhandenen Schlüsseln und fragt nach den Schlüsselpasswort:

#  ssh-add 
Enter passphrase for /home/beat/.ssh/id_rsa: 
Identity added: /home/beat/.ssh/id_rsa (/home/beat/.ssh/id_rsa)

Nun kann man sich ohne weitere Passworteingabe an einem Rechner anmelden:

# ssh <Benutzer>@<Rechner>

Mit Hilfe der -l Option können alle gespeicherten Schlüssel angezeigt werden:

# ssh-add -l
2048 4d:3a:53:64:46:69:51:61:4b:62:93:66:77:ff:42:88 /home/beat/.ssh/id_rsa (RSA)

Ruft man ssh-add mit der -x Option auf, wird man nach einem Passwort gefragt und der ssh-agent wird gesperrt:

# ssh-add -x
Enter lock password: 
Again: 
Agent locked.

Ist der Agent gesperrt und man versucht sich wieder mit SSH zu verbinden, wird man wieder nach dem Passwort gefragt:

# ssh <Benutzer>@<Rechner>
Enter passphrase for key '/home/beat/.ssh/id_rsa':

Mit Hilfe der -X Option kann der Agent wieder entsperrt werden:

# ssh-add -X
Enter lock password: 
Agent unlocked.

Verwendet man den Schlüssel nicht mehr, so kann der ssh-agent mit Hilfe der -k Option beendet werden:

# ssh-agent -k
unsetenv SSH_AUTH_SOCK;
unsetenv SSH_AGENT_PID;
echo Agent pid 7747 killed;

Sowohl auf FreeBSD als auch auf OpenBSD ist ssh-agent und ssh-add im Basissystem vorhanden. Mehr Informationen findet man in den Manpages ssh-agent(1) und ssh-add(1).

Comments (2)  Permalink

Pakete mit Abhängigkeiten herunterladen

Mit Hilfe von pkg_fetch können FreeBSD Pakete heruntergeladen werden, ohne dass die Pakete installiert werden. pkg_fetch wird als Teil von portupgrade installiert, welches man im Portsbaum unter ports-mgmt/portupgrade findet:

# cd /usr/ports/ports-mgmt/portupgrade make install clean

Nun kann das gewünschte Paket heruntergeladen werden:

# pkg_fetch newsbeuter
--->  Fetching newsbeuter-1.0
/var/tmp/portupgradehUUJ0aUL/newsbeuter-1.0.tb 100% of 2025 kB   10 MBps
--->  Downloaded as newsbeuter-1.0.tbz
--->  Identifying the package /var/tmp/portupgradehUUJ0aUL/newsbeuter-1.0.tbz
--->  Saved as /usr/ports/packages/All/newsbeuter-1.0.tbz

Sollen alle weiteren Pakete, von welchen das Paket abhängig ist, heruntergeladen werden, so kann die -R Option verwendet werden:

# pkg_fetch -R <Paket>

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

 Permalink

ZFS Dateisystemoptionen verwenden

Mit UFS können auf FreeBSD verschiedene Mount-Optionen angegeben werden, mit welchen eine Partition gemountet werden kann. So kann das Schreiben der Zugriffszeit mit noatime, das Ausführen von Programmen mit noexec und das Verwenden des setuid-Bit mit der nosuid Option verhindert werden:

# mount -o noatime,noexec,nosuid /dev/da0s1d /tmp

Diese Optionen können auch mit ZFS gesetzt werden. Dazu muss zuerst ein ZFS Dateisystem vorhanden sein:

# zfs create tank/beat
# zfs set mountpoint=/home/beat tank/beat

Bei jeder Datei wird die Zeit des letzten Zugriffs festgehalten. Werden diese Daten nicht benötigt, kann dies deaktiviert werden, was unter anderem auf Dateisystemen mit viel Dateizugriffen die Performance verbessern kann:

# cd /home/beat
# echo test > datei
# stat -f "access: %Sa" datei
access: Aug 26 19:44:07 2008
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008
# zfs set atime=off tank/beat
# cat datei
test
# stat -f "access: %Sa" datei
access: Aug 26 19:44:20 2008

Auch kann verhindert werden, dass innnerhalb eines ZFS Dateisystemes Programme ausgeführt werden:

# cp -p /sbin/ping /home/beat/
# ./ping -c 1 localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.080 ms

--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.080/0.080/0.080/0.000 ms
# zfs set exec=off tank/beat
# ./ping -c 1 localhost
./ping: Permission denied.

Zusätzlich lässt sich auch das setuid-Bit innerhalb eines ZFS Dateisystemes deaktivieren:

# cp -p /usr/bin/passwd /home/beat
# su - beat
$ ./passwd
Changing local password for beat
Old Password:
New Password:
Retype New Password:
$ exit
# zfs set setuid=off tank/beat 
# su - beat
$ ./passwd
Old Password:
passwd: sorry

Mehr Informationen zu ZFS findet man in der Manpage zfs(8). Eine kleine Einführung in ZFS auf FreeBSD findet man hier: http://www.chruetertee.ch/blog/archive/2007/05/26/zfs-auf-freebsd.html

Related Entries:
ZFS-Statistiken anzeigen
ZFS-Installation mit Hilfe von mfsBSD
FreeBSD nur auf ZFS installieren
Alle Änderungen eines ZFS-Pools anzeigen
Automatisch ZFS Snapshots erstellen
Comments (1)  Permalink

FreeBSD Installations-CDs erstellen

Mit Hilfe des FreeBSD -Quellcodes lassen sich einfach FreeBSD-Installations-CDs erstellen. So kann man zum Beispiel eine Installations-CD von einem aktuellen CURRENT-Stand erzeugen. Zuerst muss ein release-Verzeichnis erstellt werden, in welche alle zur Erstellung der CDs benötigten Daten geschrieben werden. Hat man die FreeBSD-Quelldateien nicht mit CVS aktualisiert, muss auch noch ein CVS-Verzeichnis erstellt werden, welches aber leer bleibt:

# mkdir /home/beat/cvs /home/beat/release

Nun muss die Welt in /usr/src gebaut werden:

# cd /usr/src
# make buildworld

Nun können aus dem Quellcode die Installationsdateien mit make release in /usr/src/release erstellt werden. Folgende Variable müssen dabei zwingend angegeben werden:

  • CHROOTDIR: Das Verzeichnis, in welchem die Daten installiert werden
  • CVSROOT: Das Verzeichnis, in welchem die mit CVS aktualisieren Quelldateien liegen (kann auch leer sein)

Folgende Variablen können unter anderem noch zusätzlich gesetzt werden:

  • BUILDNAME: Name des Buildes, wird unter anderem auch für den Namen der ISO-Images verwedent
  • EXTSRCDIR: Werden die Quelldateien nicht mit CVS aktualisiert, kann hier ein Verzeichnis angegeben werden, in welchem die Quelldateien vorhanden sind.
  • NO_FLOPPIES: Floppy-Images werden nicht gebaut
  • NODOC: Die FreeBSD-Dokumentation wird nicht gebaut
  • NOPORTS: Es werden keine Ports gebaut und auf die CDs kopiert
  • MAKE_ISOS: Die Installations-CDs werden erstellt
# cd /usr/src/release
# make CHROOTDIR=/home/beat/release CVSROOT=/home/beat/cvs BUILDNAME=CURRENT-SNAP EXTSRCDIR=/usr/src NO_FLOPPIES=YES NODOC=YES NOPORTS=YES MAKE_ISOS=YES release
[...]
Generating MD5 and SHA256 sums...
touch iso.1
Release done
+ LC_ALL=C TZ=GMT date
+ echo >>> make release for i386 finished on Tue Aug 26 00:27:20 GMT 2008
>>> make release for i386 finished on Tue Aug 26 00:27:20 GMT 2008

Danach sind die ISO-Images im release-Verzeichnis unter R/cdrom/ verfügbar.

# ls -l /home/beat/release/R/cdrom/
total 514718
-rw-r--r--   1 root  wheel   35227648 26 Aug 02:26 CURRENT-SNAP-i386-bootonly.iso
-rw-r--r--   1 root  wheel  266092544 26 Aug 02:26 CURRENT-SNAP-i386-disc1.iso
-rw-r--r--   1 root  wheel     372736 26 Aug 02:26 CURRENT-SNAP-i386-disc2.iso
-rw-r--r--   1 root  wheel     372736 26 Aug 02:26 CURRENT-SNAP-i386-disc3.iso
-rw-r--r--   1 root  wheel        349 26 Aug 02:27 CURRENT-SNAP-i386-iso.CHECKSUM.MD5
-rw-r--r--   1 root  wheel        524 26 Aug 02:27 CURRENT-SNAP-i386-iso.CHECKSUM.SHA256
-rw-r--r--   1 root  wheel  224604160 26 Aug 02:26 CURRENT-SNAP-i386-livefs.iso
drwxr-xr-x   3 root  wheel        512 26 Aug 02:26 bootonly/
drwxr-xr-x   4 root  wheel        512 26 Aug 02:26 disc1/
drwxr-xr-x   2 root  wheel        512 26 Aug 02:26 disc2/
drwxr-xr-x   2 root  wheel        512 26 Aug 02:26 disc3/
drwxr-xr-x  17 root  wheel        512 26 Aug 02:26 livefs

Mehr Informationen zu make release und allen vorhanden Variablen findet man in der Manpage release(7).

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

master.passwd mit vipw bearbeiten

Möchte man die /etc/master.passwd manuell bearbeiten, so empfiehlt es sich, dazu vipw zu verwenden. Startet man vipw, wird zuerst die /etc/master.passwd gesperrt. Wird nun vipw parallel nochmals gestartet, so wird ein Fehler ausgegeben:

# vipw 
vipw: the password db file is busy

Ist die master.passwd nicht gesperrt, wird ein Editor gestartet, womit die master.passwd bearbeitet werden kann. Beim Speichern der Datei wird sie auf syntaktische Fehler überprüft:

pwd_mkdb: corrupted entry
pwd_mkdb: at line #34
pwd_mkdb: /etc/pw.nK2GGB: Inappropriate file type or format
re-edit the password file? y

Werden keine Fehler gefunden, wird die Datei abgespeichert, die /etc/passwd generiert und die spwd.db und pwd.db mit Hilfe von pwd_mkdb automatisch erstellt.

Auf FreeBSD ist vipw bereits im Basissystem vorhanden. Mehr Informationen zu vipw findet man in der Manpage vipw(8).

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

Gestartete Prozesse aufzeichnen

Auf FreeBSD können aus Sicherheitsgründen oder zur Kontrolle der Benutzer alle gestarteten Prozesse aufgezeichnet werden. Dazu muss zuerst die entsprechende Logdatei angelegt werden.

# touch /var/account/acct

Nun kann das Aufzeichnen mit Hilfe von accton gestartet werden:

# accton /var/account/acct

Soll das Aufzeichnen bei einem Neustart des Systems automatisch wieder gestartet werden, muss ein entsprechender Eintrag in der /etc/rc.conf gemacht werden:

# echo 'accounting_enable="YES"' >> /etc/rc.conf

Nun können die auf dem System ausgeführten Prozesse mit Hilfe von lastcomm ausgelesen werden. Dabei werden die gebrauchte CPU-Zeit und der Zeitpunkt, an dem der Prozess gestartet wurde, angezeigt:

# lastcomm | head
cron             -F      root             __        0.001 secs Sat Aug 16 14:03
sh               -       beat             __        0.004 secs Sat Aug 16 14:03
sh               -       beat             __        0.007 secs Sat Aug 16 14:03
fetch            -       beat             __        0.008 secs Sat Aug 16 14:03
sh               -       beat             __        0.005 secs Sat Aug 16 14:03
rm               -       beat             __        0.001 secs Sat Aug 16 14:03
sh               -F      beat             __        0.001 secs Sat Aug 16 14:03
awk              -       beat             __        0.002 secs Sat Aug 16 14:03
sh               -F      beat             __        0.000 secs Sat Aug 16 14:03
date             -       beat             __        0.002 secs Sat Aug 16 14:03

Nun kann mit lastcomm auch abgefragt werden, welcher Prozess wann gestartet wurde. Die -S Option zeigt die Startzeit des Prozesses an, die -E Option die Zeit, zu welcher der Prozess beendet wurde:

# lastcomm -SE mysqlcheck
mysqlcheck       -       root             __       Sat Aug 16 04:59 Sat Aug 16 05:03
mysqlcheck       -       root             __       Sat Aug 16 04:27 Sat Aug 16 04:59

Auch können die gestarteten Prozesse eines Benutzers ausgelesen werden:

#  lastcomm beat | head
sh               -       beat             __        0.004 secs Sat Aug 16 14:18
sh               -       beat             __        0.007 secs Sat Aug 16 14:18
fetch            -       beat             __        0.008 secs Sat Aug 16 14:18
sh               -       beat             __        0.005 secs Sat Aug 16 14:18
rm               -       beat             __        0.001 secs Sat Aug 16 14:18
sh               -F      beat             __        0.001 secs Sat Aug 16 14:18
awk              -       beat             __        0.002 secs Sat Aug 16 14:18
sh               -F      beat             __        0.000 secs Sat Aug 16 14:18
date             -       beat             __        0.002 secs Sat Aug 16 14:18
sh               -F      beat             __        0.001 secs Sat Aug 16 14:18

Möchte man in Echtzeit anschauen, welche Prozesse ausgeführt werden, so kann folgender Befehl verwendet werden:

#  tail -f -c 0 /var/account/acct | lastcomm -f -
pt_chown         -       root             __        0.002 secs Sat Aug 16 14:10
csh              -F      beat             ttyp2     0.001 secs Sat Aug 16 14:10
[                -       beat             ttyp2     0.002 secs Sat Aug 16 14:10
sleep            -       root             __        0.001 secs Sat Aug 16 14:08
id               -       root             __        0.002 secs Sat Aug 16 14:10
sh               -F      root             __        0.000 secs Sat Aug 16 14:10
sed              -       root             __        0.002 secs Sat Aug 16 14:10
sh               -F      root             __        0.001 secs Sat Aug 16 14:10
dirname          -       root             __        0.001 secs Sat Aug 16 14:10
realpath         -       root             __        0.002 secs Sat Aug 16 14:10
perl5.8.8        -       root             __        0.197 secs Sat Aug 16 14:10
sh               -       root             __        0.012 secs Sat Aug 16 14:10
sh               -F      root             __        0.001 secs Sat Aug 16 14:10
head             -       root             __        0.002 secs Sat Aug 16 14:10
[...]

Mit Hilfe von sa können nun Statistiken aus den gesammelten Daten erstellt werden. Mit Hilfe der -m Option kann eine Statistik pro Systembenutzer erstellt werden. In der ersten Spalte wird der Benutzername, in der zweiten die Anzahl aufgerufener Befehle, in der dritten Spalte die verbrauchte CPU Zeit in Minuten und in der vierten Spalte die Anzahl I/O Operationen angezeigt. Die letzte Spalte zeigt das "CPU storage Integral" an.

Die Informationen aus /var/account/acct werden regelmässig zusammengefasst und in zwei Dateien namens /var/account/savacct und /var/account/usracct geschrieben. Sollen diese Zusammenfassungen von sa nicht konsultiert werden, kann die -i Option verwendet werden:

# sa -m
root                355295 2469616839080897.00cpu 4680095707762672640tio4716451977516570624k*sec
operator              1320 2444245624632115.00cpu 4619567317775286272tio4673811998809535488k*sec
sshd                    24 2438677375134378.50cpu            0tio4657441095305658368k*sec
smmsp                   46 2433793290438792.50cpu 4621256167635550208tio4663265208397997056k*sec
beat                 55809 2457577981511816.50cpu 4624633867356078080tio4700035557291664384k*sec
guest                  195 2446241946682436.50cpu 4638496509959077888tio4669250949699600384k*sec
nobody                 384         1.32cpu       183408tio       23944k*sec
# sa -mi
root                 26203         8.28cpu       414130tio     1569806k*sec
operator               840         0.05cpu           10tio       53464k*sec
sshd                     6         0.00cpu            0tio         850k*sec
smmsp                   31         0.00cpu           61tio        9326k*sec
beat                 35755         2.30cpu          225tio     2961561k*sec
nobody                 384         1.32cpu       183408tio       23944k*sec

Ruft man sa ohne Optionen auf, werden die Statistiken pro Befehl angezeigt.:

#  sa | head
    6734      10.511re       10.46cp        0avio     6866k   cc1
    1992       7.495re        6.51cp        0avio     2122k   perl5.8.8
    1017       9.142re        4.22cp       16avio     1148k   bsdtar
   46443     484.530re        3.28cp        0avio    14967k   sh
     170      19.333re        3.10cp     3459avio       41k   find
  157832     176.759re        2.12cp        0avio    42037k   sh*
   48233      15.835re        2.03cp        0avio    26532k   sed
      26       2.005re        2.00cp        1avio       44k   perl
     608       2.390re        1.75cp       19avio      760k   mtree

Die erste Spalte zeigt an, wie oft der Befehl ausgeführt wurde, die zweite die Laufzeit in Minuten, die dritte Spalte die totale CPU Zeit in Minuten, die vierte Spalte die durchschnittliche Anzahl I/O Operationen. Möchte man die Liste nach der durchschnittlichen Anzahl I/O Operationen sortiert haben, kann die -d Option verwendet werden. Soll nach totalen CPU-Zeit sortiert werden, verwendet man die -k Option.

Mehr Informationen findet man in den Manpages accton(8), lastcomm(1) und sa(8).

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

Textdateien zeilenweise verbinden

Möchte man mehrere Textdateien miteinander zeilenweise verbinden, kann man dazu paste verwenden. Im folgenden Beispiel werden zwei Dateien mit je drei Zeilen verbunden:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
# cat datei2
Zeile 2.1
Zeile 2.2
Zeile 2.3
# paste datei1 datei2
Zeile 1.1 Zeile 2.1
Zeile 1.2 Zeile 2.2
Zeile 1.3 Zeile 2.3

Auch kann die Ausgabe eines Befehls mit paste spaltenweise dargestellt werden. Folgendes Beispiel zeigt die Ausgabe von ls in drei Spalten an:

# ls
datei0  datei1  datei2  datei3  datei4  datei5  datei6  datei7  datei8  datei9
# ls | paste - - -
datei0  datei1  datei2
datei3  datei4  datei5
datei6  datei7  datei8
datei9

Mit der -s Option können alle Zeilenumbrüche in einer Datei in Tabulatoren umgewandelt werden:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
# paste -s datei1
Zeile 1.1  Zeile 1.2  Zeile 1.3

Verwendet man die -d Option, kann angegeben werden, wie die Zeilenumbrüche ersetzt werden sollen. Im folgenden Beispiel wird der erste Zeilenumbruch in einen Tabulator, der zweite in einen Zeilenumbruch umgewandelt:

# cat datei1
Zeile 1.1
Zeile 1.2
Zeile 1.3
Zeile 1.4
Zeile 1.5
Zeile 1.6
Zeile 1.7
Zeile 1.8
Zeile 1.9
Zeile 1.0
# paste -s -d '\t\n' datei1
Zeile 1.1       Zeile 1.2
Zeile 1.3       Zeile 1.4
Zeile 1.5       Zeile 1.6
Zeile 1.7       Zeile 1.8
Zeile 1.9       Zeile 1.0

Sowohl auf FreeBSD als auch auf OpenBSD ist paste im Basissystem vorhanden. Mehr Informationen zu paste findet man in der Manpage paste(1).

 Permalink
Prev Next251-260/521