BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Letzte Benutzeranmeldung herausfinden

Möchte man herausfinden wann sich ein Benutzer das letzte Mal angemeldet hat, kann dazu lastlogin verwendet werden:

# lastlogin
axxxxxx    pts/1    1xx.xxx.xxx.xxx        Mon Mar 19 09:48:40 2012
beat       pts/1    1xx.xxx.xxx.xxx        Mon Aug 27 13:27:29 2012
dxxxxxx    pts/0    1xx.xxx.xxx.xxx        Wed Jul 25 12:41:17 2012
mxxxxxx    pts/5    2xx.xxx.xxx.xxx        Sun May  2 11:23:57 2010
rxxxxxx    pts/2    1xx.xxx.xxx.xxx        Fri Jun 22 13:11:34 2012
wxxxxxx    pts/0    2xx.xxx.xxx.xxx        Fri Aug 17 14:55:39 2012

Standardmässig werden die Benutzer anhand des Benutzernamens sortiert. Sollen die Benutzer anghand des letzten Logins sortiert werden, so kann dazu die -t Option verwendet werden:

# lastlogin -t
beat       pts/1    1xx.xxx.xxx.xxx        Mon Aug 27 13:27:29 2012
wxxxxxx    pts/0    2xx.xxx.xxx.xxx        Fri Aug 17 14:55:39 2012
dxxxxxx    pts/0    1xx.xxx.xxx.xxx        Wed Jul 25 12:41:17 2012
rxxxxxx    pts/2    1xx.xxx.xxx.xxx        Fri Jun 22 13:11:34 2012
axxxxxx    pts/1    1xx.xxx.xxx.xxx        Mon Mar 19 09:48:40 2012
mxxxxxx    pts/5    2xx.xxx.xxx.xxx        Sun May  2 11:23:57 2010

Auf FreeBSD ist lastlogin standardmässig im Basissystem vorhanden. Mehr Informationen zu lastlogin findet man in der Manpage lastlogin(8)

Comments (6)  Permalink

Zeilen automatisch umbrechen

Mit Hilfe von fold lassen sich lange Zeilen automatisch umbrechen. Mit der -w Option wird die maximale Anzahl Zeichen pro Zeile angegeben:

# cat /tmp/datei
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# fold -w 20 /tmp/datei
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaa

Verwendet man zusätzlich die -s Option so werden lange Zeilen zusätzlich beim letzten Leerzeichen automatisch umgebrochen:

# cat /tmp/datei1 
aaaaaaaa aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
# fold -w 20 /tmp/datei1
aaaaaaaa aaaaaaaaaaa
aaaaa aaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaa aa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaa
# fold -sw 20 /tmp/datei1
aaaaaaaa 
aaaaaaaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaa 
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaa

Auf FreeBSD ist fold standardmässig im Basissystem vorhanden. Mehr Informationen zu fold findet man in der Manpage fold(1)

 Permalink

Gespeicherte Optionen nach OptionsNG konvertieren

Mit OptionsNG werden die ausgewählten Ports-Optionen in einem anderen Format gespeichert. Möchte man die ausgewählten und gespeicherten Optionen in das neue Format konvertieren kann dazu das Skript /usr/ports/Tools/scripts/options2ng.sh verwendet werden. Dabei wird ein Backup mit den alten Dateien unter /tmp gespeichert:

# cat /var/db/ports/apache22/options
_OPTIONS_READ=apache-2.2.19
WITHOUT_THREADS=true
WITHOUT_MYSQL=true
WITHOUT_PGSQL=true
[...]
# /usr/ports/Tools/scripts/options2ng.sh -p
tar: Removing leading '/' from member names
Converting /var/db/ports/apache22/options
Converting /var/db/ports/apr/options
[...]
# cat /var/db/ports/apache22/options 
_OPTIONS_READ=apache-2.2.19
OPTIONS_FILE_SET+=AUTH_BASIC
OPTIONS_FILE_SET+=AUTHN_FILE
OPTIONS_FILE_SET+=AUTHZ_HOST
[...]
#  ls -l /tmp/optionsbackup.tar.gz.*
-rw-------  1 root  wheel  14062 11 Aug 20:08 /tmp/optionsbackup.tar.gz.PUB
Related Entries:
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

