Archiv des Autors: Michael Petri

Baloo

Dienst zur Dateiindizierung (wird z. B. von Dolphin verwendet).

Verwendung

In der Datenbank gespeicherte Informationen zu einer Datei:

balooshow [OPTIONEN] Datei

Suchen auf der Kommandozeile:

baloosearch //?query=EIGENSCHAFT:SUCHBEGRIFF

Beispiele:

#Suche nach einem STICHWORT, das z. B. in Dolphin der Datei hinzugefügt wurde:
baloosearch //?query=tag:STICHWORT

#Suche nach STICHWORT und Breite
baloosearch //?query=tag:STICHWORT AND width:100

#Suche nach mehreren Stichworten
baloosearch //?query=tag:STICHWORT1 AND tag:STICHWORT2

#Suche nach Künstler (mit Wildcard "*") UND STICHWORT
baloosearch //?query=artist:John* AND tag:STICHWORT

#Suche nach Künstler und Genre
baloosearch //?query=artist:A* AND genre:Hörbuch

Konfiguration

Die Konfiguration erfolgt über balooctl

balooctl [Optionen] ARGUMENTE 
ARGUMENTEBeschreibung
statusStatus der Indizierung
enableDatei-Indizierung aktivieren
disableDatei-Indizierung deaktivieren
purgeDatenbank löschen
suspendDatei-Indizierung pausieren
resumeDatei-Indizierung wieder starten
checkNach nicht indizierten Dateien suchen und indizieren
indexAngegebene Dateien indizieren
clearAngegebene Dateien nicht mehr indizieren
configBaloo-Einstellungen bearbeiten (siehe unten)
monitorEchtzeitüberwachung starten
indexSizeVerwendeten Speicherplatz anzeigen
failedDateien mit fehlgeschlagener Indizierung auflisten
balooctl config
BefehlBeschreibungBeispiel
addFügt den Wert eines Einrichtungs-Parameters hinzu. Im Beispiel wird der Pfad /var/log indiziert.balooctl config add includeFolders /var/log/
rm | removeEntfernt den Wert eines Einrichtungs-Parameters. Im Beispiel wird der obige Eintrag wieder entfernt.balooctl config remove includeFolders /var/log
list | ls | showZeigt den Wert eines Einrichtungs-Parametersbalooctl config ls includeFolders
setSetzt den Wert eines Einrichtungs-Parameters. Im Beispiel wird die Indizierung versteckter Orte erlaubt.balooctl config set hidden true

Update PHP auf Version 8 für nextcloudpi

Aktuelle php_Version prüfen

php -v

PHP8 installieren

apt-get -y install php8.0-fpm php8.0-mysql php8.0-xml php8.0-zip php8.0-mbstring php8.0-gd php8.0-curl php8.0-redis php8.0-intl php8.0-bcmath php8.0-gmp php8.0-imagick imagemagick

PHP8-konfiuration aktualisieren

Symbolischer Link auf die NCP-PHP-Konfiguration

ln -s /etc/php/7.4/fpm/conf.d/90-ncp.ini /etc/php/8.0/fpm/conf.d/90-ncp.ini
systemctl restart php8.0-fpm

image magick Modul aktivieren

phpenmod -v 8.0 imagick

Apache für PHP 8.0 einrichten

Apache für php8.0 konfigurieren

a2enmod proxy_fcgi setenvif
a2enconf php8.0-fpm

PHP 7.4 für apache deaktivieren

a2disconf php7.4-fpm

Apache neu starten

systemctl reload apache2

Aktuelle php_Version prüfen


php -v

wenn 8.0 nicht aktiviert ist, dann mit update-alternatives --config php auswählen.

Nextcloud APPs aktualisieren

cd /var/www/nextcloud
sudo -u www-data php ./occ app:update -all

fail2ban

Status abfragen

Jail-Liste anzeigen:

fail2ban-client status

Status eines einzelnen Jails anzeigen:

fail2ban-client status nextcloud 

Logfile:

tail -n 1000 /var/log/fail2ban.log | grep "an "

Entbannen

Das Entbannen funktioniert über das Programm fail2ban-client:

fail2ban-client set <JAIL> unbanip <IP>

Beispiel für sshd:

fail2ban-client set sshd unbanip 192.168.16.33

gparted

Festplatte klonen mit gparted

  1. Partitionsgrößen auf Quell-Festplatte:
    Die Größe der einzlenen Partitionen auf der Quell-Festplatte notieren (sofern benötigt Partitionen so erkleinern, dass diese auf die zweite Festplatte passen)
  2. Ziel-Festplatte vorbereiten:
    Auf der Ziel-Festplatte eine Partitionstabelle vom Typ „bsd“ erstellen (wird für UEFI-Boot benötigt). Dann Partitionen mit gleicher Größe wie auf der Quell-Festplatte erstellen (gewähltes Dateisystem der Partitionen egal)
  3. Kopieren:
    Einzelne Partitionen über „Kopieren“ (Quell-Festplatte) und „Einfügen“ (Ziel-Festplate) einzeln auf die Zielfestpaltte kopieren.
  4. Flags der Partitionen (Markierungen) wie auf der Quell-Festplatte setzen, z. B.:
    – Grub-Partition: bios_grub
    – UEFI-Partition: boot und esp

UFW – uncomplicated firewall

Einzelne Ports freigeben

ufw allow 8200/tcp
ufw allow 1900/udp

IP-Bereich blockieren

ufw deny from 159.223.224.0/24

Einzelne Regeln löschen

Nach Nummer

Regeln mit Nummerierung anzeigen:
ufw status numbered

Regel nach Nummer „NUM“ löschen:
ufw delete NUM

nach Protokoll/Port

ufw delete allow http
ufw delete allow 80

Speicherort für die Regeln

/etc/ufw
/etc/ufw/user.rules
/etc/ufw/user6.rules

Auswerten der nextcloud.log

Das folgende Skript erst erstellt automatisch Deny-Regeln für die ufw auf Basis der Nextcloud-Logdatei. Das Script ist an die jeweilige Installation anzupassen und kann im ungünstigsten Fall auch berechtigte Benutzer aussperren.

#/bin/bash

# IP-Adressen mit fehlerhaften Nextcloud-Loginversuchen werden in ufw als "DENY" eingetragen und somit gesperrt
# Die Anzahl an ungültigen Login-Versuchen, die dabei ignoriert werden, kann mit der Variable "logcount" definiert werden.

# Variablen setzen
logcount="1,2,3"  # Suchparameter für sed zum Löschen der Login-Versuche mit der angegebenen Anzahl
nclogfile="/var/www/nextcloud/nextcloud.log"
tmpfile1="/tmp/ufw_addIPfromNC_IPoutNC.txt"
tmpfile2="/tmp/ufw_addIPfromNC_IPoutUFW.txt"
tmpfile3="/tmp/ufw_addIPfromNC_IPaddtoUFW.txt"
tmpfile4="/tmp/ufw_addIPfromNC_whois.txt"
logfile="/var/log/ufw_addIPfromNC.log"

# NC-Logdatei auslesen
echo "IP-Adressen mit mehr als $logcount Fehlanmeldungen aus der Nextclud-Logdatei auslesen ..."
tail -n 1000 "$nclogfile" | grep "Trusted domain error" | awk '{print $4}' | tr -d '\\"' | sed "/192.*$/d" | sort -g | sed 's/\.[^.]*$/./' | uniq -c | sed "/.* [$logcount] .*$/d" | awk '{print $2}' | tee "$tmpfile1"
#- Anmerkungen -# Letzten 1000 Zeilen der NC-Logdatei auslesen | Fehlerhafte Loginversuche suchen | IP-Adressen ermitteln (spalte 4) | \ und " löschen | IP 192.x löschen | sortieren | Letzter Block der IP löschen | gleiche zählen | Zeilen mit $logcount-Versuchen löschen | nur IP-Adressen (Spalte 2) | in tmp-File speichern

# ufw "DENY"_liste auslesen
echo "In ufw bereits geblockte IP-Adressen auslesen ..."
ufw status | grep "DENY"   | awk '{print $3}' | sort | sed 's/0\/24//g' | tee "$tmpfile2"
#- Anmerkungen -# ufw-Filterliste ausgeben | geblockte IPs | nur IP-Adresse | sortieren | "0/24" entfernen | in tmp-File speichern

# IP-Listen vergleichen
echo "Noch nicht geblockte IP-Adressen ermitteln ..."
diff "$tmpfile1" "$tmpfile2" | grep "<" | tr -d "< " | tee "$tmpfile3"

# Neue ufw-Regeln erstellen
echo "IP-Adressen in ufw eintragen ..."
while read IP; do
   IPrange=$IP"0/24"
   whois "$IP"1 > "$tmpfile4"
   IP_name=$(cat "$tmpfile4" | grep -i -m 1 netname | awk '{print $2, $3, $4, $5, $6}')
   IP_country=$(cat "$tmpfile4" | grep -i -m 1 country | awk '{print $2}')
   echo $IPrange" ("$IP_name"- country: "$IP_country")"
   echo "ufw deny from $IPrange"
   resp=$(ufw deny from "$IPrange")
   echo $resp
   echo $(date "+%Y.%m.%d %H:%M:%S")" ["$resp"] "$IPrange" ("$IP_name"- country: "$IP_country")" >> $logfile
done < "$tmpfile3"

# Temporäre Dateien löschen
rm "$tmpfile1" "$tmpfile2" "$tmpfile3" "$tmpfile4" 2> /dev/null

exit

Ethernet-Schnittstelle deaktiviert

Nach einem Update des Netzwerk-Managers (network-manager) kann es vorkommen, dass die einzelne Netzwerkschnittstellen (z. B. die Ethernet-Schnittstelle) deaktiviert wurde. Dies kann mit folgendem Befehl kontrolliert werden:

lshw -class network

Oder etwas komfortabler über lshw-gtk.

Schuld daran kann ein Bug sein, bei dem die Konfigurationsdatei 10-globally-managed-devices.conf nicht kompatibel zur neuen Version des network-manager ist. In diesem Fall muss einfach die vorhandene Date durch eine leere Datei ersetzt und der Netzwerkmanager neu gestartet werden:

sudo mv /etc/NetworkManager/conf.d/10-globally-managed-devices.conf /etc/NetworkManager/conf.d/10-globally-managed-devices.conf.backup

sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf

sudo service network-manager restart

Dann sollte die LAN-Schnittstelle wieder aktiv und im Netzwerkmanager verfügbar sein.

Diesen Fehler gab es bereits beim Update des network-manager auf Version 1.2.4 und bei mir nun beim Update auf Version 1.22.10.

F3 (Fight Fake Flash)

Tools zum Testen von Flash-Speichern (USB-Sticks, SD-Karten etc.)

f3write, f3read

Ausführlicher Test des Speichers. Zunächst werden Daten mit f3write geschrieben und anschließend mit f3read verifiziert:

f3write /media/user/device/
f3read /media/user/device/
  • Den Pfad entsprechend dem Mountpunkt anpassen.

Hierbei wird das selbe Dateiformat verwendet, dass auch das Windows-Tool h2testw.exe (link) der c’t verwendet.

f3probe

Schneller Test der real vorhandenen Größe.

Dabei werden sowohl alle Daten auf dem Speicher als auch die Formatierung überschrieben!

Alle Partitionen des Datenträgers zuvor ausbinden:

sudo umount /dev/sdxn

Das Device „/dev/sdxn“ entsprechend aller eingebundenen Partitionen anpassen.

sudo f3probe --destructive --time-ops /dev/sdx
  • Das Device „/dev/sdx“ entsprechend anpassen.
    Achtung, das angegebene Device wird unwiderruflich gelöscht!

f3fix

Erzeugt eine (unformatierte) Partition, die der tatsächlichen Speichergröße entspricht. Hierfür können die Ergebnisse von f3probe verwendet werden. (Alle Partitionen des Datenträgers müssen zuvor ausgebunden werden – siehe f3probe).

sudo f3fix --last-sec=16477878 /dev/sdx
  • Der „Letzte Sektor“ (–last-sec) des tatsächlich zur Verfügung stehenden Speichers wird von f3probe ausgegeben (Zeile „Usable size:“, dort die Zahl direkt vor „blocks“).
  • Das Device „/dev/sdx“ entsprechend anpassen.

Anmerkung: Sofern f3fix meldet, dass die Anpassungen nicht an den Kernel gemeldet werden konnten, muss der Speicher einmal ausgesteckt und wieder eingesteckt werden, bevor er formatiert werden kann.

Anschließend kann die Partition formatiert werden:

sudo mkfs.fat /dev/sdx1
  • Das Device „/dev/sdx1“ entsprechend anpassen.

Libre Elec auf RaspberryPi

Installation

LibreElec installieren und erstmalig starten

Download von LibreElec und Installation auf SD-Karte wie hier beschrieben: https://libreelec.tv/downloads_new/

Dann den RaspberryPi mit der SD-Karte booten und Grundkonfiguration über Konfiguraitonsassistenten durchführen. Dabei ssh aktivieren.

Über ssh einloggen („tuxtv“ durch den Rechnernamen ersetzen, der im Konfigurationsassistenten eingegeben wurde):

ssh root@tuxtv

Sofern kein eigenes ssh-Passwort vergeben wurde, ist das Standard-Passwort libreelec

Freischaltcodes für Hardwaredecoder

Sofern Freischaltcodes für die Hardwaredecoder vorhanden sind, können diese in die config-Datei eingetragen werden:

mount -o remount,rw /flash
vi /flash/config.txt

Im Bereich License keys die entsprechenden Keys eintragen:

###################################################################
# License keys to enable GPU hardware decoding for various codecs #
# to obtain keys visit the shop at http://www.raspberrypi.com     #
###################################################################
 
decode_MPG2=0x00000000
decode_WVC1=0x00000000

Infrarotempfänger am GPIO einrichten

Der GPIO-Pin, an dem der Infrarotempfänger angeschlossen ist, muss in der config.txt eingetragen werden:

mount -o remount,rw /flash
vi /flash/config.txt

Dort im Abschnitt "End of default configuration" folgendes eintragen (dabei die korrekte Pin-Nummer angeben):

################################
# End of default configuration #
################################

dtoverlay=gpio-ir,gpio_pin=17

System neu starten

mount -o remount,ro /flash
reboot

Fernbedienung einrichten

Prinzipieller Funktionstest

Testen, ob GPIO-Konfiguration für lirc erkannt wurde:

dmesg | grep 'lirc'
[    5.554017] rc rc0: lirc_dev: driver gpio_ir_recv registered at minor = 0, raw IR receiver, no transmitter

Testen, ob lirc-device vorhanden:

ls -l /dev/lirc*

Testen, ob Fernbedienung prinzipiell erkannt wird:

killall lircd
mode2 -d /dev/lirc0

Zunächst wird das verwendet device ausgegeben (sollte mit dem zuvor ausgegebenen übereinstimmen):

Using driver default on device /dev/lirc0
Trying device: /dev/lirc0
Using device: /dev/lirc0

