Aula 7.7: Como alterar redirecionamento de entradas e saídas no Linux

COMPARTILHAR:

Whatsapp Telegram Twitter Facebook Reddit

Aula 7.7 - Entenda o processo de redirecionamentos no Linux

  

Este artigo faz parte do projeto #LTCode

Um programa geralmente possui configurado entradas e saídas padrões.

  • Entrada padrão possui código 0 e é onde o programa recebe informações, por padrão do teclado.
  • Saída padrão possui código 1 e é onde o programa pode mandar informações, por padrão é enviado para a tela.
  • Saída de erro padrão possui código 2 e é onde o programa pode mandar mensagens de erro, por padrão é enviado também para a tela.
Essas entradas e saídas são mapeadas no terminal (tty), a imagem abaixo ilustra o redirecionamento da saída padrão (1) para outra janela do terminal.


O símbolo de redirecionamento de saída padrão é o sinal de maior ">", que instruí a shell a redirecionar a saída, do comando cat por exemplo, para o arquivo especificado ao invés do terminal atual. Portanto o formato para redirecionamento na linha de comando é dado por: $ comando [argumentos] > arquivo


No exemplo com o comando cat acima caso se o arquivo rock.txt, punk.txt ou goodmusic.txt já existisse, a shell iria sobrescrevê-lo apagando seu conteúdo pelo conteúdo a ser redirecionado.

Como evitar sobrescrever um arquivo no terminal Linux? A shell permite você utilizar a funcionalidade noclobber que previne sobrescrever um arquivo usando redirecionamentos. Assim uma mensagem será exibida e o comando não será executado ao tentar sobrescrever o arquivo.


Note que -o habilita o noclobber e +o desabilita (confuso né?). Também é possível forçar para o arquivo ser sobrescrito, basta usar o símbolo >| no lugar do símbolo de redirecionamento > .

Pode acontecer de algumas shell não concatenar como esperado, resultando em resultados inesperados. Uma solução para isso é utilizar o símbolo de anexar na saída ">>" (sem aspas) que faz com que a shell adicione novas informações ao final do arquivo especificado, deixando informações pré-existentes intactas.


Até aqui você aprendeu sobre redirecionamento de saída padrão, mas como realizar o redirecionamento de entrada padrão? É simples, o símbolo de redirecionamento de entrada padrão é o sinal de menor "<" (sem aspas) que instruí a shell a redirecionar a entrada padrão para um comando vindo do arquivo especificado ao invés do teclado. Portando o formato para redirecionamento na linha de comando é dado por: $ comando [argumentos] < arquivo

O comando cat, lpr, grep, sort e outros são similares no fato de que realizar o redirecionamento da entrada tem o mesmo efeito de usar a entrada diretamente como parâmetro. Portanto "cat online.txt" dá o mesmo resultado que "cat < online.txt"


A imagem logo acima ilustra que o comando sort recebe como entrada o arquivo linux.txt para ordenar seu conteúdo. Logo em seguida a saída do comando sort é redirecionada para o arquivo ordenado.txt , resultando em um arquivo com os nomes de algumas distribuições Linux em ordem alfabética.

No Linux existe um dispositivo especial conhecido como /dev/null que é uma espécie de buraco negro (data sink) ou lixeira de bits (bit bucket). Portanto este dispositivo é útil para redirecionar saídas que não deseja manter ou visualizar, fazendo com que os dados desapareçam.


A saída do /dev/null é uma string vazia, então podemos utilizá-la para limpar um arquivo de texto por exemplo, como ilustrado na imagem logo acima.

Utilizando pipes, símbolo especial | (pipe), é possível conectar a saída padrão de um comando na entrada padrão de outro comando. O formato na linha de comando é dado por: $ comandoA [argumentos] | comandoB [argumentos]


Por exemplo no comando da imagem acima, a saída do comando "ps aux" é paginada com o comando "more".


O comando "tee" permite copiar os dados de entrada para um arquivo e para sua saída padrão. Entenda que "df -h" lista o sistema de arquivo de uma forma legível, a saída passa pelo PIPE e o utilitário "tee" recebe ela e redireciona para a entrada de um arquivo, no caso "filesystem.txt" e ao mesmo tempo para uma saída padrão que é redirecionada com o PIPE seguinte para o comando "grep" buscar na entrada linhas que possuem a palavra "tmp".

