<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kauan Amorim da Silva</title>
    <description>The latest articles on DEV Community by Kauan Amorim da Silva (@kauanamorim).</description>
    <link>https://dev.to/kauanamorim</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1126664%2F7b22f3ce-5990-4dae-8cf3-6cf5a249cd26.jpeg</url>
      <title>DEV Community: Kauan Amorim da Silva</title>
      <link>https://dev.to/kauanamorim</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kauanamorim"/>
    <language>en</language>
    <item>
      <title>Entendo a ordem de execução de uma query SQL</title>
      <dc:creator>Kauan Amorim da Silva</dc:creator>
      <pubDate>Wed, 13 Nov 2024 14:56:22 +0000</pubDate>
      <link>https://dev.to/kauanamorim/entendo-a-ordem-de-execucao-de-uma-query-sql-2336</link>
      <guid>https://dev.to/kauanamorim/entendo-a-ordem-de-execucao-de-uma-query-sql-2336</guid>
      <description>&lt;p&gt;Geralmente, no ambiente de trabalho, costumo dar dicas e explicar alguns conceitos para os desenvolvedores juniores, para que eles possam, aos poucos, absorver noções sobre performance, boas práticas e aspectos de segurança. Um dos pontos que gosto de destacar é a importância da ordem de execução de uma query SQL. Normalmente, abordo esse assunto quando percebo que eles já superaram as dificuldades iniciais com SQL e começam a tentar criar consultas mais robustas e complexas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ordem de Execução
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;FROM&lt;/strong&gt;: Define a tabela principal da consulta de dados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JOIN&lt;/strong&gt;: Estabelece a junção e o relacionamento entre as tabelas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ON&lt;/strong&gt;: Define a condição para a junção das tabelas, destacando as chaves de relacionamento entre elas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WHERE&lt;/strong&gt;: Filtra os dados consultados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GROUP BY&lt;/strong&gt;: Agrupa dados que compartilham um valor específico.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HAVING&lt;/strong&gt;: Filtra os dados após o agrupamento feito pelo &lt;code&gt;GROUP BY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SELECT&lt;/strong&gt;: Seleciona as colunas de uma tabela.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DISTINCT&lt;/strong&gt;: Remove linhas com dados duplicados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ORDER BY&lt;/strong&gt;: Ordena o conjunto de dados consultados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LIMIT&lt;/strong&gt;: Restringe o número de linhas retornadas no resultado final.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Há vários motivos para ressaltar a importância da ordem de execução, e abaixo destaco alguns deles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Otimização de Consultas&lt;/strong&gt;: Um exemplo interessante é o uso de filtros. Sabendo que as cláusulas &lt;code&gt;JOIN&lt;/code&gt; e &lt;code&gt;ON&lt;/code&gt; são processadas antes do &lt;code&gt;WHERE&lt;/code&gt;, é possível utilizá-las para restringir dados já na etapa de junção, reduzindo a necessidade de filtros adicionais na cláusula &lt;code&gt;WHERE&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Previsibilidade dos Resultados&lt;/strong&gt;: Compreender a ordem de execução permite prever com precisão o resultado da consulta, o que ajuda a garantir que os dados recuperados sejam exatamente os desejados, sem surpresas ou inconsistências.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Estruturação de Consultas Complexas&lt;/strong&gt;: Em consultas mais complexas, entender a ordem de execução auxilia na organização da estrutura da consulta, assegurando que cada etapa seja processada no momento apropriado.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>sql</category>
      <category>mysql</category>
      <category>postgres</category>
      <category>sqlserver</category>
    </item>
    <item>
      <title>Qual a diferença de Encadeamento de Promises e Aync/await</title>
      <dc:creator>Kauan Amorim da Silva</dc:creator>
      <pubDate>Tue, 12 Nov 2024 19:51:04 +0000</pubDate>
      <link>https://dev.to/kauanamorim/qual-a-diferenca-de-encadeamento-de-promises-e-ayncawait-4c8p</link>
      <guid>https://dev.to/kauanamorim/qual-a-diferenca-de-encadeamento-de-promises-e-ayncawait-4c8p</guid>
      <description>&lt;p&gt;Hoje me deparei com a minha própria ignorância sobre a diferença entre essas duas formas de lidar com operações assíncronas, então decidi ler e pesquisar para escrever esse post — como um lembrete para mim e, quem sabe, ajudar outros desenvolvedores a entender melhor essa diferença.&lt;/p&gt;

&lt;p&gt;Na época, eu sabia mais ou menos explicar que ambas fazem a mesma coisa, com o &lt;code&gt;then()&lt;/code&gt; trazendo os dados resolvidos, enquanto &lt;code&gt;resolve&lt;/code&gt; e &lt;code&gt;reject&lt;/code&gt; eram usados para finalizar com sucesso ou erro. Já o &lt;code&gt;async/await&lt;/code&gt; tinha o &lt;code&gt;await&lt;/code&gt; para esperar o resultado antes de seguir para o próximo passo. Não estava completamente errado, mas dava para explicar de uma forma bem melhor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promise
&lt;/h2&gt;

&lt;p&gt;A Promise, como o nome sugere, é uma "promessa" de retorno de dados que passa por três estados principais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pending&lt;/strong&gt;: Estado inicial, quando a promessa ainda não foi resolvida ou rejeitada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fulfilled&lt;/strong&gt;: A operação foi concluída com sucesso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rejected&lt;/strong&gt;: A operação falhou e o erro foi capturado.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;minhaPromise&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;sucesso&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Apenas um exemplo condicional&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sucesso&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Operação concluída com sucesso!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Ocorreu um erro na operação.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Encadeamento de Promises
&lt;/h2&gt;

&lt;p&gt;Essa era a forma mais comum de lidar com Promises antes do &lt;code&gt;async/await&lt;/code&gt;. Usamos os métodos &lt;code&gt;then()&lt;/code&gt;, &lt;code&gt;catch()&lt;/code&gt; e &lt;code&gt;finally()&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;then()&lt;/strong&gt;: Usado para receber e manipular o dado resolvido com sucesso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;catch()&lt;/strong&gt;: Usado para lidar com o erro quando a promessa é rejeitada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;finally()&lt;/strong&gt;: Usado para executar um código independente do resultado.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;minhaPromise&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mensagem&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Operação concluída com sucesso!"&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;erro&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;erro&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Se der erro, isso será executado.&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Finalizando a execução da Promise&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Sempre será executado.&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Async/Await
&lt;/h2&gt;

&lt;p&gt;Uma função marcada como &lt;strong&gt;async&lt;/strong&gt; retorna automaticamente uma Promise, e o &lt;strong&gt;await&lt;/strong&gt; é usado para "pausar" a execução até que a Promise seja resolvida.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;buscarDados&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://jsonplaceholder.typicode.com/todos/1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Dados recebidos:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Erro ao buscar dados:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;buscarDados&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Diferença
&lt;/h2&gt;

&lt;p&gt;O encadeamento de Promises pode fazer com que o código fique muito aninhado, especialmente quando usamos vários &lt;code&gt;then()&lt;/code&gt; seguidos, tornando a leitura mais difícil.&lt;/p&gt;

&lt;p&gt;Já o &lt;code&gt;async/await&lt;/code&gt; permite escrever código assíncrono de uma maneira mais parecida com o código síncrono, facilitando a leitura e a compreensão da lógica. O código fica mais limpo, especialmente quando precisamos lidar com várias operações assíncronas.&lt;/p&gt;

&lt;p&gt;Além disso, a forma de tratar erros usando &lt;code&gt;try/catch&lt;/code&gt; com &lt;code&gt;async/await&lt;/code&gt; é mais intuitiva do que usar apenas o &lt;code&gt;catch&lt;/code&gt; nas Promises.&lt;/p&gt;

</description>
      <category>node</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Pesquisando conteúdo de arquivos - Série Linux</title>
      <dc:creator>Kauan Amorim da Silva</dc:creator>
      <pubDate>Mon, 21 Aug 2023 20:35:31 +0000</pubDate>
      <link>https://dev.to/kauanamorim/pesquisando-conteudo-de-arquivos-serie-linux-5g02</link>
      <guid>https://dev.to/kauanamorim/pesquisando-conteudo-de-arquivos-serie-linux-5g02</guid>
      <description>&lt;p&gt;Muitas vezes quando estamos procurando um arquivo e queremos algo em seu conteudo usamos o comando &lt;strong&gt;cat.&lt;/strong&gt; Porém esse mesmo comando nos da todo o conteúdo do arquivo e passamos muito tempo dando scroll no terminal para achar o que estamos procurando.&lt;/p&gt;

&lt;p&gt;Para conseguirmos filtrar o conteúdo do arquivo, pesquisando o que estamos procurando, podemos utilizar o &lt;strong&gt;grep&lt;/strong&gt;. Esse comando nos ajudar a pesquisar tanto em arquivos, diretórios e subdiretórios o conteúdo procurado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exemplo de comando CAT.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cat [option] &amp;lt;filename&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                  &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;cat-test        &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;cat-test           &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;    &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina&lt;/span&gt;
&lt;span class="nb"&gt;cat &lt;/span&gt;services          &lt;span class="c"&gt;# usamos o cat para pegar o conteúdo do arquivo services&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Exemplo de comando GREP.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# grep [option] &amp;lt;search-value&amp;gt; &amp;lt;where-to-look&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                 &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;grep-test      &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;grep-test         &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;   &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/passwd &lt;span class="nb"&gt;.&lt;/span&gt;     &lt;span class="c"&gt;# copiamos o arquivo passwd da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;grep &lt;/span&gt;http &lt;span class="k"&gt;*&lt;/span&gt;          &lt;span class="c"&gt;# pesquisamos http em qualquer arquivo do diretório corrente.&lt;/span&gt;
                                         &lt;span class="c"&gt;# será listado o conteúdo dos arquivos que tem a palavra http. &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Options
&lt;/h2&gt;

&lt;p&gt;Logo após escrevermos o nome do comando, podemos colocar uma de suas opções de execução e aqui serão descritas algumas dessas opções (-i -l -L -r).&lt;/p&gt;

&lt;h3&gt;
  
  
  -i | --ignore-case
&lt;/h3&gt;

&lt;p&gt;Essa opção faz com que a pesquisa do grep ignore o case sensitive (case insensitive).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# grep [option] &amp;lt;search-value&amp;gt; &amp;lt;where-to-look&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;grep-test     &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;grep-test        &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;  &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/passwd &lt;span class="nb"&gt;.&lt;/span&gt;    &lt;span class="c"&gt;# copiamos o arquivo passwd da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; http &lt;span class="k"&gt;*&lt;/span&gt;      &lt;span class="c"&gt;# pesquisamos http em qualquer arquivo do diretório corrente.&lt;/span&gt;
                                        &lt;span class="c"&gt;# será listado o conteúdo dos arquivos que tem a palavra http sem case sensitive.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  -l | --file-with-matches
&lt;/h3&gt;

&lt;p&gt;Essa opção faz com que sejam listados os arquivos que contém o conteúdo procurado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# grep [option] &amp;lt;search-value&amp;gt; &amp;lt;where-to-look&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;grep-test     &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;grep-test        &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;  &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/passwd &lt;span class="nb"&gt;.&lt;/span&gt;    &lt;span class="c"&gt;# copiamos o arquivo passwd da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; http &lt;span class="k"&gt;*&lt;/span&gt;      &lt;span class="c"&gt;# pesquisamos http em qualquer arquivo do diretório corrente.&lt;/span&gt;
                                        &lt;span class="c"&gt;# será listado os arquivos que tem o valor pesquisado.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  -L --files-without-match
&lt;/h3&gt;

&lt;p&gt;Essa opção faz com que sejam listados os arquivos que não contém o conteúdo procurado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# grep [option] &amp;lt;search-value&amp;gt; &amp;lt;where-to-look&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;grep-test     &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;grep-test        &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;  &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/passwd &lt;span class="nb"&gt;.&lt;/span&gt;    &lt;span class="c"&gt;# copiamos o arquivo passwd da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; http &lt;span class="k"&gt;*&lt;/span&gt;      &lt;span class="c"&gt;# pesquisamos http em qualquer arquivo do diretório corrente.&lt;/span&gt;
                                        &lt;span class="c"&gt;# será listado os arquivos que não tem o valor pesquisado.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  -r | --recursive
&lt;/h3&gt;

