Especialista Linux

Aula 1 - LPIC-1 - Tópico 103.2

Praticamente, toda a configuração de um servidor Linux pode ser realizada através de arquivos de texto puro. Isto é, um arquivo com conteúdo sem formatação. Quando você cria um documento no Libreoffice Writer, por exemplo, este arquivo possui diversos códigos, que informam cor da letra, tipo de fonte, formatação da página, entre outros. Um texto puro, por sua vez, possui apenas o conteúdo (caracteres) e, por isto, sua leitura é possível em qualquer dispositivo computacional.

lpi 103.2

Um exemplo de arquivo de configuração no Linux é o /etc/fstab, onde todas as informações relacionadas aos discos que vão iniciar com o Linux fica armazenada. Vejamos um exemplo:

# <device>        <dir>        <type>        <options>        <dump> <fsck>
/dev/sda1         /            ext4          noatime          0      1
/dev/sda2         none         swap          defaults         0      0
/dev/sda3         /home        ext4          noatime          0      2

Observe que é uma informação em texto puro, de forma que qualquer um com previlégio de administrador de sistema possa abri-lo e editá-lo.

Alterá-lo sem conhecimento prévio poderia fazer seu sistema não mais iniciar. Por esse motivo, teste os comandos deste capítulo em seus próprios arquivos de texto, e nunca nos arquivos do sistema. Aprenderemos sobre os principais arquivos de configuração mais à frente neste livro.

O primeiro comando que vamos utilizar é para leitura de arquivos em texto, chamado cat. Eu sempre brinco em minhas aulas, chamando-o de comando do gatinho, assim você não se esquecerá mais dele.

Abra qualquer editor de texto puro, como o gedit, kedit, lifepad, nano ou VIM e escreva: “Eu uso linux” e salve em seu diretório de usuário com o nome linux.txt. Agora, dentro do terminal de comando digite:

$ cat ~/linux.txt

O comando cat vai retornar o conteúdo do arquivo na próxima linha do Shell, ou seja:

$ Eu uso linux

Os comandos que vamos estudar, modificam a saída do texto na sua tela, estes comandos não modificam o conteúdo do arquivo.

Exemplo:

Gostaria de ver a saída do arquivo linux.txt mostrando o número da linha à frente? Execute o comando cat com a sintaxe:

$ cat -n ~/linux.txt

E se por acaso você tem um arquivo de texto com diversas linhas em branco, mas gostaria de ignorá-las, neste caso, execute outra sintaxe do comando cat:

$ cat -b ~/linux.txt

Existem comandos com dezenas de sintaxes diferentes, e por isso é muito importante sempe consultar a página de manual do comando, ou verificar se ele possui a sintaxe de ajuda:

$ cat --help

Outro comando interessante é o tac, que na verdade é um cat invertido, ou seja, ele vai exibir o conteúdo do arquivo do final para o começo.

$ tac ~/linux.txt

Para exibir por padrão as 10 primeiras linhas de um arquivo de texto, utilize o comando head, que lê o cabeçalho do texto. Exemplo:

$ head ~/linux.txt

Uma sintaxe interessante do comando head é a possibilidade de definir o número de linhas a ser exibido, exemplo:

$ head -n2 ~/linux.txt

No exemplo, somente as duas primeiras linhas do arquivo linux.txt serão exibidas.

Assim como temos um comando que lê o cabeçalho de um arquivo de texto, temos outro que lê o rodapé, chamado tail. Este comando lê, por padrão, as 10 últimas linhas de um arquivo:

$ tail ~/linux.txt

Assim como o comando head, podemos definir o número de linhas a ser exibido:

$ tail -n2 ~/linux.txt

O comando tail possui uma sintaxe interessante. Ela permite que o arquivo fique sempre aberto no Shell e, caso seu conteúdo seja atualizado, como um arquivo de log, você verá as alterações em tempo real. A sintaxe do comando é:

$ tail -f /var/log/auth.log

No exemplo, eu estou abrindo o arquivo de log que registra os usuários que estão logando e realizando logoff no sistema. Deixe aberto este arquivo de log com o comando anterior e abra um novo ambiente com as teclas: < ctrl + alt + f3 >.

Realize alguns logins. Retorne para o ambiente em que está o arquivo aberto e verifique a mudança. Vale lembrar que você pode alterar entre diversos ambientes, que são os terminais virtuais. Na maioria das distribuições de Linux, vão de < f1 > até < f7 >.

Paginação da saída de texto

Se o seu arquivo de texto é muito grande, com centenas ou até milhares de linhas, ao executar o comando cat, por exemplo, a saída na tela será rápida, mostrando todo o conteúdo, porém o cursor vai parar nas ultimas linhas. Você pode até subir a tela do Shell usando as teclas: < ctrl + alt + PageUp > e descer usando < ctrl + alt + PageDown >, mas isto é ineficaz quando você procura por uma informação específica dentro deste arquivo. Para isto, a melhor opção seria usar um páginador de texto. Vejamos o comando less:

# less /etc/passwd

Com a seta para baixo ou para cima, navegamos linha a linha. Se apertamos < enter >, ele pula para a próxima página. Podemos fazer busca na saída usando barra (/), por exemplo /juliano. Neste caso, ele vai procurar na saída do comando a palavra “juliano” e, se tiver mais de uma, usamos a tecla < n >, de next (próximo).

O less é muito utilizado para paginar a saída de outros comandos. Para que isso ocorra, usamos um caractere chamado pipe (|) e o comando less. Exemplo:

# cat /etc/passwd |less

Nesse exemplo, a saída do comando cat será paginada com o comando less.

Contar palavras, linhas e caracteres

O comando wc permite que você conte o número de palavras, caracteres ou linhas de um arquivo de texto. Usar o comando sem nenhuma sintaxe retorna estas três informações, por exemplo:

$ wc /etc/passwd

A saída deste comando no meu caso foi:

$ 40   70 2252 /etc/passwd

O que significa: 40 linhas, 70 palavras e 2252 caracteres.

Podemos usar algumas sintaxes para definir melhor estas informações, retornando apenas o necessário. Para linhas, utilize:

# wc -l /etc/passwd

Somente caracteres:

# wc -c /etc/passwd

Somente palavras:

# wc -w /etc/passwd

Outro comando para visualização de linhas é o nl, similar ao cat -b, pois ele enumera as linhas ignorando as linhas em branco:

# nl /etc/passwd

Ordenar arquivos

O comando cat sem dúvida alguma é um dos comandos Unix/Linux mais utilizados no dia a dia de um administrador de sistemas. Porém, em alguns casos é necessário utilizarmos outros recursos. Vamos vê-los.

Quando desejamos visualizar um arquivo organizando-o em ordem alfabética, neste caso, o comando indicado é o sort:

# sort /etc/passwd

Ele permite também ordenar de modo reverso:

# sort -r /etc/passwd

Ver entradas únicas em um arquivo

O comando uniq permite que você visualize arquivos de texto, excluindo entradas duplicadas. Como exemplo, crie em seu editor e salve como nomes.txt um arquivo com o conteúdo:

juliano
mario
mario
juliano
maria
joaquim
juliano
mario

Observe que temos os nomes “juliano” e “mario” repetido três vezes. Para evitar essas repetições na saída, utilize o comando:

uniq alunos.txt

A saída será:

juliano mario maria joaquim

Para visualizar quantas vezes existiram repetições, utilize:

uniq -c alunos.txt

Nesse caso, a saída é:

3 juliano 3 mario 1 maria 1 joaquim

Tabulação

Tabulações são marcas definidas através da tecla < tab > que alteram a posicão do seu texto. O Shell possui alguns comandos que permitem remover estas tabulações, assim como adicioná-las.

Isso é feito com os comandos expand e unexpand. Em ambos os comandos, a opção -t permite que você defina a quantidade de tabulações. Exemplo:

$ expand ~/texto.txt

Neste exemplo, sempre que ele encontrar uma tabulação no arquivo, ele trocará pelo equivalente a oito espaços. Você pode definir este número de espaços usando:

$ expand -t 2 ~/texto.txt

Nesse caso, cada tabulação será trocada por dois espaços. O inverso também é possível, ou seja, trocar os espaços por tabulações:

$ unexpand arquivo.txt

A diferença é que, se você usar o comando unexpand sem nenhuma sintaxe, ele trocará apenas o começo da linha e não o seu texto todo. Para alterar em todo o texto, use desta forma:

$ unexpand -a arquivo.txt

Se você desejar, por exemplo, que a cada 2 espaços ele transforme em um tab, use:

$ unexpand -t 2 arquivo.txt

Combinar arquivos através de um índice

Crie um arquivo com o seguinte conteúdo:

1 Maria
2 Joao
3 Lucas

Salve como alunos.txt dentro do seu diretório pessoal. Agora crie outro arquivo com o seguinte conteúdo:

1 10
2 5
3 3.8

Salve como notas.txt dentro de seu diretório pessoal. Execute agora:

$ join ~/alunos.txt ~/notas.txt

Sua saída será:

1 juliano 10
2 maria 5
3 lucas 3.8

O comando join realiza a junção de dois arquivos. Porém, eles devem ter um índice em comum, que, no nosso caso, foram os numeros em sequência ao início de cada linha. Poderia ser uma sequência alfabética, números romanos etc.

Dividir um arquivo

