Notícias
Novos modelos de linguagem da API Serverspace GPT
JT
novembro 15, 2023
Atualizado janeiro 31, 2025

Como usar operadores de redirecionamento no Bash?

Linux

Introdução

Como redirecionar a saída ou a entrada de arquivos, comandos ou processos no sistema Linux? Para essa pergunta, na instrução, daremos a resposta! Isso pode ser útil para a automatização extraordinária e bastante comum do sistema, por meio de um script, programa ou outro material. Abaixo, você pode obter uma resposta teórica breve e completa!

Teoria resumida

Para executar qualquer programa no Linux, no Windows e em outros sistemas operacionais, basta clicar no ícone ou no arquivo executável. Mas, nesse momento, o núcleo do sistema operacional cria um processo. Processo - é uma entidade passiva e abstrata, que descreve os recursos e o local do programa em execução. Portanto, se o processo é passivo, então há uma entidade ativa - thread.

Cada um dos processos tem 3 threads padrão: input, output e error. Elas são parte fundamental de qualquer sistema. Se quisermos personalizar o uso, para thread de redirecionamento, precisaremos chamá-los e indicá-los na CLI. Isso pode ser possível com descritores de arquivo, que representam o número que atribui ao thread, ao arquivo, ao soquete de rede e a qualquer elemento do sistema operacional. O esquema da lógica desse mecanismo pode ser visto abaixo:

Scheme
Screenshot №1 - Schema

No resultado para redirecionar a entrada, a saída ou o erro, precisamos usar o comando abaixo:

cat 0< vocabulary.txt
Example
Screenshot №2 - Example

Para o comando cat, não indicamos nenhum argumento para a entrada; em vez disso, escrevemos o descritor de arquivo para a entrada padrão 0< e fornecemos o texto. No resultado, podemos ver o texto escrito do vocabulary.txt. O mecanismo dos descritores de arquivos pode parecer um sistema bastante complicado, portanto, para criar um pacote lógico, você pode considerar o capítulo abaixo!

Descritores de arquivos

A representação de recursos com descritores permite que diferentes partes de um programa se refiram ao mesmo objeto subjacente sem precisar acompanhar sua localização na memória, o que facilita a manipulação e o gerenciamento de recursos compartilhados. Os descritores são simplesmente números inteiros que representam um arquivo aberto ou outro canal de entrada/saída; eles são chamados de "descritores" porque você pode pensar neles como ponteiros: em vez de ter que controlar onde um recurso específico está armazenado na memória (o que seria difícil se houvesse várias cópias), basta saber o valor do descritor e usá-lo sempre que quiser acessar esse recurso.

File descriptors
Screenshot №3 - File descriptors

Por exemplo, se um aplicativo precisar acessar vários arquivos ao mesmo tempo, cada arquivo pode ser representado por seu próprio valor inteiro: em vez de ter que controlar onde cada arquivo está armazenado na memória (o que seria difícil se houvesse várias cópias), o programa simplesmente precisa saber o valor do descritor de cada recurso e usá-lo sempre que quiser acessá-los. Os descritores são comumente usados para arquivos, mas não se limitam a eles; qualquer tipo de recurso do sistema pode ser representado por um único valor inteiro: soquetes de rede ou outros tipos de canais de comunicação.

Em resumo, embora os descritores sejam simplesmente números inteiros que representam um arquivo aberto ou outro canal de entrada/saída, eles são chamados de "descritores" porque você pode pensar neles como ponteiros: em vez de ter que controlar onde um recurso específico está armazenado na memória (o que seria difícil se houvesse várias cópias), o programa simplesmente precisa saber o valor do descritor e usá-lo sempre que quiser.

Operadores básicos

Muito bem, depois da parte matemática, podemos considerar os operadores para o thread de redirecionamento, que indicam o que discutimos acima como um sing.

A saída padrão ou redirecionamento, forma de uso: command > output_object. Essa direção personalizada do thread significa literalmente que o resultado do comando não é exibido na tela do terminal, mas sim redirecionado para o objeto. Se o arquivo não existir, ele será criado pelo sistema, mas se o arquivo já existir, ele será completamente substituído.

Por exemplo, temos uma tarefa para gravar todos os pacotes com o nome "apache2" do nosso repositório no arquivo, por meio de um comando ou precisamos usá-lo no script.

apt list | grep "apache2" > apache.txt

