Εντολές Linux
Bash Scripting: Από το 'works on my box' έως την παραγωγή
Το Bash κερδίζει τη θέση του όταν μια εργασία είναι κολλημένη: ενορχηστρώστε εντολές, τσακώστε απλό κείμενο και μείνετε εξ ολοκλήρου στο κουτί. Η φήμη του κλάδου προέρχεται από την προσγείωση, όχι από την ιδέα: οι μη δοκιμασμένες αγωγοί αποστέλλονται στο cron σε έναν διακομιστή όπου μια μεταβλητή δεν είχε οριστεί ή ένα όνομα αρχείου είχε κενό. Η πειθαρχία είναι μηχανική και φθηνή και έχει τέσσερα μέρη: αυστηρή λειτουργία, αναφορά, έλεγχος κελύφους και καταγραφή του τρόπου με τον οποίο οι ops θα το διαβάσουν αργότερα.
Βασικά σημεία
- Κάθε σοβαρό σενάριο ανοίγει με set -euo pipefail: αποτυγχάνουν οι μη καθορισμένες μεταβλητές, αποτυχίες εντολών σταματούν το σενάριο, ο σωλήνας βρίσκεται στην επιφάνεια. χωρίς αυτό, τα σφάλματα περνούν σιωπηλά μέχρι να φτάσουν στην παραγωγή.
- Παράθεση μεταβλητών και αντικαταστάσεις εντολών: "$var" και "$(cmd)"; Ο διαχωρισμός λέξεων στα κενά είναι το κλασικό όλων των εποχών και το IFS που προτείνουν ορισμένοι ιστότοποι είναι ένα σφάλμα που επιλέγετε να θυμάστε.
- Η επέκταση του βραχίονα πραγματοποιείται πριν από τις μεταβλητές: rm -rf "${CLEANUP:?}"/{a,b} με μη καθορισμένο CLEANUP επεκτείνεται διαφορετικά από το προβλεπόμενο και αφαιρεί πράγματα που θέλατε να διατηρήσετε. Οι επιταγές ${VAR:?} είναι το ιδίωμα ασφάλειας rm που αξίζει να μάθετε μια φορά.
- Το shellcheck κερδίζει τη θέση του σε κάθε αλλαγή: πιάνει globs χωρίς εισαγωγικά, μη προσβάσιμο κώδικα και μοτίβα "για f σε $(ls)" που τρώνε ονόματα αρχείων με κενά. τρέξτε το σε CI και τα σφάλματα σταματούν να φτάνουν στο cron.
- Οι θερμοκρασιακές εργασίες και ο καθαρισμός συνδυάζονται: TMP=$(mktemp -d), παγίδευση 'rm -rf "$TMP"' EXIT, και καμία ορφανή γρατσουνιά συν το "if error then remove" σε κάθε κλάδο.
- Οι βρόχοι ανάγνωσης με τον ασφαλή τρόπο: ενώ το IFS= read -r -d '' f χειρίζεται ονόματα αρχείων με νέες γραμμές και κενά μέσω find -print0; Το "για f σε $(ls)" είναι οι σημαίες ελέγχου σφαλμάτων και τα παλιά σενάρια παντού εξακολουθούν να φέρουν.
- Οι κωδικοί εξόδου και τα αρχεία καταγραφής μιλούν για τα ops: αποτυχίες ηχώ στο stderr (>&2) με όνομα σκηνής, έξοδος μη μηδενικού σε πραγματική αποτυχία και αφήστε το cron's mail ή το journald να σας δείξει τη μία γραμμή που χρειάζεστε πραγματικά στις 3 π.μ.
- Κλιμακώστε νωρίς: Η ανάλυση JSON, τρία επίπεδα ένθεσης, κλήσεις HTTP ή οποιαδήποτε λογική κατάστασης ανήκει στην Python ή στο awk. Το bash λυγισμένο σε μια γλώσσα γενικής χρήσης είναι όπου κέρδισε τη φήμη του.
Σημείωση από το πεδίο
Η ουλή επέκτασης του νάρθηκα: rm -rf "${CLEANUP}"/{a,b} με το CLEANUP unset επεκτάθηκε ακριβώς όπως ήθελε το κέλυφος και όχι η πρόθεση. Κάθε μονοπάτι σαν αυτό φέρει τώρα το ${VAR:?} guard και κανείς δεν έχει πληρώσει αυτόν τον λογαριασμό δύο φορές.
Συχνές ερωτήσεις
#!/bin/bash ή #!/usr/bin/env bash;
Το env κερδίζει σε κοντέινερ και εγκαταστάσεις macOS όπου το bash ζει αλλού. Το shebang έχει μικρότερη σημασία από το να είναι πραγματικά παρόν το set -euo pipefail και να ελέγχει το κέλυφος μεταβιβάζοντας κάθε αλλαγή.
Το σενάριό μου λειτουργεί χειροκίνητα αλλά αποτυγχάνει στο cron. Γιατί;
Το Cron τρέχει με γυμνό περιβάλλον: το PATH είναι σύντομο, δεν υπάρχει προφίλ σύνδεσης και οι σχετικές διαδρομές δείχνουν σε λάθος σπίτι. Χρησιμοποιήστε απόλυτες διαδρομές, ορίστε ρητά το PATH και διατηρήστε την επανάληψη bash -x για εντοπισμό σφαλμάτων.
Bash ή Python για εργασίες διακομιστή;
Bash για αγωγούς που ενορχηστρώνουν κυρίως υπάρχοντα εργαλεία συστήματος και παραμένουν μικροί. Python για δομημένα δεδομένα, API και χειρισμό σφαλμάτων που πρέπει να επιβιώσουν κατά την κλήση. Ο εξαναγκασμός του bash να παίξει Python είναι ο τρόπος με τον οποίο τα περιστατικά παίρνουν ονόματα.
Πώς μπορώ να κάνω διαγραφές σεναρίων με ασφάλεια;
Αναφέρετε κάθε μεταβλητή, στοχεύστε μόνο μονοπάτια που παράγονται από mktemp ή έχουν ρυθμιστεί ρητά, εκτελέστε τη λειτουργία ξηρής εκτέλεσης που εκτυπώνει ό,τι θα αφαιρούσε και αφήστε ένα ${VAR:?} να ασκήσει βέτο κατά των μεταβλητών πριν τις δει η rm.
Πώς βοηθάει η Kinetikatech στα εντολές linux
Αυτό κάνουμε κάθε μέρα: Οι εντολές και οι συνήθειες δέσμης ενεργειών που αποφασίζουν εάν ένας διαχειριστής χειρίζεται έναν διακομιστή ή τον καταπολεμά: αναζήτηση, μετατροπή, μεταφορά και επίβλεψη κειμένου και διεργασιών με τα εργαλεία που υπάρχουν σε κάθε βασική εγκατάσταση. Η υπηρεσία μας Ασφάλεια διακομιστών Linux and Διαχείριση διακομιστών καλύπτει το θέμα από την αρχή ως το τέλος: εκτίμηση, εφαρμογή, παρακολούθηση 24/7 και επείγουσα αντιμετώπιση μέσα σε 30 λεπτά.