BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Leere Verzeichnisse und alte Symlinks löschen

Mit der Zeit können sich auf einem System leere Verzeichnisse und symbolische Links, die auf nicht mehr existierende Dateien verweisen, ansammeln. Mit cleanlinks(1) können diese automatisch gelöscht werden. cleanlinks sucht im aktuellen Verzeichnis nach solchen Daten und durchsucht auch rekursiv alle Unterverzeichnisse und löscht sie.

Beispiel:

# mkdir /tmp/test
# cd /tmp/test/
# mkdir leer
# mkdir voll
# touch voll/datei
# ln -s a b
# ln -s voll/datei hallo
# pwd
/tmp/test
# ls -l
total 4
lrwxr-xr-x 1 beat wheel 1 27 Mai 09:59 b@ -> a
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 leer/
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

Im Verzeichnis /tmp/test existiert nun ein leeres Verzeichnis leer und ein Symlink b, der auf eine nicht existierende Datei a verweist.  Führen wir nun cleanlinks in diesem Verzeichnis test aus:

# cleanlinks 
./b is a dangling symlink, removing
Removing empty directories ...
./leer
# ls -l
total 2
lrwxr-xr-x 1 beat wheel 10 27 Mai 09:59 hallo@ -> voll/datei
drwxr-xr-x 2 beat wheel 512 27 Mai 09:59 voll/

cleanlinks ist Teil der XFree86 und X.Org Projekte. Auf FreeBSD befindet sich cleanlinks im imake Port.

 Permalink

make targets für den FreeBSD Portbaum

Für den FreeBSD Portbaum bestehen verschiedene make targets. Diese können im Verzeichnis eines Ports angewendet werden, zum Beispiel /usr/ports/www/fluxcms, oder wo sich der Portbaum auch immer befindet.

Die meist gebrauchten targets sind vermutlich make install und make deinstall, wobei bei einem make deinstall Vorsicht geboten ist, da es nicht auf Abhängigkeiten achtet. Es gibt aber noch viele andere targets, die zum Teil nicht so oft gebraucht werden, jedoch manchmal sehr nützlich sind.

Möchte man nur die Quelldateien des Ports herunterladen, kann man dies wie folgt tun:

# make fetch

Will man die Quelldateien des Ports und die seiner Abhängigkeiten herunterladen, nimmt man folgendes target:

# make fetch-recursive

Zum Herausfinden, welche Dateien heruntergeladen werden würden, sie jedoch noch nicht herunterladen will, kann man eine der folgenden targets nehmen, je nachdem ob man die Dateien der Abhängigkeiten auch anzeigen lassen will:

# make fetch-list
# make fetch-recursive-list

Die Abhängigkeiten eines Ports lassen sich mit folgendem target herausfinden:

# make all-depends-list

Will man nur die Abhängigkeiten sehen, die der Port zum Laufen braucht, das heisst ohne die Abhängigkeiten die es braucht um den Port zu bauen, so kann man dies wie folgt tun:

# make run-depends-list

Einige Ports lassen sich mit einem dialog(1) konfigurieren. Der Dialog lässt sich durch folgende targets für nur den einen Port oder auch für alle Abhängigkeiten aufrufen:

# make config
# make config-recursive

Um die aktuelle Konfiguration anzusehen, kann man folgende targets benutzen:

# make showconfig
# make showconfig-recursive

Um die Konfigurationen zu löschen, stehen diese targets zur Verfügung:

# make rmconfig
# make rmconfig-recursive

Ein Portverzeichnis lässt sich wie folgt von temporären Daten säubern, die zum Bauen eines Ports benötigt werden:

# make clean

Will man auch noch die Quelldateien löschen, kann man das wie folgt tun:

# make distclean

Zum Säubern des Portverzeichnisses sollte man sich auch portsclean(1) anschauen.

Sucht man nach einem Port, kann man entweder portsearch oder make search in /usr/ports benutzen.

# cd /usr/ports/ && make search
The search target requires a keyword parameter or name parameter,
e.g.: "make search key=somekeyword"
or "make search name=somekeyword"