&lt;p&gt;Essa opção faz com que o que for pesquisado, não se limite ao diretório corrente, mas que consiga pesquisar em subdiretórios.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# grep [option] &amp;lt;search-value&amp;gt; &amp;lt;where-to-look&amp;gt;&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; ~                             &lt;span class="c"&gt;# entramos na pasta home&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;grep-test                  &lt;span class="c"&gt;# criamos uma pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;grep-test                     &lt;span class="c"&gt;# entramos na pasta teste&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services &lt;span class="nb"&gt;.&lt;/span&gt;               &lt;span class="c"&gt;# copiamos o arquivo services da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/passwd &lt;span class="nb"&gt;.&lt;/span&gt;                 &lt;span class="c"&gt;# copiamos o arquivo passwd da nossa máquina.&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;sub                        &lt;span class="c"&gt;# criamos a pasta sub&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; /etc/services ./sub/          &lt;span class="c"&gt;# copiamos novamente o arquivo services, mas agora para a pasta sub&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; http &lt;span class="k"&gt;*&lt;/span&gt;                   &lt;span class="c"&gt;# pesquisamos http em qualquer arquivo do diretório corrente e subdiretórios.&lt;/span&gt;
                                                     &lt;span class="c"&gt;# será listado o conteúdo dos arquivos que tem o valor pesquisado, tanto arquivos do diretório atual quanto em subdiretórios.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>ubuntu</category>
      <category>linux</category>
    </item>
    <item>
      <title>Listando arquivos e diretórios de forma mais eficiente - Série Linux</title>
      <dc:creator>Kauan Amorim da Silva</dc:creator>
      <pubDate>Thu, 27 Jul 2023 03:31:46 +0000</pubDate>
      <link>https://dev.to/kauanamorim/listando-de-forma-mais-eficiente-serie-linux-4hlm</link>
      <guid>https://dev.to/kauanamorim/listando-de-forma-mais-eficiente-serie-linux-4hlm</guid>
      <description>&lt;p&gt;Na continuação dessa série iremos falar de um dos comandos mais populares do linux o &lt;strong&gt;ls&lt;/strong&gt; esse comando é bem interessante por suas opções e como elas podem ser de grande ajuda quando você está só tem a linha de comando disponível.&lt;/p&gt;

&lt;p&gt;Para quem não conhece o comando &lt;strong&gt;ls&lt;/strong&gt; é o comando de listagem, ele lista todos os arquivos e diretórios do diretório corrente.&lt;/p&gt;

&lt;p&gt;Para começar irei discorrer o que muitos já sabem até outros comandos que para alguns podem ser comum, mas para outros seja uma novidade.&lt;/p&gt;

&lt;h1&gt;
  
  
  ls
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls        # Lista arquivos e diretórios no diretório corrente.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Detalhando a listagem
&lt;/h1&gt;




&lt;h2&gt;
  
  
  ls -a
&lt;/h2&gt;

&lt;p&gt;Com essa opção são listados os arquivos ocultados, o diretório atual (simbolizado por .) e o diretório anterior (simbolizado por ..).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls -a     # Lista arquivos e diretórios ocultos.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ls -l
&lt;/h2&gt;

&lt;p&gt;Essa opção irá listar as permissões, quem criou, quem alterou, tamanho e data de alteração do arquivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls -l     # Lista arquivos e diretórios com seus detalhes 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ls -s
&lt;/h2&gt;

&lt;p&gt;Essa opção irá mostrar ao lado do nome do arquivo/diretório o tamanha em KB do mesmo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls -s     # Lista arquivos e diretórios mostrando seus KB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Ordenando a listagem
&lt;/h1&gt;




&lt;h2&gt;
  
  
  ls -S
&lt;/h2&gt;

&lt;p&gt;Essa opção ordena os arquivos/diretórios pelo tamanho.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls -S     # Lista arquivos/diretórios ordenando por seus KB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ls -t
&lt;/h2&gt;

&lt;p&gt;Essa opção ordena os arquivos/diretórios pela data e horá mais recente de alteração.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~      # Entrando na pasta home.
ls -t     # Lista arquivos/diretórios ordenando pela data e hora mais recente de alteração mais recente.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Listando com coringas 🃏
&lt;/h1&gt;




&lt;h2&gt;
  
  
  ?
&lt;/h2&gt;

&lt;p&gt;O ponto de interrogação é bem simples, ele representa um  caractere e pode ser qualquer caractere. &lt;/p&gt;

&lt;p&gt;Digamos que temos os arquivos:&lt;/p&gt;

&lt;p&gt;arq1 arq2 arq3 arq4 arq5 arq01 arq02 arq03 arq04 arq05 arq10 arq20 arq30 arq40 arq50&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls arq? #será lista todos os arquivos que tenham arq e um caractere amais.
# resultado: arq1  arq2  arq3  arq4  arq5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  *
&lt;/h2&gt;

&lt;p&gt;Esse coringa qualquer coisa, qualquer caractere e qualquer quantidade do mesmo.&lt;/p&gt;

&lt;p&gt;Digamos que temos os arquivos:&lt;br&gt;
arquivo arqdhdtrhdrdvo arq1 arq2 arq3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls arq*vo # Esse comando indica que entre o **q** e o **v** pode ter qualquer caractere e qualquer quantidade de caractere.
# resultado: arquivo arqdhdtrhdrdvo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  [1-5]
&lt;/h2&gt;

&lt;p&gt;Esse coringa determina o range de possibilidades.&lt;/p&gt;

