BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Festplatte auf Fehler überprüfen

Möchte man eine Festplatte überprüfen, zum Beispiel weil sie komische Geräusche von sich gibt oder man Einträge in den Logdateien findet, die auf ein Problem mit der Festplatte hin deuten, so helfen einem die smartmontools weiter.

Auf FreeBSD und OpenBSD findet man die smartmontools in den Ports unter sysutils/smartmontools.

Um die Festplatte zu prüfen, braucht man die device-Bezeichnung der Festplatte. Diese findet man zum Beispiel mit mount heraus. Auf FreeBSD beginnen IDE/ATA-Platten mit ad, SCSI-Platten mit da. Auf OpenBSD beginnen IDE/ATA-Platten mit wd, SCSI-Platten mit sd.

Um Informationen über die Festplatte anzuzeigen, kann die -a Option verwendet werden. Folgendes Beispiel zeigt auf OpenBSD die Informationen von wd0. Wichtig auf OpenBSD ist das c nach der Bezeichnung, welches auf die ganze Festplatte zeigt:

# smartctl -a /dev/wd0c

Um einen short-Test auf ad0 unter FreeBSD ausführen zu lassen, kann man die -t short Option verwenden. Dieser Test kann im laufenden Betrieb durchgeführt werde.

# smartctl -t short /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 2 minutes for test to complete.
Test will complete after Sat Oct 14 14:38:43 2006

Use smartctl -X to abort test.

Dieser Test geht nur einige Minuten und danach kann das Ergebnis wie folgt betrachtet werden:

# smartctl -l selftest /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 4090 -

Dieser Test verlief ohne Fehler, danach kann ein ausführlicherer Test gestartet werden. Dieser dauer allerdings einiges länger, lässt sich aber auch im laufenden Betrieb durchführen:

# smartctl -t long /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 55 minutes for test to complete.
Test will complete after Sat Oct 14 15:44:09 2006

Use smartctl -X to abort test.

Ist der Test beendet, kann das Ergebnis gleich wie beim short-Test betrachtet werden.

# smartctl -l selftest /dev/ad0
smartctl version 5.36 [i386-portbld-freebsd6.1] Copyright (C) 2002-6 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed without error 00% 4091 -
# 2 Short offline Completed without error 00% 4090 -

Natürlich gibt es keine Garantie, wenn mit smartctl(8) keine Fehler gefunden werden, dass mit der Festplatte alles in Ordnung ist. Findet man allerdings Fehler sollte man sich langsam gedanken über eine neue Platte machen.

 Permalink

Eine TCP-Verbindung trennen

Manchmal möchte man aus gewissen Gründen eine TCP-Verbindung trennen, zum Beispiel weil eine SSH oder FTP-Sitzung nicht sauber beendet worden ist. Dazu muss man zuerst herausfinden, welche Verbindung man kappen möchte. Dies findet man mit fstat auf OpenBSD oder sockstat -c auf FreeBSD heraus. Um die Verbindung zu beenden, braucht man die IP-Adresse und den TCP-Port vom Absender und dem Zielrechner.

Folgendermassen wird dann mit tcpdrop(8) eine Verbindung getrennt:

# tcpdrop <Lokale IP-Adresse> <Lokaler TCP-Port> <IP-Adresse des Benutzers> <TCP-Port>

Möchte man nun auf FreeBSD die SSH-Verbindung vom test-Benutzer trennen, muss man zuerst die benötigten Daten herausfinden und kann danach die Verbindung trennen:

# sockstat -c | grep sshd
test sshd 51960 3 tcp4 10.0.0.2:22 10.0.0.155:52711
# tcpdrop 10.0.0.2 22 10.0.0.155 52711

Auf OpenBSD findet man die benötigten Daten wie folgt:

# fstat | grep 'sshd.*internet.*<--'
test sshd 19075 5* internet stream tcp 0xd694bc84 10.0.0.1:22 <-- 10.0.0.155:53325

tcpdrop befindet sich sowohl in FreeBSD als auch in OpenBSD im Basissystem.

 Permalink

Schneller Zugriff auf FreshPorts und das CVSweb

Möchte man die Änderungen einer Datei im CVSweb nachsehen, so muss man nicht extra einen Browser öffnen, die CVSweb Seite öffnen und sich durch den Verzeichnisbau hangeln, sondern kann portcvsweb(1) benutzen. portcvsweb erkennt anhand der CVS Tags einer Datei oder eines vorhandenen Makefiles um welche Datei es sich handelt, und öffnet die richtige CVSweb-Seite im Browser.

