BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Zwei CSV-Dateien miteinander vergleichen

Mit Hilfe von csvdiff lassen sich zwei CSV-Dateien vergleichen und deren Unterschiede übersichtlich darstellen. Im FreeBSD Portbaum findet man csvdiff unter textproc/csvdiff:

# cd /usr/ports/textproc/csvdiff && make install clean

Mit der -e Option wird die ursprüngliche, mit der -a Option die veränderte CSV-Datei angegebenen. Möchte man die Spaltennamen anzeigen lassen, erstellt man eine weitere CSV-Datei in der auf einer Zeile die Spaltennamen aufgeführt sind. Diese Datei kann danach mit der -c Option an csvdiff übergeben werden. Standardmässig wird als Trennzeichen ein Komma verwendet, möchte man ein anderes Trennzeichen angeben, kann dies mit der -s Option gemacht werden:

# /usr/local/bin/csvdiff -e kalender.csv -a kalender_neu.csv -c spalten.csv

-------------------------------------------------------------------------------

Record no: 002 is different:
 Actual   line: "1","11/26/05","07:00:00 am","11/27/05","10:00:00 pm","False","False","","","null","null","null","True"
 Expected line: "1","11/26/05","08:00:00 am","11/27/05","10:00:00 pm","False","False","","","null","null","null","True"
  Difference in field no.: 03 - field name: "Start Time"
   Actual  : "07:00:00 am"
   Expected: "08:00:00 am"

-------------------------------------------------------------------------------

Record no: 106 is different:
 Actual   line: "3","11/10/06","01:00:00 am","11/13/06","01:00:00 am","False","False","","","null","","Mailand","True"
 Expected line: "3","11/10/06","01:00:00 am","11/13/06","01:00:00 am","True","False","","","null","","Mailand","True"
  Difference in field no.: 06 - field name: "All day event"
   Actual  : "False"
   Expected: "True"

-------------------------------------------------------------------------------

Record no: 306 is different:
 Actual   line: "6","10/18/08","12:00:00 am","10/20/08","12:00:00 am","True","False","","","null","null","null","True"
 Expected line: "6","10/18/08","12:00:00 am","10/20/08","12:00:00 am","True","False","","","null","null","null","False"
  Difference in field no.: 13 - field name: "Private"
   Actual  : "True"
   Expected: "False"

-------------------------------------------------------------------------------

Record no: 401 is different:
 Actual   line: "E","09/17/09","12:00:00 am","09/21/09","12:00:00 am","True","False","","","null","null","null","False"
 Expected line: "e","09/17/09","12:00:00 am","09/21/09","12:00:00 am","True","False","","","null","null","null","False"
  Difference in field no.: 01 - field name: "Subject"
   Actual  : "E"
   Expected: "e"

===============================================================================

Following lines exists only in actual result kalender_neu.csv:

-------------------------------------------------------------------------------

 Actual 412 line 413 : "Fut","??/??/10","","","","True","False","","","null","null","null","True"

Mehr Informationen und weitere Optionen zu csvdiff erhält man mit der -h Option:

# csvdiff -h
 Permalink

PDF Dateien auf der Kommandozeile bearbeiten

Mit Hilfe von pdfjam können PDF-Dateien auf der Kommandozeile bearbeitet werden. Im FreeBSD Portbaum findet man pdfjam unter print/pdfjam:

# cd /usr/ports/print/pdfjam && make install clean

Mit Hilfe von pdfjoin können mehrere PDF-Dateien aneinandergehängt und in einer neuen PDF-Datei gespeichert werden:

# ls -l *pdf
-rw-r--r--  1 test  wheel   15860 22 Aug 20:30 dokument1.pdf
-rw-r--r--  1 test  wheel  851091 22 Aug 20:30 dokument2.pdf
# pdfjoin dokument1.pdf dokument2.pdf 
This is pdfjoin version 1.21
  Temporary LaTeX file for this job is /var/tmp/pdfjoin.jjSZME/29339.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument2-joined.pdf
