BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Fortschritt einer Pipe beobachten

Mit Hilfe von pv kann der Durchsatz und die Menge der gesendeten Daten durch eine Pipe beobachtet werden. pv findet man in den FreeBSD Ports unter sysutils/pv.

cd /usr/ports/sysutils/pv && make install clean

Nun kann pv vor der zu beobachtenden Pipe aufgerufen werden. Es wird angezeigt, wie viele Daten bereits durch die Pipe gesendet wurden, die verstrichene Bearbeitungszeit und der Durchsatz durch die Pipe:

# dd if=/dev/acd0 bs=2048 | pv | gzip > test.iso.gz
93.6MB 0:00:55 [1.92MB/s] [ <=> ]

Falls möglich, versucht pv die verbleibende Dauer zu errechnen. Ist das nicht möglich, kann bei pv mit der -s Option die Datenmenge angegeben werden, die durch die Pipe gesendet wird und nun kann pv die verbleibende Dauer berechnen.

# dd if=/dev/acd0 bs=2048 | pv -s 130m | gzip > test.iso.gz
11.5MB 0:00:22 [ 603kB/s] [====> ] 8% ETA 0:03:46

Sollen mehrere Pipes beobachtet werden, kann pv zusammen mit -cN und dem Namen des Programmes, zu welchem die Daten durch die Pipe gelenkt werden, verwendet werden:

# bzcat test.bz2 | grep NULL | pv -cN grep | awk '{print $1}' | pv -cN awk > test
grep: 56.9MB 0:00:08 [7.69MB/s] [ <=> ]
awk: 2.82MB 0:00:08 [ 361kB/s] [ <=> ]

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

 Permalink

Einzelnen Port im Portbaum wiederherstellen

Mit portsnap lässt sich der FreeBSD Portbaum aktualisieren. Möchte man nur einen einzelnen Port wiederherstellen, weil dieser gelöscht oder verändert wurde, so kann der Portname mit der Kategorie an ein portsnap extract übergeben werden. Danach wird nur dieser Port wiederhergestellt:

# portsnap extract ports-mgmt/portsopt
/usr/ports/ports-mgmt/portsopt/

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

 Permalink

Unsichtbare Zeichen einer Datei anzeigen

Befinden sich in einer Textdatei unsichtbare Zeichen, werden diese zum Beispiel von cat nicht angezeigt:

# cat testdatei 
RECURSIVE=no
CONFIG=no
   
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
        case "${COMMAND_LINE_ARGUMENT}" in
                c)              CONFIG=yes ;;
                h)      usage 0 ;;
        r)      RECURSIVE=yes ;;
                *)      usage ;;
        esac
done

Benutzt man cat mit der -v Option werden alle Steuerzeichen angezeigt. Nun sieht man, dass sich ein Ctrl+X (^X) in der Datei befindet:

# cat -v testdatei
RECURSIVE=no
CONFIG=no
  
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
        case "${COMMAND_LINE_ARGUMENT}" in
                c)              CONFIG=yes ;;
                h)      usage 0 ;;
        r)      RECURSIVE=yes ;;
^X              *)      usage ;;
        esac
done

cat mit der -t Option zeigt nun auch alle Tabulatoren als ^I an:

# cat -t testdatei
RECURSIVE=no
CONFIG=no
  
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do
^Icase "${COMMAND_LINE_ARGUMENT}" in
^I^Ic)^I^ICONFIG=yes ;;
^I^Ih)      usage 0 ;;
    ^Ir)      RECURSIVE=yes ;;
^X^I^I*)      usage ;;
^Iesac
done

Möchte man sich auch die Zeilenumbrüche anzeigen lassen, kann man dazu vis mit der -l Option verwenden, welches Zeilenumbrüche als \$ darstellt:

# vis -l testdatei
RECURSIVE=no\$
CONFIG=no\$
    \$
while getopts 'chr' COMMAND_LINE_ARGUMENT ; do\$
        case "${COMMAND_LINE_ARGUMENT}" in\$
                c)              CONFIG=yes ;;\$
                h)      usage 0 ;;\$
        r)      RECURSIVE=yes ;;\$
\^X             *)      usage ;;\$
        esac\$
done\$

Sowohl cat als auch vis sind auf FreeBSD und OpenBSD im Basissystem vorhanden. Mehr Informationen zu cat und vis findet man in den Manpages cat(1) und vis(1).

 Permalink

make buildworld Fortschritt beobachten

Möchte man bei einem make buildworld in /usr/src nur angezeigt bekommen, bei welchem Schritt man gerade ist und welches Modul zur Zeit gebaut wird, kann dazu worldtools verwendet werden. Die worldtools findet man im FreeBSD Portsbaum unter sysutils/worldtools:

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

