Doppelte Zeilen aus Datei entfernen

Heute habe ich eine Excel Tabelle erhalten, die ich in eine Datenbanktabelle importieren wollte. Das Problem: die Quelle hatte einige Dopplungen die mit dem UNIQUE KEY der Datenbanktabelle kollidierten. Damit der Import der weit über 16000 Zeilen ohne händisches Zutun importiert werden konnte, musste ein Script her.

Die Lösung ist eine Kombination der Programme cat, sort und uniq. Diese erledigt die Arbeit sogar in einer Zeile.

Die folgende Zeile entfernt doppelte Einträge und speichert das Ergebnis dann in einer neuen Datei ab.

$ cat dateiname | sort | uniq > dateiname.neu

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/lucid/en/man1/cat.1.html
http://manpages.ubuntu.com/manpages/lucid/en/man1/sort.1.html
http://manpages.ubuntu.com/manpages/lucid/en/man1/uniq.1.html

Bash Historie leeren

So toll die Historie der Bash auch sein mag, so negativ kann sie unter Umständen auch sein (z.B. wenn ein Passwort oder andere Sicherheitskritische Informationen als Parameter eines Programms übergeben werden). Diese Informationen können dann von jedermann der Zugriff auf diesen Benutzer/Sitzung hat, eingesehen oder nochmals verwendet werden.

Beispiel: MySQL Zugangsdaten

sven@ubuntu-eeepc:~$ history
  823  mysql -u root -p geheim datenbank</tmp/dump.sql
  824  history

Um dieses Problem zu umgehen, kann man die Historie mit dem folgenden Befehl leeren.

$ history -c

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/hardy/man3/history.3readline.html

Bash Historie mit Zeitstempel versehen

Die Historie der Bash finde ich persönlich recht nützlich. Gerade um die letzten Befehle mittels Pfeil-Auf und Pfeil-Ab Tasten noch einmal auszuführen. Doch die Historie kann noch mehr! Die Gesamte Historie kann man sich mit dem folgenden Befehl anzeigen lassen. (Hinweis: Ich übergebe die Historie an less da meist der Anzeigepuffer des Terminals nicht ausreicht, um alle Befehle anzuzeigen.)

$ history | less

Ein Nachteil der Standard Einstellung ist, das alle Befehle nur der Reihe nach aufgelistet werden. Der Historie kann aber auch ein Zeitstempel zugewiesen werden, z.B. um das Durchsuchen der Historie nach einem bestimmten Tag oder Zeitraum zu ermöglichen.

Dies kann entweder dynamisch erfolgen …

$ export HISTTIMEFORMAT=“[%F] [%T] „

… oder besser noch, direkt in die Konfiguration der Bash geschrieben werden. In der Datei ~/.bashrc muss dazu die folgende Zeile ergänzt werden:

HISTTIMEFORMAT="[%F] [%T] "

Bei der Zweiten Variante ist zu beachten, das die Bash/Sitzung neu gestartet werden muss.

Weitere Informationen zum Thema:
http://manpages.ubuntu.com/manpages/hardy/man3/history.3readline.html

Mehrere Terminalfenster nebeneinander

Terminator LogoIch denke das Problem wird vielen bekannt sein – zu viele offene Terminalfenster oder Tabs. Da wird es schnell unübersichtlich. Gerade wenn man mehrere verschiedene Systeme gleichzeitig betrachten möchte. Hierfür gibt es Terminator. Dieser in Python geschriebene Terminal-Emulator für GNOME, ermöglicht es mehrere Terminals innerhalb eines Fensters zu verwenden.

Die Installation der aktuellen Version aus dem PPA ist denkbar einfach:

$ sudo add-apt-repository ppa:gnome-terminator && sudo apt-get update
$ sudo apt-get install terminator

Gerade wenn man – so wie ich – Ubuntu 10.04 Netbook Edition einsetzt, hat man keine Möglichkeiten mehrere Fenster nebeneinander zu platzieren und muss auf Tabs zurückgreifen. Der Screenshot zeigt meinem EeePC. Hier ist der Platz zwar recht rar, aber ich kann mir trotzdem mehrere Terminals gleichzeitig öffnen. Mit ein paar Änderungen an der Schriftgröße kann diese Anzeige sogar noch optimiert werden.

Terminator - Screenshot EeePC

Voreinstellungen für Terminator kann man in der Datei ~/.config/terminator/config treffen. Eine Liste der Optionen findet sich in der Man-Page „terminator_config“.

$ man terminator_config

Weitere Informationen zum Thema:
http://www.tenshu.net/terminator/
http://wiki.ubuntuusers.de/Terminator
https://launchpad.net/terminator

MySQL Dump Importfortschritt anzeigen

Der Titel klingt ein wenig holprig, aber es geht hier um eine wirklich nette Funktion, die sich bestimmt jeder irgendwann schon einmal gewünscht hat. Eine „Fortschrittsanzeige“ für das Einspielen von MySQL Dumps (siehe Screenshot).

Fortschrittsanzeige bei MySQL Dump Import

Hierfür wird ein kleines Programm namens bar benutzt, welches Fortschrittsanzeigen für Dateitransfers generiert. Auf SourceForge kann man sich die aktuelle Version herunterladen. Ubuntu Nutzer (ab Natty/11.04 ) können auch die Paketquellen zur Installation verwenden:

$ sudo apt-get install bar

Ein simpler Import eines MySQL Dump würde dann in etwa so aussehen:

$ bar -if=/pfad/zum/dump.sql | mysql

Natürlich macht dieser Umweg nur Sinn wenn das Dump auch eine entsprechende Größe aufweist. ;-)

Hinweis: Die Angabe der Logindaten entfällt bei mir, weil ich eine ~/.my.cnf verwende.

Weitere Links zum Thema:
http://clpbar.sourceforge.net/
http://manpages.ubuntu.com/manpages/natty/en/man1/bar.1.html