Bash Redirection de la sortie. Rediriger dans plusieurs conclusions. Entrée standard du fichier

En utilisant la réaffectation des périphériques d'E / S, un programme peut envoyer sa sortie à l'entrée d'une autre ou intercepter la sortie d'un autre programme en l'utilisant comme données d'entrée. Ainsi, il est possible de transmettre des informations du processus au processus avec des coûts de programme minimaux. Presque cela signifie que pour les programmes utilisant des périphériques d'entrée et de sortie standard, le système d'exploitation permet:

  • les programmes d'affichage ne sont pas à l'écran (flux de sortie standard), mais à un fichier ou à une imprimante (redirection de sortie);
  • lire les données d'entrée ne sont pas du clavier (flux d'entrée standard), mais à partir d'un fichier prédéterminé (redirection d'entrée);
  • transmettre des messages affichés par un programme en tant que saisie pour un autre programme (convoyation ou composition d'équipe).

De ligne de commande Ces capacités sont mises en œuvre comme suit. Afin de rediriger les messages texte affichés par n'importe quelle ligne de commande de la ligne de commande dans fichier texte, vous devez utiliser la conception commande\u003e Nom du fichier. Si le fichier spécifié pour la sortie existait déjà, il est écrasé (l'ancien contenu est perdu), s'il n'existe pas. Vous ne pouvez pas non plus créer de fichier à nouveau et ajouter des informations à la commande affichée à la fin d'un fichier existant. Pour ce faire, la commande de redirection doit être définie comme suit: Équipe \u003e\u003e Nom du fichier. Avec le symbole< можно прочитать входные данные для заданной команды не с клавиатуры, а из определенного (заранее подготовленного) файла: команда < имя_файла

Exemples d'E / S Redirection / Invite de commande

Nous donnons plusieurs exemples de redirection d'E / S.

1. Conclusion des résultats Équipes de ping déposer. Ping ya.ru\u003e ping.txt

2. Ajouter un texte de référence pour xcopopy Commande à copier.txt Fichier: XCopy /? \u003e\u003e copy.txt

Si vous avez besoin d'un message d'erreur (flux d'erreur standard), vous pouvez rediriger vers le fichier texte à l'aide du nom de la commande 2\u003e dans ce cas, la sortie standard sera effectuée à l'écran. Il existe également la capacité des messages d'information et des messages d'erreur à afficher dans le même fichier. Cela se fait comme suit: Équipe\u003e Nom du fichier 2\u003e & 1

Par exemple, dans la commande ci-dessous, le flux de sortie standard et le flux d'erreur standard sont redirigés vers le fichier copy.txt: Xcopy a: \\ 1.txt c:\u003e copy.txt 2\u003e & 1

Trois directions d'E / S sont en surbrillance - Flux d'entrée, de sortie et d'erreur standard ( stdin, stdout, stardr ). Par défaut, les trois flux sont associés (associés) avec un terminal. Dans le même temps, le programme affiche tous ses messages, y compris les erreurs du terminal. Coquille. Vous permet de rediriger ces flux standard, de définir l'entrée et la sortie et la diffusion en continu.

Rediriger les flux d'E / S.

\u003e Fichier Rediriger le flux de sortie standard dans le fichier déposer

\u003e\u003e Fichier. -Fire standard flux de sortie dans le fichier déposer Avec l'ajout du fichier.

-Le réglage du flux d'entrée standard du fichier déposer.

prog1 | Prog2. - Examiner le flux de sortie du programme PROG1 dans le flux d'entrée du programme prog2.

n\u003e fichier déposer.

n \u003e\u003e fichier. -Préer standard flux avec un des descripteurs n pour fichier déposer Avec l'ajout du fichier.

n\u003e & m - Disponibilité des flux avec descripteurs n. et m. .

$ PROG1\u003e / dev / null 2\u003e & 1

/ dev / null - Ceci est un périphérique pseudo qui détruit le flux dirigé vers elle.

Le transfert du flux de sortie d'un programme dans le flux d'entrée est utilisé souvent. Par example:

$ Gzip -d archive.tar.gz | taud -xf.

Voici le fichier omips archive.tar.gz. , Passé par deux archivés. Flux de sortie de l'utilitaire gzip. Transmis à l'utilitaire de flux d'entrée le goudron . De même, la même opération pourrait être accomplie différemment:

$ Gzip -d archive.tar.gz

$ ta -xf archive.tar

Depuis la langue Shell de Bourne. Il s'agit d'un langage de programmation procédural, y compris dans d'autres langues similaires, il existe des opérateurs de contrôler la séquence de l'exécution de la commande. L'opérateur nécessaire doit vérifier à certaines conditions, en fonction de l'exécution de laquelle le programme supplémentaire du programme est déterminé. Un tel opérateur est l'équipe test. Cette commande vérifie l'exécution d'une condition. À l'équipe test Il y a deux options d'appel:

Condition de test

[état]

Il convient de noter qu'il n'y a pas de lacunes entre le support et la maladie, sinon Coquille. ne sera pas en mesure d'identifier "[" comme une équipe test . Avec une achèvement réussie test Retour "0" .

Conditions de vérification des fichiers:

-f fichier. Déposer "Déposer" C'est un fichier régulier.

-D fichier Déposer " déposer " est un catalogue.
-C fichier Déposer "Déposer" C'est un fichier spécial.
-R fichier Déposer "Déposer" A la permission de lire.

-w fichier. Déposer "Déposer" A la permission d'écrire.

-X fichier Déposer "Déposer" A la permission d'exécution.

-s fichier. Déposer "Déposer" pas vide.

Conditions de vérification de chaîne:

String1 \u003d string2. Cordes string1 et string2. correspondre.

String1! \u003d String2 Cordes string1 et string2. ne correspondent pas.

-N string1 Ligne string1 existe.

-z string1 Ligne string1 n'existe pas.

Conditions d'exploitation avec des entiers:

x -eq y. x équivalemment y.

X-Y. x pas égal à y

x -gt Y. x plus Y.

X -ge Y. x plus ou égal y

X -Lt Y. x moins y.

x -le y. x moins ou égal y

Dans ce cas, l'équipe test Perçoit des cordes exactement comme des entiers. La valeur zéro correspond également à une chaîne vide.

Opérations logiques en contexte test

! (ne pas) Logique "pas"

-o (ou) Logique "ou"

-a (et) Logique "et"

Opérateur conditionnel "si"

Le type d'utilisation général de l'opérateur conditionnel si c'est comme suit:

si<условие>

puis.<список команд>

[Elif.<условие>

puis.<список> ]

Les expressions isolées entre crochets sont facultatives. Ceux. Vous pouvez présenter la modification "hachée" la plus courante de l'opérateur conditionnel:

si<условие>

puis.<список команд>

Dans ce cas, si <условие> Terminé (code d'achèvement 0) est effectué <список команд>. Sinon <список команд> ignoré.

Opérateur de choix cas

Dans le cas général de la syntaxe de l'opérateur cas comme suit:

Cas<строка> DANS.

Modèle 1)

........

Modèle)