Danach kann die Ausgabe von make buildworld mit einer Pipe an whereintheworld weitergeleitet werden. Im folgenden Beispiel wird eine tcsh verwendet und die komplette Ausgabe von make buildworld findet man in der Datei /tmp/build.log:

# cd /usr/src
# make buildworld |& tee /tmp/build.log | whereintheworld
--------------------------------------------------------------
>>> Rebuilding the temporary build tree
--------------------------------------------------------------
>>> stage 1.1: legacy release compatibility shims
--------------------------------------------------------------
>>> stage 1.2: bootstrap tools
--------------------------------------------------------------
>>> stage 2.1: cleaning up the object tree
--------------------------------------------------------------
>>> stage 2.2: rebuilding the object tree
--------------------------------------------------------------
>>> stage 2.3: build tools
--------------------------------------------------------------
>>> stage 3: cross tools
--------------------------------------------------------------
>>> stage 4.1: building includes
--------------------------------------------------------------
>>> stage 4.2: building libraries
--------------------------------------------------------------
=> kerberos5/lib/libasn1 (obj,depend,all,install)

In der untersten Zeile sieht man, was make buildworld gerade zur Zeit macht. Mehr Informationen zu whereintheworld aus den worldtools findet man in der Manpage whereintheworld(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
Comments (3)  Permalink

/etc/master.passwd wiederherstellen

Wurde die /etc/master.passwd gelöscht oder beschädigt, können zum Beispiel keine neue Benutzer mehr angelegt oder die Passwörter der bestehenden Benutzer verändert werden:

# passwd
Changing local password for root
New Password:
Retype New Password:
passwd: /etc/master.passwd: No such file or directory

Mit Hilfe von pwd_unmkdb kann nun die master.passwd aus der /etc/spwd.db generiert werden. pwd_unmkdb findet man im FreeBSD Portsbaum unter sysutils/pwd_unmkdb:

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

Nun kann ins /etc Verzeichnis gewechselt werden und die master.passwd wiederhergestellt werden:

# cd /etc && pwd_unmkdb
dbopen()'ing spwd.db...  Done
fopen()'ing master.passwd...  Done
Looping through the records in spwd.db...  Done

Mehr Informationen zu pwd_unmkdb findet man in der Manpage pwd_unmkdb(8), Informationen zur master.passwd in passwd(5).

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

Dateien mit identischem Inhalt finden

Auf einem System entstehen mit der Zeit viele Dateien mit identischem Inhalt. Diese können mit samefile aufgespürt werden. samefile findet man im FreeBSD Portbaum unter sysutils/samefile:

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

samefile muss einfach eine Liste von Dateien übergeben werden, welche verglichen werden sollen. Dies kann am einfachsten mit find(1) gemacht werden:

# echo test > datei1
# cp datei1 datei2
# cp datei2 datei3
# echo test2 >> datei2
# ln datei1 datei4
# find . -type f | samefile
5 ./datei1 ./datei3 = 2 1

Die Ausgabe von samefile zeigt in der ersten Spalte die Grösse der Datei in Byte an, dann die Dateinamen der identischen Dateien. Liegen die Dateien auf der gleichen Partition, wird dies durch ein Gleichheitszeichen in der dritten Spalte angezeigt. Die letzten beiden Werte zeigen die Anzahl Hard-Links, die auf die beiden Dateien zeigen.

Mit der -v Option werden nach der Liste mit den identischen Dateien einige Werte zu samefile angezeigt:

# find /home/beat -type f | samefile -v
...
Ganz lange Liste
...
34102 files left after removing sizes that appear only once.
6135 groups of files with same size.
Largest group of one size is 979 files with size 53.
Memory consumption:
Largest equality table used 478731 bytes.
Binary tree built with 15174 nodes of size 24 = 364176 bytes.
Allocated 43141 nodes of size 16 = 690256 bytes for file lists.
You have a total of 819245964 bytes in identical files.

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

 Permalink

Apache-Anfragen in Echtzeit betrachten

Mit apachetop lassen sich Anfragen an einen Apache-Webserver ähnlich wie Prozesse mit top(1) betrachen. apachetop findet man in den FreeBSD Ports unter sysutlis/apachetop:

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

Beim Starten von apachetop kann mit der -f Option der Pfad zum Apache-Access-Log angegeben werden, aus dem apachetop die Informationen liest:

# apachetop -f /var/log/httpd-access.log

Im oberen Teil von apachetop wird nun eine kleine Statistik angezeigt über die Anzahl Anfragen, die übertragenen Daten und die zurückgegebenen Statuscodes seit apachetop läuft und der letzten 30 Sekunden. Im unteren Teil von apachetop werden die letzten Anfragen angezeigt. Mit der d-Taste kann die Ansicht zwischen aufgerufenen URLs, Refferrers und Client-IPs gewechselt werden.

last hit: 12:01:23         atop runtime:  0 days, 00:08:59             12:01:26
All: 47 reqs ( 0.1/sec) 145.2K ( 283.7B/sec) 3162.9B/req
2xx: 25 (53.2%) 3xx: 22 (46.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 30s): 15 reqs ( 0.6/sec) 9455.0B ( 350.2B/sec) 630.3B/req
2xx: 2 (13.3%) 3xx: 13 (86.7%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S URL
3 0.19 0.0 0.0 /
1 0.17 8.5 1.4*/blog/archive/2007/05/26/zfs-auf-freebsd.html
1 0.20 0.8 0.2 /dynimages/gravatar/a71087548eea50769758d7ffbf288515
1 0.33 0.0 0.0 /themes/chrueterng/css/main_chrueter.css
1 0.33 0.0 0.0 /themes/chrueterng/css/mobile.css
1 0.33 0.0 0.0 /webinc/js/livesearch.js
1 0.33 0.0 0.0 /webinc/js/openId.js
1 0.33 0.0 0.0 //themes/chrueterng/buttons/freebsd.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/rss.png
1 0.33 0.0 0.0 /themes/chrueterng/buttons/comments.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/xhtml10.png
1 0.33 0.0 0.0 /files/images/logo.png
1 0.33 0.0 0.0 //themes/chrueterng/buttons/chruetertee.png

Mit der "Pfeil-nach-unten-" bzw. "Pfeil-nach-oben-Taste", kann ein Stern zwischen den Einträgen verschoben werden. Drückt man nun die "Pfeil-nach-Rechts-Taste", werden Details zu diesem Eintrag angezeigt.

last hit: 12:01:29         atop runtime:  0 days, 00:09:09             12:01:36
All: 50 reqs ( 0.1/sec) 176.9K ( 339.1B/sec) 3622.0B/req
2xx: 27 (54.0%) 3xx: 23 (46.0%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)
R ( 27s): 18 reqs ( 0.7/sec) 40.9K ( 1551.9B/sec) 2327.9B/req
2xx: 4 (22.2%) 3xx: 14 (77.8%) 4xx: 0 ( 0.0%) 5xx: 0 ( 0.0%)

REQS REQ/S KB KB/S
1 0.06 8.5 0.5 /blog/archive/2007/05/26/zfs-auf-freebsd.html
HOST
1 0.06 8.5 0.5 89.xxx.xxx.xxx [89.xxx.xxx.xxx]

REFERRER
1 0.06 8.5 0.5 www.google.ch/search?source=ig&hl=de&rlz=&q=chruetertee+zfs&btnG=Google-Suche&meta=

Mit der "Pfeil-nach-links-Taste" wird die Detailansicht wieder verlassen. apachetop beendet man mit der q-Taste.

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

 Permalink

Ports-Variablen auslesen

Möchte man die gesetzten Variablen in /usr/ports/Mk/bsd.port.mk einfach auslesen, so kann das Skript portsvar.sh unter /usr/ports/Tools/scripts/ genutzt werden. Einfach die gewünschten Variablen an portsvar.sh übergeben:

# /usr/ports/Tools/scripts/portsvar.sh PORTSDIR OSVERSION
PORTSDIR = /usr/ports
OSVERSION = 602000

Auch Regex lassen sich mit Hilfe der -e Option in portsvar.sh bei der Suche nach Variablen verwenden.

# /usr/ports/Tools/scripts/portsvar.sh -e "PKG[M,D].*"
PKGDEINSTALL = ${PKGDIR}/pkg-deinstall
PKGDIR = ${MASTERDIR}
PKGMESSAGE = ${PKGDIR}/pkg-message

Standardmässig wird nur in bsd.port.mk nach Variablen gesucht. Möchte man ein anderes Makefile unter /usr/ports/Mk/ in die Suche mit aufnehmen, kann dies mit der -w Option gemacht werden. In den folgenden Beispielen wird die Standardversion vom Apache, PHP und PostgeSQL aus dem jeweiligen Makefile ausgelesen:

# /usr/ports/Tools/scripts/portsvar.sh -w apache -e "APACHE_[P,S].*"
APACHE_PORT = www/apache13
APACHE_SUPPORTED_VERSION = 13 20 21 22
# /usr/ports/Tools/scripts/portsvar.sh -w php -e "PHP_VER.*"
PHP_VER = 5
PHP_VERSION = 5.2.5
# /usr/ports/Tools/scripts/portsvar.sh -w database -e "DEFAULT_PGSQL.*"
DEFAULT_PGSQL_VER = 81

Alle Optionen von portsvar.sh erhält man mit der -h Option.

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
Comments (1)  Permalink

Smart Array RAID Controller Status auslesen

Auf einem Server mit einem Smart Array RAID Controller werden Änderungen am Status eines Logical Drives von FreeBSD nach /var/log/messages geschrieben. Folgendes Beispiel zeigt die Ausgabe in /var/log/messages bei einem Diskwechsel:

kernel: ciss0: *** Hot-plug drive removed: SCSI port 1 ID 0
kernel: ciss0: *** Physical drive failure: SCSI port 1 ID 0
kernel: ciss0: *** State change, logical drive 0
kernel: ciss0: logical drive 0 (pass0) changed status OK->interim recovery, spare status 0x0
...
kernel: ciss0: *** Hot-plug drive inserted: SCSI port 1 ID 0
kernel: ciss0: *** State change, logical drive 0
kernel: ciss0: logical drive 0 (pass0) changed status interim recovery->ready for recovery, spare status 0x0
kernel: ciss0: *** State change, logical drive 0
kernel: ciss0: logical drive 0 (pass0) changed status ready for recovery->recovering, spare status 0x0
...
kernel: ciss0: *** State change, logical drive 0
kernel: ciss0: logical drive 0 (pass0) changed status recovering->OK, spare status 0x0

Möchte man sich den aktuellen Status anzeigen lassen, ohne /var/log/messages auf die letzte Änderung durchsuchen zu müssen, kann man den Port sysutils/cciss_vol_status installieren. Damit cciss_vol_status kompiliert werden kann, müssen die Kernel-Sourcen auf dem System vorhanden sein:

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

Nun kann der Status des Smart Array Controllers abgefragt werden:

# cciss_vol_status /dev/ciss0
/dev/ciss0: (Smart Array 5i) RAID 1 Volume 0 status: OK.

Mehr Informationen zu cciss_vol_status und eine Beschreibung aller möglichen Status findet man in der Manpage cciss_vol_status(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

Zugriffs- und Modifikationszeit einer Datei auslesen

Auf FreeBSD können mit stat verschiedene Details einer Datei ausgelesen werden. So kann zum Beispiel ausgelesen werden, wann zum letzten Mal auf die Datei zugegriffen wurde und wann diese zum letzten Mal verändert wurde. Auch lässt sich auslesen, wann der Inode zur Datei alloziert und wann das letzte Mal verändert wurde. Im folgenden Beispiel wird eine neue Datei erstellt und anschliessend die Zeiten der Datei ausgelesen. Dabei wird die Zeit angezeigt, wann der Inode zut Datei alloziert (birth) wurde:

# echo test > testdatei
# stat -f "birth: %SB change: %Sc modify: %Sm access: %Sa" testdatei
birth: Dec 15 14:30:22 2007 change: Dec 15 14:30:22 2007 modify: Dec 15 14:30:22 2007 access: Dec 15 14:30:22 2007

Wird nun die Datei verändert, wird die Modifikationszeit der Inodes (change) und die Modifikationzeit der Datei (modify) geändert:

# echo test2 >> testdatei
# stat -f "birth: %SB change: %Sc modify: %Sm access: %Sa" testdatei
birth: Dec 15 14:30:22 2007 change: Dec 15 14:30:44 2007 modify: Dec 15 14:30:44 2007 access: Dec 15 14:30:22 2007

Werden nun die Dateirechte verändert, so wird nur die Modifikationszeit des Inodes (change) verändert:

# chmod 600 testdatei
# stat -f "birth: %SB change: %Sc modify: %Sm access: %Sa" testdatei
birth: Dec 15 14:30:22 2007 change: Dec 15 14:31:05 2007 modify: Dec 15 14:30:44 2007 access: Dec 15 14:30:22 2007

Wird nun die Datei ausgelesen, so wird die Zugriffszeit (access) verändert:

# cat testdatei
test
test2
# stat -f "birth: %SB change: %Sc modify: %Sm access: %Sa" testdatei
birth: Dec 15 14:30:22 2007 change: Dec 15 14:31:05 2007 modify: Dec 15 14:30:44 2007 access: Dec 15 14:31:23 2007

Alle Möglichkeiten und Optionen von stat findet man in der Manpage stat(1).

 Permalink
Prev Next201-210/325