Entendendo 유닉스 파이프
Cada stream é Representativea por um número inteiro através de file descriptors :
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 palavra
Olá
. 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 utilizando
md5
.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 스크립트에서 백그라운드 작업을 간단하게 구현하는 데 사용할 수 있습니다.
계속 지켜봐!
Reference
이 문제에 관하여(Entendendo 유닉스 파이프), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leandronsp/entendendo-unix-pipes-3k56텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)