Comprendre et apprendre les scripts de base et le dépannage du système de fichiers Linux - Partie 10

Comprendre et apprendre les scripts de base et le dépannage du système de fichiers Linux - Partie 10

La Fondation Linux a lancé le LFC certification (Sysadmin certifié de la Fondation Linux), une toute nouvelle initiative dont le but est de permettre aux individus partout (et n'importe où) d'être certifiés dans le support opérationnel intermédiaire de base à des systèmes Linux, qui comprend la prise en charge des systèmes et services de course, ainsi que de la surveillance et de l'analyse globales, ainsi que la prise de décision intelligente Quand il s'agit de soulever des problèmes aux équipes de soutien supérieures.

Sysadmin certifié Linux Foundation - Partie 10

Découvrez la vidéo suivante qui vous guide une introduction au programme de certification de la Fondation Linux.

Ceci est le dernier article (partie 10) de la longue série à 10 tutoriels actuelle. Dans cet article, nous nous concentrerons sur les scripts de base et le dépannage des systèmes de fichiers Linux. Les deux sujets sont requis pour l'examen de certification LFCS.

Comprendre les terminaux et les obus

Clarifions d'abord quelques concepts.

  1. Un shell est un programme qui prend des commandes et les donne au système d'exploitation à exécuter.
  2. Un terminal est un programme qui nous permet aux utilisateurs finaux d'interagir avec le shell. Un exemple de terminal est Gnome Terminal, comme le montre l'image ci-dessous.
Gnome terminal

Lorsque nous démarrons un shell pour la première fois, il présente une invite de commande (également connue sous le nom de ligne de commande), qui nous dit que le shell est prêt à commencer à accepter les commandes à partir de son périphérique d'entrée standard, qui est généralement le clavier.

Vous voudrez peut-être vous référer à un autre article de cette série (utilisez la commande pour créer, modifier et manipuler des fichiers - partie 1) pour revoir quelques commandes utiles.

Linux offre une gamme d'options pour les coquilles, ce qui suit étant la plus courante:

coquille

Frapper représente Bourne à nouveau Shell et est la coque par défaut du projet GNU. Il intègre des fonctionnalités utiles de la coque Korn (KSH) et C Shell (CSH), offrant plusieurs améliorations en même temps. Il s'agit du shell par défaut utilisé par les distributions couvertes dans la certification LFCS, et c'est le shell que nous utiliserons dans ce tutoriel.

coquille de shot

Le Obus de Bourne est le shell le plus ancien et est donc le coquille par défaut de nombreux systèmes d'exploitation de type Unix depuis de nombreuses années.

coquille de ksh

Le Coquille de Korn est une coquille Unix qui a été développée par David Korn à Bell Labs au début des années 1980. Il est compatible en arrière avec la coque Bourne et comprend de nombreuses fonctionnalités de la coque C.

Un script shell n'est rien de plus et rien de moins qu'un fichier texte transformé en un programme exécutable qui combine les commandes qui sont exécutées par le shell les unes après les autres.

Script de base

Comme mentionné précédemment, un script shell est né en tant que fichier texte brut. Ainsi, peut être créé et modifié à l'aide de notre éditeur de texte préféré. Vous voudrez peut-être envisager d'utiliser VI / M (reportez-vous à l'utilisation de VI Editor - partie 2 de cette série), qui présente la syntaxe qui met en évidence votre commodité.

Tapez la commande suivante pour créer un fichier nommé myscript.SH et appuyez sur Entrée.

# vim myscript.shot 

La toute première ligne d'un script de shell doit être la suivante (également connue sous le nom de case).

#!/ bac / bash 

Il "raconte”Le système d'exploitation le nom de l'interprète qui doit être utilisé pour exécuter le texte qui suit.

Maintenant, il est temps d'ajouter nos commandes. Nous pouvons clarifier le but de chaque commande ou de l'ensemble du script, en ajoutant également des commentaires. Notez que la coquille ignore ces lignes commençant par un signe de livre # (commentaires explicatifs).

#!/ bin / bash echo Ceci est la partie 10 de la série de 10 articles sur l'écho de la certification LFCS aujourd'hui est $ (date +% y-% m-% d) 

Une fois le script écrit et enregistré, nous devons le rendre exécutable.

# Chmod 755 MyScript.shot 

Avant d'exécuter notre script, nous devons dire quelques mots sur le $ Chemin variable d'environnement. Si nous courons,

Echo $ Path 

De la ligne de commande, nous verrons le contenu de $ Chemin: Une liste de répertoires séparés par le côlon qui sont recherchés lorsque nous entrons le nom d'un programme exécutable. Il s'appelle une variable d'environnement car elle fait partie de l'environnement de la coquille - un ensemble d'informations qui devient disponible pour la coquille et ses processus enfants lorsque le shell est démarré.

Lorsque nous tapons une commande et appuyons sur Entrée, le shell recherche dans tous les répertoires répertoriés dans le $ Chemin variable et exécute la première instance trouvée. Voyons un exemple,

Variables d'environnement

S'il y a deux fichiers exécutables avec le même nom, un en / usr / local / bac et un autre dans / usr / bin, L'un du premier répertoire sera exécuté en premier, tandis que l'autre sera ignoré.

Si nous n'avons pas enregistré notre script dans l'un des répertoires répertoriés dans le $ Chemin variable, nous devons ajouter ./ / au nom de fichier afin de l'exécuter. Sinon, nous pouvons l'exécuter comme nous le ferions avec une commande régulière.

# pwd # ./ myscript.sh # cp myscript.sh… / bin # cd… / bin # pwd # myscript.shot 
Exécuter le script

Conditionnels

Chaque fois que vous avez besoin de spécifier différents cours d'action à prendre dans un script de shell, à cause du succès ou de l'échec d'une commande, vous utiliserez le si Construire pour définir de telles conditions. Sa syntaxe de base est:

si condition; alors commandes; sinon les autres communs fi 

CONDITION Peut être l'une des conditions suivantes (seules les conditions les plus fréquentes sont citées ici) et évalue à vrai lorsque:

  1. [ -un fichier ] → Le fichier existe.
  2. [-d fichier] → Le fichier existe et est un répertoire.
  3. [-f fichier] → Le fichier existe et est un fichier régulier.
  4. [-U Fichier] → Le fichier existe et son bit SUID (Set User ID) est défini.
  5. [-g Fichier] → Le fichier existe et son bit SGID est défini.
  6. [-K Fichier] → Le fichier existe et son bit collant est défini.
  7. [-R Fichier] → Le fichier existe et est lisible.
  8. [-s fichier]→ Le fichier existe et n'est pas vide.
  9. [-W Fichier]→ Le fichier existe et est écrit.
  10. [-x fichier] est vrai si le fichier existe et est exécutable.
  11. [String1 = String2] → Les cordes sont égales.
  12. [String1 != string2] → Les cordes ne sont pas égales.

[INT1 OP INT2] devrait faire partie de la liste précédente, tandis que les éléments qui suivent (par exemple, -EQ -> est vrai si int1 est égal à int2.) devrait être un «enfants" liste de [ int1 faire un coup de pouce int2 ] où OP est l'un des opérateurs de comparaison suivants.

  1. -EQ -> est vrai si Int1 est égal à Int2.
  2. -NE -> vrai si Int1 n'est pas égal à Int2.
  3. -LT -> vrai si Int1 est inférieur à Int2.
  4. -le -> vrai si Int1 est inférieur ou égal à INT2.
  5. -gt -> vrai si Int1 est supérieur à Int2.
  6. -ge -> vrai si Int1 est supérieur ou égal à Int2.

Pour boucles

Cette boucle permet d'exécuter une ou plusieurs commandes pour chaque valeur dans une liste de valeurs. Sa syntaxe de base est:

pour l'élément en séquence; faire des commandes; fait 

article est une variable générique qui représente chaque valeur SÉQUENCE pendant chaque itération.

Pendant les boucles

Cette boucle permet d'exécuter une série de commandes répétitives tant que la commande de contrôle s'exécute avec un statut de sortie égal à zéro (avec succès). Sa syntaxe de base est:

tandis que Evaluation_Command; faire execure_commands; fait 

Évaluation_command peut être n'importe quelle commande (s) pouvant sortir avec un succès (0) ou une défaillance (autre que 0) Le statut et l'exécution_commands peuvent être n'importe quel programme, script ou construction de shell, y compris d'autres boucles imbriquées.

Mettre tous ensemble

Nous démontrerons l'utilisation de la construction if et de la boucle pour l'exemple suivant.

Déterminer si un service s'exécute dans une distribution basée sur Systemd

Créons un fichier avec une liste de services que nous voulons surveiller en un coup d'œil.

# Cat MyServices.txt sshd mariaDb httpd crond fierwalld 
Script pour surveiller les services Linux

Notre script shell devrait ressembler.

#!/ bin / bash # Ce script itère sur une liste de services et # est utilisé pour déterminer s'ils s'exécutent ou non. pour le service dans $ (Cat MyServices.SMS); Do SystemCTL Status $ Service | grep --quiet "courir" si [$? -Eq 0]; alors le service echo $ "est [actif]" else echo $ service "est [inactif ou non installé]" fid 
Script de surveillance du service Linux
Expliquons comment fonctionne le script.

1). La boucle pour lit le mes services.SMS Déposer un élément de liste à la fois. Cet élément unique est indiqué par la variable générique nommée service. La liste est remplie de sortie de,

# Cat MyServices.SMS 

2). La commande ci-dessus est enfermée entre parenthèses et précédée d'un signe en dollars pour indiquer qu'il devrait être évalué pour remplir la liste que nous allons itérer.

