====== 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