Explique este redirecionamento de shell: uuencode host-file arquivo-host codedfile

3

Como funciona o redirecionamento de shell abaixo? Parece complicado entender a ordem de execução. Alguma explicação fácil?

uuencode host-file  < host-file >encodedfile
    
por Lunar Mushrooms 10.04.2014 / 16:10

3 respostas

5

uuencode é o comando. host-file é seu argumento. < host-file redireciona o arquivo para a entrada padrão do comando. >encodedfile redireciona a saída do comando para o arquivo.

    
por choroba 10.04.2014 / 16:18
3

Quando um programa de console é iniciado, ele abre três descritores de arquivo padrão:

0 STDIN
1 STDOUT
2 STDERR

Normalmente, o filehandle STDIN lê a partir da entrada do terminal (ou seja, o teclado). Mas quando o redirecionamento < é usado, a entrada é lida a partir desse arquivo. Da mesma forma, STDOUT geralmente grava no terminal, mas quando > é usado, a saída é gravada nesse arquivo.

STDERR também pode ser redirecionado usando 2> . Você também pode ver o STDERR sendo redirecionado para o mesmo local que STDOUT usando 2>&1 .

    
por Brian 10.04.2014 / 16:21
3

uuencode host-file < host-file >encodedfile

Vamos dividir isso em 4 partes:

  1. uuencode é o nome do comando a ser executado. O shell pesquisa a variável de ambiente PATH ($ PATH) e procura um arquivo executável denominado uuencode em cada diretório no PATH. Em uma instalação padrão, isso será /usr/bin/uuencode . O programa uuencode pega um arquivo binário e transforma-o em texto em um formato especial para que ele possa ser enviado por uma rede que não pode manipular caracteres não ascii.
  2. O primeiro host-file é o argumento da linha de comando para uuencode . O comando uuencode precisa de um argumento para poder colocar o nome do arquivo na versão codificada. A primeira linha do arquivo codificado será algo parecido com isto: %código%
  3. begin 644 host-file é o shell que usa um arquivo chamado < host-file como entrada padrão (stdin) para o processo host-file . Então, quando uuencode lê alguns bytes de entrada, em vez de vir do seu teclado, eles vêm desse arquivo.
  4. uuencode é o shell que usa um arquivo chamado >encodefile como saída padrão (stdout). Assim, quando encodedfile escreve alguma saída, em vez de ir para a tela, ela vai para esse arquivo.

Não há realmente uma ordem de execução, pois apenas um comando, uuencode , está sendo executado. Se você quiser detalhes técnicos, continue a ler.

Nos bastidores, o shell chama uuencode , em seguida, o processo filho abre o arquivo fork() para leitura, abre o arquivo host-file para gravação e chama encodedfile , que substitui o processo filho (uma cópia do processo shell) com o processo exec() . O processo filho torna-se uuencode , com o descritor de arquivo de entrada (uma maneira que o sistema operacional controla os arquivos abertos) definido como uuencode e o descritor do arquivo de saída definido como host-file .

    
por Brian Minton 10.04.2014 / 17:52

Tags