Wenn die Fernbedienung prinzipiell funktioniert, dann kommt beim Drücken von Tasten auf der Fernbedienung im Terminal Ausgaben ähnlich wie:

pulse 2670
 space 804
 pulse 505
 space 396
 pulse 482
 space 394
 pulse 454
 space 847
 pulse 451
 space 850

Test beenden mit Strg+C und LibreElec neu starten:

reboot

Fernbedienung konfigurieren

Dienste stoppen:

systemctl stop kodi
systemctl stop eventlircd

Mögliche Protokolle ermitteln:

ir-keytable 
Supported protocols: other lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp 

Scancodes der Fernbedienungstasten ermitteln:

ir-keytable -p <PROTOCOL> -t

Dabei die unterstützten Protokolle jeweils als <PROTOCOL> eintragen. Jedes Protokoll muss separat getestet werden. Sofern das korrekte Protokoll eingegeben wurde, das die Fernbedienung benutzt, werden beim Drücken einer Taste auf der Fernbedienung Scancodes ausgegeben. Diese können dann in einer Codetabelle eingetragen werden.

Codetabelle erstellen:

vi /storage/.config/rc_keymaps/one-for-all

In der ersten Zeile wird der Name der Fernbedienung und das verwendete Protokoll eingetragen und in den Folgezeilen werden dann den jeweiligen Scancodes die entsprechenden Tasten zugeordnet, wie z. B.:

# table one-for-all, type: rc-6
0x800f0400 KEY_0
0x800f0401 KEY_1
0x800f0402 KEY_2
0x800f0403 KEY_3
0x800f0404 KEY_4
0x800f0405 KEY_5
0x800f0406 KEY_6
0x800f0407 KEY_7
0x800f0408 KEY_8
0x800f0409 KEY_9
0x800f040d KEY_MENU
0x800f0412 KEY_PAGEUP
0x800f0413 KEY_PAGEDOWN
0x800f041e KEY_UP
0x800f041f KEY_DOWN
0x800f0420 KEY_LEFT
0x800f0421 KEY_RIGHT
0x800f0422 KEY_OK
0x800f0423 KEY_BACK
0x800f0423 KEY_EXIT
0x800f0426 KEY_EPG
0x1010 KEY_VOLUMEUP
0x1011 KEY_VOLUMEDOWN
0x100d KEY_MUTE

Eine Datei mit allen möglichen Tastenbezeichnungen kann mit folgendem Befehl erstallt werden:

irrecord --list-namespace > namespace.txt

Die Codetabelle muss dann noch durch einen Eintag in der rc_maps.cfg aktiviert werden:

vi /storage/.config/rc_maps.cfg

Dort den in der oben erstellten Keymap angegebenen Konfigurationsnamen (z. B. one-for-all) eintragen:

* * one-for-all 

Konfiguration testen:

ir-keytable -c -w /storage/.config/rc_keymaps/one_for_all
ir-keytable -r

Mappingtabelle für KODI erstellen

Datei mit Mappingtabelle anlegen/bearbeiten:

vi /storage/.kodi/userdata/Lircmap.xml
<lircmap>
<remote device="one-for-all-sat0847">
   <up>KEY_UP</up>
   <Down>KEY_DOWN</Down> 
   <Left>KEY_LEFT</Left> 
   <Right>KEY_RIGHT</Right> 
   <Select>KEY_OK</Select> 
   <Back>KEY_BACK</Back> 
   <Menu>KEY_MENU</Menu> 
   <pageplus>KEY_PAGEUP</pageplus>  
   <pageminus>KEY_PAGEDOWN</pageminus> 
   <zero>KEY_0</zero> 
   <one>KEY_1</one> 
   <two>KEY_2</two> 
   <three>KEY_3</three> 
   <four>KEY_4</four> 
   <five>KEY_5</five> 
   <six>KEY_6</six> 
   <seven>KEY_7</seven> 
   <eight>KEY_8</eight> 
   <nine>KEY_9</nine> 
   <guide>KEY_GUIDE</guide> 
   <stop>KEY_EXIT</stop>
</remote>
</lircmap>

System neu starten:

reboot

Fernbedienung testen

Erneut per ssh einloggen:

ssh root@tuxtv

Test der Fernbedienung starten:

irw

Bei einem Tastendruck auf der Fernbedienung sollte bei korrekter Konfiguration im Terminal eine entsprechende Meldung erscheinen, wie z. B.:

67 0 KEY_UP devinput

PiHole auf einem „RaspberryPi Zero W“ installieren

Raspbian Lite herunterladen und auf SD-Karte installieren

Prinzipiell kann als Basis jedes Linuxsystem verwendet werden. Sehr klein und schlank ist Raspbian lite, das hier heruntergeladen werden kann:

https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit

Dann das System entsprechend der Anleitung auf oben genannter Seite (z. B. mit Balena Etcher) installieren.

Karte auswerfen und neu mounten.

SSH und WLAN einrichten

SSH

Auf der Bootpartition der SD-Karte vor dem ersten Start die Datei ssh erzeugen:

touch ssh

Die Datei ssh kann leer bleiben. Diese aktiviert permanent den automatischen Start von SSH (und wird vom System nach dem ersten Start automatisch wieder gelöscht).

WLAN

Auf der Bootpartition der SD-Karte vor dem ersten Start die Datei wpa_supplicant.conf erzeugen:

vim wpa_supplicant.conf

mit folgendem Inhalt:

country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
ap_scan=1
network={
scan_ssid=1
ssid="wlanname"
psk="unserpasswort"
key_mgmt=WPA-PSK
}

Dabei wlanname und unserpasswort entsprechend der WLAN-Zugangsdaten anpassen.

Bei ersten Systemstart wird die Datei automatisch nach /etc/wpa_supplicant verschoben und kann dort bei Bedarf nachträglich jeder Zeit noch angepasst/korrigiert werden.

Hostname

Der Name kann von rasperrypi z.B. auf pihole abgeändert werden:

  • hostname pihole
  • In /etc/hosts anpassen
  • In /etc/hostname anpassen

Router einrichten

Hier am Beispiel der FitzBox 7490 Version 7.29

  • In den Netzwerkeinstellungen dem RaspberryPi einen eindeutigen Namen (z.B. PiHole) geben und insbesondere eine IP fest zuordnen.

Möglichkeit 1

Der Pi-Hole erfasst so jedes einzelne Gerät, das Gastnetz ist aber nicht betroffen.

  • Heimnetz - Netzwerk - Netzwerkeinstellungen
  • ganz unten: weitere Einstellungen
  • IPv4-Einstellungen
  • Bei Lokaler DNS-Server die IP das Pi-Hole eintragen
  • IPv6-Einstellungen
  • DNSv6-Server im Heimnetz abschalten oder die IPv6-Adresse des Pi-Hole eintragen

Möglichkeit 2

Die FritzBox leitet alle DNS-Abfragen über den Pi-Hole.

  • Diese IP dann unter Internet/Zugangsdaten/DNS-Server als Bevorzugter DNSv4-Server eintragen. Dort zusätzlich einen Alternativen DNSv4-Server (z.B. 8.8.8.8) eintragen, damit das Internet auch noch funktioniert, wenn der PiHole mal hängt oder nicht online ist.

Erste Start des RaspberryPi Zero

Die SD-Karte in den Raspberry einlegen, booten und per SSH einloggen:

ssh pi@pihole

Anstatt pihole muss ggf. der im Router eingestellte Namen bzw. IP-Adresse eingegeben werden.

Standard-Passwort bei Verwendung von Raspbian: raspberry

Neus passwort setzen:

passwd

SSH Root-Login

Sofern ein Root-Login möglich sein soll, muss zunächst ein Root-Passwort gesetzt werden:

sudo passwd

Sofern sich root über ein Passwort einloggen soll, muss in der Datei /etc/ssh/sshd_config folgender Eintrag gesetzt werden:

PermitRootLogin yes

… oder anstatt Passwort die sicherere Variante über Public-Key (siehe auch SSH):

PermitRootLogin prohibit-password

Danach den ssh-Server neu starten:

service ssh restart

Pi-Hole installieren und einrichten

PiHole kann durch ein Skript entsprechend der Anleitung unter https://github.com/pi-hole/pi-hole/#one-step-automated-install installiert werden:

wget -O ph.sh https://install.pi-hole.net 
bash ph.sh

oder:

curl -sSL https://install.pi-hole.net | bash

Alle notwendigen Konfigurationen werden während der Installation abgefragt. In der Regel sind die vorausgewählten Konfigurationen auch die Sinnvollsten.

Bei Bedarf kann das am Ende des Installationsprozesses angezeigte Passwort auch geändert werden:

pihole -a -p

Webinterface aufrufen

Den RaspberryPi neu booten und dann auf einem anderen Computer im Netz im Browser eingeben:

http://<IP des RaspberryPi>/admin

Dabei anstatt <IP des RaspberryPi> die zuvor fest vergebene IP eingeben.

Update

Sobald Updates für PiHole vorhanden sind, wird dies am unteren Rand des Webinterfaces angezeigt. Um ein Update für PiHole durchzuführen, muss folgender Befehl über die Konsole (Login z. B. über ssh) eingegeben werden:

pihole -up

QT5 unter XFCE

KDE-Anwendungen, die auf QT5 zurückgreifen, zeigen auf anderen Desktopumgebungen (z. B. XFCE) nur teilweise Icons an, da die Konfiguration nicht korrekt gelesen werden kann. Um dies zu beheben muss zuserst das Konfigurationsverzeichnis von QT5 erstellt werden.

Hierzu das Konfigurationstool qt5ct installieren (kde-runtime muss auch installiert sein):

sudo apt install qt5ct

Dann einen neuen Benutzer anlegen. Anschließend den im neuen Benutzerverzeichnis erstellten Ordner „~/.config/qt5ct“ in das eigene Benutzerverzeichnis kopieren.

Im Anschluss kann das QT5-Konfigurationswerkzeug qt5ct gestartet und dort das gewünschte icon-theme ausgewählt werden.

MiniDLNA

Einfacher DLNA-Server

Die Konfiguration ist mit Hilfe der Kommentare in den Konfigurationsdateien selbsterklärend.

Installation:

Abhängigkeiten:

sudo apt-get install libexif12 libjpeg62 libid3tag0 libflac8 libvorbisfile3 sqlite3 libuuid1

Installation:

sudo apt-get install minidlna

Konfigurationsdateien:

Startverhalten und Definition des users, unter dessen ID MiniDLNA läuft:

/etc/default/minidlna

Standardmäßig wird der Benutzer minidlna verwendet. Ein anderer Benutzer <user> und die dazugehörige Gruppe <group> kann in dieser Datei definiert werden.

Wird ein anderer Benutzer definiert, so sind folgende Anpassungen bei den Zugriffsrechten notwendig:

chown -R <user>:<group> /var/cache/minidlna

Weiterhin müssen in der Hauptkonfigurationsdatei /etc/minidlna.conf folgende Anpassungen gemacht werden:

user=<user>
media_dir=/home/<user>/media/

Datenbank neu aufbauen