Além de enviar mensagens para a saída padrão, programas podem enviar mensagens para a saída de erro padrão para evitar misturar as informações de uma saída com a outra. Assim como a saída padrão, por padrão a shell direciona a saída de erro padrão para a tela. A não ser que direcione uma ou a outra, não é possível distinguir qual das duas saídas foi utilizada.

A shell permite selecionar qual descritor de arquivos se deseja redirecionar o fluxo: basta colocar o número do descritor antes do símbolo de redirecionamento. Exemplo:


Note que "arquivo2" não existe, retornando um error.
  • Redirecionar saída padrão: 1> (ou apenas: > )
  • Redirecionar saída de erro: 2> (ou apenas: > )

Você também pode redirecionar a saída padrão juntamente com a saída de erro, basta utilizar "&>" (sem aspas). Agora para redirecionar a entrada padrão use "<" .
  • Redirecionar saída padrão E saída de erro: &>
  • Redirecionar entrada padrão: 0< (ou apenas: < )
É possível redirecionar o fluxo de um descritor para outro. Confira:


Usando n>&m , onde n é o descritor de onde vem vem o fluxo e m para onde vai, foi possível alterar o fluxo da saída de erro padrão (2>) para o mesmo local da saída padrão (&1). Assim também é possível criar um  script que possa enviar mensagens para a saída de erro padrão, basta redirecionar o echo da mensagem 1>&2 .


Outra forma de prover dados de entrada é através de documentos HERE. Ao invés de ler de um arquivo com o operador de entrada padrão, pode-se ler diretamente da entrada até encontrar um delimitador especificado pelo usuário. O delimitador especificado pelo usuário pode ser qualquer palavra sempre após << . Para remover tabulações basta usar <<- e o nome do delimitador.

Mais símbolos:
  • <&m Duplica entrada padrão de descritor de arquivo m.
  • n>>&m Similar ao operador n>&m , mas concatena ao invés de sobrescrever.
  • n<&- Fecha a entrada padrão ou o descritor de arquivo n se especificado.
  • n>&-  Fecha a saída padrão ou o descritor de arquivo n se especificado.
Próxima aula, clique aqui.

COMENTÁRIOS

Nome

#ann,25,#HK,30,#LTCode,130,Artigo - Diversos,156,Artigo - Games,201,Artigo - Tecnologia,615,autor-thomaz,7,Coluna - Alternative World,24,Coluna - Fail,12,Coluna - Tec Line,14,Criptomoeda,72,Curiosidades - Diversos,49,Curiosidades - Tecnologia,50,en,2,estudo,8,HN,12,logica,14,Pentest,23,Programar C,29,Programar POO,6,Programar Python,6,Programar Shell,25,Programar verilog,12,qradar,4,Raspberry Pi,15,Redes,3,root,117,Shorty Awards,1,Smartphones - Reviews,33,Teoria,10,Top Nostalgia,2,VPN,19,WhatsApp,46,
ltr
item
Limon Tec: Aula 7.7: Como alterar redirecionamento de entradas e saídas no Linux
Aula 7.7: Como alterar redirecionamento de entradas e saídas no Linux
Aula 7.7 - Entenda o processo de redirecionamentos no Linux
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s640/ltcode.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmI65og5X32bSLCmBz3uJnZlmDvzOFWZWoZzyvUhh2rtp8Hr_kolKy02pOjxpkThrz8uHaTu3skUdeDJlkFEKkC2a9EabpwPzbwJ-hm-po0QIaNeNvYm5CJw3k4SbN03V-d2h1dxrW2tz4/s72-c/ltcode.jpg
Limon Tec
https://www.limontec.com/2022/08/aula-7-7-shellscript-ltcode.html
https://www.limontec.com/
https://www.limontec.com/
https://www.limontec.com/2022/08/aula-7-7-shellscript-ltcode.html
false
2157924926610706248
UTF-8
Carregar todos posts Não encontramos nenhum post VER TUDO Ler mais Responder Cancelar resposta Deletar Por Home PÁGINAS POSTS Ver tudo RECOMENDADO PARA VOCÊ LABEL ARQUIVO SEARCH TODOS POSTS Não encontramos nenhum post relacionado a sua requisição VOLTAR PÁGINA INICIAL Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sab Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez apenas agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir ESTE CONTEÚDO ESTÁ BLOQUEADO PASSO 1: Compartilhe com seus amigos PASSO 2: Clique no link compartilhado Copiar Todo Código Selecionar Todo Código Todos códigos foram copiados para seu clipboard Não é possível copiar códigos / textos, por favor aperte [CTRL]+[C] (ou CMD+C no Mac) para copiar Tabela de conteúdo