Für mehr Informationen zum Portbaum empfiehlt sich das Kapitel 4 des FreeBSD Handbuches.

Alle make targes sind in ports(7) beschrieben.

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

Auf der Kommandozeile ans Beenden der Arbeit erinnert werden

Arbeitet man auf der Kommandozeile und hat nur noch eine gewisse Zeit zur Verfügung, bevor man die Arbeit beenden sollte, kann man mit leave(1) sichergehen, dass man die Zeit nicht vergisst.

Wenn man weiss, man sollte zu einem bestimmten Zeitpunkt seine Arbeit beenden, so kann man leave mit der genauen Uhrzeit verwenden:

# leave [<hh>]<mm>

Für 11:00 wäre dies:

# leave 1100
Alarm set for Fr 12 Mai 2006 11:00:00 CEST. (pid 969)

Han man nur noch einen gewissen Zeitraum zur Verfügung, so kann man leave mit einem Plus verwenden:

# leave +[<hh>]<mm>

Für eine Viertelstunde wäre dies leave +15 für eine Stunde und eine Minute ist dies leave +101.

5 Minuten bevor die Zeit abläuft, wird eine Warnung ausgegeben:

You have to leave in 5 minutes.

Auch eine Minute vor Ablauf der Zeit wird man nochmals darauf hingewiesen, dass man die Arbeit langsam abschliessen sollte:

Just one more minute!

Ist die Zeit abgelaufen, wird man immer wieder mit folgender Nachricht daraufhingewiesen, dass man jetzt doch gehen sollte:

Time to leave!

Jetzt hat man zwei Möglichkeiten, entweder wirklich zu gehen oder den leave-Prozess z.B. mit kill(1) zu beenden. Für das erste Beispiel wäre dies:

kill 969
 Permalink

Meldungen an eingeloggte Benutzer senden

Möchte man an andere eingeloggte Benutzer eine Nachricht senden, so kann man zuerst mit w(1) herausfinden, wer zur Zeit eingeloggt ist.

# w
6:08pm up 18 mins, 5 users, load averages: 0,02 0,15 0,15
USER TTY FROM LOGIN@ IDLE WHAT
test v0 - 6:07pm - -
beat p1 :0.0 5:51pm 1 ssh chruetertee.ch
beat p2 :0.0 6:07pm - w
beat p3 :0.0 5:59pm 6 -
beat p4 :0.0 6:04pm 3 csh

Möchte man nun eine Nachricht an einen Benutzer schicken, so kann man dies mit write(1) tun. Zum Starten gibt man

# write <Benutzer>

ein. Anschliessend kann man die Nachricht eingeben und diese mit Ctrl + D senden.

# write test
Dies ist ein Test
^D

Der Empfänger erhält nun die Nachricht:

Message from beat@daedalus.network.local on ttyp2 at 18:28 ...
Dies ist ein Test
EOF

Möchte man die Nachricht an ein bestimmtes Terminal senden, so kann man dies wie folgt tun:

# write <Benutzer> [<tty>]

Mit mesg(1) kann man einstellen, ob man Nachrichten von anderen Benutzern empfangen will oder nicht. Ein mesg n zeigt keine Nachrichten von anderen Benutzern an, ein mesg y lässt Meldungen zu.

Möchte man eine Meldung an alle Benutzer senden, so kann man dies mit wall(1) machen:

# echo 'Hallo zusammen' | wall

Die anderen Benutzer erhalten nun folgende Meldung:

Broadcast Message from beat@daedalus.network.local                             
(/dev/ttyp3) at 18:41 CEST...

Hallo zusammen
Comments (2)  Permalink

Terminal sperren

Arbeitet man an einem Terminal und möchte seine Arbeit kurz unterbrechen, sich aber nicht ausloggen, so kann man mit lock(1) das Terminal sperren. lock ist sowohl in FreeBSD als auch in OpenBSD im Basissystem vorhanden. Gibt man einfach lock im Teminal ein, so wird man zweimal nach einem Schlüssel gefragt, mit dem man das Terminal für 15 Minuten sperren kann.