Entweder wird die Datenbank im Ordner /var/cache/minidlna gelöscht oder die Datenbank über folgenden Befehl neu aufgebaut (zuvor muss ein eventuell laufender MiniDLNA-Dienst angehaöten werden:

minidlnad -R

Nemo unter XFCE

Wenn der Dateimanager Nemo (Cinnamon-Desktop) unter XFCE installiert wird, sind folgende Anpassungen notwendig.

Sprache auf Deutsch umstellen

Hierzu müssen folgende Pakete (inklusive aller Abhängigkeiten) installiert werden:

sudo apt-get install cinnamon-core cinnamon-l10n

„Im Terminal-Öffnen“ anpassen

Standardmäßig versucht Nemo über den Befehl terminix ein Terminal zu öffnen. Damit das Terminal auch unter XFCE geöffnet werden kann muss folgender Befehl ausgeführt werden:

gsettings set org.cinnamon.desktop.default-applications.terminal exec xfce4-terminal

Compare-Programm auswählen

Damit die Compare-Funktion von nemo-compare funktioniert, muss das passende Programm eingestellt werden. Hierzu gibt es ein Konfigurationsprogramm:

nemo-compare-preferences

Proxyserver

Einrichtung des Proxys für einen bestimmten Benutzer:  ~/.profile
Systemweite Einrichtung des Proxys: /etc/profile

Bei manchen Systemen wie z. B. Lubuntu müssen zusätzlich in die Dateies /etc/environment und /etc/apt/apt.conf.d/70debconf ergänzt werden. In /etc/environment werden die gleichen Eintragungen wie in der profile-Datei vorgenommen (jedoch ohne das führende „export“). Die Datei /etc/apt/apt.conf.d/70debconf wird wie folgt ergänzt (je nach System kann der Dateiname etwas variieren):

Acquire::http
 {
 Proxy "http://<Benutzername>:<Passwort>@<Proxy>:<Port>";
 }

Folgende Zeilen müssen am Ende der profile-Datei hinzugefügt werden:

export http_proxy=http://BENUTZER:PASSWORD@SERVER-IP_ODER_NAME:PORT
export https_proxy=http://BENUTZER:PASSWORD@SERVER-IP_ODER_NAME:PORT
export ftp_proxy=http://BENUTZER:PASSWORD@SERVER-IP_ODER_NAME:PORT
export no_proxy=localjost
export HTTP_PROXY=$http_proxy
export HTTPS_PROXY=$https_proxy
export FTP_PROXY=$ftp_proxy
export NO_PROXY=$no_proxy

Sofern keine Logindaten benötigt werden, kann „BENUTZER:PASSWORD@“ weggelassen werden.

 

Smartphone unter Linux flashen

ACHTUNG: Durch das Flashen kann das Smartphone unbrauchbar werden und die Gewährleistung des Herstellers erlischt! Weiterhin werden alle Daten auf dem Smartphone gelöscht. Das Flashen geschieht auf eigene Gefahr!

Kurzanleitung: Flashen CyanogenMod auf einem Samsung Galaxy S III Mini

Im Folgenden habe ich stichwortartig zusammengefasst, wie man CyanogenMod (Version 12.2 – entspricht Android 5.1.1) unter Debian Testing auf ein Samsung Galaxy S III Mini flasht und dort den Rootzugang einrichtet. Diese Anleitung erhebt keinen Anspruch auf Vollständigkeit und kann am Smartphone großen Schaden anrichten!

Vorbereitung auf dem (Linux-) Computer:

  1. CyanogenMod herunterladen
    Das Samsung Galaxy S III Mini wird von CyanogenMod offiziell nicht unterstützt. Eine für dieses Smartphone angepasst Version kann jedoch bei Novafusion heruntergeladen werden. Dort muss die „odin“-Version ausgewählt werden.
  2. Das Archiv dann 2x entpacken (die Dateien boot.img, recovery.img und system.img werden benötigt)
  3. heimdall aus den Quellen installieren

Smartphone vorbereiten (Werkseinstellungen zurücksetzen)

  1. Smartphone ausschalten
  2. Home + Lauter + Power gleichzeitig gedrückt halten (bei mir musste ich diese Tasten so lange gedrückt halten, bis das Start-Logo zum zweiten mal erscheint)
  3. Über die Wipe-Funktion das Smartphone auf Werkseinstellungen zurücksetzen
  4. Smartphone ausschalten

ROM flashen

Vorbereitung auf dem Smartphone

  1. Home + Leiser + Power gleichzeitig gedrückt halten um den Download-Modus zu starten
  2. Die Warnung mit „Lauter“ bestätigen
  3. Das Smartphone mit einem USB-Kabel mit dem Computer verbinden

Vorbereitung auf dem Computer

Zunächst müssen die Namen der Partitionen und die jeweils zugehörigen Flash-Filenames auf dem Smartphone ermittelt werden:

PITFILE=samsung-s3-mini-GT-I8190.pit
heimdall download-pit --output $PITFILE
heimdall print-pit --file $PITFILE 2>&1 | grep -iE -B1 'Partition Name|Flash Filename' | less

Flashen

Um nun die zuvor heruntergeladenen Images von CyanogenMod auf das Samsung Galaxy S III Mini zu flashen in der Console auf dem PC folgenden Befehl eingeben:

heimdall flash --Kernel boot.img --Kernel2 recovery.img --SYSTEM system.img

Einstellungen unter CyanogenMod

Entwickler-Modus aktivieren

Um unter CyanogenMod den Entwickler Modus zu aktivieren muss man unter „Einstellungen“ / „Über das Telefon“ mehrmals auf die „Build-Nummer“ tippen.

Root-Zugriff aktivieren

Um den Root-Zugriff zu aktivieren unter „Einstellungen“ / „Entwickleroptionen“ / „Root-Zugriff“ die Funktion „Rootzugriff für Apps“ auswählen.

APP-Berechtigungen einschränken

Nach Freischaltung des Root-Zugriffs kann für jede einzelne APP die Berechtigungen unter „Einstellungen“ / „Datenschutz“ / „Datenschutz“ manuell festgelegt werden. Die Funktion „Standardmäßig aktivieren“ schränkt die Zugriffsrechte von neu installierten APPs automatisch auf „nachfragen“ ein.

Durch den Root-Zugriff kann jetzt auch eine Firewall (z. B. von AVAST verwendet werden) um den Zugriff von einzelnen APPs auf Netzwerk und Internet einzuschränken.

 

Seafile

SeaFile und OwnCloud

Cloud-Fileserver, der (insbesondere bei vielen kleinen Dateien) sehr viel schneller arbeitet als OwnCloud. Daher lohnt sich auch die Kombination, OwnCloud für die Synchronisation von Kalender, Aufgaben sowie Kontakte zu verwenden und Seafile für die Dateisynchronisation.

Eine sehr ausführliche Anleitung gibt es auch unter http://manual.seafile.com/deploy/using_mysql.html

SeaFile installieren

Die aktuelle Version kann unter http://seafile.com/en/download/ heruntergeladen werden. Für den Banana Pi mit Bananian als System kann das Server-Paket für den Raspberry Pi verwendet werden.

Die Installation erfolgt durch Entpacken in ein eigenes Verzeichnis z. B. unter /root

cd /root
mkdir seafile
# Die zuvor heruntergeladene Installationsdatei hier her kopieren
tar -xzf seafile-server_*
mkdir installed
mv seafile-server_* installed

Beim Entpacken wird der Symbolische Link seafile-server-latest erstellt, der auf das aktuelle Verzeichnis verweist. Bei einem Update muss dann das neue Archiv nur wie oben beschrieben entpackt werden und schon ist die neue Version installiert ohne dass die alte Version überschrieben wird. Auch die Einstellungen bleiben erhalten.

Abhängigkeiten installieren

Folgende Pakete werden für Seafile benötigt:

  • python 2.7
  • python-setuptools
  • python-imaging
  • python-mysqldb
apt-get update
apt-get install python2.7 python-setuptools python-imaging python-mysqldb

MySQL-Datenbanken erstellen

Zuvor muss MySQL vollständig eingerichtet sein. Dies wird im Kapitel zur Owncloud-Installation im Detail beschrieben.

Folgende SeaFile-Komponenten benötigen jeweils eine eigene Datenbank:

  • ccnet server
  • seafile server
  • seahub

Die einfachste Möglichkeit ist, das Konfigurationsscript setup-seafile-mysql.sh im aktuellen Seafile-Ordner zu verwenden:

/root/seafile/seafile-server-latest/setup-seafile-mysql.sh

Das Skript führt detailliert durch die gesamte Konfiguration. Hier ein Beispiel für eine lokale Installation:

-----------------------------------------------------------------
This script will guide you to setup your seafile server using MySQL.
Make sure you have read seafile server manual at
        https://github.com/haiwen/seafile/wiki
Press ENTER to continue
-----------------------------------------------------------------

What is the name of the server? It will be displayed on the client.
3 - 15 letters or digits
[ server name ] tuxcloud

What is the ip or domain of the server?
For example: www.mycompany.com, 192.168.1.101
[ This server's ip or domain ] 192.168.1.9

Which port do you want to use for the ccnet server?
[ default "10001" ] 10001

Where do you want to put your seafile data?
Please use a volume with enough free space
[ default "/root/seafile/seafile-data" ] /mnt/hdd/seafile

Which port do you want to use for the seafile server?
[ default "12001" ] 12001

Which port do you want to use for the seafile fileserver?
[ default "8082" ] 8082

-------------------------------------------------------
Please choose a way to initialize seafile databases:
-------------------------------------------------------

[1] Create new ccnet/seafile/seahub databases
[2] Use existing ccnet/seafile/seahub databases

[ 1 or 2 ] 1

What is the host of mysql server?
[ default "localhost" ] localhost

What is the port of mysql server?
[ default "3306" ] 3306

What is the password of the mysql root user?
[ root password ] 

verifying password of user root ...  done

Enter the name for mysql user of seafile. It would be created if not exists.
[ default "root" ] 

Enter the database name for ccnet-server:
[ default "ccnet-db" ] 

Enter the database name for seafile-server:
[ default "seafile-db" ] 

Enter the database name for seahub:
[ default "seahub-db" ] 

---------------------------------
This is your configuration
---------------------------------

    server name:            tuxcloud
    server ip/domain:       192.168.1.9
    ccnet port:             10001

    seafile data dir:       /mnt/hdd/seafile
    seafile port:           12001
    fileserver port:        8082

    database:               create new
    ccnet database:         ccnet-db
    seafile database:       seafile-db
    seahub database:        seahub-db
    database user:          root

Sollen viele Clients auf Seafile zugreifen, sollte zuvor ulimit erhöht werden:

ulimit -n 30000

Server starten

./seafile.sh start 
./seahub.sh start

Beim ersten Start von Seahub wird ein Admin-Account erstellt. Der User-Name bei Seafile ist immer eine E-Mail-Adresse.

Danach kann der erste Zugriff über einen Browser erfolgen:

http://192.168.1.9:8000/

 Beim Systemstart automatisch starten

Hierzu wird als root ein Init-Script erstellt (/etc/init.d/seafile-server):

#!/bin/bash
### BEGIN INIT INFO
# Provides: Seafile Server
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Seafile-Daemon at boot time
# Description: Enable service provided by Seafile.
### END INIT INFO

export LC_ALL='de_DE.UTF-8'
 
# Change the value of "seafile_dir" to your path of seafile installation
seafile_dir=/root/seafile
script_path=${seafile_dir}/seafile-server-latest
seafile_init_log=${seafile_dir}/logs/seafile.init.log
seahub_init_log=${seafile_dir}/logs/seahub.init.log
 
# Change the value of fastcgi to true if fastcgi is to be used
fastcgi=false
# Set the port of fastcgi, default is 8000. Change it if you need different.
fastcgi_port=8000
 
case "$1" in
 start)
 ${script_path}/seafile.sh start >> ${seafile_init_log}
 if [ $fastcgi = true ];
 then
 ${script_path}/seahub.sh start-fastcgi ${fastcgi_port} >> ${seahub_init_log}
 else
 ${script_path}/seahub.sh start >> ${seahub_init_log}
 fi
 ;;
 restart)
 ${script_path}/seafile.sh restart >> ${seafile_init_log}
 if [ $fastcgi = true ];
 then
 ${script_path}/seahub.sh restart-fastcgi ${fastcgi_port} >> ${seahub_init_log}
 else
 ${script_path}/seahub.sh restart >> ${seahub_init_log}
 fi
 ;;
 stop)
 ${script_path}/seafile.sh $1 >> ${seafile_init_log}
 ${script_path}/seahub.sh $1 >> ${seahub_init_log}
 ;;
 *)
 echo "Usage: /etc/init.d/seafile {start|stop|restart}"
 exit 1
 ;;
esac

Dann das Script ausführbar machen und rc.d aktualisieren:

chmod 755 /etc/init.d/seafile-server
update-rc.d seafile-server defaults

Manche Systeme starten den Server nach einen Reboot nicht, da Apache noch nicht läuft. Daher kann der Start über einen Cron-Job nachgeholt werden (Eintrag in /etc/crontab):

@reboot sleep 60 && service seafile-server start

Mitgelieferte Skripte

seaf-gc.sh

Seafile verwaltet die Dateien in Datenblöcken. Alte Datenblöcke von gelöschten Dateien und Bibliotheken werden jedoch nicht automatisch gelöscht, wodurch der von Seafile benötigte Speicher immer mehr anwächst. Somit empfiehlt es sich, unnötige Datenblöcke löschen zu lassen. Hierzu muss nur das Skript seaf-gc.sh im Seafile-Ordner gestartet werden:

/root/seafile/seafile-server-latest/seaf-gc.sh

Das entfernen unnötiger Datenblöcke ist z. B. vor dem Erstellen eines Backups zu empfehlen (siehe Kapitel Backup).

seaf-fsck.sh

Nach einem Systemabsturz kann die Dateistruktur von Seafile defekt sein. hierzu gibt es ein eigenes Script, das fehlerhafte Strukturen reparieren kann:

/root/seafile/seafile-server-latest/seaf-fsck.sh

reset-admin.sh

Wenn man das Admin-Passwort vergessen hat oder der Admin-Account nicht mehr richtig funktioniert, kann mit dem Tool reset-admin.sh der Admin-Account zurückgesetzt werden.

/root/seafile/seafile-server-latest/reset-admin.sh

seaf-fuse.sh

Stellt die Dateistruktur aller User und Bibliotheken in einem Verzeichnis dar, das mit dem Script seaf-fuse.sh gemountet wird. Allerdings besteht auf dieses Verzeichnis nur lesender Zugriff.

mkdir /mnt/seafile-fuse
/root/seafile/seafile-server-latest/seaf-fuse.sh start /mnt/seafile-fuse

Unmounten geht wie folgt:

/root/seafile/seafile-server-latest/seaf-fuse.sh stop

Backup

Anbei ein Skript für ein Backup mit MySQL und storeBackup. Zunächst wird der Seafile-Server gestoppt, damit im Backup ein definierter Zustand gespeichert wird. Dann werden unnötige Datenblöcke gelöscht (seaf-gc.sh) und die Datenbanken gesichert.
Als Backup-Programm wird storeBackup verwendet. Die verwendete Konfigurationsdatei wird im Skript unter /root/bin/storeBackup/seafile.cfg gesucht. Da die Datenbanken zuvor in den Daten-Ordner von Seafile gesichert wurden, sind diese ebenfalls im Backup enthalten.
Am Ende wird der Seafile-Server wieder gestartet.

seafile=/mnt/hdd/seafile
[ -f "$seafile/database-backup" ] || mkdir -p "$seafile/database-backup"
service seafile-server stop
/root/seafile/seafile-server-latest/seaf-gc.sh
mysqldump --lock-tables -h localhost -u root -p<PASSWORT> ccnet-db   > "$seafile/database-backup/ccnet-db.bak"
mysqldump --lock-tables -h localhost -u root -p<PASSWORT> seafile-db > "$seafile/database-backup/seafile-db.bak"
mysqldump --lock-tables -h localhost -u root -p<PASSWORT> seahub-db  > "$seafile/database-backup/seahub-db.bak"
storeBackup -f /root/bin/storeBackup/seafile.cfg
service seafile-server start

Backup zurückspielen:

mysql -h localhost -u root -p<PASSWORT> ccnet-db   < ccnet-db.bak
mysql -h localhost -u root -p<PASSWORT> seafile-db < seafile-db.bak
mysql -h localhost -u root -p<PASSWORT> seahub-db  < seahub-db.bak

Update

Mit folgendem Script kann eine neue Version von Seafile automatisch eingespielt werden. Es muss lediglich die neue Versionsnummer eingegeben werden. Das Script ist für den Raspberry-Pi bzw. Banana-Pi geschrieben und muss für andere Systeme ggf. angepasst werden.

#! /bin/bash

# Variablen definieren
[ "$1" == "" ] && read -p "Bitte Version eingeben (z.B. 4.2.3): " ver || ver=$1
download_path=/root/Software
seafile_path=/root/seafile

# Seafile herunterladen
cd $download_path
wget https://github.com/haiwen/seafile-rpi/releases/download/v$ver/seafile-server_${ver}_pi.tar.gz 

# Seafile-Server entpacken ...
echo "seafile-server_${ver}_pi.tar.gz wird entpackt ..."
cd $seafile_path
tar -xzvf $download_path/seafile-server_${ver}_pi.tar.gz

# Seafile Server anhalten
echo "Seafile-Server wird angehalten ..."
service seafile-server stop

# Symbolischen Link aktualisieren ...
echo "Link seafile-server-latest neu setzen ..."
rm seafile-server-latest
ln -s $seafile_path/seafile-server-$ver seafile-server-latest

# Seafile neu starten
echo "Seafile-Server wird gestartet ..."
service seafile-server start
exit

NextCloud / ownCloud auf einem RaspberryPi / BananaPi

Download von NextCloudPi unter: https://ownyourbits.com/nextcloudpi/

oder händisch nach folgender Anleitung:

bananapiBetriebssystem auf SD-Karte installieren

Im Folgenden wird die Einrichtung mit Bananian, einer Debian-Variante für den BananaPi, gezeigt.

Download

wget http://dl.bananian.org/releases/bananian-latest.zip
unzip bananian-latest.zip

auf SD-Karte kopieren

Die SD-Karte muss min. 2 GB groß und Class 10 sein.

# SD-Karte einlegen, das Device der SD-Karte ermitteln
dmesg | tail          
# Gegebenenfalls die Karte unmounten
sudo umount /dev/<sd-card>
# Image kopieren (<sd-card> steht für z.B. sdd)
sudo dd if=bananian-<xxxx>.img of=/dev/<sd-card> bs=1M && sync

Erster Start von Bananian

SD Karte in den BananaPi einlegen und den BananaPi booten (einfach Stromversorgung einstecken).

Der Standard-Login ist „root“, das Standard-Passwort ist „Pi“. Dann die Grundkonfiguration durchführen:

bananian-config
bananian-update

Externe Festplatte einbinden (optional)