# ls -l *pdf
-rw-r--r--  1 test  wheel   15860 22 Aug 20:30 dokument1.pdf
-rw-r--r--  1 test  wheel  978692 22 Aug 20:34 dokument2-joined.pdf
-rw-r--r--  1 test  wheel  851091 22 Aug 20:30 dokument2.pdf

Möchte man ein PDF-Dokument um 90 Grad gegen den Uhrzeigersinn drehen, kann dazu pdf90 verwenden werden:

# pdf90 dokument1.pdf 
This is pdf90 version 1.21
Processing dokument1.pdf...
  Temporary LaTeX file for this job is /var/tmp/pdf90.oMQtaH/29449-1.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument1-rotated.pdf

Sollen immer zwei Seiten eines PDF-Dokumentes auf einer zusammengefasst werden, kann dies mit pdfnup gemacht werden:

# pdfnup dokument2.pdf
This is pdfnup version 1.21
Processing dokument2.pdf...
  Temporary LaTeX file for this job is /var/tmp/pdfnup.HBQi4Y/29485-1.tex
  Calling pdflatex...
  Finished: output is /tmp/dokument2-2x1.pdf

Mehr Informationen zu pdfjam findet man in den Manpages pdfjoin(1), pdf90(1) und pdfnup(1).

Comments (1)  Permalink

Steuerzeichen aus einer mit script erstellten Datei entfernen

Zeichnet man die Terminalausgabe mit script(1) auf so werden die Steuerzeichen von zum Beispiel der Rücktaste oder der Pfeiltasten mitaufgezeichnet was das Bearbeiten einer solchen Datei erschwert:

Script started on Sat Aug 15 15:06:22 2009
# ls -1^M^M
Makefile^M
distinfo^M
files^M
pkg-descr^M
pkg-plist^M
typescript^M
# echo hallo weld^H^[[Kt > testdatei^M^M
# echo hallo welt > testdatei^[[27Dls -1^[[K^M^M
Makefile^M
distinfo^M
files^M
pkg-descr^M
pkg-plist^M
testdatei^M
typescript^M
# exit^H^H
Script done on Sat Aug 15 15:07:09 2009

Möchte man diese entfernen, kann dies mit der -b Option von col gemacht werden. Im folgenden Beispiel wird der bereinigte Inhalt in eine Datei namens ausgabe geschrieben:

# cat typescript | col -b > ausgabe

Danach sind alle Steuerzeichen entfernt und die Datei kann weiter bearbeitet werden:

Script started on Sat Aug 15 15:06:22 2009
# ls -1
Makefile
distinfo
files
pkg-descr
pkg-plist
typescript
# echo hallo welt > testdatei
# echo hallo welt > testdatei
# ls -1
Makefile
distinfo
files
pkg-descr
pkg-plist
testdatei
# exit
Script done on Sat Aug 15 15:07:09 2009

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

 Permalink

Limitierte Benutzershell verwenden

Möchte man Benutzern eine Shell auf einem Rechner zur Verfügung stellen, jedoch festlegen, dass nur gewisse Befehle verwendet werden können, so kann man dazu lshell verwenden. Im FreeBSD Portbaum findet man lshell unter shells/lshell:

# cd /usr/ports/shells/lshell && make install clean

Nun kann die Shell der Benutzer auf lshell gewechselt werden:

# pw usermod -s /usr/local/bin/lshell -n <Benutzer>

In der Datei /usr/local/etc/lshell.conf werden unter allowed die Befehle angegeben, welche von den lshell Benutzern verwendet werden dürfen. Unter forbidden werden Zeichen oder Befehle eingetragen, welche die Benutzer nicht verwenden dürfen. Unter aliases können Abkürzungen für Befehle angegeben werden:

[default]
allowed         : ['ls','echo','cd','ll']
forbidden       : [';', '&', '|','`','>','<']
aliases         : {'ll':'ls -l'}

