Agora que você já aprendeu os comandos básicos de manipulação de arquivos no artigo anterior, vamos ver alguns detalhes adicionais e mais uns comandos.
No MS-DOS e no Windows, para ocultar um arquivo altera-se um atributo. No Linux, qualquer arquivo que seu nome comece com um ponto é um arquivo oculto, que não será listado com um simples ls e nem aparecerá por padrão nos gerenciadores de arquivos gráficos. Em se tratando de linha de comando podemos ver como isso funciona da seguinte forma:
mkdir exercicios cd exercicios touch arquivo_visivel.txt touch .arquivo_oculto.txt ls ls -a
Saída do ls -a
. .. .arquivo_oculto.txt arquivo_visivel.txt
Após criar e entrar no diretório de trabalho, criamos dois arquivos, um normal e um oculto. Com o ls sem parâmetros só é listado o arquivo normal. Com o parâmetro -a são listados os dois. Mas o que é aquele . e aquele .. que apareceram antes dos nomes dos arquivos? São entradas especiais que referenciam o diretório atual (.) e o diretório pai (..) do atual, ou um nível acima, na árvore de diretórios. Assim é possível voltar para o diretório pai com o comando cd ..
Experimente.
Entre novamente no diretório exercicios para criarmos um link simbólico.
cd exercicios ln -s .arquivo_oculto.txt link_visivel.txt ls -l
Saída do ls -l
-rw-r--r-- 1 daniel daniel 0 Jun 20 19:33 arquivo_visivel.txt lrwxrwxrwx 1 daniel daniel 19 Jun 20 19:35 link_visivel.txt -> .arquivo_oculto.txt
O comando ln com o parâmetro -l cria o link simbólico. Veja que o o comando ls com o parâmetro -l mostra a relação entre o link e o arquivo original. E pra que serve esse tal de link simbólico? Pense nele como um atalho para o arquivo ou diretório. É uma referência. Vamos exemplificar. Como o .arquivo_oculto.txt está vazio vamos preenchê-lo, redirecionando o conteúdo de outro arquivo para ele.
cat /etc/passwd > .arquivo_oculto.txt cat .arquivo_oculto.txt cat link_visivel.txt
Conclui-se que tanto faz listar o conteúdo do arquivo propriamente, quanto o link que aponta para ele, que será exibido a mesma coisa.
O que acontece com o link se nós apagarmos o arquivo ao qual ele se referencia? Dizemos que o link ficou quebrado. Veja:
rm .arquivo_oculto.txt cat link_visivel.txt
O cat não encontrará o arquivo para o qual o link aponta e apresentará uma mensagem de erro. Se apagarmos o link, nada acontece com o arquivo ao qual ele está associado.
Vamos aprender um comando para pesquisar uma palavra (ou sequência) em um arquivo e retornar apenas as linhas que contenham essa palavra. O grep.
cp /etc/passwd . ls cat passwd grep root passwd
Exemplo de saída do comando grep
root:x:0:0:root:/root:/bin/bash
Lembram que eu disse que o . representa o diretório corrente? Pois é. Copiamos o arquivo passwd do diretório /etc para o diretório atual. Com o ls verificamos que ele foi realmente copiado. O cat mostra na tela todo o conteúdo do arquivo e o grep filtra apenas as linhas que possuam a palavra root. Provavelmente só aparecerá uma linha na saída.
E se eu quiser ver apenas a primeira coluna de todas as linhas do arquivo? Para isso temos o comando cut.
cut -f 1 -d : passwd
Exemplo de saída do comando cut
root bin daemon adm lp sync shutdown halt news uucp operator nobody sshd man
Nesse caso estamos dizendo que queremos que o cut mostre a primera coluna, considerando que o separador entre elas é o caractere :, que no caso do arquivo passwd separa os campos.
Ok. E se eu quiser apenas a primeira coluna das linhas que contenham a palavra root?
Eu poderia usar um arquivo intermediário para conseguir isso, assim:
grep root passwd > arquivo_intermediario cut -f 1 -d: arquivo_intermediario
Mas existe uma maneira mais elegante de obter o mesmo retorno sem precisar criar um arquivo. Podemos lançar mão de um recurso poderoso, herdado do Unix, que são os dutos ou pipes. Na prática significa que a saída de um comando será a entrada de outro comando. Vamos ver como funciona.
grep root passwd | cut -f 1 -d :
Estamos pegando o resultado do primeiro comando (grep) e enviando para ser tratado pelo segundo (cut), usando o pipe |.
Tente ao contrário:
cut -f 1 -d : passwd | grep root
E compare o resultado.
Comandos novos aprendidos:
ln = cria links
grep = filtra linhas baseado em sequências
cut = filtra colunas por separadores ou blocos
além do pipe |
Por enquanto é só. Até a próxima pessoal!