Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1

Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1

La ligne de commande bash fournit une puissance presque illimitée lorsqu'il s'agit d'exécuter presque tout ce que vous voulez faire. Qu'il s'agisse de traiter un ensemble de fichiers, de modifier un ensemble de documents, de gérer les mégadonnées, de gérer un système ou d'automatiser une routine, Bash peut tout faire. Cette série, dont aujourd'hui, nous présentons la première partie, vous articula avec les outils et les méthodes dont vous avez besoin pour devenir un utilisateur de bash beaucoup plus compétent. Même les utilisateurs déjà avancés ramasseront probablement quelque chose de nouveau et d'excitant. Apprécier!

Dans ce tutoriel, vous apprendrez:

  • Conseils, astuces et méthodes utiles de la ligne de commande bash
  • Comment interagir avec la ligne de commande bash de manière avancée
  • Comment affiner vos compétences de bash dans l'ensemble et devenir un utilisateur de bash plus compétent
Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Autre Divers services publics qui sont soit inclus dans le shell bash par défaut, ou peuvent être installés en utilisant nom d'outil d'installation de Sudo apt-get (où le nom d'outil représente l'outil que vous souhaitez installer)
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier

Exemple 1: voir quels processus accéder à un certain fichier

Souhaitez-vous savoir quels processus accèdent à un fichier donné? Il est facile de le faire en utilisant le fusion de commandes intégré Bash:

$ fusion -a / usr / bin / gnome-calculator / usr / bin / gnome-calculator: 619672e 
$ ps -ef | Grep 619672 | grep -v grep ABC 619672 3136 0 13:13 ? 00:00:01 gnome-calculatrice 


Comme nous pouvons le voir, le fichier / usr / bin / gnome-calculatrice (un binaire), est actuellement utilisé par le processus avec ID 619672. Vérification de cet identifiant de processus en utilisant ps, Nous découvrons bientôt cet utilisateur abc a commencé la calculatrice et l'a fait à 13:13.

Le e derrière la Piquer (ID de processus) est d'indiquer qu'il s'agit d'un exécutable exécuté. Il existe divers autres qualificatifs de ce type, et vous pouvez utiliser fusion de l'homme de les voir. Cet outil de fusion peut être puissant, surtout lorsqu'il est utilisé en combinaison avec lsof (un LS de fichiers ouverts):

Supposons que nous déboguons un ordinateur distant pour un utilisateur qui travaille avec un bureau standard Ubuntu. L'utilisateur a commencé la calculatrice, et maintenant tout son écran entier en gelé. Nous voulons maintenant tuer à distance tous les processus qui se rapportent de quelque manière que ce soit à l'écran verrouillé, sans redémarrer le serveur, dans l'ordre de l'importance de ces processus.

# lsof | Calculatrice GREP | grep "partager" | tête -N1 xdg-dekt 3111 ABC MEM REG 253,1 3009 12327296 / USR / SHARE / LOCALE-LANGPACK / EN_AU / LC_MESSAGES / GNOME-CALCULATEUR.MO 
# fusion -a / usr / share / locale-langpack / en_au / lc_messages / gnome-calculator.MO / USR / SHARE / LOCALE-LANGPACK / EN_AU / LC_MESSAGES / GNOME-CALCULATEUR.MO: 3111M 3136M 619672M 1577230M 
# ps -ef | grep -e "3111 | 3136 | 619672 | 1577230" | grep -v grep ABC 3111 2779 0 août03 ? 00:00:11 / USR / LIBEXEC / XDG-DESKTOP-PORTAL-GTK ABC 3136 2779 5 AUG03 ? 03:08:03 / usr / bin / gnome-shell ABC 619672 3136 0 13:13 ? 00:00:01 Gnome-calculator ABC 1577230 2779 0 août04 ? 00:03:15 / usr / bin / nautilus - GAPPLICATION-SERVICE 

Tout d'abord, nous avons localisé tous les fichiers ouverts utilisés par la calculatrice en utilisant lsof. Pour garder la sortie courte, nous avons uniquement répertorié le résultat supérieur pour un seul fichier partagé. Ensuite, nous avons utilisé Fusers pour savoir quels processus utilisent ce fichier. Cela nous a fourni les PIDS. Enfin, nous avons recherché en utilisant un ou (|) basé sur le grep pour trouver quels noms de processus réels. Nous pouvons voir que alors que la calculatrice a été lancée à 13h13, les autres processus ont fonctionné plus longtemps.