# lock
Key:
Again:
lock: /dev/ttyp1 on daedalus.network.local. timeout in 15 minutes.
time now is Thu Apr 27 22:57:15 CEST 2006

Verwendet man lock -p so wird nicht nach einem Schlüssel gefragt, sondern das Terminal kann mit dem Benutzerpasswort wieder entsperrt werden. Mit der -n Option wird das Terminal nach 15 Minuten nicht automatisch wieder entsperrt.

Wird auf FreeBSD zusätzlich die -v Option verwendet, so kann auch das virtuelle Terminal (mit Ctrl + Alt + Fx) nicht gewechselt werden, bis das Terminal entsperrt wird.

Verwendet man eine graphische Benutzeroberfläche und hat den xscreensaver installiert, so kann man auch die graphische Oberfläche mit folgendem Befehl sperren:

# xscreensaver-command -lock

Möchte man xscreensaver nicht installieren, so kann man die graphische Oberfläche auch mit xlock(1) sperren. Auf OpenBSD ist xlock bereits im Dateiset der graphischen Oberfläche enthalten, auf FreeBSD kann man xlock über den x11/xlockmore Port installieren.

 Permalink

Befehle und Manpages finden mit apropos

Sucht man eine Manpage oder einen Befehl, weiss aber nicht genau wie er heisst, so kann einem apropos(1) weiterhelfen. apropos durchsucht die whatis Datenbank, welche wiederum aus den Namen und den Kurzbeschreibungen der Manpages besteht, und sucht darin nach dem Begriff. apropos kann ganz einfach verwendet werden:

# apropos <Begriff>

Möchte man zum Beispiel nach FreeBSD-Jails suchen, so verwendet man apropos wiefolgt:

# apropos jail
jail(2), jail_attach(2) - imprison current process and future descendants
jail(8) - imprison process and its descendants
jexec(8) - execute a command inside an existing jail
jls(8) - list active jails
prison_check(9) - determine if two credentials belong to the same jail

Dadurch dass man für den Begriff auch Regular Expressions verwenden kann, kann man zum Beispiel wie folgt nach Manpages suchen, die mit "port" beginnen:

# apropos ^port
ports(7) - contributed applications
portsnap(8) - fetch and extract compressed snapshots of the ports tree
portsnap.conf(5) - configuration file for portsnap(8)
port(1) - FreeBSD Port Tools front-end script
portaudit(1) - system to check installed packages for known vulnerabilities
portcvsweb(1) - a tool to instantly browse a history via CVSweb or FreshPorts.org
portdowngrade(1) - retrieve earlier port versions via CVS
portlint(1) - a verifier for port directories
portsclean(1) - a tool to clean ports/packages garbage
portsdb(1), ports_glob(1) - tools to manage and look up the ports database file
porttools(5), ~/.porttools(5) - FreeBSD Port Tools configuration file
portupgrade(1), portinstall(1) - tools to upgrade installed packages or install new ones via ports or packages
portversion(1) - a tool to compare the versions of installed packages with the ones in the ports tree

Mehr Informationen zu apropos in der Manpage apropos(1) und zu Regular Expressions in der Manpage von grep(1).

 Permalink

Kalender für die Kommandozeile

Passend zu Ostern dieser Befehl der Woche:

cal, ncal -- displays a calendar and the date of easter

cal(1) und ncal(1) befinden sich bereits im FreeBSD Basissystem. Auf OpenBSD ist nur cal(1) verfügbar. Wird cal ohne Optionen aufgerufen, so wird der aktuelle Kalendermonat angezeigt. ncal verwendet eine alternative Darstellung.

# cal
April 2006
So Mo Di Mi Do Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

# ncal
April 2006
Mo 3 10 17 24
Di 4 11 18 25
Mi 5 12 19 26
Do 6 13 20 27
Fr 7 14 21 28
Sa 1 8 15 22 29
So 2 9 16 23 30

