Digitales Prototyping: Terminal Grundlagen / 2020-04-23 / Matthias Edler-Golla, CC BY-SA 4.0


|



 



Hallo!


Themen heute

  • Terminal Programme für Mac und PC
  • Terminal: Navigieren
  • Terminal: Dateien und Ordner anlegen, löschen, kopieren verschieben
  • Terminal: Viele Dateien via Wildcard "*" verschieben
  • Terminal: Texte bearbeiten
  • Terminal: Programme starten
  • Terminal: Effektiv Arbeiten ohne viel Tippen

In the Beginning was the Command Line

Fair use, Link

Stephenson explores the GUI as a metaphor in terms of the increasing interposition of abstractions between humans and the actual workings of devices and explains the beauty hackers feel in good-quality tools. He does this with a car analogy. He compares four operating systems, Mac OS by Apple Computer to a luxury European car, Windows by Microsoft to a station wagon, Linux to a free tank, and BeOS to a batmobile.

Buch online

Das Buch kann online gelesen werden…


Die Kommandozeile

Screenshot iTerm

Die Kommandozeile oder Befehlszeile ist ein Teil eines Computerprogramms, das eine Textzeile als Eingabe vom Benutzer entgegennimmt und im Kontext interpretiert. Im Englischen wird sie als command-line oder command prompt (Eingabeaufforderung) bezeichnet.

Die englische Bezeichnung command-line interface, kurz CLI, bezeichnet die Verwendung von Kommandozeilen für die Interaktion mit einem Benutzer. CLI wird als das Gegenteil und der historische Vorläufer des graphical user interface, kurz GUI, angesehen, obwohl es auch unter grafischen Benutzeroberflächen Kommandozeilen gibt.

Ein command line interface (CLI) ist die einfachste Methode zur Interaktion eines Menschen (Human) mit einem Computer, und somit eine Möglichkeit der Mensch-Computer-Interaktion, englisch Human-Computer Interaction (HCI). Dabei werden dem Computer Textzeilen entweder direkt über die Tastatur oder in Form eines Scripts übergeben, die dieser anschließend ausführt.

command line interface gibt es ungefähr seit den 60er-Jahren des letzten Jahrhunderts und lösten die Kommunikation via Lochkarten ab.


Terminal Programme am Mac und PC

iTerm oder Hyper sind (bessere) Alternative zum Terminal, das auf allen Macs installiert ist.

iTerm

Habt Ihr Euch als Mac-User schon iTerm installiert?

Hyper

Hyper läuft auf Mac, Windows und Linux. Hier könnt Ihr es herunterladen.

Beide Programme sind kostenlos! iTerm ist am Mac noch etwas besser integriert – ich benutze es täglich!


Terminal: Erste Befehle (Navigieren & Orientieren)

Amadeus Stadler hat für seinen Kurs Webdesign II @ HM eine gute Zusammenfassung zu Terminal-Befehlen erstellt – bitte schaut Euch auch das mal an!

Terminal-Befehle

probiert diese doch mal aus – auf Groß- und Kleinschreibung achten:

wo befinde ich mich gerade?

pwd

zeige mir den Inhalt des aktuellen Ordner an

ls

sortiert den Inhalt des aktuellen Ordners anzeigen

ls -l

sortiert den Inhalt des aktuellen Ordners anzeigen (incl. unsichtbare Dateien)

ls -al

Inhalt eines anderen Ordners anzeigen – hier des Desktops

ls -l Desktop

Baumansicht des aktuellen Ordners

tree

Baumansicht eines anderen Ordners, nur 2 Level tief

tree -n 2 /Desktop

In einen anderen Ordner wechseln

cd Pictures/Demo-Fotos/

In eine Ebene höher wechseln

cd ../

In zwei Ebenen höher wechseln

cd ../../

In den obersten Ordner wechseln

cd /

In den eigenen Home-Ordner wechseln

cd ~

Abfrage, wie ein Befehl funkioniert, hier z.B. "ls"

man ls

Terminal: Datei- und Ordner-Anlegen

Mit den hier gezeigten Befehlen könnt Ihr neue Dateien und Ordner anlegen

Wechselt dazu erst mal auf den Desktop und legt dort einen neuen Ordner an!

nächste Zeile macht (dank "&&") 3 Schritte auf einmal:

  • wechselt auf den Schreibtisch
  • legt den Ordner "Terminaltests" an
  • wechselt in den Ordner "Terminaltests"

Terminal

cd ~/Desktop && mkdir Terminaltests && cd Terminaltests

Ordner anlegen und gleich hineinwechseln

mkdir Textdateien && cd Textdateien

"mkdir" = make directory…

Abfrage, ob ich mich im richtigen Ordner befinde

pwd

dann sollte der Pfad zum Ordner "Textdateien" gezeigt werden

leere Textdatei "demo.txt" dort anlegen

touch demo.txt

mit "nano" die Datei "demo.txt" bearbeiten

nano demo.txt

Dort etwas Text eingeben und mit CTRL O speichern. Mit CTRL X den Nano-Editor wieder verlassen.

Der Editor nano kommt ohne Mouse aus. Ihr müsst mit den Pfeiltasten navigieren. Am unteren Rand des Fensters stehen Tips, was man mit CTRL ZEICHEN machen kann. Das ist erst mal sehr ungewohnt…

Ordner "loeschen" und leere Textdateien "demo2.txt" dort anlegen

mkdir loeschen && cd loeschen && touch demo2.txt

"demo2.txt" direkt (ohne Editor) mit Text befüllen

echo "Das ist ein cooler Text" > demo2.txt

echo "Text" (ohne "> demo2.txt") gibt den jeweiligen Text direkt im Terminal aus

"demo2.txt" direkt (ohne Editor) mit weiterem Text befüllen

echo "der hier fortgesetzt wird" >> demo2.txt

Beachtet das ">>": Wenn nur ein ">" verwendet wird, wird der existierende Text überschrieben, bei ">>" wird der Text auf einer neuen Zeile eingefügt!

und noch das Datum auf der letzten Zeile einfügen

date >> demo2.txt

Anschauen, was in "demo2.txt" steht

more demo2.txt

Terminal: Datei- und Ordner-Löschen

Achtung: Das Löschen passiert unmittelbar und Ihr habt keinen Mülleimer, aus dem Ihr die Sachen retten könnt! Deswegen immer genau schauen, was man gerade löscht!

in den Ordner "Terminaltests/Textdateien" wechseln (siehe vorherigen Slide)

cd ~/Desktop/Terminaltests/Textdateien

Datei "demo.txt" löschen

rm demo.txt

aus dem Ordner "Textdateien" rausgehen…

cd ../

… und diesen löschen

rm -r Textdateien/

das "-r" ist hier nötig, weil Ihr einen ganzen Ordner (evtl. mit Inhalt) löscht! VORSICHT!


Terminal: Copy, Move and Delete

Bitte ladet die folgende Zip-Datei TerminalOrdner herunter und legt diese auf Euren Desktop!

Entpackt diese - entweder auf dem Desktop mit Doppelklick oder via Terminal:

cd Desktop && unzip -a TerminalOrdner.zip && cd TerminalOrdner

Mit "tree" ansehen, was sich im TerminalOrdner befindet

tree

auf dem Screenshot oben sieht man einen Teil der Ordner-Struktur...

In gewünschten Ordner wechseln

cd demo_1/ordner_a

Datei „demo.html“ kopieren

cp demo.html ../../

Wo befindet sich die kopierte Datei jetzt? Schaut im Finder/Explorer nach…

Datei „demo.html“ im Ordner "TerminalOrdner" löschen

Achtung, dazu zuerst wieder aus den Ordnern "demo_1/ordner_a" rausgehen!

cd ../../

jetzt löschen

rm demo.html

Ordner "ordner_c" in Ordner "demo_1" verschieben

dieser befindet sich im Ordner "demo_2/test/versuch"

mv demo_2/test/versuch/ordner_c demo_1

dazu müsst Ihr Euch direkt im Ordner TerminalOrdner befinden!

alle JPGs aus dem Ordner demo_1/ordner_a in den Ordner sortiert/jpg verschieben