........

........

Valeur <строка> Comparé aux modèles, dans l'ordre. Si une coïncidence a été trouvée, les commandes de la section correspondante sont exécutées. Il convient de noter que les modèles permettent l'utilisation de masques. Si les coïncidences n'étaient pas trouvées, les commandes de la section avec le modèle "*" sont exécutées (similaires à défaut. Sélecteur changer dans DE ).

Par exemple, donnez un morceau du script d'initialisation BSD UNIX. . Voici des variables (inetd_enable et inetd_flags.) ont été obtenus dans un autre fichier ( rc.conf).

. /etc/rc.conf.

Cas ($ inetd_enable) dans

)

si [-X / USR / SBIN / INETD]; Puis.

/ usr / sbin / inetd $ inetd_flags

Fi

;;

Esac

Opérateur de cycle avec la liste pour

Opérateur de syntaxe pour

Pour<имя>

<список команд>

Le fragment alloué entre crochets peut être absent. Opérateur pour Fournit l'exécution du cycle autant de fois que des mots dans la liste des valeurs. Dans ce cas, la variable <имя> Prend des mots séquentiels de la liste. La liste elle-même peut être formée à partir de la sortie d'autres commandes. Si la liste est manquante, alors <имя> accepte les valeurs transmises comme paramètres de script de position.

Opérateur de vélo avec une vraie condition pendant que

Opérateur de syntaxe pendant que En général, il a la structure suivante:

Pendant que<условие>

<список команд>

Opérateur pendant que Il est préférable que les valeurs de paramètre ne soient pas connues à l'avance. La liste des commandes sera effectuée dans le cycle jusqu'à ce que la vérité soit préservée. Lorsque vous entrez d'abord le cycle, la condition doit être effectuée.

Opérateur de cycle avec fausse condition jusqu'à ce que

Opérateur de syntaxe jusqu'à ce que En général, il a la structure suivante:

Jusqu'à ce que<условие>

<список команд>

La liste des commandes sera effectuée dans le cycle jusqu'à ce que la condition soit stockée. Lorsque vous entrez d'abord le cycle, la condition ne doit pas être effectuée. Il convient de noter que l'état du cycle est vérifié pour la fausseté après chaque, incl. Et la première commande effectuée dans le cycle.

Équipes principales OS UNIX. Travailler avec des fichiers

1. Équipe pwd..

Syntaxe: pwd. .

Description: La commande affiche le nom du répertoire actuel de l'interpréteur de commande de travail.

Exercice 1.

Utilisez la commande PWD pour définir votre répertoire personnel.

Refléter la commande et le résultat de ses travaux dans le rapport.

2. Équipe homme..

Syntaxe: homme. nom.

Nom est le nom des commandes qui vous intéressent, utilitaires, appel système, fonction de bibliothèque, fichier.

La description : Manuel UNIX - guider système opérateur UNIX. Les informations de là sont disponibles en mode interactif à l'aide de l'utilitaire homme. .

Tâche 2.

En utilisant l'utilitaire de l'homme, consultez les informations de commande PWD.

Écrivez brièvement des informations sur l'équipe dans le rapport (en russe).

3. Équipe cD.

Syntaxe: cD Nom de la qualité.