Für ncal lassen sich zusätzlich mit der -w Option die Wochennummer anzeigen.

Mit der -m Option lässt sich ein bestimmter Monat anschauen. Möchte man sich zum Beispiel den Oktober anschauen, so verwendet man cal wie folgt:

# cal -m 10

Mit der -y Option lässt sich ein bestimmtes Jahr anschauen. Die -e Option von ncal(1) zeigt das Datum von Ostern des aktuellen Jahres an:

# ncal -e
16 April 2006

Kombiniert man die -y und die -e Option, so zeigt ncal das Datum von Ostern des gewählten Jahres an.

Alle weiteren Optionen von cal und ncal findet man in der Manpage cal(1).

Comments (1)  Permalink

WebDAV Client für die Kommandozeile

Möchte man auf Daten zugreifen, die per WebDAV freigegeben sind, so kann man dies auch auf der Kommandozeile mit cadaver machen. Auf FreeBSD befindet sich cadaver unter www/cadaver, auf OpenBSD befindet es sich unter net/cadaver. Auf FreeBSD installiert man cadaver wie folgt:

# cd /usr/ports/www/cadaver && make install clean

Danach kann man sich mit der WebDAV-Ressource verbinden und gegebenenfalls Authentifizieren:

# cadaver http[s]://<hostname>[:<port>]/<pfad>
Authentication required for Ressource on server `WebDAV Server':
Username: <Benutzername>
Password: <Passwort>

Danach steht ein Prompt zur Verfügung:

dav:/<pfad>/>

Hier stehen einem verschiedene Kommandos zur Auswahl, die man auch von verschiedenen Kommandozeilen ftp/sftp Clients her kennt:

dav:/<pfad>/> help
Available commands:
ls cd pwd put get mget mput
edit less mkcol cat delete rmcol copy
move lock unlock discover steal showlocks version
checkin checkout uncheckout history label propnames chexec
propget propdel propset search set open close
echo quit unset lcd lls lpwd logout
help describe about
Aliases: rm=delete, mkdir=mkcol, mv=move, cp=copy, more=less, quit=exit=bye

Hier die wichtigsten Kommandos:

pwd Zeigt den Pfad auf dem WebDAV Server an

lpwd Zeigt den lokalen Pfad an

Mit cd und lcd werden die Verzeichnisse auf dem Server und auf dem lokalen Rechner gewechselt.

ls Listet den Inhalt des aktuellen Verzeichnisses auf dem WebDAV Server auf

lls Listet den Inhalt des aktuellen Verzeichnisses auf dem lokalen Rechner auf

get <Datei> Läd die Datei vom aktuellen Verzeichnis auf dem Server ins lokale Verzeichnis auf dem Rechner

put <Datei> Läd die Datei vom lokalen Verzeichnis auf dem Rechner ins aktuelle Verzeichnis auf dem WebDAV Server

Mit mget und mput können mehrere Dateien auf einmal hinauf- oder heruntergeladen werden.

Mit close wird die aktuelle Verbindung getrennt und mit quit wird cadaver beendet.

Alle Kommandos können in der Manpage cadaver(1) nachgelesen werden.

 Permalink

Quellcode mit csup anstatt CVSup aktualisieren

Seit kurzem gibt es eine unter der BSD-Lizenz stehende Alternative zu CVSup mit der man zum Beispiel den Portbaum oder den System-Quellcode aktualisiernen kann: csup

Da csup in C geschrieben ist und deshalb keine zusätzlichen Abhängigkeiten in den Ports hat, gleich CVSup und das zum Bauen von CVSup benötigte ezm3 deinstallieren und csup installieren:

# pkg_deinstall -d -v cvsup-without-gui-16.1h_2
# pkg_deinstall -d -v ezm3-1.2
# cd /usr/ports/net/csup/ && make install clean

Die Sup-Dateien von CVSup können auch mit csup verwendet werden. Das Aktualisieren ist ähnlich wie bei CVSup:

# csup -L 2 <Pfad zur Sup-Datei>

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

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

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
Prev Next291-300/325