- Apprendre
- Informatique et numérique
- Systèmes, réseaux et cloud
- Linux : ligne de commande, scripts shell et administration
- Tubes et redirection sous Linux
Tubes et redirection sous Linux : traiter du texte
DébutantUnité 3 sur 7 de la formation Formation : Linux : ligne de commande, scripts shell et administration
Ce que tu vas apprendre
- Affiche les fichiers courts en entier, parcours les fichiers longs page par page et affiche seulement les premières ou les dernières lignes d’un fichier.
- Affiche des fichiers et parcours-les page par page avec cat et lessAffiche les fichiers courts avec cat, lis les fichiers longs écran par écran avec less, et déplace-toi et effectue des recherches dans less.
- Affiche les premières ou les dernières lignes avec head et tailUtilise head et tail pour afficher le début ou la fin d’un fichier, ignorer une ligne d’en-tête, extraire une plage de lignes et suivre un fichier journal qui s’allonge.
- Affiche des fichiers et parcours-les page par page avec cat et less
- Explique les trois flux standard d’une commande et redirige les entrées, les sorties et les messages d’erreur depuis ou vers des fichiers.
- Comprends l’entrée standard, la sortie standard et la sortie d’erreur standardDécris les trois flux standard, explique pourquoi les sorties et les erreurs sont séparées et comment une commande peut lire son entrée depuis un fichier plutôt que depuis le clavier.
- Redirige les sorties et les erreurs vers des fichiersEnregistre les sorties et les messages d’erreur dans des fichiers en écrasant leur contenu ou en ajoutant à leur fin, regroupe ou élimine des flux et évite de détruire un fichier en y redirigeant une sortie.
- Comprends l’entrée standard, la sortie standard et la sortie d’erreur standard
- Relie de petites commandes par des tubes pour compter, trier, dédoublonner et extraire du texte, et répondre à des questions sur les données en une seule ligne de commande.
- Relie des commandes avec des tubes et teeUtilise un tube pour transmettre la sortie d’une commande à la suivante, construis et vérifie un pipeline étape par étape et enregistre une copie en cours de route avec tee.
- Compte et trie les lignes, puis supprime les doublonsCompte les lignes, les mots et les octets avec wc, trie les lignes par ordre alphabétique, numérique ou selon un champ avec sort, et supprime ou compte les doublons avec uniq.
- Extrais des colonnes avec cutSélectionne des champs dans du texte délimité et des caractères à des positions fixes avec cut, puis utilise cette commande dans des pipelines pour répondre à des questions sur les données.
- Relie des commandes avec des tubes et tee
- Trouve des lignes dans des fichiers avec grep et décris précisément le texte recherché avec des expressions régulières de base et étendues.
- Recherche du texte dans les fichiers avec grep et ses principales optionsUtilise grep pour afficher, compter ou numéroter les lignes correspondantes, ou inverser la sélection, effectue des recherches dans des répertoires entiers et choisis entre une recherche par motif et une recherche de texte littéral.
- Écris des expressions régulières de baseConstruis des motifs avec des caractères littéraux, le point, des ancres, des expressions entre crochets et l’astérisque, et évite de les confondre avec les caractères génériques de noms de fichiers.
- Utilise des expressions régulières étendues avec grep -EUtilise les opérateurs ?, +, { }, | et ( ) avec grep -E pour trouver du texte facultatif, répété ou parmi plusieurs possibilités, et affiche seulement les parties correspondantes.
- Recherche du texte dans les fichiers avec grep et ses principales options
- Trouve des fichiers dans toute l’arborescence avec find et locate, et exécute des commandes sur les fichiers trouvés.
- Effectue des recherches dans l’arborescence avec findUtilise find avec des tests sur le nom, le type, la taille et la date, combine les tests et évite les problèmes de protection des caractères et de droits que rencontrent les débutants.
- Agis sur les fichiers trouvés et utilise des recherches plus rapidesExécute des commandes sur chaque fichier renvoyé par find, supprime les éléments correspondants en toute sécurité et sache quand locate ou which est l’outil le plus rapide.
- Effectue des recherches dans l’arborescence avec find
- Ouvre, modifie, enregistre et ferme des fichiers texte dans les deux éditeurs de terminal présents sur la plupart des systèmes Linux : nano, simple, et vi, modal.
- Modifie et enregistre un fichier avec nanoOuvre un fichier dans nano, saisis et modifie du texte, effectue des recherches et des remplacements, coupe et colle des lignes, puis enregistre et quitte correctement.
- Utilise les différents modes de viPasse des modes normal, insertion et ligne de commande de vi à l’un ou l’autre, déplace-toi et modifie le texte avec des commandes à une touche, puis enregistre ou quitte sans perdre ton travail.
- Modifie et enregistre un fichier avec nano
Tubes et redirection sous Linux : cours
1Consulte des fichiers depuis le terminal
Un fichier texte peut contenir quelques notes ou des milliers de paramètres. Choisis un affichage adapté à tes besoins : le fichier entier, un écran dans lequel te déplacer ou une petite partie près de l’une des extrémités. Tu apprendras à te déplacer et à chercher sans modifier le fichier, à sélectionner une plage exacte de lignes et à observer l’arrivée de texte dans un fichier qui s’allonge. Ces commandes de consultation acceptent aussi la sortie d’autres commandes : les mêmes compétences t’aideront donc à examiner une longue liste de répertoire ou les résultats d’un pipeline.
1.1 Affiche des fichiers et parcours-les page par page avec cat et less
Les fichiers courts sont faciles à afficher. Les fichiers longs sont plus faciles à lire lorsque l’affichage attend ton intervention. Ni cat ni la vue de lecture normale de less ne modifient le fichier.
Afficher ou réunir du texte avec cat
cat notes.txt envoie le fichier entier vers la sortie standard, normalement ton terminal. Son nom vient de concatenate : avec plusieurs noms de fichiers, il affiche leur contenu dans l’ordre indiqué. Il n’insère pas d’en-tête entre les fichiers.
Supposons que a.txt contient les lignes « a » et « b », et que b.txt contient « c d ». Exécute :
cat -n a.txt b.txt
Tu vois trois lignes numérotées. La numérotation se poursuit d’un fichier à l’autre ; -n numérote la sortie, pas les fichiers enregistrés. Pour enregistrer le texte réuni, utilise cat a.txt b.txt > ab.txt. Le nouveau fichier contient les trois lignes d’origine sans numérotation. Ajouter -n enregistrerait aussi les numéros.
L’affichage d’un grand fichier peut pousser son début hors de la partie visible de l’écran. Un pageur te laisse contrôler l’affichage. less /etc/services ouvre un long fichier texte et en affiche un écran. Il peut afficher le premier écran avant d’avoir lu tout le fichier, ce qui est utile pour les fichiers volumineux.
Se déplacer dans less
L’invite de commande est masquée pendant l’exécution de less. Le programme attend une touche de navigation :
| Touche | Action |
|---|---|
Espace ou f | Avancer d’un écran |
b | Reculer d’un écran |
Flèche bas, Entrée ou j | Descendre d’une ligne |
Flèche haut ou k | Remonter d’une ligne |
g / G | Aller à la première / dernière ligne |
h / q | Afficher l’aide / quitter |
La casse compte : g et G vont aux extrémités opposées. Pour terminer la lecture, appuie sur q ; attendre une nouvelle invite sans quitter peut donner l’impression que le pageur est bloqué.
Rechercher dans le texte affiché
Saisis /, entre un mot et appuie sur Entrée pour chercher vers l’avant. Par exemple, /ssh trouve le texte correspondant suivant. Saisis ?ssh puis Entrée pour chercher vers l’arrière. Ensuite, n répète la recherche dans son sens actuel, tandis que N cherche dans le sens opposé. Après une recherche vers l’arrière, n continue donc vers l’arrière.
La recherche utilise une expression régulière. /^# trouve une ligne commençant par « # », car ^ marque le début d’une ligne. Tu peux apprendre séparément les règles des motifs tout en utilisant dès maintenant des mots simples.
less -N notes.txt ajoute les numéros de ligne à l’affichage. Pour les enregistrements larges, less -S notes.txt garde une ligne longue sur une seule ligne d’écran en coupant sa partie droite visible ; les flèches gauche et droite permettent de se déplacer horizontalement. Le texte reste dans le fichier. Sans -S, les lignes longues se poursuivent sur d’autres lignes d’écran. more est un pageur plus ancien qui offre moins de possibilités de navigation.
Parcourir la sortie d’une autre commande
ls -l /usr/bin | less te permet de parcourir la longue liste. Le tube transmet la liste au pageur. Pour un fichier existant, less notes.txt l’ouvre directement ; cat notes.txt | less ajoute une commande pour obtenir le même affichage.
Utilise ces commandes sur du texte. L’affichage d’un programme binaire comme /bin/ls peut montrer des caractères de contrôle et brouiller le terminal. Si cela se produit, saisis reset et appuie sur Entrée pour rétablir l’affichage.
Points clés
cataffiche les fichiers dans l’ordre fourni ;-nnumérote la sortie combinée.lessaffiche le texte page par page sans le modifier ;qrevient au shell.- Dans
less,/cherche vers l’avant,?vers l’arrière etnrépète la recherche dans le sens actuel. less -Naffiche les numéros de ligne ;less -Spermet de faire défiler les lignes larges horizontalement.
1.2 Affiche les premières ou les dernières lignes avec head et tail
Lorsque tu n’as besoin que des premières ou des dernières entrées d’un fichier, tout afficher masque la partie utile. head sélectionne le début et tail la fin. Tous deux affichent 10 lignes par défaut.
Choisir un nombre de lignes
Si numbers.txt contient les nombres de 1 à 100, un par ligne, head numbers.txt affiche de 1 à 10, tandis que tail numbers.txt affiche de 91 à 100. Utilise -n pour changer le nombre :
head -n 3 numbers.txt
tail -n 3 numbers.txt
La première commande affiche 1, 2, 3. La seconde affiche 98, 99, 100. Si un fichier contient moins de lignes que demandé, la commande affiche celles qui sont disponibles.
head -c 5 sélectionne cinq octets au lieu de cinq lignes. Pour un texte qui commence par « banana », il affiche « banan ». Les octets sont des unités de stockage ; en UTF-8, un caractère peut occuper plus d’un octet, donc un nombre d’octets ne correspond pas toujours à un nombre de caractères.
Lire correctement une position de départ
Un signe plus change le sens de tail -n. Compare :
| Commande | Signification |
|---|---|
tail -n 2 file | Afficher les deux dernières lignes |
tail -n +2 file | Afficher de la ligne 2 jusqu’à la fin |
tail -n +2 scores.csv retire la première ligne, ce qui est utile lorsqu’elle contient des en-têtes de colonnes. Il ne sélectionne pas seulement la deuxième ligne. Sur le fichier numéroté, tail -n +98 numbers.txt affiche de 98 à 100.
La version GNU de head accepte aussi un nombre négatif : head -n -97 numbers.txt omet les 97 dernières lignes et laisse de 1 à 3. Le signe fait partie du nombre et de l’instruction.
Sélectionner une plage au milieu
Pour afficher les lignes 11 à 20, conserve d’abord tout jusqu’à la ligne 20. Puis conserve les 10 dernières lignes de cette sélection :
head -n 20 numbers.txt | tail -n 10
Après head, les données vont de 1 à 20. Les dix dernières lignes vont de 11 à 20. Une plage qui inclut ses deux extrémités contient un nombre de lignes égal au numéro de fin moins le numéro de début plus un ; ce dernier un tient compte de l’inclusion des deux extrémités. Utiliser tail -n 11 inclurait aussi la ligne 10.
Les deux commandes peuvent lire un tube lorsqu’aucun fichier d’entrée n’est indiqué. ls /etc | head -n 5 limite une liste à ses cinq premiers noms. Avec ls -lt | head -n 4, rappelle-toi que la première ligne de sortie est la ligne « total » : seules trois entrées la suivent.
Observer un fichier qui s’allonge
tail -f /var/log/app.log affiche d’abord les dernières lignes, puis attend et affiche le texte ajouté au fichier. Utilise cette commande pendant qu’un programme écrit de nouvelles entrées. Appuie sur Ctrl+C pour arrêter le suivi et revenir au shell. Cette attente est voulue ; elle diffère de la sortie unique et achevée de tail utilisé seul.
tail -F réessaie aussi et continue à suivre le nom du fichier lorsqu’un journal est supprimé puis recréé lors d’une rotation. Avec plusieurs fichiers d’entrée, head et tail indiquent la sortie de chaque fichier par un en-tête tel que « ==> fruit.txt <== ». Ajoute -q lorsque tu as besoin du texte sélectionné sans ces en-têtes.
Points clés
headettailaffichent 10 lignes par défaut ;-ndéfinit le nombre de lignes.tail -n +Kcommence à la ligne K ; cela ne signifie pas les K dernières lignes.- Pour une plage incluant ses deux extrémités, conserve d’abord autant de lignes que le numéro de la ligne de fin, puis les dernières lignes correspondant à la longueur de la plage.
tail -fsuit le texte ajouté ; Ctrl+C arrête le suivi.tail -Fsuit un nom de fichier malgré son remplacement, et-qsupprime les en-têtes lors du traitement de plusieurs fichiers.
2Contrôle la provenance des entrées et la destination des sorties et des erreurs
Une commande peut produire des résultats utiles et des messages d’erreur au cours d’une même exécution. Linux leur donne des voies distinctes, en plus d’une voie pour l’entrée. Le shell peut relier chaque voie à un fichier avant le démarrage de la commande. Comprendre ces connexions te permet d’enregistrer un rapport, de garder les erreurs dans un fichier séparé et de fournir des données sans les saisir. L’ordre des redirections compte, et un fichier de sortie peut être vidé avant que le programme ne lise son entrée.
2.1 Comprends l’entrée standard, la sortie standard et la sortie d’erreur standard
Une commande communique par des flux standard. Considérer l’entrée et la sortie comme des voies distinctes permet de comprendre comment un même programme peut lire le clavier, lire un fichier ou recevoir la sortie d’une autre commande.
Identifier les trois flux
Un descripteur de fichier est le numéro utilisé pour identifier un flux ouvert. Une commande ordinaire du shell hérite de ces trois flux :
| Numéro | Nom | Connexion habituelle au terminal |
|---|---|---|
| 0 | Entrée standard, stdin | Entrée au clavier |
| 1 | Sortie standard, stdout | Résultats normaux à l’écran |
| 2 | Sortie d’erreur standard, stderr | Erreurs et messages d’état à l’écran |
Bien que stdout et stderr partagent normalement l’écran, ce sont des connexions distinctes. Un programme peut fournir un résultat sur stdout et expliquer un problème sur stderr au cours d’une même exécution.
Par exemple, ls /etc/hostname /nonexistent > out.txt liste un chemin existant et rencontre un chemin absent. La liste va dans out.txt. Le message « No such file or directory » reste dans le terminal, car > redirige stdout, pas stderr. Voir une erreur à l’écran ne signifie pas que la redirection de sortie a échoué.
Fournir l’entrée d’une commande depuis un fichier
Des commandes comme cat, sort, wc, grep, head et tail peuvent lire stdin lorsqu’aucun fichier d’entrée n’est indiqué. Exécute sort seul, saisis quelques lignes et appuie sur Ctrl+D au début d’une ligne vide. Cela signale la fin de l’entrée et permet à sort d’afficher les lignes triées. Ctrl+C arrête la commande au lieu de terminer l’entrée.
L’opérateur d’entrée < relie un fichier à stdin :
wc -l < fruit.txt
Si fruit.txt contient six lignes terminées par un saut de ligne, la sortie est « 6 ». Compare avec wc -l fruit.txt, qui affiche « 6 fruit.txt ». Dans la forme avec redirection, le shell ouvre le fichier et wc reçoit un flux sans le nom du fichier d’origine. Dans la forme avec argument, wc ouvre lui-même le fichier indiqué.
Le shell prépare les redirections avant de démarrer le programme. sort < fruit.txt et < fruit.txt sort relient donc le même fichier au même flux d’entrée. Le placement habituel après la commande est plus facile à lire.
Fournir directement quelques lignes
Un document en ligne place l’entrée sous la commande. Le mot après << marque la fin de cette entrée :
cat <<EOF > greeting.txt
Hello
See you soon
EOF
cat reçoit les deux lignes de salutation sur stdin et les écrit dans le fichier de sortie. La dernière ligne contient seulement EOF ; c’est un délimiteur, pas une partie du texte enregistré. Un autre mot peut servir de délimiteur si la ligne de fermeture lui correspond exactement.
Dans Bash, une chaîne en ligne fournit une chaîne suivie d’un saut de ligne. wc -w <<< "a b c" indique trois mots. Ces deux formes fournissent directement une entrée sans créer d’abord un fichier d’entrée.
Lire la flèche avant d’exécuter la commande
sort < fruit.txt lit le fichier. sort > fruit.txt l’ouvre comme destination de sortie, vide son contenu existant et attend une entrée au clavier. Le shell effectue cette ouverture destructive avant l’exécution de sort. Garde les fichiers d’entrée distincts des destinations de sortie, sauf si la commande dispose d’une méthode documentée pour mettre à jour son entrée en toute sécurité.
Points clés
- stdin, stdout et stderr utilisent les descripteurs de fichier 0, 1 et 2.
<fournit un fichier par stdin ;>change la destination de stdout.- Ctrl+D sur une ligne d’entrée vide signale la fin de l’entrée ; Ctrl+C arrête la commande.
- Un document en ligne utilise un délimiteur correspondant, seul sur sa ligne.
2.2 Redirige les sorties et les erreurs vers des fichiers
La redirection change la destination d’un flux. C’est une opération du shell : les mêmes opérateurs fonctionnent donc avec de nombreux programmes. Commence par déterminer quel flux envoyer et s’il faut remplacer ou compléter un fichier existant.
Enregistrer les résultats normaux ou les ajouter en fin de fichier
echo one > log.txt crée le fichier ou le vide avant d’y écrire la ligne « one ». Un echo two >> log.txt exécuté ensuite ajoute « two » à la fin, ce qui donne deux lignes. >> crée aussi le fichier s’il n’existe pas.
| Opérateur | Effet |
|---|---|
> out.txt | Écrire stdout en remplaçant le contenu existant |
>> out.txt | Ajouter stdout en fin de fichier |
2> err.txt | Écrire stderr en remplaçant le contenu existant |
2>> err.txt | Ajouter stderr en fin de fichier |
ls /etc/hostname /nonexistent > out.txt 2> err.txt sépare la liste obtenue du message d’erreur concernant le chemin absent. Le descripteur doit toucher l’opérateur. ls 2> err.txt redirige les erreurs ; ls 2 > err.txt demande à ls de lister un fichier nommé « 2 » et redirige sa sortie normale.
Regrouper les flux dans le bon ordre
2>&1 dirige stderr vers la destination actuelle de stdout. Lis les redirections de gauche à droite :
ls /etc/hostname /nonexistent > all.txt 2>&1
D’abord, stdout est dirigé vers all.txt. Ensuite, stderr copie cette connexion. Les deux flux arrivent maintenant dans le fichier. &> all.txt est une forme plus courte proposée par Bash, et &>> all.txt ajoute les deux flux en fin de fichier.
Inverser l’ordre change le résultat :
ls /etc/hostname /nonexistent 2>&1 > out.txt
D’abord, stderr est dirigé là où va actuellement stdout : le terminal. Ensuite, stdout est dirigé vers le fichier. Stderr conserve la connexion précédente, donc l’erreur reste visible. 2>&1 établit une connexion à cet instant ; il ne fait pas suivre à stderr tous les changements ultérieurs de stdout.
Éliminer volontairement un flux
/dev/null élimine les données qui y sont écrites. find / -name passwd 2>/dev/null laisse les chemins correspondants sur stdout tout en masquant les messages de diagnostic tels que « Permission denied ». Ces messages peuvent indiquer des répertoires non explorés : les éliminer supprime donc aussi des informations sur les parties non couvertes par la recherche.
Protéger un fichier d’entrée
N’écris pas sort fruit.txt > fruit.txt. Le shell vide la destination avant que sort ne la lise. Utilise un autre chemin de sortie, vérifie le résultat, puis renomme le fichier. Pour sort en particulier, sort -o fruit.txt fruit.txt utilise l’option prévue pour le fichier de sortie afin de mettre à jour ce fichier en toute sécurité.
Bash peut aussi refuser l’écrasement accidentel :
set -o noclobber
Avec ce réglage, > ordinaire échoue pour un fichier ordinaire existant. >> ajoute toujours en fin de fichier. Utilise >| pour un écrasement volontaire, ou set +o noclobber pour désactiver le réglage. Cette protection est utile pour enregistrer des rapports répétés, mais elle ne modifie pas les options d’écriture de fichiers propres à une commande.
Points clés
>écrase le contenu, tandis que>>ajoute en fin de fichier ; utilise le descripteur 2 pour stderr.> all.txt 2>&1capture les deux flux, car les redirections sont traitées de gauche à droite.2>&1 > out.txtlaisse stderr à la destination précédente de stdout./dev/nullélimine le flux sélectionné, y compris les messages de diagnostic utiles.- Évite de rediriger vers un fichier d’entrée ;
sort -ofournit une solution prévue à cet effet. - Le réglage noclobber de Bash refuse
>ordinaire sur les fichiers ordinaires existants ;>|passe outre.
3Combine des commandes dans des pipelines
Les petites commandes de traitement de texte deviennent plus utiles lorsque leurs entrées et leurs sorties s’enchaînent. Un pipeline peut retirer un en-tête, sélectionner une colonne, regrouper les valeurs répétées et les compter sans créer de fichier après chaque étape. Chaque étape modifie ce que reçoit la suivante. Examine les étapes séparément pour savoir si un total erroné vient de la sélection, du tri ou du comptage, et enregistre les résultats intermédiaires lorsque tu as besoin de les examiner.
3.1 Relie des commandes avec des tubes et tee
Un tube, noté |, relie la sortie normale d’une commande à l’entrée de la suivante. Tu peux relier plusieurs petites opérations sans enregistrer de fichier temporaire entre elles.
Suivre le flux du texte
Dans ls /etc | wc -l, ls écrit les noms et wc -l compte les caractères de saut de ligne reçus. Une commande qui lit stdin, sélectionne ou modifie du texte et écrit sur stdout s’appelle un filtre. sort, uniq, wc, cut, grep, head et tail peuvent tous servir de filtres.
La forme générale est command1 | command2 | command3. Chaque étape reçoit la sortie de l’étape précédente, qui peut avoir une forme différente de celle du fichier d’origine. Une étape ultérieure ne peut pas récupérer les lignes ou les colonnes supprimées par une étape précédente.
Construire un comptage par étapes
Supposons que fruit.txt contient six lignes : « banana », « apple », « cherry », « apple », « banana », « apple ». Pour compter les noms différents, exécute d’abord :
sort fruit.txt
La sortie contient trois lignes « apple », deux lignes « banana » et une ligne « cherry ». Les noms identiques sont maintenant côte à côte. Ajoute une étape :
sort fruit.txt | uniq
uniq supprime les répétitions adjacentes et laisse « apple », « banana » et « cherry ». Enfin, sort fruit.txt | uniq | wc -l indique 3. Compter directement le fichier d’origine donnerait six lignes, ce qui répond à une autre question.
Exécute le pipeline à chaque ajout et examine son résultat avant d’ajouter la commande suivante. Pour une sortie très longue, ajoute temporairement | head afin de voir les dix premières lignes. Il est ainsi plus facile de repérer un en-tête qui n’a pas été retiré ou un champ mal sélectionné.
Garder les erreurs séparées
Un tube ordinaire transporte stdout, pas stderr. Avec un chemin existant et un chemin absent, ls /etc/hostname /nonexistent | wc -l compte l’unique ligne de liste normale. L’erreur apparaît toujours dans le terminal.
Pour inclure les messages de diagnostic dans les données, utilise ls /etc/hostname /nonexistent 2>&1 | wc -l, qui compte deux lignes dans cet exemple. |& dans Bash combine aussi stdout et stderr dans le tube. L’intérêt d’inclure les erreurs dépend du sens que tu veux donner au décompte final.
Les étapes s’exécutent simultanément. tail -f /var/log/app.log | grep ERROR affiche dans le terminal les nouvelles lignes ajoutées qui correspondent au motif. C’est un affichage en direct, pas un processus qui attend la fin du fichier. Les programmes peuvent toutefois mettre leur sortie en mémoire tampon ; l’affichage immédiat n’est donc pas garanti pour tous les pipelines.
Enregistrer une copie en cours de route
tee écrit son entrée à la fois dans un fichier et sur stdout :
sort fruit.txt | uniq | tee unique.txt | wc -l
Le terminal affiche 3, tandis que unique.txt stocke les trois noms. tee -a ajoute à la fin du fichier enregistré au lieu de le remplacer. Placer tee plus tôt enregistrerait une forme antérieure des données.
Un tube se connecte à une commande, tandis que > désigne un fichier. ls > less crée un fichier nommé « less » ; il ne lance pas le pageur. La commande réceptrice doit aussi lire stdin : transmettre du texte à echo ou à ls par un tube ne transforme pas ce texte en arguments.
Points clés
|relie stdout à stdin de la commande suivante.- Vérifie un pipeline étape par étape ; chaque étape reçoit la sortie de la précédente.
- stderr reste en dehors d’un tube ordinaire, sauf si tu combines les flux.
teeenregistre l’entrée et la transmet à la suite ;tee -aajoute en fin de fichier.- Le texte transmis par un tube arrive sur stdin ; il ne constitue pas une liste d’arguments de commande.
3.2 Compte et trie les lignes, puis supprime les doublons
Compter et trier sont des opérations distinctes. Avant d’utiliser un décompte, détermine si tu as besoin du nombre d’enregistrements, de mots, d’octets ou de valeurs distinctes. Avant de supprimer les doublons, vérifie si les lignes identiques sont déjà côte à côte.
Compter ce qu’il faut avec wc
wc file utilisé seul indique le nombre de lignes, de mots et d’octets, dans cet ordre, puis le nom du fichier. La liste de six lignes contenant « banana », « apple », « cherry », « apple », « banana », « apple » donne « 6 6 39 fruit.txt ». Chaque ligne contribue au total avec ses lettres et un octet de saut de ligne.
| Option | Ce qu’elle compte |
|---|---|
-l | Caractères de saut de ligne |
-w | Mots séparés par des caractères d’espacement |
-c | Octets |
-m | Caractères |
Un dernier fragment de texte sans saut de ligne n’est pas compté par wc -l. Un texte contenant « one », un saut de ligne puis « two » donne donc un décompte de 1. En UTF-8, « café » suivi d’un saut de ligne occupe six octets mais compte cinq caractères, car « é » occupe deux octets. Avec plusieurs fichiers d’entrée, wc affiche leurs décomptes et un total supplémentaire.
Choisir un tri textuel ou numérique
sort écrit les lignes triées sans modifier le fichier d’entrée. Son ordre par défaut suit les paramètres régionaux actifs. sort -f compare sans distinguer les majuscules des minuscules.
Le tri textuel compare les caractères : « 100 », « 25 », « 9 » apparaissent dans cet ordre, car leurs premiers chiffres sont « 1 », « 2 », « 9 ». sort -n compare les valeurs numériques et donne 9, 25, 100. Ajoute -r pour inverser l’ordre, comme dans sort -rn. sort -h comprend les suffixes de taille tels que « 2K », « 300M » et « 1G ».
Trier selon un champ
Pour des enregistrements séparés par des virgules, -t, définit le séparateur. -k3,3nr sélectionne seulement le champ 3, compare les valeurs numériquement et inverse l’ordre :
tail -n +2 scores.csv | sort -t, -k3,3nr | head -n 3
Avec « name,city,score » suivi de « Ana,Lisbon,82 », « Ben,Oslo,75 », « Chen,Lisbon,91 », « Dara,Oslo,68 » et « Eli,Lisbon,88 », le résultat donne Chen, Eli, puis Ana avec leurs enregistrements complets. La première étape retire l’en-tête. Sans cela, sa clé de score non numérique compte pour zéro lors du tri numérique.
Sans -t, des espaces ou des tabulations séparent les champs. -k2 étend la clé du champ 2 jusqu’à la fin de la ligne ; -k2,2 la limite au champ 2.
Regrouper les doublons avant de les compter
uniq compare chaque ligne aux lignes identiques adjacentes. Sur la liste de fruits non triée, il laisse les six lignes, car aucun nom identique n’est adjacent à un autre. sort fruit.txt | uniq affiche les trois noms différents ; sort -u fruit.txt peut aussi produire une liste triée sans doublons.
Après le tri, uniq -c indique le nombre de chaque suite : « 3 apple », « 2 banana », « 1 cherry », avec des espaces devant les nombres. uniq -d affiche un exemplaire de chaque valeur répétée, et uniq -u affiche seulement les valeurs présentes une fois. uniq -i ignore la casse dans ses comparaisons.
Pour obtenir d’abord les valeurs les plus fréquentes, utilise sort fruit.txt | uniq -c | sort -rn. Le premier tri regroupe les lignes identiques ; le dernier classe leurs décomptes. Omettre le premier tri compte séparément les suites dispersées.
Points clés
wc -lcompte les sauts de ligne,-wles mots,-cles octets et-mles caractères.sort -ncompare les nombres ;-rinverse l’ordre ;-htraite les suffixes de taille.sort -t, -k3,3nrtrie les enregistrements séparés par des virgules selon le champ 3, numériquement et par ordre décroissant.- Retire l’en-tête avant de trier les enregistrements de données.
uniqsupprime les répétitions adjacentes ; trie d’abord lorsque les valeurs identiques sont dispersées.uniq -ccompte les suites,-dsélectionne les valeurs répétées et-ucelles qui apparaissent une fois.sort | uniq -c | sort -rnregroupe les valeurs, les compte et classe les décomptes.
3.3 Extrais des colonnes avec cut
Un enregistrement contient souvent plus d’informations qu’il n’en faut pour répondre à une question. cut sélectionne des champs ou des positions fixes dans chaque ligne et écrit la sélection sur stdout. Il ne réorganise ni ne modifie le fichier d’origine.
Sélectionner des champs selon leur séparateur
Un délimiteur sépare les champs. Dans /etc/passwd, des deux-points séparent le nom d’utilisateur, le caractère de remplacement du mot de passe, l’identifiant utilisateur, l’identifiant de groupe, le nom complet, le répertoire personnel et le shell de connexion. Pour cet exemple d’enregistrement :
alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash
cut -d: -f1,6 affiche « alice:/home/alice ». Les numéros de champ commencent à 1 et le délimiteur reste entre les champs sélectionnés. cut -d: -f5 affiche « Alice Smith » ; l’espace intérieur fait partie de ce champ, car le délimiteur est un deux-points.
| Sélection | Champs affichés |
|---|---|
-f1,3 | Champs 1 et 3 |
-f2-4 | Champs 2 à 4 |
-f3- | Du champ 3 au dernier champ |
La liste sélectionne des champs sans définir un nouvel ordre. cut -d, -f3,1 affiche toujours le champ 1 suivi du champ 3. Par défaut, le séparateur est une tabulation : cut -f2 file sélectionne donc le deuxième champ séparé par des tabulations.
Une ligne sans délimiteur est affichée en entier. Par exemple, cut -f2 affiche « no tabs here » sans modification, car cette ligne ne contient pas de tabulation. Ajoute -s pour exclure les lignes sans délimiteur. Une ligne contenant des délimiteurs mais dépourvue d’un champ demandé est un cas différent ; -s ne vérifie pas de façon générale si les enregistrements sont complets.
Sélectionner des positions fixes
cut -c1-5 sélectionne les positions 1 à 5. Sur l’enregistrement de compte ci-dessus, il affiche « alice ». La sélection par position convient au texte à champs de largeur fixe, où les colonnes recherchées commencent aux mêmes endroits sur chaque ligne. La sélection par champ convient aux enregistrements dont les longueurs de champs varient mais dont les séparateurs restent constants.
Vérifier le comportement des séparateurs
Avec cut -d' ' -f2, chaque espace est un séparateur. Le texte « a b » a un deuxième champ vide entre ses deux espaces : le résultat est donc une ligne vide. Si les espaces répétés servent seulement à espacer les colonnes, tr -s ' ' | cut -d' ' -f2 réduit d’abord chaque suite d’espaces à un seul.
cut traite aussi les virgules à l’intérieur de valeurs entre guillemets comme des séparateurs. Une valeur CSV entre guillemets telle que « Smith, Ann » n’est pas automatiquement gardée ensemble. Utilise des exemples simples à champs délimités seulement lorsque les limites des champs correspondent réellement à la règle du délimiteur.
Compter les valeurs d’une colonne sélectionnée
Pour compter les villes dans scores.csv, commence par cut -d, -f2 scores.csv. Avec les enregistrements d’Ana, Ben, Chen, Dara et Eli, cette commande affiche « city », « Lisbon », « Oslo », « Lisbon », « Oslo », « Lisbon ». Puis :
cut -d, -f2 scores.csv | tail -n +2 | sort | uniq -c | sort -rn
Retirer la première ligne supprime « city ». Le tri regroupe les trois entrées Lisbon et les deux entrées Oslo ; uniq -c les compte et le dernier tri place « 3 Lisbon » avant « 2 Oslo ». Oublier l’étape qui retire l’en-tête crée une valeur supplémentaire, « 1 city », car ces commandes traitent aussi un en-tête comme du texte.
Points clés
cut -ddéfinit le délimiteur et-fsélectionne les champs numérotés à partir de 1.- Les listes de champs sélectionnent les champs dans leur ordre d’origine ;
-csélectionne des positions fixes. - Le délimiteur par défaut est une tabulation ;
-somet les lignes sans délimiteur. - Les espaces répétés créent des champs vides et
cutn’analyse pas les guillemets CSV. - Pour compter les occurrences, retire l’en-tête, sélectionne la valeur, regroupe les lignes identiques et compte-les.
4Recherche du texte avec grep et des expressions régulières
Rechercher du texte commence par déterminer ce qui constitue une correspondance. Tu peux avoir besoin d’une expression littérale, d’un mot entier, d’une ligne complète ou d’un motif tel que deux lettres suivies de quatre chiffres. grep peut afficher les lignes correspondantes ou indiquer leurs numéros, leur nombre et les noms des fichiers. Les expressions régulières décrivent les motifs, tandis que les guillemets empêchent le shell de les modifier au préalable. Tu partiras de correspondances simples pour arriver à des alternatives regroupées et à des parties répétées.
4.1 Recherche du texte dans les fichiers avec grep et ses principales options
grep recherche du texte et affiche normalement chaque ligne contenant une correspondance. Pour obtenir une recherche utile, commence par choisir le motif et le type de résultat dont tu as besoin : lignes, nombres, numéros de ligne ou noms de fichiers.
Commencer avec un motif entre guillemets
La forme habituelle est grep 'pattern' file. Sans argument désignant un fichier, grep lit stdin. Les recherches sont sensibles à la casse, sauf si tu ajoutes -i.
Supposons que server.log contient cinq entrées : une ligne INFO de démarrage, une ligne ERROR indiquant un disque plein, une ligne WARN de nouvelle tentative, une ligne contenant « error timeout » en minuscules et une ligne INFO de sauvegarde. grep 'ERROR' server.log affiche seulement la ligne ERROR en majuscules. grep -i 'error' server.log affiche les deux lignes d’erreur.
Place les motifs entre guillemets même lorsqu’ils semblent simples. grep 'disk full' server.log recherche les deux mots ensemble. Sans guillemets, grep disk full server.log utilise « disk » comme motif et traite « full » comme un autre nom de fichier. Les guillemets empêchent aussi le shell de développer les astérisques et d’autres caractères spéciaux avant que grep les reçoive.
Choisir la sortie nécessaire
| Option | Résultat |
|---|---|
-i | Chercher sans distinguer les majuscules des minuscules |
-v | Afficher les lignes qui ne correspondent pas |
-c | Afficher le nombre de lignes correspondantes |
-n | Faire précéder les correspondances de leur numéro de ligne |
-w | Exiger une correspondance sur un mot entier |
-x | Exiger une correspondance sur la ligne entière |
Les options se combinent : grep -ic 'error' server.log indique 2, tandis que grep -n 'WARN' server.log indique la ligne 3. -c compte les lignes correspondantes, pas le nombre d’occurrences qu’elles contiennent. Une ligne contenant « error error » compte pour un.
Considère les lignes « error », « terror », « errors » et « Error found ». grep 'error' seul trouve les trois premières. grep -w 'error' ne trouve que la première, car « error » n’est pas un mot entier dans « terror » ou « errors ». Ajouter -i permet aussi de trouver « Error found ». -x exige une ligne entièrement correspondante : « Error found » ne correspond donc toujours pas à une recherche de « error » sur la ligne entière.
Effectuer une recherche dans plusieurs fichiers
Lorsqu’une recherche porte sur plusieurs fichiers, grep fait normalement précéder les correspondances des noms de fichiers. grep -r 'TODO' notes effectue une recherche dans les fichiers de toute l’arborescence du répertoire. Ajoute -l pour afficher seulement les noms des fichiers contenant des correspondances : grep -rl 'TODO' notes. -L en majuscule liste les fichiers sans correspondance. Ces résultats sélectionnent des fichiers ; ils ne comptent pas les lignes correspondantes.
Déterminer si le motif est littéral
Par défaut, grep interprète une expression régulière. Un point correspond à n’importe quel caractère unique : '10.0.0.7' peut donc aussi correspondre à « 10a0b0c7 ». grep -F '10.0.0.7' file recherche le texte exact. Échapper chaque point, comme dans '10\.0\.0\.7', rend aussi les points littéraux.
grep -q supprime la sortie normale et communique par son code de retour : 0 en cas de correspondance, 1 en l’absence de correspondance et normalement 2 en cas d’erreur dans GNU grep. Un fichier d’entrée manquant est une erreur, pas une preuve que le motif était absent.
Dans un pipeline, grep -i 'error' server.log | wc -l compte les lignes correspondantes comme le fait grep -ic. La première forme permet d’ajouter d’autres filtres entre la sélection des lignes et leur comptage.
Points clés
grepaffiche les lignes correspondantes et respecte la casse, sauf si-iest utilisé.- Place le motif entre guillemets pour que le shell le transmette intact.
-ccompte les lignes correspondantes ;-nles numérote ;-vsélectionne celles qui ne correspondent pas.-wexige un mot entier et-xune ligne entière.-reffectue une recherche dans une arborescence,-lliste les fichiers contenant une correspondance et-Lceux qui n’en contiennent pas.-Ftraite un motif comme du texte littéral ;-qindique le résultat d’une recherche par le code de retour.
4.2 Écris des expressions régulières de base
Une expression régulière décrit le texte susceptible de correspondre. grep cherche normalement une partie correspondante n’importe où dans une ligne, puis affiche la ligne entière. La plupart des lettres correspondent à elles-mêmes ; les caractères spéciaux décrivent des positions, des choix ou des répétitions.
Trouver un caractère ou une position
Le point . correspond à un caractère dans une ligne. Avec les lignes « cat », « cart », « coat », « cut », « act », « scat » et « color », le motif 'c.t' correspond à « cat », « cut » et « scat ». Cette dernière ligne contient « cat », qui est une partie correspondante. « coat » contient deux caractères entre « c » et « t », donc un seul point ne peut pas couvrir les deux.
Utilise des ancres pour imposer des positions. ^ marque le début d’une ligne et $ sa fin :
| Motif | Ce qu’il exige |
|---|---|
^c | Une ligne commençant par « c » |
t$ | Une ligne se terminant par « t » |
^c.t$ | Exactement « c », un caractère, puis « t » |
^$ | Une ligne vide |
grep '^c.t$' words.txt affiche seulement « cat » et « cut ». Ancrer les deux extrémités exclut une ligne plus longue telle que « scat ».
Choisir un caractère dans un ensemble
Une expression entre crochets correspond à un caractère. [ao] signifie « a » ou « o » : 'c[ao]t' correspond donc à la partie « cat » de « cat » et de « scat ». [0-9] désigne un chiffre. Un accent circonflexe placé juste après le crochet ouvrant inverse l’ensemble : 'c[^a]t' correspond à « cut », mais pas à « cat ». À cet endroit, l’accent circonflexe exclut un caractère ; il ne marque pas le début d’une ligne.
Les classes nommées décrivent des catégories selon les paramètres régionaux actifs. [[:digit:]] sélectionne un chiffre, [[:alpha:]] une lettre, [[:alnum:]] une lettre ou un chiffre, et [[:upper:]] ou [[:lower:]] une lettre dans la casse indiquée. [[:space:]] comprend les espaces, les tabulations et d’autres caractères d’espacement. Garde les deux paires de crochets : le nom de la classe se trouve à l’intérieur de l’expression d’ensemble extérieure.
Répéter l’élément précédent
* signifie zéro ou plusieurs occurrences de l’élément situé juste avant. 'ca*t' peut correspondre à « ct », « cat » ou « caat ». Il correspond aussi à « act », car cette ligne contient « ct », avec zéro occurrence de « a ». Pour trouver une suite quelconque de caractères, combine le point et l’astérisque sous la forme .*.
'^c.*t$' correspond à « cat », « cart », « coat » et « cut » dans la liste de mots. Un caractère générique de nom de fichier et une expression régulière utilisent des règles différentes pour l’astérisque : le motif du shell *.txt décrit les noms se terminant par « .txt », mais l’expression régulière pour cette fin est '\.txt$'.
Rendre un caractère spécial littéral
Une barre oblique inverse peut supprimer un sens particulier. \. correspond à un véritable point, \* à un astérisque et \[ à un crochet ouvrant. [.] sélectionne aussi un point littéral. grep '\.conf$' file sélectionne les lignes se terminant par « .conf ».
Une recherche dans une configuration peut retirer les commentaires simples et les lignes vides avec grep -v '^#' app.conf | grep -v '^$'. Le premier test ne reconnaît les commentaires que lorsque « # » est le premier caractère. La syntaxe de base utilisée par défaut traite ?, +, les accolades, | et les parenthèses sans échappement comme des caractères ordinaires. GNU grep prend en charge les formes d’opérateurs précédées d’une barre oblique inverse ; grep -E fournit la syntaxe étendue sans ces barres obliques inverses.
Points clés
- grep cherche une partie correspondante, sauf si des ancres exigent la ligne entière.
.correspond à un caractère ;^et$ancrent le début et la fin.- Une expression entre crochets sélectionne un caractère ;
[^a]exclut « a ». - Les classes nommées telles que
[[:digit:]]nécessitent les deux paires de crochets. *répète l’élément précédent zéro ou plusieurs fois ;.*correspond à une suite de caractères.- Utilise
\.ou[.]pour un point littéral.
4.3 Utilise des expressions régulières étendues avec grep -E
Les expressions régulières étendues ajoutent des moyens utiles d’exprimer des parties facultatives, des groupes répétés et des alternatives. Utilise grep -E pour que le motif soit lu selon cette syntaxe. Le point, les ancres, les ensembles et l’astérisque conservent leur sens précédent.
Compter les répétitions
Un opérateur suit l’élément qu’il modifie. Cet élément peut être un caractère, une expression entre crochets ou un groupe :
| Opérateur | Nombre d’occurrences |
|---|---|
? | Zéro ou une |
+ | Une ou plusieurs |
{n} | Exactement n |
{n,} | Au moins n |
{n,m} | De n à m |
'logs?' correspond à « log » et à « logs » : seul le « s » est facultatif. 'ca+t' exige au moins un « a » ; il correspond donc à « cat » et à la partie correspondante de « scat », mais pas à « ct » dans « act ». Omettre -E transforme un point d’interrogation ou un signe plus non échappé en texte littéral dans la syntaxe de base.
Pour un code entier composé de deux lettres majuscules et de quatre chiffres, utilise :
grep -E '^[A-Z]{2}[0-9]{4}$' codes.txt
« AB1234 » et « QZ0042 » correspondent. « A12345 » n’a qu’une lettre initiale, « ab1234 » utilise des minuscules et « XY98765 » a un chiffre de trop. Les deux ancres empêchent qu’une partie d’un code plus long, qui semble valide, soit acceptée. Ajouter -i autoriserait aussi le code en minuscules.
Regrouper des alternatives
| indique une alternative dans un motif étendu. 'cat|cut' recherche l’un ou l’autre mot n’importe où dans une ligne. Les parenthèses définissent les limites d’un groupe : 'c(a|o)t' choisit « a » ou « o » entre « c » et « t ». Un quantificateur placé ensuite s’applique au groupe entier : '(ab)+' correspond donc à une ou plusieurs occurrences de « ab ».
Garde le motif entre guillemets. Dans grep -E cat|cut words.txt, le shell interprète la barre verticale non protégée comme un tube entre des commandes. Dans grep -E 'cat|cut' words.txt, il transmet ce caractère à grep comme partie d’un seul motif.
Afficher les correspondances plutôt que les lignes complètes
-o affiche seulement les parties correspondantes, une par ligne de sortie. La commande ci-dessous extrait d’une ligne plus longue une suite de nombres séparés par des points :
grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' server.log
La partie entre parenthèses représente un à trois chiffres suivis d’un point littéral ; {3} la répète trois fois. La dernière partie ajoute un à trois chiffres. Elle extrait « 10.0.0.7 » d’une ligne qui le contient, mais accepte aussi « 999.999.999.999 ». Une correspondance sur la forme ne vérifie pas si chaque nombre se trouve dans la plage valide d’une adresse.
Supprimer ensemble les lignes vides et les commentaires
grep -Ev '^[[:space:]]*(#|$)' app.conf sélectionne les paramètres actifs. Lis le motif dans l’ordre : commencer au début, autoriser des caractères d’espacement, puis trouver soit « # », soit la fin de la ligne. Il reconnaît donc les commentaires indentés et les lignes composées uniquement d’espaces, ainsi que les lignes vides. -v conserve les lignes qui ne correspondent pas à cette description, telles que « port=8080 ». L’ancien nom de commande egrep est obsolescent dans GNU grep ; utilise grep -E.
Points clés
grep -Eactive comme opérateurs?,+, les accolades,|et les parenthèses sans échappement.- Les quantificateurs s’appliquent au caractère, à l’ensemble ou au groupe qui les précède.
- Place des ancres autour d’un motif lorsque l’enregistrement entier doit y correspondre.
|indique des alternatives et les parenthèses les regroupent ; place le motif entre guillemets.-oaffiche chaque partie correspondante, pas la ligne entière.- Une expression régulière qui vérifie une forme peut néanmoins accepter des valeurs non valides dans le système réel.
5Trouve des fichiers selon leur nom, leur type, leur taille et leur ancienneté
Une recherche de fichier demande où se trouve un élément ; une recherche de texte demande ce qu’il contient. Commence une recherche de fichier dans le bon répertoire, puis précise-la selon le nom, le type, la taille ou l’ancienneté. Tu peux transmettre les chemins correspondants à une autre commande sans découper les noms qui contiennent des espaces. Une recherche actuelle dans l’arborescence et une consultation rapide d’une base de données ont des atouts différents. Avant d’appliquer une action à de nombreux éléments correspondants, examine la sélection et comprends à quel moment l’action s’exécute.
5.1 Effectue des recherches dans l’arborescence avec find
find parcourt une arborescence et teste les éléments qu’il rencontre. Choisis d’abord le répertoire de départ : find project affiche project lui-même et les entrées situées en dessous. L’ajout de tests restreint la sélection.
Faire correspondre noms, chemins et types
find project -name '*.txt' sélectionne les noms se terminant par « .txt » partout sous le répertoire de départ. Place le caractère générique entre guillemets pour que le shell le transmette sans modification. -name est sensible à la casse : pour trouver « Guide.TXT » sans tenir compte de la casse, il faut utiliser -iname '*.txt'.
Le motif doit correspondre au nom entier de l’élément, sans ses répertoires parents. -name 'guide' ne correspond pas à « guide.txt » ; -name 'guide*' y correspond. Utilise -path '*/src/*' lorsque la partie du chemin correspondant au répertoire compte. find affiche les chemins dans l’ordre du parcours : ajoute | sort si tu veux les trier.
-type f sélectionne les fichiers ordinaires, -type d les répertoires et -type l les liens symboliques. find project -type f -name '*.txt' exige que les tests sur le type et sur le nom soient tous deux satisfaits. Un répertoire nommé « notes.txt » échoue au test sur le type même si son nom convient.
Comprendre les comparaisons de taille
-size compare une taille après l’avoir arrondie à l’unité supérieure dans l’unité choisie. c signifie octets, k désigne des kibioctets de 1 024 octets, M des mébioctets de 1 048 576 octets et G des gibioctets. Un signe plus initial signifie supérieur à, un signe moins inférieur à, et l’absence de signe égal au nombre d’unités indiqué.
Pour -size +100M, la taille arrondie doit dépasser 100 MiB. Un fichier qui dépasse 100 MiB d’un octet est arrondi à 101 unités et satisfait le test. Un fichier non vide de moins de 1 MiB est arrondi à une unité : -size -1M ne trouve donc que les fichiers vides. Utilise un test en octets pour un seuil exact en octets, ou une unité plus petite pour obtenir une plage utile de petits fichiers.
Tester l’ancienneté et limiter la profondeur
-mtime utilise les périodes complètes de 24 heures écoulées depuis la modification. -mtime -7 sélectionne les éléments modifiés il y a moins de sept jours. -mtime +30 sélectionne les éléments dont l’ancienneté dépasse 30 périodes complètes : au moins 31 jours. -mmin -30 utilise les minutes pour les modifications récentes. -user alice sélectionne un propriétaire et -empty sélectionne les fichiers ou répertoires vides.
Pour examiner le répertoire de départ et ses entrées immédiates sans entrer dans les sous-répertoires, utilise find project -maxdepth 1 -type f. Place -maxdepth avant les tests.
Combiner les tests et protéger les motifs
Des tests écrits côte à côte signifient ET. -o signifie OU, comme dans find project -name '*.txt' -o -name '*.md'. ! -name '*.c' inverse un test sur le nom. Pour une sélection simple, clarifie la relation entre les tests avant d’ajouter des actions.
Un caractère générique non protégé est développé par le shell dans ton répertoire courant. Si seul notes.txt y correspond, find . -name *.txt devient une recherche de ce seul nom et manque les autres fichiers texte. Si plusieurs noms locaux correspondent, la commande peut échouer parce que des noms supplémentaires apparaissent dans l’expression de test.
Une recherche dans des répertoires protégés peut signaler « Permission denied ». 2>/dev/null masque ces erreurs, mais ne permet pas de rechercher dans les répertoires illisibles. find examine l’arborescence pendant son exécution ; un système de fichiers en activité peut encore changer avant qu’une commande ultérieure utilise les chemins renvoyés.
Points clés
findparcourt l’arborescence à partir d’un chemin de départ et affiche les éléments qui satisfont ses tests.- Place les caractères génériques des noms entre guillemets ;
-nameteste le nom entier et-pathle chemin complet. - Utilise
-type f,doulpour les fichiers ordinaires, les répertoires ou les liens symboliques. - Les tests de taille arrondissent à l’unité supérieure avant la comparaison ;
-size -1Msélectionne seulement les fichiers vides. -mtime +30commence à 31 jours complets, tandis que-mminutilise les minutes.- Des tests côte à côte signifient ET,
-osignifie OU et!inverse un test.
5.2 Agis sur les fichiers trouvés et utilise des recherches plus rapides
Après avoir sélectionné des fichiers, tu peux transmettre leurs chemins à une autre commande. Garder la sélection et l’action dans la même expression find évite de traiter les espaces à l’intérieur des noms de fichiers comme des séparateurs entre les noms.
Exécuter une commande sur chaque élément correspondant
L’action -exec command {} \; exécute la commande une fois par élément correspondant. find remplace {} par le chemin de cet élément. Par exemple :
find project -name 'main.c' -exec wc -l {} \;
Si l’élément correspondant est project/src/main.c, cela exécute wc -l project/src/main.c. Le point-virgule échappé termine l’action. La barre oblique inverse empêche le shell d’utiliser d’abord le point-virgule pour terminer toute la commande shell.
Utilise {} + pour transmettre des lots de chemins à un nombre réduit d’exécutions de la commande :
find notes -type f -name '*.txt' -exec grep -l 'TODO' {} +
grep reçoit les chemins des fichiers sélectionnés comme arguments et liste ceux qui contiennent « TODO ». Les deux formes conservent un chemin tel que « notes/team plan.txt » comme un seul argument. La forme avec + réduit le travail de lancement lorsque de nombreux fichiers correspondent.
Combiner sélection de fichiers et sélection de texte
find teste les propriétés des fichiers ; grep examine leur contenu. Ajoute -mtime -7 avant l’action pour rechercher seulement dans les fichiers texte modifiés récemment :
find notes -type f -name '*.txt' -mtime -7 -exec grep -l 'TODO' {} +
Les tests sur le nom, le type et l’ancienneté sélectionnent d’abord les fichiers. Ensuite, grep recherche dans leur texte. grep -r seul peut rechercher dans le contenu d’une arborescence, mais ne remplace pas ces tests sur les propriétés des fichiers.
Ne supprimer qu’après avoir vérifié la sélection
-delete supprime les éléments correspondants sans confirmation ni possibilité d’annulation. Exécute d’abord la sélection sans action de suppression et lis les chemins. Ensuite seulement, ajoute -delete à la fin, comme dans find /tmp/build -type f -name '*.tmp' -delete. Pour obtenir une demande de confirmation par élément, -ok rm {} \; pose la question avant d’exécuter la commande de suppression.
Les actions s’exécutent au fur et à mesure de l’évaluation de l’expression. Placer -delete avant -name '*.tmp' permet à la suppression d’avoir lieu avant que ce test sur le nom puisse la restreindre. Un test ultérieur ne peut pas protéger un élément d’une action déjà effectuée.
Choisir une recherche plus rapide lorsqu’elle convient
locate guide.txt recherche dans un index de chemins enregistrés contenant « guide.txt ». Il peut répondre rapidement sans parcourir le disque. Comme la base est actualisée périodiquement, un nouveau fichier peut être absent ou un chemin supprimé peut subsister. updatedb reconstruit l’index ; une mise à jour à l’échelle du système nécessite généralement des droits d’administration. Certaines distributions nécessitent un paquet facultatif tel que plocate.
which grep cherche un fichier programme exécutable dans les répertoires de PATH et indique souvent /usr/bin/grep. Il ne décrit pas toutes les façons dont Bash résout une commande. type echo, par exemple, peut identifier une commande interne même lorsqu’un programme externe nommé « echo » existe aussi. Utilise type commandname pour connaître l’interprétation de Bash, find pour une recherche à jour dans l’arborescence et locate pour une recherche rapide de nom dans l’index.
Points clés
-exec command {} \;s’exécute une fois par chemin ;{} +regroupe les chemins par lots.- Utilise
findpour les propriétés des fichiers et grep pour leur contenu, en les combinant si nécessaire. - Examine les éléments à supprimer, puis place
-deleteaprès les tests qui restreignent la sélection. locaterecherche dans un index qui peut ne pas être à jour.whichtrouve les fichiers exécutables dans PATH ;typeexplique comment Bash résout une commande.
6Modifie des fichiers texte avec nano et vi
Les éditeurs de terminal te permettent de modifier des notes et des fichiers de configuration pendant une session distante ou sur un système sans bureau graphique. nano te permet de saisir du texte immédiatement et affiche des raccourcis en bas de l’écran. vi attribue des fonctions différentes aux touches selon le mode : changer de mode fait donc partie de la modification. Exerce-toi à ouvrir un fichier, à rechercher du texte, à faire une petite modification, puis à enregistrer ou à quitter volontairement ; ces étapes comptent autant que la connaissance d’une commande de suppression.
6.1 Modifie et enregistre un fichier avec nano
nano notes.txt ouvre du texte dans un éditeur de terminal. Tu peux te déplacer avec les touches fléchées et saisir directement du texte. Si le fichier n’existe pas, nano ouvre un tampon vide, c’est-à-dire le texte de travail conservé en mémoire ; l’enregistrement crée le fichier sur le disque.
Lire les indications de raccourcis
Les lignes du bas affichent des combinaisons de touches. ^ signifie Ctrl : ^X signifie donc Ctrl+X. M- signifie Méta, généralement Alt : M-U signifie donc Alt+U. Ctrl+G ouvre l’aide. Ces indications désignent des touches à presser ensemble, pas des caractères à saisir dans le fichier.
Faire et enregistrer une petite modification
Pour remplacer « port=8080 » par « port=9090 » dans app.conf :
- Exécute
nano app.conf. - Appuie sur Ctrl+W, saisis « 8080 » et appuie sur Entrée.
- À la correspondance, supprime les quatre chiffres et saisis « 9090 ».
- Appuie sur Ctrl+O, puis sur Entrée pour confirmer le nom du fichier et enregistrer.
- Appuie sur Ctrl+X pour quitter.
De retour dans le shell, grep 'port' app.conf devrait afficher « port=9090 ». Cela vérifie le fichier enregistré, et pas seulement ce qui était visible dans l’éditeur.
Ctrl+O correspond à Write Out, la commande d’enregistrement ; ce n’est pas une commande d’ouverture de fichier. Ctrl+R lit le contenu d’un autre fichier dans le tampon courant à l’emplacement du curseur. Confondre ces actions peut insérer du texte indésirable dans le fichier que tu modifies.
Rechercher, remplacer et se déplacer
Ctrl+W recherche du texte. Alt+G va au numéro de ligne demandé, ce qui est utile lorsqu’un message d’erreur indique une ligne précise. Ctrl+C affiche la ligne et la colonne courantes.
Alt+R, également accessible par Ctrl+, lance le remplacement. Saisis le texte à trouver, puis son remplacement. Pour chaque correspondance, réponds Y pour remplacer ou N pour passer ; A remplace tout. Choisir les remplacements individuellement est utile lorsque les mêmes chiffres apparaissent dans plusieurs paramètres et qu’un seul doit changer.
Déplacer du texte et annuler des modifications
| Raccourci | Action |
|---|---|
| Ctrl+K | Couper toute la ligne courante |
| Ctrl+U | Coller le texte coupé à l’emplacement du curseur |
| Alt+A | Commencer à marquer une sélection |
| Alt+U / Alt+E | Annuler / rétablir |
Appuyer plusieurs fois sur Ctrl+K recueille des lignes consécutives. Avec une sélection marquée, Ctrl+K coupe le texte marqué au lieu de toute la ligne. Ctrl+U insère ensuite ce texte à l’emplacement du curseur. L’annulation est utile juste après une coupe ou un remplacement accidentel.
Quitter volontairement
Ctrl+X quitte. Si le tampon contient des modifications non enregistrées, nano demande s’il faut les enregistrer. Y enregistre, puis Entrée confirme le nom ; N quitte sans enregistrer ces modifications ; Ctrl+C annule la sortie et revient à la modification. Répondre N revient à décider d’abandonner le travail, pas à continuer la modification.
nano -l app.conf affiche les numéros de ligne et nano +12 app.conf commence à la ligne 12. Si l’enregistrement échoue faute de droits, le tampon modifié n’a pas été enregistré à ce chemin. Les fichiers système nécessitent les droits appropriés, par exemple sudo nano /etc/hosts lorsqu’une modification autorisée du système nécessite un accès administrateur. Pour t’exercer, utilise un fichier dans ton propre répertoire.
Points clés
- nano accepte immédiatement le texte saisi ; un nouveau fichier est créé lors de l’enregistrement.
- Dans les indications de raccourcis,
^signifie Ctrl etM-signifie généralement Alt. - Ctrl+O puis Entrée enregistrent ; Ctrl+X quitte et pose une question en cas de modifications non enregistrées.
- Ctrl+W recherche, Alt+R remplace et Alt+G va à une ligne.
- Ctrl+K coupe, Ctrl+U colle et Alt+U annule.
6.2 Utilise les différents modes de vi
vi notes.txt ouvre un éditeur de terminal en mode normal. Dans ce mode, une touche telle que x est une commande. Pour saisir du texte, passe d’abord en mode insertion. Sur de nombreux systèmes Linux, vi lance Vim ou un autre éditeur compatible avec vi.
Garder à l’esprit le mode actif
| Mode | Fonction | Comment y accéder |
|---|---|---|
| Normal | Se déplacer, supprimer, copier et lancer des commandes | Échap |
| Insertion | Saisir du texte dans le tampon | i, a, o ou une autre commande d’insertion |
| Ligne de commande | Saisir des commandes telles que l’enregistrement | : depuis le mode normal |
Vim affiche « -- INSERT -- » pendant l’insertion. Échap revient au mode normal. Depuis le mode normal, i insère avant le curseur et a après. I commence avant le premier caractère non blanc de la ligne, en conservant l’indentation ; A ajoute à la fin. o ouvre une ligne en dessous et O une ligne au-dessus.
Se déplacer sans saisir de texte
En mode normal, h, j, k et l déplacent respectivement vers la gauche, le bas, le haut et la droite. Les touches fléchées fonctionnent aussi. w va au mot suivant, 0 au début de la ligne et $ à sa fin. G va à la dernière ligne. 1G va à la première ; Vim propose aussi gg. Un nombre avant G sélectionne une ligne : 12G va donc à la ligne 12. :12 puis Entrée font la même chose. Les nombres répètent aussi les déplacements : 5j descend de cinq lignes.
Modifier depuis le mode normal
x supprime le caractère sous le curseur. dd coupe une ligne ; 3dd coupe trois lignes. yy copie une ligne. Pour du texte composé de lignes entières, p colle sous la ligne courante et P au-dessus. Pour du texte composé de caractères, p colle après le curseur et P avant.
cw remplace le reste du mot courant et passe en mode insertion. r suivi d’un caractère remplace un seul caractère. u annule une modification ; Ctrl+R dans Vim la rétablit. Un point . répète la dernière modification.
Trouver et modifier un paramètre
Pour remplacer « 8080 » par « 9090 » dans app.conf, exécute vi app.conf, puis saisis /8080 et appuie sur Entrée. Au premier « 8 », saisis cw, saisis « 9090 », puis appuie sur Échap. Saisis :wq et appuie sur Entrée pour enregistrer et quitter.
Cherche vers l’arrière avec ?text puis Entrée. n répète la recherche dans le sens actuel et N l’inverse. Les recherches acceptent les expressions régulières. Pour remplacer chaque occurrence dans tout un fichier, :%s/8080/9090/g utilise % pour toutes les lignes et g pour toutes les occurrences sur chaque ligne. :set number affiche les numéros de ligne pendant la modification.
Enregistrer ou quitter volontairement
Depuis le mode normal, :w puis Entrée enregistrent ; :w newname.txt enregistre sous un nouveau nom. :q ne quitte que si aucune modification non enregistrée ne l’en empêche. :wq, :x ou ZZ enregistrent et quittent. :q! abandonne les modifications non enregistrées et quitte.
Si la saisie déplace le curseur ou supprime du texte de façon inattendue, appuie sur Échap pour revenir au mode normal, puis utilise u pour annuler les modifications indésirables avant de continuer. Passe en mode insertion avant de saisir le texte de remplacement. Lorsque tu quittes une tentative de modification, choisis d’enregistrer ou d’abandonner ; le point d’exclamation dans :q! autorise l’abandon du travail non enregistré.
Points clés
- vi démarre en mode normal ; passe en mode insertion pour saisir du texte et appuie sur Échap pour revenir.
i,a,oet leurs formes en majuscules choisissent où commence l’insertion.ddcoupe une ligne,yyla copie etpcolle les lignes entières en dessous ou les caractères après le curseur.uannule et.répète la dernière modification./textcherche vers l’avant ;nrépète la recherche etNen inverse le sens.:wqenregistre et quitte ;:q!abandonne les modifications non enregistrées et quitte.
Tubes et redirection sous Linux : exemples
1Lis un fichier sans perdre ta place
10 étapes
- 1IntroductionChoisis la quantité de texte à afficher
Un terminal peut afficher un fichier entier, un écran à la fois ou seulement une partie sélectionnée. Ce choix influe sur la facilité avec laquelle tu trouves ce qui compte.
Utilise une courte note pour apprendre
cat, puis passe àlesspour un fichier trop long pour tenir à l’écran. Enfin, utiliseheadettaillorsque tu connais la partie dont tu as besoin. Ces commandes lisent le texte sans modifier le fichier enregistré. - 2ExempleRéunis deux courtes notes
a.txtcontient « a » et « b » sur des lignes séparées.b.txtcontient « c d ». Exécutecat -n a.txt b.txt.La sortie contient trois lignes numérotées, dans cet ordre. La numérotation se poursuit du premier fichier au second ; les numéros ne sont ajoutés qu’à la sortie. Pour enregistrer le texte d’origine réuni sans numérotation, exécute
cat a.txt b.txt > ab.txt. - 3ExplicationOuvre une vue de lecture
Exécute
less /etc/servicespour lire un fichier long écran par écran. Le programme garde la vue ouverte et attend des touches de navigation.Espace avance d’un écran,
brecule et les touches fléchées permettent de parcourir les lignes.gva à la première ligne ;Gà la dernière. Appuie surqpour fermer la vue et revenir au shell. L’absence d’invite de commande est normale tant que le pageur est ouvert. - 4ExempleRecherche et poursuis la recherche
Dans
less, saisis/sshet appuie sur Entrée pour rechercher « ssh » vers l’avant. Appuie surnpour passer à la correspondance suivante dans ce sens ou surNpour aller dans le sens opposé.Une recherche vers l’arrière commence par
?ssh. Après cette recherche,ncontinue vers l’arrière. Le sens dépend de la recherche que tu as lancée.less -N fileajoute les numéros de ligne si tu dois noter l’emplacement d’une correspondance. - 5DéfiTrouve la correspondance précédente
Tu as recherché « listen » vers l’avant dans un long fichier avec less. Tu veux revenir à la correspondance précédente, puis quitter le pageur. Sur quelles touches appuies-tu ?
---reveal---
Appuie sur
Npour te déplacer dans le sens opposé à la recherche vers l’avant, puis surqpour quitter.nen minuscule continuerait vers l’avant. C’est la fermeture du pageur qui rétablit l’invite de commande ; atteindre une correspondance ou la fin du fichier ne le ferme pas. - 6ExplicationChoisis un nombre ou une ligne de départ
head -n 4 fileaffiche les quatre premières lignes.tail -n 4 fileaffiche les quatre dernières. Sans-n, chaque commande affiche dix lignes par défaut.Un signe plus change le rôle de tail :
tail -n +4 filecommence à la ligne 4 et affiche tout ce qui suit. Pour un fichier comportant une ligne d’en-tête,tail -n +2 fileretire cet en-tête. La commande conserve tous les enregistrements de données, pas seulement les deux derniers. - 7ExempleSélectionne les lignes 11 à 20
Supposons qu’un fichier contient les nombres de 1 à 100, un par ligne. Commence par
head -n 20 numbers.txt, qui conserve de 1 à 20.Ajoute
| tail -n 10. Les dix dernières lignes de l’entrée sélectionnée vont de 11 à 20. Les deux extrémités comptent : cette plage contient donc dix lignes. Demander onze lignes à tail inclurait aussi la ligne 10 et déplacerait le début vers l’arrière. - 8DéfiChoisis une autre plage au milieu
Un fichier contient au moins 17 lignes. Écris un pipeline avec head et tail qui affiche les lignes 12 à 17, en incluant les deux extrémités.
---reveal---
Utilise
head -n 17 file | tail -n 6. Conserve d’abord les lignes 1 à 17, puis les six dernières de cette sélection : 12, 13, 14, 15, 16 et 17. Un nombre de cinq omettrait la ligne 12, car les extrémités sont incluses dans la plage demandée. - 9DéfiExamine le texte le plus récent et poursuis la surveillance
Tu dois voir les dernières entrées d’un long fichier d’application et continuer à les surveiller à mesure que de nouvelles arrivent. Quelle commande convient et comment la quittes-tu ?
---reveal---
Utilise
tail -f app.log, puis Ctrl+C lorsque tu as terminé.tailseul afficherait la fin actuelle puis quitterait.tail -Fest utile lorsque le programme remplace le fichier lors d’une rotation, car il continue à suivre le nom du fichier malgré son remplacement. - 10RécapitulatifUtilise la vue adaptée à la tâche
Pour un fichier court en entier, utilise
cat; pour naviguer et rechercher, ouvreless. Un pageur reste ouvert jusqu’à ce que tu le quittes.Utilise
headettailpour le début, la fin ou une plage au milieu. Dans le nombre de lignes de tail, lis un signe plus comme une position de départ. Pour une vue en direct, suis le texte ajouté avectail -fet arrête avec Ctrl+C. La sélection fonctionne aussi lorsque le texte arrive par un tube.
2Suis le parcours des entrées, des résultats et des erreurs
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionTrace trois voies distinctes
- 2ExplicationNomme les flux standard
- 3ExempleFournis les mêmes données par une autre voie
- 4DéfiTermine la saisie au clavier
- 5ExempleFournis plusieurs lignes sous une commande
- 6ExplicationChoisis entre remplacer et ajouter
- 7ExempleRegroupe les résultats et les messages de diagnostic
- 8DéfiInverse les connexions
- 9ConseilGarde l’entrée intacte
- 10DéfiCompte les entrées et sépare un message de diagnostic
- 11RécapitulatifSuis la mise en place par le shell
3Construis un rapport textuel utile
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDonne une tâche à chaque étape
- 2ExplicationRelie les deux commandes
- 3DéfiChoisis un tube ou un fichier
- 4ExplicationSache ce que mesure la commande de comptage
- 5ExempleDistingue le tri du comptage
- 6DéfiExplique pourquoi un doublon subsiste
- 7ExplicationSélectionne la colonne utile
- 8ExempleRetire l’en-tête et examine les valeurs
- 9DéfiVérifie une hypothèse sur le séparateur
- 10ExempleRegroupe les valeurs sélectionnées
- 11ExempleClasse les décomptes
- 12LienConserve un résultat avant le comptage final
- 13DéfiDiagnostique une catégorie supplémentaire
- 14RécapitulatifVérifie ce qui circule entre les étapes
4Construis des motifs correspondant au texte recherché
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDétermine ce qui constitue une correspondance
- 2ExplicationChoisis un résultat de recherche
- 3ExempleDistingue un mot d’une ligne
- 4DéfiRecherche une notation exacte de version
- 5ConseilEffectue une recherche dans un répertoire ou sans affichage
- 6ExplicationSitue une correspondance dans la ligne
- 7ExempleSélectionne un caractère dans un ensemble
- 8Point cléAutorise zéro occurrence
- 9DéfiTrouve une fin littérale de nom de fichier
- 10ExplicationActive les opérateurs étendus
- 11ExempleVérifie un code entier
- 12ExempleRegroupe un choix ou une partie répétée
- 13DéfiExtrais des parties et examine leurs limites
- 14DéfiNe garde que les paramètres actifs
- 15RécapitulatifVérifie séparément le motif et le résultat
5Sélectionne les fichiers avant d’agir sur eux
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDistingue les noms des contenus
- 2ExplicationChoisis le répertoire de départ
- 3ExempleCombine le type et le nom
- 4DéfiConserve le caractère générique pour find
- 5ExplicationCompare les tailles arrondies en unités
- 6DéfiInterprète le seuil en jours
- 7ExplicationTransmets des chemins comme arguments
- 8ExempleRecherche seulement dans les contenus sélectionnés
- 9ConseilPlace une action destructive après ses tests
- 10ExplicationChoisis un index ou une recherche de commande
- 11DéfiChoisis une vérification à jour du contenu
- 12RécapitulatifAdapte la recherche aux informations nécessaires
6Effectue et enregistre une petite modification dans le terminal
13 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionDistingue le texte de travail du texte enregistré
- 2ExplicationLis les commandes de nano
- 3ExempleTrouve et remplace une valeur
- 4DéfiDéplace une ligne et corrige une erreur
- 5ConseilRéponds à la question de sortie
- 6ExplicationPasse en mode insertion dans vi
- 7ExempleDéplace-toi jusqu’au texte recherché
- 8ExempleModifie le paramètre dans vi
- 9DéfiColle selon le type de texte copié
- 10ConseilEffectue de petites modifications et annule-les
- 11DéfiChoisis de conserver ou non la modification dans vi
- 12DéfiCompare deux modifications inachevées
- 13RécapitulatifTermine en enregistrant ou en abandonnant volontairement
Tubes et redirection sous Linux : QCM
Série 1 : Lis du texte et suis son parcours10 Questions Pratiques
Question 1 sur 10
less. Quelle touche suffit pour revenir au shell ?Afficher la réponseMasquer la réponse
q pour quitter le pageur et revenir à l’invite de commande. g va au début du fichier mais garde le pageur ouvert : cette touche ne peut donc pas rétablir l’invite. L’absence de cette invite pendant la lecture signifie que less traite toujours tes touches.Question 2 sur 10
tail -n +3 records.txt ?Afficher la réponseMasquer la réponse
tail -n 3 sélectionnerait les trois dernières lignes. Retirer deux lignes au début et sélectionner trois lignes à la fin sont des opérations différentes.Question 3 sur 10
> report.txt, mais ses messages de diagnostic restent visibles. Quel flux transporte ces messages ?Afficher la réponseMasquer la réponse
> ne redirige que stdout, ce qui explique pourquoi les erreurs peuvent rester à l’écran. Le partage du terminal par défaut ne fait pas de ces deux sorties un seul flux.Question 4 sur 10
Afficher la réponseMasquer la réponse
>> ajoute stdout en fin de fichier, en conservant le texte existant et en créant le fichier si nécessaire. Un seul > ouvre le fichier après avoir vidé son ancien contenu. 2> redirige les messages de diagnostic plutôt que les résultats normaux : il sélectionne donc aussi le mauvais flux pour cette tâche.Question 5 sur 10
command | wc -l indique-t-il ?Afficher la réponseMasquer la réponse
wc -l, ce qui donne un décompte de 5. Les deux lignes de stderr gardent leur voie distincte et n’entrent pas dans le comptage. Un décompte de 7 exigerait de combiner stderr avec stdout avant le tube, ce que cette ligne de commande ne fait pas.Question 6 sur 10
sort -n produit-il ?Afficher la réponseMasquer la réponse
-n change la comparaison ; elle ne se contente pas d’inverser l’ordre textuel par défaut.Question 7 sur 10
supplies.txt contient « clip », « ring », « clip », « pad », « clip », « ring » et « clip », chacun suivi d’un saut de ligne. Quelles sont les deux premières lignes produites par sort supplies.txt | uniq -c | sort -rn | head -n 2, sans tenir compte des espaces devant les nombres ?Afficher la réponseMasquer la réponse
Question 8 sur 10
grep -ic 'fail' file compte-t-il ?Afficher la réponseMasquer la réponse
-w, absente de cette commande.Question 9 sur 10
docs/a.txt, un répertoire docs/b.txt et un fichier ordinaire docs/c.TXT. Que sélectionne find docs -type f -name '*.txt' ?Afficher la réponseMasquer la réponse
a.txt satisfait les deux. b.txt échoue au test sur le type, tandis que c.TXT nécessiterait le test -iname, insensible à la casse, pour correspondre au même motif de suffixe.Question 10 sur 10
Afficher la réponseMasquer la réponse
Série 2 : Choisis des commandes et interprète les correspondances10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
?queue dans less, que fait n ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
labels.txt contient huit lignes terminées par un saut de ligne. En quoi la sortie de wc -l < labels.txt diffère-t-elle de celle de wc -l labels.txt ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
command 2>&1 > result.txt ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
teams.csv contient « name,team », « Uma,Blue », « Zed,Gold », « Ivo,Blue » et « Moe,Gold », chaque ligne étant terminée par un saut de ligne. Qu’indique cut -d, -f2 teams.csv | sort | uniq | wc -l ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
build.txt le texte littéral « v3.8 », avec le véritable point ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
grep '^d.g$' file ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
grep '^ba*t$' file parmi « bt », « bat », « baat » et « boat » ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
.txt modifiés récemment qui contiennent « REVIEW ». Quelle commande applique les trois restrictions ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
yy et appuies sur p. Où la ligne copiée apparaît-elle ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Suis les pipelines et corrige les erreurs10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
echo done > state.txt écrive sa sortie ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
parts.txt contient « pin », « bolt », « pin », « nut » et « bolt », chacun suivi d’un saut de ligne. Que fait sort parts.txt | uniq | tee distinct.txt | wc -l ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
runs.txt contient « b », « a », « b », « a » et « a », chacun sur sa propre ligne. Quelle paire nombre-valeur apparaît en premier avec uniq -c runs.txt | sort -rn ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
cut -d: -f3,1 à partir de la ligne « Nia:ops:42 » ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
grep -E '^(go)+$' file ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
grep -Eo '[0-9]{1,2}' produit-il à partir de cette ligne ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
-size -1M de GNU find ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
locate plan.txt peut-il afficher un chemin supprimé ce matin ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Diagnostique les traitements de fichiers et de texte10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
ls -lt produit un en-tête « total » suivi d’entrées de fichiers. Combien d’entrées ls -lt | head -n 6 affiche-t-il lorsqu’il en existe au moins six ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
sort, qu’est-ce qui signale la fin de l’entrée au début d’une ligne vide ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
command 2>&1 | tee combined.txt | wc -l ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
cut -d' ' -f2 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
grep -icw 'alert' file ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
find . -type f -name '*.cfg' -mtime +30 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
I commence-t-il l’insertion ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Combine les règles dans des cas nouveaux10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
log.txt et err.txt contiennent déjà du texte ancien. Que se passe-t-il avec command >> log.txt 2> err.txt ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
sizes.csv contient « name,size », « alpha,8 », « beta,110 » et « gamma,24 ». Quel pipeline affiche d’abord les deux enregistrements de données complets ayant les plus grandes tailles numériques ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
jobs.csv contient « id,zone », « 1,North », « 2,South », « 3,North », « 4,East » et « 5,North ». Quelle paire nombre-valeur apparaît en premier avec tail -n +2 jobs.csv | cut -d, -f2 | sort | uniq -c | sort -rn ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
grep '^r[^ae]d$' file parmi « rad », « red », « rid » et « road » ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
grep -Ev '^[[:space:]]*(#|$)' file ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
echo ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
x supprime un caractère. Tu appuies ensuite sur p. Où ce caractère est-il inséré ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
work, sans aucun fichier des répertoires plus profonds. Quelle recherche le permet ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
ajouter en fin de fichier
>> pour la sortie standard d’une commande.>> report.txt recueillent leurs résultats dans un seul fichier au lieu de le remplacer.alternative
| en syntaxe étendue, souvent avec des parenthèses pour limiter la portée du choix.^(east|west)$, les deux possibilités doivent occuper toute la ligne, car elles partagent les ancres.ancre
^ pour le début ou $ pour la fin d’une ligne dans les recherches grep ordinaires.d.g exclut une ligne plus longue comme « undog », même si elle contient « dog ».C
cat
cat est une commande qui affiche le contenu d’un ou plusieurs fichiers sur la sortie standard, en suivant l’ordre des fichiers donnés en arguments.cat -n a.txt b.txt numérote leur sortie combinée sans modifier les fichiers d’entrée.chaîne en ligne
wc -w <<< "red blue green" reçoit trois mots sans nécessiter de fichier d’entrée distinct.champ
cut et sélectionnée selon le délimiteur utilisé dans cet enregistrement.champ vide
classe de caractères
[[:digit:]] sélectionne un chiffre ; les deux paires de crochets sont nécessaires.clé de tri
sort -k et interprété selon le séparateur choisi.-k3,3nr compare seulement le champ 3, numériquement et dans l’ordre inverse, dans un classement de scores.code de retour
grep -q utilise son code pour indiquer un résultat sans afficher les lignes correspondantes.comptage des occurrences
sort et en comptant les suites avec uniq -c.sort -rn après uniq -c pour placer les plus grands nombres en premier lors de l’examen des entrées fréquentes.concaténation
cat.cat first.txt second.txt > combined.txt, le texte du premier fichier précède celui du second.copier
yy pour une ligne entière sans la retirer du tampon de travail.yy suivi de p pour dupliquer une ligne sous sa position d’origine dans le fichier.correspondance sur un mot entier
grep -w error file trouve « error found » mais rejette la sous-chaîne dans « terror ».cut
cut est un filtre qui sélectionne des champs ou des positions de caractères fixes dans chaque ligne d’entrée, en conservant les parties sélectionnées dans leur ordre d’origine.cut -d: -f1,6 /etc/passwd associe chaque nom de compte au champ de son répertoire personnel.D
date de modification
-mtime dans find teste le temps écoulé en périodes complètes de 24 heures.-mtime +30, car seules 30 périodes complètes d’une journée se sont écoulées.délimiteur
cut -d sélectionne le caractère utilisé pour découper chaque ligne.descripteur de fichier
2 dans 2> errors.txt sélectionne le flux d’erreur et doit toucher l’opérateur de redirection.document en ligne
cat <<EOF, les lignes saisies avant le EOF de fermeture sont des données, tandis que cette dernière ligne est un marqueur.duplication de descripteur
2>&1 pour stderr et stdout.command > all.txt 2>&1, stderr reçoit la connexion au fichier dont dispose déjà stdout.E
entrée standard
sort < names.txt, le shell relie le fichier à l’entrée standard de la commande avant son exécution.expression entre crochets
b[ae]t correspond à « bat » ou à « bet », tandis que b[^a]t exclut « a » de la position centrale.expression régulière
^web[0-9]$ décrit une ligne entière contenant « web » suivi d’un chiffre.expression régulière étendue
?, +, |, les accolades et les parenthèses sans barre oblique inverse.grep -E avant un motif groupé tel que ^(red|blue)$ pour activer l’alternative.extraction des correspondances
-o de grep pour chaque correspondance non vide.grep -Eo '[0-9]+' affiche les deux nombres sur des lignes séparées.É
échappement
\.txt$ exige une fin littérale « .txt », tandis que .txt$ autorise un autre caractère avant « txt ».Écrire
éditeur modal
F
filtre
sort, cut et grep agissent chacun comme des filtres lorsqu’ils reçoivent du texte d’une commande précédente.find
find effectue une recherche dans une arborescence à partir des chemins de départ indiqués, teste les propriétés de chaque élément rencontré, puis affiche les chemins sélectionnés ou agit sur eux.find notes -type f -name '*.txt' sélectionne les fichiers ordinaires dont le nom se termine par l’extension des fichiers texte dans toute cette arborescence.find -exec
find -exec exécute une autre commande sur les chemins sélectionnés, en remplaçant {} et en utilisant un point-virgule échappé ou un signe plus pour terminer l’action.-exec wc -l {} + transmet des lots de chemins correspondants à une commande qui compte leurs lignes.G
grep
grep est une commande de recherche de texte qui affiche normalement chaque ligne d’entrée contenant une correspondance avec un motif, avec des options pour modifier le résultat affiché.grep -n WARN app.log pour afficher les lignes correspondantes avec leurs positions dans le fichier.groupe d’expression régulière
(ab)+ autorise « ab » et « abab », car le signe plus répète le groupe entier de deux caractères.H
head
head est un filtre qui affiche le début de son entrée : il sélectionne dix lignes par défaut ou un autre nombre de lignes ou d’octets sur demande.head -n 4 notes.txt avant de décider si tu as besoin du fichier entier.L
less
less est un pageur qui permet d’avancer et de reculer, de rechercher du texte et de consulter des fichiers ou une sortie transmise par un tube sans modifier le texte.less -N notes.txt pour afficher les numéros de ligne lorsque tu repères un passage particulier dans un fichier.locate
locate est une recherche rapide de chemins qui interroge une base de données préparée, dont le contenu peut être moins récent que les changements du système de fichiers en activité.M
métacaractère
* du shell, mais grep l’interprète toujours comme un opérateur d’expression régulière lorsqu’il le reçoit.mode de suivi
tail en attente de données ajoutées après sa sortie initiale, afin que le nouveau texte apparaisse pendant qu’un programme écrit dans le fichier.tail -f app.log pendant la vérification d’une application, puis appuie sur Ctrl+C lorsque tu as terminé la surveillance.mode insertion
i, a ou o et se termine avec Échap.cw a supprimé le reste d’un mot, saisis son remplacement en mode insertion, puis appuie sur Échap.mode ligne de commande
: en mode normal et l’exécute lorsque l’on appuie sur Entrée.:wq enregistre le tampon et quitte après Entrée ; un simple wq en mode normal ne le fait pas.mode normal
dd pour couper la ligne courante sans saisir accidentellement ces deux lettres.N
nano
nano est un éditeur de texte de terminal qui accepte directement le texte saisi et affiche des raccourcis pour enregistrer, rechercher, couper et quitter.nano +12 app.conf lorsqu’un programme indique qu’un paramètre de la ligne 12 demande ton attention.noclobber
> vers des fichiers ordinaires existants, ce qui aide à éviter leur remplacement accidentel.set -o noclobber, utilise >| seulement lorsque tu veux passer outre la protection des fichiers existants.P
pageur
less /etc/services, puis appuie sur Espace pour l’écran suivant ou sur q pour quitter.parcours de l’arborescence
| sort à une simple recherche de chemins lorsque l’ordre des résultats affichés doit être prévisible.PATH
PATH est la liste des répertoires dans lesquels le shell recherche les commandes exécutables externes ; un outil tel que which l’utilise pour trouver un fichier programme.which grep recherche dans les répertoires de commandes au lieu de parcourir tous les répertoires de l’ordinateur.périphérique nul
/dev/null, est un fichier spécial qui élimine les données écrites, ce qui permet de masquer volontairement un flux de sortie choisi.2>/dev/null masque les messages de diagnostic d’une recherche de fichiers, y compris ceux concernant les répertoires illisibles.pipeline
sort values.txt | uniq | wc -l, le décompte final mesure les valeurs distinctes regroupées.plage de lignes
head, puis les dix dernières de cette sélection.profondeur de recherche
-maxdepth dans find limite la descente du parcours dans les sous-répertoires.-maxdepth 1 pour examiner le répertoire de départ et ses entrées immédiates sans entrer dans les répertoires plus profonds.Q
quantificateur
? pour du texte facultatif ou {4} pour exactement quatre répétitions.[0-9]{4} exige quatre chiffres ; des ancres peuvent imposer que ce soit tout le contenu de la ligne.R
recherche de chaînes littérales
-F.grep -F "v2.4" releases.txt pour exiger le véritable point dans la notation de version.recherche récursive
grep -r recherche du texte dans les fichiers de cette arborescence.grep -rl TODO notes liste les noms des fichiers correspondants sans afficher tout leur texte correspondant.redirection
sort < names.txt > ordered.txt, le shell fournit un fichier en entrée et en ouvre un autre pour la sortie.S
saut de ligne
wc -l compte ces marqueurs, donc une dernière ligne inachevée ne s’ajoute pas au total indiqué.sélection marquée
sortie d’erreur standard
> peut laisser visible sur la sortie d’erreur standard un message concernant un chemin absent.sortie standard
wc -l < names.txt > count.txt, le nombre de lignes passe par la sortie standard vers le fichier de rapport.substitution
:%s/old/new/g remplace chaque « old » correspondant sur toutes les lignes du fichier.T
tail
tail est un filtre qui affiche la fin de son entrée ou commence à une ligne numérotée lorsque le nombre de lignes est précédé d’un signe plus.tail -n +2 scores.csv pour omettre un en-tête d’une ligne tout en gardant tous les enregistrements de données restants.tampon
tee
tee est un filtre qui copie son entrée à la fois dans un fichier indiqué et sur la sortie standard, enregistrant un résultat tout en laissant le pipeline se poursuivre.tee selected.txt avant une étape de comptage lorsque tu dois aussi examiner les lignes sélectionnées.test sur le nom
-name dans find distingue les majuscules des minuscules, tandis que -iname les ignore.-name 'plan*' accepte « plan.txt », tandis que -name 'plan' exige ce nom de base exact.test sur le type
f pour un fichier ordinaire, d pour un répertoire ou l pour un lien.-type f empêche qu’un répertoire nommé « old.txt » soit retenu dans une recherche de fichiers texte.texte à champs de largeur fixe
cut -c1-5, même si le texte qui suit varie.tri numérique
sort -n pour placer « 9 » avant « 100 » lorsque les lignes représentent des quantités plutôt que des étiquettes.troncature
>, avant que la commande ne commence à lire son entrée.sort names.txt > names.txt perd les données d’origine parce que la troncature se produit en premier.tube
grep -i error app.log | wc -l, les lignes sélectionnées passent à la commande qui les compte.type
type est une commande interne de Bash qui décrit comment un nom de commande est interprété, notamment comme alias, fonction, commande interne ou chemin d’exécutable.type echo peut indiquer une commande interne même lorsque which echo pointe vers un fichier exécutable externe.U
uniq
uniq est un filtre qui détecte les lignes identiques adjacentes, supprime les exemplaires répétés ou indique les suites sélectionnées et leurs nombres selon les options.uniq -c fait apparaître la fréquence complète de chaque valeur en un seul décompte.updatedb
updatedb reconstruit la base utilisée pour les recherches de chemins indexées, afin que sa vue enregistrée reflète les chemins inclus lors de l’actualisation.sudo updatedb lorsqu’une actualisation immédiate à l’échelle du système convient.W
wc
wc est une commande de comptage qui indique par défaut le nombre de sauts de ligne, de mots et d’octets, avec des options pour sélectionner une mesure ou compter les caractères.wc -c à wc -m afin de distinguer les octets des caractères.À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.