mv demo_1/ordner_a/*.jpg sortiert/jpg

Das "*.jpg" bedeutet, dass alle Dateien mit der Endung .jpg verschoben werden sollen – super praktisch, weil man so die Dateien nicht einzeln ansprechen muss!

Übung

Wer schafft es, alle JPGs aus demo_2/test/versuch/ordner_b ebenfalls in den Ordner sortiert/jpg zu verschieben?


Terminal: Viele Dateien gleichzeitig verschieben

Ladet die Zip-Datei "Shots.zip" herunter und entpackt diese auf Eurem Desktop

Durch verwenden von "*" (Wildcard) kann man sehr viele Dateien gleichzeitig auswählen und z.B. kopieren

in den gewünschten Ordner wechseln

cd ~/Desktop/Shots/

Inhalt anzeigen lassen – ganz schön viele Bilder, buntgemischt

ls

Ordner erstellen, in die die Bilder in einem nächsten Schritt einsortiert werden sollen

mkdir JPG && mkdir GIF && mkdir PNG

alle JPGs aus dem Ordner, in dem man sich gerade befindet, in den Ordner "jpg" verschieben

mv *.jpg JPG

*.jpg bedeutet alle JPGs auswählen

Analog alle GIFs und alle PNGs auswählen und einsortieren

mv *.gif GIF && mv *.png PNG

Inhalt des Ordners als "Tree" in einer Datei speichern

tree > treeview.txt

treeview.txt

.
├── GIF
│   ├── 20190226093004-shot.gif
│   ├── 20190226123003-shot.gif
│   ├── 20190226163004-shot.gif
│   ├── 20190227093004-shot.gif
│   ├── 20190227123003-shot.gif
│   ├── 20190227163004-shot.gif
│   ├── 20190228093003-shot.gif
│   ├── 20190228123003-shot.gif
│   ├── 20190228163004-shot.gif
│   ├── 20190301093003-shot.gif
│   ├── 20190301123003-shot.gif
│   ├── 20190301163003-shot.gif
│   ├── 20190302093003-shot.gif
│   ├── 20190302123003-shot.gif
│   ├── 20190302163003-shot.gif
│   ├── 20190303093004-shot.gif
│   ├── 20190303123004-shot.gif
│   ├── 20190303163004-shot.gif
│   ├── 20190304093003-shot.gif
│   ├── 20190304123003-shot.gif
│   ├── 20190304163004-shot.gif
│   ├── 20190305093004-shot.gif
│   ├── 20190305123003-shot.gif
│   ├── 20190305163004-shot.gif
│   ├── 20190306093004-shot.gif
│   ├── 20190306123004-shot.gif
│   ├── 20190306163003-shot.gif
│   ├── 20190307093004-shot.gif
│   └── 20190307123003-shot.gif
├── JPG
│   ├── 20190226093004-shot.jpg
│   ├── 20190226123003-shot.jpg
│   ├── 20190226163004-shot.jpg
│   ├── 20190227093004-shot.jpg
│   ├── 20190227123003-shot.jpg
│   ├── 20190227163004-shot.jpg
│   ├── 20190228093003-shot.jpg
│   ├── 20190228123003-shot.jpg
│   ├── 20190228163004-shot.jpg
│   ├── 20190301093003-shot.jpg
│   ├── 20190301123003-shot.jpg
│   ├── 20190301163003-shot.jpg
│   ├── 20190302093003-shot.jpg
│   ├── 20190302123003-shot.jpg
│   ├── 20190302163003-shot.jpg
│   ├── 20190303093004-shot.jpg
│   ├── 20190303123004-shot.jpg
│   ├── 20190303163004-shot.jpg
│   ├── 20190304093003-shot.jpg
│   ├── 20190304123003-shot.jpg
│   ├── 20190304163004-shot.jpg
│   ├── 20190305093004-shot.jpg
│   ├── 20190305123003-shot.jpg
│   ├── 20190305163004-shot.jpg
│   ├── 20190306093004-shot.jpg
│   ├── 20190306123004-shot.jpg
│   ├── 20190306163003-shot.jpg
│   ├── 20190307093004-shot.jpg
│   └── 20190307123003-shot.jpg
├── PNG
│   ├── 20190226093004-shot.png
│   ├── 20190226123003-shot.png
│   ├── 20190226163004-shot.png
│   ├── 20190227093004-shot.png
│   ├── 20190227123003-shot.png
│   ├── 20190227163004-shot.png
│   ├── 20190228093003-shot.png
│   ├── 20190228123003-shot.png
│   ├── 20190228163004-shot.png
│   ├── 20190301093003-shot.png
│   ├── 20190301123003-shot.png
│   ├── 20190301163003-shot.png
│   ├── 20190302093003-shot.png
│   ├── 20190302123003-shot.png
│   ├── 20190302163003-shot.png
│   ├── 20190303093004-shot.png
│   ├── 20190303123004-shot.png
│   ├── 20190303163004-shot.png
│   ├── 20190304093003-shot.png
│   ├── 20190304123003-shot.png
│   ├── 20190304163004-shot.png
│   ├── 20190305093004-shot.png
│   ├── 20190305123003-shot.png
│   ├── 20190305163004-shot.png
│   ├── 20190306093004-shot.png
│   ├── 20190306123004-shot.png
│   ├── 20190306163003-shot.png
│   ├── 20190307093004-shot.png
│   └── 20190307123003-shot.png
└── treeview.txt

3 directories, 88 files

Terminal: Texte bearbeiten

Ladet die Zip-Datei "CSV_Dateien.zip" herunter und entpackt diese auf Eurem Desktop

Das Terminal bietet Möglichkeiten, um mehrere Texte in eine Textdatei zusammenzufassen oder aus einer Textdatei gezielt Zeilen herauszukopieren…

in richtigen Ordner wechseln

cd ~/Desktop/CSV_Dateien

Dateien anzeigen

ls -l

Inhalt der Datei anzeigen (mit "q" beenden!)

more 2019_10_temperatur.csv

oder

less 2019_10_temperatur.csv

ersten 5 Zeilen anzeigen lassen

head -n 5 2019_10_temperatur.csv

letzten 8 Zeilen anzeigen lassen

tail -n 8 2019_10_temperatur.csv

mehrere Text-Dateien in eine neue zusammenfügen via "cat"

cat 2019_10_temperatur.csv 2019_11_temperatur.csv > temperatur.csv

noch eine weitere Datei bei der neuen hinzufügen

cat 2019_12_temperatur.csv >> temperatur.csv

">>" fügt die neue Datei hinzu
">" würde die alten Inhalte überschreiben

letzte 10 Zeilen einer Datei in eine neue Datei übertragen

tail -n 10 2019_12_temperatur.csv | cat  > 2019_12_temperatur_last_10.csv

Das Symbol "|" wird als "Pipe" bezeichnet, damit kann man mehrere Befehle verketten, wie hier gezeigt: Zuerst die letzten 10 Zeilen einer Datei auswählen und in einem 2. Schritt diese dann mit "cat" in eine neue Datei einfügen


Terminal: Programm starten

Man kann sich direkt im Terminal Uhrzeit und Kalender anzeigen lassen – mit unterschiedlichen Ausgaben

Probiert es mal aus – Ihr erhaltet so super einfach einen Kalender für das gewünschte Jahr – auch weit in der Vergangenheit oder Zukunft!

Datum und Uhrzeit anzeigen lassen

date

aktueller Monat, heutiger Tag gehighlightet

ncal

aktueller Monat, heutiger Tag NICHT gehighlightet

ncal -h

Juni dieses Jahres

ncal -m 6

vorherigen, diesen und nächsten Monat

ncal -3

ganzes Jahr 1024

ncal -y 1024

ganzes Jahr 2020 in einer Textdatei ausgeben

ncal -yw 2020 > jahre.txt

Die Option "w" fügt noch die Kalenderwochen ein!

das Jahr 2021 noch hinzufügen

ncal -yw 2021 >> jahre.txt

Ausgabe der Hilfeseite zu "ncal"

man ncal

Terminal Programme cURL

Im Lexikon nach dem Begriff "Design" suchen

curl dict://dict.org/d:design

Hilfe aufrufen

curl wttr.in/:help

Wetter-Abfrage via cURL

Fragt doch mal ab, wie das Wetter wird…

Wetter im gewünschten Ort

curl wttr.in/Munich

kältester Ort auf der Erde

curl wttr.in/Oymyakon

aktuelle Mond-Phase

curl wttr.in/Moon 

Mond an einem best. Tag

curl wttr.in/Moon@2019-April-12

Online-Tutorials zu cURL


Terminal Programme wget

index.html herunterladen

cd ~/Desktop

wget http://fk12.org/index.html

Meine Scripte komplett herunterladen

damit funktionieren diese auch offline auf Eurem PC/Mac…

Ordner "Scripte" anlegen und dorthin wechseln

cd ~/Desktop && mkdir Scripte && cd Scripte

wget -r -k -E -l 8 https://scripte.matthias-edler-golla.de

Die Option -r sorgt dafür, dass rekursiv bis zu einer Tiefe von 8 (-l 8) vorgegangen wird,
-k konvertiert die Links, so dass sie lokal funktionieren und -E erzwingt die Endung .html
für alle Dateien (ist dann nützlich, wenn .php- oder .asp-Seiten geladen werden)

Achtung: Das Herunterladen dauert!

Online-Tutorial


Terminal: Effektiv arbeiten ohne viel Tippen

Das Terminal-Fenster stellt uns einige „Shortcuts“ zur Verfügung, damit wir möglichst wenig tippen müssen!

Am Mac schnell in den richtigen Ordner im Terminal wechseln

cd 

cd und Leerzeichen eingeben und dann vom Finder den gewünschten Ordner ins Terminal-Fenster ziehen, jetzt ENTER-Taste drücken und das Terminal wechselt zum gewünschten Ordner. Ich weiss leider nicht, ob das unter Windows auch so geht!

Am Mac den Ordner im Finder öffnen, der gerade im Terminal ausgewählt ist

cd ~/Desktop/test

open .

Damit springt ein Finder-Fenster auf und zeigt den Inhalt des Ordners test, der sich auf dem Desktop befindet…

TAB-Taste zum automatischen Vollenden des eingegeben Wortes

Die TAB-Taste befindet sich links vom Q auf der Tastatur

cd /Deskt

statt das Wort Desktop weiter zu schreiben, einfach an dieser Stelle die TAB-Taste drücken und das Terminal „vollendet“ das Wort. Wenn es nicht eindeutig ist, macht das Terminal Vorschläge, was gemeint sein könnte.

Pfeiltaste nach oben innerhalb des Terminals

…ruft hintereinander die zuletzt verwendeten Befehle auf. Durch Drücken der Entertaste wählt man den jeweiligen Befehl aus.

History

Auflisten der letzten Befehle, die man im Terminal eingegeben hat

history

damit erhält man z.B. folgendes

 …
 7191  cp *.gif GIF && cp *.png PNG
 7192  ls
 7193  rm GIF/* && rm JPG/* && PNG/*
 7194  ls
 7195  mv *.jpg JPG
 7196  mv *.gif GIF && mv *.png PNG
 7197  ls
 7198  tree
 7199  tree > treeview.txt
 7200  ls
 7201  cd
 7202  history
 7203  ls
 7204  cd Desktop

will man einen der oben aufgeführten Befehle noch mal ausführen (oder anpassen), muss man nur folgendes eingeben:

! 7196

Damit ruft man erneut den Befehl mv *.gif GIF && mv *.png PNG auf…

reverse-i-search

Um schnell innerhalb der History nach dem richtigen Befehl zu suchen, einfach CTRL + R eingeben und dann die Buchstaben eintippen, an die man sich vom Befehl noch erinnern kann

weitere Tips online


Conquer the Command Line

Sometimes only words will do. Graphic user interfaces (GUIs) were a great advance, creating an easy route into computer use for many non-technical users. For complex tasks, though, the interface can become a limitation: blocking off choices, and leaving a circuitous route even for only moderately complicated jobs.
If you’re not comfortable when faced with the $ prompt, then don’t panic! In this fully updated book, we’ll quickly make you feel at home, and able to find your way around the terminal on the Pi, or any other GNU/Linux computer: getting things done, and unlocking the power of the command line.


Übungen

Ladet die Zip-Datei "Shots_CSVs.zip" herunter und entpackt diese auf Eurem Desktop

Führt dann folgende Sachen im Terminal aus

  1. legt die Ordner "phase-1", "phase-2", "phase-3", "phase-4" an
  2. verschiebt die jeweiligen Bilder in die dazugehörigen Ordner. Also alle "phase-1"-Bilder in Ordner "phase-1" usw. Nutzt dazu die Wildcard "*"!
  3. legt den Ordner "CSV" an und verschiebt alle CSV-Dateien dort hinein
  4. Erstellt im Ordner "CSV" eine neue Datei "sensor_data.csv", die jeweils die ersten 10 Zeilen der 3 existierenden CSV-Dateien enthält

Lösungen

Bitte probiert es erst selber aus, bevor Ihr Euch die Lösungen anschaut!

legt die Ordner "phase-1", "phase-2", "phase-3", "phase-4" an

mkdir phase-1 && mkdir phase-2 && mkdir phase-3 && mkdir phase-4

verschiebt die jeweiligen Bilder in die dazugehörigen Ordner

mv phase-1-* phase-1 && mv phase-2-* phase-2 && mv phase-3-* phase-3 && mv phase-4-* phase-4

legt den Ordner "CSV" an und verschiebt alle CSV-Dateien dort hinein

mkdir CSV
mv *.csv CSV

Erstellt im Ordner "CSV" eine neue Datei "sensor_data.csv",

die jeweils die ersten 10 Zeilen der 3 existierenden CSV-Dateien enthält

cd CSV

head -n 10 2019_03_08_sensor_data.csv > sensor_data.csv
head -n 10 2019_03_09_sensor_data.csv >> sensor_data.csv
head -n 10 2019_03_10_sensor_data.csv >> sensor_data.csv

sensor_data.csv

2019-03-08,00:00:06,Temp,19.9,Humidity,67.1
2019-03-08,00:15:06,Temp,19.8,Humidity,65.8
2019-03-08,00:30:06,Temp,19.8,Humidity,64.2
2019-03-08,00:45:06,Temp,19.8,Humidity,62.5
2019-03-08,01:00:06,Temp,19.8,Humidity,61.1
2019-03-08,01:15:06,Temp,19.8,Humidity,59.8
2019-03-08,01:30:07,Temp,19.8,Humidity,58.7
2019-03-08,01:45:06,Temp,19.8,Humidity,57.7
2019-03-08,02:00:07,Temp,19.8,Humidity,57.3
2019-03-08,02:15:06,Temp,19.8,Humidity,56.6
2019-03-09,00:00:08,Temp,20.7,Humidity,90.3
2019-03-09,00:15:06,Temp,20.7,Humidity,90.3
2019-03-09,00:30:07,Temp,20.7,Humidity,90.4
2019-03-09,00:45:06,Temp,20.6,Humidity,90.5
2019-03-09,01:00:06,Temp,20.6,Humidity,90.4
2019-03-09,01:15:06,Temp,20.6,Humidity,90.3
2019-03-09,01:30:06,Temp,20.6,Humidity,90.2
2019-03-09,01:45:08,Temp,20.5,Humidity,89.8
2019-03-09,02:00:06,Temp,20.5,Humidity,89.8
2019-03-09,02:15:11,Temp,20.5,Humidity,88.7
2019-03-10,00:00:07,Temp,20.3,Humidity,52.6
2019-03-10,00:15:09,Temp,20.2,Humidity,52.4
2019-03-10,00:30:06,Temp,20.2,Humidity,52.4
2019-03-10,00:45:06,Temp,20.1,Humidity,52.3
2019-03-10,01:00:06,Temp,20.1,Humidity,52.3
2019-03-10,01:15:06,Temp,20.0,Humidity,52.0
2019-03-10,01:30:07,Temp,19.9,Humidity,51.2
2019-03-10,01:45:06,Temp,19.8,Humidity,50.6
2019-03-10,02:00:07,Temp,19.8,Humidity,50.2
2019-03-10,02:15:06,Temp,19.7,Humidity,49.9

Danke

Wir hören/sehen uns nächsten Donnerstag (30.4.2020)!

Bleibt gesund!

Weitere Vorträge: