NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
EL

Εντολές Linux

Bash Scripting: Από το 'works on my box' έως την παραγωγή

Το Bash κερδίζει τη θέση του όταν μια εργασία είναι κολλημένη: ενορχηστρώστε εντολές, τσακώστε απλό κείμενο και μείνετε εξ ολοκλήρου στο κουτί. Η φήμη του κλάδου προέρχεται από την προσγείωση, όχι από την ιδέα: οι μη δοκιμασμένες αγωγοί αποστέλλονται στο cron σε έναν διακομιστή όπου μια μεταβλητή δεν είχε οριστεί ή ένα όνομα αρχείου είχε κενό. Η πειθαρχία είναι μηχανική και φθηνή και έχει τέσσερα μέρη: αυστηρή λειτουργία, αναφορά, έλεγχος κελύφους και καταγραφή του τρόπου με τον οποίο οι ops θα το διαβάσουν αργότερα.

Βασικά σημεία

  1. Κάθε σοβαρό σενάριο ανοίγει με set -euo pipefail: αποτυγχάνουν οι μη καθορισμένες μεταβλητές, αποτυχίες εντολών σταματούν το σενάριο, ο σωλήνας βρίσκεται στην επιφάνεια. χωρίς αυτό, τα σφάλματα περνούν σιωπηλά μέχρι να φτάσουν στην παραγωγή.
  2. Παράθεση μεταβλητών και αντικαταστάσεις εντολών: "$var" και "$(cmd)"; Ο διαχωρισμός λέξεων στα κενά είναι το κλασικό όλων των εποχών και το IFS που προτείνουν ορισμένοι ιστότοποι είναι ένα σφάλμα που επιλέγετε να θυμάστε.
  3. Η επέκταση του βραχίονα πραγματοποιείται πριν από τις μεταβλητές: rm -rf "${CLEANUP:?}"/{a,b} με μη καθορισμένο CLEANUP επεκτείνεται διαφορετικά από το προβλεπόμενο και αφαιρεί πράγματα που θέλατε να διατηρήσετε. Οι επιταγές ${VAR:?} είναι το ιδίωμα ασφάλειας rm που αξίζει να μάθετε μια φορά.
  4. Το shellcheck κερδίζει τη θέση του σε κάθε αλλαγή: πιάνει globs χωρίς εισαγωγικά, μη προσβάσιμο κώδικα και μοτίβα "για f σε $(ls)" που τρώνε ονόματα αρχείων με κενά. τρέξτε το σε CI και τα σφάλματα σταματούν να φτάνουν στο cron.
  5. Οι θερμοκρασιακές εργασίες και ο καθαρισμός συνδυάζονται: TMP=$(mktemp -d), παγίδευση 'rm -rf "$TMP"' EXIT, και καμία ορφανή γρατσουνιά συν το "if error then remove" σε κάθε κλάδο.
  6. Οι βρόχοι ανάγνωσης με τον ασφαλή τρόπο: ενώ το IFS= read -r -d '' f χειρίζεται ονόματα αρχείων με νέες γραμμές και κενά μέσω find -print0; Το "για f σε $(ls)" είναι οι σημαίες ελέγχου σφαλμάτων και τα παλιά σενάρια παντού εξακολουθούν να φέρουν.
  7. Οι κωδικοί εξόδου και τα αρχεία καταγραφής μιλούν για τα ops: αποτυχίες ηχώ στο stderr (>&2) με όνομα σκηνής, έξοδος μη μηδενικού σε πραγματική αποτυχία και αφήστε το cron's mail ή το journald να σας δείξει τη μία γραμμή που χρειάζεστε πραγματικά στις 3 π.μ.
  8. Κλιμακώστε νωρίς: Η ανάλυση 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 λεπτά.

Μιλήστε με έναν μηχανικό

Πρόβλημα διακομιστή; Εισβολή στον ιστότοπο; Αργός ιστότοπος;

Απάντηση σε κρίσιμα ζητήματα εντός 30 λεπτών — 24 ώρες την ημέρα, 7 ημέρες την εβδομάδα.

Ζήτηστε επείγουσα υποστήριξη support@kinetikatech.com