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

Artwork von Ubuntu 11.04 per Backport in Ubuntu 10.04 nutzen

Auf so ziemlich allen produktiven Maschinen habe ich derzeit die aktuelle LTS Version (Ubuntu 10.04.3 – Lucid Lynx) von Ubuntu installiert. Optisch allerdings finde ich Ubuntu 11.04 deutlich ansprechender.

Glasen ist der gleichen Meinung und hat sich die Arbeit gemacht, alle Pakete die für das Artwork (Themes, Icons, Wallpaper) unter Ubuntu 11.04 verantwortlich sich, auf Ubuntu 10.04 (Lucid Lynx) zu portieren. Das ganze wurde als PPA auf Launchpad veröffentlicht. Danke! Super Arbeit! Kann man da nur sagen.

Lucid Backport - Themes

Die folgenden Befehle installieren das Artwork:

$ sudo add-apt-repository ppa:glasen/ubuntu-artwork-backport
$ sudo apt-get update
$ sudo apt-get upgrade

Jedem der die Optik von Ubuntu 11.04 ansprechender findet, sei dieser Backport empfohlen.

Weitere Informationen zum Thema:
https://launchpad.net/~glasen/+archive/ubuntu-artwork-backport
http://www.glasen-hardt.de/?p=1272

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

HTML Tag mit SQL entfernen

Die Verwaltung von Datenbankinhalten kann unter Umständen recht aufwändig werden. Gerade wenn man, wie in meinem aktuellen Fall, aus ca. 1,8 Mio Datensätze (Text) HTML Tags entfernen will. Als ersten kam mir die Überlegung hierfür ein Script in PERL oder PHP zu schreiben. Da ich allerdings nicht alle Applikationen anpassen will und kann, musste die Funktion vom MySQL übernommen werden.

Dank Google habe ich hier eine vorgefertigte Funktion für MySQL gefunden.

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC 
BEGIN
  DECLARE iStart, iEnd, iLength int;
  WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
    BEGIN
      SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
      SET iLength = ( iEnd - iStart) + 1;
      IF iLength > 0 THEN
        BEGIN
          SET Dirty = Insert( Dirty, iStart, iLength, ' ');
        END;
      END IF;
    END;
  END WHILE;
  RETURN Dirty;
END;
|
DELIMITER ; 

Im folgenden Beispiel wird der übergebene Text ohne HTML ausgegeben.

mysql> SELECT fnStripTags(„Testtext mit <b>fettem HTML Text</b>.“);

Datenbankgröße mit SQL ermitteln

Jeder der eine oder mehrere Datenbanken betreibt, sollte neben der Performance auch die belegten und benötigten Ressourcen im Blick haben. Mit einer einfachen Abfrage kann man sich direkt vom MySQL Server die Speicherbelegung anzeigen lassen.

SELECT 
  table_schema AS 'Datenbankname',
  Round( SUM( data_length ) / 1024 / 1024, 3 ) AS 'Daten (MB)',
  Round( SUM( index_length ) / 1024 / 1024, 3 ) AS 'Index (MB)',
  Round( Sum( data_length + index_length ) / 1024 / 1024, 3 ) AS 'Gesamt (MB)',
  Round( Sum( data_free ) / 1024 / 1024, 3 ) AS 'Freier Speicher (MB)'
FROM information_schema.tables
GROUP BY table_schema ; 

Das Resultat sieht dann in etwa so aus …

+--------------------+------------+------------+-------------+----------------------+
| Datenbankname      | Daten (MB) | Index (MB) | Gesamt (MB) | Freier Speicher (MB) |
+--------------------+------------+------------+-------------+----------------------+
| shopdb             |   2457.729 |   1218.272 |    3676.002 |                4.000 |
| testdb             |      0.460 |      0.324 |       0.784 |                0.000 |
| information_schema |      0.000 |      0.008 |       0.008 |                0.000 |
| logging            |   1239.394 |    702.597 |    1941.991 |                0.000 |
| mysql              |      0.492 |      0.087 |       0.579 |                0.000 |
+--------------------+------------+------------+-------------+----------------------+
5 rows in set (0.00 sec)

(Die Abfrage stammt von http://www.artfulsoftware.com/infotree/queries.php und wurde von mir leicht angepasst.)