Description: Il s'agit d'une commande de modification du répertoire actuel. Nom de la qualité est le nom complet ou relatif du répertoire que vous souhaitez effectuer le courant.

cD Sans paramètres actuels, faites votre répertoire personnel.

Tâche 3.

Rendre le niveau de répertoire actuel ci-dessus. Vérifiez-le, puis revenez à votre répertoire personnel. Vérifiez le changement de répertoire.

Effectuer les commandes faites pour réfléchir dans le rapport.

4. Équipe ls..

Syntaxe: ls. Picsy_name

Description: Répertoire spécifié de la visionneuse de maquillage.

ls. Sans Paramètres imprime une liste de fichiers à partir du répertoire actuel.

La liste résultante n'inclut pas les fichiers dont les noms commencent par le symbole " . "- Fichiers créés par divers programmes système À ses fins. Voir liste complète Les fichiers peuvent être spécifiés dans la commande ls. "-Une clé

ceux. Ls -avy_directory

Droits d'accès au fichier

Avec chaque fichier dans OS UNIX. Un mot de 12 bits est associé à des «droits d'accès» au fichier.

Les plus jeunes 9 bits de ce mot sont combinés en trois groupes de trois bits; Chaque groupe spécifie les droits d'accès au propriétaire du fichier, pour son groupe et pour tous les autres utilisateurs. Trois bits de chaque groupe sont responsables du droit de lire, de demander et d'utiliser le fichier.

Pour connaître les droits d'accès à un fichier particulier, vous pouvez utiliser l'équipe.

, par exemple:

\u003e LS -L / bin / chat

Situé au début du groupe de cordes de caractères -Rwxr-xr-x Affiche le type de fichier (le premier caractère; moins signifie que nous traitons avec un fichier ordinaire, lettre rÉ. Il y aurait un catalogue, etc.) et des droits d'accès, respectivement, pour le propriétaire (dans ce cas rwx . Lecture, écriture et exécution), groupes et tous les autres (dans ce cas r-x. . Il n'y a pas de droits à enregistrer). Donc le fichier / bin / chat Disponible pour toute lecture et exécution utilisateur, mais seul un utilisateur peut le modifier racine. (c'est-à-dire administrateur).

Vous pouvez écrire les droits d'accès au mot au fichier sous la forme d'un nombre octal (3 caractères - chiffre octal), à trois chiffres (propriétaire, groupe, autres utilisateurs). Chaque numéro d'octoral à trois chiffres est formé comme le Quantité de droits: 4- Droits de lecture, 2- Droits d'enregistrement, 1 - Pour une utilisation (de Triade binaire): (111) 2 =2 0 +2 1 +2 2 =(1+2+4) 10 .

Par example, 7 \u003d 1 + 2 + 4 þ RWX Droits

4 2 1

6 \u003d 0 + 2+ 4 þ RW- Droits

4 2 0

Dans le nombre à trois chiffres de tâches de droits: 744 Le propriétaire définit tous les droits, pour la lecture du groupe - uniquement pour les autres utilisateurs - seulement la lecture.

Une commande est utilisée pour utiliser les droits d'accès au fichier. chmod. qui vous permet de définir de nouveaux droits d'accès sous la forme d'un nombre octal, par exemple:

$ Chmod 744 filel.c.

Tâche 4.

a) Pour obtenir des informations complètes sur la commande LS, utilisez l'utilitaire de l'homme. Chargez la sortie de commande dans n'importe quel fichier texte.

b) Regardez le contenu complet du répertoire actuel et rediriger cette sortie également dans un fichier texte.

c) utiliser l'équipels -l<имя_файла> informations de sortie sur les droits d'accès au fichier texte avec lequel vous avez travaillé au § 4B, puis redirige ces informations dans le même fichier texte. Expliquer la sortie résultante.

5. Équipe chat..

Redirection d'E / S.

Pour afficher le contenu d'un petit fichier texte à l'écran, vous pouvez utiliser la commande:

chat. Nom de fichier

Attention! N'essayez pas d'afficher le contenu du répertoire et des fichiers binaires.

Un grand fichier de test est pratique pour voir l'équipe. suite (Description du poste trouvée dans Manuel UNIX ). Pourquoi l'équipe est inconfortable ici chat. ?

Dans une équipe chat. vous pouvez définir plusieurs noms de fichiers:

fichier CAT1 Fichier 2 ... Fichier n

dans ce cas, le contenu de tous les fichiers d'une ligne sera affiché à l'écran.

Vous pouvez rediriger la sortie dans un fichier:

fichier CAT 1 Fichier 2\u003e Résultats de fichier

La sortie de redirection d'un flux de sortie standard (écran) vers un fichier est standard pour toutes les commandes. Rediriger l'entrée standard (à partir du clavier), par exemple, pour prendre des données pour le programme dans le fichier, vous pouvez utiliser le signe "<”.

chat\u003e NEW_FILE - Créez un nouveau fichier texte avec le contenu entré par le clavier.

Processus d'entrée de données interrompre -

Tâche 5.

Créez un nouveau fichier texte à l'aide de CAT et affichez son contenu. Passage de sortie d'un flux standard dans un autre fichier dont le nom du clavier et assurez-vous que l'opération a effectué correctement.

6. Les commandes les plus simples de travailler avec des fichiers : CP, RM, MKDIR, MV

Pour créer un nouveau répertoire, une commande est utilisée:

mkdir.picsy_name

Pour copier le contenu d'un fichier à un autre, la commande est utilisée:

cp. File_system File_Name. Nom.

Équipe

cP Fichier 1 Fichier 2 .... Fichier N Répertoire Destination

il sert à copier un fichier ou des fichiers sur un répertoire existant avec le nom du répertoire de dicté sous ses propres noms. Au lieu des noms des fichiers copiés, vous pouvez utiliser leurs modèles. Les modèles sont définis à l'aide de métasimvols:

* - correspond à toute la chaîne du litre, y compris vide.

Tous les littéraux simples

[...] - correspond à n'importe quel litté entre parenthèses. Une paire de litre, séparée par un moins, définit la gamme du litre.

Équipe

cP - R. Dir_inader Dir_Name

sert pour la copie récursive d'un répertoire (DIR_IXTER) à un nouveau répertoire (DIR_NABS).

Au lieu de noms, leurs modèles peuvent être utilisés dans les commandes de copie.

Équipe

rM Fichier 1 Fichier 2 .... Fichier N.

vous permet de supprimer 1 ou plusieurs fichiers réguliers à partir du répertoire actuel.

Au lieu de noms, les modèles peuvent être utilisés. Si vous souhaitez supprimer un ou plusieurs répertoires avec leur contenu (enlèvement récursif) dans la commande rm Utiliser la clé -R.

Rm-r dir 1 dir 2

Renommer la commande:

mv Name_name_name_name

Le fichier avec le nom du nom de la source renomme le nom_name_name Name_Name. Dans ce cas, avant d'exécuter la commande de fichier avec le nom, le nom_name ne doit pas exister.

Tâche 6.

Créer nouveau répertoire à l'intérieur de votre maison. Organisez-vous un petit fichier de test avec un contenu de deux lignes:

"J'étudie le travail dans UNIX OS

Organiser le script. "

Copiez le contenu de ce fichier à un autre - avec le même nom, mais dans le répertoire / maison. Supprimez le fichier d'origine créé à partir de votre répertoire si la copie est passée avec succès. Vérifiez le contenu des répertoires et des fichiers utilisés.

Tâche 7.

une). Lorsque vous maîtrisez le travail en ligne avec les commandes les plus simples de Unix, créez un script avec un script avec un script avec un éditeur KWriter avec un scénario correspondant à une exécution séquentielle:

Tâche 3,

Tâche 4b, 4V,

Tâche 5,

Tâche 6.

Dans la tâche 6, n'oubliez pas de vérifier que le fichier est passé avec succès avec succès pour copier le fichier, avec l'écran d'affichage. des messages texte et le contenu du répertoire correspondant.

Besoin de fichier de commande. Une émission compétente de demandes d'entrée de données à partir du clavier à l'aide de la commande est organisée à l'aide de la commande: $ echo - n "Texte de la demande".

2). Enregistrez le script nommé MyScript1, exécutez-le pour exécuter une commande

sh myscript1

entrez les données demandées et vérifiez les résultats obtenus.

3). Faites un rapport sur les travaux de laboratoire, qui doivent également être reflétés et votre travail en mode interactif et avec un script, y compris le texte du script (avec des commentaires) et les résultats obtenus à l'écran et dans les fichiers.

Appels système gueuid et getpid.

Découvrez l'ID utilisateur qui exécute le programme à exécuter, - Uid et l'identifiant du groupe auquel il appartient , -Gid vous pouvez utiliser des appels système getuid () et getpid () En les appliquant dans ce programme.

Prototypes d'appel système:

#Inclure.

#Inclure.

uid_t utile (void);

gid_t getgid (void);

Tâche 8.

Écrivez, compilez et exécutez un programme qui imprimerait un identifiant de l'utilisateur exécutant le programme et l'identifiant de son groupe.

Activez le programme avec les résultats dans le rapport.

Questions de contrôle

1. Le concept du fichier dans OS UNIX. . Qu'est-ce qu'un répertoire de base?

2. Quels sont les moyens de regrouper des équipes existent Coquille. -Interprétateur? Donnez des exemples d'utilisation.

3. Comment est la redirection d'E / S?

4. Quel est le convoyeur de commande? Donne un exemple.

5. Comment les outils Coquille. effectuer une action arithmétique Coquille. -Le transfert?

6. Quelles sont les règles pour générer des noms de fichiers?

7. Comment la solution des résultats d'exécution de la commande est-elle?

8. Comment interpréter la chaîne cMD1 & CMD2 & ?

9. Comment interpréter la chaîne cmd1 && cmd2 & ?

10. Comment interpréter la chaîne cmd1 || Cmd2 & ?

11. Comme B. Unix Droits d'accès au fichier défini? Quelle équipe peut être vue pour fichier spécifique.?

12. Comment déterminer l'identifiant de l'utilisateur qui a démarré le programme et l'identifiant de son groupe?

Travail de laboratoire № 3.

Processus dans le système d'exploitation UNIX.

but du travail

Apprenez à créer des processus et maîtrisez la modification du contexte utilisateur des processus à l'aide des appels système utilisés dans les programmes dans la langue. DE, dans OS UNIX..

1. Examiner l'organisation des processus dans Unix : Concept de processus, contexte de processus, cycle de vie de processus, identification de processus, structure hiérarchique processus. Écrire sur DE et déboguer le programme conformément à la tâche 1.

2. Lisez la création du processus dans Unix , avec l'organisation de l'achèvement du processus. Écrire et déboguer le programme (langue DE ) Conformément à la tâche 2, incluez-la dans le rapport.

3. examiner les paramètres de fonction principale () dans la langue DE , variables d'environnement Et arguments de ligne de commande. Écrire un programme dans la langue DE Conformément à la tâche 3, débogage et l'inclure dans le rapport avec les résultats.

4. Examinez la famille de fonctions pour organiser un appel système exec ().

5. Écrivez un programme dans la langue DE Conformément à l'option de tâche 4 émise par l'enseignant, de déboguer le programme et de démontrer les résultats obtenus par l'enseignant. Activer un programme avec les résultats dans le rapport.

6. Protégez le travail à l'enseignant, répondant aux questions de test.

1403

Redirection "2\u003e & 1", "\u003e / dev / null" ou des flux de sortie dans UNIX (bash / sh)

Votre évaluation: chef-d'œuvre est remarquablement très bonne bonne normale, pas lu tolérante médiocre médiocre très mauvais pas lu

Flux de sortie

Les messages de script sont affichés dans des flux bien définis - des flux de sortie. Donc le fait que nous dérivons à travers

echo "Bonjour, Monde!"

Non seulement affiché à l'écran, mais du point de vue du système, et spécifiquement - les interprètes de commande SH et BASH - sont affichés via un flux de sortie donné. Dans le cas de l'écho - un flux au numéro 1 (stdout), avec lequel l'écran est associé.

Certains programmes et scripts utilisent également un autre flux de sortie - au numéro 2 (stardr). En cela, ils produisent des messages d'erreur. Grâce à cela, il est possible de séparer séparer les flux des messages d'information ordinaires et des messages d'erreur et de les traiter séparément.

Par exemple, vous pouvez bloquer la sortie messages d'information, ne laissant que des messages d'erreur. Ou envoyer la sortie des messages d'erreur dans fichier séparé Pour la journalisation.

Qu'est-ce que "\u003e quelquefile"

Un tel enregistrement dans UNIX (INTERPTRES DE BASH et SH) indique la redirection des flux de sortie.

Dans l'exemple suivant, nous redirigerons tous les messages d'informations (habituels) de la commande LS au fichier myFile.txt, obtenant ainsi dans ce fichier simplement list:

$ LS\u003e myfile.txt


Dans le même temps, après avoir cliqué sur Entrée, vous ne verrez rien à l'écran, mais dans le fichier myFile.txt, tout ce qui aurait dû être affiché à l'écran sera affiché.

Cependant, faisons une opération délibérément erronée:

$ LS / masdfasdf\u003e myfile.txt


Et que se passe-t-il? Parce que Le répertoire MASDFASDF dans la racine du système de fichiers n'existe pas (je le fais, soudainement, avez-vous soudainement?), Alors la commande LS générera une erreur. Cependant, il annulera cette erreur, ce n'est plus via le flux de stdouts habituel (1), mais via le flux d'erreur StDerr (2). Et la redirection est spécifiée uniquement pour stdout ("\u003e myfile.txt").

Parce que Studer Stream (2) Nous n'avons pas redirigé n'importe où - Un message d'erreur apparaît à l'écran et n'apparaît pas dans le fichier myFile.txt

Et maintenant exécutons la commande LS afin que les données d'information soient écrites dans le fichier myFile.txt et les messages d'erreur dans le fichier myFile.err, et rien n'apparaît à l'écran pendant l'exécution:

$ LS\u003e myfile.txt 2\u003e myfile.err


Nous avons ici trouvé pour la première fois spécifiant le numéro de flux comme redirection. Enregistrement "2\u003e myfile.err" indique que le flux avec numéro 2 (stardr) doit être redirigé vers le fichier myFile.err.

Bien sûr, nous pouvons tous les deux circuler vers un fichier ou dans le même appareil.

2>&1

Souvent, dans des scripts, vous pouvez trouver un tel enregistrement. Cela signifie: "Un flux avec le numéro 2 redirige vers le flux avec le numéro 1" ou "Studer Stream - Direct Via STDOUT Stream." Ceux. Tous les messages d'erreur nous guidons par lesquels les messages ordinaires et non erronés ne sont généralement pas imprimés.

$ LS / asfasdf 2\u003e & 1


Mais un autre exemple dans lequel tous les messages sont redirigés vers le fichier myFile.txt:

$ LS / asfasdf\u003e myfile.txt 2\u003e & 1


Dans ce cas, tous les messages, les erreurs et l'ordinaire seront enregistrés dans myfile.txt, car Nous avons d'abord redirigé le flux STDOUT, puis indiqué que les erreurs doivent être pompées dans stdout - respectivement, au fichier myFile.txt

/ dev / null

Cependant, parfois, nous devons simplement cacher tous les messages - ne pas les sauver. Ceux. Juste bloquer la sortie. Pour ce servir appareil virtuel / dev / null. Dans l'exemple suivant, toute la conclusion des messages de commande LS ordinaires que nous allons envoyer à / dev / null:

$ LS\u003e / dev / null


Rien ne sera affiché à l'écran, à l'exception des messages d'erreur. Et dans l'exemple suivant - et les messages d'erreur seront bloqués:

$ LS\u003e / dev / null 2\u003e & 1


De plus, cette entrée équivaut à la vue du formulaire:

$ LS\u003e / dev / null 2\u003e / dev / null


Et dans l'exemple suivant, nous ne bloquerons que des messages d'erreur:

$ LS 2\u003e / dev / null

Notez que vous pouvez déjà spécifier "2\u003e & 1", car Le flux (1) n'est pas redirigé nulle part et dans ce cas, les messages d'erreur seront tritiquement digérés à l'écran.

Quel est le premier - un œuf ou un poulet?

Je vais vous donner ici 2 exemples.

Exemple 1)

$ LS\u003e / dev / null 2\u003e & 1


Exemple 2)

$ LS 2\u003e & 1\u003e / dev / null


Résumé - De la permutation des lieux esclaves, le montant ne change pas. Mais l'ordre de référence des pointeurs joue un rôle!

Le fait est que les interprètes lisent et appliquent des redirections de gauche à droite. Et maintenant nous analyserons les deux exemples.

Exemple 1.

1) "\u003e / dev / null" - nous guidons le flux 1 (stdout) à / dev / null. Tous les messages tombant dans le flux (1) seront dirigés vers / dev / null.

2) "2\u003e & 1" - Nous redirigons le flux 2 (stardr) dans le flux 1 (stdout). Mais parce que Le flux 1 est déjà associé à / dev / null - tous les messages seront toujours dans / dev / null.

Résultat: sur l'écran - vide.

Exemple 2.

1) "2\u003e & 1" - Nous redirigeons le flux d'erreur STDERR (2) dans le flux de stdout (1). En même temps, parce que Le flux par défaut est associé aux messages d'erreur Terminal - Nous allons voir avec succès à l'écran.

2) "\u003e / dev / null" - et ici, nous sommes redirigés vers l'écoulement de 1 à / dev / null. Et nous ne verrons pas de messages réguliers.

Résultat: nous verrons des messages d'erreur à l'écran, mais nous ne verrons pas les messages habituels.

Conclusion: Tout d'abord, redirigez le flux, puis faites-y.

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 des flux d'entrée. sortie Linux - Des dossiers. 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!

Afin d'écrire des données dans déposer Ou les lire de là, le processus doit d'abord ouvrir ce fichier (lors de l'ouverture de l'ouverture, vous devrez peut-être pré-la créer). Dans ce processus obtient descripteur (Décrivez) Fichier ouvert - Le numéro est unique pour ce processus qu'il utilisera dans toutes les opérations d'enregistrement. Le premier fichier ouvert recevra un descripteur, le second - 1 et ainsi de suite. Après avoir fini de travailler avec le fichier, le processus se ferme Tandis que le descripteur est libéré et peut être réutilisé. Si le processus est terminé sans fermer les fichiers, le système le fait. Strictement parlant, uniquement dans l'ouverture du descripteur, il est indiqué quel fichier sera utilisé. En tant que "fichier", fichiers conventionnels et fichiers de trous sont utilisés (le plus souvent - terminaux), et canauxdécrit dans la section de pipeline. Convoyeur. D'autres opérations - lecture, écriture et fermeture, travailler avec un descripteur, comme avec flux de donnéesEt où exactement ce flux, cela n'a pas d'importance.

Chaque processus Linux obtient lorsque vous commencez trois "Fichier" ouvert sur le système informatique. Le premier (descripteur) est ouvert sur en train de lire, c'est entrée standard traiter. Il s'agit d'une entrée standard que toutes les opérations de lecture fonctionnent si le descripteur de fichier n'est pas spécifié. Deuxièmement (descripteur 1) - ouvert à l'enregistrement, il sortie standard traiter. Toutes les opérations d'écriture fonctionnent avec elle si le descripteur de fichier n'est pas spécifié explicitement. Enfin, le troisième flux de données (descripteur 2) est destiné à afficher des messages de diagnostic, il est appelé sortie d'erreur standard. Étant donné que ces trois descripteurs sont déjà ouverts au début du processus, le premier fichier, ouvert par le processus lui-même, aura probablement un descripteur 3.

Descripteur de flux de données descripteur, processus ouvert. Les descripteurs sont numérotés à partir de. Lorsque vous ouvrez un nouveau flux de données, son descripteur obtient le plus petit des chiffres inutilisés en ce moment. Trois avant le descripteur ouvert: entrée standard (), sortie standard (1) et sortie d'erreur standard (2) Le processus est émis au démarrage.

Mécanisme de copie alentours, Décrit dans la conférence, implique, entre autres, la copie de tous les descripteurs de processus parent ouverts aux subdits. En conséquence, le parent et le processus enfant ont les mêmes flux de données dans les mêmes descripteurs. Quand commence démarrer l'interprète d'équipeLes trois avant le descripteur ouvert sont liés à lui avec terminal (Plus précisément, avec le fichier Hole Tty approprié): l'utilisateur entre dans la commande du clavier et voit des messages à l'écran. Par conséquent, toute commande exécutée à partir du shell de commande affichera le même terminal et toute commande fonctionnant de manière interactive (pas en arrière-plan) - entrer de là.

Sortie standard

MODYIUS a déjà rencontré que certains programmes sont capables de produire non seulement sur le terminal, mais également à un fichier, par exemple, Info lors de la spécification de clé paramétrique "-O" avec le nom du fichier affichera le texte du manuel dans le fichier, au lieu de l'afficher sur le moniteur. Même si les développeurs de programmes ne sont pas fournis pour une telle clé, la méthodie est connue et une autre façon de sauvegarder la sortie du programme dans le fichier au lieu de l'afficher sur le moniteur: Placez le signe "\u003e" et spécifiez le nom du fichier après. Ainsi, MODYIUS a déjà créé de courts fichiers texte (scénarios) à l'aide de l'utilitaire CAT (voir l'accès des conférences aux fichiers et aux répertoires).

$ Cat\u003e TextFile est un fichier d'exemples. ^ D $ LS -L TEXTFILE -RW-R - R-- 1 METHODODE METHODODY 23 nov 15 16:06 Textfile

Exemple 2.. Rediriger la sortie standard dans le fichier

De l'utilisation du symbole "\u003e", les capacités de l'utilitaire de chat lui-même ne sont bien sûr pas développées. De plus, le chat dans cet exemple n'a pas reçu de shell de commandes Aucun paramètre: aucun signe "\u003e" ni le nom de fichier suivant. Dans ce cas, le chat a travaillé comme d'habitude, ne sachant pas (et même pas intéressé!) Où les données sont prises: sur l'écran du moniteur, dans un fichier ou ailleurs. Au lieu d'assurer la livraison de la sortie à la destination finale (qu'il s'agisse d'une personne ou d'un fichier), CAT envoie toutes les données sur sortie standard (Abrégé - stdout).

Substitution de la sortie standard - Tâche Shell de commande (Shell). Dans cet exemple, Shell crée un fichier vierge dont le nom est indiqué après le signe "\u003e" et la poignée de ce fichier est transmise par le programme CAT au numéro 1 ( sortie standard). C'est fait très simple. Dans les conférences, l'accès aux fichiers et aux catalogues a été décrit sur la manière dont les équipes de la coquille sont lancées. En particulier, après avoir terminé la fourchette (), deux processus identiques apparaissent, dont l'un est un enfant - doit démarrer la commande au lieu de lui-même (Execute Exec ()). Donc, avant qu'il se ferme Sortie standard (descripteur 1 est libéré) et s'ouvre Fichier (associé à celui-ci premier Descripteur libre, c'est-à-dire 1), et vous n'avez plus besoin de savoir quoi que ce soit pour savoir: sa sortie standard est déjà modifiée. Cette opération est appelée redirection Sortie standard. Dans le cas où le fichier existe déjà, Shell le récupérera, détruisant complètement tout ce qui contient avant de cela. Par conséquent, méthode de continuer à enregistrer des données dans TextFile, une autre opération sera requise - "\u003e\u003e".

$ CAT \u003e\u003e EXEMPLE TEXTFILE 1. ^ D $ CAT TextFile est un fichier d'exemples. Exemple 1. $

Exemple 3.. Redirection non destructive de la sortie standard

Méthode a reçu exactement le résultat qu'il avait besoin: ajouté à la fin d'une donnée de fichier existante à partir de la sortie standard de la commande suivante.

Sortie standard du flux de données, ouverte par le système pour chaque processus au moment de son démarrage et destiné aux données affichées par le processus.

Entrée standard

De même, pour transférer des données sur la saisie du programme peut être utilisée. entrée standard (Abrégé - stdin). Lorsque vous travaillez avec la ligne de commande, l'entrée standard est les caractères entrés par l'utilisateur du clavier. L'entrée standard peut être redirigée à l'aide du shell de commande en appliquant des données à partir d'un fichier donné. Symbole "< » служит для перенаправления содержимого файла на стандартный ввод программе. Например, если вызвать утилиту sort без параметра, она будет читать строки со стандартного ввода. Команда « sort < имя_файла «Trier les données du fichier pour entrer Trier.

$ trier< textfile Пример 1. Это файл для примеров. $

Exemple 4.. Rediriger l'entrée standard du fichier

Le résultat de cette commande est complètement similaire à la commande de tri textfile, la différence est celle utilisée "< », sort получает данные со стандартного ввода, ничего не зная о файле « textfile », откуда они поступают. Механизм работы shell в данном случае тот же, что и при перенаправлении вывода: shell читает данные из файла « textfile », запускает утилиту sort и передаёт ей на стандартный ввод содержимое файла.

Il convient de rappeler que l'opération "\u003e" destructeur: Il crée toujours un fichier de longueur zéro. Par conséquent, pour, disons, tri des données dans le fichier besoin d'appliquer successivement trier < файл > Nouveau fichier et mv. new_file File. . Équipe de type équipe< файл > Togo_file Il suffit de le couper à zéro longueur!