Depois de inserir o comando, precisamos ver o contexto:

tail apache.txt
Redirection stdout
Screenshot №4 - Redirection stdout

Mas se quisermos acrescentar dados ao arquivo existente, usaremos o próximo formulário para esse fim: command >> output. Na diferença do exemplo acima, o arquivo não é substituído, mas no caso em que o arquivo não foi criado, depois de inserir o comando, podemos vê-los no catálogo.

Entretanto, se precisarmos ocultar a saída, poderemos usar um dispositivo especial no Linux, chamado null. Sua principal função é descartar o thread de saída de dados e, dessa forma, também podemos redirecionar o tráfego para outro dispositivo.

O erro padrão, forma de uso: command 2> output_object. Geralmente, é usado nos casos em que precisamos redirecionar apenas o evento de erro entre todos os arquivos de registro. Esse comando 2> também, como consideramos acima, significa criar ou substituir um arquivo existente. Consideramos o caso em que precisamos usar o comando ls iniciado para analisar os erros e redirecionar para o arquivo:

ls don't_exist_dir 2> err0rs.txt
Redirection error's
Screenshot №5 - Redirection error's

Se quisermos adicionar algumas informações sem substituir, use um operador já conhecido 2>> que cria ou anexa dados ao arquivo. Por exemplo:

apt-get errr 2>> err0rs.txt

E veja o resultado da operação de teste:

cat err0rs.txt
Error's append
Screenshot №6 - Error's append

Como podemos ver acima, a nova linha não substitui todo o arquivo, então os operadores de redirecionamento funcionam corretamente!

Há situações em que precisamos usar simultaneamente os dois operadores, quando interceptamos dados do daemon ou do comando, o sistema pode gravar a saída padrão e o erro em um único arquivo:

ls /tmp /jgj &> log.txt

Vamos verificar o resultado do comando:

cat log.txt
Redirecionar para um único arquivo
Screenshot №7 - Redirecionar para um único arquivo

Indicamos dois catálogos e um deles deu erro e passou para a saída padrão, como podemos ver na captura de tela.

Para algumas situações, precisamos criar um redirecionamento mais complicado. Imagine que você precise classificar um objeto de um arquivo e gravá-lo em um novo arquivo:

sort < err0rs.txt > sort_err0rs.txt
Complicated redirection
Screenshot №8 - Complicated redirection

Vamos explicar como isso funciona! Na primeira execução, stdinput do err0rs.txt para o comando sort e o resultado dessa operação é redirecionado para o s0rt_err0rs.txt e é isso.

Você pode notar que usamos operadores para o redirecionamento para o dispositivo ou arquivo, mas e se redirecionarmos a saída do nosso comando para a entrada de outro comando? Infelizmente, os operadores descritos acima não se encaixam em nossos critérios. Para esse fim, existe o pipe. O que isso significa? Literalmente, pipe! Indicado por um sinal | e usado na forma: comando_1 | comando_2:

apt list | grep "apache2"
Pipe
Screenshot №9 - Pipe

A linha de comandos na primeira coleta de dados do comando apt escreve no stdoutput e redireciona para o stdinput sem arquivo proxy! De maneira semelhante, usando operadores padrão, isso terá a seguinte aparência:

apt list >> proxy_file.txt >> grep "apache2"

Nesse caso, usamos o proxy-file e salvamos as informações nele!

Conclusão

A compreensão de como usar os operadores de redirecionamento no Bash é uma habilidade fundamental para qualquer pessoa que trabalhe com a linha de comando em sistemas operacionais do tipo Unix. Esses operadores oferecem uma maneira poderosa de manipular fluxos de entrada e saída, permitindo que você manipule dados e processos com eficiência. Ao dominar conceitos como <, >, >>, 2> e &>, você pode não apenas redirecionar dados, mas também combinar, anexar e gerenciar erros com eficiência.

Avaliação:
5 fora de 5
Аverage rating : 5
Avaliado por: 2
CEP 01311-930 São Paulo Avenida Paulista, nº 1765, 7º andar, Cj. 72, CV 10172, Bela Vista
+ 55 11 5118-1047
ITGLOBAL.COM BR LTDA

Você também pode gostar...

Usamos cookies para melhorar sua experiência no Serverspace. Ao continuar a navegar em nosso site, você concorda com o Uso de Cookies e com a Política de Privacidade.