Rediriger les E / S sous Linux. Édition d'entrée

Depuis quelque temps, après avoir travaillé à Linux, dans le commandement de l'équipe de la ligne de commande, méthodius est venu à la conclusion que certaines commodités n'interféreront pas avec la coquille. Une de ces commodités - la possibilité de modifier la chaîne d'insertion en utilisant la clé Arrière-plan. (Supprimer le dernier caractère), "^ w" (Supprimer le mot) et "U u" (Supprimer la ligne) - fournit la borne Linux elle-même. Ces commandes fonctionnent pour n'importe quelle entrée de ligne: par exemple, si vous exécutez le programme CAT sans paramètres, de sorte qu'il affiche immédiatement la chaîne entrée dans le terminal. Si pour une raison quelconque dans la ligne de l'écran a obtenu la poubelle, vous pouvez appuyer sur "^ r" ( reDRAW) - Le système fera ressortir nouvelle chaîne Le contenu du tampon d'entrée.

MoTodius n'a pas oublié que le chat sans paramètres devrait être terminé avec la commande "^ d" (fin de l'entrée). Cette commande, comme les précédentes, interprète le système lors de la saisie du terminal. Le système transforme également d'autres caractères de contrôle (par exemple, "^ C" ou "^ z") dans signaux. En fait, tous les caractères de contrôle interprétés par le système peuvent être reconfigurés à l'aide de la commande STY. Liste complète Ce qui peut être à l'écoute, donne la commande de Stty -a:

$ Stty -a localhost 38400 Baud; Rangées 30; colonnes 80; Ligne \u003d 0; intr \u003d ^ c; Quittez \u003d ^ \\; Effacer \u003d ^?; tuer \u003d ^ u; eof \u003d ^ d; Eol \u003d. ; Eol2 \u003d. ; Commencer \u003d ^ q; Arrêter \u003d ^ s; Suspendre \u003d ^ z; rprnt \u003d ^ r; Werase \u003d ^ w; lnext \u003d ^ v; flush \u003d ^ o; min \u003d 1; Temps \u003d 0; -Parenb -parrodd cs8 hupcl -cstopb chevread -clocal -crtscts -gnrrk -brkint -frkint -gnpar -parkrk -Inpck -istrip -inlcr -Incr ixon -IlCoff -IlCOff -IlCoCOFF -ICLICLI -IULTF8 Opost -Orcroc - ONLRET -FELL -OFDEL NL0 CR0 TAB0 BS0 VT0 FF0 ISIG ICANON IEXTEN ECHO ECHOE ECHOK -CHONL -SHONL -SHONL -XCASE -XCASE -TOSTOP -SHOPTL ECHOCTL ECHOCHE

Exemple 1.. Paramètres de bornier

À la vue de telles fonctionnalités étendues, MODYIUS a immédiatement pris le guide (Man Sty), mais n'a pas tant trouvé pour moi-même utile. Des personnages de contrôle (lignes avec le second à quatrième) sont intéressantes "^ s" et "^ q", avec lesquelles vous pouvez, respectivement, suspendre et reprendre la délivrance du terminal (si le texte a déjà été emmené, et Vous n'avez pas le temps de le lire). On peut noter que le paramètre effaçable (suppression du caractère unique) correspond au caractère de commande qui renvoie la clé. Arrière-plan. C'est la console virtuelle Linux - "^? " Sur de nombreux terminaux Arrière-plan. Retourne un autre caractère - "^ h". Si nécessaire passer outre Effacer le réglage, vous pouvez utiliser la commande "STY STY ERASE ^ H" et "^ h" (pour la commodité) autorisée à entrer à la fois deux caractères: "^" et "H".

