BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Abkürzungen im vi benutzen

Im vi(1) lassen sich Abkürzungen (abbreviations) definieren. So kann man für oft gebrauchte Wörter, Satzteile oder Sätze Abkürzungen definieren, welche dann automatisch vom vi umgewandelt werden. Abkürzungen werden mittels des ex-Befehls ab festgelegt. Dazu muss man sich zuerst im Kommandomodus befinden (dies erreicht man, indem man die Esc-Taste drückt) und danach mit dem Doppelpunkt in den ex Modus wechseln und die Abkürzung eingeben:

ab <Abkürzung> <Satz oder Wort, das die Abkürzung ersetzt>

Um eine Abkürzung zu nutzen, wird im Textmodus die Abkürzung geschrieben, wenn man dann nach der Abkürzung die Leer-oder Entertaste drückt, wird die Abkürzung durch das vorher definierte Wort oder den Satz ersetzt.

Im folgenden Beispiel wird eine Abkürzung definiert die mfg durch Mit freundlichen Grüssen ersetzt:

ab mfg Mit freundlichen Grüssen

Danach muss im vi nur noch mfg geschrieben werden, wenn man danach noch die Leertaste oder Enter drückt, wird dies ersetzt.

Oft gebrauchte Abkürzungen lassen sich auch in der .exrc oder in der /etc/vi.exrc dauerhaft speichern.

Related Entries:
Treppeneffekt beim Einfügen von Text im vi verhindern
Rechtschreibprüfung im vi
vi Fenster teilen
vi Makros benutzen
vi Kurzreferenz
 Permalink

Hostnamen einer Jail ändern

Muss der Hostname einer Jail geändert werden, so schlägt dies normalerweise mit folgender Fehlermeldung fehl:

jail# hostname <hostname>.<domain>.<tld>
hostname: sethostname: Operation not permitted

Dies liegt daran, dass im Hostsystem die security.jail.set_hostname_allowed Systemvariable standardmässig auf 0 ist:

host# sysctl -a | grep set_hostname
security.jail.set_hostname_allowed: 0

Möchte man nun den Hostnamen einer Jail ändern, muss zuerst im Hostsystem die Systemvariable geändert werden:

host# sysctl security.jail.set_hostname_allowed=1
security.jail.set_hostname_allowed: 0 -> 1

Danach den Hostnamen in der Jail mit hostname(1) ändern:

jail# hostname <hostname>.<domain>.<tld>

Danach die Systemvariable im Hostsystem wieder zurücksetzen:

host# sysctl security.jail.set_hostname_allowed=0
security.jail.set_hostname_allowed: 1 -> 0
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 (2)  Permalink

Zeit synchronisieren mit ntpd

Um die lokale Zeit mit einem NTP-Server abzugleichen, kann ntpd(8) verwendent werden. Der ntpd kann auf FreeBSD einfach über die /etc/rc.conf gestartet werden.

ntpd_enable="YES"
ntpd_sync_on_start="YES"

ntpd_sync_on_start bewirkt, dass die Zeit schon während des Aufstartens des Rechners das erste Mal abgeglichen wird. Die Konfiguration des ntpd wird in der /etc/ntp.conf festgelegt. Darin muss mindestens der NTP-Server bekanntgegeben werden. Dies kann zum Beispiel so aussehen:

server ntp.ethz.ch

Eine Übersicht über alle weiteren Konfigurationsmöglichkeiten in der /etc/ntp.conf findet man in der dazugehörigen Manpage ntp.conf(5). Alle Optionen des ntpd findet man in ntpd(8). Die Optionen können dem ntpd während des Startens mit folgendem Eintrag in der /etc/rc.conf übergeben werden:

ntpd_flags="<Optionen>"

Auf OpenBSD kann der ntpd durch folgenden Eintrag in der /etc/rc.conf.local gestartet werden:

ntpd_flags=""

Die Konfigurationsdatei für den ntpd befindet sich unter /etc/ntpd.conf. Standardmässig werden zufällig zwei Server aus einem Serverpool ausgesucht. Alle Konfigurationsmöglichkeiten findet man in der ntpd.conf(5). Die Optionen des ntpd können in der ntpd(8) nachgelesen werden und ggf. mit dem ntpd_flags Eintrag in der rc.conf.local übergeben werden.

