BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Treppeneffekt beim Einfügen von Text im vi verhindern

Fügt man Text mittels Copy/Past in den vi ein, kann es zu einem sogenannten Treppeneffekt kommen, dass heisst der Text wird in jeder Zeile weiter eingerückt. Um dies zu verhindern, muss vor dem Einfügen das automatische Einrücken deaktiviert werden.

Das automtische Einrücken rückt die nächste Zeile so wie die vorhergehende automatisch ein. Dies ist normalerweise auch sehr nützlich, nur beim Einfügen von Text ist es störend.

Zuerst muss man sich im Kommandomodus befinden (dies erreicht man, indem man die Esc-Taste drückt) und danach mit dem Doppelpunkt in den ex Modus wechselt. Anschliessend lässt sich mit set noai das automatische Einrücken deaktivieren. Danach kann man den Text eingefügen. Das automatische Einrücken wird nach dem Einfügen mit set ai im ex Modus wieder aktiviert.

Related Entries:
Rechtschreibprüfung im vi
vi Fenster teilen
Abkürzungen im vi benutzen
vi Makros benutzen
vi Kurzreferenz
Comments (3)  Permalink

ISO-Image erstellen

Möchte man Daten auf eine CD brennen, so muss zuerst ein ISO-Image erstellt werden. Ein ISO-Image kann mit mkisofs(8) erstellt werden. mkisofs befindet sich im sysutils/cdrtools Port. Zuerst müssen alle Daten, die später im Image vorhanden sein sollen, in ein Verzeichnis kopiert werden. Danach kann aus diesem Verzeichnis ein Image erstellt werden:

# mkisofs -o <Name des Images> <Pfad zu Verzeichnis mit Daten>

Wird die CD später mit einem unixoiden Betriebssystem verwendet, so empfiehlt es sich noch die -r Option zu verwenden, damit die Rock Ridge Erweiterung aktiviert wird, und die Dateirechte und der Besitzer auf vernünftige Werte gesetzt werden.

Soll die CD mit Windows verwendet werden, so sollte die Joliet Erweiterung mit der -J Option aktiviert werden. Werden Dateinamen die länger als 64 Zeichern sind verwendet, so kann die -joliet-long Option zusätzlich verwendet werden.

Im folgenden Beispiel wird der Inhalt von /var/backups in ein Image namens backup.iso gepackt und die Rock Ridge Erweiterung wird aktiviert:

# mkisofs -r -o backup.iso /var/backups

Möchte man danach den Inhalt des Images nochmals ansehen, so kann das Image wie folgt gemountet werden:

# mdconfig -a -t vnode -f <Pfad zu Image> -u 0
# mount -t cd9660 /dev/md0 /mnt/

Nun ist der Inhalt unter /mnt sichtbar. Das Image kann nun wie folgt wieder geunmountet werden:

# umount /mnt/
# mdconfig -d -u 0

Jetzt kann das ISO-Image mit burncd(8) gebrannt werden.

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

NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found

Befinden sich in /var/log/debug.log und /var/log/cron folgende Fehlermeldungen:

Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, group_compat, setgrent, not found
Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found
Oct 15 13:01:00 fenchurch cron[62903]: NSSWITCH(nss_method_lookup): nis, passwd_compat, endpwent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, group_compat, setgrent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, group_compat, endgrent, not found
Oct 15 13:02:00 fenchurch cron[64716]: NSSWITCH(nss_method_lookup): nis, passwd_compat, endpwent, not found

So kann der Inhalt der /etc/nsswitch.conf in Folgenden geändert werden, damit diese Meldungen verschwinden:

group: files
hosts: files dns
networks: files
passwd: files
shells: files
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

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

Rechtschreibprüfung im vi

Im vi(1) lässt sich die Rechtschreibprüfung aspell(1) mit Hilfe eines vi Makros integrieren.

Zuerst muss aspell installiert werden. Auf FreeBSD kann man dies wie folgt tun:

cd /usr/ports/german/aspell && make install clean

Danach kann man folgende Zeile in die .exrc oder /etc/vi.exrc eintragen:

map #1 :w!^M:!aspell -c %^M:e! %^M

Die ^M werden mit Ctrl + v und der Entertaste erzeugt. Diese Zeile legt das Makro auf die F1-Taste. Folgendes wird dabei ausgeführt:

:w!^M Speichert die aktuelle Datei.

!aspell -c %^M Führt aspell im Rechtschreibprüfungsmodus auf der aktuell geöffneten Datei aus. Diese wird danach von aspell mit den Korrekturen gespeichert.

:e! % ^M Lädt die von aspell korrigierte Datei wieder in den vi.

Related Entries:
Treppeneffekt beim Einfügen von Text im vi verhindern
vi Fenster teilen
Abkürzungen im vi benutzen
vi Makros benutzen
vi Kurzreferenz
 Permalink
Prev Next411-420/521