Device ermitteln:

fdisk -l

Im Folgenden wird davon ausgegangen, dass die Festplatte als Device /dev/sda eingebunden ist.

Festplatte partitionieren (mit parted):

select /dev/sda
mktable msdos
mkpart primary ext4 0% 100%
q

Dateisystem erstellen:

mkfs -t ext4 /dev/sda1 -V

In die fstab eintragen:

mkdir /mnt/hdd
echo "/dev/sda1 /mnt/hdd ext4 defaults 0 0" >> /etc/fstab
mount -a

Owncloud installieren

Repository einfügen und OwnCloud installieren

wget -O - http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_8.0/Release.key | apt-key add -
echo "deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_8.0/ /" > /etc/apt/sources.list.d/owncloud.list
apt-get update
apt-get install owncloud php-pear php-apc

Apache konfigurieren

Apache auf die .htaccess-Datei der Owncloud einstellen

In die Datei /etc/apache2/sites-enabled/000-default folgendes am Ende anfügen:

<Directory /var/www/owncloud>
 Options Indexes FollowSymLinks MultiViews
 AllowOverride All
 Order allow,deny
 Allow from all
</Directory>

Apache neu starten:

service apache2 reload

Maximale Dateigröße auf 2 GB anheben

In der Datei /var/www/owncloud/.htaccess folgende Zeilen anpassen:

php_value upload_max_filesize 2G
php_value post_max_size 2G

In der Datei /etc/php5/apache2/php.ini folgende Zeilen anpassen:

upload_max_filesize = 2G
max_file_uploads = 200
post_max_size = 2G

Cache aktivieren:

In der Datei /www/owncloud/config/config.php folgendes eintragen:

'memcache.local' => '\OC\Memcache\APC',

Apache neu starten:

a2enmod rewrite
a2enmod headers
service apache2 reload

SSL aktivieren

Zertifikate erstellen

Am besten in ein Verzeichnis wechseln, welches nur vom Root erreichbar ist, z. B. mit

cd /root
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -reqexts v3_req -extensions v3_ca

Dateneingabe während der Zertifikaterstellung:

    • Country Name (Ländercode): = DE
    • State or Province Name (Bundesland): = <Bundesland>
    • Locality Name, eg. City (Stadt): = <Ort>
    • Organization Name (Firmenname): = Privat
    • Organizational Unit Name (Abteilung) = <Enter>
    • Common Name, eg. YOUR Name: = <domain> „Hier muss die Domain angegeben werden, über die der Server erreichbar ist (bei Nutzung eines DynDNS-Dienstes, die dort zugeteilte Adresse)“
    • Email Adress: = <E-Mail>
    • A challenge password: = <Enter>
  • An optional company name: = <Enter>
Apache anpassen

In der Datei /etc/apache2/sites-enabled/000-default folgende Zeichen am Ende der Datei hinzufügen:

<VirtualHost *:443>
        DocumentRoot /var/www
        ServerName tuxcloud
        SSLEngine on
        SSLCertificateFile /root/server.crt
        SSLCertificateKeyFile /root/server.key
</VirtualHost>

In der Datei /etc/apache2/sites-available/default folgende Zeichen am Ende der Datei hinzufügen:

<VirtualHost *:443>
        DocumentRoot /var/www
        ServerName tuxcloud
        SSLEngine on
        SSLCertificateFile /root/server.crt
        SSLCertificateKeyFile /root/server.key
</VirtualHost>

In der Datei /etc/apache2/sites-available/default-ssl folgende Einträge anpassen:

SSLCertificateKeyFile /root/server.key
SSLCertificateFile /root/server.crt

Apache-Konfiguration anpassen und testen:

a2enmod ssl
apache2ctl configtest

Hier sollte ein „Syntax OK“ herauskommen.

Apache neu starten:

service apache2 reload

MySQL installieren

MySQL ist deutlich schneller als SQLite und empfiehlt sich bei größeren Datenmengen.

Installation MySQL

apt-get install mysql-server

Während der Installation öffnet sich ein Fenster, für das root-Passwort, das an dieser Stelle definiert werden muss.

Installation PHPmyAdmin und Datenbank einrichten

apt-get install phpmyadmin

Während der Installation fragt phpMyAdmin, welchen Webserver verwendet werden soll. In unserem Fall ist das apache2. Weiterhin Passwort für den administrativen Benutzer von MySQL eingeben.

Dann die Datenbank für Owncloud einrichten:

http://<IP des Servers>/phpmyadmin

unter Datenbank neuen Namen „owncloud“ eingeben und Datenbank speichern.

Zugriff von außen (über das Internet)

Um über das Internet auf den Server zugreifen zu können braucht man eine feste Adresse. Diese kann man z.B. über spdns.de bekommen. Im Router wird dieser Dienst bei DynDNS eingetragen und eine Portweiterleitung von Port 443 (HTTPS) zum Server gemacht.

Owncloud einrichten

Erster Start

http://<IP des Servers>/owncloud/

Benutzer: root
Passwort: *****

Datenbank auf MySQL umstellen

cd /var/www/owncloud
su www-data
php occ db:convert-type --password="passwort" --all-apps mysql root localhost owncloud

Umstellung auf Cron

Aufräumen nicht nach jedem Seitenaufruf sondern über Cron (beschleunigt Seitenaufrufe):

EDITOR=vim.tiny && crontab -u www-data -e
*/15 * * * * php -f /var/www/owncloud/cron.php

Als Administrator im Web-Frontend unter „Administration“ von Ajax auf Cron umstellen.

Einbindung externer Speicher

Samba-Client installieren:

apt-get install smbclient

Als root in Owncloud die App „External storage support“ aktivieren und unter „Administration“ dann die benötigten Speicher einbinden.

E-Mail-Versand einrichten

Hier am Beispiel eines GMX-Accounts:

Als root unter „Administration“ die Mail-Daten eingeben

  • Sende-Modus: smtp
  • Verschlüsselung: TLS
  • Absender-Adresse: <Login> | gmx.de
  • Authentifizierung: „Anmelden“ und „Authentifizierung benötigt“
  • Adresse des Servers: mail.gmx.net:587
  • Zugangsdaten: <Login> | <Passwort>

In der Datei /var/www/owncloud/config/config.php sehen die Einträge so aus:

'mail_smtpmode' => 'smtp',
'mail_smtpsecure' => 'tls',
'mail_smtpauth' => 1,
'mail_smtphost' => 'mail.gmx.net',
'mail_smtpname' => '<Login>@gmx.de',
'mail_smtppassword' => '<Passwort>',
'mail_smtpport' => '587',
'mail_smtpauthtype' => 'LOGIN',
'mail_from_address' => '<Login>',
'loglevel' => '0',
'mail_domain' => 'gmx.de',

<Login> ist der Teil der Mailadresse vor dem @.

Kalender und Kontakte aktivieren

Im Administrationsmenü unter Apps/PIM Calendar und Contacts aktivieren.

Synchronisierung einrichten

Kontakte

Android

CADroid installieren und Zertifikate importieren
CardDAV-Sync free installieren
CardDAV-Konto hinzufügen
Server: https://<Server>/owncloud/remote.php/carddav

CardDAV-Kontakte können mit der APP „Contact Editor free“ (oder Pro-Version) bearbeitet werden.

Thunderbird/Icedove

Das Plugin „SOGo Connector“ installieren (unter Debian für Icedove über die Paketverwaltung „xul-ext-sogo-connector“ installieren).
Dann im Adressbuch über „File > New > Remote Addressbook“ hinzufügen. Die benötigte URL bekommt man über das OwnCloud-Frontend im Browser: APP Kontakte > Einstellungssymbol links unten > CardDAV-Link“.

Das AddOn CategoryManager erlaubt es die in ownCloud erstellen Gruppen zu synchronisieren

Kalender

Android

„CalDAV Sync Free Beta“ installieren
CalDAV-Konto in der Kalender-APP hinzufügen
Server: https://<Server>/owncloud/remote.php/caldav

Thunderbird/Icedove

neuer Kalender -> im Netzwerk -> CalDAV
https://<Server>/owncloud/remote.php/caldav/calendars/<user>/<kalender>
Offline-Unterstützung

Aufgaben

Hierzu muss in der Owncloud zusätzliche die APP „Tasks“ installiert werden:
Download unter https://apps.owncloud.com/content/show.php/Tasks?content=164356
entpacken und auf den Server hochladen in: /var/www/owncloud/apps
danach im Web-Frontend als root die App „Tasks“ aktivieren

Android

Synchronisation über CalDAV-Sync und Tasks von Marten Gajda.

Notizen

Mit qownnotes lassen sich auch Notizen wie in evernote oder onenote speichern und synchronisieren. Das passende git-repository ist: https://github.com/pbek/QOwnNotes

Zunächst muss im owncloud/apps-Verzeichnis die App qownnotesapi installiert werden.
https://github.com/pbek/qownnotesapi
Für den Desktop gibt es einen Client: http://www.qownnotes.org/

Android

Über F-Droid kann man sich unter https://f-droid.org/app/org.aykit.MyOwnNotes die passende App herunterladen.

Backup anlegen

Sicherung der Daten auf einen USB-Datenträger:

Mit blkid die UUID des USB-Datenträgers herausfinden. (Hier z.B. 7963a8a2-92e8-4050-9c8a-a84a06415824)
Ein Verzeichnis anlegen: mkdir /media/backup

Die Datei /etc/fstab erweitern:

 UUID=7963a8a2-92e8-4050-9c8a-a84a06415824 /media/backup ext4 defaults 0 2

in /root/ die Datei backup.sh anlegen. Inhalt:

#Backup-ownCloud
 tar -czvf "/media/backup/owncloud_$(date +"%Y%m%d").tar.gz" /var/www/owncloud
#Datenbank-Backup
 mysqldump --lock-tables -h localhost -u root -passwort owncloud > "/media/backup/owncloud-db_$(date +"%Y%m%d").bak"
#alte Dateien löschen
 find "/media/backup/" -type f -name "*-db_*.bak" -mtime +6 -exec rm -f {} \;
 find "/media/backup/" -type f -name "*.tar.gz" -mtime +6 -exec rm -f {} \;

ausführbar machen chmod +x backup.sh

In cron eintragen (alle Daten, die älter als 4 Tage sind, werden Nachts um 2:00 Uhr gelöscht):

crontab -e
 0 2 * * * /root/backup.sh

reboot

Einbindung per WebDAV

https://www.meinedomain.de/remote.php/webdav

Pfad zum Datenspeicher ändern

Der Pfad zum Datenspeicher (data) steht in /var/www/owncloud/config/config.php

Nach der Anpassung der Webserver neustarten: service apache2 restart

Update auf owncloud 9

Wenn nach dem Update weiterhin der Wartungsmodus angezeigt wird:
In der Datei /var/www/owncloud/config/config.php
maintenancemode => false auf true setzen

Evtl. müssen die in /var/www/owncloud die Dateien
phpinfo.inf und apache.pem gelöscht werden.

Damit die Aufgabenplanung wieder funktioniert muss die aktuelle Version von tasks von Hand heruntergeladen und ins Verzeichnis apps/tasks entpackt werden.
Download: https://github.com/owncloud/tasks/archive/DAVclient.zip

Backup

Mit calcardbackup lassen sich Adressbücher und Kontakte einfach sichern.

Android

ownCloud Client Zugriff auf den Cloudspeicher (F-Droid)
DAVdroid – Kalendersynchronisation (F-Droid)
o
wnCloud Client Zugriff auf den Cloudspeicher (GooglePlaystore)
CalDAV Sync Free
– zur Kalendersynchronisation (GooglePlaystore)

BigMap (OSM-Landkarten in hoher Auflösung runterladen)

In Programmen wie z. B. QLandkarte können immer nur die aktuell dargestellten Kartenausschnitte mit der aktuellen auflösung als Bild abgespeichert werden. Abhilfe schafft hier die internetseite Bigmap, die ein Perl-Script zum Download der Karte mit dem gewünschen Ausschnitt in der gewünschten Auflösung (bzw. Zoomstufe) erstellt.

Script erstellen

  • Auf BigMap den Ausschnitt wählen und mit “Submit” bestätigen.
  • Im eingeblendeten Fenster Auflösung anpassen (z. B. mit „in/double size“)
  • Script mit Klick auf „Perl“ herunterladen.

Script unter Linux ausführen

Zunächst muss die GD Bibliothek für Perl installiert werden:

sudo apt-get install libgd-gd2-perl

Dann kann das heruntergeladene Perl-Script ausgeführt werden:

mkmap.pl > Landkarte.png

Download-Ordner in Firefox (Android)

Unter Android kann im Forefox der Download-Ordner wie folgt geändert werden:

  • In einem neuen Tab about:config aufrufen
  • In der Seiten-Suche down eingeben
  • Den Eintrag browser.download.folderList suchen und den Wert von 1 auf 2 setzen
  • Neuer Eintrag vom Typ String mit der Bezeichnung browser.download.dir erstellen und den gewünschen Zielpfad angeben z. B. /storage/extSdCard/Download

System-Apps deaktivieren (Samsung Galaxy)

System-Apps können ohne ein Handy zu rooten nicht deinstalliert jedoch deaktiviert werden.

Möchte man einiges der Google- und Samsung Apps loswerden, so können folgende Apps auf einem Samsung Galaxy SIII Mini problemlos deaktivert werden:

  • Bubbles
  • ChatON
  • Chrome
  • Flipboard
  • Gmail
  • Google Play Books
  • Google Play Magazines
  • Google Play Movies
  • Google Play Music
  • Google+
  • S Planner
  • S Planner-Widget
  • S Suggest
  • S Voice
  • Samsung Apps
  • Samsung Backup Provider
  • Samsung Browser Sync ….
  • Samsung Cloud Data Relay
  • Samsung Contact Sync …
  • Samsung Push Service
  • Samsung Syncadapters
  • Samsung-Konto
  • Talk
  • TalkBack
  • Video Hub
  • Weather daemon
  • Weather Widget
  • Weather Widget Main
  • Yahoo! Finance Daemon
  • Yahoo! Finanzen
  • Yahoo! News

APPs für Android

Fotos und Bilder

  • A Better Camera (kostenpflichtig für einige Funktionen)
  • Barcode Scanner (mit Historie)
  • Foto-Editor (einfacher Foto-Editor)
  • Open Camera (Foto einstellen)
  • cewe Smartphoto

Büro

  • aCalendar (leise bei Terminen siehe „Audio Mode Switcher“)
  • Note Everything Pro (kostenpflichtig)
  • Stundenplan Deluxe
  • AndrOpen Office
  • Polaris Office

Gesundheit

  • Apotheke
  • BlutdruckDaten

Internet und Kommunikation

  • Aqua Mail (Sichern und Wiederherstellen der Konten zum einfachen übertragen auf andere Geräte)
  • Firefox (Erweiterungen: Adblock Edge, Delete Cookies on Exit)
  • Threema (sichere, verschlüsselte Alternative zu WhatsApp)

Multimedia

  • Audials
  • Rocket Player
  • VLC
  • YouTube

