BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Informationen zu einer FreeBSD-Installation auslesen

Mit Hilfe von sysinfo können Informationen zu einem FreeBSD-System ausgelesen werden. Im FreeBSD Portbaum findet man sysinfo unter sysutils/sysinfo:

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

Führt man sysinfo mit der -a Option aus, werden verschiedene Informationen zum Rechner und der FreeBSD-Installation angezeigt:

# sysinfo -a

Sollen zusätzliche Informationen angezeigt werden, kann die Option -v 1 verwendet werden:

# sysinfo -a -v 1

Soll die Ausgabe nicht farbig dargestellt werden, kann -c verwendet werden. So lässt sich die Ausgabe auch ohne Probleme in eine Textdatei umleiten:

# sysinfo -a -c -v 1 > /tmp/sysinfo

Das Verhalten von sysinfo lässt sich auch in der Datei /usr/local/etc/sysinfo.conf konfigurieren. Eine Beispielausgabe von sysinfo findet man hier.

 Permalink

Verfügbarkeit eines TCP-Ports testen

Möchte man zum Beispiel in einem Shell-Skript die Verfügbarkeit eines TCP-Ports prüfen, so kann dazu tcping verwendet werden, welches man im FreeBSD Portbaum unter net/tcping findet:

# cd /usr/ports/net/tcping && make install clean

Nun können die IP-Adresse und der TCP-Port angegeben werden, zu welchen eine Verbindung aufgebaut werden soll. Kann die Verbindung erfolgreich hergestellt werden, wird der Rückgabewert 0 zurückgegeben:

# tcping 217.150.245.53 80
217.150.245.53 port 80 open.
# echo $?
0

Wird die Verbindung zurückgewiesen, wird der Rückgabewert 1 zurückgegeben:

# tcping 127.0.0.1 81
127.0.0.1 port 81 closed.
# echo $?
1

Wird der Verbindungsversuch nicht zurückgewiesen, jedoch die Pakete von z.B. einem Paketfilter verworfen, so kann die Verbindung nicht aufgebaut werden. Bei solch einer Zeitüberschreitung des Verbindungsversuchs wird der Rückgabewert 2 zurückgegeben. Mit der -t Option kann die Anzahl Sekunden angegeben werden, ab wann eine Zeitüberschreitung angegeben wird:

# tcping -t 2 217.150.245.53 81
217.150.245.53 port 81 user timeout.
# echo $?
2
Comments (1)  Permalink

Verschlüsselte Backups erzeugen

Mit Hilfe von duplicity lassen sich durch GnuPG verschlüsselte inkrementelle Backups erzeugen, welche sich nach dem Erzeugen auf einen anderen Rechner kopieren lassen. Im FreeBSD Portbaum findet man duplicity unter sysutils/duplicity:

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

Im folgenden Beispiel wird /home in den Ordner backup gesichert. Ist noch kein Backup in diesem Ordner vorhanden, wird ein vollständiges Backup erstellt. Als erstes muss ein Passwort gewählt werden, welches für die Verschlüsselung des Backups verwendet wird:

# duplicity /home/ file://backup
Last full backup date: none
GnuPG passphrase:
No signatures found, switching to full backup.
Retype passphrase to confirm:
--------------[ Backup Statistics ]--------------
StartTime 1240000061.53 (Fri Apr 17 22:27:41 2009)
EndTime 1240000065.80 (Fri Apr 17 22:27:45 2009)
ElapsedTime 4.27 (4.27 seconds)
SourceFiles 0
SourceFileSize 23232967 (22.2 MB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 0
RawDeltaSize 23158201 (22.1 MB)
TotalDestinationSizeChange 13929125 (13.3 MB)
Errors 0

Wird das Backup nochmals ausgeführt, werden nur noch die Änderungen gesichert:

# duplicity /home/ file://backup
Last full backup date: Fri Apr 17 22:27:37 2009
GnuPG passphrase:
--------------[ Backup Statistics ]--------------
StartTime 1240000195.98 (Fri Apr 17 22:29:55 2009)
EndTime 1240000200.50 (Fri Apr 17 22:30:00 2009)
ElapsedTime 4.53 (4.53 seconds)
SourceFiles 884
SourceFileSize 28935728 (27.6 MB)
NewFiles 0
NewFileSize 0 (0 bytes)
DeletedFiles 0
ChangedFiles 0
ChangedFileSize 0 (0 bytes)
ChangedDeltaSize 0 (0 bytes)
DeltaEntries 0
RawDeltaSize 4983670 (4.75 MB)
TotalDestinationSizeChange 1738528 (1.66 MB)
Errors 0

Möchte man das Backup gleich per scp auf einen anderen Rechner kopieren, so kann dies wie folgt angegeben werden:

# duplicity /home scp://<Benutzer>@<Rechner>/<Verzeichnis>

Möchte man überprüfen, welche Backups vorhanden sind, kann dazu die collection-status Option von duplicity verwendet werden:

# duplicity collection-status file://backup
Last full backup date: Fri Apr 17 22:27:37 2009
Collection Status
-----------------
Connecting with backend: LocalBackend
Archive dir: None
 
Found 0 backup chains without signatures.
 
Found a complete backup chain with matching signature chain:
-------------------------
Chain start time: Fri Apr 17 22:27:37 2009
Chain end time: Fri Apr 17 22:29:53 2009
Number of contained backup sets: 2
Total number of contained volumes: 2
 Type of backup set:                            Time:      Num volumes:
                Full         Fri Apr 17 22:27:37 2009                 1
         Incremental         Fri Apr 17 22:29:53 2009                 1
-------------------------
No orphaned or incomplete backup sets found.

Mit list-current-files werden alle Dateien, welche im Backup vorhanden sind, aufgelistet:

#  duplicity list-current-files file://backup
Last full backup date: Fri Apr 17 22:27:37 2009
GnuPG passphrase:
Fri Apr 17 22:29:38 2009 .
[..]

Durch verify kann der Inhalt des Backups mir dem Quellordner verglichen werden:

# duplicity verify file://backup /home
Last full backup date: Fri Apr 17 22:27:37 2009
GnuPG passphrase:
Difference found: File . has mtime Fri Apr 17 22:35:34 2009, expected Fri Apr 17 22:29:38 2009
Error accessing possibly locked file /home/test/.qt/.qt_plugins_3.3rc.lock
Difference found: File test is missing
Difference found: File test/bla is missing
[...]

Mit der Zeit können ältere Backups entfernt werden, dazu kann ein Datum mit remove-older-than angegeben werden und alle ältere Backups werden gelöscht:

# duplicity remove-older-than 2009-04-18 file://backup

Soll der Inhalt des Backups wiederhergestellt werden, so kann dies wie folgt gemacht werden:

# duplicity file://backup /tmp/restore
Last full backup date: Fri Apr 17 22:27:37 2009
GnuPG passphrase: 
[...]

Mehr Informationen und alle Optionen von duplicity findet man in der Manpage duplicity(1).

Comments (1)  Permalink

Leerzeichen in Tablulatoren umwandeln

Mit Hilfe von unexpand lassen sich mehrere Leerzeichen in einen Tablulator umwandeln, mit expand werden Tabulatoren in Leerzeichen zurückgewandelt. Im folgenden Beispiel wird eine Textdatei verwendet die mehrere Spalten enthält, welche jeweils durch acht Leerzeichen voneinander getrennt werden:

# cat -t /tmp/test
        1
        1        2
        1        2        3

Durch die Verwendung von unexpand werden nun die acht Leerzeichen am Anfang jeder Zeile durch einen Tabulator ersetzt:

# unexpand /tmp/test | cat -t
^I1
^I1        2
^I1        2        3

Verwendet man die -a Option, werden alle möglichen Leerzeichen-Gruppen in Tabulatoren umgewandelt:

# unexpand -a /tmp/test | cat -t
^I1
^I1^I2
^I1^I2^I3

Mit der -t Optionen werden die Anzahl Leerzeichen angegeben, die zu einem Tabulator zusammengefasst werden.

# unexpand -a -t 4 /tmp/test | cat -t
^I^I1
^I^I1^I^I2
^I^I1^I^I2^I^I3

Mit Hilfe von expand werden Tabulatoren in je acht Leerzeichen zurückgewandelt.

# unexpand -a /tmp/test | expand | cat -t 
        1
        1        2
        1        2        3 

Im FreeBSD und OpenBSD Basissystem ist expand/unexpand bereits vorhanden. Mehr Informationen findet man in der Manpage expand(1).

 Permalink

tail -f auf mehreren Dateien gleichzeitig anwenden

Möchte man auf verschiedenen Dateien gleichzeitig ein tail -f anwenden, so kann man dazu xtail verwenden. Im FreeBSD Portbaum findet man xtail unter misc/xtail:

# cd /usr/ports/misc/xtail && make install

Im folgenden Beispiel werden alle Dateien unter /var/log beobachtet. Drückt man Ctrl + c, werden die Dateien angezeigt, welche als letztes geändert wurden. Um xtail zu beenden drückt man Ctrl + \:

# xtail /var/log/*

*** /var/log/debug.log ***
Apr  4 21:06:04 test last message repeated 2 times
Apr  4 21:06:19 test xterm: NSSWITCH(_nsdispatch): nis, group_compat, endgrent, not found, and no fallback provided

*** /var/log/wtmp ***
pts/2beat:0.0«¯×I
*** /var/log/debug.log ***
Apr  4 21:06:24 test -sh: NSSWITCH(_nsdispatch): nis, passwd_compat, endpwent, not found, and no fallback provided

*** /var/log/maillog ***
Apr  4 21:06:31 test sSMTP[3463]: Creating SSL connection to host
Apr  4 21:06:31 test sSMTP[3463]: SSL connection using DHE-DSS-AES256-SHA
Apr  4 21:06:31 test sSMTP[3463]: Sent mail for beat AT chruetertee.ch (221 2.0.0 mailserver.chruetertee.ch closing connection)

*** /var/log/messages ***
Apr  4 21:06:39 test beat: test
^C
*** recently changed files ***
   1   4-Apr-09 21:06:39  /var/log/messages
   2   4-Apr-09 21:06:31  /var/log/maillog
   3   4-Apr-09 21:06:25  /var/log/debug.log
   4   4-Apr-09 21:06:19  /var/log/wtmp
   5   4-Apr-09 21:05:28  /var/log/cron
   6   4-Apr-09 21:00:00  /var/log/sendmail.st
   7   4-Apr-09 20:40:02  /var/log/auth.log
   8   4-Apr-09 20:30:10  /var/log/ConsoleKit/history
currently watching:  66 files  2 dirs  0 unknown entries
^\

Mehr Informationen zu xtail findet man in der Manpage xtail(1). Sollten mehr Einsatzmöglichkeiten benötigt werden, kann multitail verwendet werden.

 Permalink

RSS-Feed der zuletzt gebauten Ports einer Tinderbox

Seit der Tinderbox Version 3.1 können die zuletzt gebauten Ports auch als RSS-Feeds aboniert werden. Dazu kann folgende URL mit einem RSS-Reader aufgerufen werden. Ab sofort werden dann alle gebauten Ports und deren Status im RSS-Reader angezeigt: http://<Tinderbox URL>/tb/index.php?action=latest_buildports_rss

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
Port-Optionen in der Tinderbox verwenden
 Permalink

Port-Optionen in der Tinderbox verwenden

Möchte man Optionen für Ports verwenden, so können diese entweder global, per Jail, per Portbaum oder per Build gesetzt werden. Dazu können die Optionen unter /usr/local/tinderbox/scrips/etc/env in die entsprechende Datei geschrieben werden. Für globale Optionen verwendet man die Datei GLOBAL. Für Optionen per Jail verwendet man die Datei jail.<Jailname>, für Optionen per Portbaum die Datei portstree.<Portsbaumname> oder für Optionen per Build die Datei build.<buildname>:

# cd /usr/local/tinderbox/scripts/etc/env && cat build.6-FreeBSD-NO
export NOPORTDOCS=yes
export NOPORTEXAMPLES=yes
export NOPORTDATA=yes

Nun werden die Ports mit den entsprechenden Optionen gebaut. Besitzt der zu bauende Port ein OPTIONS-Menü, so können diese Optionen aus dem Menü pro Port gesetzt werden. Dazu muss zuerst ein entsprechendes Verzeichnis pro Build erstellt werden:

# mkdir -p /usr/local/tinderbox/options/<Buildnamen>

Nun kann eine Datei mit den Portoptionen unter /usr/local/tinderbox/options/<Build>/<Port>/options erstellt werden:

# cat /usr/local/tinderbox/options/6-FreeBSD/swaks/options
_OPTIONS_READ=swaks-20061116.0
WITH_PERL_NET_DNS=true
WITH_PERL_NET_SSLEAY=true
WITH_PERL_AUTHEN_NTLM=true

Nun müssen die Optionen noch aktiviert werden. Dies muss allerdings nur das erste Mal gemacht werden. Danach werden die Ports automatisch mit den konfigurierten Optionen gebaut.

# cd /usr/local/tinderbox/scripts && ./tc configOptions -e
# ./tc configOptions -o /options

Mehr Informationen zur Tinderbox findet man auf der Homepage http://tinderbox.marcuscom.com/.

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
RSS-Feed der zuletzt gebauten Ports einer Tinderbox
 Permalink

Ports testen und Pakete erstellen mit einer Tinderbox Version 3.2

Mit einer Tinderbox können FreeBSD Ports getestet und Pakete aus den Ports erstellt werden. Möchte man Ports für FreeBSD-7.1, FreeBSD 7-STABLE oder FreeBSD 8-CURRENT testen, muss man auch eine solche Version installiert haben, da sich Aufgrund von ABI Änderungen, diese Versionen nicht mit FreeBSD-6.x testen lassen. Die Tinderbox Version 3.2 findet man in den aktuellen FreeBSD Ports unter ports-mgmt/tinderbox.:

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

Im Konfigurationsmenü kann danach ausgewählt werden, was für eine Datenbank und was für ein Webserver verwendet wird und ob cvsup oder csup zum Aktualisieren der Quelldateien verwendet werden soll. Im folgenden Beispiel wird mySQL als Datenbank und ein Apache Webserver verwendet.

[ ] PGSQL           With pgsql
[X] MYSQL           With mysql
[X] CSUP            Use csup for updates
[ ] CVSUP           Use cvsup for updates
[X] WEBUI           Install web interface
[X] APACHE          Use Apache for web interface
[ ] LIGHTTPD        Use LightHTTPD for web interface
[X] CHECK_FOR_ROOT  Check it ./tc is run by uid 0 

Ist noch kein Datenbank-Server installiert, muss dieser auch noch installiert werden:

# cd /usr/ports/databases/mysql50-server && make install clean

Nun kann die Webserverkonfiguration den eigenen Wünschen angepasst werden:

# vi /usr/local/etc/apache/httpd.conf

Sollen die Datenbank und der Webserver bei einem Systemstart automatisch gestartet werden, müssen die benötigten Einträge in /etc/rc.conf gemacht werden:

mysql_enable="YES"
apache_enable="YES"

Nun können mySQL und der Apache gestartet werden:

# /usr/local/etc/rc.d/apache.sh start
# /usr/local/etc/rc.d/mysql-server start

Danach kann mit der Konfiguration der Tinderbox begonnen werden:

# cd /usr/local/tinderbox/scripts && ./tc Setup

Dabei müssen verschieden Angaben gemacht werden:

Welcome to the Tinderbox Setup script.  This script will guide you through
some of the automated Tinderbox setup steps.  Once this script completes ,
you should review the documentation in /usr/local/tinderbox/scripts/README
or on the web at http://tinderbox.marcuscom.com/ to complete your setup.

Hit <ENTER> to get started: <Enter>
INFO: Checking prerequisites ...
DONE.

INFO: Creating default configuration files ...
DONE.

INFO: Beginning database configuration.
Enter database driver (mysql pgsql): mysql
Does this host have access to connect to the Tinderbox database as a database administrator? (y/N)y
Enter database admin user [root]:<Benutzer>
Enter database host [localhost]:<DB Server>
Enter database name [tinderbox]:<Datenbankname>

Are these settings corrrect:
    Database Administrative User : root
    Database Host                : localhost
    Database Name                : tinderbox
(y/N)y
Do you want to cache root's password, and pass it to subsequent database command calls (note: this presents a security risk) (y/N) ?y
Enter root's password : <Passwort>
Confirm password for root : <Passwort>
INFO: Checking for prerequisites for mysql database driver ...
DONE.

Enter the desired username for the Tinderbox database : <Benutzername>
Enter the desired password for tinderbox : <Passwort>
Confirm password for tinderbox : <Passwort>
Are these the settings you want:
    Database username      : tinderbox
    Database user password : ****
(y/N) y
INFO: Checking to see if database tinderbox already exists on localhost ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort> INFO: Database tinderbox does not exist.  Creating tinderbox on localhost
...
INFO: Creating user tinderbox on host localhost (if required) ...
DONE.

The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
INFO: Loading Tinderbox schema into tinderbox ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
INFO: Adding permissions to tinderbox for tinderbox ...
The next prompt will be for root's password to the tinderbox database.
Enter password: <Passwort>
DONE.

INFO: Database configuration complete.

Congratulations!  The scripted portion of Tinderbox has completed successfully.
You should now verify the settings in /usr/local/tinderbox/scripts/tinderbox.ph
are correct for your environment, then run "/usr/local/tinderbox/scripts/tc
init" to complete the setup.  Be sure to checkout
http://tinderbox.marcuscom.com/ for further instructions

In der Datei /usr/local/tinderbox/scripts/tinderbox.ph müssen noch einige Variablen ausgefüllt werden:

# Configurable options
$TINDERBOX_HOST  = '<URL der Tinderbox>';
$TINDERBOX_URI   = '/tb';
$SUBJECT         = '<Betreff einer Tinderbox Mail>';
$SENDER          = '<Senderadresse>';
$SMTP_HOST       = '<Mailserver>';

Danach müssen noch zwei PHP Scripts kopiert und angepasst werden:

# cp /usr/local/tinderbox/scripts/webui/inc_ds.php.dist /usr/local/tinderbox/scripts/webui/inc_ds.php
# cp /usr/local/tinderbox/scripts/webui/inc_tinderbox.php.dist /usr/local/tinderbox/scripts/webui/inc_tinderbox.php

Einträge in der /usr/local/tinderbox/scripts/webui/inc_ds.php:

$DB_DRIVER = 'mysql';
#$DB_DRIVER = 'pgsql';
$DB_HOST = '<DB Server>';
$DB_NAME = '<DB Name>';
$DB_USER = '<DB User>';
$DB_PASS = '<DB Passwort>';

Einträge in der /usr/local/tinderbox/scripts/webui/inc_tinderbox.php. Möchte man das paefchen-Webui-Frontend verwenden, so kann die template_dir-Variable auf 'paefchen' gesetzt werden:

$tinderbox_name  = '<Tinderbox Name>';
$tinderbox_title = '<Tinderbox Titel>';
[...]
# Comment out the next line, and uncomment the line after it to enable
# the paefchen frontend template.
#$template_dir   = 'default';
$template_dir   = 'paefchen'

Jetzt kann die Tinderbox initialisiert werden:

# cd /usr/local/tinderbox/scripts && ./tc init
Enter a default cvsup host [cvsup12.FreeBSD.org]: <CVSup Server>
Enter a default update type or command [CSUP]: Enter
Default update host and type have been set.  These can be changed later by
modifying /usr/local/tinderbox/scripts/etc/env/GLOBAL.

Möchte man die Tinderbox über das Web-GUI steuern, muss noch der tinderd Dienst aktiviert werden:

# echo 'tinderd_enable="YES"' >> /etc/rc.conf
# echo 'tinderd_directory="/usr/local/tinderbox/scripts"' >> /etc/rc.conf
# echo 'tinderd_flags="-nullfs"' >> /etc/rc.conf
# /usr/local/etc/rc.d/tinderbox start

Nun muss noch ein Benutzer für das Web-GUI erstellt werden:

# cd /usr/local/tinderbox/scripts && ./tc addUser -u <Benutzername> -e <E-Mailadresse> -p <Passwort> -w
# ./tc setWwwAdmin -u <Benutzername>

Nun müssen noch die Einträge in der /usr/local/etc/apache/httpd.conf gemacht werden:

 Alias /tb/logs/ "/usr/local/tinderbox/logs/"
 Alias /tb/packages/ "/usr/local/tinderbox/packages/"
 Alias /tb/errors/ "/usr/local/tinderbox/errors/"
 Alias /tb/ "/usr/local/tinderbox/scripts/webui/"
 <Directory "/usr/local/tinderbox/">
         Order allow,deny
         Allow from all
 </Directory>

Danach kann der Apache neu gestartet werden:

# /usr/local/etc/rc.d/apache.sh restart

Als erstes wird ein Portbaum mit der Bezeichnung FreeBSD erstellt:

# cd /usr/local/tinderbox/scripts
# ./tc createPortsTree -p FreeBSD -u CSUP -d "FreeBSD ports tree" -w http://www.freebsd.org/cgi/cvsweb.cgi/ports/

Mit einer Tinderbox können Packet für verschieden FreeBSD Versionen erstellt werden. Folgender Befehl erstellt eine Tinderbox-Jail für FreeBSD 6.4:

# ./tc createJail -j 6.4 -d "FreeBSD 6.4" -t RELENG_6_4

Nun wird der Tinderbox-Jail dem Portbaum zugewiesen:

# ./tc createBuild -b 6.4-FreeBSD -j 6.4 -p FreeBSD -d "6.4-RELEASE with FreeBSD ports tree"

Es können nun auch weiter Tinderbox-Jails mit anderen FreeBSD Versionen und unterschiedliche Portbäume erstellt werden.

Danach können schon Ports, in diesem Beispiel www/fluxcms, getestet und Pakete dafür erstellt werden:

# ./tc addPort -b 6.4-FreeBSD -d www/fluxcms
# ./tc tinderbuild -nullfs -b 6.4-FreeBSD www/fluxcms

Die Logdateien und die Pakete können ganz einfach über das Web-GUI gefunden werden. Dieses ist über http://tinderboxserver/tb/ erreichbar.

Auch lassen sich bestehende Portbaume aktualisieren. Folgender Befehl aktualisiert den Portbaum welcher FreeBSD benannt wurde:

# ./tc updatePortsTree -p FreeBSD

Mehr Informationen zur Tinderbox findet man auf der Homepage http://tinderbox.marcuscom.com/. Eine Installationsanleitung für die Tinderbox Version 2.4.x findet man hier: http://www.chruetertee.ch/blog/archive/2007/11/10/ports-testen-und-pakete-erstellen-mit-einer-tinderbox.html

Related Entries:
Tinderbox aufräumen
Wartezeit von tinderd ändern
Quellcode in der Tinderbox speichern
Tinderbox-Jail ohne Kompilieren erstellen
RSS-Feed der zuletzt gebauten Ports einer Tinderbox
 Permalink

Befehl regelmässig ausführen und Ausgabe beobachten

Möchte man einen Befehl regelmässig ausführen und dessen Ausgabe beobachten, kann man dazu cmdwatch verwenden. Ist die Ausgabe des Befehles jedoch länger als das verwendete Terminal, kann vii benutzt werden, da sich damit durch die abgeschnittenen Zeilen scrollen lässt. Im FreeBSD Portsbaum findet man vii unter sysutils/vii:

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

Der auszuführende Befehl kann mit der -e Option angegeben werden. Der Befehl wird alle 10 Sekunden ausgeführt und dessen Ausgabe angezeigt.

# vii -e "ps wwaux"

Mit der -i Option kann die Anzahl Sekunden angegeben werden, nach welcher der Befehl ausgeführt werden soll:

# vii -e "ps wwaux" -i 2

Läuft vii, so kann durch Drücken der c Taste das Datum und die Zeit in der oberen rechten Ecke angezeigt werden. Durch Drücken der p Taste wird angezeigt, welche Zeilen der Ausgabe gerade dargestellt werden. Mit der j Taste wird die Ausgabe um eine Zeile nach unten, mit der k Taste eine Zeile nach oben verschoben:

# vii -e "ps wwaux" -i 2
root           2  0,0  0,0     0     8  ??  DL    7:40pm   0:00,43 [g_event]                   Sat Mar 28 22:03:35 2009
root           3  0,0  0,0     0     8  ??  DL    7:40pm   0:00,37 [g_up]                              Lines 6-37 of 86
root           4  0,0  0,0     0     8  ??  DL    7:40pm   0:00,32 [g_down]
root           5  0,0  0,0     0     8  ??  DL    7:40pm   0:00,00 [xpt_thrd]
root           6  0,0  0,0     0     8  ??  DL    7:40pm   0:00,00 [cbb0 event thread]
root           7  0,0  0,0     0     8  ??  IL    7:40pm   0:00,00 [fw0_probe]
root           8  0,0  0,0     0    16  ??  DL    7:40pm   0:00,00 [sctp_iterator]
root           9  0,0  0,0     0     8  ??  DL    7:40pm   0:00,00 [pagedaemon]
root          11  0,0  0,0     0   160  ??  WL    7:40pm   0:15,06 [intr]
root          12  0,0  0,0     0     8  ??  DL    7:40pm   0:00,22 [yarrow]
root          13  0,0  0,0     0     8  ??  DL    7:40pm   0:00,00 [usb0]
root          14  0,0  0,0     0     8  ??  DL    7:40pm   0:00,00 [usbtask-hc]
[...]

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

 Permalink

C-Style Kommentare aus einer Textdatei entfernen

Möchte man aus einer Datei Kommentare im C-Style (/* */) entfernen, so kann dazu decomment verwendet werden. Im FreeBSD Portbaum findet man decomment unter sysutils/decomment:

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

Die Datei, welche die Kommentare enthält, kann an decomment übergeben werden. Die Datei wird ohne Kommentare auf der Standardausgabe ausgegeben:

# cat testdatei
Text 1
/* Kommentar 1 */
Text 2
/*
 * Kommentar 2
 */
Text 3
/*
   Kommentar 3
*/
# decomment testdatei
Text 1

Text 2

Text 3

Wird nach dem Dateinamen noch die r-Option angegeben, werden zu den Kommentaren auch noch alle Leerzeichen entfernt.

# decomment testdatei r
Text1Text2Text3
 Permalink
Prev Next201-210/521