Hin und wieder kommt es vor das veränderte, erstellte Dateien oder Dateien die vor kurzem verwendet wurden ermittelt werden müssen. Mit find ist das ganz gut möglich.

Beispiel:

find /path -mtime -1 -ls

Veränderte Dateien in den letzten 24 Stunden.

find /path -ctime -1 -ls

Erstellte Dateien in den letzten 24 Stunden.

find /path -atime -1 -ls

Verwendete Dateien in den letzten 24 Stunden.

Unter anderem können folgende Parameter für die Zeitangabe übergeben werden:

  • -mtime wenn die Datei verändert wurde in Tagen
  • -mmin wenn die Datei verändert wurde in Minuten
  • -ctime wenn die Datei erstellt wurde in Tagen
  • -cmin wenn die Datei erstellt wurde in Minuten
  • -atime wenn die Datei verwendet wurde in Tagen
  • -amin wenn die Datei verwendet wurde in Minuten

Zu beachten ist der erste Buchstabe. a steht für verwendet. c für erstellt und m für modifiziert. Die Zahl die dem Parameter übergeben wird ist immer 1:1 mit der Zeitangabe verbunden. D.h.:

  • -mmin -1 verändert vor einer Minute
  • -mtime -1 verändert vor einem Tag
  • -mtime -0.25 verändert vor 0,25 Tagen bzw. 6 Stunden.
Keine Kommentare »
 

Während dem arbeiten an einer Firefox Extension ist mir aufgefallen, dass keine fertige Funktion zum Schreiben bzw. erweitern / anhängen an Dateien zu finden ist. Generell scheint das Schreiben von Daten auf der Festplatte in Firefox Extensions etwas kompliziert gelöst zu sein. Hier ein kurzer Snippet zum Schreiben von Daten in eine Datei:

var writeFile = function(fileName, data) {
		var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);  
		file.append(fileName);  
		var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
		// use 0x02 | 0x10 to open file for appending.
		foStream.init(file, 0x02 | 0x10 | 0x08, 00666, 0); // write(only), append, create file
		foStream.write(data, data.length);
		foStream.close();	
}
 
writeFile('Guten Morgen', '/tmp/xxx.txt');
Keine Kommentare »
 

Primfaktorzerlegung ist die Darstellung einer natürlichen Zahl als Produkt aus Primzahlen (=Primfaktoren). Mehr darüber auf Wikipedia.

Primfaktorzerlegung / Primzahlen test

(das Ergebnis befindet sich unter der grauen Linie)

Lässt sich eine Zahl nicht in ihre Primfaktoren zerlegen handelt es sich um eine Primzahl. z.b.: 7 = 7

testen / zerlegen

Keine Kommentare »
 

Vergessen das man beim Ausführen eines Befehls root sein musste? Super schnell lässt sich der zuletzt verwendete Befehl erneut ausführen mit:

~# sudo !!

Wenn sudo nicht verfügbar ist geht das Wiederholen des Kommandos auch mit su:

su -c "!!"
Keine Kommentare »
 

Das einfache Verarbeiten von Inhalten auf Internetseiten in der node.js Umgebung ist bequem mit dem Modul cheerio möglich. Hierbei läd man die Webseite wie gewohnt mit einem der verfügbaren HTTP Module. Injiziert nun zusätzlich die jQuery Bibliothek und läd den DOM in das jQuery Module. Ab diesem Punkt ist es möglich auf alle Elemente der Internetseite mit den gewohnten jQuery Funktionen zu bearbeiten bzw. Inhalte zu extrahieren.

Das Beispielskript sollte copy & paste funktionieren. :)

#!/usr/bin/env node
'use strict';
 
var http = require('http');
var cheerio = require('cheerio');
 
// socket timeout
var myTimeout = 100;
 
// on error
var err = function(e) {
	console.log(e)  
}
 
// used to set socket timeout
var timeout = function(socket) {
    socket.setTimeout(myTimeout);  
    socket.on('timeout', function() {
        req.abort();
    });
}
 
var req = http.get({host: 'example.com', port: 80, path: '/'}, function(res) {
 
    var html = '';
 
    // executed if part of data comes in
    res.on('data', function(data) {    
    	html += data;
 
    // executed if all data received
    }).on('end', function() {
 
        // check HTTP status / errors   	
	 console.log(res.statusCode);
 
	// load jquery (cheerio) to your received HTML document
	var $ = cheerio.load(html);
 
	// *** JQUERY LIKE CODE ***	  
	// use code like in browser
	$('h1').each(function() {
	    console.log($(this).text());
	});
     });
}).on('error', err).on('socket', timeout);

Alternativ kann natürlich auch ein synchroner HTTP Client verwendet werden.

Vorher die Installation des cheerio Moduls in der Shell nicht vergessen:

npm install cheerio
Keine Kommentare »
 

Ein kurzes Script um Benutzer aus einer Leerzeichen separierten Liste (siehe im Script CREATEUSER: user1 user2 userx) in MySQL zu importieren. Das Script speichert dabei Benutzer und das zufällig generierte Passwort 16 stellige Passwort in einer Log Datei (siehe im Script LOGFILE). Zusätzlich erstellt das Script eine Datenbank betitelt mit dem Benutzername. Für die erstellte Datenbank werden dem erstellten Benutzer außerdem alle Rechte garantiert.

Verwendung:

  • MySQL Login Daten eintragen
  • Benutzerliste
  • Logdatei eintragen (optional)
  • ausführen
#!/bin/sh
 
##
## <Configuration>
##
 
## MySQL login data
MYSQLUSER="root"
MYSQLPASS="MYSQLrootPassword"
MYSQLHOST="localhost"
 
## logfile
LOGFILE="/var/log/createmysqluser.log"
 
## mysql user to create
CREATEUSER="User1 User2"
 
##
## </Configuration>
##
 
for USER in ${CREATEUSER}; do
        PASSWORD=$(cat /dev/urandom | strings | grep -m 1 -oEi '[a-zA-Z0-9]{16}')
        echo "${USER} ${PASSWORD}" >> ${LOGFILE} 
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "CREATE USER ${USER}@'localhost' IDENTIFIED BY '${PASSWORD}';"
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "CREATE DATABASE ${USER};"
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "GRANT ALL PRIVILEGES ON ${USER}.* TO ${USER}@'localhost' WITH GRANT OPTION;"
done

Super praktisch wäre das Script, wenn es die MySQL Benutzer Liste über eine Datei einlesen würde. Macht es aber nicht. :)

Keine Kommentare »