web-dev-qa-db-fra.com

Expliquez cette redirection Shell: uuencode Host-file <Host-file> encodedfile

Comment fonctionne la redirection Shell ci-dessous? Semble compliqué pour comprendre l'ordre d'exécution. Une explication facile?

uuencode Host-file  < Host-file >encodedfile
3
Lunar Mushrooms

uuencode est la commande. Host-file est son argument. < Host-file redirige le fichier vers l'entrée standard de la commande. >encodedfile redirige la sortie de la commande vers le fichier.

5
choroba

Lorsqu'un programme de console est lancé, il ouvre trois descripteurs de fichiers standard:

0 STDIN
1 STDOUT
2 STDERR

Normalement, le descripteur de fichier STDIN lit à partir de l'entrée du terminal (c'est-à-dire le clavier). Mais quand le < la redirection est utilisée, l'entrée est lue à partir de ce fichier à la place. De même, STDOUT écrit généralement sur le terminal, mais lorsque > est utilisé, la sortie est écrite dans ce fichier à la place.

STDERR peut également être redirigé en utilisant 2>. Vous pouvez également voir STDERR redirigé vers le même endroit que STDOUT en utilisant 2>&1.

3
Brian

uuencode Host-file < Host-file >encodedfile

Décomposons cela en 4 parties:

  1. uuencode est le nom de la commande à exécuter. Le shell recherche la variable d'environnement PATH ($ PATH) et recherche un fichier exécutable nommé uuencode dans chaque répertoire du PATH. Dans une installation standard, ce sera /usr/bin/uuencode. Le programme uuencode prend un fichier binaire et le transforme en texte dans un format spécial afin qu'il puisse être envoyé sur un réseau qui ne peut pas gérer les caractères non ascii.
  2. Le premier Host-file Est l'argument de ligne de commande de uuencode. La commande uuencode a besoin d'un argument pour pouvoir mettre le nom du fichier dans la version encodée. La première ligne du fichier encodé ressemblera à ceci: begin 644 Host-file
  3. < Host-file Est le shell utilisant un fichier nommé Host-file Comme entrée standard (stdin) pour le processus uuencode. Ainsi, lorsque uuencode lit certains octets d'entrée, au lieu de provenir de votre clavier, ils proviennent de ce fichier.
  4. >encodefile Est le Shell utilisant un fichier nommé encodedfile comme sortie standard (stdout). Ainsi, lorsque uuencode écrit une sortie, au lieu d'aller sur votre écran, elle va dans ce fichier.

Il n'y a pas vraiment d'ordre d'exécution, car une seule commande, uuencode, est en cours d'exécution. Si vous voulez des détails techniques, lisez la suite.

En arrière-plan, le shell appelle fork(), puis le processus enfant ouvre le fichier Host-file Pour lecture, ouvre le fichier encodedfile pour écriture et appelle exec(), qui remplace le processus enfant (une copie du processus Shell) par le processus uuencode. Le processus enfant devient alors uuencode, avec le descripteur de fichier d'entrée (une manière dont le système d'exploitation garde la trace des fichiers ouverts) défini sur celui de Host-file Et le descripteur de fichier de sortie défini sur celui de encodedfile.

3
Brian Minton