Entendendo 유닉스 파이프

6679 단어 unixlinuxpipe
기본적으로 UNIX의 모든 명령은 streams에 속하며, comunicação에서 사용할 수 있습니다. 우리는 STDOUT(순수한 흐름에 대한 두려움), STDIN(강한 흐름에 대한 두려움) 및 STDERR(수류 흐름/오류)에 대한 명령을 내릴 수 있습니다.

Cada stream é Representativea por um número inteiro através de file descriptors :
  • 0: 엔트라다 스트림
  • 1: stream de saída
  • 2: 스트림 드 오류

  • UNIX 및 프로세스 통신



    그러나 프로세스는 고립된 시스템 운영 시스템이 없습니다. Mas para uso real, um processo precisa se comunicar com outros através do envio de mensagens.

    Os streams de comunicação são, portanto, uma forma de comunicação entre processos, também chamada de Inter-Process communication, ou IPC.

    STDOUT으로 재지정



    Quando execuamos comandos UNIX, a stream padrão de saída é o próprio screen, ou STDOUT .

    $ echo 'Olá!'
    



    Olá!
    


    Isto mostra no screen a palavraOlá . mas podemos redirecionar o output para um arquivo à parte para ser Consultado depois. Este redirecionamento deve ser feito com os sinais > (para stdout e stderr) ou < (para stdin).

    파일 디스크립터 서신의 번호는 cada sinal deve ser prefixado입니다.

    # o stdout 1 está sendo redirecionado para out.log
    
    $ echo 'Olá!' 1> out.log 
    
    ### DICA BÔNUS
    # Se omitirmos o número do file descriptor, por padrão o UNIX
    # entende que é o STDOUT!!!!1
    $ echo 'Olá!' > out.log 
    


    Com redirecionamento, o sistema "muda"o comportamento padrão do stream. Neste caso, não vemos mais a palavra sendo enviada para o screen. Arquivo 상담원의 정확한 답변:

    $ cat out.log
    



    Olá!
    


    STDIN으로 재지정



    Vamos imaginar um cenário onde queremos gerar hash de um conteúdo utilizandomd5 .

    O comando md5 recebe um arquivo como 입력. Como o STDIN por padrão lê do screen (e fica a espera de dados a partir do teclado), podemos redirecionar o STDIN (0) tal como fizemos com o STDOUT (1), de forma que o input seja lido a partir de um arquivo , 다음과 같이 할 수 있습니다:

    $ echo 'my precious' > rawcontent.txt # redireciona stdout 1
    $ md5 0< rawcontent.txt               # redireciona stdin 0
    



    2a5f942537474f69e4bca57711ae6ff2
    


    E o STDERR?



    Assim como fazemos para o STDOUT com o sinal > , podemos redirecionar o STDERR (erros ocorridos durante o comando) para outro lugar:

    $ md5 rawcontent.txt 2> md5err.log
    


    Nesse caso, como o comando não lança nenhum erro, o arquivo md5err.log está vazio e o output foi enviado para o STDOUT.

    $ md5 filenotfound 2> md5err.log
    $ cat md5err.log
    



    md5: filenotfound: No such file or directory
    


    포괄적인 podemos fazer redirecionamento de todas as saídas no mesmo comando:

    $ md5 rawcontent.txt > md5out.log 2> md5err.log
    


    다음은 STDERR에서 STDOUT으로 재지정할 때 사용하는 방법입니다.

    $ md5 rawcontent.txt > md5out.log 2>&1
    


    유닉스 파이프라인



    계속해서 "파이프라인"변환을 수행하고 md5를 변환하고 base64를 변환하려면 변환을 수행해야 합니까?

    Podemos continuar redirecionando "outs e ins"quantas vezes quisermos em múltiplos comandos:

    $ echo 'my precious' > rawcontent.txt
    $ md5 0< rawcontent.txt > md5content.txt
    $ base64 0< md5content.txt
    



    MmE1Zjk0MjUzNzQ3NGY2OWU0YmNhNTc3MTFhZTZmZjIK
    


    Mas esta cadeia de múltiplos comandos ficaria ilegível e difícil de manter. Sem contar que tantos aquivos de redirecionamento vão ficar ocupando espaço de armazenamento o que nos obrigaria a ter uma rotina para apagar tais arquivos.

    Podemos recorrer aos pipes anônimos | , ou unnamed pipes, que basicamente redirecionam o stdout de um comando para o stdin do outro comando na sequência.

    E diferente dos arquivos de redirecionamento, os pipes anônimos funcionam como file descriptor "temporários"que são apagados ao término do comando.

    $ echo 'my precious' | md5 | base64
    



    MmE1Zjk0MjUzNzQ3NGY2OWU0YmNhNTc3MTFhZTZmZjIK
    


    Lindo, 아니?

    결론



    Neste artigo는 UNIX 파이프라인의 기본 기능에 대한 데모를 제공하며 파이프를 활용하여 다양한 프로세스를 포삼 comunicar entre si로 처리합니다.

    é bastante elucidativo e me ajudou a despertar interesse em dissecar o tema para produzir mais conteúdo de UNIX em pt-BR.

    대부분의 기능은 UNIX 명명된 파이프가 없으며 Shell 스크립트에서 백그라운드 작업을 간단하게 구현하는 데 사용할 수 있습니다.

    계속 지켜봐!

    좋은 웹페이지 즐겨찾기