Identische Dateien finden

Mit Hilfe von ua lassen sich identische Dateien finden. Im FreeBSD-Portbaum findet man ua unter sysutils/ua:

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

Benutzer von pkgng kénnen ua wie folgt installieren:

# pkg install ua

Nun kann zum Beispiel die Ausgabe von find(1) mit ua verarbeitet werden und alle identischen Dateien werden angezeigt:

# find . -type f | ua -
./dev/portscvs/irc/CVS/Repository ./backup/dev/ports/irc/CVS/Repository
./dev/portscvs/www/CVS/Repository ./backup/dev/ports/www/CVS/Repository
[...]

Auch ist es möglich mit der -w Option Leerzeichen zu ignorieren:

# cat datei1 datei2
hallo velo
hallovelo
# find . -type f | ua -w - 
./datei1 ./datei2

Mit der -i Option wird die Gross-/Kleinschreibung ignoriert:

# cat datei1 datei2
hallo velo
hallo Velo
# find . -type f | ua -i -
./datei1 ./datei2

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

 Permalink

Paralleles Ausführen eines Shell-Skriptes verhindern

Soll verhindert werden, dass ein Shell-Skript mehrere Male parallel gestartet wird, kann dazu shlock verwendet werden. Im FreeBSD-Portbaum findet man shlock unter sysutlis/shlock:

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

Benutzer von pkgng können shlock wie folgt installieren:

# pkg install shlock

Nun kann mit shlock ein Shell-Skript mit einer Lockdatei geschützt werden:

# vi lock.sh
LOCK=/var/run/my.lock
trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
if shlock -p $$ -f ${LOCK} ; then
        sleep 60
else
        echo "Locked by `cat ${LOCK}`"
fi

Versucht man nun das Shell-Skript zweimal zu starten, wird dies von shlock verhindert:

# sh lock.sh &
[1] 84001
# sh lock.sh
Locked by 84001

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

Comments (1)  Permalink

Ports-Subversion-Repository spiegeln

Letztes Wochenende gab es das erste Mal seit dem chruetertee.ch existiert keinen Befehl der Woche. Grund war die Umstellung des FreeBSD-Portbaumes von CVS auf Subversion was mich das letzte Wochenende und die Woche davor ziemlich ausgelastet hat so das keine Zeit für einen Befehl der Woche da war.

Für Benutzer ändert sich nach der Umstellung nichts, falls man aber cvsup(1) oder csup(1) zum aktualisieren des Portbaumes verwendet sollte man allerdings in Betracht ziehen langsam auf portsnap(8) zu wechseln. CVS und CVSup ist zwar im Moment noch unterstützt, wird aber irgendwann in der Zukunft abgeschaltet, natürlich erst nachdem dies vorgängig angekündigt wurde.

Verwendete man bis anhin CVS um Patches gegen den Portbaum zu erstellen so kann dies nun gegen Subversion gemacht werden. Dazu muss zuerst Subversion in installiert werden:

# cd /usr/ports/devel/subversion && make install clean

Das Ports-Subversion-Repository kann nun wie folgt ausgecheckt werden:

# svn co svn://svn.FreeBSD.org/ports/head ports

Möchte man das ganze Ports-Repository spiegeln, zum Beispiel man einen eigenen Repository-Server anbieten will, so kann das initiale Repository von dem nächsten FTP-Server heruntergelanden werden:

# mkdir svnsync
# cd svnsync
# fetch ftp://ftp.ch.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-ports-r300897.tar.xz
# tar xf svnmirror-ports-r300897.tar.xz

Ist das Repository entpackt (Achtung ca. 16 GB) kann es aufsynchronisiert werden:

# svnsync sync file:///pfad/zu/svnsync/ports
Übertrage Daten .
Revision 300898 übertragen.
Eigenschaften für Revision 300898 kopiert.
Übertrage Daten .
Revision 300899 übertragen.
Eigenschaften für Revision 300899 kopiert.
Übertrage Daten .
Revision 300900 übertragen.
Eigenschaften für Revision 300900 kopiert.
Übertrage Daten ..
Revision 300901 übertragen.
Eigenschaften für Revision 300901 kopiert.
Übertrage Daten .
Revision 300902 übertragen.
[...]
Übertrage Daten ..
Revision 301267 übertragen.
Eigenschaften für Revision 301267 kopiert.

Anschliessend kann man seine Arbeitskopieren vom lokalen Repositroy holen:

# svn co file:///pfad/zu/svnsync/ports/head ports

Auch ist es möglich das Repository via svnserve(8) übers Netzwerk zugänglich zu machen. Mehr Informationen zu Subversion und den FreeBSD-Ports findet man im Ports Subversion Primer im FreeBSD Wiki. Mehr Informationen zu Subversion findet man in den Manpages svn(1), svnync(1) und svnserve(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

Logdateien auf verschiedenen Rechnern gleichzeitig betrachten

Mit Hilfe von monkeytail kann ein tail -f auf verschiedene Dateien gleichzeitig angewendet werden und das auch auf verschiedenen Rechnern. Im FreeBSD-Portsbaum findet man monkeytail unter sysutils/monkeytail:

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

Benutzer von pkgng können monkeytail wie folgt installieren:

# pkg install monkeytail

Nun können die verschiedenen Logdateien angegeben werden die betrachtet werden sollen:

# mtail /var/log/messages /var/log/auth.log
Tailing /var/log/messages
Tailing /var/log/auth.log
Jul  6 06:27:41 www ntpd[55007]: kernel time sync status change 6001
Jul  6 06:36:13 www ntpd[55007]: kernel time sync status change 2001
Jul  7 03:34:27 www sshd[70336]: error: PAM: authentication error for illegal user admin from 113.162.xxx.yyy
Jul  7 03:34:27 www sshd[70336]: error: PAM: authentication error for illegal user admin from 113.162.xxx.yyy
tail: /var/log/auth.log: Permission denied

Hat man keine Rechte eine Datei zu betrachten, so kann ein + vor dem Pfad angegeben werden und danach wird sudo(8) verwendet um die Datei lesen zu können:

# mtail /var/log/messages +/var/log/auth.log
Tailing /var/log/messages
Sudo password for [beat] on [www]: 
Tailing /var/log/auth.log

Auch ist es möglich gleichzeitig Logdateien von verschiedenen Rechner anzuschauen. Dazu muss man sich auf den entfernten Rechner per SSH einloggen können. Werden für mindestens drei Sekunden keine Logdaten geschrieben so wird dies mit 5 Leerzeilen visualisiert:

# mtail /var/log/messages +/var/log/auth.log test.chruetertee.ch:/var/log/messages
[...]
Jul  7 11:22:42 test sudo:     beat : TTY=pts/1 ; PWD=/usr/home/beat ; USER=root ; COMMAND=/usr/bin/su -




Jul  7 11:23:27 www beat: test mit logger
Jul  7 11:23:29 www last message repeated 2 times




Jul  7 11:24:05 test beat: test

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

 Permalink

sysinstall-Ersatz für neuere FreeBSD-Versionen

Seit FreeBSD 9.0 ist sysinstall nicht mehr im Basissystem vorhanden. Möchte man trotzdem nicht auf ein dialog-basiertes Konfigurationsprogramm verzichten so befindet sich seit kurzem bsdconfig unter sysutils/bsdconfig im FreeBSD-Portsbaum:

# /usr/ports/sysutils/bsdconfig && make install clean

Benutzer von pkgng können bsdconfig wie folgt installieren:

# pkg install bsdconfig

Nun kann bsdconfig als root gestartet werden:

# bsdconfig

Nun startet ein dialog-basiertes Konfigurationsmenü in dem man die Dokumentation nachträglich installieren, ein neues root-Passwort setzten, Disks, Maus, Benutzer und Gruppen verwalten, Konsolen und Netzwerk-Einstellungen vornehmen, die Zeitzone und Sicherheitseinstellungen setzen, und rc.conf-Einstellungen ändern kann.

Weiter ist es möglich direkt von der Kommandozeile ein Untermenü aufzurufen. Alle verfügbaren Untermenüs können mit der -h Option ausgegeben werden:

# bsdconfig -h
Usage:
	bsdconfig [-h]
	bsdconfig command [-h]
	bsdconfig [OPTIONS] [command [OPTIONS]]

OPTIONS:
	-h         Print usage statement and exit.
	-S         Secure X11 mode (implies `-X'). As root, always prompt-for
	           and validate sudo(8) username/password before starting.
	-X         Use Xdialog(1) in place of dialog(1).

COMMANDS:
	console             defaultrouter       diskmgmt            docsinstall         dot              
	groupadd            groupdel            groupedit           groupmgmt           hostname         
	kern_securelevel    mouse               mouse_disable       mouse_enable        mouse_flags      
	mouse_port          mouse_type          nameservers         netdev              networking       
	password            security            startup             startup_misc        startup_rcadd    
	startup_rcconf      startup_rcdelete    startup_rcvar       syscons_font        syscons_keymap   
	syscons_repeat      syscons_saver       syscons_screenmap   syscons_ttys        timezone         
	ttys                useradd             userdel             useredit            usermgmt
# bsdconfig startup

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

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
Comments (1)  Permalink

Systeminformationen beim Einloggen anzeigen

Möchte man zum Beispiel nach dem Anmelden mit SSH an einem Rechner Informationen über das System angezeigt kriegen, kann dazu bsdinfo verwendet werden. Im FreeBSD-Portbaum findet man bsdinfo unter sysutils/bsdinfo:

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

Benutzer von pkgng können bsdinfo wie folgt installieren:

# pkg install bsdinfo

Wird nun bsdinfo ausgeführt, wird das FreeBSD-Logo sowie einige Informationen zum System angezeigt:

# bsdinfo

  ```                        `
 s` `.....---.......--.```   -/      OS: FreeBSD i386
 +o   .--`         /y:`      +.      Hostname: tinderbox.chruetertee.ch
  yo`:.            :o      `+-       Kernel: 10.0-CURRENT
   y/               -/`   -o/        Uptime: 4:24
  .-                  ::/sy+:.       Processes: 82
  /                     `--  /       RAM: -1035M / -212M
 `:                          :`      CPU: Intel(R) Xeon(TM) CPU 2.80GHz
 `:                          :`      Shell: csh
  /                          /
  .-                        -.
   --                      -.
    `:`                  `:`
      .--             `--.
         .---.....----.

Möchte man nun bsdinfo beim Anmelden ausführen, kann es in der /etc/csh.cshrc (für (t)csh-Benutzer) oder in der /etc/profile (für (ba)sh-Benutzer) eingetragen werden.

 Permalink

DNS-Anfragen in Echtzeit beobachten

Möchte man zum Beispiel auf einem DNS-Server die DNS-Anfragen in Echtzeit beobachten so kann dazu dnstop verwendet werden. Im FreeBSD-Portbaum findet man dnstop unter dns/dnstop:

# cd /usr/ports/dns/dnstop && make install clean

Benutzer von pkgng können dnstop wie folgt installieren:

# pkg install dnstop

Nun kann mit dnstop an einer Netzwerkschnittstelle gehorcht werden und die einkommenden DNS-Abfragen werden angezeigt:

# dnstop em0
Queries: 0 new, 10 total         Sat Jun 16 22:50:31 2012

Sources            Count      %   cum%
-------------- --------- ------ ------
94.247.xxx.yyy         6   60.0   60.0
91.192.xxx.yyy         2   20.0   80.0
217.150.xxx.yy         1   10.0   90.0
88.198.xxx.yyy         1   10.0  100.0

Drückt man nun s wird die Quell-Adresse angezeigt, mir d die Ziel-Adresse. Mit der t Taste kann der Typ der Anfrage angezeigt werden und mit r den Antwort-Code. Mit Ctrl+x beendet man dnstop. Mehr Informationen und alle Optionen von dnstop findet man in der Manpage dnstop(8).

 Permalink
Next1-10/325