Ensuite, nous pourrions émettre, par exemple, un Kill -9 619672 et vérifier si cela a résolu le problème. Sinon, nous pouvons essayer 1577230 (le gestionnaire de fichiers Nautilus partagé), processus 3136 (le shell global), ou enfin traiter 3111, Bien que cela tuerait probablement une partie importante de l'expérience de bureau de l'utilisateur et peut ne pas être facile à redémarrer.

Exemple 2: débogage de vos scripts

Vous avez donc écrit un excellent script, avec beaucoup de code complexe, puis l'exécutez… et voyez une erreur dans la sortie, qui à première vue n'a pas beaucoup de sens. Même après le débogage pendant un certain temps, vous êtes toujours coincé sur ce qui s'est passé pendant que le script s'exécutait.

bash -x à la rescousse! bash -x permet d'exécuter un test.shot script et voyez exactement ce qui se passe:

#!/ bin / bash var1 = "Hello LinuxConfig.lecteurs d'organes!"Var2 =" ------------------------------ "Echo $ var1 echo $ var2 
Copie

Exécution:

$ bash -x ./test.sh + var1 = "Hello LinuxConfig.lecteurs d'organes!"+ Var2 = ------------------------------ + Echo Hello LinuxConfig.lecteurs d'org!'Bonjour LinuxConfig.lecteurs d'organes! + écho ------------------------------ ------------------------------ 

Comme vous pouvez le voir, le bash -x le commandement nous a montré exactement ce qui s'est passé, étape par étape. Vous pouvez également envoyer facilement la sortie de cette commande dans un fichier en ajoutant 2> & 1 | tee my_output.enregistrer à la commande:

$ bash -x ./test.Sh 2> & 1 | tee my_output.journal… même sortie… $ cat my_output.log + var1 = "bonjour linuxconfig.lecteurs d'organes!"+ Var2 = ------------------------------ + Echo Hello LinuxConfig.lecteurs d'org!'Bonjour LinuxConfig.lecteurs d'organes! + écho ------------------------------ ------------------------------ 


Le 2> & 1 va envoyer le stderr (sortie d'erreur standard: toute erreur observée lors de l'exécution) pour stdout (Sortie standard: défini de manière lâche ici comme la sortie que vous voyez habituellement sur le terminal) et capturez toutes les sorties de bash -x. Le tee La commande capturera toutes les sorties de stdout, et l'écrivez dans le fichier indiqué. Si vous souhaitez ajouter un fichier (et ne pas recommencer avec un fichier vide), vous pouvez utiliser tee -a où le -un L'option s'assurera que le fichier est ajouté à.

Exemple 3: un gotcha commun: sh -x != bash -x

Le dernier exemple nous a montré comment utiliser bash -x, Mais pourrions-nous aussi utiliser sh -x? La tendance de certains nouveaux utilisateurs de bash peut être d'exécuter sh -x, Mais c'est une erreur de recrue; shot est une coquille beaucoup plus limitée. Alors que frapper est basé sur shot, il a beaucoup plus d'extensions. Ainsi, si vous utilisez sh -x Pour déboguer vos scripts, vous verrez des erreurs étranges. Veux voir un exemple?

#!/ bin / bash test = "ABC" si ["" $ test "== *" b "*]]; puis écho "Oui, là-dedans!" Fi 
Copie

Exécution:

$ ./test.sh oui, là-bas! 
$ bash -x ./test.sh + test = ABC + [[ABC == * \ b *]] + echo 'oui, là-bas!'Oui, là-bas! 
$ sh -x ./test.SH + test = ABC + [[ABC == * B *]] ./ Test: 4: [[: pas trouvé 

Ici, vous pouvez voir un petit script de test test.shot qui, lors de l'exécution, vérifie si une certaine lettre (b) apparaît dans une certaine chaîne d'entrée (telle que définie par le TEST variable). Le script fonctionne très bien, et quand nous utilisons bash -x Nous pouvons voir les informations présentées, y compris la sortie, semble correcte.

Ensuite, en utilisant sh -x Les choses tournent considérablement mal; le shot Shell ne peut pas interpréter [[ et échoue les deux dans le sh -x sortie ainsi que dans l'exécution du script lui-même. En effet, la syntaxe avancée si frapper n'existe pas dans shot.

Exemple 4: Uniq ou pas unique - c'est la question!

Avez-vous déjà voulu trier un fichier et énumérer les entrées uniques? À première vue, cela semble être un exercice facile en utilisant la commande bash incluse uniq:

$ Cat Entrée.txt 1 2 2 3 3 3 
$ Cat Entrée.txt | Uniq 1 2 3 

Cependant, si nous modifions un peu notre fichier d'entrée, nous rencontrons des problèmes d'unicité:

$ Cat Entrée.txt 3 1 2 3 2 3 3 3 
$ Cat Entrée.txt | Uniq 3 1 2 3 2 3 


Ceci est dû au fait uniq Par défaut Filtrez les lignes de correspondance adjacentes, les lignes correspondantes étant fusionnées à la première occurrence comme le uniq Manuel clarifie. Ou en d'autres termes, seules les lignes qui sont exactement les mêmes que la précédente seront supprimées.

Dans l'exemple, cela peut être vu par les trois derniers 3 Les lignes étant condensées en un seul `` unique '' 3. Ceci n'est probablement que utilisable dans un nombre limité et des cas d'utilisation spécifiques.

Nous pouvons cependant modifier uniq Un peu plus loin pour nous donner uniquement des entrées vraiment uniques en utilisant le -u paramètre:

$ Cat Entrée.TXT # Notez que les symboles '#' ont été ajoutés après l'exécution, pour clarifier quelque chose (lire ci-dessous) 3 # 1 # 2 # 3 # 2 # 3 3 3 3 
$ Cat Entrée.txt | Uniq -u 3 1 2 3 2 

A toujours l'air un peu déroutant, droit? Regardez attentivement l'entrée et la sortie et vous pouvez voir comment seules les lignes qui sont individuellement unique (comme marqué par # dans l'exemple ci-dessus après l'exécution) sont sortis.

Les trois derniers 3 Les lignes ne sont pas sorties car elles ne sont pas unique en tant que tel. Cette méthode d'unicité aurait à nouveau une applicabilité limitée dans les scénarios du monde réel, bien qu'il puisse y avoir quelques cas où il est utile.

Nous pouvons obtenir une solution plus appropriée pour l'unicité en utilisant un outil intégré Bash légèrement différent; trier:

$ Cat Entrée.txt 1 2 2 3 3 3 
$ Cat Entrée.txt | Trier -U 1 2 3 
SAVIEZ-VOUS?
Vous pouvez omettre le chat commander dans les exemples ci-dessus et fournir un fichier à uniq ou trier lire directement? Exemple:Trier -U Entrée.SMS

Super! Ceci est utilisable dans de nombreux scripts où nous aimerions une véritable liste des entrées uniques. L'avantage supplémentaire est que la liste est bien triée en même temps (bien que nous ayons peut-être préféré utiliser le -n Option pour trier également pour trier dans un ordre numérique en fonction de la valeur numérique de chaîne).

Conclusion

Il y a beaucoup de joie à utiliser Bash comme ligne de commande Linux préférée. Dans ce tutoriel, nous avons exploré un certain nombre de conseils et astuces de ligne de commande de bash utiles. Ceci est le coup d'envoi d'une série pleine d'exemples de ligne de commande bash qui, si vous suivez, vous aidera à devenir beaucoup plus avancé à et avec la ligne de commande et la coquille de bash!

Faites-nous part de vos pensées et partagez certains de vos propres conseils de ligne de commande cool, astuces et comptes ci-dessous!

  • Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
  • Exemples de lignes de commande de commande de bash utile - Partie 4
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 5

Tutoriels Linux connexes:

  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
  • Exemples de lignes de commande de commande de bash utile - Partie 4
  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 5
  • Manipulation de Big Data pour le plaisir et le profit Partie 1
  • Conseils et astuces de ligne de commande
  • Ubuntu 20.04 Guide
  • Boucles imbriquées dans les scripts bash