&lt;p&gt;Digamos que temos os arquivos:&lt;br&gt;
arq1 arq2 arq3 arq4 arq5 arq01 arq02 arq03 arq04 arq05 arq10 arq20 arq30 arq40 arq50&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls arq[1-5] # irá listar todos os arquivos arq que tenha um caractere de 1 a 5.
# resultado: arq1  arq2  arq3  arq4  arq5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  [a, A]
&lt;/h2&gt;

&lt;p&gt;Esse coringa determina as possibilidades que podemos ter, ele é muito parecido com o de range de possibilidades.&lt;/p&gt;

&lt;p&gt;Digamos que temos os arquivos:&lt;/p&gt;

&lt;p&gt;arq1 arq2 arq3 arq4 arq5 Arq6 Arq7 Arq8 Arq9&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls arq? # só listara os arquivos arq e não os Arq
#resultado: arq1 arq2 arq3 arq4 arq5

ls [a,A]rq? #listara todos os arquivos arq e Arq
#resultado: arq1 arq2 arq3 arq4 arq5 Arq6 Arq7 Arq8 Arq9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Exibindo conteúdo na linha de comando  - Série Linux</title>
      <dc:creator>Kauan Amorim da Silva</dc:creator>
      <pubDate>Wed, 26 Jul 2023 00:33:08 +0000</pubDate>
      <link>https://dev.to/kauanamorim/exibindo-conteudo-no-terminal-serie-linux-28dd</link>
      <guid>https://dev.to/kauanamorim/exibindo-conteudo-no-terminal-serie-linux-28dd</guid>
      <description>&lt;p&gt;Uma das coisas mais comuns quando se está usando um sistema operacional linux, acessando um container ou até mesmo acessando um servidor é exibir o conteúdo de um arquivo.&lt;/p&gt;

&lt;p&gt;Nesse artigo irei te passar alguns comandos e algumas opções interessantes para serem usadas com eles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comandos:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cat&lt;/li&gt;
&lt;li&gt;more&lt;/li&gt;
&lt;li&gt;less&lt;/li&gt;
&lt;li&gt;head&lt;/li&gt;
&lt;li&gt;tail&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  cat
&lt;/h1&gt;

&lt;p&gt;Esse comando não serve somente para exibir o conteúdo de um arquivo, mas ele é um dos mais comuns para se fazer isso, o cat veio de concatenar e você consegue concatenar o conteúdo de diversos arquivos diferentes em um único output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cat [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
cat services          # usamos o cat para pegar o conteúdo do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  more
&lt;/h1&gt;

&lt;p&gt;O comando &lt;strong&gt;more&lt;/strong&gt; pega todo o conteúdo de um arquivo, porém ele cria uma certa páginação do arquivo, exibindo em porcentagem o quando já foi exibido do arquivo.&lt;/p&gt;

&lt;p&gt;Para se locomover no conteúdo exibido, basta usar as setas do teclado e para sair da exibição do conteúdo basta usar a tecla &lt;strong&gt;q&lt;/strong&gt; de &lt;strong&gt;quit.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# more [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
more services         # usamos o more para pegar parte do conteúdo do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  less
&lt;/h1&gt;

&lt;p&gt;O comando less é muito parecido com o comando more a única diferença entre os dois é que o less não mostra a porcentagem de conteúdo já exibído.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# less [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
less services         # usamos o cat para pegar parte do conteúdo do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  HEAD | TAIL
&lt;/h1&gt;

&lt;p&gt;Os comandos são opostos um do outro, o comando head exibe as 10 primeiras linhas do conteúdo de um arquivo e o comando tail exibe as 10 últimas linhas de um arquivo. &lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  HEAD
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# head [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
head services         # usamos o head para pegar as 10 primeiras linhas do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  TAIL
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# tail [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
tail services         # usamos o head para pegar as 10 últimas linhas do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  -n | --lines
&lt;/h2&gt;

&lt;p&gt;Essa opção é usada para alterar o número de linhas exibida na execução do comando (funciona tanto para head e tail).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# head [option] &amp;lt;filename&amp;gt;
# tail [option] &amp;lt;filename&amp;gt;

cd ~                  # entramos na pasta home
mkdir cat-test        # criamos uma pasta teste
cd cat-test           # entramos na pasta teste
cp /etc/services .    # copiamos o arquivo services da nossa máquina
head -n 3 services    # usamos o head para pegar as 3 primeiras linhas do arquivo services
tail -n 3 services    # usamos o head para pegar as 3 últimas linhas do arquivo services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>linux</category>
      <category>ubuntu</category>
    </item>
  </channel>
</rss>
