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.
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.