Befindet man sich zum Beispiel im /usr/src/usr.sbin/powerd Verzeichnis und möchte die CVSweb-Seite von powerd.c anschauen, so gibt man einfach portcvsweb powerd.c ein und folgende Seite wird geöffnet: http://www.FreeBSD.org/cgi/cvsweb.cgi/src/usr.sbin/powerd/powerd.c#rev1.6.2.4
Auch lassen sich ganze Verzeichnisse anzeigen. Befindet man sich zum Beispiel im Portbaum in der Kategorie www (/usr/ports/www) und möchte die Seite des fluxcms anschauen, so gibt man portcvsweb fluxcms ein und folgende Seite wird gestartet: http://www.FreeBSD.org/cgi/cvsweb.cgi/ports/www/fluxcms/

Auch die FreshPorts Seite eines Portes kann einfach mit der -F Option erreicht werden:

# portcvsweb -F fluxcms

Man muss sich nicht einmal im Portbaum befinden, um portcvsweb aufzurufen. Einfach die Kategorie und den Portnamen an portcvsweb übergeben:

# portcvsweb -F german/ding

portcvsweb nimmt den ersten der folgenden Browser der auf einem System vorhanden ist: w3m, lynx, links, firefox, mozilla oder netscape. Möchte man einen bestimmten Browser verwenden, so kann man diesen in der BROWSER-Variable setzen:

# echo setenv BROWSER <Browser> >> ~/.cshrc

portcvsweb befindet sich im sysutils/portupgrade Port

UPDATE 05.02.2007: portupgrade wurde von sysutils in die neue Kategorie ports-mgmt verschoben. portupgrade kann nun wie folgt installiert werden:

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

rc.conf aufräumen

Auf FreeBSD sind in der /etc/defaults/rc.conf Datei die Standardwerte der Systemvariablen festgelegt. Diese können in der /etc/rc.conf überschrieben werden. Mit der Zeit können sich Variablen in der rc.conf ansammeln, die identisch mit jenen in der /etc/defaults/rc.conf sind. Um die rc.conf übersichtlicher zu machen, können diese und auskommentierte Variablen entfernt werden. Dafür kann man rclean verwenden. rclean befindet sich in den FreeBSD Ports unter sysutils/rclean.

Hier zu Beispiel eine rc.conf die mit der Zeit gewachsen ist:

hostname="daedalus.chruetertee.ch"
ifconfig_em0="DHCP"
keymap="swissgerman.iso"
sshd_enable="YES"
usbd_enable="YES"
sendmail_enable="NONE"
nfs_server_enable="NO"
nfs_client_enable="NO"
portmap_enable="YES"
syslogd_enable="YES"
syslogd_flags="-ss"
clear_tmp_enable="YES"
firewall_enable="YES"
firewall_script="/etc/ipfwrules"
pccard_enable="YES"
#ifconfig_ath0="DHCP wpa"
#ifconfig_wi0="DHCP"
kern_securelevel_enable="YES"
kern_securelevel="-1"
devd_enable="YES"
ipv6_enable="NO"
inetd_enable="NO"
icmp_log_redirect="NO"
#gateway_enable="YES"
#natd_enable="YES"
#natd_interface="wi0"
#natd_flags=""
#tcp_extensions="NO"
#tcp_keepalive="NO"
icmp_bmcastecho="NO"
dumpdev="NO"
#clamav_clamd_enable="YES"
#clamav_freshclam_enable="YES"
devfs_enable="YES"
#ntpd_enable="YES"
#ntpd_sync_on_start="YES"
jail_enable="NO"

Ruft man nun rclean auf, werden auskommentierte und überflüssige Variablen entfernt:

# rclean
# Reordered by rclean on Fri Sep 22 19:55:30 2006
# rclean Copyright (c) 2002 Lapo Luchini <lapo@lapo.it>
# Please make all changes to this file, not to /etc/defaults/rc.conf
# This file contains just the overrides from /etc/defaults/rc.conf
pccard_enable="YES" # "NO"
hostname="daedalus.chruetertee.ch" # ""
background_dhclient="YES" # "NO"
firewall_enable="YES" # "NO"
firewall_script="/etc/ipfwrules" # "/etc/rc.firewall"
ifconfig_em0="DHCP" # "<not defined>"
syslogd_flags="-ss" # "-s"
sshd_enable="YES" # "NO"
keymap="swissgerman.iso" # "NO"
sendmail_enable="NONE" # "NO"
usbd_enable="YES" # "NO"
clear_tmp_enable="YES" # "NO"
kern_securelevel_enable="YES" # "NO"
portmap_enable="YES" # "<not defined>"
devfs_enable="YES" # "<not defined>"

rclean erstellt nun Kommentare, welche die Standardwerte der /etc/defaults/rc.conf aufzeigen. Möchte man diese Kommentare nicht haben, so kann man rclean mit der -n Option aufrufen. Will man die neue rc.conf speichern, so benutzt man die -w Option.

# rclean -n -w /tmp/rc.conf

Nun sollte man von der alten rc.conf eine Sicherheitskopie erstellen und kann danach die rc.conf mit der neuen und aufgeräumteren Version überschreiben.

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 durchsuchen mit grep

grep(1) durchsucht Dateien nach Suchbegriffen und gibt diese dann aus. Dabei wird immer die ganze Zeile mit dem gefundenen Suchbegriff ausgegeben. grep wird wie folgt benutzt:

# grep [Optionen] <Suchbegriff> <Datei>

Möchte man nach test1 in der testdatei suchen, so kann man dies folgendermassen tun:

# more testdatei
test1 bli
test2 bla
test3 blo

# grep test1 testdatei
test1 bli

Natürlich kann man die Ausgabe eines Programms mit einer Pipe direkt an grep weiterleiten:

# more testdatei | grep test2
test2 bla

Soll die Gross-/Kleinschreibung bei der Suche ignoriert werden, kann die -i Option verwendet werden:

# grep -i Test3 testdatei
test3 blo

Ein Begriff kann bei der Suche mit der -v Option ausgeschlossen werden, das heisst alle Zeilen die diesen Begriff nicht beinhalten werden angezeigt:

# grep -v test2 testdatei
test1 bli
test3 blo

Sollen mehrere Begriffe ausgeschlossen werden, so kommt egrep(1) zum Zuge. Die auszuschliessenden Begriffe sind mit einer Pipe zu trennen.

# egrep -v 'test1|test3' testdatei
test2 bla

Genauso wie auschliessen, lassen sich auch mehrere Suchbegriffe mit egrep kombinieren:

# egrep 'test1|test3' testdatei
test1 bli
test3 blo

Mit grep können auch Verzeichnisse rekursiv durchsuchen werden. Alle Dateien eines Verzeichnis und die Dateien der verschiedenen Unterverzeichnisse werden so durchsucht:

# grep -R <Suchbegriff> <Verzeichnis>

Möchte man nun statt den gefundenen Zeilen die Dateinamen ausgeben, in welchen der Suchbegriff gefunden wurde, kann man die -l Option hinzufügen:

# grep -Rl miau /usr/src/
/usr/src/contrib/ntp/html/notes.html
/usr/src/share/dict/web2

Für die Suchbegriffe können natürlich auch reguläre Ausdrücke (Regex) verwendet werden. Diese und alle weiteren Optionen die grep besitzt, sind in der Manpage grep(1) ausführlich beschrieben.

grep und egrep sind natürlich auf FreeBSD und OpenBSD im Basissystem vorhanden.

Comments (1)  Permalink

Ports aktualisieren mit portmaster

Mit portmaster(8) lassen sich genauso wie mit portupgrade(1) Ports aktualisieren. Jedoch ist portmaster ein Shellskript und hat nicht wie portupgrade ruby und perl als Abhängigkeit. portmaster findet man in den Ports unter sysutils/portmaster:

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

Möchte man nun herausfinden, von welchen Programmen es in den Ports neuere Versionen gibt, so kann man dies folgendermassen tun:

# portmaster -L | grep -B1 '    '

Der Abstand zwischen den beiden Hochkommas ist ein Tabulator.

Danach kann ein Port wie folgt aktualisiert werden:

# portmaster <Portname>

Möchte man alle Ports die von einem Port abhängen aktualisieren, so kann man die -r Option verwenden:

# portmaster -r <Portname>