Entrée standard du flux de données ouvert par le système pour chaque processus au moment de la démarrage et destiné à la saisie de données.

Sortie d'erreur standard

En tant que premier exemple et exercice de la redirection de la méthode, j'ai décidé d'enregistrer le Guide du chat de votre fichier Cat.info:

$ Info chat\u003e cat.info info: enregistrement de nœud (corticuls.info.bz2) Invocation de chat ... info: terminé. $ Head -1 Cat.info Fichier: Coretutils.info, Nœud: Invocation de chat, Suivant: Invocation TAC, Up: Sortie de fichiers entiers $

Exemple 5.. Sortie d'erreur standard

La méthode surprise a révélé que, contrairement à ses instructions, allez au fichier deux lignes dérivées par l'équipe d'informations, a toujours pénétré sur le terminal. Évidemment, ces lignes n'ont pas frappé sortie standard Parce qu'ils ne sont pas directement liés au manuel qui devrait afficher le programme, ils informent l'utilisateur de l'avancement du travail: Guide d'enregistrement du fichier. Pour un tel type de rhodation messages de diagnostic, ainsi que pour les messages d'erreur découlant du programme, sous Linux fournis sortie d'erreur standard (Abrégé - stardr).

Flux de données de sortie d'erreur standard ouvert par le système pour chaque processus au moment de son lancement et destiné à messages de diagnosticdérivé par le processus.

L'utilisation de la sortie d'erreur standard avec la sortie standard vous permet de séparer le résultat de l'opération du programme à partir d'une variété d'informations d'accompagnement, par exemple, de les envoyer à différents fichiers. La sortie d'erreur standard peut être redirigée de la même manière que l'entrée / sortie standard, pour cela, une combinaison de caractères "2" est utilisée.

$ info chat\u003e chat.info 2\u003e Cat.sderr $ Cat Cat.sderr Info: Enregistrement de nœud (cortieuils.info.bz2) Invocation chat ... info: complété. $

Exemple 6.. Redirection de la sortie d'erreur standard

Cette fois, le terminal ne s'est pas entré dans le terminal, la sortie standard s'est rendue sur le fichier Cat.info, la sortie d'erreur standard - in Cat.Sderr. Au lieu de "\u003e" et "2", méthodio pourrait écrire "1\u003e" et "2\u003e". Les chiffres dans ce cas dénotent le nombre de descripteurs ouvert des dossiers. Si un utilitaire s'attend à obtenir ouvert Descripteur avec le nombre, disons 4, puis pour l'exécuter avant que Vous devrez utiliser la combinaison "4\u003e".

Parfois, cependant, vous devez combiner les erreurs de sortie standard et de sortie de démarrage dans un seul fichier et ne pas les diviser. Dans la coquille de commande Bash, il y a une séquence spéciale "2\u003e & 1". Cela signifie "Envoyer la sortie standard d'erreurs à la même chose, où et la sortie standard":

$ Info Cat\u003e Cat.info 2\u003e & 1 $ Head -3 Cat.info Info: Enregistrement de nœud (corticuls.info.bz2) Invocation chat ... info: complété. Fichier: corticuls.info, nœud: Invocation de chat, Suivant: Invocation TAC, Up: Sortie de fichiers entiers $

Exemple 7.. Combinaison de sortie standard et de sortie d'erreur standard

Dans cet exemple, l'ordre des redirections est important: à la ligne de commande, méthodius a d'abord indiqué où rediriger la sortie standard ("\u003e cat.info") et alors ensuite ordonné d'envoyer la sortie d'erreur standard là-bas. Rendez-le au contraire ("2\u003e & 1\u003e CAT.INFO"), le résultat aurait été inattendu: seule la sortie standard serait touchée au fichier et les messages de diagnostic apparaissent sur le terminal. Cependant, la logique ici est du fer: au moment de l'opération "2\u003e & 1", la sortie standard était associée au terminal, cela signifie que cela signifie que après Son exécution La sortie d'erreur standard sera également associée au terminal. Et la redirection ultérieure de la sortie standard au fichier n'affectera pas la sortie d'erreur standard. Chambre dans la conception "& Number" - c'est le nombre ouvert Descripteur. Si l'utilitaire susmentionné enregistré dans la quatrième manche a été écrit sur Shell, il serait utilisé pour rediriger le type "\u003e & 4". Afin de ne pas composer la conception encombrante "\u003e 2\u003e & 1" à bash, les abréviations sont utilisées: "&\u003e Fichier" ou, c'est-à-dire le même, "\u003e & file".

Redirection à nulle part

Parfois, on sait que certaines données dérivées par le programme ne seront pas nécessaires. Par exemple, des avertissements avec une sortie d'erreur standard. Dans ce cas, vous pouvez rediriger la sortie d'erreur standard dans trouSpécialement conçu pour détruire les données - / dev / null. Tout ce qui est écrit dans ce fichier sera simplement jeté et nulle part continuera de continuer.

$ Info chat\u003e cat.info 2\u003e / dev / null $ $

Exemple 8.. Redirection à / dev / null

De la même manière, vous pouvez vous débarrasser de la sortie standard en l'envoyant à / dev / null.

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