TV

  • Das Erste
  • ARD Mediathek
  • Eurosport Player
  • Tagesschau
  • ZDF
  • ZDF heute

System

  • Audio Mode Switcher (Handy leise oder auf Vibration zu bestimmten Terminen oder auf Grund von Schlüsselwörtern im Google-Kalender)
  • Avast! Mobile Security
  • Avast! Anti-Theft
  • Dropsync
  • Boxcryptor Classic
  • EasyBackup
  • ES Datei Explorer
  • ES Task-Manager
  • KeyPassDroid
  • Fon (Fritz!)
  • Wi-Fi Finder
  • Let’s print Droid / Let’s print PDF / Let’s print Framework
  • Startup Manager

Karten und GPS

  • Navigator
  • Earth
  • Maps
  • OsmAnd (OpenStreet Navigation mit Offline Funktion)
  • Google Sky Map

Sonstiges und Infos

  • mini Light MAXI Bright
  • smartChord
  • TankenApp
  • WetterApp

Nachschlagewerke, Wörterbücher, Übersetzer

  • Wikipedia
  • Gelbe Seiten
  • Offline Wörterbücher
  • Googles (übersetzt fotografierte Texte)

Bücher

  • WebOpac (Bücher suchen, vorbestellen und verlängern)
  • Aldiko (eBook-Reader mit Adobe DRM)

Bibel

  • Bibel
  • Taizé Readings

 Reise

  • ADAC Pannenhilfe
  • ADAC Auslandshelfer
  • BW-Mobile
  • EFA-Fahrplan

Tolino Shine/Vision einrichten

Notwendige Programme:

  • Calibre (Bücher verwalten, konvertieren und übertragen)
  • Ebola (kostenlose Bücher von „Projekt Gutenberg“ und „Zeno“)
  • Adobe DigitalEdition (Notwendig zum Download von Büchern mit dem Adobe-DRM)

Calibre sollte in der aktuellsten Version direkt von der Homepage installiert werden, da die Version in den gängigen Quellen oft zu alt ist und den Tolino nicht unterstützt (http://calibre-ebook.com/download_linux – am Ende der Seite werden die Paket-Abhängigkeiten aufgeführt). In den Versionen ab 1.34 unterstützt Calibre den Tolino als „Generic e-ink device“.

Ebola ist in der Regel nur direkt auf der Homepage erhältlich (http://lbremer.de/ebola.html). Damit auch Bücher von Zeno heruntergeladen werden können, muss zusätzlich noch Cextra installiert werden. Dieses Tool ist jedoch kaum zu finden und zur Zeit eigentlich nur unter folgendem Link verfügbar: http://www.mobileread.com/forums/attachment.php?attachmentid=105523&d=1367924885. Die Java-Datei cextra.jar in das Ebola-Verzeichnis kopieren und diesen Pfad in Ebola unter Einstellungen/Cetra-Pfad auswählen.
Die aktuellen Buchlisten können über die „Bearbeiten → Buchliste → Update …“ Einträge im Menü aktualisiert werden (dauert sehr lange!).
Ebola speichert die heruntergeladenen Bücher im Ebola-Verzeichnis unter „output“.

Adobe DigitalEdition läuft unter Linux mit Wine-HQ zusammen mit Wine-Mono. Wichtig ist, dass Wine-HQ in einer aktuellen Version (>= 1.7) und Wine-Mono (>=4.5) installiert wird. Es kann vorkommen, dass die aktuelle Version von Adobe DigitalEdition (3.0) nicht installiert werden kann bzw. dann beim Start mit Fehlermeldungen abstürzt. Es gibt auch ältere Versionen (z. B. 2.0) die problemlos laufen (http://download.adobe.com/pub/adobe/digitaleditions/ADE_2.0_Installer.exe). Die Kompatibilität der Versionen kann sich jedoch ständig ändern, daher einfach zunächst mit der aktuellen Version testen).

Die Installation kann auch ganz einfach über winetricks installiert werden. Dort einfach „Install an app“ und dann „adobe_diget“ auswählen.

Beim Download eines gekauften Buchs, die acsm-Datei direkt an Adobe DigitalEdition übergeben lassen, dann wird das Buch im Home-Verzeichnis automatisch unter „My Digital Editions“ gespeichert und kann dann von Calibre importiert werden.

Notwendig ist jetzt noch eine Adobe-ID, die direkt über Adobe zu beziehen ist (https://www.adobe.com/de → Bei meinem Adobe-Konto anmelden → Sie haben noch keine Adobe-ID?).

OCR unter Linux

Programme zur Texterkennung

Die Besten Ergebnisse hatte ich mit tesseract erhalten. Hierfür kann der OCRFeeder als grafische Oberfläche verwendet werden. Es kann je nach Version des OCRFeeders notwendig sein, in den Einstellungen in der Kommandozeile für tesseract Deutsch als Erkennungssprache anzugeben. Der OCRFeeder kann auch Seiten begradigen und greift auch auf die Funktionen von Unpaper zurück. Zur Vorbereitung von gescannten Seiten empfiehlt sich das Programm ScanTailor.

sudo apt-get install tesseract-ocr tesseract-ocr-deu tesseract-ocr-eng ocrfeeder unpaper scantailor

Fehler beim Start des OCR-Feeders:

ImportError: No module named Image

Dieser Fehler tritt auf, da sich in der PythonImageLibrary (PIL) Aufrufe geändert haben. Daher das Kompatibilitäts-Paket python-imaging installieren:

sudo apt-get install python-imaging

Durchsuchbare PDF-Datei im PDF/A-Format

Gescannte PDF-dokumente können mit einem Script (OCRmyPDF) automatisch in durchsuchbare PDF-Dokumente im PDF/A-Format umgewandelt werden. Das Script kann unter github.com/fritz-hh/OCRmyPDF/releases heruntergeladen werden. Das Archiv herunterladen, entpacken und ggf. das Shellscript OCRmyPDF.sh ausführbar machen.

Aufruf:

./OCRmyPDF.sh -l deu input.pdf output.pdf

Aufrufparameter:

  • -l deu: deutsche Sprache
  • -d: Seite mit unpaper geraderücken
  • -g: Debug-Modus (der erkannte Text wird jeweils als extra Seite zusätzlich eingefügt)

installierte Drucker werden nicht gefunden

Unter Debian (mit XFCE-Oberfläche) kann es vorkommen, dass manche Programme (hauptsächlich KDE-Programme) entweder keine Drucker anzeigen oder Drucker, die es gar nicht mehr gibt. Dies liegt daran, dass diese Programme die Drucker in der Datei /etc/printcap suchen, diese allerdings von cups nicht (mehr) verwaltet wird. Die aktuellen Drucker stehen in der Datei /var/run/cups/printcap, die von cups dynamisch erzeugt wird.

Um dieses Problem zu beheben einfach einen symbolischen Link anlegen:

sudo mv /etc/printcap /etc/printcap.backup
sudo ln -s /var/run/cups/printcap /etc/printcap

Video DVDs unter Ubuntu abspielen

Damit DVDs unter Ubuntu abgespielt werden können muss libdvdcss2 wie folgt installiert werden:

sudo apt-get install libdvdread4

Anschließend führt man im Terminal diesen Befehl aus:

sudo sh /usr/share/doc/libdvdread4/install-css.sh

Wenn der Reginalcode umgestellt werden muss, geht man wie folgt vor:

  1. Installation des Pakets regionset:
    sudo apt-get install regionset
  2. Gerätenamen herausfinden: Beliebige DVD ins Laufwerk einlegen und Systemüberwachung öffnen. Auf den Reiter Dateisysteme klicken und unter der Spalte Geräte den Gerätenamen heraussuchen (beginnt mit /dev/…).
  3. Terminal öffnen und folgendes eingeben:
    regionset [GERÄTENAME]
  4. Regionalcode auf RC2 (Europa) setzten:
    regionset version 0.2-de

    Hat man diesen Schritt ausgeführt, wird einem unter anderem angezeigt, wie oft man den Regionalcode noch ändern kann, bis die Einstellung unveränderbar wird.

home-Verzeichnis verschlüsseln unter Debain

Unter Ubuntu kann man (direkt bei der Installation) die einzelnen home-Verzeichnisse des jeweiligen Users so (mit encfs) verschlüsseln, so dass diese mit dem jeweiligen Login autmoatisch für den jeweiligen user entschlüsselt werden. Unter Debian ist dies nur nachträglich möglich und zwar wie folgt:

1) Notwendige Pakete installieren:

sudo apt-get install ecryptfs-utils rsync

2) Ggf. das Modul ecryptfs in den Kernel integrieren (sofern dies nicht automatisch geschieht):

sudo modprobe ecryptfs

3) Die Dateien des Users können nun über ein Skript automatisch verschlüsselt in ein ecryptfs Verzeichnis kopiert werden. Folgender Befehl muss als root im root-Verzeichnis ausgeführt werden:

ecryptfs-migrate-home -u USERNAME

Wichtig: Der entsprechende user darf dabei nicht eingeloggt sein!

4) Die Ausgaben von ecryptfs-migrate-home unbedingt befolgen:
– Sofort mit dem entsprechenden User einloggen und prüfen, ob alle Daten vorhanden sind.
– Sofern alles passt, den Backupordner löschen.
– Den Passwortschlüssel abfragen und an einem sicheren ort speichern:

su ecryptfs-unwrap-passphrase .ecryptfs/wrapped-passphrase

5) Ebenso die swap-Partition verschlüsseln:

ecryptfs-setup-swap

S-Abf-Taste (Magic SysRQ-Key)

Wenn Linux hängt kann man über die S-Abf-Taste (bzw. Druck-Taste) Befehle direkt an den Kernel senden. Somit kann das System noch sicher heruntergefahren werden, auch wenn sonst nichts mehr geht.

Ausgeführt werden die Kernel-Befehle über die Tastenkombination <Alt> + <S-Abf> + <Buchstabe>.

Einen sicheren Neustart erreicht man mit folgender Buchstabenkombination: R, E, I, S, U, B (zwischen den einzelnen Buchstaben ein paar Sekunden Pause lassen, damit der jeweilige Befehl auch vollständig ausgeführt wird).

R unraw Verlasse den Keyboard-Raw-Modus, der unter X und SVGAlib aktiv ist, in den Keyboard-XLATE-Modus, der im Textmodus von Linux verwendet werden kann. Dies kann nützlich sein, wenn eine grafische Anwendung abstürzt und der Benutzer sich in der Konsole wiederfindet, die aufgrund des falschen Tastatur-Modus zunächst jedoch nicht benutzbar ist.
K secure attention key Beende alle Prozesse auf dem aktuellen Terminal, um sicher zu sein, dass der LoginPrompt von Init stammt und nicht von einem Trojaner. Eine aufgehängte Anwendung, welche die SVGAlib benutzt, oder ein nicht mehr reagierender X-Server lassen sich auch auf diese Weise beenden. So wird etwa in Ubuntu seit Version 9.04 dies statt der bisher genutzten Kombination Strg+Alt+Backspace empfohlen.[1]
B reboot Fahre den Rechner sofort herunter, ohne Daten aus dem Kernel–Festplatten–Cache auf die Festplatten zu schreiben und ohne Partitionen auszuhängen, und starte den Rechner neu.
O poweroff Schaltet den Rechner mit sofortiger Wirkung über ACPI/APM – wenn unterstützt – ab. Wie bei B wird mit O alleine nichts gespeichert.
S sync Schreibe alle noch nicht auf die Festplatte geschriebenen Daten aus dem Kernel-Festplatten-Cache auf die Festplatten
U umount Alle schreibbar eingebundenen Partitionen werden ausgehängt und anschließend nur-lesend wieder eingehängt.
M memory Gib die Hauptspeicherbelegung in der Konsole aus.
E term Sende SIGTERM an alle Prozesse außer Init
I kill Sende SIGKILL an alle Prozesse außer Init
L kill including init Sende SIGKILL an alle Prozesse, auch an Init. Das kommt einem Ausschalten gleich. Neuere Kernelversionen zeigen einen Backtrace an.
F force a OOM kill Startet den OOM-Killer, der den speicherlastigsten Prozess tötet. Damit kann man meistens am System weiterarbeiten, wenn ein Prozess anfängt stark auszulagern und das System dadurch sehr träge reagiert.
C crashdump Starte mit Hilfe von kexec[2] neu (sofern vorhanden) und gib einen Crashdump auf dem Bildschirm aus. Ansonsten provoziere einen Absturz durch eine Null-Pointer-Dereferenzierung.[3]
D Zeige (im Textmodus) alle derzeitigen Locks an.
Q Zeige alle derzeitig laufenden Timer an.
P show registers Zeige den Inhalt der CPU–Register inklusive der Flags an.
T show tasks Zeige eine Liste aktuell laufender Prozesse an.
W Zeige blockierte Prozesse an, die sich, beispielsweise während Festplattenzugriffen, im „ununterbrechbaren Schlaf“ befinden.
N Hiermit lässt sich die Priorität von Echtzeit–Prozessen herabsetzen.
H help Gib einen Hilfetext für die Benutzung des Magic–SysRq–Key aus. Auch jede andere nicht belegte Taste gibt diesen Text aus, aber H wird höchstwahrscheinlich auch in Zukunft nicht anderweitig belegt werden und lässt sich aufgrund der Eselsbrücke zu „Hilfe“ beziehungsweise „Help“ gut merken.
09 set log level Zahlen von 0 bis 9 bestimmen den Log Level, das heißt die Grenze, ab welcher Wichtigkeit eine Nachricht des Kernels angezeigt wird. Bei 0 werden nur noch kritische Meldungen wie etwa Kernel Panic angezeigt.
G kgdb Schaltet bei neueren Kernelversionen auf die Framebuffer–Textkonsole um und started den Kernel–Debugger kgdb, falls vorhanden.
J „Just thaw it“ Beendet bei neueren Kernelversionen das „Einfrieren“ eines Dateisystems durch die IOCTL–Funktion FIFREEZE.
V framebuffer, ETM dump Schaltet bei neueren Kernelversionen auf die Framebuffer–Textkonsole um. Auf der ARM-Architektur wird der ETM–Puffer angezeigt.
X XMON Bei neueren Kernelversionen für die XMON–Schnittstelle der Power/Power–PC–Architektur verwendet.
Y FTRACE dump Bei neueren Kernelversionen wird der FTRACE–Puffer angezeigt.
Z show global CPU registers Bei neueren Kernelversionen werden auf der SPARC–64–Architektur die globalen CPU–Register angezeigt.

Quelle: http://de.wikipedia.org/wiki/Magische_S-Abf-Taste

Ghostscript

Auflösung von PDF-Dateien verändern (z. B. um ein PDF-Dokument mit sehr hochauflösenden Bildern für den E-Mail-Versand zu komprimieren):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

Für PDFSETTINGS sind folgende Optionen möglich:

  • /screen (nur für Bildschirmanzeige – 72 dpi)
  • /ebook (geringe Qualität – 150 dpi)
  • /printer (hohe Qualität – 300 dpi)
  • /prepress: (hohe Qualität mit hoher Farbtreue – 300 dpi)