Meldet sich ein lshell-Benutzer an, kann dieser mit ? oder help seine erlaubten Befehle ansehen. Verwendet der Benutzer ein verbotenes Kommando, so wird er nach dem zweiten Versuch automatisch abgemeldet:

# ssh <Benutzer>@<Server>

You are in a limited shell.
Type '?' or 'help' to get the list of allowed commands
testbenutzer:~$ ?
cd  echo  exit  help  ll  ls
testbenutzer:~$ make
*** unknown syntax: make
testbenutzer:~$ echo test > datei
*** forbidden synthax -> "echo test > datei"
*** You have 0 joker(s) left, before getting kicked out.
This incident has been reported.
testbenutzer:~$ echo test2 > datei
*** forbidden synthax -> "echo test2 > datei"
- Kicked out -
Connection to <server> closed.

Auch können Einstellungen pro Benutzergruppe gemacht werden. Folgendes Beispiel entfernt der Gruppe limited die Berechtigung für ll, fügt jedoch cat zu den erlaubten Befehlen hinzu:

[grp:limited]
allowed         : -['ll'] + ['cat']

Möchte man die Berechtigungen für einen bestimmten Benutzer anpassen, erstellt man eine weitere Sektion in der Konfigurationsdatei, setzt den Benutzernamen in eckige Klammern und fügt danach die Konfiguration für den entsprechenden Benutzer hinzu. Mehr Informationen zu lshell findet man in der Manpage lshell(1).

 Permalink

Zeilennummern einer Datei anzeigen

Mit Hilfe von nl lassen sich die Zeilen innerhalb einer Textdatei durchnummerieren:

# cat testdatei
asdf
foo

bar
blafasel
# nl testdatei
     1  asdf
     2  foo
        
     3  bar
     4  blafasel

Standardmässig werden leere Zeile nicht nummeriert. Soll dies trotzdem gemacht werden, kann dies mit der -b a Option festgelegt werden:

# nl -b a testdatei
     1  asdf
     2  foo
     3  
     4  bar
     5  blafasel

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

 Permalink

RFC-Dokumente suchen und anzeigen

Sucht man nach einem RFC-Dokument oder möchte man etwas darin nachlesen, so kann dies mit RFC Util vereinfacht werden. Im FreeBSD Portbaum findet man RFC Util unter misc/rfc:

# cd /usr/ports/misc/rfc && make install clean

Vor dem ersten Gebraucht muss mit der -i Option ein Index der verfügbaren RFC-Dokumente erstellt werden:

# rfc -i
Modem users one moment, it's about 400k (doesn't need to be updated often)
original lines  = 0     /usr/local/etc/rfc-index
new lines       = 21196 /usr/loca/etc/rfc-index

Mit der -k Option können die RFC-Dokumente nach einem Wort durchsucht werden:

# rfc -k smtp
The Result:
0876 Survey of SMTP implementations. D. Smallberg. September 1983.
     (Format: TXT=37775 bytes) (Status: UNKNOWN)
1047 Duplicate messages and SMTP. C. Partridge. February 1988.
     (Format: TXT=5888 bytes) (Status: UNKNOWN)
1090 SMTP on X.25. R. Ullmann. February 1989. (Format: TXT=6141 bytes)
     (Status: UNKNOWN)

[...]

Gibt man direkt eine RFC-Nummer an, werden Informationen zu diesem RFC angezeigt:

# rfc 5321
The Result:
5321 Simple Mail Transfer Protocol. J. Klensin. October 2008. (Format:
     TXT=225929 bytes) (Obsoletes RFC2821) (Updates RFC1123) (Status:
     DRAFT STANDARD)

Mit der -l Option wird das angegebene RFC-Dokument angezeigt:

# rfc -l 5321