Quando temos um arquivo longo, podemos dividi-lo usando o comando split. No exemplo a seguir, vamos dividir o nosso arquivo texto.txt, que contém dezenas de linhas, em arquivos diversos com apenas três linhas de conteúdo cada:

$ split -l3 ~/texto.txt

Observe no seu diretório atual a criação de diversos arquivos com os nomes: xaa, xab, xac etc., cada um com 3 linhas de texto.

Apagar e substituir caracteres

O comando tr é usado para substituir caracteres. Como este comando é apenas um filtro para a saída de outros comandos, devemos utilizá-lo com o pipe (|). Exemplo:

# cat /etc/passwd | tr a-z A-Z

Nesse exemplo, vamos alterar toda a saída do arquivo /etc/passwd para caracteres maiúsculos. O inverso também é possível. Caso tenha um texto escrito em maiúsculo, você pode usar:

$ cat texto.txt | tr A-Z a-z

Você pode realizar outras alterações, como:

$ cat /etc/passwd | tr ei EI

Nesse caso, ele transforma somente as saídas (ei) minúsculo para (EI) maiúsculo.

Outro exemplo interessante é a substituição de palavras em um arquivo:

$ cat /etc/passwd | tr juliano Grubelilo

Nesse caso, toda palavra “juliano” será alterada para “Grubelilo”.

Para excluir um caractere ou uma palavra use a opção -d, por exemplo:

$ cat /etc/passwd | tr -d juliano

Nesse caso, todas as palavras “juliano” serão excluidas. Mas vale lembrar que estes comandos não estão alterando o arquivo. Somente trabalhando com as informações de saída, ou seja, o que você visualiza na sua tela. No caso desse exemplo, o arquivo /etc/passwd não foi modificado.

Formatar uma saída de texto

Você pode limitar o tamanho das linhas em seu texto com o comando fmt. Isso é útil para uma melhor visualização na tela e em alguns casos para até mesmo a impressão de um documento. Exemplo:

$ fmt -w 20 /etc/passwd

Nesse exemplo, estou limitando a linha do arquivo /etc/passwd em 20 caracteres. Além do fmt, que formata a saída do texto, temos o comando pr que permite gerar uma saída pronta para ser impressa.

$ pr texto.txt

A saída do comando pr é interessante, porque ele adiciona um cabeçalho com o nome do arquivo, data e número da página. Você pode, inclusive, editar este cabeçalho de saída:

$ pr -h "Curso prof. Juliano Ramos" arquivo.txt

Agora, em todas as páginas do arquivo.txt, teremos como cabeçalho a informação: “Curso prof. Juliano Ramos”.

Para finalizar este capítulo, vamos abordar mais dois comandos exigidos pela certificação LPI: cut e sed.

O comando cut recorta partes de um texto. Por exemplo, se você deseja obter na saída apenas os três primeiros caracteres do arquivo:

cut -c1,2,3 texto.txt

Você pode inclusive gerar um range:

cut -c1-5 texto.txt

O comando sed é uma poderosa ferramenta que tem como objetivo substituir, procurar e deletar conteúdo de um texto. Para a prova de certificação é fundamental conhecer as sintaxes de substituição e de exclusão:

sed 's/ramos/oliveira/' alunos.txt

Nesse exemplo, estamos substituindo a primeira ocorrência da palavra “ramos” pela palavra “oliveira”. Para substituir em todo o texto, utilize:

sed 's/ramos/oliveira/g' alunos.txt

Já para deletar uma linha, utilize a sintaxe:

sed '3,5 d' alunos.txt

Nesse caso, o sed vai apagar as linhas 3 e 5 do arquivo alunos.txt. Você pode definir também que, sempre que uma ocorrência aparecer, a linha seja excluída. Por exemplo:

sed '/juliano/d' alunos.txt

Agora, toda vez que a palavra “juliano” aparecer dentro de alunos.txt, a linha será excluída.

Conclusão do capítulo

A prova de certificação LPI é multipla escolha. Com o passar do tempo, você vai observar um padrão em muitas sintaxes de comando, de modo que, no dia do exame, será fácil descartar as respostas erradas. Não é necessário estudar a página de manual de cada comando - isso seria loucura, já que alguns comandos possuem dezenas de sintaxes. Mas é importante compreender o funcionamento padrão de cada um. Nosso livro sempre vai aproximá-lo ao máximo do exame de certificação e, por isso, revise sempre os capítulos à frente do computador. Mais do que ler, é fundamental que você pratique.

Commits

  • 21/06/2020 - 13:33 - Upload da publicação.
  • 05/01/2022 - 12:39 - Correção de imagem quebrada.
  • 14/01/2022 - 05:27 - Correção do comando cut adicionado via kate/plasma.