3). Pour chaque élément de la liste (ce qui signifie chaque instance de la variable de service), la commande suivante sera exécutée.

# SystemCTL Status $ Service | grep --quiet "Running" 

Cette fois, nous devons précéder notre variable générique (qui représente chaque élément dans LISTE) avec un signe en dollars pour indiquer qu'il s'agit d'une variable et donc sa valeur dans chaque itération doit être utilisée. La sortie est ensuite tuyaux en grep.

Le -calme Le drapeau est utilisé pour éviter grep de l'affichage à l'écran les lignes où le mot en cours d'exécution apparaît. Lorsque cela se produit, la commande ci-dessus renvoie un statut de sortie de 0 (représenté par $? dans la construction if), vérifiant ainsi que le service est en cours d'exécution.

Un statut de sortie différent de 0 (ce qui signifie le mot La course n'a pas été trouvée dans la sortie de Systemctl Status $ Service) indique que le service ne fonctionne pas.

Script de surveillance des services

Nous pourrions aller plus loin et vérifier l'existence de mes services.SMS avant même d'essayer d'entrer dans la boucle pour.

#!/ bin / bash # Ce script itère sur une liste de services et # est utilisé pour déterminer s'ils s'exécutent ou non. Si [-f MyServices.SMS ]; Ensuite pour le service dans $ (Cat MyServices.SMS); Do SystemCTL Status $ Service | grep --quiet "courir" si [$? -Eq 0]; alors le service echo $ "est [actif]" else echo $ service "est [inactif ou non installé]" fi fait else echo "myServices.txt manque "fi 
Ping d'une série d'hôtes réseau ou Internet pour les statistiques de réponse

Vous voudrez peut-être maintenir une liste d'hôtes dans un fichier texte et utiliser un script pour déterminer de temps en temps s'ils sont pingables ou non (n'hésitez pas à remplacer le contenu de Myhosts Et essayez par vous-même).

La commande de lecture du shell intégré indique à la boucle while de lire les myhosts ligne par ligne et attribue le contenu de chaque ligne à l'hôte variable, qui est ensuite transmis au ping-ping commande.

#!/ bin / bash # Ce script est utilisé pour démontrer l'utilisation d'une boucle de temps en lisant l'hôte; Do ping -c 2 $ hôte fait < myhosts 
Script pour ping serveurs

Lire aussi:

  1. Apprendre les scripts Shell: un guide des débutants à l'administrateur système
  2. 5 scripts shell pour apprendre la programmation de shell

Dépannage du système de fichiers

Bien que Linux soit un système d'exploitation très stable, s'il se bloque pour une raison quelconque (par exemple, en raison d'une panne de courant), un (ou plusieurs) de vos systèmes de fichiers ne sera pas correctement non monté et sera donc automatiquement vérifié pour les erreurs lorsque Linux est redémarré.

De plus, chaque fois que le système démarre lors d'un démarrage normal, il vérifie toujours l'intégrité des systèmes de fichiers avant de les monter. Dans les deux cas, cela est effectué à l'aide d'un outil nommé fsck ("Vérification du système de fichiers»).

fsck Vérifiera non seulement l'intégrité des systèmes de fichiers, mais tentera également de réparer les systèmes de fichiers corrompus si cela est invité à le faire. Selon la gravité des dommages, le FSCK peut réussir ou non; Quand c'est le cas, des parties récupérées des fichiers sont placées dans le perdu + trouvé répertoire, situé à la racine de chaque système de fichiers.

Enfin et surtout, nous devons noter que des incohérences peuvent également se produire si nous essayons de supprimer un lecteur USB lorsque le système d'exploitation y écrit toujours, et peut même entraîner des dommages matériels.

La syntaxe de base de FSCK est la suivante:

Système de fichiers FSCK [Options] 
Vérification d'un système de fichiers pour les erreurs et tentant de réparer automatiquement

Afin de vérifier un système de fichiers avec FSCC.

# Mount | grep sdg1 # umount / mnt # fsck -y / dev / sdg1 
Vérifier les erreurs du système de fichiers

Outre le -y drapeau, nous pouvons utiliser le -un Option pour réparer automatiquement les systèmes de fichiers sans poser de questions et forcer le chèque même lorsque le système de fichiers semble propre.

# fsck -af / dev / sdg1 

Si nous sommes seulement intéressés à découvrir ce qui ne va pas (sans essayer de réparer quoi que ce soit pour le moment), nous pouvons exécuter FSCK avec le -n Option, qui publiera les problèmes de système de fichiers à la sortie standard.

# fsck -n / dev / sdg1 

Selon les messages d'erreur dans la sortie de FSCK, nous saurons si nous pouvons essayer de résoudre le problème nous-mêmes ou de l'escalader aux équipes d'ingénierie pour effectuer d'autres vérifications du matériel.

Résumé

Nous sommes arrivés à la fin de cela 10 articles série où ont tenté de couvrir les compétences de base du domaine requises pour passer le LFC examen.

Pour des raisons évidentes, il n'est pas possible de couvrir tous les aspects de ces sujets dans un seul tutoriel, et c'est pourquoi nous espérons que ces articles vous ont mis sur la bonne voie pour essayer de nouvelles choses vous-même et continuer à apprendre.

Si vous avez des questions ou des commentaires, ils sont toujours les bienvenus - alors n'hésitez pas à nous laisser une ligne via le formulaire ci-dessous!

Devenir un administrateur système certifié Linux