====== Webserver ======
* Computer der Webseiten ausliefert, im einfachsten Fall einfach Dateien, in der URL sichtbar
* https://ofi.tech-lab.ch/2022/EF05a/
* Namensauflösung (DNS) -> liefert IP-Adresse von ofi.tech-lab.ch, Verbindung mit IP, Anfrage von Verzeichnis 2022/EF05a/
* http, bzw. https («s» für secure, mit authentifizierter und verschlüsselter Verbindung)
* Spezielle Datei ''index.html'', bzw. ''index.php'': Existiert so eine Datei im Verzeichnis, wird anstatt des Listings aller Dateien diese ausgeliefert.
* Spezielle Datei ''.htaccess''. Regelt Einstellungen des Webservers für das entsprechende Verzeichnis, z.B. Zugriff nur aus den Kanti-Netzen.
===== Upload der Dateien =====
Nur mit ''scp'' oder ''sftp''. Entweder via Kommandozeile oder [[lehrkraefte:blc:informatik:glf20:webtech-filezilla|mit Hilfe von FileZilla]].
# Lokal zum Server: (im KSBG-wild muss der Port 23 anstatt 40199 verwendet werden).
scp -P 40199 datei.html hansli@tech-lab.ch:verzeichnis/.
# Vom Server zu lokal (das aktuelle Verzeichnis ist der Punkt .)
scp -P 40199 hansli@tech-lab.ch:verzeichnis/datei.html .
* Laden Sie Ihr JavaScript Projekt auf den Webserver. Sie können Ihre html-Datei in ''index.html'' umbenennen, damit diese direkt geladen wird.
* Wenn Sie möchten, dass Ihre Seite von überall zugänglich ist, löschen Sie die Datei .htaccess.
===== Verbindung auf die Kommandozeile =====
ssh -p 40199 hansli@tech-lab.ch
===== Wichtigste Kommandos =====
Generelle Bemerkungen:
* Die Tabulator-Taste (Tab) vervollständigt Dateinamen so weit wie eindeutig. Zweimaliges Drücken zeigt die verbleibenden Möglichkeiten an.
* Leerzeichen sind Trennzeichen. Vermeiden Sie diese in Dateinamen (sonst sind die Dateinamen zwischen ''"'' zu schreiben.
* Optionen beginnen mit einem Minuszeichen ''-''. Manchmal auch ''--'' für ausgeschriebene Optionen.
* Pfeiltaste nach oben geht die Historie der eingegebenen Kommando durch.
* Unix-Philosophie:
* Ein Programm kann ein Ding
* Programme lesen Text als Input und produzieren wieder Text als Output
* Vom «Standard input» (STDIN) wird gelesen, aus «Standard output» wird geschrieben.
* Ein- und Ausgabe können umgeleitet werden (z.B. von oder zu Datei oder von oder zu einem Programm)
* Pipe: ''|'' Umleitung in nächstes Programm
* ''>'' Umleitung in Datei (überschreiben), ''>>'' Umleitung in Datei (anhängen)
* ''<'' lesen aus Datei (anstatt STDIN)
* Gross-/Kleinschreibung ist relevant!
* Dateinamen können mit Wildcards spezifiziert werden:
* ''*'' steht für eine Folge aus beliebigen Zeichen (auch keine)
* ''?'' seht für genau ein beliebiges Zeichen
* ''[a-z]'' steht für genau einen Kleinbuchstaben a-z
* ''{txt,TXT}'' steht für txt oder TXT (z.B. *.{txt,TXT} bedeutet alle Dateien, die mit .txt oder .TXT enden).
* ''img{08..12}.jpg'' steht für ''img08.jpg img09.jpg img10.jpg img11.jpg img12.jpg''
* Der aktuelle Ordner ist ''.'', der übergeordnete Ordner ist ''..''.
* Das Homeverzeichnis kann mit ''~'' abgekürzt werden.
==== Datei-Manipulation ====
* ''ls'' Dateien anzeigen
* ''ls -l'' Mehr Infos
* ''ls -a'' Alle Dateien (auch solche, die mit ''.'' beginnen).
* ''ls -lh'' human readable filesizes
* ''ls -ltrh'' Sortierung nach Datum, neueste zuletzt.
* ''ls -lSrh'' Sortierung nach Grösse, grösste zuletzt.
* ''pwd'' Print working directory (aktuelles Verzeichns anzeigen)
* ''cd ordner'' Verzeichnis wechseln
* ''cd ..'' ins übergeordnete Verzeichnis wechseln.
* ''cd'' ins Homeverzeichnis wechseln.
* ''cp source dest'', wobei ''source'' mehrere Dateien sein können, dann muss aber ''dest'' ein Verzeichnis sein.
* ''mv source dest'', umbenennen, bzw. verschieben wenn ''dest'' ein Ordner ist. ''source'' können mehrere Dateien sein
* ''mmv'' mehrere Dateien auf einmal umbenennen, nicht standard
* ''rm datei'', Datei(en) unwiderruflich löschen
* ''mkdir ordner'' Ordner anlegen
* ''rmdir ordner'' leeren Ordner löschen
* ''rm -r ordner'' Ordner mit allem Inhalt unwiderruflich löschen
* ''chmod [ugo]{+,-}[rwx] datei'' Berechtigung auf Datei ändern: ''u''ser, ''g''roup, ''o''ther, ''r''ead, ''w''rite, ''e''xecute.
cut -f1 -d' ' ~/.bash_history | sort | uniq -c | sort -nr | head -n 40
548 ls
288 cd
265 git
102 vim
52 host
50 make
47 less
42 ssh
42 okular
33 sudo
29 exit
23 bg
22 cp
22 adb
21 grep
19 ruby
18 mkdir
17 mount
17 libreoffice
17 bash
16 cat
15 mv
15 gwenview
14 ping6
14 apt
13 telnet
13 rm
12 pdftk
12 ip
10 for
8 touch
8 ps
8 asy
7 teams
7 irb
7 inkscape
6 scp
6 pwd
==== Benfords law auf Dateigrössen ====
Die erste Ziffer $d$ von Dateigrössen ist nicht gleichverteilt, sondern ungefähr $P(d) = \log_{10}\left(1+\frac{1}{d}\right)$
Untersuchen Sie diesen Zusammenhang mit allen Dateien unterhalb /usr auf dem Server (oder auf Ihrem Computer, wenn folgende Tools verfügbar sind).
Lesen Sie dazu die Dokumentation zu den folgenden Kommandos und deren Optionen (entweder online oder mit ''man kommando'')
* ''find'' mit ''-type'' und ''-printf''
* ''cut'' mit ''-c''
* ''sort''
* ''uniq'' mit ''-c''
Erstellen Sie einen entsprechenden Graphen in einer Tabellenkalkulation oder gleich mit ''gnuplot'' ;-)
find /usr -type f -printf "%s\n" | cut -c 1 | sort | uniq -c
Mit Gnuplot (der Skalierungsfaktor 190000 ist Handgelenk mal $\pi$):
find /usr -type f -printf "%s\n" | cut -c 1 | grep -v 0 | sort | uniq -c | gnuplot -e "set terminal dumb $COLUMNS $LINES; plot '-' using 2:1 with lines, 190000*log(1+1/x)"
{{kurse:ef05a-2021:js:ersteziffer-dateigroesse-benfords-law.svg}}
160000 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| + + + + + + + |
| '-' using 2:1 ******* |
| 190000*log(1+1/x) ####### |
|* |
140000 |-* +-|
| * |
| * |
|# * |
| # * |
120000 |-+# * +-|
| # * |
| # * |
| # * |
| ## ** |
100000 |-+ ## * +-|
| # * |
| ## * |
| ##* |
| ## |
80000 |-+ ### +-|
| * ## |
| * #### |
| * ### |
| #### |
| ********* ### |
60000 |-+ ***** ###### +-|
| ****** ##### |
| ** ##### |
| *********######### |
| ***** ######### |
40000 |-+ ****** ########### +-|
| ** ############ |
| ****************************################ |
| *****####################### |
| ********************** ############################### |
20000 |-+ ********************************############|
| |
| |
| |
| + + + + + + + |
0 +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 2 3 4 5 6 7 8 9
==== Links auf Schülerwebseiten auf der Kommandozeile ====
Im und unterhalb des Verzeichnisses /srv/www/ofi/2022/EF05a werden Dateien gesucht, die in .html enden und in den letzten 30 Tagen erstellt wurden:
cd /srv/www/ofi/2022/EF05a
find . -name \*.html -ctime -30
Es gibt noch backup-Dateien der index.html Datei. Diese werden noch herausgefiltert:
find . -name \*.html -ctime -30 | grep -v back
Jetzt müssen wir die Dateinamen noch in Links verpacken. Die kann z.B. in einem schlauen Text-Editor erfolgen oder ebenfalls auf der Kommandozeile:
for a in `find . -name \*.html -ctime -30 | grep -v back`;do echo "$a
"; done
Schlussendlich leiten wir die Ausgabe in eine Datei um (wofür Sie nicht die Berechtigung haben):
for a in `find . -name \*.html -ctime -30 | grep -v back`;do echo "$a
"; done > projects.html