Utilitaires GNU
Court:
L'article précédent de cette série (Fundamentele UNIX Commando) a donné un aperçu général de Linux. Il était une introduction aux éléments Linux, d'apprendre les compétences de base et de gérer le système d'exploitation, mais l'utilisateur voudra apprendre le jeu habituel des commandes Unix. L'utilisation de ces commandes et la coque vous pouvez obtenir le fichier et le système très efficace. Cet article aborde ces avancées, bien que basique, dispositif.
Introduction: le chemin de travail d'Unix
Avant les commandes sont décrites, le lecteur doit connaître certains faits de leur histoire. Ken Thompson en Dennis Ritchie Wilden, quand ils Unix au début des années soixante-dix développés, créer un système d'exploitation pour faciliter la vie des programmeurs. Ils ont décidé que la meilleure façon d'y parvenir était de définir quelques outils simples, qui étaient extrêmement bien dans certaines tâches spécialisées. Des tâches plus complexes pourraient être réalisées en combinant ces outils, en utilisant la sortie de l'un que l'entrée pour l'autre.
Ce concept de l'envoi de l'information est réalisée via l'entrée et la sortie standard (écran et clavier). En raison de l'existence de tubes et de redirection (comme il est décrit dans l'article précédent) il est possible de combiner les commandes.
Il est très facile de montrer ce sur la base d'un exemple. Un utilisateur écrit:
$ qui | adhérence pepe
who et grep sont deux programmes distincts, fusionné avec le tuyau “|”. qui montre une liste avec tous les utilisateurs à la fois que l'ordinateur est angelogd. La sortie est quelque chose comme:
$ qui
manolo tty1 décembre 22 13:15
pepe ps / 2 décembre 22 14:36
tty2 racine décembre 22 10:03
pepe ps / 2 décembre 22 14:37
La sortie se compose de 4 des champs, délimité par des tabulations. Les champs sont le nom d'utilisateur (s'identifier), la borne à laquelle quelqu'un est connecté, et la date et l'heure du composé.
“adhérence pepe” pour les lignes avec la chaîne “pepe”.
En de Uitvoer est:
$ qui | adhérence pepe
pepe ps / 2 décembre 22 14:36
pepe ps / 2 décembre 22 14:37
Peut-être vous êtes plus intéressé par quelque chose de simple. Vous pouvez vérifier le nombre de bornes étant utilisé en ce moment en utilisant le programme de wc.
wc est un caractère, Les mots et les règles. Maintenant, nous avons seulement besoin de connaître le nombre de lignes. Par conséquent, nous utilisons l'option -l (lignes, M).
$ qui | wc -l
4
$ qui | adhérence pepe | wc -l
2
Dans l'ensemble 4 les personnes connectées, et pepe est connecté à deux bornes.
Si nous vérifions maintenant antonio:
$ qui | adhérence antonio | wc -l
0
Antonio est pas connecté.
La genèse des utilitaires GNU
Richard Stallman, le fondateur du projet GNU, a commencé une discussion sur le contrôle sur le système d'exploitation Unix. Ce contrôle était à ce moment-là dans les mains de quelques grandes entreprises de logiciels, où son informatique à nouveau maintenu d'une manière naturelle à grandir. Pendant son temps au MIT (Massachusetts Institute of Technology), où il a écrit l'éditeur emacs, il a développé une aversion pour le fait que les grandes entreprises commerciales ont pris son travail à demander de l'argent, il. Face, il a décidé de lancer un projet, où le code source du logiciel était disponible à tout le monde. Dat était GNU. L'objectif à long terme était de faire un système d'exploitation entièrement open-source. Les premières étapes ont été une nouvelle version open-source de emacs, un compilateur C (gcc) et quelques outils typiques du système UNIX. Il est de ces outils sont discutés dans cet article.
grep
Notre premier exemple a montré la fonctionnalité principale de grep. Maintenant, nous allons l'expliquer plus en détail
De de la grep est
$ grep [-les options] fichiers de signatures
Les options les plus couramment utilisés (les options) son:
-n indique le numéro de la ligne avant que les lignes correspondantes (utile pour la recherche dans les grands fichiers, et de savoir exactement où se trouve le match)
-c indique le nombre de correspondances trouvées
-v rechercher des lignes non-correspondants (recherche de lignes où le motif (modèle) est pas présent)
Le modèle (modèle) est un groupe de personnages à être recherchée. Si il ya un espace entre l'État, La cartouche doit être entre guillemets (“) être mis, à la confusion entre le modèle et les fichiers à rechercher (fichier) évitable. Par exemple
$ grep “salut monde” file.txt
Si nous sommes à la recherche pour les chaînes, y compris les jokers, apostrophe, des citations ou des barres obliques, ils doivent être échappés ou (précédé par une barre oblique inverse (\)) ou placé entre guillemets, afin d'éviter le remplacement de la coque.
$ grep \*\”\’\?\< file.txt
En conséquence possible:
Ceci est une chaîne douteux -> *”'?<
Les expressions régulières
grep et d'autres outils GNU sont en mesure d'effectuer des recherches plus avancées. Ceci est possible grâce à l'utilisation d'expressions régulières. Les expressions régulières sont semblables à des jokers dans la coquille, dans le sens où ils remplacent des caractères ou groupes de caractères. En vertu de la ressource à la fin de l'article contient un lien vers un article expliquant les expressions régulières en détail.
Quelques exemples:
$ grep c.n
rechercher toute occurrence d'une chaîne avec c, suivi d'un caractère, suivie d'une t.
$ grep “[Avant JC]la”
rechercher chaque appel ou empêche la cellule.
$ grep “[m-o]à”
trouver les règles qui mata, Au nord de OATA voorkomen.
$ grep “[^ m-o]à”
Lignes avec une chaîne terminée par ata, mais pas de m, n ou o que leur première lettre.
$ grep “^ Martin come”
Chaque ligne commençant par Martin come ". Comme ^ est pas entre crochets, cela signifie que le début d'une ligne, pas une négation d'un groupe, comme dans l'exemple précédent.
$ grep “$ Sommeil”
Toutes les lignes qui se terminent par la chaîne '' Durmiendo. $ supports pour la fin de la ligne.
$ grep “^ Caja San Fernando remporte la ligue $”
Règles qui correspond exactement ce qu'il dit.
Afin de prévenir le service spécial de chacun de ces caractères, doit être de mettre une barre oblique inverse. Par exemple:
$ grep “E\.T\.”
rechercher la chaîne "E.T.".
Trouve
Cette commande est utilisée pour localiser les fichiers. Un autre article de LinuxFocus explique cette large, et la meilleure chose que nous pouvons faire est référer à elle.
Couper & pâte
Dans UNIX informations sont généralement stockées dans des fichiers ASCII avec la ligne-records, et les champs délimités par un caractère spécial, habituellement une marque de tabulation ou deux points (:). Une option typique est de sélectionner certains champs d'un fichier et de se joindre à eux dans un autre fichier. Pour cette tâche, couper et coller.
Prenons comme exemple le fichier / etc / passwd, en utilisant l'information d'utilisateur. Contient 7 des champs, séparé par “:”. Les champs contiennent des informations sur le nom connexion, le mot de passe crypté, L'ID de l'utilisateur, le nom, de répertoire de van de gebruiker, et la coquille qu'il préfère.
Voici un morceau typique de ce fichier:
racine:x:0:0:racine:/racine:/bin / bash
mourir:x:500:500:Manuel Muriel Cordero:/Accueil / murie:/bin / bash
pratique:x:501:501:Les pratiques de l'utilisateur à Ksh:/Accueil / stages:/bin / ksh
wizardi:x:502:502:Assistant para nethack:/Accueil / assistant:/bin / bash
Si nous voulons jumeler l'utilisateur avec leurs coquilles, nous devons le terrain 1 dans 7 coupe (Couper):
$ couper -f1,7 -d: /etc / passwd
racine:/bin / bash
mourir:/bin / bash
pratique:/bin / ksh
Assistant:/bin / bash
L'option -f spécifie les champs à couper, et -d définit le coup de couteau de séparation (onglet est standaard).
Il est également possible de sélectionner une rangée de champs:
$ couper -f5-7 -d: /etc / passwd
racine:/racine:/bin / bash
Manuel Muriel Cordero:/Accueil / murie:/bin / bash
Les pratiques de l'utilisateur à Ksh:/Accueil / stages:/bin / ksh
Assistant para nethack:/Accueil / assistant:/bin / bash
Tout ce que nous exportations »>’ envoyé à deux fichiers différents, et nous voulons combiner la sortie de deux, alors nous pouvons utiliser la pâte de commande:
$ coller output1 output2
racine:/bin / bash:racine:/racine:/bin / bash
mourir:/bin / bash:Manuel Muriel Cordero:/Accueil / murie:/bin / bash
pratique:/bin / ksh:Les pratiques de l'utilisateur pour Ksk:/Accueil / stages:/bin / ksh
Assistant:/bin / bash:Assistant para nethack:/Accueil / assistant:/bin / bash
Trier
Supposons que nous / etc / passwd voulons pour trier sur le champ de nom. Pour y parvenir, nous allons utiliser sort, l'outil de tri unix.
$ sort -t: +4 /etc / passwd
mourir:x:500:500:Manuel Muriel Cordero:/Accueil / murie:/bin / bash
pratique:x:501:501:Les pratiques de l'utilisateur à Ksh:/Accueil / stages:/bin / ksh
Assistant:x:502:502:Assistant para nethack:/Accueil / assistant:/bin / bash
racine:x:0:0:racine:/racine:/bin / bash
Il est facile de voir que le fichier est trié, mais dans l'ordre de la table ASCII. Si nous voulons faire la distinction entre la tête- en kleine lettres, nous pouvons utiliser la suivante:
$ sort -t: +4f / etc / passwd
mourir:x:500:500:Manuel Muriel Cordero:/Accueil / murie:/bin / bash
racine:x:0:0:racine:/racine:/bin / bash
pratique:x:501:501:Les pratiques de l'utilisateur à Ksh:/Accueil / stages:/bin / ksh
Assistant:x:502:502:Assistant para nethack:/Accueil / assistant:/bin / bash
-t est la possibilité de choisir la séparation poignarder pour les champs, +4 Le nombre de champs qui doivent être battu avant de commander, et f signifie qu'il doit y être triés sans distinguer entre la tête- en kleine lettres.
Vous pouvez toujours faire sorte beaucoup plus compliqué. Exemple, nous pouvons dans un premier temps pour trier la coquille préférée, et dans une deuxième étape sur le nom:
$ sort -t: +6r + 4F / etc / passwd
pratique:x:501:501:Les pratiques de l'utilisateur à Ksh:/Accueil / stages:/bin / ksh
mourir:x:500:500:Manuel Muriel Cordero:/Accueil / murie:/bin / bash
racine:x:0:0:racine:/racine:/bin / bash
Assistant:x:502:502:Assistant para nethack:/Accueil / assistant:/bin / bash
Paire: vous avez un fichier avec les noms des personnes que vous prêter de l'argent et le montant que vous leur emprunté. Naam est 'deudas.txt':
Son Goku:23450
Son Gohan:4570
Picolo:356700
Ranma 1/2:700
Si vous êtes le premier que vous «devez visiter’ Pour en savoir, vous avez besoin d'une liste triée:
Type Juste:
$ Trier +1 passifs
Ranma 1/2:700
Son Gohan:4570
Son Goku:23450
Picolo:356700
Cependant, ce ne sont pas le résultat souhaité, parce que le nombre de caractères est la même partout pas. La solution est de faire usage de la 'n’ option:
$ dettes sort + 1n
Picolo:356700
Son Goku:23450
Son Gohan:4570
Ranma 1/2:700
Options de base de sort sont:
+nm saute les n premiers champs et les m caractères suivants commencer avant le genre.
-nm pour arrêter le processus de tri, si le caractère de m-ième champ de la n-ième est obtenu.
Vous paramètres suivants peuvent être utilisés:
-b ignore les espaces
-d dictionaire tri (seulement des lettres, nombres et espaces)
-f ne fait pas de distinction entre la tête- en kleine lettres
-n sorte numérique
-r ordre inverse
WC
Comme nous l'avons vu, wc est un caractère, mot- et le compteur de ligne. Sortie par défaut contient le nombre de lignes, les mots et les caractères dans le fichier d'entrée (les fichiers d'entrée).
La sortie peut être déterminée en utilisant les options:
-L Seuls lignes (lignes)
-w que des mots
-c uniquement des caractères (personnages)
Des outils de comparaison: cmp, comm, diff
Parfois, nous avons besoin de connaître les différences entre deux versions d'un même fichier. Ceci est principalement utilisé dans la programmation, lorsque plusieurs personnes travaillent sur le même projet, et, si le code source (boîte) changement. Pour connaître la différence entre une et l'autre version, vous pouvez utiliser ces outils.
cmp est de eenvoudigste. Il compare deux fichiers et localise l'endroit où la première différence apparaît (il donne un numéro pour le signe, et le nombre de la règle.)
$ cmp ancien nouveau
vieille nouvelle différer: carboniser 11234, ligne 333
comm est un peu plus avancé. La sortie délivre 3 colonnes. La première contient les lignes uniques du premier fichier, le second contient les lignes uniques du deuxième fichier, et le troisième contient les règles correspondantes. Paramètres numériques permettent le retrait de certains de ces colonnes.
-1, -2 dans -3 indiquer, respectivement, le premier, deuxième et / ou troisième colonne ne doit pas être affichée. L'exemple ci-dessous montre que les règles qui sont uniques au premier fichier et les règles communes.
$ comm -2 ancien nouveau
En définitive, mais certainement pas le moins du trois, est er diff. Ceci est un outil indispensable pour les projets de programmation. Si vous avez déjà téléchargé un noyau pour compiler, vous savez que vous pouvez choisir le code source de la nouvelle ou le patch pour la version précédente, grâce à quoi celle-ci est plus petite. Ce patch a un suffixe de diff, ce qui signifie qu'il est une sortie de diff. Cet outil est commandes de l'éditeur (nous, rcs) l'utiliser pour créer des fichiers identiques. Cela vaut également pour les annuaires et les archives les tenant en. L'utilisation est évident: vous devez télécharger le code source de moins (seuls changements), vous appliquez le patch, fr je compileert. Sans paramètres, la sortie spécifie comment le changement doit être appliqué, de sorte que la première est égale à la seconde, vi rencontré Commando.
$ diff vieille nouvelle
3c3
< Le Hobbit
—
> Le Seigneur des Anneaux
78a79,87
>Trois Anneaux pour les Rois Elfes sous le ciel,
>Sept pour les Seigneurs Nains dans leurs demeures de pierre,
>Neuf pour les Hommes Mortels destinés à mourir,
>Un pour le Seigneur des Ténèbres sur son sombre trône
>Dans le Pays de Mordor où les ombres se trouvent.
>Un anneau pour les gouverner tous, Un Anneau pour les trouver,
>Un Anneau pour les amener tous et dans les ténèbres les lier
>Dans le Pays de Mordor où les ombres se trouvent.
3c3 signifie que à la ligne 3 Trois règles doivent être changées, par lequel “Le Hobbit” doit être enlevée, et remplacé par “Le Seigneur des Anneaux”. 78a79,87 signifie que vous devez insérer de nouvelles lignes, Règle 79 jusqu'à 87.
uniq
uniq supprime les doublons. Si nous voulons connaître les personnes effectivement connecté à l'ordinateur, nous devons utiliser les commandes qui et couper.
$ qui | couper -f1 -d’ ‘
racine
mourir
mourir
pratique
Cependant, la sortie ne sont pas tout à fait raison. Nous avons besoin de la deuxième fois que l'utilisateur se retirer murie. Cela signifie
$ qui | couper -f1 -d’ ‘ | Trier | uniq
mourir
pratique
racine
L'option -d’ ‘ signifie que le champ de séparation est un espace, parce que la sortie de ce personnage qui utilisent à la place de l'onglet.
uniq ne compare que des lignes consécutives. Dans notre cas, le 2 temps “mourir” directement après une de l'autre, mais il a aussi aurait pu être différent. Il est donc une bonne idée de trier la sortie avant de tri utilisé uniq.
mais
sed est l'un des outils les plus particuliers d'Unix. Il est synonyme de “sTREAM edITOR”. Lors de l'édition de texte de la façon habituelle, le programme accepte changer de façon interactive qui indique à l'utilisateur. sed nous permet de créer de petits scripts shell, gelijkend fichiers op de batch dans MS-DOS. Donc, il nous donne la possibilité de modifier le contenu d'un fichier sans interaction de l'utilisateur. Les capacités de l'éditeur sont grands, mais si nous allions plus loin dans le sujet, Cet article serait trop long. Voilà pourquoi nous optons pour une brève introduction, et les parties intéressées peuvent étudier les pages man et info.
sed est habituellement invoquée comme:
$ Mais «commande’ des dossiers
Prenez par exemple un fichier, dans lequel chaque occurrence de nous “Manolo” souhaitez remplacer “Fernando”. Cela va:
$ sed 's / Manolo / Fernando / g’ fichier
Via la sortie standard vous obtenez le fichier modifié. Si vous souhaitez conserver les résultats, Rediriger Avec “>”.
Beaucoup d'utilisateurs vont chercher ordinaire & reconnaître remplacer commande de vi. En fait, la plupart d'entre eux sont “:” Commando (qui appellent à l'ex) sed Commando.
Habituellement, sed instructions d'un ou de deux adresses (Pour sélectionner des lignes) et la commande à exécuter. L'adresse peut être une ligne, certaines règles, ou un motif.
Les commandes les plus courantes sont:
Commande Action
——– —–
a\ voeg een regel toe na de geadresseerde regel in de invoer
c\ verander de geadresseerde regels, écrire la ligne
d efface la ligne(s)
g changé le modèle partout, au lieu de seulement le premier
fois qu'il se produit
i\ voeg regels toe na de geadresseerde regels
p imprimer la ligne actuelle, même si l'option -n est utilisé
arrêt q (quitter le programme) si la ligne adressée est atteint
r fichier lire un fichier, et ajouter le contenu de la sortie
s / une / deux cordes vervang “un” chaîne de porte “deux”
w copies de fichiers de la ligne réelle à un fichier différent
= Numéro de la ligne d'impression
! commande applique la commande à la ligne dite
Avec sed, Vous pouvez spécifier ce qui exclut(s) Pour modifier votre:
$ Mais 3d’ fichier
va supprimer la troisième ligne du fichier
$ mais «2,4s / e / # /’ fichier
Sera la première fois que dans les règles 2 jusqu'à et y compris 4 une “e” empêche, est remplacé par ce “#”
Lignes contenant une chaîne de caractères peuvent être sélectionnés par des expressions régulières, comme décrit ci-dessus, aide. Par exemple
$ Mais '/[Qq]ueen / j’ des chansons
chaque ligne supprimera où le mot “Queeen” de “reine” en se produit.
Il est facile de supprimer des lignes vides à partir d'un fichier à l'aide des modèles (modèles)
$ mais le '/ ^ $ / d’ fichier
Toutefois, ceci ne supprime pas les lignes avec des espaces. Afin d'atteindre cet, nous avons besoin de développer un peu tendance
$ mais '/ ^ * $ / j’ fichier
Où “*” signe indique que le caractère précédent, ” ” par conséquent, l'espace dans ce cas,, x peut se produire plusieurs fois.
$ Mais '/ initMenu / a
> le texte de complément’ file.txt
Cet exemple recherche pour la ligne contenant la chaîne InitMenu” empêche, et après l'ajout d'une nouvelle ligne. Les exemples de travaux, comme le montre, seulement avec un shell bash ou sh. Je tikt tot a\, puis appuyez sur entrée (revenir) en tik je le reste.
Tcsh nouvelles règles à l'intérieur de citations d'une manière différente. Par conséquent, vous devez utiliser une double barre oblique:
$ sed ‘/InitMenu/a\\
? le texte de complément’ file.txt
La ? le signe de la coquille, net als de > dans l'exemple bash.
awk
Une lecture plus: awk. Le nom inhabituel provient des noms des développeurs originaux: Alfred Aho, Peter Weinberger en Brian Kernighan.
Le programme awk est l'un des plus intéressants parmi les utilitaires Unix. Il est un outil complexe et évolué, qui permet, à partir de la ligne de commande d'un lot à effectuer différentes actions.
Il convient de signaler que awk et sed sont des pièces clé des scripts shell plus complexes. Ce que vous pouvez faire avec lui, sans C ou tout autre langage compilé, est impressionnante. L'installation de la distribution Slackware Linux, par exemple,, et de nombreux programmes Web de CGI sont juste des scripts shell.
Aujourd'hui, les outils de travail à partir de la ligne de commande est généralement pas exécutée; ils sont obsolètes par l'avènement des environnements de fenêtre, et avec l'arrivée de Perl de nombreux scripts shell est devenu substitué par des scripts perl. Vous pourriez penser que les outils de ligne de commande seront oubliés. Cependant ma propre expérience dire que de nombreuses applications peuvent être faites avec quelques lignes dans un script shell (un petit gestionnaire de la base). Que vous pouvez être très productive avec la coquille, au moins si vous utilisez ces commandes et la coque connaît bien.
Si vous vous joignez à la puissance de sed et awk, vous pouvez faire les choses rapidement, qui sont habituellement un gestionnaire de base de données petit plus une feuille de calcul.
Prenez un projet de loi, où vous trouverez les articles que vous avez acheté, le nombre de pièces de chaque, et leurs prix par produit. Nous appelons ce fichier “Ventes”:
des oranges 5 250
des poires 3 120
pommes 2 360
Il est un fichier avec 3 Les champs et les Tab comme séparateur. Maintenant, vous souhaitez définir un quatrième champ, avec le prix total par produit.
$ awk '{totale = 2 $ 3 $ *; impression $0 , le total }’ Ventes
des oranges 6 250 1250
des poires 3 120 360
pommes 2 360 720
total est la variable qui contiendra le produit des valeurs stockées dans les deuxième et troisième champ. Après le calcul, l'ensemble de la ligne d'entrée et les champs de total.
awk est presque un environnement de programmation, particulièrement adapté pour automatiser le travail avec des informations provenant de fichiers texte. Si vous êtes intéressé par cet outil, Je vous encourage à les étudier, en utilisant les pages man et info.
De scripts shell
Les scripts shell sont des séquences de commandes du système, après avoir été stockées dans un fichier, peut être effectuée.
Les scripts shell sont similaires aux fichiers batch DOS, mais puissant. Ils permettent aux utilisateurs de faire leurs propres commandes combinant simplement les commandes existantes.
Évidemment accepter les paramètres de scripts shell. Ceux-ci sont stockés dans les variables $0 (le nom de la commande ou le script), $1, $2, … jusqu'à $9. Tous les paramètres de la commande peut être approchée par $*.
Un éditeur de texte peut créer des scripts shell. Pour exécuter une course de script dans:
$ sh shell-script
de, encore mieux, vous pouvez donner les droits d'exécution
$ chmod 700 shell-script
et d'exécuter simplement en tapant le nom:
$ shell-script
Nous allons terminer cet article et la discussion sur des scripts shell, qui est reporté à l'avenir. Le prochain article présentera Unix éditeurs de texte les plus courants: nous & emacs. Chaque utilisateur Linux doit bien les connaître.