Author Archives: ralph
x
x
x
Linux Referenz Card
Hilfe
| man cmd | Lesen des Manualeintrags zu cmd |
| man -k printf | Durchsucht den Index der Manpages (Whatis-Datenbank) nach Stichworten (hier printf) |
| type cmd | Anzeigen der Art, resp. des Typs von cmd |
| file file | Anzeigen der Art, resp. des Typs von file |
| whereis cmd | Suchen des Speicherortes von cmd |
Allgemeine Commands
| date | Ausgabe der Zeit und des Datums |
| echo [-n][Argumente] | Ausgabe der Argumente (-n keine NewLine am Ende) |
File/Directory Commands
| pwd | Anzeigen des aktuellen Datums |
| cd [directory] | Wechseln des aktuellen Directories zu directory |
| ls [files(s)/director(ies)] | Anzeigen von Files / Directories |
| cp source(s) target | Kopieren von Files / Directories |
| rm file(s) / director(ies) | Löschen von Files / Directories |
| mv file(s) / director(ies) | Verschieben (auch Umbenennen) von Files / Directories |
| mkdir [-p] directory(ies) | Erstellen eines leeren Directories (-p ganze Trees) |
| ln [-s] source target | Erstellen eines Links (-s symbolischer Link) |
File Commands
Wenn kein file(s) Parameter => Lesen von StdIn
| cat [file(s)] | Ausgeben / Zusammenhängen von Files |
| more, less file(s) | Seitenweises Lesen von Files |
| cmp, diff file1 file2 | Vergleichen zweier Files |
| touch file(s)/directory(ies) | Aktualisieren des Datums von Files/Directory(ies) |
File Filter Commands
Wenn kein file(s) Parameter => Lesen von StdIn
| grep [-cinrv] pattern [file(s)] | Suchen nach Mustern (z.B. Grep -i „user“ ~/.profile) |
| head [-n count] [file(s)] | Ausgabe der ersten n Zeilen (Ohne Parameter n: n=10) |
| tail [-f] [-n count] [file(s)] | Ausgabe der letzten n Zeilen (Ohne Parameter n: n=10) |
| cut -crange [file(s)] | Ausschneiden von Textblöcken (z.B. cut -c10-20 index.html) |
| sort [file(s)] | Sortieren (Mehrere Files werden gesamthaft sortiert |
| wc [-lwc] [file(s)] | Zählen von Zeilen (-l), Wörtern (-w), Zeichen (-c) |
| tr char-old char-new | Ersetzen von Zeichen (z.B.: tr a A < index.html) |
| sed cmd [file(s)] | Stream-Editor (z.B. sed s/test/TEST/g index.html) |
| awk cmd [file(s)] | Tabellenstream-Editor (z.B.: awk ‚{print $2}‘ /etc/fstab) |
User & Zugriffsrechte
| id, finger | Anzeigen der persönlichen Identifikation |
| passwd | Ändern des Passwortes |
| who, rwho | Anzeigen der eingeloggten Benutzer who: localhost, rwho: remotehosts |
| chmod mode target mode: u=rwx,g=rwx,o=rwxmode (oktal): r=4,w=2,x=1 | Umdefinieren der Zugriffsrechte von Files/Directory(ies) u: User (owner), g: Gropu, o: Others (world) z.B. mode o=rwx, g=rx, o= – ergibt 750 |
| umask [mode] | Zeigen/Setzen der Defaultrechte beim erstellen von Files/Directories |
Prozesse, Job-Control
| ps [-alf] | Anzeigen der aktuellen Prozesse |
| jobs | Anzeigen der Prozesse im Hintergrund (BIC) |
| bg [%job-nummer] | Starten eines gestoppten Prozesses im Hintergrund (BIC) |
| fg [%job-nummer] | Starten eines Prozesses im Vordergrund (BIC) |
| kill [-signal] processs-id | Senden eines Signals an einen Prozess |
| <ctrl> C | Abbrechen/Beenden eines Prozesses im Vordergrund |
| <ctrl> Z | Stoppen eines Prozesses im Vordergrund und Verschieben in den Hintergrund; => muss mit bg/fg gestartet werden. |
Shell Commands
| .script | Script wird in aktueller Shell abgearbeitet (kein Subprozess) |
| history | Ausgabe der Commandhistory |
| exit | Terminieren der Shell; Logout auf Terminal |
| alias name=def | Definition eines alias |
| alias [name] | Ausgabe eines definierten Alias; Ohne Parameter [name] alle |
| unalias name | Löschen eines Alias |
| (set) var=def | Zuweisen eines Wertes an eine lokale Variable (z.B. myvar=’test‘) |
| (set) var=$(cmd) | Zuweisen der Ausgabe eines Commands an eine lokale Variable |
| unset var | Löschen einer Variable |
| $var | Zugriff auf Variable var (z.B. echo $myvar) |
| export var=value | Definition einer globalen Umgebungsvariablen (exportieren) |
| set, export, env, printenv | Ausgabe aller definierten Variablen |
| set -o | Ausgabe der Shell Optionen |
| set (-/+)o option | Setzen (-)/Löschen(+) einer Shell Option |
| <crtl> D | End-Of-File (Abschluss Standard Input) |
Shell-Sonderzeichen
| ~ | Home-Directory |
| * | Beliebige Folge von Zeichen (Ohne Folgen mit führendem Punkt) |
| ? | Beliebiges Zeichen |
| [abc] | Zeichen a, b oder c |
| [0-9] | Zeichen 0 bis 9 |
| [!abc] | Nicht a, b oder C |
| cmd > file | Umlenken (Redirection) von Standard-Out in ein File |
| cmd >> file | Anhängen von Standard-Out an ein File |
| cmd < file | Lesen von Standard-In von einem File |
| cmd 2> file | Umlenken von Standard-Err in ein File |
| cmd >fle 2>&1 | Umlenken von Standard-Out, Standard-Err nach Standard-Out |
| cmd | tee file | Zeigt Ausgaben am Bildschirm an und speichert gleichzeitig in einem file |
| \ | Quoting (Ausmaskieren) des folgenden Zeichens |
| ‚…‘ | Quoting aller eingeschlossenen Zeichen |
| „…“ | Quoting aller eingeschlossenen Zeichen ausser $,‘,“,\ |
| cmd & | Ausführen eines Befehls als Hintergrundprozess |
| cmd_1; cmd_2; …; | Sequentielle Abarbeitung mehrerer Befehle |
| ( cmd_1; cmd_2; .. ) | Befehlsgruppe in Subshell ausführen |
| cmd_1 $(cmd_2) | Ausgabe des zweiten Commands wird als Argument an den ersten Command übergeben |
| cmd_1 | cmd_2 | … | cmd_n | Pipeing (Fliessbandverarbeitung von mehreren Commands |
Spezielle Shell Variablen
| $? | Exit Status des letzten Commands |
| $# | Anzahl Argumente von cmd |
| $n | n-tes Argument von cmd |
| $ENV | Variable für persönliches Shell-Profile |
| $PATH | Aktueller Suchpfad für Utilities |
| $PS1 | Variable mit Inhalt des primären Prompts |
| $RANDOM | Generiert einen Random Integer |
| $SHELL | Name/Pfad der aktuellen Shell |
| $HOME | Pfad zu Home-Directory |
Spezielle Files/Directories
| . | (Punkt) aktuelles Directory |
| .. | (Punkt-Punkt) übergeordnetes Directory |
| / | Root-Directory (Basis des File-Systems) |
| /etc | Directory für globale Konfigurationen (Schreibgeschützt) |
| /etc/profile, /etc/profile.d | Globale User-Environment Scripte |
| /tmp | Directory für temporäre Files (nicht schreibgeschützt) |
| /dev | Directory für alle Devices (z.B. /dev/cdrom, /dev/hda, …) |
| /dev/null | Null-File (unendliche Senke für nicht erwünschten Output) |
| ~/.profile | Persönliches Profile-Script für alle Shells |
| {x,yz,ww} | Brace Expansion z.B. ls sand{x,yz,ww}wich => sandxwich, … |
Sonos: Gut zu wissen
Dieser Beitrag ist „Deprecated“. Sonos ist dabei das schöne Upnp mit ihrer neuen API abzulösen (siehe https://developer.sonos.com/). Es wird wohl zwei API-Versionen geben. Eine für private Developer, für welche eine Cloud-API zur Verfügung gestellt wird und eine für Firmen, welche ein „lokales“ API nutzen (und sich dafür zertifizieren) dürfen. Für Entwickler wie mich wäre also zukünftig das Ansteuern der Boxen nur noch über die Cloud möglich, was für mich nicht in Frage kommt. Ich hoffe Sonos bietet da dann doch noch etwas womit die Sonos Boxen über das LAN angesprochen werden können. Aktuell sieht es aber leider nicht so aus. Erste Funktionen, welche ich hier noch beschrieben habe, sind bereits durch Firmware-Updates herausgefallen (z.B. reboot). Wundert euch also nicht, wenn nicht mehr alle Upnp oder HTTP-Calls funktionieren.
Mittlerweile habe ich meine Sonos Boxen verkauft und bin auf eine OpenSource-Lösung, basierend auf Hifiberry und Max2Play umgestiegen. Damit ist es möglich, die gleiche Funktionalität von Sonos mit eigenen Boxen nachzubauen. Siehe hier.
Hints, Tips und Tricks rund um Sonos
Mein Sonos System umfasst insgesamt 7 Player (1 Sonos Soundbar und 6 Sonos Play:1). Sonos erstellt und unterhält sein eigenes Netz (Sonos-Net) selber. Grundsätzlich funktioniert das „out of the box“. Es kann aber doch manchmal nötig sein das Sonos-Net zu optimieren. Dazu anbei ein paar nützliche Infos:
Tools
Auf jeder Sonos-Box läuft ein Webserver, den man über den Browser ansprechen kann. Dabei können einige nützliche Infos eingesehen oder aber auch Einstellungen vorgenommen werden:
| http |
Übersicht über die Sonos Box. Hier kann auch die Network-Matrix aufgerufen werden |
| http://IP:1400/advconfig.htm | Einstellen der Root-Bridge (FirstZP und Priority auf „enabled“). |
| http://IP:1400/reboot | Reboot der Sonos Box |
| http://IP:1400/region.htm | WLAN Region sezten (bei uns EU – Europa) |
| http://IP:1400/tools.htm | Netzwerktools wie Ping, Traceroute, nslookup |
| http://IP:1400/status | Status-Seite |
| http://IP:1400/wifictrl?wifi=off | Stellt das WIFI bis zum nächsten Reboot ab |
| http://IP:1400/wifictrl?wifi=persist-off | Stellt das WIFI Interface komplett ab. Wenn man nur über Kabel arbeiten möchte |
| http://IP:1400/status/scanresults | Scanresults zeigt euch alle WLAN-Verbindungen an, welche von Sonos erreicht wurden. Kann je nachdem noch nützlich sein, für Android Smartphones gibt es da noch bessere Apps |
| http://<IP>:1400/status/tracks_summary | Mit diesem Befehl kannst Du dir die Anzahl der Tracks anzeigen lassen |
| http://<IP>:1400/status/topology | Zeigt die Sonos Topologie mit allen Sonos Playern und Media Servern |
Nützliche Links:
OpnSense: Netflix IP-Range für VPN Bypass
Ich verwende eine OpnSense Firewall und betreibe darauf einen VPN Client, der den ganzen LAN-Traffic über einen VPN-Anbieter routet. Leider blockiert Netflix seit 2016 VPN Server, so dass im LAN Netflix schauen nicht mehr möglich ist. Damit der WAF (Wife Acceptance Factor) für die Firewall trotzdem erhalten bleibt, habe ich einen VPN-Bypass auf der OpnSense Firewall eingerichtet (Firewall > Rules > LAN). Hier können bestimmte IP-Ranges (definiert als Aliases) über das normale WAN-Interface (und nicht über das VPN-Interface) geroutet werden. Ich möchte hier nicht weiter beschreiben, wie man ein Routing in OpnSense installiert. Aber: Wie finde ich alle relevanten Netflix-Server bzw. deren IP Adressen?
Dazu sind folgende Terminal-Befehle hilfreich:
---------- Netflix IP Range herausfinden curl https://ipinfo.io/AS2906 2>/dev/null | grep -E "a href.*2906\/" | grep -v ":" | sed 's/^.*<a href="\/AS2906\///; s/" >//' > /home/<user>/NETFLIX-ip-range.txt
Netflix hostet auf Amazon AWS Servern. Deswegen müssen auch diese Server mit auf die Bypass Rule. Aus der Schweiz sind nur die eu-west-1 Server von Amazon relevant:
--------- Amazon: Get all IP-Ranges wget https://ip-ranges.amazonaws.com/ip-ranges.json -O /home/<user>/ip-ranges.json --------- Select only EU-West-1 jq -r '.prefixes[] | select(.region=="eu-west-1") | .ip_prefix' < /home/<user>/ip-ranges.json
Siehe auch:
DNS Leak – Test
Ich betreibe eine eigene OpnSense Firewall. Auf der OpnSense werkelt ein VPN-Client, der den ganzen Internet-Traffic verschlüsselt über einen VPN-Anbieter routet. Bei einer solchen Konfiguration ist es wichtig, den DNS-Server mit zu berücksichtigen. Dies, weil die Anfragen an den DNS-Server natürlich auch von den ISPs überprüft werden können. Es ist also in diesem Falle empfehlenswert einen DNS-Server zu wählen, dem man auch (genaus wie dem VPN-Anbieter) vertraut. Welcher DNS-Server verwendet wird ist jedem selber überlassen (DNS-Sammlung). Beispiele:
- DNS-Server von CCC (Status hier einsehbar)
- Digitale Gesellschaft / Site / Status
- Switch
- Applied-Privacy
Sobald der DNS-Server konfiguriert ist, kann über folgenden Dienst überprüft werden, ob wirklich nur noch der gewünschte DNS-Server getriggert wird bzw. keine DNS-Leaks bestehen.
Was ein DNS-Leak genau ist, wird hier schön beschrieben.
Tomcat9 auf Ubuntu 18.4
https://www.digitalocean.com/community/tutorials/install-tomcat-9-ubuntu-1804
Dualboot System mit Ubuntu und Windows – Zeit nicht korrekt
Auf meinen Dualboot-System ist Ubuntu und Windows installiert.
Die beiden Betriebssysteme interpretieren die Hardware-Clock nicht gleich. Linux interpretiert die Hardware-Clock als UTC. Windows aber als „Local-Time“. Daraus resultiert, dass in dem einen Betriebssystem die Zeit korrekt gesetzt wird und im anderen falsch angezeigt wird.
Ich korrigiere dies, indem ich Ubuntu beibringe die Local-Zime zu verwenden:
- Im Bios die HW-Clock auf die aktuelle Local-Zeit einstellen
- Dann im Linux die Local-Zeit konfigurieren
sudo timedatectl set-local-rtc 1
Man könnte dies auch so korrigieren, indem man Windows beibringt, die UTC zu verwenden. Aber umständlicher als die Korrektur über Linux.
Links
https://askubuntu.com/questions/169376/clock-time-is-off-on-dual-boot
test