Ein fertiges Skript für Nautilus gibt es unter http://launchpad.net/compress-pdf. Hier noch eine Kurzanleitung zur Installation des Skripts:

$ sudo apt-get install zenity ghostscript libnotify-bin
$ cd ~/.gnome2/nautilus-scripts
$ wget http://launchpad.net/compress-pdf/1.x/1.4/+download/Compress-PDF-1.4.tar.gz
$ tar -xzf Compress-PDF*.tar.gz && rm Compress-PDF*.tar.gz

Beispiele, wie PDF-Dateien in Bilder umgewandelt werden können zeigen die Artikel pdf2bmp und pdf2jpg

Powertop

Das Programm powertop zeigt übersichtlich die vorhandenen Stromsparfunktionen (mit der aktuellen Auslastung) des Rechners an und auch, ob diese aktiviert sind. Gerade bei mobilen Rechnern kann durch aktivieren zusätzlicher Stromsparfunktionen die Laufzeit deutlich verlängert werden.

Aufruf: sudo powertop

Änderungen, die powertop vornimmt können mit inotifywait überwacht werden (inotifywait wird über inotify-tools installiert).

sudo inotifywait --recursive --event MODIFY --exclude cpufreq /sys/
liefert z.B.
/sys/devices/pci0000:00/0000:00:11.0/ata1/host0/scsi_host/host0/ MODIFY link_power_management_policy

Änderungen können über cat nachverfolgt werden:
cat "/sys/devices/pci0000:00/0000:00:11.0/ata1/host0/scsi_host/host0/link_power_management_policy"
Ladekabel abzeihen und wieder anstecken (macht die Änderung rückgängig).
cat "/sys/devices/pci0000:00/0000:00:11.0/ata1/host0/scsi_host/host0/link_power_management_policy"

DVB MPEG-TS nach AVI konvertieren

Beim konvertieren von Transportstreams (z. B. aus einer DVB-Aufnahme) besteht zumeist das Problem, dass danach die Bild- und Tonspur nicht synchron sind. DVB-Transpotstreams können unter Linux eigentlich nur wie folgt vernünftig in ein mpeg-Video umgewandelt werden:

projectx video.ts
mplex -f 8 -o output.mpg video.{ac3,m2v,mp2}

Der erste Befgehl trennt den Transportstream in Video- und Tonspuren auf wie folgt:

  1. *.m2v: Die Videodatei ohne Ton
  2. *.mp2: Die Stereo Tonspur
  3. *.ac3: Die Surround Tonspur, so eine vorhanden.

Danach wird über mplex eine mpg-Datei mit synchronen Spuren erstellt, die dann z. B. mit AviDemux bearbeitet werden können.

Weitere Tutorials im Netz:
Tutorial 1
Tutorial 2 (ubuntuusers)

Opera

Opera-Werbefilter

Mit der Datei urlfilter.ini lassen sich Inhalte aus Webseiten filtern. So kann man sich einen sehr effektiven Werbefilter erstellen.

Schalter für die Filterdatei (urlfilter.ini) der Browserleiste hinzufügen:

  1. Klick auf den Link: Filterbutton setzen
  2. Dialog mit OK bestätigen
  3. Den Button „Filter ist aus“ im neu erscheinenden Fenster mit der Maus in die Browserleiste ziehen

Eine stark erweiterte urlfilter.ini zum Download: urlfilter.ini (Speichern mit Rechtsklick und „speichern als…“)

Die urlfilter.ini muss unter Linux in den .opera-Ordner kopiert werden.

traceroute

traceroute IP-Adresse zeigt den Weg durchs Netz zur angegebenen Adresse.
sudo traceroute -T google.com
findet auch den Weg, wenn die ICMP-ECHO-Pakete gefiltert werden, denn die TCP-SYN-Pakete gehen im Normalfall auch durch Firewalls durch.

unter Suse gibt es statt traceroute mtr

curl

Mit curl kann die eigene IP-Adresse im Internet ermittelt werden. Dazu ist die Abfrage eines Servers notwendig. Nicht immer ist jeder Server erreichbar. Daher hier ein paar Beispiele:

  • curl ifconfig.me
  • curl icanhazip.com
  • curl ip.appspot.com
  • curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"

 

 

WebDAV

WebDAV (Web-based Distributed Authoring and Versioning) ist ein offener Standard zur Bereitstellung von Dateien im Internet.

In der Konsole kann auf WebDAV über cadaver zugegriffen werden:

  • GMX:  cadaver http://mediacenter.gmx.net
  • Strato:  cadaver http://webdav.strato.de/

Hierfür müssen die Pakete ca-certificates und davfs2 installiert sein:

sudo apt-get install ca-certificates davfs2

WebDAV mounten

Temporär als root in der Konsole

sudo mount.davfs http://webdav.adresse.de /mnt/tausch

Eine weitere Möglichkeit besteht über gvfs-mount. Dieses Vorgehen wird in https://wiki.ubuntuusers.de/gvfs-mount/ ausführlich beschrieben.

Als normaler user über einen Eintrag in der fstab

Eintrag in der fstab:

# WebDAV
https://<webdavurl> <mountpunkt> davfs user,noauto 0 0

Damit jeder Benutzer WebDAV-Laufwerke einbinden darf, muss das SUID-Bit für den Befehl mount.davfs gesetzt werden:

sudo dpkg-reconfigure davfs2

Jeder Benutzer, der das WebDAV-Laufwerk ohne Root-Rechte einbinden darf, muss außerdem der Gruppe davfs2 angehören:

sudo usermod -aG davfs2 <benutzername>

Damit der Benutzername und das Passwort nicht jedes mal eingegeben werden müssen, gibt es zwei Möglichkeiten diese Daten zu hinterlegen:

1. Global für alle Benutzer in /etc/davfs2/secrets (als root bearbeiten):

# Allgemein
# <Mountpunkt / WebDAV-URL> <login> <passwort>
# Beispiel
/mnt manfred.mustermann@gmx.de geheimespasswort
# oder
https://mediacenter.gmx.net manfred.mustermann@gmx.de geheimespasswort

2. Für einen einzelnen Benutzer in ~/.davfs2/secrets (Dateirechte: 600):

# Allgemein
# <Mountpunkt / WebDAV-URL> <login> <passwort>
# Beispiel
/home/otto/mnt/gmx manfred.mustermann@gmx.de geheimespasswort

wget

Herunterladen einzelner Dateien oder auch ganzer Internetseiten

  •  wget -r -p -k URL  lädt rekursiv eine Webseite herunter und konvertiert die Links in lokale Links.
  •  wget -r -p -k -E URL  lädt rekursiv eine Webseite herunter, benennt die Endungen in html um und konvertiert die Links in lokale Links.
  •  wget -r -A pdf URL  lädt alle PDF-Dateien einer Webseite herunter.
  •  wget -r -l2 -np URL  rekusiv, zwei Ebenen wechselt nicht in übergeordnete Ebene
  •  wget -r p -l3 --user-agent="Andererbrowser/6.0" http://www.irgend-eine-seite.de  lädt bis zum 3. Level, getarnt als ein anderer Browser, Webseiten herunter
  • Linkliste checken: wget -nv --spider --force-html -i .opera/opera6.html (200 bedeutet OK – ohne -nv gibt es ausführliche Infos )

sitecopy


Mit sitecopy können Websites mit lokalen Verzeichnissen synchronisiert werden.

Installation:

Zuerst muss die zentrale Konfigurationsdatei sowie ein Verzeichnis für den Versions-Tracker im Home-Verzeichnis angelegt werden.

touch .sitecopyrc; chmod 600 .sitecopyrc
mkdir -m 700 .sitecopy>

Konfiguration:

Die Konfigurationsdatei besteht aus einer oder mehreren Sektionen (eine pro Website) mit folgender Syntax:

site beispiel ~~~~~~~~~~~~~~~~ # Projektname 
server ftp.beispielseite.ch ~~ # Der FTP Server für Up- und Downloads 
username webmaster ~~~~~~~~~~~ # Username für FTP Zugriff
password soginet ~~~~~~~~~~~~~ # Passwort für FTP Zugriff 
local ~/public_html/beispiel/ ~# Lokales Verzeichnis 
remote ~/html/ ~~~~~~~~~~~~~~~ # Entferntes Verzeichnis (auf dem FTP Server) 
# "~/" steht hier für das login Verzeichnis des FTP Servers.

site beispiel2                 # Projektname einer weiteren Webseite 
[...]

Es gibt noch eine Vielzahl weiterer Optionen, z. B. für den Umgang mit Links, Exclude-/Include-Filter, Proxys, usw. Diese sind auf der manpage (man sitecopy) detailliert beschrieben.

Erster Aufruf

Es gibt drei mögliche Situationen vor dem ersten Aufruf von Sitecopy; für jede muss individuell vorgegangen werden:

  • Remote- und lokale Dateien sind synchron.
    Aufruf von sitecopy --catchup beispiel , um das Programm zu initialisieren.
  • Keine lokale Kopie vorhanden. Aufruf von sitecopy --synchronize beispiel , um eine lokale Kopie zu erstellen.
  • Keine Kopie auf dem FTP Server vorhanden. Aufruf von sitecopy --init beispiel
    . Die lokalen Dateien werden dann beim nächsten Aufruf hochgeladen.

Tägliche Benutzung

Nachdem das Programm nun betriebsbereit ist, kann es sehr einfach benutzt werden. Ein Aufruf von sitecopy --update beispiel  lädt alle modifizierten oder neuen Dateien, inklusive Unterverzeichnissen, auf den FTP und löscht auch alle Dateien, die lokal entfernt wurden. Wenn mehrere Sites in der Konfigurationsdatei definiert sind, können diese mit sitecopy –update beispiel beispiel2 in einem Rutsch synchronisiert werden.

sitecopy -u -a aktualisiert alle Sites, die in der Datei .sitecopyrc stehen.

rsync

rsync synchronisiert immer nur in einer Richtung. Für einen gegenseitigen Abgleich müssen also zwei Aufrufe erfolgen:

  •  rsync /verzeichnis1/ /verzeichnis2 
  •  rsync /verzeichnis2/ /verzeichnis1

Der / nach der 1. Pfadangabe verhindert, dass der letzte Ordner des 1. Pfads als neuer Ordner unter dem 2. Pfad angelegt wird. Somit bedeuten folgende Aufrufe genau das gleiche:

Weiterlesen

awk

. Bawk Ausdruck { Anweisungen } Datei

Ausdruck

Der erste Parameter ist ein regulärer Ausdruck.

Anweisungen

Den zweiten Parameter stellen die awk-Anweisungen (anzugeben in geschweiften Klammern) dar. Diese Anweisungen legen fest, welche Manipulationen am Input-Stream durchgeführt werden sollen.

Datei

Der Parameter Datei legt die Datei fest, aus der der Input-Stream gelesen werden soll. Ohne Angabe liest awk von der Standardeingabe oder aus einer Pipe.

Beispiele

Beispiel 1: 2. Spalte ausgeben (z. B. Prozess-ID bei grep)

ps aux | grep suchstring | awk '{print $2}'

Beispiel 2: alle Zeilen einer Datei mit dem Buchstaben „n“ ausgeben:

awk '/n/' /etc/group

Wörter zählen

Folgendes Skript zählt die (verschiedenen) Wörter in einer Datei.

  1. Ermittle, welche Zeichen Wörter trennen.
  2. Ersetze diese Zeichen durch \n-Zeichen, so dass auf jeder Zeile nur ein Wort steht.
  3. Entferne leere Zeilen.
  4. Wandle alle Großbuchstaben in Kleinbuchstaben um.
  5. Sortiere alles.
  6. Zähle die mehrfach vorkommenden Zeilen und gebe die Statistik aus.

Als pipe formuliert sieht die Lösung wie folgt aus:

tr ' :.,;()"' '\n\n\n\n\n\n\n\n' < Eingabe.txt | # 1, 2
grep -v '^$' |                                   # 3
tr 'A-ZÖÜÄ' 'a-zöüä' |                           # 4
sort |                                           # 5 
uniq -c                                          # 6

Tastaturbefehle (BASH)

Wort-Befehle

Esc b Ein Wort zurück bewegen
Esc f Ein Wort vor bewegen
Strg-W Das Wort links vom Cursor löschen
Esc d Das Wort unter dem Cursor löschen
Strg-Y Das zuletzt gelöschte Wort zurückholen (»yank«)

Zeilenbefehle

Strg-A Cursor am Zeilenanfang positionieren
Strg-E Cursor am Zeilenende positionieren
Strg-K Vom Cursor bis zum Zeilenende alle Zeichen löschen

Diverse andere Befehle

Strg-T Vertauscht das unter dem Cursor stehende Zeichen mit seinem linken Nachbarn
Strg-U Löscht alle Zeichen vom Zeilenanfang bis zum Cursor
Strg-V Das nächste eingegebene Zeichen wird maskiert, d. h. seiner besonderen Bedeutung beraubt
Strg-C Unterbricht das gerade laufende Kommando
Strg-S Bildschirmausgabe anhalten
Strg-Q Gehaltene Bildschirmausgabe fortsetzen

übergebenen Pfad ermitteln bzw. abfragen

Überprüft, ob ein übergebener Pfad gültig ist. Wird kein Pfad übergeben, so wird einer über kdailog abgefragt.

if [ "$1" == "" ] ; then
 dir=`kdialog --getexistingdirectory "$dir" --caption "ScaleImage"`
 [ $? -eq 1 ] && exit
else
 dir="$1"
 [ -d "$dir" ] || dir="${1%/*}" # Dateinamen vom Pfad abtrennen
 [ -d "$dir" ] || exit # kein gültiger Pfad
fi

Samba

Windows-Freigaben unter Linux

Windows-Freigabe mounten:

sudo mount -t cifs //192.168.11.1/Allgemein /media/netzwerk -o user=<Samba-User>

Server

/etc/init.d/samba restart startet den Samba-Server neu

Alle Einstellungen befinden sich in /etc/samba/

Benutzer anlegen

smbpasswd -a user legt Benutzer an oder ändert das passwort
smbpasswd -x user löscht den User in Samba
smbpasswd -d user deaktiviert den User in Samba
smbpasswd -e user aktiviert den User in Samba

Es können in Samba nur Benutzer angelegt werden, die im System bereits als Linux-User angelegt sind!

Informationen zu Samba-User anzeigen

Übersicht über alle angelegten User:

pdbedit -L

Detailinformationen zu einem User:

pdbedit -L -v -u USERNAME

/etc/samba/smbusers

Weist den Linux-Benutzern Alias-Namen zu, die für den Login verwendet werden können:
Petri = Winuser meldet den Windows-User „Winuser“ als Linux-User „Petri“ an.

Konfigurationsdatei

/etc/samba/smb.conf

