Έχεις χρησιμοποιήσει την γραμμή εντολών; Linux; Γνωρίζεις πως να κάνεις SSH σε απομακρυσμένους servers και να λύνεις προβλήματα με εντολές κονσόλας; Αν όχι, καιρός να μάθουμε! Αν ναι, τότε αυτή η άσκηση θα σου είναι παιχνιδάκι.
Σε αυτήν την άσκηση θα μπούμε με ssh σε έναν απομακρυσμένο server που βρίσκεται στην IP
διεύθυνση 35.169.96.19 μέσω τερματικού και θα ανακτήσουμε συγκεκριμένες πληροφορίες.
Υπάρχουν διαφορετικοί χρήστες (byte0, byte1, …) που αντιστοιχούν σε διαφορετικά
προβλήματα/υποερωτήματα. Για όλους τους χρήστες ο κωδικός για να μπείτε είναι
bits&bytes. Σε κάθε ένα υποερώτημα θα αναζητούμε ένα string που μπορεί να είναι μια
μόνο λέξη ή πολλές λέξεις διαχωρισμένες με τον χαρακτήρα underscore _, για παράδειγμα:
something_like_that.
Ο χρήστης byte0 είναι ελαφρώς μανιακός με την οργανωτικότητα. Του αρέσει να οργανώνει όλα του τα αρχεία σε φακέλους, υποφακέλους κ.ο.κ.. Με αυτά και με αυτά όμως, δεν μπορεί να βρει το αρχείο του, μπορείτε να τον βοηθήσετε; Για να μπείτε στον server τρέξτε:
ssh byte0@35.169.96.19
και βάλτε τον κωδικό που γράψαμε παραπάνω. Η εντολή cd μπορεί να σας φανεί χρήσιμη όπως
και η εντολή cat (ίσως και το tab / autocomplete :)). Όταν διαβάσετε τα περιεχόμενα του
αρχείου, σημειώστε το string που βρήκατε μέσα στο αρχείο ώστε να το προσθέσετε στο
solution.txt (δες παρακάτω στις τεχνικές προδιαγραφές).
Ο χρήστης byte1 έφτιαξε ένα καινούριο πρόγραμμα με άγνωστη σε μας λειτουργία ονόματι
supercalifragilisticexpialidocious. Πως μπορείτε να βρείτε τι κάνει;
Ο χρήστης byte2 έχει δύο βασικά χαρακτηριστικά: (1) είναι μεγάλος θαυμαστής του Shakespeare και (2) είναι κάπως μυστικοπαθής. Αποφάσισε να συνδυάσει τα δύο και καταχώνιασε ένα μυστικό string μέσα στην συλλογή του με τα άπαντα του Shakespeare. Μπορείτε να τον βοηθήσετε να το βρεί;
Το μόνο που γνωρίζουμε είναι πως το κρυφό κείμενο περιέχει το string “will find”. Η
εντολή grep μπορεί να σας φανεί χρήσιμη.
Ο χρήστης byte3 αποφάσισε να αλλάξει κάτι στα άπαντα του Shakespeare ελπίζοντας πως η αλλαγή θα περάσει απαρατήρητη. Ελέγξαμε τον αριθμό των λέξεων και χαρακτήρων του κάθε αρχείου:
byte3@ip-172-31-37-131:~$ wc -w *.txt
901325 shakespeare.modified.txt
901325 shakespeare.txt
1802650 total
byte3@ip-172-31-37-131:~$ wc -c *.txt
5458203 shakespeare.modified.txt
5458199 shakespeare.txt
και παρατηρήσαμε πως ενώ ο αριθμός λέξεων παρέμεινε ίδιος (901.325), ο αριθμός των
χαρακτήρων άλλαξε. Επομένως, υποψιαζόμαστε πως άλλαξε μια λέξη του αυθεντικού με μια
καινούρια. Βρείτε την καινούρια λέξη—η εντολή diff ίσως σας φανεί χρήσιμη.
Ο χρήστης byte4 είναι συγγενής του byte2 παραπάνω και ελαφρώς πιο μυστικοπαθής.
Προκειμένου να “ανεβάσει” το παιχνίδι του αποφάσισε να κρύψει τα δεδομένα του σε ένα
δαιδαλώδες κατασκεύασμα από φακέλους. Μπορείτε και πάλι να τον βοηθήσετε να βρει το
μυστικό που έχει κρύψει μέσα σε ένα από όλα τα αρχεία των υποφακέλων; Το μόνο που
γνωρίζουμε είναι πως έχει κρύψει το μυστικό του σε ένα αρχείο που λέγεται cup.txt. Η
εντολή find μπορεί να σας φανεί χρήσιμη.
Ο byte5 έγραψε ένα προγραμματάκι σε C ονόματι byte5.c. Μεταγλωττίστε το και τρέξτε το
προκειμένου να πάρετε τον κωδικό σας! Προσοχή: ο default φάκελος του byte5 δεν σας
επιτρέπει να χρησιμοποιήσετε αρχεία, ίσως χρειαστεί να φτιάξετε έναν καινούριο υποφάκελο
μέσα στον φάκελο /tmp προκειμένου να τοποθετήσετε το εκτελέσιμό σας. Οι εντολές
mkdir, cp, gcc μπορεί να σας φανούν χρήσιμες.
Κάποιες φορές προκειμένου να μικρύνουμε τον χώρο που πιάνει ένα αρχείο το συμπιέζουμε. Ο
χρήστης byte6 έχει ένα αρχείο byte6.zip το οποίο χρειάζεται αποσυμπίεση. Ανοίξτε το για
να αποκτήσετε πρόσβαση στα περιεχόμενά του. Το πρόγραμμα unzip μπορεί να σας βοηθήσει.
Υπάρχουν διάφοροι τρόποι και εργαλεία για να συμπιέσεις αρχεία και τα περιεχόμενα τους.
Ο χρήστης byte7 χρησιμοποίησε ένα πρόγραμμα που λέγεται tar - μπορείτε να
χρησιμοποιήσετε το ίδιο προκειμένου να βρείτε τα περιεχόμενα του byte7.tar.gz;
Ο χρήστης byte8 μας είπε πως ο κωδικός που ψάχνουμε είναι μέσα στο αρχείο
carriage_return.txt. Όμως δοκιμάσαμε να το τυπώσουμε:
byte8@ip-172-31-37-131:~$ ls
carriage_return.txt
byte8@ip-172-31-37-131:~$ cat carriage_return.txt
There is absolutely nothing to see here. Move along.
και δεν είδαμε κάτι. Μπορείς να μας βοηθήσεις; Πιστεύουμε πως οι εντολές xxd, pico ή
vim μπορεί να φανούν χρήσιμες.
Ο χρήστης byte9 ανέφερε πως ο κωδικός του είναι μέσα στον φάκελο /home/byte9 - μπορείς
να μας βοηθήσεις να τον ανακτήσουμε; Ίσως σε βοηθήσει να θυμηθείς τι είναι το filepath
(μονοπάτι) ενός αρχείου.
Ο χρήστης byte10 έχει ένα αρχείο γεμάτο με ονόματα και θέλει να τα ταξινομήσει αλφαβητικά
και να βρει το 42ο όνομα στην σειρά. Γνωρίζει ότι το 1ο όνομα είναι το Aarika - μπορείτε
να τον βοηθήσετε να βρει το 42ο; Οι εντολές sort και head μπορούν να συνδυαστούν και
να βοηθήσουν.
Ο χρήστης byte11 μόλις απέκτησε ένα παιδάκι και προκειμένου να μην το κοροϊδεύουν στο
σχολείο αποφάσισε να του δώσει το πιο συχνό όνομα εκείνης της χρονιάς. Στο αρχείο
births.txt περιέχονται τα ονόματα όλων των φετινών γεννήσεων. Μπορείτε να τον βοηθήσετε
να βρει το πιο συχνό όνομα; Οι εντολές sort και uniq ίσως σας φανούν χρήσιμες.
Ο byte12 είναι κάπως αφηρημένος. Μόλις έφτιαξε το πρόγραμμα tuxsay αλλά δεν θυμάται που
το τοποθέτησε και δεν πρόλαβε να φτιάξει ένα manual page. Παρόλα αυτά, μπορεί να το τρέξει
κανονικά. Μπορείτε να βρείτε το basename του φακέλου μέσα στον οποίο βρίσκεται το
πρόγραμμα tuxsay;
Ο byte13 μόλις πήρε πρόσβαση σε ένα git repository (αποθετήριο) και θέλει να δει τα commit messages (μηνύματα για προηγούμενες αλλαγές) που έκαναν οι χρήστες που συνεισέφεραν στο repository. Μπορείτε να διαβάσετε αυτά τα μηνύματα;
Ο byte14 ξεκίνησε να γράφει μια νουβέλα με την βοήθεια του ΑΙ. Μετά από αρκετές αλλαγές διαπίστωσε ότι το ΑΙ είχε προσθέσει (κατά λάθος;) έναν από τους κωδικούς του μέσα στο κείμενο. Ευτυχώς το είδε, το αφαίρεσε, έκανε commit τις αλλαγές και πλέον ξέρει δεν είναι ορατό σε άλλους χρήστες. Έχει δίκιο ο byte14;
Ο byte15 είναι χρήστης του vault, ενός υπερασφαλούς προγράμματος που εμφανίζει τα περιεχόμενα του λογαριασμού σου, μόνο εφόσον γνωρίζεις το μυστικό PIN. Δυστυχώς, ο byte15 ξέχασε το PIN του! Μπορείτε να τον βοηθήσετε να ανακτήσει τα περιεχόμενα του λογαριασμού του;
Η υποβολή σου πρέπει να έχει τα ακόλουθα χαρακτηριστικά:
progintro/hw0-<YourUsername>cmdline/README.mdcmdline/solution.txtsolution.txt πρέπει να γίνει με
διαφορετικό git commit. Κοινώς, θέλουμε να δούμε τουλάχιστον *15* διαφορετικά git
commits. Η κάθε γραμμή πρέπει να προστεθεί όταν λύσετε το αντίστοιχο πρόβλημα, όχι όλες
μαζί στο τέλος.Το περιεχόμενο του solution.txt πρέπει να έχει την ακόλουθη μορφή:
$ cat solution.txt
byte0: ...
byte1: ...
byte2: ...
...
Όπου οι τελείες (…) περιγράφουν το μέρος της λύσης που έχει παραληφθεί. Στο αρχείο
README.md πρέπει να γράψετε μια σύντομη περιγραφή για τον τρόπο που λύσατε το κάθε
πρόβλημα.
Αν σου άρεσε αυτή η άσκηση ή έχεις κολλήσει με ένα από τα παραπάνω και δεν ξέρεις πως να συνεχίσεις, υπάρχουν και άλλα site online στα οποία μπορείς να εξασκηθείς όπως για παράδειγμα το overthewire τα οποία μπορούν να σου δώσουν ιδέες. Σημείωση: μέχρι το επίπεδο 11 τα προβλήματα σε αυτό το site είναι εντός θέματος για το μάθημα, από εκεί και πέρα γίνονται πιο δύσκολα / απαιτούν γνώσεις που θα αποκτήσουμε σε μεγαλύτερα έτη.
byte0–byte11) στον server 52.86.144.139, 12 commits· το byte10 ζητά το 10ο όνομα αντί για το 42ο.byte12–byte15 (which/PATH, git log, git log -p, bonus vault) και τουλάχιστον 15 commits.Κάθε επίπεδο δοκιμάζει μία ή δύο εντολές, και το man <εντολή> (ή το --help) είναι ο
πρώτος σου σύμμαχος, ακόμα και για άγνωστα προγράμματα. Για τα επίπεδα με πολλά δεδομένα
συνδύασε εντολές με σωληνώσεις (|), π.χ. ταξινόμηση πριν από μέτρηση διπλοτύπων. Τα
ονόματα αρχείων που αρχίζουν με παύλα ή έχουν κενά, τα κρυφά αρχεία (τελεία στην αρχή), οι
χαρακτήρες ελέγχου μέσα σε ένα αρχείο και το ιστορικό ενός git repository είναι οι
συνηθισμένες «παγίδες» που αξίζει να έχεις στο μυαλό σου.
Αριθμός στον οδηγό: Α1.12
(στο κεφάλαιο) ·
Μόνιμο αναγνωριστικό: hw-2025-hw0-cmdline ·
Σύνδεσμος: https://progintro.github.io/study/questions/homework/hw-2025-hw0-cmdline.html ·
Markdown (GitHub)