Möchte man das RFC-Dokument in einer Textdatei speichern, kann dies mit der -d Option gemacht werden. Zusätzlich muss noch ein Verzeichnis angegeben werden, in welchem das Dokument erstellt werden soll:

# rfc -d 5321 /tmp/
Making... /tmp/rfc5321.txt
lines = 5323 .. Done.

Mehr Informationen zu RFC Util findet man in der Manpage rfc(1).

 Permalink

Befehl auf mehreren Rechnern gleichzeitig ausführen

Möchte man Befehle via SSH auf mehreren Servern ausführen, so kann dies mit clusterssh vereinfacht werden. Im FreeBSD Portbaum findet man clusterssh unter security/clusterssh:

# cd /usr/ports/security/clusterssh && make install clean

Beim Aufruf von clusterssh müssen alle Rechner angegeben werden, zu denen eine SSH Verbindung aufgebaut werden soll.

# cssh <benutzer>@<rechner> [<benutzer>@<rechner>] [...]

Clusterssh öffnet für jede SSH Verbindung einen xterm und ein clusterssh-Kontrollfenster. In jedem dieser Terminals kann nun wie gewohnt gearbeitet werden. Möchte man jedoch einen Befehl auf allen Rechnern absetzen, gibt man ihn in das Textfeld im clusterssh-Kontrollfenster ein, wodurch dieser zu allen Rechnern gesendet wird:

clusterssh

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

Comments (1)  Permalink

Festplattenstatistiken anzeigen

Mit Hilfe von devstat lassen sich Statistiken zu den vorhandenen Festplatten anzeigen. Im FreeBSD Portbaum findet man devstat unter sysutils/devstat:

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

Nun lassen sich unter anderem die Anzahl gelesener und geschriebener Bytes, die Anzahl Schreib- und Leseoperationen sowie die Blockgrösse anzeigen:

# devstat da0
da0:
        1040333796616 bytes read
        7252471400448 bytes written
        0 bytes freed
        247638123 reads
        451008032 writes
        0 frees
        0 other
        duration:
                821293 11997012304437948040/2^64 sec reads
                14473429 7941757553516418738/2^64 sec writes
                0 0/2^64 sec frees
        895818 12812851478818415562/2^64 sec busy time
        5 18242368001486082/2^64 sec creation time
        512 block size
        tags sent:
                698646155 simple
                0 ordered
                0 head of queue
        supported statistics measurements flags: 0
        device type: 0
        devstat list insert priority: 4095

Alle angezeigten Werte sind in der Manpage devstat(9) beschrieben. Mehr Informationen zu devstat findet man in der Manpage devstat(8).

 Permalink

Portbaum mit virtuellen Kategorien erstellen

Im FreeBSD Portbaum werden die Port-Kategorien durch Verzeichnisse dargestellt. Daneben werden bestimmte Ports auch in virtuelle Kategorien eingeteilt. So werden zum Beispiel alle Ports welche ein Kernelmodul installieren, in die virtuelle Kategorie kld eingeteilt. Für virtuelle Kategorien ist im Portbaum kein Verzeichnis vorhanden. Mit Hilfe von symports kann ein Portbaum erstellt werden, in welchem auch virtuelle Kategorien durch Verzeichnisse dargestellt werden:

# cd /usr/ports/ports-mgmt/symports && make install clean

Führt man symports aus, wird im aktuellen Verzeichnis der neue Portbaum erstellt:

# symports
accessibility/accerciser:
accessibility/at-poke:
accessibility/at-spi:
[...]
x11-wm/xfce4-session:
x11-wm/xfce4-wm:
x11-wm/xmonad:
x11-wm/xmonad-contrib:

Darin sind nun alle Kategorien verfügbar:

# ls
accessibility/ elisp/         java/          parallel/      tcl/
afterstep/     emulators/     kde/           pear/          textproc/
arabic/        finance/       kld/           perl5/         tk/
archivers/     french/        korean/        plan9/         ukrainian/
astro/         ftp/           lang/          polish/        vietnamese/
audio/         games/         linux/         ports-mgmt/    windowmaker/
benchmarks/    geography/     lisp/          portuguese/    www/
biology/       german/        mail/          print/         x11/
cad/           gnome/         math/          python/        x11-clocks/
chinese/       gnustep/       mbone/         ruby/          x11-drivers/
comms/         graphics/      misc/          rubygems/      x11-fm/
converters/    hamradio/      multimedia/    russian/       x11-fonts/
databases/     haskell/       net/           scheme/        x11-servers/
deskutils/     hebrew/        net-im/        science/       x11-themes/
devel/         hungarian/     net-mgmt/      security/      x11-toolkits/
dns/           ipv6/          net-p2p/       shells/        x11-wm/
docs/          irc/           news/          spanish/       xfce/
editors/       japanese/      palm/          sysutils/      zope/

In den jeweiligen Verzichnis sind nun alle Ports dieser Kategorie mit einem symbolischen Link auf den Port im Portbaum dargestellt:

# cd kld
# ls -l
total 0
lrwxr-xr-x  1 root  wheel  21 25 Jun 23:38 acx100-net@ -> /usr/ports/net/acx100
lrwxr-xr-x  1 root  wheel  28 25 Jun 23:26 aureal-kmod-audio@ -> /usr/ports/audio/aureal-kmod
lrwxr-xr-x  1 root  wheel  28 25 Jun 23:42 biosfont-sysutils@ -> /usr/ports/sysutils/biosfont
lrwxr-xr-x  1 root  wheel  31 25 Jun 23:27 bluez-firmware-comms@ -> /usr/ports/comms/bluez-firmware
lrwxr-xr-x  1 root  wheel  32 25 Jun 23:38 bwi-firmware-kmod-net@ -> /usr/ports/net/bwi-firmware-kmod
lrwxr-xr-x  1 root  wheel  26 25 Jun 23:38 cx88-multimedia@ -> /usr/ports/multimedia/cx88
lrwxr-xr-x  1 root  wheel  26 25 Jun 23:42 devcpu-sysutils@ -> /usr/ports/sysutils/devcpu
lrwxr-xr-x  1 root  wheel  24 25 Jun 23:26 emu10kx-audio@ -> /usr/ports/audio/emu10kx
lrwxr-xr-x  1 root  wheel  23 25 Jun 23:42 est-sysutils@ -> /usr/ports/sysutils/est
[...]

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

 Permalink

Liste der besuchten Verzeichnisse merken

Verwendet man die tcsh, so können die besuchten Verzeichnisse mit Hilfe von pushd zwischengespeichert werden:

# pwd
/usr/home/test
# pushd /usr/local/tinderbox
/usr/local/tinderbox ~ 
# pwd
/usr/local/tinderbox
# pushd /tmp
/tmp /usr/local/tinderbox ~

Die gemerkten Verzeichnisse können durch dirs angezeigt werden:

# dirs 
/tmp /usr/local/tinderbox ~ 

Verwendet man die -v Option, werden die gemerkten Verzeichnisse auf eine andere Weise dargestellt:

# dirs -v
0       /tmp
1       /usr/local/tinderbox
2       ~

Mit popd kann man wieder in die gemerkten Verzeichnisse zurückwechseln. Dabei wechselt man bei der ersten Eingabe von popd in das erste gespeicherte Verzeichnis, bei der zweiten Eingabe in das zweite gespeicherte Verzeichnis usw.

# pwd
/tmp
# popd
/usr/local/tinderbox ~ 
# pwd
/usr/local/tinderbox
# popd
~ 
# pwd
/usr/home/test

Mehr Informationen zur tcsh findet man in der Manpage tcsh(1).

Related Entries:
Wort in der tcsh löschen
Programm mit which finden
foreach-Schleife in der tcsh
tcsh bei Inaktivität beenden
Vervollständigung in der tcsh
 Permalink
Prev Next121-130/325