Related Entries:
Dateien unter Free- und OpenBSD mit Flags schützen
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
 Permalink

vi Makros benutzen

Im vi(1) lassen sich oft gebrauchte vi-Kommandofolgen zu einem Makro zusammenfassen. Makros werden mittels des ex-Befehles map oder map! definiert. Werden Makros mit map erstellt, so kann das Makro aus dem Kommandomodus aufgerufen werden, map! Makros werden aus dem Textmodus aufgerufen. Um die ex-Befehle map/map! ausführen zu können, muss man sich zuerst im Kommandomodus befinden, dies erreicht man indem man im vi die Esc-Taste drückt. Danach kann mittels des Doppelpunktes in den ex-Modus umgeschaltet werden und das Makro definiert werden:

map[!] <Taste> <Kommandofolge>

Um ein Makro zu definieren, welches im Kommandomodus durch die q-Taste aufgerufen wird und an der aktuellen Cursorposition \subsection{ einfügt, danach ans Ende der Zeile springt und dort ein } einfügt, kann folgender Befehl gebraucht werden:

map q i\subsection{^[$a}

Die Kommandofolge wird dabei so eingegeben, wie wenn man das Kommando direkt im vi benutzt:

i Wechselt in den Textmodus
\subsection{ Fügt an der aktuellen Cursorposition \subsection{ ein
^[ Esc-Taste, um in den Kommandomodus zu wechseln. Muss als Ctrl + v Esc eingegeben werden
$ Springt ans Zeilenende
a Wechselt in den Textmodus, das nächste Zeichen wird nach der aktuellen Cursorposition eingefügt
} Fügt eine schliessende, geschweifte Klammer ein

Wie in diesem Beispiel gesehen wurde, müssen Steuerzeichen wie Esc, Return, Backspace mit Ctrl + v in den Makros maskiert werden.

Makros können auch auf die Funktionstasten F1 - F12 gelegt werden. Diese Tasten werden durch eine Raute # und die jeweilige Nummer symbolisiert. Folgendes Makro wird aus dem Kommandomodus mit F1 aufgerufen, fügt eine neue Zeile ein, fügt auf dieser \begin{lstlisting} ein und setzt den Cursor im Textmodus auf eine neue Zeile:

map #1 o\begin{lstlisting}^M
o Fügt eine neue Zeile nach der aktuellen Cursorposition ein und wechselt danach in den Textmodus
\begin{lstlisting} Dieser Text wird auf der neuen Zeile eingefügt
^M Return-Taste. Ein Zeilenumbruch wird vorgenommen. Wird als Ctrl + v Return eingegeben

Dieses Makro kann nur aus dem Kommandomodus aufgerufen werden. Es kann jedoch für die gleiche Taste noch ein anderes Makro definiert werden, das aber aus dem Textmodus aufgerufen wird. So kann zum Beispiel jetzt noch ein Makro auf die F1 Taste gelegt werden, dass im Textmodus aufgerufen wird, welches in den Kommandomodus wechselt und dort F1 aufruft:

map! #1 ^[^[OP
^[ Esc-Taste um in den Kommandomodus zu wechseln. Wird als Ctrl + v Esc eingegeben
^[OP F1-Taste um das Kommandomodus-Makro auf F1 auszuführen. Wird als Ctrl + v F1 eingegeben

So lassen sich natürlich interessante Sachen wie folgende zwei Makros machen:

map #1 i^[OP
map! #1 ^[^[OP

Das erste Makro wechselt durch das Drücken der F1-Taste in den Textmodus und wählt die F1-Taste, welche wiederum durch das zweite Makro in den Kommandomodus wechselt und dort die F1-Taste auswählt... Drückt man nun die F1 Taste, lässt sich dieses Spielchen dann nur noch durch ein kill -9 <vi-PID> beenden.

Eine Kurzreferenz von vi Kommandos findet man hier: http://www.chruetertee.ch/blog/archive/2005/11/26/vi-kurzreferenz.html

Anstatt Makros jedes mal wieder neu einzugeben, lassen sich diese auch in der .exrc dauerhaft speichern. Einfach die Makrozeile in die .exrc des Benutzers einfügen oder in der /etc/vi.exrc definieren, dann stehen die Makros allen Benutzern zur Verfügung.

Related Entries:
Treppeneffekt beim Einfügen von Text im vi verhindern
Rechtschreibprüfung im vi
vi Fenster teilen
Abkürzungen im vi benutzen
vi Kurzreferenz
 Permalink

Konsolenauflösung auf FreeBSD ändern

Unter FreeBSD lässt sich die Auflösung der Konsole mit vidcontrol(1) anpassen. Seit FreeBSD 6.0 lassen sich nun auch Auflösungen höher als 800x600 einstellen. Dazu müssen folgende Optionen im Kernel vorhanden sein:

options VESA
options VGA_WIDTH90
options SC_PIXEL_MODE

Danach lassen sich die unterstützten Modi anzeigen:

# vidcontrol -i mode

Möchte man nun eine Auflösung von 1280 x 1024 auf der Konsole haben, muss der passende Modus gefunden werden:

# vidcontrol -i mode | grep 1280x1024
263 (0x107) 0x0000000f G 1280x1024x8 1 8x16 0xa0000 64k 64k 0xe0000000 65472k
281 (0x119) 0x0000000f G 1280x1024x15 1 8x16 0xa0000 64k 64k 0xe0000000 65472k
282 (0x11a) 0x0000000f G 1280x1024x16 1 8x16 0xa0000 64k 64k 0xe0000000 65472k
283 (0x11b) 0x0000000f G 1280x1024x24 1 8x16 0xa0000 64k 64k 0xe0000000 65472k
292 (0x124) 0x0000000f G 1280x1024x32 1 8x16 0xa0000 64k 64k 0xe0000000 65472k

Danach kann der gewünschte Modus eingestellt werden:

# vidcontrol MODE_<Modusnummer>

Um zum Beispiel auf einem IBM T40p oder T42 eine Auflösung von 1280 x 1024 x 24 einzustellen, wäre dies:

# vidcontrol MODE_283

Die Auflösung kann auch beim Starten automatisch eingestellt werden, indem man folgende Zeile in der /etc/rc.conf einträgt:

allscreens_flags="MODE_283"

Danke an Alain, der das Ganze unter FreeBSD 6.0 auf einem T40p ausprobiert hat.

Gefunden im BSDForen.de - Wiki, ursprünglich geschrieben von Sandro und veröffentlicht unter folgenden Lizenzbestimmungen.

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 (2)  Permalink

Audio CD's von der Konsole aus bedienen

Audio CD's lassen sich bequem von der Konsole aus mit cdcontrol(1) bedienen. cdcontrol befindet sich schon im FreeBSD Basissystem, muss also nicht über die Ports installiert werden.

Mit der -f Option kann das CD-Laufwerk angegeben werden. Befindet sich das Laufwerk unter /dev/cdrom, /dev/cd0 oder /dev/acd0 so kann die -f Option weggelassen werden:

# cdcontrol [-f /dev/<laufwerk>] <Kommando> 

Um das CD-Laufwerk zu öffnen, kann folgender Befehl gebraucht werden:

# cdcontrol eject

Zeigt die Anzahl Lieder und weitere Informationen der CD an:

# cdcontrol info

Startet das Abspielen der CD. Optional kann auch noch angegeben werden, welches Lied abgespielt werden soll:

# cdcontrol play [<Liednummer>]

Spielt das nächste Lied ab:

# cdcontrol next

Spielt das vorherige Lied ab:

# cdcontrol prev

Pause:

# cdcontrol pause

Nach einer Pause weiterspielen:

# cdcontrol resume

Zeigt das aktuell abgespielte Lied an und welche Lautstärke eingestellt ist:

# cdcontrol status

Beendet das Abspielen:

# cdcontrol stop

Weitere Optionen von cdcontrol findet man in der Manpage cdcontrol(1).

Benutzt man cdcontrol als normaler Benutzer und folgende Fehlermeldung tritt auf, so muss die Berechtigung des CD-Laufwerkes angepasst werden:

# cdcontrol play
cdcontrol: /dev/acd0: Permission denied

Dies kann zum Beispiel durch einen Eintrag in der /etc/devfs.rules gemacht werden. Folgender Eintrag den bestehenden Regeln anfügen, wobei das Laufwerk (hier acd0) und die Benutzergruppe (hier users) individuell angepasst werden muss:

add path 'acd0' mode 0660 group users
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

Neue Make-Targets säubern das System nach einem Update

Auf RELENG_6, aus dem voraussichtlich in den nächsten Tagen auch der Zweig für 6.1 abgespaltet wird, befinden sich seit dem 7. Januar drei neue Make-Targets in src/Makefile die aus CURRENT eingeflossen sind:

# check-old           Gibt eine Liste mit veralteten Dateien und Verzeichnissen des Basissystemes zurück
# delete-old Löscht veraltete Dateien und Verzeichnisse interaktiv
# delete-old-libs Löscht veraltete Bibliotheken interaktiv

Nach /usr/src/Makefile sieht ein Update des Kernels und des Basissystemes auf CURRENT bzw. RELENG_6 und für das kommende 6.1-RELEASE nun wie folgt aus:

# cd /usr/src
# make buildworld
# make buildkernel KERNCONF=<KERNEL KONFIGURATIONSDATEI>
# make installkernel KERNCONF=<KERNEL KONFIGURATIONSDATEI>
# reboot <- Im Startmenü den single user Modus wählen bzw boot -s eingeben
# mergemaster -p
# make installworld
# make delete-old
# mergemaster
# reboot
# make delete-old-libs

Wichtig ist natürlich, vor jedem Update /usr/src/UPDATING gut durchzulesen!

Ein make delete-old-libs sollte jedoch nur gemacht werden, falls kein Port oder selber installierte Software eine der alten Bibliotheken benötigt, da sonst diese Programme nicht mehr ordnungsgemäss funktionieren.

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 (4)  Permalink

OpenBSD Dateiset entfernen

Möchte man auf OpenBSD ein installiertes Dateiset wieder entfernen, so kann folgender Einzeiler verwendet werden:

# tar -tzf <Dateiset> | sed -e 's/^.//' | xargs rm -d

Da die Informationen, welche Dateien entfernt werden sollen, aus den Dateisets ausgelesen werden, müssen diese verfügbar sein. Möchte man zum Beispiel auf OpenBSD 3.8 die Spiele wieder entfernen und das game38.tgz Dateiset befindet sich im aktuellen Verzeichnis, so macht man dies wie folgt:

# tar -tzf game38.tgz | sed -e 's/^.//' | xargs rm -d
 Permalink

Konsolen verwalten mit GNU Screen

Mit GNU Screen lassen sich mehrere Terminals parallel verwalten. So lassen sich zum Beispiel mit nur einer SSH Verbindung zu einem entfernten Rechner mehrere Konsolen öffnen, in diesen diverse Programme starten und einfach zwischen den Konsolen hin und herschalten. Ein weiterer sehr grosser Vorteil ist, wenn die SSH-Verbindung unterbrochen wird, so sind die verschiednene gestarteten Konsolen nicht verloren, sondern laufen in Screen weiter, so dass man die Arbeit zu einem späteren Zeitpunkt fortsetzen kann.

GNU Screen befindet sich in den Ports auf FreeBSD unter sysutils/screen auf OpenBSD unter misc/screen.

Screen wird auf der Kommandozeile gestartet:

# screen

Danach kann Screen mit verschiedenen Tastenkombinationen bedient werden:

Ctrl + a ? Zeigt alle Tastenkombinationen an
Ctrl + a c Erzeugt eine weitere Konsole in Screen
Ctrl + a n Wechselt zur nächsten Konsole
Ctrl + a p Wechselt zur vorherigen Konsole
Crtl + a A Editiert den Namen der aktuellen Konsole
Ctrl + a w Zeigt an, auf welcher Nummer sich welche Konsole befindet
Ctrl + a 0...9 Wechselt zur Konsole mit der jeweiligen Nummer
Ctrl + a N Zeigt die Nummer der aktuellen Konsole an
Ctrl + a S Splittet das aktuelle Fenster
Ctrl + a Ctrl + i Wechselt zwischen den gesplitteten Fenstern
Ctrl + a \ Beendet Screen und alle Konsolen werden auch beendet
Ctrl + a d Trennt Screen. Arbeit kann zu einem späteren Zeitpunkt an der gleichen Stelle wieder aufgenommen werden

Wurde eine Session mit Ctrl + a d geschlossen, kann man diese zu einem späteren Zeitpunkt wieder aufnehmen. Um herauszufinden, ob noch Sessions laufen, kann man folgende Option benutzen:

# screen -list

Um eine gestartete Screen-Session fortzusetzen, benutzt man die -r Option:

# screen -r

Möchten mehrere Benutzer an der gleichen Session arbeiten, so kann zusätzlich die -x Option verwendet werden, die es erlaubt, dass mehrere Benutzer die gleiche Session verwenden:

# screen -xr

Man kann der Screen-Session auch einen Namen geben, so dass man mehrere Sessions gestartet haben kann und diese dan n einfach identifizieren kann

# screen -S <Sessionname>

Hat man diese Session wieder mit Ctrl + a d geschlossen, so kann man diese zu einem späteren Zeitpunkt wiefolgt wieder aufnehmen:

# screen -r <Sessionname>

Eine ausführliche Beschreibung aller Optionen und Tastenkombinationen findet man in der Manpage screen(1).

Comments (1)  Permalink

Einen schnellen CVSup-Server finden mit fastest_cvsup

Um das Aktualisieren, von z.B. des Portbaums, mit CVSup oder csup zu beschleunigen, kann man mit fastest_cvsup(7) zuerst den schnellsten CVSup-Server herausfinden. fastest_cvsup findet man im FreeBSD Portbaum unter sysutils/fastest_cvsup.

Um zum Beispiel den schnellsten der schweizer- und deutschen CVSup-Server zu finden, benutzt man fastest_cvsup wie folgt:

# fastest_cvsup -c ch,de
>> Querying servers in countries: de ch
--> Connecting to cvsup.de.freebsd.org [212.19.57.134]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 25.36 ms
--> Connecting to cvsup.ch.freebsd.org [217.8.192.70]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 24.36 ms
--> Connecting to cvsup2.de.freebsd.org [213.238.33.226]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 26.15 ms
--> Connecting to cvsup3.de.freebsd.org [131.159.72.30]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 36.55 ms
--> Connecting to cvsup4.de.freebsd.org [212.19.57.134]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 25.15 ms
--> Connecting to cvsup5.de.freebsd.org [195.30.6.180]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 32.89 ms
--> Connecting to cvsup6.de.freebsd.org [62.206.253.13]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 41.53 ms
--> Connecting to cvsup7.de.freebsd.org [194.162.162.209]...
- server replied: OK 17 0 SNAP_16_1g CVSup server ready
- time taken: 27.28 ms
--> Connecting to cvsup8.de.freebsd.org [212.118.165.142]...
- server replied: OK 17 0 SNAP_16_1h CVSup server ready
- time taken: 30.45 ms

>> Speed Daemons:
- 1st: cvsup.ch.freebsd.org 24.36 ms
- 2st: cvsup4.de.freebsd.org 25.15 ms
- 3st: cvsup.de.freebsd.org 25.36 ms

Damit beim Ausführen von CVSup jedesmal der schnellste CVSup-Server gesucht wird, kann man zum Beispiel folgendes Hilfsskript verwenden:

#!/bin/sh
if SERVER=`fastest_cvsup -Q -c ch,de`; then
cvsup -g -L 2 -h $SERVER <Pfad zum supfile>
fi

Für csup verwendet man dies hier:

#!/bin/sh
if SERVER=`fastest_cvsup -Q -c ch,de`; then
csup -L 2 -h $SERVER <Pfad zum supfile>
fi

Mehr Informationen zu fastes_cvsup findet man auf http://fastest-cvsup.sourceforge.net/. Alle Optionen von fastest_cvsup kriegt man mit fastest_cvsup -h.

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
1-10/10