[global]
    workgroup = tuxnet
    printcap cache time = 750
    cups options = raw
    printer admin = @ntadmin, root, administrator
    username map = /etc/samba/smbusers
    map to guest = Bad User
    include = /etc/samba/dhcp.conf
    logon path = \\%L\profiles\.msprofile
    logon home = \\%L\%U\.9xprofile
    logon drive = P:
    restrict anonymous = yes
    domain master = yes
    preferred master = yes
    max protocol = NT
    ldap ssl = No
    server signing = Auto
    ldap idmap suffix = ou=Idmap
    ldap machine suffix = ou=Computers
    ldap suffix = dc=example,dc=com
    printer name = hplaserjet5l
    hosts allow = 192.168.
    add machine script = /usr/sbin/useradd  -c Machine -d /var/lib/nobody -s /bin/false %m$
    domain logons = yes
    os level = 65
    security = user
    encrypt passwords = yes
    passdb backend = smbpasswd
[documents]
    comment = /home/petri/Documents
    path = /home/petri/Documents
    read only = no
    inherit acls = yes
    veto files = /aquota.user/groups/shares/
    valid users = petri
    guest ok = no
[ext]
    comment = /home/ext
    path = /home/ext
    read only = no
    inherit acls = yes
    veto files = /aquota.user/groups/shares/
    valid users = petri
    guest ok = no
[pdf]
    comment = PDF creator
    path = /var/tmp
    printable = yes
    print command = /usr/bin/smbprngenpdf -J '%J' -c %c -s %s -u '%u' -z %z
    create mask = 0600
[printers]
    comment = All Printers
    path = /var/tmp
    printable = yes
    create mask = 0600

Client

Windows-Freigabe mounten

von Hand:

  1. Paket „samba-client“ installieren
  2. mkdir Zielverzeichnis
  3. mount -t smbfs -o username=user,password=passwort,gid=users,fmask=0664,dmask=0775 //Server/Freigabe/ Zielverzeichnis 

automatisch beim Start:

Zeile in /etc/fstab einfügen:

//Server/Freigabe /mnt/Zielverzeichnis cifs nofail,x-systemd.automount,x-systemd.requires=network-online.target,x-system.device-timeout=20,iocharset=utf8,credentials=/root/.smbpasswd/serverxy 0 0

Passwortdatei/root/.smbpasswd/serverxy mit folgendem Inhalt erstellen :

username = Name
password = Passwort

Rechte anpassen: chmod 600 /etc/smbpasswd

Windows-Freigabe mounten per GUI unter KDE (Samba, LISa): 

Pakete „kdenetwork3-lisa“, „kdenetwork3-lan“, „kdebase3-samba“, „samba-client“ installieren:

sudo apt-get install kdenetwork3-lisa kdenetwork3-lan kdebase3-samba samba-client

Kontrollzentrum/Internet & Netzwerk/Netzwerk-Browser starten

Windows-Ressourcen und LISa-Dämon konfigurieren

su 
rclisa start 
insserv lisa

SMB-Protokoll-Versionen

Das SMB-Protokoll existiert in den Versionen 1.0, 2.0, 2.1 und 3.0, die untereinander nicht vollständig kompatibel sind. Eine Kommunikation kommt nur zustande, wenn sich beide Partner auf eine gemeinsame Version einigen. Dazu ist es manchmal erforderlich, die zu verwendende Version anzugeben.

Neue Kernel-Versionen erfordern, dass mann beim mounten die Samba-Version 1.0 explizit angeben muss. Dies ist z. B. bei Freigaben der FritzBox der Fall.  Herzu wird beim mount-Befehl zusätzlich die Option vers=1.0 angeben.

sudo mount -t cifs -o vers=1.0,username=<user>,password=<passwrd> //fritz.nas/FREIGABE MOUNTPOINT

Ansonsten gibt es noch die Versionen: 2.0, 2.1 und 3.0

QLandkarteGT

Das Programm QlandkarteGT ist wohl das umfangreichste Programm unter Linux, um Karten darzustellen und GPS-Daten zu bearbeiten und verwalten. Die Karten der OSM sind direkt online verfügbar.

Eine sehr ausführliche Einführung ist im Wiki von ubunuusers und auf der entsprechenden Sourceforge-Seite beschrieben.

Besonders praktisch ist, dass QLandkarteGT Garmin-GPS-Geräte direkt unterstützt.

Online-TMS-Karten können als Stream-Karten wie folgt eingebunden werden:

  1. Reiter „Karten“ im linken Bereich öffnen
  2. Rechtsklick im Stream-Fenster und „TMS-Karte hinzufügen …“ auswählen
  3. Name und URL eingeben
 Name  URL
 Google-Map  http://mt.google.com/vt/x=%2&y=%3&z=%1
 Google Satellite  http://mt.google.com/vt/lyrs=s&x=%2&y=%3&z=%1
 Google Terrain  http://mt.google.com/vt/lyrs=t&x=%2&y=%3&z=%1
 OpenStreetMap.com (OSM)  http://tile.openstreetmap.org/%1/%2/%3.png
 OpenStreetMap.de (OSM)  http://a.tile.openstreetmap.de/tiles/osmde/%1/%2/%3.png
 OpenCycleMap (OSM)  http://tile.opencyclemap.org/cycle/%1/%2/%3.png
 ÖPNV-Karte (OSM)  http://tileserver.memomaps.de/tilegen/%1/%2/%3.png
 Skobbler (OSM)  http://tiles1.skobbler.net/osm_tiles2/%1/%2/%3.png
 Hike & Bike (OSM)  http://toolserver.org/tiles/hikebike/%1/%2/%3.png
Design-Karte – Schwarz-Weiß http://tile.stamen.com/toner/%1/%2/%3.png
Design-Karte – Gelände http://tile.stamen.com/terrain/%1/%2/%3.png
Design-Karte – Wasserfarben http://tile.stamen.com/watercolor/%1/%2/%3.jpg

Die Bing-TMS-Karte kann durch folgende Datei „bing.tms“ über „Datei/Karte laden“ hinzugefügt werden:

<TMS>
<Title>Bing</Title>
<Layer idx="0">
<Script><![CDATA[
(
function convert(z1, x1, y1)
{
serverpart = 0
serverpart = (serverpart + 1) % 4;
function encodeQuadTree(zoom, tilex, tiley)
{
var tileNum = []
for (var i = zoom - 1; i >= 0; i--)
{
var num = (tilex % 2) | ((tiley % 2) << 1);
tileNum[i] = new String(num);
tilex >>= 1;
tiley >>= 1;
}
return tileNum.join("");
}
return "http://ecn.t" + serverpart + ".tiles.virtualearth.net/tiles/a" + encodeQuadTree(z1,x1,y1) + ".jpeg?g=1036";
}
)
]]></Script>
</Layer>
<Copyright>Microsoft - Bing</Copyright>
</TMS>

Höhenlinien können über SRTM-Dateien nachgeladen werden. Weltweite Höhenlinien können auf der Seite von CGIAR heruntergeladen werden.

videorotate

Hier ein Beispielscript, dass mit Hilfe von mencoder Videos (um 90°) dreht und gleichzeitig komprimiert:

#! /bin/bash
infile="$1"
BASE=`echo "$1" | sed 's/\\(.*\\)\\..*/\\1/'`
EXT=`echo "$1" | sed 's/.*\\.\\(.*\\)/\\1/'`
outfile="$BASE"_copy.avi
ans=`kdialog --title "Video bearbeiten ..." --menu "Was soll mit dem Video $infile gemacht werden?" 0 "mpeg2 komprimieren" 1 "links drehen und mpeg2 komprimieren" 2 "rechts drehen und mpeg2 komprimieren"`
case $ans in
 0) ROTDIR="";;
 1) ROTDIR="-vf rotate=2";;
 2) ROTDIR="-vf rotate=1";;
 *) exit;;
esac
mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf -srate 48000 -af lavcresample=48000 -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192 -ofps 25 $ROTDIR "$infile" -o "$outfile"
kdialog --title "Video bearbeiten ..." --msgbox "Bearbeitung des Videos beendet"
exit

Fotodatum (Dateidatum=Exif-Datum)

Mit folgendem Skript kann das Dateidatum eines Fotos auf das EXIF-Aufnahmedatum gesetzt werden:

#!/bin/bash
DATE="`exif -m -t 0x9003 "$1" |sed -e 's/:/-/' -e 's/:/-/' `"
echo -n "$1 "
echo $DATE
touch --date="$DATE" "$1"

oder einfach nur mit folgendem Einzeiler:
exiftool -v "-FileName<CreateDate" -d "%Y-%m-%d_%H-%M-%S-%.c.%%e" Ordner
In Ordner liegen die Bilder.

bc

Führt mathematische Berechnungen in der Konsole aus. Der zu berechnende Ausdruck wird über die Standardeingabe eingelesen und das Ergebnis über die Standardausgabe ausgegeben.

Über die Option -l wird die Mathematik-Library geladen. Diese ermöglicht Berechnungen mit Winkelfunktionen.

 +, -, *, /, ^ entsprechend der Mathematischen Bedeutung
 – wert liefert den negativen Wert von „wert“
 ++ var, — var die Variable wird um 1 erhöht/erniedrigt und dann das Ergebnis ausgegeben
 var ++, var — die Variable wird als Ergebnis ausgegeben und dann um 1 erhöht/erniedrigt
 <, <=, >, >=, ==, != Vergleiche (liefert 1 oder 0)
 !wert  liefert 1, wenn „wert=0“ ist
 &&  liefert 1, wenn zwei Ausdrücke nicht 0 sind
 ||  liefert 1, wenn keiner der Ausdrücke 0 ist

Für folgende Berechnungen muss die Mathematik-Library mit der Option -l geladen werden:

 s (x)  sin (x) in rad
 c (x)  cos (x) in rad
 a (x)  arctan(x) in rad
 l (x)  ln (x)
 e (x)  e-Funktion
 j (x)  Bessel-Funktion

Beispiele:
echo "(5+3)/2 | bc
echo "s (64.4)" | bc -l

mit scale abgetrennt durch ein Semikolon kann die Anzahl der Nachkommastellen, auf die gerundet wird, angegeben werden:
echo "scale=1; s (64.4)" | bc -l

read

Liest eine Zeichenkette von der Standardeingabe ein.
-n Anzahl der einzulesenden Zeichen
-s x Wartet maximal x Sekunden auf die Eingabe
-p Text gibt „Text“ vor dem Einlesen auf der Standardausgabe aus

read -n 1 -s 5 eingabe
 if [ $? -eq 1 ] ; then
 echo "Zeitüberschreitung für die Eingabe ..."
 fi
echo $eingabe

let

Ganzzahliges Rechnen mit Variablen und vergleichen von Variablen:

let a++ Variabel a um 1 erhöhen (Increment)
let a– Variable a um 1 erniedrigen (Decrement)
+, -, *, / let a=1+2
let a=$b/$c
** potenzieren z. B. let a=2**5
<=, >=, <, > Vergleich /liefert 1 oder 0) z. B. let a=’1<2′
==, != gleich, ungleich z. B. let a=’$b==$c‘
&, ^, | Bitweise AND, XOR, OR
&&, || logisches AND, OR

Berechnungen mit mehreren Rechenoperatoren:
let a=($b-1)/2

Quoting

