DedSec Project

nushell — συγκεντρωτικός οδηγός — DedSec Project

nushell — συγκεντρωτικός οδηγός Nushell Κατηγορία: Scripting. Κατάληξη: .nu . Εκτέλεση: nu lesson.nu εφόσον έχει εγκατασταθεί Nushell. Το Nushell μεταφέρει δομημένες τιμές μεταξύ εντολών…

Nushell

Κατηγορία: Scripting. Κατάληξη: .nu. Εκτέλεση: nu lesson.nu εφόσον έχει εγκατασταθεί Nushell.

Το Nushell μεταφέρει δομημένες τιμές μεταξύ εντολών. Μια λίστα ακεραίων παραμένει λίστα και δεν μετατρέπεται σε κείμενο χωρισμένο με κενά. Έτσι διατηρούνται σωστά ονόματα, διαδρομές και εγγραφές.

Παράδειγμα που αναπαράγεται

Αποθήκευσε το παρακάτω ως lesson.nu:

let values = [2 4 6]
let doubled = ($values | each {|n| $n * 2 })
print ($doubled | math sum)

Η εντολή nu lesson.nu αναμένεται να εμφανίσει 24. Η each διπλασιάζει κάθε ακέραιο και η math sum αθροίζει τη νέα λίστα. Οι παρενθέσεις δίνουν ολόκληρο το αποτέλεσμα στην print.

Έλεγχος τύπων

Στο διαδραστικό περιβάλλον δοκίμασε [2 4 6] | describe και help each. Άλλαξε τα δεδομένα σε ["2" "4"] και διερεύνησε γιατί το κείμενο δεν ισοδυναμεί με αριθμό. Απόφυγε την ανάλυση στηλών που προορίζονται για ανθρώπινη ανάγνωση όταν υπάρχουν δομημένα πεδία.

Άσκηση και οριακές περιπτώσεις

Δημιούργησε εγγραφές με name και points. Κράτησε όσες έχουν points >= 5 και μέτρησέ τες. Δοκίμασε κενή λίστα, μία εγγραφή και εγγραφή χωρίς το απαραίτητο πεδίο. Αποφάσισε πότε πρέπει να απορρίπτεται η είσοδος αντί να μπαίνει σιωπηρή προεπιλογή.

Προβλήματα ανά πλατφόρμα

Επιβεβαίωσε nu --version. Υπάρχουν εκδόσεις για Windows και Linux· στο Termux η διαθεσιμότητα εξαρτάται από πακέτα και αρχιτεκτονική. Αν λείπει η εντολή, έλεγξε εγκατάσταση και PATH. Σφάλμα σύνταξης μπορεί να οφείλεται σε εντολή POSIX shell που δεν είναι έγκυρη στο Nushell. Χρησιμοποίησε εισαγωγικά σε διαδρομές με κενά και δοκίμασε αλλαγές αρχείων σε προσωρινό φάκελο.

Εργαστήριο εξάσκησης: NuShell

Ξεκίνησε από το συνοδευτικό αρχείο

Το 00_starter.nu παίρνει τη λίστα [1 2 3], διπλασιάζει κάθε στοιχείο με each και εμφανίζει το αποτέλεσμα. Δοκίμασε πρώτα [1 2 3] | each {|n| $n * 2 } και προέβλεψε 2, 4, 6. Το αποτέλεσμα της σωλήνωσης δεν είναι κατ' ανάγκη ενιαίο κείμενο: το Nushell διατηρεί δομημένες τιμές. Χρησιμοποίησε describe για να εξετάσεις τον τύπο της τιμής.

Δημιούργησε συγκεκριμένο πίνακα

Σε προσωρινή συνεδρία γράψε:

let jobs = [[name size]; [alpha 4] [beta 9] [gamma 12]]
$jobs | where size > 5 | get name

Προβλέπονται οι τιμές beta και gamma. Το ελληνικό ερωτηματικό εδώ δεν είναι σύνταξη Nushell: στο παράδειγμα το ; χωρίζει τις επικεφαλίδες από τις γραμμές του πίνακα. Το where κρατά εγγραφές με μέγεθος μεγαλύτερο από πέντε, ενώ το get name παράγει λίστα τιμών. Σύγκρινε με select name, που διατηρεί τη μορφή πίνακα. Κατάγραψε έκδοση, τύπους και πραγματική έξοδο· η δοκιμή δεν εκτελέστηκε εδώ.

Ελεγχόμενη αποτυχία

Δοκίμασε $jobs | get nonexistent και αποθήκευσε το πραγματικό μήνυμα για ανύπαρκτο πεδίο. Ξεχώρισέ το από έγκυρο πίνακα χωρίς γραμμές μετά το φιλτράρισμα. Πρόσθεσε ύστερα μία εγγραφή με κείμενο αντί αριθμού στο size και παρατήρησε τη συμπεριφορά της σύγκρισης. Μην θεωρήσεις δεδομένο ότι όλες οι εκδόσεις μετατρέπουν αυτόματα τα κείμενα σε αριθμούς.

Έλεγχος οριακής τιμής και ταξινόμησης

Πρόσθεσε εγγραφή delta με μέγεθος ακριβώς 5. Το > 5 πρέπει να την αποκλείει, ενώ το >= 5 να την περιλαμβάνει. Στη συνέχεια ταξινόμησε κατά μέγεθος πριν πάρεις τα ονόματα και σύγκρινε τη σειρά. Αν εξετάσεις πραγματικά αρχεία με ls, χρησιμοποίησε μόνο προσωρινό φάκελο ώστε δικαιώματα και ονόματα παραγωγής να μην παραμορφώσουν το πείραμα.

Τι παραδίδεις

Κράτησε την έξοδο της αρχικής λίστας, του πίνακα, του σφάλματος πεδίου και του τεστ ορίου. Εξήγησε τη διαφορά ανάμεσα σε λίστα, πίνακα και εγγραφή. Μη σβήνεις τα σφάλματα σωληνώσεων με γενικά fallback: πρώτα πρέπει να ξέρεις σε ποια εντολή προκλήθηκαν. Τεκμηρίωση: https://www.nushell.sh/book/

NuShell — Διαδρομή ουσιαστικής εξάσκησης

Θεμελιώδης άσκηση

Δημιούργησε Nushell table από test CSV και εξέτασε typed columns αντί να μετατρέψεις όλες τις τιμές σε strings.

Άσκηση επίλυσης προβλήματος

Με where/select/group-by σύνοψε rows και έλεγξε output schema. Σύγκρινε null με κενά strings.

Ανεξάρτητο έργο

Χτίσε read-only inventory pipeline σε προσωρινό directory και κάνε export JSON. Ξεχώρισε pipeline errors από άδειο table και μην αντιγράφεις Bash syntax.