Mit der -b Option wird von einem Port der akualisiert wird, zuerst ein Backup erstellt. Die -f Option aktualisiert die Ports, egal ob eine neuere Version in den Ports ist oder nicht. Mit der -n Option kann man sich Anzeigen lassen, was der portmaster machen würde, dies wird aber nicht durchgeführt. Möchte man make(1) Argumente übergeben so benutzt man die -m Option.

Mehr Informationen zu portmaster findet man in der Manpage portmaster(8) oder auf der Webseite: http://dougbarton.us/portmaster.html

UPDATE 05.02.2007:

portmaster wurde von sysutils in die neue Kategorie ports-mgmt verschoben. portmaster kann nun wie folgt installiert werden:

# cd /usr/ports/ports-mgmt/portmaster && make install clean
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

Prozesse als Baum darstellen

Möchte man darstellen, welcher Prozess von welchem gestartet wurde, so lässt sich dies mit pstree(1) tun.

pstree findet man sowohl auf FreeBSD als auch auf OpenBSD in den Ports unter sysutils/pstree.

Ruft man pstree ohne Optionen auf, so wird ein Baum aller für den Benutzer sichtbaren Prozesse gebildet:

# pstree
-+= 00000 root [swapper]
|-+= 00001 root /sbin/init --
| |--= 00166 root adjkerntz -i
| |--= 00248 root /usr/sbin/wpa_supplicant -B -q -i ath0 -c /etc/wpa_supplican
| |--= 00262 _dhcp dhclient: ath0 (dhclient)
| |--= 00368 root /sbin/devd
| |--= 00413 root /usr/sbin/syslogd -ss
| |--= 00438 root /usr/sbin/rpcbind
| |--= 00518 root /usr/sbin/powerd -a max -b min
| |--= 00536 root /usr/sbin/usbd
| |--= 00580 root /usr/sbin/sshd
| |--= 00587 root /usr/sbin/cron -s
| |--= 00625 root /usr/sbin/moused -p /dev/psm0 -t auto
| |-+- 00676 root /usr/X11R6/bin/xdm -nodaemon ttyv8
| | |--= 00679 root /usr/X11R6/bin/X -auth /usr/X11R6/lib/X11/xdm/authdir/auth
| | \-+= 00680 root xdm: :0 (xdm)
| | \-+= 00712 beat fluxbox
| | |--- 00715 beat gkrellm
| | |--- 00716 beat xscreensaver
| | |--- 00718 beat oneko -bsd
| | |-+= 00736 beat /bin/sh -c thunderbird
| | | \-+- 00737 beat /bin/sh /usr/X11R6/bin/thunderbird
...

Mit der -u <Benutzer> Option werden nur Zweige dargestellt, die auch Prozesse beinhalten, die unter dem angegebenen Benutzer laufen.

Mit der -U Option werden Zweige, die nur root-Prozesse beinhalten, nicht angezeigt

Wem die Darstellung von pstree nicht gefällt, sollte mal die -g 2 Option benützen.

Möchte man nur einen Zweig darstellen, der einen gewissen Prozess beinhaltet, so kann man entweder -s <Prozessname> oder -p <Prozess-ID> verwenden.

Alle Optionen erhält man mit pstree -h.

Comments (2)  Permalink

Anzeigen welcher Host wieviel Bandbreite benutzt

Mit iftop(8) lassen sich die Verbindungen einer Netzwerkschnittstelle im Stile von top(1) anzeigen. Mit der -i Option kann man die Netzwerkschnittstelle angeben, die man beobachten will:

# iftop -i <Netzwerkschnittstelle>

Nun werden alle Verbindungen untereinander angezeigt und ein schwarzer Balken visualisiert die zur Zeit verwendete Bandbreite jeder Verbindung, welche jedoch in gesendete und empfangene Daten aufgeteilt ist. Zusätzlich werden am rechten Rand das Total der empfangenen und gesendeten Daten der letzten 40, 10 und 2 Sekunden angezeigt.

iftop

Am unteren Rand wird das Total aller Verbindungen der angezeigten Schnittstelle angezeigt. Da iftop die IP-Adressen in Hostnamen auflöst, ist es möglich, dass das Ergebnis von iftop verfälscht wird, da iftop nun selber Netzwerkverkehr generiert. Das Auflösen der IP-Adressen kann mit der -n Option unterbunden werden.