Enfin, à priver Le symbole transmis de ses fonctions de contrôle (si, par exemple, vous devez transférer le programme pour entrer symbole Avec code 3, c'est-à-dire "^ c"), immédiatement avant d'entrer dans ce caractère, vous devez soumettre la commande "^ v" (lnext):

$ Chat | Hexdump -c maintenant cliquez sur ctrl + C $ CAT | Hexdump -C Maintenant Ctrl + V, Ctrl + C, Entrée et Ctrl + D0 C5 D2 D8 20 43 74 72 6C 2B 56 2C 20 43 | Ctrl + V, C | 00000010 74 72 6C 2B 43 2C 20 45 6E 74 65 72 20 C9 20 43 | TRL + C, ENTER ET C | 00000020 74 72 6C 2B 2B 44 03 0A | TRL + D .. | 00000027.

Exemple 2.. Caractères de contrôle de blindage

Ici, méthodius interrompit, comme cela allait, le travail du premier du chat. Dans le même temps, avant Hexdump, le filtre, qui traduit le flux d'entrée en hyséniac hexadécimal, la question n'est même pas sortie, car le chat n'avait pas le temps de gérer une chaîne. Dans le second cas, "^ C" après "^ v" a perdu la signification de la gestion et est apparu lors de la saisie. Avec la clé "-C", HexDump affiche également le texte Hypotion du flux d'entrée, en remplaçant les caractères non d'impression avec des points. De sorte que les points ont été remplacés et "^ C" (ASCII-CODE 03) et renvoyés ENTRER Symbole de fin de chaîne (code ASCII 0A, sous forme décimale - 12). Ni "^ v", ni "^ d" à l'entrée de Hexdump, bien sûr, ne sont pas tombés: ils, comme les gestionnaires, ont traité le système.

Les autres paramètres de STTY font référence au traitement du texte lorsque le terminal est affiché et en pénétrant. Ils ne sont intéressants que dans le sens où ils changent, il devient inconfortable de travailler avec la coquille de Comnoy. Par exemple, le paramètre ECHO détermine si le système affichera tout ce que l'utilisateur entre sur l'écran. Avec un écho fermé en appuyant sur tout clé alphanumérique (Entrer dans le symbole) conduit au fait que le système (dispositif de type TTY) supprimer Ce symbole sur le terminal. Le réglage est désactivé lorsqu'un mot de passe est entré dans le clavier. Il est difficile de se débarrasser de la sensation que l'entrée du clavier ne se produit pas. C'est encore pire avec les réglages constitués de morceaux de forme "i", "o", "cr" et "nl". Ces paramètres sont contrôlés par la conversion lors de la saisie et de la sortie de la désignation historiquement établie de la fin de la ligne avec deux caractères dans uneAdopté à Linux. Peut arriver pour que la clé ENTRER Le terminal renvoie juste un symbole d'extrémité de chaîne incorrect et la conversion est désactivée. Puis au lieu de ENTRER Vous devez utiliser "^ j" - un symbole, en fait, la fin appropriée de la chaîne.

Dans tous les cas, lorsque le terminal est en condition incompréhensible - ne répond pas à ENTRER , ne montre pas l'entrée, ne supprime pas de caractères, affiche les "étapes" du texte, etc., il est recommandé de "traiter" les réglages de la borne à l'aide de STTY SANE - la forme spéciale du montant, jetant le réglage du terminal dans une partie de l'état approprié. Si l'état incompréhensible du terminal est originaire une fois, par exemple, après une achèvement d'urgence programme à l'écran (VIM Editor ou MC Shell), vous pouvez utiliser la commande de réinitialisation. Elle ré-configure le terminal dans lA COMMUNICATION Avec la configuration du système (spécifiée dans le fichier / etc / inittab, voir la conférence des étapes de chargement du système) et TerminFo.

Si le terminal se comporte étrange, la séquence "^ J STY SANE ^ J" peut le guérir!

Modification de la ligne de commande

Ne même pas apprendre des opportunités spéciales de la coquille de commande, méthodius utilisait activement certains d'entre eux, non disponibles lors de la saisie de texte les plus Utilitaires (en particulier, ni chat, ni hexdump). Nous parlons de clés Flèche à gauche et Flèche à droite Avec lequel vous pouvez déplacer le curseur sur la ligne de commande et la clé Del. Supprimer le symbole en dessous de curseur, pas derrière lui. Dans les conférences, le terminal et la ligne de commande, il s'est déjà assuré que ces équipes travaillent à Bash, mais ne fonctionnent pas pour le chat. De plus, pour un interprète de commandement simple - SH - ils ne fonctionnent pas non plus.

Par conséquent, la capacité de l'éditeur ligne de commande Spécifié pour différentes coquilles de commandes. Cependant, les commandes d'édition les plus nécessaires sont prises en charge dans toutes les variétés de Shell de la même manière. Selon Gurevich "dans tous les types de Linux, il y a une bash, et si vous êtes suffisamment expérimenté pour installer et personnaliser les packages, vous pouvez installer ZSH, il a plus de possibilités qu'une personne peut avoir besoin." Par conséquent, méthodius engagé dans l'étude de la documentation Bash, qui s'est avéré difficile, car à Bash.info, il comptait plus de huit mille rangées. Même sur l'édition de la ligne de commande est tellement écrite qu'il est difficile de lire à la fois.

Une tentative de «gonflement» d'apprendre tout sur le travail sur la ligne de commande a apporté une certaine faveur. Premièrement, il est possible de passer à la ligne de commande non seulement un personnage en avant et en arrière, mais aussi selon: les équipes ESCF / ESCB. ou alors Alt + f / alt + b En conséquence (OT. f.ordineux I. b.ckward), des clés de travail & DOMICILE & et & Finir & , ou, la même chose, "^ a" et "^ e". Et deuxièmement, en plus de travailler avec une ligne de commande, il y a encore beaucoup d'autres commodités, qui seront discutées dans cette conférence.

Histoire de l'équipe

Deux autres clés avec des flèches - haut et bas - méthodio également utilisée activement, ne soupçonnant pas que cela implique ce mécanisme de bash très puissant - Travailler avec histoire de l'équipe. Toutes les commandes marquées, Bash se souvient et leur permet d'y accéder plus tard. Flèche vers le haut (vous pouvez utiliser et "^ p", p.revios), la liste des commandes déposées "défilte" du dernier à la première et sur la flèche vers le bas ("^ n", n.ext) - retour. La commande correspondante est affichée sur la ligne de commande, comme il suffit de marquer, il peut être modifié et soumis à la coquille (personnalisé le curseur à la fin de la ligne n'est pas nécessaire).

Si vous avez besoin d'obtenir de l'histoire une équipe de longue date, il est plus facile de ne pas conduire la liste de l'histoire par les flèches et rechercher en elle utilisant la commande ^ r ( rrecherche empruntée). Dans le même temps, une invite de type spéciale ("(inverse-i-rechercher)"), une substitution de recherche (entourée de symboles "et") et la dernière des équipes de l'histoire dans laquelle cette sous-chaîne est présente:

$ ^ R | (Recherche inverse-i-Search) `": i | (inverse-i-wearch) `i": ls i n | (Recherche inverse-i-Search) `in»: Info F | (Info-i-Search) `Info": Info o | (Inverse-i-rechercher) `info»: info ^ r | (info-i-rechercher) `info": homme info ^ r | (Info-i-Search) `Info": info "(bash.info.bz2) commandes pour l'histoire"

Exemple 3.. Recherche d'historique de l'équipe

Un exemple représente les symboles des méthodes entrées (sur le côté gauche sur "|") et le contenu de la dernière ligne du terminal. Ce sont des "cadres" fonctionnent avec la même chaîne montrant comment il change lors de la définition. En tapant "Info", méthodius a continué de rechercher cette sous-chaîne, répétant "^ r" jusqu'à ce qu'elle soit tombée sur la commande dont vous avez besoin comprenant la sous-chaîne "Info". Il reste seulement de le transférer à bash avec ENTRER .

Afin que l'histoire des équipes puisse persister entre Les sessions utilisateur, Bash l'écrit à fichier.bash_history, située dans le répertoire de base de l'utilisateur. Ceci est fait pour le moment achèvement Shell: L'histoire accumulée pendant le travail ajoute à la fin de ce fichier. La prochaine fois Bash lit. Bash_history est entièrement. L'histoire n'est pas stockée pour toujours, le nombre de commandes mémorables v.bash_history est limitée (généralement 500 équipes, mais elle peut être reconfigurée).

Abréviation

Historique de la recherche - Un outil pratique: une ligne de commande longue ne peut pas être entièrement marquée, mais à regarder et à utiliser. mais pozdney La commande devra être exploitée avec quelques "^ r" - et il est possible de ne pas être accompli du tout s'il a déjà chuté de là. Afin de remplacer rapidement des commandes courtes longtemps, cela vaut la peine d'être utilisé. abréviations (Alias). Dans les fichiers de configuration de l'interprète de commande de l'utilisateur, plusieurs abréviations ont déjà été définies, dont la liste peut être visualisée à l'aide de la commande alias sans paramètres:

$ Alias \u200b\u200balias cd .. \u003d "cd .." alias cp \u003d "cp -i" alias l \u003d "ls -lapt" alias ll \u003d "ls -lapc" alias ls \u003d "ls-color \u003d Auto "alias md \u003d" \u200b\u200bmkdir "alias mv \u003d" mv -i "alias rd \u003d" rmdir "alias rm \u003d" rm -i "

Exemple 4.. Voir les abréviations prédéterminées

Avec des abréviations, méthodius a déjà rencontré une conférence par le droit d'accès, où l'équipe de la LS a refusé de travailler en harmonie avec la théorie. Il s'est avéré que sur la commande LS au lieu de l'utilitaire / bin / ls bash lance sa propre commande de réduction, en passant dans la commande LS --Color \u003d auto. À plusieurs reprises L'interprète ne traite plus l'interprète dans la commande de la sous-chaîne "LS" pour éviter le cycle éternel. Par exemple, la commande LS -AL tourne à la suite de LS --Color \u003d AUTOAL. De même, toute équipe commençant par RM se transforme en RM -i ( jE.nattractive) que méthodius est extrêmement ennuyeux, car aucun retrait n'est sans questions dans le style de "RM: supprimer un fichier ordinaire" déposer "?».

$ UNALIAS CP RM MV $ alias PD \u003d alias pp \u003d POPD $ PD / bin / bin ~ $ PD / USR / Share / DOC / USR / Share / DOC / BIN ~ VAR / VAR / VAR / VAR / VAR / VAR / TMP DIRS / VAR / TMP / BIN ~ $ pp / bin ~ $ pp ~ $ pp -bash: popd: pile de répertoires vides

Exemple 5.. Utiliser des coupes et des poussées / popd

Du "-i" ennuyeux, méthodius s'est débarrassé de l'équipe d'UNALIAS et introduit en même temps les abréviations des équipes Bash - Pushd et POPD qui l'aimaient. Ces commandes, comme CD, modifient le répertoire actuel.

Ils sont nommés par analogie avec des opérations de travail avec une pile - poussent et pop.

La différence est que poussez tous les répertoires que l'utilisateur rend actuel, se souvient dans une liste spéciale (pile). La commande POPD supprime le dernier élément de cette pile et rend le répertoire actuel de l'avant-dernier. Les deux commandes en outre affichent le contenu de la pile de répertoires (la commande DIRS fait la même chose. La commande CD à bash fonctionne également avec une pile d'annuaire: elle relecture Son dernier élément est nouveau.

Réduction de l'équipe Commande de shell interne, demandée par l'utilisateur. Remplace généralement une commande plus longue, qui est souvent utilisée lorsque vous travaillez à la ligne de commande. Les coupes ne sont pas héritées de l'environnement.

La compassion

Les réductions vous permettent de recruter rapidement rapidement Équipes, mais n'affecte pas les noms des dossiersLe plus souvent, les paramètres de ces commandes sont les plus souvent. Il arrive que la ligne composée - le chemin du fichier et les quelques premières lettres de son nom - assez pour non ambigu Spécification de ce fichier, car en fonction du chemin entré des fichiers BAMPER, dont le nom commence sur ces lettres, tout simplement pas. Afin de ne pas ajouter les lettres restantes (et les noms des fichiers de Linux peuvent être assez longs), Gurevich a conseillé méthodio d'appuyer sur la touche Languette. . Et - à propos d'un miracle! - Bash lui-même a terminé le début du nom du fichier dans l'ensemble (nous utiliserons à nouveau la méthode "Personnel"):

$ LS -Al / bin / onglet de base | $ LS -AL / bin / BASNAME -RWXR-XR-XR 1 racine racine 12520 juin 3 18:29 / bin / basseName $ onglet de base | $ Onglet BasEname | $ BASNAME EX TAB | $ Exemples de base / onglet | $ Exemples de base / -Filename-with- -Filename-with-

Exemple 6.. Utilisation de l'achèvement

En outre. Il s'avère que le nom de la commande ne peut pas être introduit entièrement: la shell suppose de compléter le mot déliable à la commande, car ce mot est au début de la ligne de commande. Ainsi, la commande BasEname Exemples / -Filename-With-méthodiIus a marqué pour huit clics sur le clavier ("base" et quatre Languette.)! Il n'a pas besoin d'entrer le début du nom de fichier dans le répertoire des exemples, car le fichier qu'il n'y avait qu'un.

Effectuer une achèvement (achèvement), Bash ne peut pas se retirer de toute la ligne, mais seulement celle dont il n'a aucun doute. Si une finition ultérieure peut aller quelques façons alors une seule presse Languette. mènera au fait que Bash est confondu et répété - à la conclusion en dessous de Liste de ligne de commande de toutes les options possibles.

Tous les terminaux devraient pouvoir émettre signal sonore Lors de l'affichage du symbole de contrôle "^ g". Pour cela, vous n'avez pas besoin d'exécuter programmes supplémentaires: Les bornes "réelles" ont un haut-parlin intégré et les consoles virtuelles utilisent généralement le système ("Squeezing"). En dernier recours, il est permis d'attirer l'attention de l'utilisateur d'une autre manière: par exemple, l'émulateur du terminal d'écran écrit dans la ligne de service Wuff-Wuff-Wuff ("Gav-Gav").

Dans ce cas, vous devez dire gaine de commande Suite: Ajout de plusieurs personnages qui déterminent comment le chemin ira à la concurrence et appuyez à nouveau sur Languette. .

Rechercher mots clés "Achèvement" sur la documentation Bash a émis autant d'informations que Methodius s'est tournée vers Gurevich pour obtenir de l'aide. Cependant, il a répondu qu'il n'a pas utilisé de bash, et il n'est donc pas en mesure d'expliquer les subtilités de son raccourci. Si dans BASH, plusieurs types d'achèvement (par noms de fichiers, par noms de commande, etc.), puis dans leur ZSH combien S'il vous plait: Il existe un moyen de programmer tout algorithme d'achèvement et définir le modèle de ligne de commande dans lequel cette méthode sera appliquée.

Bien que généralement, comme mentionné, l'entrée / sortie du programme est associée à des flux standard, il existe des moyens spéciaux pour rediriger l'exercice d'E / S.

5.5.1 Opérateurs\u003e,< и >>

Les symboles sont utilisés pour faire référence à la redirection > ", "< "Et" >> ". Le plus souvent utilisé pour rediriger la commande pour déposer. Voici l'exemple approprié:

$ LS -L\u003e /home/jim/dir.txt

Sur cette commande dans le fichier /home/jim/dir.txt, une liste de fichiers et de sous-répertoires du répertoire, qui était à jour au moment de l'exécution de la commande sera enregistrée. ls.; Dans ce cas, si le fichier spécifié n'existait pas, il sera créé; S'il existait, il sera écrasé; Si vous souhaitez que la commande de commande soit terminée à la fin d'un fichier existant, il est nécessaire au lieu d'un symbole. > utiliser >> . Dans ce cas, la présence d'espaces avant ou après les symboles > ou alors >> Irritant et sert uniquement à la commodité de l'utilisateur.

Vous pouvez envoyer la sortie non seulement pour le fichier, mais également pour entrer une autre commande ou sur l'appareil (par exemple, imprimante). Donc, pour compter le nombre de mots dans le fichier /home/jim/report.txt, vous pouvez utiliser la commande suivante:

$ chat /home/jim/report.txt\u003e wc -w

et pour émettre le fichier d'impression - la commande:

$ Chat /home/jim/report.txt\u003e lpr

Comme vous pouvez le constater, l'opérateur > Utilisé pour rediriger le flux de sortie. En ce qui concerne le flux d'entrée, l'opérateur effectue la même fonction. < . L'exemple ci-dessus d'une commande pour compter le nombre de mots dans un fichier spécifique peut être réécrit comme suit (faites attention à l'absence d'une commande chat.):

$ wc -w.< /home/jim/report.txt

Cette option de redirection est souvent utilisée dans divers scripts, appliquée à ces commandes qui perçoivent généralement l'entrée (ou attendez une entrée) du clavier. Dans le script, automatiser certains opérations de routineVous pouvez donner une commande des informations nécessaires à partir du fichier dans lequel il est écrit à l'avance ce que vous devez entrer pour exécuter cette commande.

En raison du fait que les symboles < , > et >> Agir sur des flux standard, ils peuvent être utilisés non seulement à la manière habituelle, comme on le fait généralement, mais aussi un peu différemment. Ainsi, les commandes suivantes sont équivalentes:

$ Chat\u003e fichier

$ Chat\u003e fichier

$\u003e Dossier chat

$\u003e Dossier chat

Cependant, par lui-même (sans aucune commande pour laquelle des flux standard), le symbole de redirection ne peut pas être utilisé, il est donc impossible, par exemple, en entrant sur l'invite de commande

$ File1\u003e File2

obtenez une copie d'un fichier. Mais cela ne réduit pas les valeurs. ce mécanismeAprès tout, des flux standard sont définis pour n'importe quelle commande. Dans le même temps, vous pouvez non seulement rediriger l'entrée et la sortie standard, mais également d'autres flux. Pour ce faire, spécifiez avant le numéro de symbole de redirection du flux du flux. Entrée standard Stdin a numéro 0, sortie standard STDOUT - Numéro 1, Erreur d'étude standard - Numéro 2. C'est-à-dire que le format complet de l'équipe de redirection a le formulaire (nous vous rappellerons que les lacunes sont proches\u003e ne sont pas nécessaires):

commande n\u003e m

N. et M. - Numéros de flux standard (0,1,2) ou noms de fichiers. Certains utilisent des caractères < , > et >> Sans spécifier le numéro de canal ou le nom de fichier, il est possible uniquement car au lieu du nombre manquant, 1, I.E., la sortie standard est substituée par défaut. Donc, l'opérateur > Sans spécifier la salle est interprétée comme 1 > .

En plus de la simple redirection des flux standard, il reste encore une occasion de ne pas simplement rediriger le flux à un canal particulier, mais faire une copie du contenu du flux standard. Car cela sert un symbole spécial & qui est placé devant le numéro de canal auquel le flux est redirigé:

commande N\u003e & M

Une telle équipe signifie que la sortie de la chaîne avec le nombre N. envoyé à la fois à la sortie standard et double du canal avec le nombre M.. Par exemple, de sorte que les messages d'erreur sont dupliqués à la sortie standard, vous devez donner la commande. 2>&1, tandis que 1>&2 Dupliqués stdout à stard. Cette fonctionnalité est particulièrement utile lors de la redirection de la sortie dans un fichier, car nous verrons simultanément les messages à l'écran et enregistrez-les dans le fichier.

5.5.2 Opérateur |

Une option spéciale pour la sortie de redirection est l'organisation du canal logiciel (parfois appelle parfois un pipeline ou un convoyeur). Pour cela, deux commandes ou plus, de telle sorte que la sortie de la précédente soit entrée pour la suivante, connectez-vous (ou divisée si vous le souhaitez mieux) le symbole de fonctionnalité vertical est "|". Dans ce cas, la sortie de commande standard de la commande située à gauche du symbole | , dirigé vers l'entrée standard du programme situé à droite du symbole | . Par example:

$ Chat myfile | Grep linux | Wc -l.

Cette chaîne signifie que la sortie de l'équipe chat., c'est-à-dire que le texte du fichier myfile sera envoyé à la commande de commande. grep.qui allouera uniquement des lignes contenant le mot "Linux". Conclusion de l'équipe grep. Va, à son tour, vise à entrer dans l'équipe wc -l.qui calcule le nombre de telles lignes.

Les canaux logiciels sont utilisés pour combiner plusieurs petits programmes, chacun d'entre eux exécutant uniquement une certaine conversion sur son flux d'entrée, pour créer une commande généralisée, dont le résultat sera une conversion plus complexe.

Il convient de noter que la coque appelle simultanément l'exécution simultanément toutes les commandes incluses dans le convoyeur exécutant pour chacune des commandes une instance de shell distincte, donc dès que le premier programme commence à produire quelque chose à son flux de sortie, la commande suivante commence à traiter. De la même manière, chaque commande suivante effectue son fonctionnement, attendant les données de la commande précédente et émettant ses résultats à l'entrée ultérieure. Si vous souhaitez que certaines commandes se terminent avant de commencer l'exécution, vous pouvez utiliser une ligne sous forme de symbole du convoyeur. | et point avec la virgule ; . Avant chaque point avec des points-virgules, la coquille s'arrêtera et attendra jusqu'à ce que l'exécution de toutes les commandes précédentes incluses dans le convoyeur soit terminée.

L'état de la sortie (la valeur logique renvoyée après la fin du programme) de la chaîne coïncide avec l'état de sortie renvoyé par la dernière équipe de convoyeur. Avant la première commande de convoyeur, vous pouvez mettre le symbole "!", Puis l'état de la sortie du convoyeur sera déni logique Le statut de sortie de la dernière équipe. La coquille attend toutes les commandes du convoyeur avant de définir la valeur de retour.

5.5.3 Filtres

Le dernier des exemples ci-dessus (avec l'équipe grep.) Vous pouvez utiliser pour illustrer un autre concept important, à savoir le programme de filtrage. Les filtres sont les commandes (ou les programmes) qui perçoivent le flux de données d'entrée, certaines transformations en informant et donnent le résultat à la sortie standard (où peut-il être redirigé quelque part ailleurs à la demande de l'utilisateur). Les commandants de filtrage incluent les commandes susmentionnées chat, plus, moins, wc, cmp, diff, ainsi que les commandes suivantes.

Tableau 5.1. Filtrer les équipes

Équipe

Brève description

grep., fgrep., egrep

Recherches dans le fichier d'entrée ou les données d'une ligne d'entrée standard contenant le modèle spécifié et donnez-leur à la sortie standard.

Remplace dans le flux d'entrée Tous les caractères rencontrés répertoriés dans la liste spécifiée, aux caractères correspondants de la deuxième liste spécifiée.

comm.

Comparez deux fichiers sur les chaînes et donnez à la sortie standard 3 colonnes: dans une seule chaîne qui ne se trouve que dans 1 fichier, dans les secondes figurant uniquement dans le 2e fichier: et dans les troisième lignes disponibles dans les deux fichiers.

Format pour l'impression fichier texte ou Entrée standard de contenu

sed

Un éditeur de chaîne utilisé pour effectuer certaines transformations sur le flux de données d'entrée (extrait du fichier ou de l'entrée standard)

Le filtre spécial est l'équipe tee.Ce qui "divise" le flux d'entrée, d'une part, envoyez-le à la sortie standard et sur l'autre - dans le fichier (dont vous devez définir le nom). Il est facile de voir que par son équipe d'action tee. Semblable à l'opérateur de redirection 1\u003e & fichier.

Les capacités de filtrage peuvent être considérablement élargies en utilisant des expressions régulières qui vous permettent d'organiser, par exemple, une recherche par divers modèles divers, souvent très complexes.

Vous pouvez parler de redirection et de filtres. Mais ce matériel est disponible dans la plupart des livres sur Unix et Linux, par exemple à Petersen [P1.4] et Kelly Bootla [P1.8]. Par conséquent, nous sommes limités à ce qui précède et nous nous tournons vers la prise en compte de l'environnement dit créé par la coquille.

V. Kostromin (KOS à Rus-Linux Dot Net) - 5.5. Rediriger les E / S, les canaux et les filtres
  • Transfert

Si vous avez déjà été maîtrisé avec les bases du terminal, vous vous êtes peut-être déjà prêt à combiner les équipes savantes. Parfois, l'exécution des commandes de shell suffisent assez pour résoudre une tâche, mais dans certains cas, entrez la commande de l'équipe trop fatigante et irrationnelle. Dans une telle situation, nous allons utiliser certains symboles spéciaux, comme des crochets angulaires.

Pour Shell, Interprète commandes Linux, et. caractères supplémentaires - Pas un lieu de placement vide à l'écran. Ce sont des équipes puissantes qui peuvent lier ensemble divers fragments d'informations, diviser ce qui était utilisé pour le faire et faire encore beaucoup de choses. L'un des plus faciles et, à la fois puissants et largement utilisés, est la redirection des flux d'E / S standard.

Trois flux d'entrée / sortie standard

Afin de comprendre ce que nous allons parler ici, il est important de savoir où les données à partir de laquelle vous pouvez rediriger et où elles vont. À Linux, il existe trois flux d'entrée / sortie de données standard.

Le premier est le flux d'entrée standard (entrée standard). Dans le système, il s'agit du flux n ° 0 (puisque le score commence généralement de zéro dans des ordinateurs). Les numéros de fil sont également appelés descripteurs. Ce flux est des informations transmises au terminal, en particulier les instructions transmises à la coquille à exécution. Typiquement, les données de ce flux tombent pendant l'entrée de leur utilisateur du clavier.

Le deuxième flux est un flux de sortie standard (sortie standard), il est attribué à un numéro 1. Il s'agit d'un flux de données que la coque affiche après avoir effectué une action. Typiquement, ces données tombent dans la même fenêtre de terminal, où la commande a été introduite, ce qui leur a provoqué.

Enfin, le troisième flux est un flux d'erreur standard (erreur standard), il dispose d'un descripteur 2. Ce flux est similaire au flux de sortie standard, car il s'agit généralement de ce qui s'avère qu'il s'avère sur l'écran du terminal. Cependant, c'est dans son essence, diffère de la sortie standard, par conséquent, ces threads, si on le souhaite, peut être contrôlé séparément. Ceci est utile, par exemple, dans la prochaine situation. Il existe une équipe qui traite une grande quantité de données en effectuant une opération complexe et d'une procédure d'erreur. Il est nécessaire que les données utiles générant cette commande ne soient pas mélangées avec des messages d'erreur. Ceci est mis en œuvre par redirection séparément de la sortie et des flux d'erreur.

Comme vous l'avez probablement déjà deviné, la redirection d'entrée / sortie signifie fonctionner avec les flux décrits ci-dessus et rediriger les données sur les besoins du programmateur. Il est fait avec des caractères\u003e et< в различных комбинациях, применение которых зависит от того, куда, в итоге, должны попасть перенаправляемые данные.

Rediriger le flux de sortie standard

Supposons que vous souhaitiez créer un fichier dans lequel la date et l'heure actuelles seront enregistrées. Il simplifie le fait qu'il existe une équipe, appelée avec succès la date, qui retourne ce dont nous avons besoin. Typiquement, les commandes sont affichées dans le flux de sortie standard. Pour que ces données soient dans le fichier, vous devez ajouter un symbole\u003e après la commande, avant le nom du fichier cible. Avant et après\u003e vous devez mettre un espace.

Lorsque vous utilisez la redirection, tout fichier spécifié après\u003e sera écrasé. S'il n'y a rien de valeur dans le fichier et son contenu peut être perdu dans notre conception, il est permis d'utiliser un fichier existant. Habituellement, il vaut mieux utiliser dans incident similaire Le nom du fichier qui n'existe pas encore. Ce fichier sera créé après avoir exécuté la commande. Appelons ça date.txt. L'expansion du fichier après le point est généralement un rôle particulier ne joue pas, mais les extensions aident à maintenir la commande. Donc, voici notre équipe:

$ DATE\u003e DATE.TXT
Il est impossible de dire que, en soi, cette équipe est incroyablement utile, cependant, basée dessus, nous pouvons déjà faire quelque chose de plus intéressant. Disons que vous voulez savoir comment les itinéraires de votre trafic traversant Internet sont en train de passer à un certain point de terminaison, enregistrant les données appropriées quotidiennement. En résolvant cette tâche, la commande Traceroute aidera, ce qui rapporte les détails sur la route de la circulation entre notre ordinateur et le point final tel que défini lors de la commande d'une commande sous la forme d'une URL. Les données contiennent des informations sur tous les routeurs par lesquels le trafic passe.

Depuis le fichier avec la date que nous avons déjà, il sera tout à fait justifié de joindre simplement à ces données de fichier reçues de Traceroute. Pour ce faire, vous devez utiliser deux caractères\u003e définir les uns après les autres. En conséquence, une nouvelle commande, redirigeant une sortie à un fichier, mais ne pas l'écraser et ajouter de nouvelles données après l'âge de l'âge, elle ressemblera à ceci:

$ traceroute google.com \u003e\u003e date.txt
Nous n'avons maintenant que de modifier le nom de fichier sur quelque chose de plus significatif à l'aide de la commande MV, qui, comme le premier argument, est transmis au nom du fichier d'origine et en second lieu:

$ Mv date.txt trace1.txt

Redirection du flux d'entrée standard

En utilisant un signe< вместо > Nous pouvons rediriger l'entrée standard en le remplaçant avec le contenu du fichier.

Supposons qu'il existe deux fichiers: list1.txt and list2.txt, chacun contenant une liste de lignes non saluée. Chacune des listes a des éléments uniques pour cela, mais une partie de la liste des éléments coïncide. Nous pouvons trouver les lignes disponibles dans la première, et dans la deuxième liste, appliquant la commande commun, mais avant de l'utiliser, les listes doivent être triées.

Il existe une commande de tri qui renvoie une liste triée sur le terminal sans enregistrer les données triées dans le fichier à partir duquel ils ont été pris. Vous pouvez envoyer une version triée de chaque liste à nouveau fichier.Utilisation de la commande\u003e, puis utilisez la commande comm. Cependant, cette approche nécessitera au moins deux commandes, bien que la même chose puisse être faite en une ligne, sans créer de fichiers inutiles.

Donc, nous pouvons utiliser l'équipe< для перенаправления отсортированной версии каждого файла команде comm . Вот что у нас получилось:

$ Comm.<(sort list1.txt) <(sort list2.txt)
Les crochets ronds ont la même signification que dans les mathématiques. La Shell traite d'abord les commandes entre parenthèses, puis tout le reste. Dans notre exemple, d'abord les lignes sont triées à partir de fichiers, puis ce qui s'est passé est transmis à la commande commune, qui affiche ensuite le résultat de la comparaison des listes.

Redirection du flux d'erreur standard

Et enfin, parlons de rediriger un flux d'erreur standard. Cela peut être nécessaire, par exemple, pour créer des fichiers journaux avec des erreurs ou combinés dans un fichier de message d'erreur et renvoyé par une commande de données.

Par exemple, si vous avez besoin de rechercher dans l'ensemble du système d'informations sur les interfaces sans fil disponibles pour les utilisateurs qui n'ont pas de droits de surveillance? Pour ce faire, vous pouvez utiliser une commande de recherche puissante.

Habituellement, lorsqu'un utilisateur régulier exécute la commande de recherche sur l'ensemble du système, elle affiche et des données et des erreurs utiles. Dans le même temps, ce dernier est généralement plus que le premier, ce qui complique la recherche du commandement de ce qui est nécessaire. Il est assez simple de résoudre ce problème: il suffit de rediriger le flux d'erreur standard dans un fichier à l'aide de la commande 2\u003e REMIND, 2 est un descripteur de flux d'erreur standard). En conséquence, l'écran n'obtiendra que le fait que la commande envoie à la conclusion standard:

$ Trouver / stage sans fil 2\u003e refus.txt
Comment être si vous avez besoin de garder les résultats de l'équipe dans fichier séparéSans mélanger ces données avec des informations d'erreur? Étant donné que les flux peuvent être redirigés indépendamment l'un de l'autre, à la fin de notre conception, vous pouvez ajouter une commande pour rediriger un flux de sortie standard dans un fichier:

$ Trouver / -Name Wireless 2\u003e refus.txt\u003e trouvé.txt
Veuillez noter que le premier support angulaire est livré avec un nombre - 2\u003e et le second sans elle. Cela est tellement dû au fait que la sortie standard a un descripteur 1 et la commande\u003e implique la redirection de la sortie standard si le numéro descripteur n'est pas spécifié.

Et, enfin, si vous avez besoin de tout pour apporter la commande pour tomber dans un fichier, vous pouvez rediriger les deux flux au même endroit en utilisant la commande &\u003e

$ Trouver / -Name Wireless &\u003e Résultats.txt

RÉSULTATS

Ici, nous désassemblables uniquement les fondements du mécanisme de redirection de flux dans l'interprète de commande cordes LinuxCependant, même un peu que vous avez appris aujourd'hui, vous donne des possibilités presque illimitées. Et, au fait, comme tout le reste, quant à la recherche du terminal, le développement de la redirection de flux nécessite une pratique. Par conséquent, nous vous recommandons de procéder à vos propres expériences avec\u003e et< .

Chers lecteurs! Le saviez-vous exemples intéressants Utilisation de la redirection des flux de Linux, qui aidera les nouveaux arrivants à mieux s'habituer à ce travail dans le terminal?

L'un des plus intéressants et sujets utiles pour administrateurs système Et les nouveaux utilisateurs qui viennent de commencer à gérer le terminal consiste à rediriger les flux de sortie Linux. Cette fonctionnalité du terminal vous permet de rediriger la sortie de commande dans un fichier ou du contenu du fichier pour entrer la commande, combinez des commandes ensemble et former des convoyeurs de commande.

Dans cet article, nous examinerons comment rediriger les flux de sortie sous Linux, quels opérateurs sont utilisés pour cela, ainsi que dans la mesure où tout cela peut être appliqué.

Toutes les commandes que nous effectuons le retour à nous trois types de données:

  • Le résultat de l'exécution de la commande, généralement les données de texte demandées par l'utilisateur;
  • Messages d'erreur - Informez sur le processus d'exécution de l'équipe et d'émerger des circonstances imprévues;
  • Le code de retour est le numéro qui vous permet d'évaluer le programme correctement fonctionné.

Sous Linux, toutes les substances sont considérées comme des fichiers, y compris les flux de sortie Linux - fichiers. Dans chaque distribution, il existe trois fichiers de base de flux pouvant utiliser des programmes, ils sont déterminés par la coquille et sont identifiés par le numéro de descripteur de fichier:

  • Stdin ou 0. - Ce fichier est associé au clavier et la plupart des commandes reçoivent des données à partir d'ici;
  • Stdout ou 1. - Ceci est une sortie standard, un programme envoie tous les résultats de votre travail. Il est associé à l'écran ou s'il est précis, alors avec le terminal dans lequel le programme est exécuté;
  • Starr ou 2. - Tous les messages d'erreur sont affichés dans ce fichier.

La redirection d'E / S vous permet de remplacer l'un de ces fichiers à votre unique. Par exemple, vous pouvez forcer le programme à lire des données du fichier dans système de fichierset non clavier, vous pouvez également afficher des erreurs dans le fichier et non à l'écran, etc. Tout cela est fait à l'aide de symboles "<" et ">" .

Rediriger la sortie dans le fichier

Tout est très simple. Vous pouvez rediriger la sortie dans le fichier à l'aide du symbole\u003e. Par exemple, enregistrez la sortie de commande supérieure:

tOP -BN 5\u003e TOP.LOG

L'option -b provoque le fonctionnement du programme sans interactif temps différéet N - répète l'opération cinq fois pour obtenir des informations sur tous les processus. Maintenant, nous regardons ce qui s'est passé avec chat:

symbole ">" Écrase les informations du fichier, s'il y a déjà quelque chose là-bas. Pour ajouter des données à la fin, utilisez ">>" . Par exemple, rediriger la sortie sur le fichier Linux pour le haut:

top -bn 5 \u003e\u003e top.log

Par défaut, un descripteur de fichier de sortie standard est utilisé pour rediriger. Mais vous pouvez le préciser clairement. Cette équipe donnera le même résultat:

tOP -BN 5 1\u003e TOP.LOG

Rediriger les erreurs de fichier

Pour rediriger la sortie des erreurs dans le fichier, vous devez spécifier explicitement le descripteur de fichier qui va rediriger. Pour les erreurs - c'est le numéro 2. Par exemple, lorsque vous essayez d'accéder au répertoire LS SuperUserer, je vais donner une erreur:

Vous pouvez rediriger le flux d'erreur standard dans le fichier comme celui-ci:

ls -l / root / 2\u003e ls-error.log
$ Chat ls-error.log

Pour ajouter des données à la fin du fichier, utilisez le même symbole:

ls -l / root / 2 \u003e\u003e ls-error.log

Rediriger la sortie standard et l'erreur dans le fichier

Vous pouvez également rediriger toute la sortie, les erreurs et le flux de sortie standard dans un fichier. Il y a deux façons pour cela. Le premier, plus vieux, est de transférer les deux descripteurs:

lS -L / root /\u003e ls-error.log 2\u003e & 1

Tout d'abord, la commande ls est sortie au fichier ls-error.log à l'aide du premier symbole de redirection. En outre, toutes les erreurs seront envoyées au même fichier. La deuxième méthode est plus facile:

ls -l / root / &\u003e ls-error.log

Vous pouvez également utiliser l'ajout au lieu d'écraser:

ls -l / root / & \u003e\u003e ls-error.log

Entrée standard du fichier

La plupart des programmes, à l'exception des services, reçoivent des données pour leur travail grâce à une entrée standard. Par défaut, l'entrée standard attend que les données du clavier. Mais vous pouvez forcer le programme à lire des données du fichier à l'aide de l'opérateur. "<" :

chat.

Vous pouvez également rediriger immédiatement la sortie dans le fichier. Par exemple, réprimé par la liste:

sorte. sort.output.

Ainsi, nous redirigeons la sortie Linux dans la même commande.

Utiliser des tunnels

Vous pouvez travailler non seulement avec des fichiers, mais également rediriger la sortie de la même commande que l'entrée d'une autre. Il est très utile de compléter des opérations complexes. Par exemple, retirez cinq fichiers récemment modifiés:

ls -lt | Tête-n ° 5.

À l'aide de l'utilitaire Xargs, vous pouvez combiner des commandes de manière à ce que l'entrée standard soit transmise aux paramètres. Par exemple, copiez un fichier en plusieurs dossiers:

eCHO TEST / TMP / | Xargs -n 1 cp -v testfile.sh

Ici, le paramètre -N 1 définit qu'un seul paramètre doit être substitué à une commande et l'option -v dans CP vous permet de générer des informations détaillées sur les mouvements. Un autre, utile dans de tels cas, l'équipe est TEE. Il lit les données de l'entrée standard et écrit à la sortie ou à des fichiers standard. Par example:

echo "Tee test" | TEE FILE1.

En combinaison avec d'autres commandes, tout cela peut être utilisé pour créer des instructions complexes à partir de plusieurs commandes.

conclusions

Dans cet article, nous avons examiné la base de la redirection des flux de sortie Linux. Maintenant, vous savez comment rediriger la sortie vers le fichier Linux ou la sortie du fichier. C'est très simple et pratique. Si vous avez des questions, demandez-vous dans les commentaires!

Tout programme est un "automatique", conçu pour gérer les données: obtenir une information à l'entrée, elle donne l'autre à la suite du travail. Bien que les informations entrantes et / ou sortantes puissent être zéro, c'est-à-dire absent. Ces données transmises au programme de traitement sont sa contribution, le fait que les problèmes informatiques résultant du travail est une conclusion. L'organisation de l'entrée et de la sortie pour chaque programme est la tâche du système d'exploitation.

Chaque programme fonctionne avec un type de données spécifique: texte, graphique, son, etc. Comme, probablement, il est déjà devenu évident, l'interface de gestion système principale de Linux est un terminal conçu pour transmettre des informations de texte à partir du système utilisateur et dos. Étant donné que vous pouvez entrer des informations textuelles à partir du terminal et afficher le terminal, l'entrée et la sortie des programmes associés au terminal doivent également être textuelles. Cependant, la nécessité de fonctionner avec des données texte ne limite pas la possibilité de gérer le système et, au contraire, les étend. Une personne peut lire la production de tout programme et traiter ce qui se passe dans le système, et différents programmes sont compatibles les uns avec les autres, car ils utilisent le même type de présentation de données - Texte.

Les commandes et les scripts peuvent recevoir des données d'entrée de deux manières: dans le flux d'entrée standard (connecté au clavier) ou dans le fichier. Une séparation similaire existe et lors de l'affichage des données: les résultats de la commande ou du scénario par défaut sont dirigés vers l'écran du terminal, mais vous pouvez les réprimer dans le fichier. Si des erreurs se produisent pendant le fonctionnement. Les messages à propos de leur gag sont affichés à l'écran, le flux d'erreur peut également être redirigé vers le fichier.

Considérez d'abord quelques commandes avec lesquelles vous pouvez organiser l'entrée / la sortie.

Commandes de sortie pour le périphérique de sortie standard

Linux fournit plusieurs commandes pour afficher des messages dans un flux de sortie standard:

  • ECHO - Affiche une chaîne dans un flux de sortie standard.
  • PrintF - Texte formaté de sortie dans un flux de sortie standard.
  • Oui - affiche un texte répété dans un flux de sortie standard.
  • SEQ - Sortie la séquence de nombres dans le flux de sortie standard
  • Écran clair ou fenêtre transparent.

Par exemple, lors de l'utilisation de la commande ECHO, si vous spécifiez le symbole de contrôle \\ S, alors à la fin de la sortie ne sera pas transition vers une nouvelle chaîne:

$ echo "Quel est votre nom? \\ c"

Quel est votre nom? $

Ici $ est un symbole d'invitation.

Dans la ligne, vous pouvez également calculer les valeurs des variables d'interpréteur Shell et même d'autres commandes. Par exemple, la commande suivante rapporte quel répertoire initial de la variable d'utilisateur actuel (variable d'environnement $) et à laquelle il est connecté (la commande TTY est joint aux guillemets inverses afin que l'interprète joue le résultat de son exécution dans la chaîne).

€ Echo "Votre catalogue d'origine - $ à la maison, vous êtes connecté au terminal -` tty`

Votre catalogue d'accueil - / home / knoppix, vous êtes connecté au terminal - / dev / tty1

Étant donné que les devis doubles dans l'interprète Shell ont un objectif particulier, alors pour allumer des guillemets doubles à la chaîne affichée, vous devez annuler leur objectif particulier en utilisant la tresse inverse (\\). Donc, l'affectation d'un symbole spécial est annulée.

Par exemple, pour afficher la chaîne "/ dev / tty1" doit être exécutée:

$ echo "\\" / dev / tty1 \\ ""

Commandes d'entrée du périphérique d'entrée standard

La commande Lecture lit une ligne dans le flux d'entrée standard et écrit son contenu sur les variables spécifiées. Lors de la spécification de plusieurs variables, le premier mot est enregistré dans le premier d'entre eux, seconde - second, etc. Dans la dernière - le reste de la chaîne.

Le script suivant appelle une commande de lecture distincte pour lire chaque variable.


$ Test de chat
#! / Bin / bash
Echo "Nom: \\ c"
Nom de lecture.
ECHO "Nom de famille: \\ c"
Lire le nom de famille.
Echo "nom \u003d" $ nom "nom de famille \u003d" $ nom de famille

Ensuite, pour exécuter ce script, vous avez besoin d'un fichier de test pour exécuter: chmod 0755 Testez et exécutez-le. / Test. Résultat d'exécution: Nom: Ivan Nom de famille: Petrov Name \u003d Ivan Nom de famille \u003d Petrov

Entrée standard, sortie et flux d'erreur

Chaque programme à partir de l'interpréteur de commande reçoit trois flux d'E / S ouverts:

Entrée standard (SLDIN) - Sortie standard (SLDOUT) - Sortie d'erreur standard (STDERR)

Par défaut, ces flux sont associés à un terminal. Ceux. Tout programme qui n'utilise pas de flux, à l'exception de la norme s'attendre à une entrée du clavier Terminal, toute la sortie de ce programme, y compris les messages d'erreur, se produira sur l'écran du terminal.

Dans le même temps avec chaque processus (commande, script, etc.), exécuté dans l'interprète Shell, est associé à l'éblouissement des fichiers ouverts, dont le processus peut lire leurs données: et dans lequel il peut les enregistrer. Chacun de ces fichiers est identifié par le numéro appelé le descripteur de fichier, mais les trois premiers fichiers sont les flux d'E / S par défaut:

Descripteur de fichier
Flux d'entrée standard 0
Set de sortie standard 1
Débit d'erreur standard 2

En fait, 12 fichiers ouverts sont créés, mais les fichiers avec des descripteurs 0, 1 et 2 sont redondants pour les flux d'entrée, de sortie et d'erreur standard. Les utilisateurs peuvent également travailler avec des fichiers ayant des descripteurs de 3 à 9 (réservés).

Le fichier de flux d'entrée standard (SLDIN) a un descripteur 0. Dans ce fichier, les processus récupèrent leurs données d'entrée. Par défaut, le flux d'entrée est associé au clavier (périphérique / dev / tty), mais la sève de tout ce qu'elle passe via le canal à partir d'autres processus ou à partir d'un fichier ordinaire.

Le fichier de flux de sortie standard (stdout) dispose d'un descripteur 1. Toutes les données de processus de sortie sont enregistrées dans ce fichier. Par défaut, les données sont affichées sur l'écran du terminal (périphérique / dev / tty), mais elles peuvent également être redirigées vers un fichier ou envoyer à un autre processus.

Un fichier de flux d'erreur standard (Sidemer) dispose d'un descripteur 2. Dans ce fichier, les messages d'erreur résultant de l'exécution de la commande sont enregistrés. Par défaut, les messages d'erreur sont affichés sur l'écran du terminal (périphérique / dev / tty), mais ils peuvent également être redirigés vers le fichier. Pourquoi sélectionner un fichier spécial pour enregistrer des erreurs? Le fait est que c'est un moyen très pratique d'allouer des résultats du commandement de la production proposée, ainsi qu'une bonne occasion d'organiser efficacement la maintenance de divers types de fichiers journaux.

Un grand nombre d'utilitaires utilisent uniquement des flux standard. Pour de tels programmes, la coquille vous permet de rediriger indépendamment les flux d'entrée / sortie. Par exemple, vous pouvez supprimer la sortie des messages d'erreur, définir l'entrée ou la sortie du fichier.

Ceux. Lorsque vous appelez des commandes, vous pouvez spécifier si vous souhaitez recevoir des données d'entrée et où la sortie peut être envoyée, ainsi que des messages d'erreur. Par défaut, sauf indication contraire, il est compris de fonctionner avec le terminal: les données sont entrées dans le clavier et affichées à l'écran. Mais l'interprète Shell a un mécanisme de transfert qui vous permet d'associer des flux standard avec divers fichiers. Dans ce cas, lors de la redirection d'un flux d'erreur standard, vous devez spécifier le descripteur de fichier (2). Pour les flux d'entrée et la sortie, cela n'est pas nécessaire.

Cas privé utile d'utilisation du mécanisme de redirection de flux - Redirection To / Dev / Null, qui vous permet de vous débarrasser des messages inutiles à l'écran. En utilisant le même mécanisme, vous pouvez créer des fichiers vides:

% Cat MyFile - Créez un fichier myfile vide dans le répertoire actuel.

/ dev / null - un fichier spécial, qui est t. n. "Dispositif vide." L'entrée dans elle est réussie, quel que soit le volume d'informations "enregistrées". Lire de / dev / null équivaut à la lecture de la fin du fichier EOF.

Rediriger les flux d'E / S Il est effectué, comme DOS (plus précisément, la syntaxe de redirection du flux DOS perçu de UNIX) à l'aide de symboles:

- Redirection du flux de sortie standard
- Redirection d'un flux de sortie standard en mode de doute
- Redirection du flux d'entrée standard
- obtenir des données d'un flux d'entrée standard jusqu'à ce que le séparateur se rencontre

Cependant, contrairement aux DOS, lors de la création d'un canal de logiciel entre deux processus UNIX / Linux OS, lance les deux processus à la fois et transfère des informations via la mémoire tampon système (sans enregistrement intermédiaire sur le disque dur). Ainsi, les canaux logiciels à UNIX / Linux sont un moyen très efficace d'échanger. En cas de débordant de la mémoire tampon du système (par exemple, si le programme `` `` transfer "" affiche des informations dans un canal plus rapidement qu'il ne peut gérer le système d'exploitation "Accepter" Programme) suspend automatiquement le processus qui enregistre dans le canal avant la tampon est libéré.

Les opérateurs de redirection les plus courants

Description de la syntaxe NP / P
1 Le fichier de fichier envoie un flux de sortie standard dans un nouveau fichier.

2 Command 1 fichier Envoie un flux de sortie standard dans le fichier spécifié.

3 Le fichier de fichier envoie un flux de sortie standard au fichier spécifié (mode de connexion).

4 Commande 2 & 1 Fichier Dirige la sortie standard et les flux d'erreur dans le fichier spécifié.

5 Commande 2 Fichier Envoie un flux d'erreur standard dans le fichier spécifié.

6 Command 2 Fichier Envoie un flux d'erreur standard dans le fichier spécifié (mode de fixation).

7 Commande 2 & 1 Fichier Dirige la sortie standard et les flux d'erreur dans le fichier spécifié (mode de connexion)

8 File Command1 File2 Soit entrée dans le premier fichier et envoie la sortie au deuxième fichier

9 fichier de commande sous forme de flux d'entrée standard reçoit des données du fichier spécifié

10 La commande Séparateur reçoit des données d'un flux d'entrée standard jusqu'à ce que le séparateur se rencontre

11 La commande & m sous forme de flux d'entrée standard reçoit des données d'un fichier avec un m à un descripteur

12 La commande & m commande envoie un flux de sortie standard dans un fichier avec un descripteur de la main

L'opérateur N & M vous permet de rediriger le fichier avec le descripteur N dans lequel le fichier est envoyé au descripteur M. Il peut y avoir plusieurs opérateurs de ce type dans la ligne de commande, dans ce cas, ils sont calculés de gauche à droite.

Exec Commande et descripteurs de fichiers

La commande Exec remplace l'interpréteur de shell actuel par la commande spécifiée. Il est généralement utilisé pour fermer l'interprète actuel et exécuter une autre. Mais elle a une application différente.

Par exemple, une équipe de type

EXEC FILE Donne le fichier spécifié avec le flux d'entrée standard de toutes les commandes. Exécuter
Mode interactif n'a aucun sens - il est destiné à être utilisé dans des scénarios,
Pour toutes les commandes après cela, ils ont lu leur entrée dans le fichier. Dans ce cas
À la fin du script doit être une équipe

EXEC & - qui ferme le flux d'entrée standard (dans ce cas, le fichier). Cette technique est appliquée
Principalement dans les scripts en cours d'exécution lors de la sortie du système.

Pointeur de commande Exec dans le fichier avec un descripteur 0 (stdin). Vous pouvez restaurer ce pointeur uniquement à la fin du script.
Si le scénario est censé continuer à lire les données du clavier, vous devez sauvegarder.
Pointeur sur l'ancien flux d'entrée. Vous trouverez ci-dessous un petit script dans lequel il est montré comment le faire.

$ Chat f_desc.
#! / Bin / bash
Exec 3 & 0 0file
Lire Linel
Lire la ligne2.
Exec 0 & 3
Echo $ 1inel
Echo $ line2.

La première commande Exece enregistre le pointeur au flux d'entrée standard (STDIN) dans le fichier avec un descripteur 3
(Tout entier est autorisé dans la plage de 3 à 9), puis ouvre le fichier de fichiers à lire. Les deux commandes de lecture suivantes
Lisez à partir du fichier deux lignes de texte. La deuxième commande EXEC restaure le pointeur au flux d'entrée standard: maintenant
Il est associé au fichier STDIN, pas de fichier. ECHO Terminer les commandes Affiche le contenu des chaînes de lecture à l'écran,
qui ont été enregistrés dans des variables de linel et d'iine2.

Le résultat du scénario:
$ ./ f_desc.
Hey!
Jusqu'à ce que!

Avez-vous aimé l'article? Partager avec des amis: