Manchmal kommt es vor, dass man viele Dateien in einem bestimmten Muster abgespeichert hat. Zum Beispiel sind meine Fotografien als <kameramodell>_<datum>_<fortl.zahl> gespeichert.
Nun möchte man zum Beispiel, dass das Kameramodell nicht mehr angezeigt wird. Dies kann man durch Anpassen eins der folgenden Kommandos erledigen. Natürlich müssen dafür die Bilder in einem Ordner liegen, zu dem man vorher navigiert hat.
Beide unten stehenden Befehle ersetzen die Zeichenkette foo durch bar. Das heißt, wenn es Dateien gibt, die sich football, footer, oder barfoot nennen, werden diese in barball, barer und barbar umbenannt:
1
for i in ./*foo*; do mv -- "$i""${i//foo/bar}"; done
1
ls * | sed -e 'p; s/foo/bar/' | xargs -n2 mv
Der angepasste Befehl für mein Anliegen lautet:
1
ls * | sed -e 'p; s/<kamerahersteller>_//' | xargs -n2 mv
Durch die beiden gefolgten Schrägstriche wird die Zeichenkette gelöscht.
Die Tage hatte ich SQL-Listings in LaTeX eingebunden. Dann fiel mir auf, dass die Umlaute (ä,ü,ö) nicht richtig dargestellt wurden. Es wurde stattdessen ein Leerzeichen benutzt. Nach einiger Recherche und Ausprobieren verschiedenster Lösungen habe ich zwei mögliche Lösungen gefunden.
Nun habe ich wieder eine Wort-Wolke vom letzten Monat erstellt. Wer sie mit der alten Cloud vergleichen möchte, der kann sich diese in diesem Artikel anschauen. Erstellt habe ich diese natürlich wieder mit wordle.net und als PDF gedruckt. Dieses PDF wurde dann in ein PNG-Bild mittels
convert image.pdf image.png
umgewandelt. convert ist im Paket von ImageMagick enthalten.
Es kommt vor, dass man Dateien zwischen zwei Rechnern austauschen möchte, die nicht den gleichen Befehl für das Zeilenende benutzen. Durch eine einfache Umwandlung ist das doch möglich.
Manchmal gibt es Situationen, in denen möchte man nicht, dass ein Skript mit der Tastenkombination [Strg]+[C] abgebrochen werden kann. Damit man dies in einem Skript erreicht, macht man folgendes:
“`
!/bin/bash
trap “echo nö!” SIGINT SIGTERM
while true
do
echo "."
sleep 60
done
“`
Wenn dieses Skript ausgeführt wird, dann wird alle 60 Sekunden . ausgegeben. Durch einen Druck auf [Strg]+[C] wird nö ausgegeben.
Eine MAC-Adresse (Media-Access-Control-Adresse) ist eine eindeutig identifizierbare Nummer, die normalerweise in die Netzwerkkarte vom Hersteller “eingebrannt” wurde.
Allerdings ist es manchmal von Nutzen diese zu ändern. Zum Beispiel, wenn man am eigenen Router die MAC-Adressen-Filterung testen möchte. Wie man die MAC-Adresse per Software ändert, wird folgend beschrieben.
Zuerst schauen wir uns die aktuelle MAC-Adresse des Interfaces eth0 an. Dies geschieht, in dem wir
sudo ifconfig eth0
in einer Konsole eingeben. Eine Ausgabe könnte so aussehen:
1234567
eth0 Link encap:Ethernet Hardware Adresse **00:01:23:45:67:fa**
UP BROADCAST MULTICAST MTU:1500 Metrik:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:19
Um die Adresse ändern zu können, muss das Interface abgeschaltet werden. Dabei ist zu wissen, dass eine mögliche Kommunikationsverbindung über dieses Interface unterbrochen wird. Das Herunterfahren geschieht mittels
sudo ifconfig eth0 down
Um die Adresse zu Ändern wird der Befehl mit der angepassten Adresse eingegeben:
sudo ifconfig eth0 hw ether AA:BB:CC:DD:EE:FF
Die oben stehenden Buchstaben sind Zahlen in der hexadezimalen Schreibweise. Das heißt, man kann jeden Zweierblock, die voneinander durch einen Doppelpunkt getrennt sind, durch 0-9 und A-F ersetzen. Es ist darauf zu achten, dass man eine gültige MAC-Adresse verwendet. Gültige MAC-Adresse sind unter anderem Adressen, die mit 00: anfangen. Nach dieser Änderung muss das Interface natürlich wieder eingeschaltet werden. Dies erreicht man, indem die Zeichenfolge
sudo ifconfig eth0 up
eingegeben wird. Eine weitere Eingabe von
sudo ifconfig eth0
sollte die geänderte MAC-Adresse anzeigen.
Allein durch die 3 Befehle kann man eine MAC-Adresse ändern. Das heißt, dass ein MAC-Adressen-Filter für einen Router keine ausreichende Sicherheit bietet. Wichtig ist, dass das Verschlüsselungsverfahren WPA oder noch besser WPA2 benutzt wird. WEP ist veraltet und sehr unsicher!
Ich hatte mal einen Versuch am eigenen Router gestartet, um das WEP-Passwort herauszufinden. Es ist mir innerhalb kurzer Zeit gelungen.
Um sichere Passwörter zu erzeugen, hatte ich in einem anderen Artikel veröffentlicht.
Zur Übersichtlichkeit meiner Skripte benutze ich Unterordner in ~/bin. Diese heißen zum Beispiel sys, sync, media, latex. Nun habe ich mir ein Skript geschrieben, das mir alle Skripte in den Unterordnern nach ~/bin verlinkt:
Such nach Dateien die das executable-Attribut tragen, werden symbolisch verlinkt.
Alle Dateien, die mit ~ enden, werden unausführbar gemacht, da es Backups sind.
Bei jeder Änderung, die ich in dem Ordner vornahm, musste ich refresh-ln.sh ausführen. Dabei geht das auch automatisch. Dazu benötigt man das Programm inotify. Dies wird durch den Befehl
1
sudo apt-get install inotify
oder
1
sudo aptitude install inotify
installiert. Das Skript checkbin.sh benutzt dieses.
Das Skript wartet auf Veränderungen (veränderte, verschobene, erstellte, gelöschte Dateien) in dem Ordner ~/bin und den Unterordnern und führt danach das Skript refresh-ln.sh aus. Das Skript überprüft nicht alle paar Millisekunden, ob das Verzeichnis verändert wurde, sondern es bekommt eine Meldung direkt vom Kernel. Das heißt, dass das Programm ressourcenschonend arbeitet.
Außerdem habe ich das Programm bei den Startprogrammen hinzugefügt, sodass das Skript checkbin.sh bei jedem Start des Computers ausgeführt wird. Dazu öffnet man Einstellungen -> Startprogramme und klickt auf “hinzufügen”. Dort ist dann der Name, der Pfad zum Skript und ein optionaler Kommentar anzugeben.
Ab und zu sollte man mal sein /home-Verzeichnis aufräumen. Ich mache das ständig. Symbolische Links, die auf ein nicht vorhandenes Ziel zeigen, sollten entfernt werden. Dazu nutze ich das Programm find. Mit dem nachstehenden Befehl, werden alle defekten Links ausgegeben, die sich in allen Unterordnern des aktuellen Verzeichnisses befinden:
find -L . -type l
Alternativ kann man alle ausgegebenen löschen:
find -L . -type l -delete
Dabei wird der Link allerdings richtig gelöscht und nicht in den Papierkorb verschoben. Das heißt, das dieser Befehl mit Vorsicht benutzt werden sollte.
Weitere Informationen zu find, findet man hier, hier und hier, aber auch hier und hier.