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

Commandes Linux et compétences Shell

Scripts Bash : des « travaux sur ma boîte » à la production

Bash gagne sa place lorsqu'une tâche est collée : orchestrer des commandes, gérer un texte simple et rester entièrement sur la boîte. Sa réputation dans l'industrie vient de l'atterrissage, pas de l'idée : des pipelines non testés livrés dans cron sur un serveur où une variable n'était pas définie ou un nom de fichier contenait un espace. La discipline est mécanique et peu coûteuse, et elle comporte quatre parties : le mode strict, les devis, le shellcheck et la journalisation de la manière dont les opérations la liront plus tard.

Points clés

  • Chaque script sérieux s'ouvre avec set -euo pipefail : les variables non définies échouent, les échecs de commandes arrêtent le script, le pipeline fait surface ; sans cela, les erreurs passent silencieusement jusqu'à ce qu'elles atteignent la production.
  • Citation des variables et substitutions de commandes : "$var" et "$(cmd)" ; le fractionnement des mots sur les espaces est le classique de tous les temps, et le violon IFS recommandé par certains sites est un bug que vous choisissez de mémoriser.
  • L'expansion des accolades se produit avant les variables : rm -rf "${CLEANUP:?}"/{a,b} avec CLEANUP non défini se développe différemment que prévu et supprime les éléments que vous vouliez conserver ; Les contrôles ${VAR :?} sont l'idiome rm-safety qui mérite d'être appris une fois.
  • shellcheck gagne sa place à chaque changement : il détecte les globs non cités, le code inaccessible et les modèles 'for f in $(ls)' qui mangent les noms de fichiers avec des espaces ; exécutez-le dans CI et les bugs cessent d'atteindre cron.
  • Le travail temporaire et le nettoyage sont associés : TMP=$(mktemp -d), trap 'rm -rf "$TMP"' EXIT, et aucun répertoire de travail orphelin ni aucun "si erreur, alors supprimez" sur chaque branche.
  • Lire les boucles en toute sécurité : while IFS= read -r -d '' f gère les noms de fichiers avec des nouvelles lignes et des espaces via find -print0; 'for f in $(ls)' est le bug shellcheck que les anciens scripts portent toujours partout.
  • Les codes de sortie et les journaux parlent aux opérations : faites écho aux échecs à stderr (>&2) avec un nom de scène, quittez une valeur différente de zéro en cas d'échec réel et laissez le courrier ou le journal de cron vous montrer la ligne dont vous avez réellement besoin à 3 heures du matin.
  • Escalader tôt : analyse JSON, plus de trois niveaux d'imbrication, appels HTTP ou toute logique avec état appartient à Python ou awk ; bash s'est transformé en un langage à usage général et c'est là que sa réputation a été gagnée.

Note de terrain

Notre cicatrice d'expansion d'accolade : rm -rf "${CLEANUP}"/{a,b} avec CLEANUP non défini s'est développée exactement de la manière dont le shell, et non l'intention, le souhaitait. Chaque chemin comme celui-ci porte désormais la garde ${VAR :?}, et personne n'a payé cette facture deux fois.

Questions fréquentes

#!/bin/bash ou #!/usr/bin/env bash ?

env gagne dans les conteneurs et les installations macOS là où bash réside ailleurs ; le shebang compte moins que set -euo pipefail étant réellement présent et shellcheck transmettant chaque changement.

Mon script fonctionne manuellement mais échoue dans cron. Pourquoi?

Cron s'exécute avec un environnement nu : PATH est court, il n'y a pas de profil de connexion et les chemins relatifs pointent vers la mauvaise maison. Utilisez des chemins absolus, définissez PATH explicitement et conservez bash -x replay pour le débogage.

Bash ou Python pour les tâches serveur ?

Bash pour les pipelines qui orchestrent principalement les outils système existants et restent petits ; Python pour les données structurées, les API et la gestion des erreurs qui doivent survivre sur appel. Forcer bash à jouer à Python est la façon dont les incidents obtiennent des noms.

Comment programmer des suppressions en toute sécurité ?

Citez chaque variable, ciblez uniquement les chemins produits par mktemp ou explicitement configurés, exécutez avec un mode d'exécution à sec qui imprime ce qu'il supprimerait et laissez un ${VAR:?} garder son veto désinitialiser les variables avant que rm ne les voie.

Comment Kinetikatech vous aide avec commandes linux et compétences shell

Voici l'essentiel : Les commandes et habitudes de script qui décident si un administrateur exploite un serveur ou le combat : rechercher, transformer, transférer et superviser le texte et les processus avec les outils présents dans chaque installation de base. Confiez-le à notre service Sécurité des serveurs Linux et Gestion de serveurs et c'est couvert : évalué correctement, mis en œuvre proprement, supervisé jour et nuit.

Parler à un ingénieur

Problème de serveur ? Site piraté ? Site lent ?

Incidents critiques pris en charge en 30 minutes — 24h/24, 7j/7.

Demander une assistance urgente support@kinetikatech.com