iftop kann nur als root ausgeführt werden. Auf FreeBSD befindet sich iftop unter net-mgmt/iftop in den Ports. Alle Optionen von iftop findet man in der Manpage iftop(8).

 Permalink

Grösse eines Verzeichnisinhaltes bestimmen

Die Grösse eines Verzeichnisinhaltes lässt sich mit du(1) bestimmen. Mit der -c Option wird das Total aller Dateien angezeigt, mit der -h Option werden die Grössen in Kilo-, Mega- oder Gigabyte angezeigt. Beispiel:

# ls -l
total 2869856
-rw-r--r-- 1 beat users 529784832 7 Mai 20:50 6.1-RELEASE-i386-disc1.iso
-rw-r--r-- 1 beat users 548517888 5 Jun 15:25 7.0-CURRENT-200606-i386-disc1.iso
-rw-r--r-- 1 beat users 721241069 29 Sep 2005 KNOPPIX_V4.0.2CD-2005-09-23-DE.iso.gz
-rw-r--r-- 1 beat users 208437248 12 Feb 16:45 frenzy_v03_release.iso
-rw-r--r-- 1 beat users 209682432 9 Feb 2006 i386cd-3.0.iso
-rw-r--r-- 1 beat users 703017311 5 Sep 2005 install-x86-universal-2005.1.iso.gz
-rw-r--r-- 1 beat users 16425313 10 Jul 13:28 reactos0.3.0-RC1-live.zip
# du -ch
2,7G .
2,7G total

Möchte man nun in einem Verzeichnis herausfinden, welche Dateien am meisten Speicherplatz benötigen, so kann man du mit sort(1) kombinieren:

# du * | sort -n

Nun wird der Verzeichnisinhalt so sortiert, dass die grossen Dateien am Ende stehen:

# du  * | sort -n
16064 reactos0.3.0-RC1-live.zip
203680 frenzy_v03_release.iso
204896 i386cd-3.0.iso
517648 6.1-RELEASE-i386-disc1.iso
535952 7.0-CURRENT-200606-i386-disc1.iso
686896 install-x86-universal-2005.1.iso.gz
704720 KNOPPIX_V4.0.2CD-2005-09-23-DE.iso.gz

du(1) und sort(1) stehen beide auf FreeBSD und OpenBSD im Basissystem zur Verfügung.

 Permalink

Herausfinden welche Benutzer angemeldet sind

Es gibt verschiedene Möglichkeiten herauszufinden, welche Benutzer auf einem Rechner angemeldet sind.

Mit users(1) werden die angemeldeten Benutzer in alphabetischer Reihenfolge angezeigt:

# users
beat test

Mit who(1) werden zusätzlich noch der tty-Name, die Zeit des Logins und gegebenenfalls der Name des Hosts, von dem der Benutzer aus angemeldet ist, angezeigt:

# who
test ttyv0 11 Aug 19:18
beat ttyp1 11 Aug 16:42 (:0.0)
beat ttyp3 11 Aug 17:59 (:0.0)

Noch mehr Informationen erhält man mit w(1). Hier sieht man zusätzliche Informationen über das System, wie die Uptime und den System-Load. Zusätzlich wird bei allen Benutzern angezeigt, wie lange sie keine Eingabe mehr getätigt haben und welcher Befehl aktuell ausgeführt wird:

# w
7:38pm up 4:05, 3 users, load averages: 0,03 0,12 0,14
USER TTY FROM LOGIN@ IDLE WHAT
test v0 - 7:18pm 19 -
beat p1 :0.0 4:42pm 2 more
beat p3 :0.0 5:59pm - w

Möchte man herausfinden, welche Benutzer sich in letzter Zeit angemeldet haben, so kann man dies mit last(1) nachschauen:

# last
beat ttyp5 localhost Fr 11 Aug 19:50 - 19:51 (00:01)
test ttyv0 Fr 11 Aug 19:18 still logged in
beat :0 Fr 11 Aug 15:34 still logged in
reboot ~ Fr 11 Aug 15:33
shutdown ~ Fr 11 Aug 14:05
beat :0 Fr 11 Aug 14:00 - shutdown (00:05)
reboot ~ Fr 11 Aug 14:00
shutdown ~ Fr 11 Aug 12:43

users, who, w und last sind sowohl auf FreeBSD als auch auf OpenBSD im Basissystem vorhanden.

 Permalink
Prev Next271-280/325