Die folgenden Zeichen haben eine spezielle Bedeutung innerhalb der Shell:

 ; Befehls-Trennzeichen
 & Hintergrund-Verarbeitung
 ( ) Befehls-Gruppierung
 | Pipe
 <>& Umlenkungssymbole
 *?[]~+-@! Meta-Zeichen für Dateinamen
 ` ` (Backticks) Befehls-Substitution (Die Backticks erhält man durch [shift] und die Taste
neben dem Backspace.
 $ Variablen-Substitution
 [newline] [space] [tab] Wort-Trennzeichen

Die folgenden Zeichen können zum Quoten verwendet werden:

 “ „ Anführungszeichen Alles zwischen diesen Zeichen ist buchstabengetreu zu interpretieren. Ausnahmen sind folgende Zeichen, die ihre spezielle Bedeutung
beibehalten: $ ` „
 ‚ ‚ Ticks Alles zwischen diesen Zeichen wird wörtlich genommen, mit Ausnahme
eines weiteren ‚ und \. (Die Ticks erhält man bei deutschen Tastaturen
durch die Taste neben dem Backspace — ohne [shift].)
  \ Backslash Das Zeichen nach einem \ wird wörtlich genommen. Anwendung z. B.
innerhalb von “ „, um „, $ und ` zu entwerten. Häufig verwendet zur
Angabe von Leerzeichen (space) und Zeilenendezeichen, oder um ein
\-Zeichen selbst anzugeben.

Meta-Zeichen (in Dateinamen)

Bei der Angabe von Dateinamen können eine Reihe von Meta-Zeichen verwendet werden:

 * Eine Folge von keinem, einem oder mehreren Zeichen
 ? Ein einzelnes Zeichen
 [abc] Übereinstimmung mit einem beliebigen Zeichen in der Klammer
 [a-q] Übereinstimmung mit einem beliebigen Zeichen aus dem angegebenen Bereich
 [!abc] Übereinstimmung mit einem beliebigen Zeichen, das nicht in der Klammer ist
 ~ Home-Verzeichnis des aktuellen Benutzers
 ~name Home-Verzeichnis des Benutzers name
 ~+ Aktuelles Verzeichnis
 ~- Vorheriges Verzeichnis

Reguläre Ausdrücke

Sonderzeichen in Suchmustern:

 . Steht für ein beliebiges *einzelnes* Zeichen, mit Ausnahme des Zeilenendezeichens.
 * Steht für eine beliebige (auch leere) Menge des einzelnen Zeichens vor dem Sternchen.
Das vorangehende Zeichen kann auch ein regulärer Ausdruck sein. Beispielsweise steht .*
für eine beliebige Anzahl eines beliebigen Zeichens
 ^ Übereinstimmung, wenn der folgende Ausdruck am Zeilenanfang steht.
 $ Übereinstimmung, wenn der vorhergehende Ausdruck am Zeilenende steht.
 \\ Schaltet die Sonderbedeutung des nachfolgenden Zeichens ab.
 [ ] Steht für *ein* beliebiges Zeichen aus der eingeklammerten Gruppe. Mit dem Bindestrich
kann man einen Bereich aufeinanderfolgender Zeichen auswählen ([a-e]). Ein Zirkumflex
(~) wirkt als Umkehrung: [^a-z] erfasst alle Zeichen, die keine Kleinbuchstaben sind. Ein
Bindestrich oder eine schließende eckige Klammer am Listenanfang werden als Teil der
Liste angesehen, alle anderen Sonderzeichen verlieren in der Liste ihre Bedeutung.
 \\( \\) Speichert das Muster zwischen \( und \) in einem speziellen Puffer. In einer Zeile können
bis zu neun solcher Puffer belegt werden. In Substitutionen können sie über die
Zeichenfolgen \1 bis \9 wieder benutzt werden.
/ \{ \\} Steht für den Vorkommensbereich des unmittelbar vorhergehenden Zeichens. \{n\} bezieht
sich auf genau n Vorkommen, \{n,\} auf mindestens n Vorkommen und \{n,m\} auf eine
beliebige Anzahl von Vorkommen zwischen n und m. Dabei müssen n und m im Bereich
zwischen 0 und 256 liegen.
 \\< \\> Steht für ein Zeichen am Anfang (\<) oder am Ende (\>) eines Wortes.
 + Steht für ein oder mehrere Vorkommen des vorhergehenden regulären Ausdrucks = \{1,\}
 ? Steht für kein oder ein Vorkommen des vorhergehenden Ausdrucks. = \{0,1\}
 | Übereinstimmung, wenn entweder der vorhergehende oder der nachfolgende reguläre
Ausdruck übereinstimmen.
 ( ) Steht für die eingeschlossene Gruppe von regulären Ausdrücken.

Sonderzeichen in Ersatzmustern:

 \\ Hebt die spezielle Bedeutung des nächsten Zeichens auf.
 \\n Ruft das n-te Muster aus dem Puffer ab (siehe oben, unter \( \).) Dabei ist n eine Zahl
zwischen 1 und 9.
 & Verwendet das vorherige Suchmuster erneut als Teil eines Ersatzmusters.
 ~ Verwendet das vorherige Ersatzmuster erneut im momentanen Ersatzmuster.
 \\u Ändert das erste Zeichen des Ersatzmusters auf Großschreibung.
 \\U Ändert alle Zeichen des Ersatzmusters auf Großschreibung.
 \\l Ändert das erste Zeichen des Ersatzmusters auf Kleinschreibung.
 \\L Ändert alle Zeichen des Ersatzmusters auf Kleinschreibung.
 \\e Hebt das vorangegangene \u oder \l auf.
  \\E Hebt das vorangegangene \U oder \L auf.

Beispiele: Muster

 Haus Die Zeichenfolge „Haus“.
 ^Haus „Haus“ am Zeilenanfang.
 Haus$ „Haus“ am Zeilenende.
 ^Haus$ „Haus“ als einziges Wort in einer Zeile.
 [Hh]aus „Haus“ oder „haus“
 Ha[unl]s „Haus“, „Hals“ oder „Hans“
 [^HML]aus Weder „Haus“, noch „Maus“, noch „Laus“, dafür aber andere Zeichenfolgen, welche „aus“ enthalten.
 Ha.s Der dritte Buchstabe ist ein beliebiges Zeichen.
 ^…$ Jede Zeile mit genau drei Zeichen.
 ^\\. Jede Zeile, die mit einem Punkt beginnt.
^\\.[a-z][a-z] Jede Zeile, die mit einem Punkt und zwei Kleinbuchstaben beginnt.
 ^\\.[a-z]\\{2\} Wie oben, jedoch nur in grep und sed zulässig.
 ^[^.] Jede Zeile, die nicht mit einem Punkt beginnt.
 Fehler* „Fehle“(!), „Fehler“, „Fehlers“, etc.
 „Wort“ Ein Wort in Anführunszeichen.
 „*Wort“* Ein Wort mit beliebig vielen (auch keinen) Anführungszeichen.
 [A-Z][A-Z]* Ein oder mehrere Großbuchstaben.
 [A-Z]+ Wie oben, jedoch nur in egrep und awk zulässig.
 [A-Z].* Ein Großbuchstabe, gefolgt von keinem oder beliebig vielen Zeichen.
 [A-Z]* Kein, ein oder mehrere Großbuchstaben
 [a-zA-Z] Ein Buchstabe.
 [^0-9a-zA-Z] Symbole (weder Buchstaben noch Zahlen).
[0-9a-zA-Z] Jedes alphanumerische Zeichen.

Beispiele: Suchen und Ersetzen mit sed. Im Folgenden werden Leerzeichen durch _ und
Tabulatoren durch TAB gekennzeichnet.

 s/.*/( & )/ Wiederholt die ganze Zeile, fügt aber Klammern hinzu.
 s/.*/mv & &.old/ Formt eine Wortliste (ein Wort pro Zeile) zu mv-Befehlen um.
 /^$/d Löscht Leerzeilen.
 /^[_TAB]*$/d Löscht Leerzeilen und Zeilen, die nur aus Leerzeichen oder Tabulatoren
bestehen.
 / */ /g Wandelt ein oder mehrere Leerzeichen in ein Leerzeichen um.
\(.*\)\n sucht nach einem Ausdruck in Klammern, gefolgt von einem Zeilenumbruch

case

case Wert in
  Muster1) Befehle;;
  Muster2) Befehle;;
  ...
  *) Befehle;;
esac

Die Befehle hinter *) werden ausgeführt, wenn keines der aufgeführten Muster passt. Muster
können über ein ODER (|) verknüpft werden: Muster1|Muster2.

test […]

Der Befehl test dient zum Überprüfen von Dateitypen bzw. Vorhandensein von Dateien und zum Vergleichen von Werten. Der Aufruf erfolgt mit test Vergleich wobei Vergleich die Prüfung bzw. den Vergleich enthält. Als Ergebnis gibt test 0 für Wahr (true) und 1 für Falsch (false) zurück. Der Rückgabewert wird mit Hilfe der Shelleigenen Variablen $? ermittelt. Es gibt Vergleiche für Dateien, Zeichenketten und Integer-Zahlen.

Anstatt des Befehls test kann die Bedingung auch in eckige Klammern gesetzt werden. Hierbei ist darauf zu achten, dass zwischen den Klammern und dem Vergleich jeweils ein ein Leerzeichen steht:  [ Vergleich ]
Weiterlesen

Befehle in Abhängigkeit ausführen

Ein zweiter Befehl wird in Abhängigkeit eines ersten Befehls ausgeführt:

  1. Zweiter Befehl nach Beendigung des ersten Befehls ausführten:
    date; ls 
  2. Zweiter Befehl ausführen, wenn der erste erfolgreich war:
     make && make install
  3. Zweiter Befehle ausführen, wenn der erste nicht erfolgreich war:
    ls datei || touch datei
  4. Kombination aus 2 und 3:
     ls datei && echo "Datei vorhanden" || touch datei

tee

Der Befehl tee gibt die Standardeingabe auf die Standardausgabe und in eine Datei aus.

ls -l | tee liste.txt
gibt den Inhalt des aktuellen Verzeichnisses auf die Standardausgabe und in eine Datei aus.

Eingabeumlenkung

Datei als Standardeingabe verwenden: <
echo < datei.txt

Umlenkung mit Hilfe von Datei-Deskriptoren:

Befehl <&n Standard-Eingabe für Befehl wird vom Datei-Deskriptor n übernommen.
Befehl m<&n Der gleiche Vorgang, nur wird die Eingabe, die normalerweise vom Datei-
Deskriptor m stammt, aus dem Datei- Deskriptor n übernommen.
Befehl <&- Schließt die Standard-Eingabe.

Ausgabeumlenkung

  1. Umlenkung der Standardausgabe in eine (neue) Datei: >
    ls > inhalt.txt
  2. Umlenkung der Standardausgabe von zwei Befehlen in eine (neue) Datei: () > 
    (date;ls) > inhalt.txt
  3. Umlenkung der Standardausgabe in eine bestehende Datei (anhängen): >>
    ls >> inhalt.txt
  4. Umlenkung der Fehlermeldungen in eine Datei: 2>
    ls 2> fehler.txt
  5. Umlenkung der Standardausgabe und der Fehlermeldungen in eine Datei: >&
    ls >& ausgaben.txt

Umlenkung mit Hilfe von Datei-Deskriptoren:

Befehl >&n Standard-Ausgabe von Befehl an den Datei-Deskriptor n übergeben.
Befehl m>&n Der gleiche Vorgang, nur wird die Ausgabe, die normalerweise an den Datei-
Deskriptor m geht, an den Datei-Deskriptor n übergeben.
Befehl >&- Schließt die Standard-Ausgabe.

Mehrfach-Umlenkung:

Befehl 2> Datei Fehler-Ausgabe von Befehl in Datei schreiben. Die Standard-Ausgabe
bleibt unverändert (z. B. auf dem Terminal).
Befehl > Datei 2>&1 Fehler-Ausgabe und Standard-Ausgabe von Befehl werden in die Datei
geschrieben.
(Befehl > D1) 2>D2 Standard-Ausgabe erfolgt in die Datei D1; Fehler-Ausgabe in die Datei D2.

pipe

Über eine pipe | kann die Standardausgabe eines Befehls auf die Standardeingabe eines anderen Befehls umgeleitet werden:
ls | less
ps ax | grep daemon | less
find -name "*.pdf" -print0 | xargs -0 echo

Datei zeilenweise einlesen

Mit while:

while read LINE; do 
  echo ${LINE[1]} 
done < infile.txt

Aufruf über File-Descriptor (ermöglicht direkten Zugriff auf die Datei „datendatei“):

exec 3<Datendatei
while read -u 3; do
  echo ${REPLY} 
done
exec 3<&-

IP-Adressen aus einer Datei auslesen (Durch setzen des Punktes in der Trennzeichenvariablen IFS werden die durch „read“ eingelesenen IP-Adressen aufgeteilt und in die Array-Variable „IP“ geschrieben):

exec 3<iplist 
IFS=".${IFS}" 
while read -u 3 -a IP; do 
 echo ${IP[0]}.${IP[1]}.${IP[2]}.${IP[3]} 
done 
exec 3<&-

while-Schleife

while Bedingung ; do
  # Befehle
done

Beispiele:

Endlosschleife:

while : ; do
# auszuführender Quelltext
# Schleife wird mit break beendet
done

While-Schleife mit find (Variante mit for (siehe for-Schleife) ist ca. 30% schneller):

find /home -type f | while read; do
  echo ${REPLY}
done

alle *.jpg rekursiv in allen Unterordnern finden (hierzu gibt es auch eine elegante Variante mit for, die jedoch nur in der Bash funktioniert):

 while read -rd "" i; do 
  echo "$i" 
done < <(find /home/user/unterordner/ -iname "*.jpg" -print0)

Datei zeilenweise einlesen (Eine Variante mit File-Descriptor gibt es hier):

while read LINE; do
  echo ${LINE[1]}
done < infile.txt

Fehlermeldung „Error:“ in einer Datei suchen:

while [ $error \> 0 ] ; do 
 echo Es sind Fehler aufgetreten! 
 error=`grep -c Error: Datei.txt` 
done

for-Schleife

for x [ in Liste ] ; do
  # Befehle
done

continue [n]: springt zum Schleifenanfang und übergeht dabei n Duchläufe
break [n]: verlässt n Schleifenebenen

Beispiele:

Script um alle Bilder in einem Verzeichnis zu verkleinern:

for file in * ; do
  convert -scale 100x $file klein_$file
done

Dieses Script wandelt alle PDF-Dateien im Verzeichnis in Postscript-Dateien um:

for i in *.pdf; do 
  pdf2ps $i
done

Zählerschleife:

for ((i=1; i<=100; i++)) {
  echo $i
}

For-Schleife mit find (schnell):

 for f in $(find /home -type f); do 
  echo ${f} 
done

Alle *.jpg finden und bearbeiten (funktioniert nur in der Bash):

shopt -s globstar nocaseglob 
for i in /home/user/unterordner/**/*.jpg; do 
  echo $i 
done

übergebene Parameter

$# Anzahl der Parameter
$1 1. Parameter
$2 2. Parameter
.
.
$n n. Parameter

$* oder $@ alle Parameter
$? Rückgabewert des letzten Kommandos
$$ Prozessnummer der aktiven Shell
$! Prozessnummer des letzten Hintergrundprozesses
ERRNO Fehlernummer des letzten fehlgeschlagenen Systemaufrufs
PWD Aktuelles Verzeichnis (wird durch cd gesetzt)
OLDPWD Vorheriges Verzeichnis (wird durch cd gesetzt)

Dateinamen, Dateiendung und Pfad trennen

  • Pfad ohne letzten Slash:  DIR="${i%/*}"
    alternativ:  DIR=`dirname "$i"`
  • Pfad mit Dateinamen ohne Endung:  xBASE="${i%.*}"
    alternativ:  xBASE=`echo "$i" | sed 's/\(.*\)\..*/\1/'`
  • Aktuellen Pfad durch . ersetzen:  [ "$DIR" == "$i" ] && DIR=.
  • Dateiname mit Endung: FILE="${i##*/}"
    alternativ: FILE=`basename "$i"`
  • Dateiendung: FILEEXT=${i##*.}
    alternativ:  FILEEXT=`echo "$i" | sed 's/.*\.\(.*\)/\1/'`
    Dateiendung in Großbuchstaben:  FILEEXT=`echo ${i##*.} | tr '[:lower:]' '[:upper:]'
  • Dateiname ohne Endung: FILEBASE=${FILE%.*}

Stringbearbeitung (Variablen)

Aufruf Beschreibung
${name:n:m} liefert Teil eines Strings
n = Offset, negativ = vom Ende her (in diesem Fall muss ein Leerzeichen vor dem Minus stehen!)
m = Anzahl (kann entfallen)
${name#a} entfernt den Anfang, wenn dieser mit a übereinstimmt
a = Suchstring (Windcards (?,*) sind erlaubt)
${name##*a} entfernt alle Übereinstimmungen mit a vom Anfang her
a = Suchstring (Windcard „*“ notwendig!)
${name%a} entfernt das Ende, wenn dieses mit a übereinstimmt
a = Suchstring (Windcards (?,*) sind erlaubt)
${name%%a*} entfernt alle Übereinstimmungen mit a vom Ende her
a = Suchstring (Windcard „*“ notwendig!)
${name/s/e} Suchen / Ersetzen (erste Fundstelle)
s = Suchstring (Windcards (?,*) sind erlaubt)
e = Ersatzstring (kann entfallen -> Suchstring wird entfernt)
${name//s/e} Suchen / Ersetzen (alle Fundstellen)
s = Suchstring (Windcards (?,*) sind erlaubt)
e = Ersatzstring (kann entfallen -> Suchstring wird entfernt)
${name:-a} Standardwert zurückgeben
gibt den Wert „a“ zurück, wenn die Variable „name“ leer ist
${name:=a} Standardwert setzen und zurückgeben
gibt den Wert „a“ zurück und weist diesen der Variablen „name“ zu, wenn die Variable „name“ leer ist
${name:?a} Fehlermeldung und Programmabbruch
Wenn die Variable „name“ leer ist, wird die Fehlermeldung „a“ ausgegeben und das Skript beendet.
${name:+a} liefert „a“, wenn „name“ nicht leer ist
mit dieser Funktion kann z.B. ein „/“ eingefügt werden, wenn eine Datei übergeben wird (z.B. $HOME${datei:+/}$datei )

export

export PATH="/home/ich/meineProgramme:"$PATH":/home/ich/proggis"

Umgebungsvariable global exportieren:

source export variable="inhalt"

.profile

Diese Konfigurationsdatei wird von der Login-Shell ausgewertet, jedoch nicht von der bash, sofern die Datei  ~/.bash_profile oder ~/.bash_login existiert.

In der Datei .profile sollte folgendes eingetragen sein:

# set PATH so it includes user’s private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:“${PATH}“
fi