Loading static/js/exercises.mjs +112 −2 Original line number Diff line number Diff line Loading @@ -187,11 +187,48 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () { this.verify("cat botschaft").hasOutput("Der Junge sieht den Mann mit dem Fernglas") }) this.exercise("Ordner erstellen", async function () { this.describe(`Erstelle unter dem Pfad "/tmp" einen Ordner mit dem Namen "computational", in dem sich ein weiterer Ordner mit dem Namen "linguistics" befindet.`) await this.manualConfirmation() this.verify('if [ -d /tmp/computational/linguistics/ ]; then echo "yes"; else echo "no"; fi').hasOutput("yes") }) this.exercise("Löschen und Umbenennen von Ordnern und Dateien", async function () { this.describe(`Gehe in den Ordner "/resources/stuff". Benenne die Datei "a_file.png" zu "b_file.png" um, und lösche den Unterordner "to/" mit all seinen Inhalten.`) await this.prepareWith(`mkdir -p /resources/stuff/to/delete && touch /resources/stuff/a_file.png && cd /resources/stuff/to/delete && for i in 1 2 3 4 5 6 7 8 9 10; do touch "trashfile$i.txt"; done && cd /root`) await this.manualConfirmation() this.verify(`if ( ! [ -d /resources/stuff/to ] && [ -f /resources/stuff/b_file.png ] ); then echo "yes"; else echo "no"; fi`).hasOutput("yes") }) this.exercise("Textdateien lesen und schreiben", async function () { this.describe(`Lasse dir den Inhalt der Datei "reverse.txt" anzeigen und schreibe den Inhalt in umgekehrter Reihenfolge in eine neue Datei mit dem Namen "correct.txt"`) await this.prepareWith("echo 'ILOC' >> reverse.txt") await this.manualConfirmation() this.verify("cat correct.txt").hasOutput("COLI") }) this.exercise("Berechtigungen anpassen", async function () { this.describe(`Ändere die Berechtigungen der Datei "/resources/supergeheim" so, dass nur der Besitzer sie anzeigen kann (und sonst niemand).`) await this.prepareWith("mkdir /resources && echo 'Dies ist ein Geheimnis.' > /resources/supergeheim") await this.prepareWith(`mkdir /resources && echo 'Dies ist ein Geheimnis.' > /resources/supergeheim`) await this.manualConfirmation() Loading @@ -202,6 +239,79 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () { }) }) // To add another exercise, simply copy and paste an this.exercise(...) block from above and adjust it. this.exercise("Aktuelles Arbeitsverzeichnis anfangen", async function () { this.describe(`Lasse dir den absoluten Pfad ausgeben, an dem du dich gerade befindest. Verwende dazu einen Befehl, auch wenn du den Pfad auf dieser Linux-Maschine bereits in der Prompt ablesen könntest.`) await this.prepareWith("cd /usr/bin") await this.manualConfirmation() this.verify().hasOutput("/usr/bin") }) this.exercise("Verschieben der korrekten Datei", async function () { this.describe(`Du bist innehalb des Verzeichnisses "Contacts" in einem Unterordner mit Dateien, die als Namen mögliche Kontaktadressen tragen. Verschiebe die Datei mit der Korrekten Mail-Adresse der Gruppe Technik in das übergeordnete Verzeichnis. Lösche alle anderen Dateien aus diesem Ordner, die als Namen Mail-Adressen haben, mit denen du uns nicht erreichen kannst.`) await this.prepareWith(`mkdir -p /resources/Contacts/unsure && cd /resources/Contacts/unsure && touch technik@cl.uni-heidelberg.de it-support@cl.uni-heidelberg.de technik-gruppe@cl.uni-heidelberg.de`) await this.manualConfirmation() this.verify(`if ( ! [ -f /resources/Contacts/unsure/technik@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/unsure/it-support@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/unsure/technik-gruppe@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/technik-gruppe@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/it-support@cl.uni-heidelberg.de ] && [ -f /resources/Contacts/technik@cl.uni-heidelberg.de ] ); then echo 'yes'; else echo 'no'; fi`).hasOutput("yes") }) this.exercise("Kopieren vieler Dateien in ein neues Verzeichnis", async function () { this.describe(`Kopiere alle Dateien aus dem Verzeichnis "/resources/so_much" in einen neuen Unterordner deines Home-Verzeichnisses mit dem Namen "much".`) await this.prepareWith(`mkdir -p /resources/so_much && cd /resources/so_much && for i in "peter" "susanne" "josef" "martin" "samira" "gerhard" "manfred" "ahmad" do for j in "dateien" "dokumente" "filme" "videos" "musik" "software" do echo "Some content" > "$i-$j" done done `) await this.manualConfirmation() this.verify("diff -r /resources/so_much /root/much &> /dev/null; if [ $? == 0 ]; then echo 'yes'; else echo 'no'; fi").hasOutput("yes") }) this.exercise("Berechtigungen einer versteckten Datei herausfinden", async function () { this.describe(`Im Ordner "resources" im Wurzelverzeichnis liegt eine versteckte Datei mit dem Namen ".my-little-secret". Finde heraus, wer auf diese Datei Lesezugriff hat.`) await this.prepareWith(`if [[ ! -d /resources ]]; then mkdir /resources; fi && echo 'I like licorice' > /resources/.my-little-secret && chmod 640 /resources/.my-little-secret`) await this.manualConfirmation() this.verify().hasOutput((outputLines) => { for(const line of outputLines) { if(line.match(/.*-rw-r-----.*\.my-little-secret.*/)) { return true } } return false }) }) // To add another exercise, simply copy and paste an exercise(...) block from above and adjust it. // Order is respected, so you can e.g. order the exercises by increasing difficulty. }) Loading
static/js/exercises.mjs +112 −2 Original line number Diff line number Diff line Loading @@ -187,11 +187,48 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () { this.verify("cat botschaft").hasOutput("Der Junge sieht den Mann mit dem Fernglas") }) this.exercise("Ordner erstellen", async function () { this.describe(`Erstelle unter dem Pfad "/tmp" einen Ordner mit dem Namen "computational", in dem sich ein weiterer Ordner mit dem Namen "linguistics" befindet.`) await this.manualConfirmation() this.verify('if [ -d /tmp/computational/linguistics/ ]; then echo "yes"; else echo "no"; fi').hasOutput("yes") }) this.exercise("Löschen und Umbenennen von Ordnern und Dateien", async function () { this.describe(`Gehe in den Ordner "/resources/stuff". Benenne die Datei "a_file.png" zu "b_file.png" um, und lösche den Unterordner "to/" mit all seinen Inhalten.`) await this.prepareWith(`mkdir -p /resources/stuff/to/delete && touch /resources/stuff/a_file.png && cd /resources/stuff/to/delete && for i in 1 2 3 4 5 6 7 8 9 10; do touch "trashfile$i.txt"; done && cd /root`) await this.manualConfirmation() this.verify(`if ( ! [ -d /resources/stuff/to ] && [ -f /resources/stuff/b_file.png ] ); then echo "yes"; else echo "no"; fi`).hasOutput("yes") }) this.exercise("Textdateien lesen und schreiben", async function () { this.describe(`Lasse dir den Inhalt der Datei "reverse.txt" anzeigen und schreibe den Inhalt in umgekehrter Reihenfolge in eine neue Datei mit dem Namen "correct.txt"`) await this.prepareWith("echo 'ILOC' >> reverse.txt") await this.manualConfirmation() this.verify("cat correct.txt").hasOutput("COLI") }) this.exercise("Berechtigungen anpassen", async function () { this.describe(`Ändere die Berechtigungen der Datei "/resources/supergeheim" so, dass nur der Besitzer sie anzeigen kann (und sonst niemand).`) await this.prepareWith("mkdir /resources && echo 'Dies ist ein Geheimnis.' > /resources/supergeheim") await this.prepareWith(`mkdir /resources && echo 'Dies ist ein Geheimnis.' > /resources/supergeheim`) await this.manualConfirmation() Loading @@ -202,6 +239,79 @@ export const pooltest = test("Pooltest Sommersemester 2022", async function () { }) }) // To add another exercise, simply copy and paste an this.exercise(...) block from above and adjust it. this.exercise("Aktuelles Arbeitsverzeichnis anfangen", async function () { this.describe(`Lasse dir den absoluten Pfad ausgeben, an dem du dich gerade befindest. Verwende dazu einen Befehl, auch wenn du den Pfad auf dieser Linux-Maschine bereits in der Prompt ablesen könntest.`) await this.prepareWith("cd /usr/bin") await this.manualConfirmation() this.verify().hasOutput("/usr/bin") }) this.exercise("Verschieben der korrekten Datei", async function () { this.describe(`Du bist innehalb des Verzeichnisses "Contacts" in einem Unterordner mit Dateien, die als Namen mögliche Kontaktadressen tragen. Verschiebe die Datei mit der Korrekten Mail-Adresse der Gruppe Technik in das übergeordnete Verzeichnis. Lösche alle anderen Dateien aus diesem Ordner, die als Namen Mail-Adressen haben, mit denen du uns nicht erreichen kannst.`) await this.prepareWith(`mkdir -p /resources/Contacts/unsure && cd /resources/Contacts/unsure && touch technik@cl.uni-heidelberg.de it-support@cl.uni-heidelberg.de technik-gruppe@cl.uni-heidelberg.de`) await this.manualConfirmation() this.verify(`if ( ! [ -f /resources/Contacts/unsure/technik@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/unsure/it-support@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/unsure/technik-gruppe@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/technik-gruppe@cl.uni-heidelberg.de ] && ! [ -f /resources/Contacts/it-support@cl.uni-heidelberg.de ] && [ -f /resources/Contacts/technik@cl.uni-heidelberg.de ] ); then echo 'yes'; else echo 'no'; fi`).hasOutput("yes") }) this.exercise("Kopieren vieler Dateien in ein neues Verzeichnis", async function () { this.describe(`Kopiere alle Dateien aus dem Verzeichnis "/resources/so_much" in einen neuen Unterordner deines Home-Verzeichnisses mit dem Namen "much".`) await this.prepareWith(`mkdir -p /resources/so_much && cd /resources/so_much && for i in "peter" "susanne" "josef" "martin" "samira" "gerhard" "manfred" "ahmad" do for j in "dateien" "dokumente" "filme" "videos" "musik" "software" do echo "Some content" > "$i-$j" done done `) await this.manualConfirmation() this.verify("diff -r /resources/so_much /root/much &> /dev/null; if [ $? == 0 ]; then echo 'yes'; else echo 'no'; fi").hasOutput("yes") }) this.exercise("Berechtigungen einer versteckten Datei herausfinden", async function () { this.describe(`Im Ordner "resources" im Wurzelverzeichnis liegt eine versteckte Datei mit dem Namen ".my-little-secret". Finde heraus, wer auf diese Datei Lesezugriff hat.`) await this.prepareWith(`if [[ ! -d /resources ]]; then mkdir /resources; fi && echo 'I like licorice' > /resources/.my-little-secret && chmod 640 /resources/.my-little-secret`) await this.manualConfirmation() this.verify().hasOutput((outputLines) => { for(const line of outputLines) { if(line.match(/.*-rw-r-----.*\.my-little-secret.*/)) { return true } } return false }) }) // To add another exercise, simply copy and paste an exercise(...) block from above and adjust it. // Order is respected, so you can e.g. order the exercises by increasing difficulty. })