Atividades de Pesquisa:
Projetos em andamento:
Tipicamente, quando interagimos com um computador, utilizamos graphical user interface (ou GUI), que funciona através de interações com o mouse.
É difícil fornecer instruções complexas para uma GUI, com muitos passos ou que envolvam várias operações sequenciais. Por exemplo, se você precisar copiar a terceira linha de mil arquivos de texto em centenas de diferentes diretórios.
Portanto, por fazerem tais atividades triviais, as interfaces de linha de comando (CLIs) são indispensáveis. Nesse contexto, temos o Shell, o programa onde o usuário digita comandos, que serão então executados e interpretados. O Shell mais popular hoje em dia, e presente em sistemas operacionais Unix, como o Linux, é o Bash.
Vamos começar!
Quando você abrir o shell pela primeira vez, você será apresentado ao prompt de comando, geralmente um cifrão, acompanhado de um cursor de texto. Em alguns sistemas operacionais é comum o prompt conter o nome do usuário e da máquina:
Como todo curso de programação que se preze, vamos começar fazendo nosso ‘hello world’ em Shell:
A maneira que interagimos com o shell é através de comandos digitados no prompt, que são então executados quando você pressiona a tecla Enter.
Mas você ainda não sabe nenhum comando! Então, para começarmos, use o comando ls
, que significa listar, que lista os arquivos na pasta, ou diretório, atual:
O prompt listou todos os arquivos e diretórios presentes onde você está. Mas onde você está agora? Com o comando ‘pwd’, que significa Print Working Directory, você consegue ver o caminho absoluto para onde o seu prompt está apontando:
Se você seguiu as instruções à risca até aqui, o output do prompt deve ser o seu ‘Home Directory’, ou seja, o local que você entra quando faz login. Cada usuário no computador tem o seu próprio, e ele deve ter um formato /home/<USUARIO>
.
Agora, para se mover dentro do sistema de arquivos, você pode usar o comando ‘cd’, de change directory:
Você entrou no diretório de downloads do seu computador. Você pode checar os arquivos existentes usando ‘ls’ e pode verificar onde está usando ‘pwd’.
Se você tem um grande número de arquivos no seu diretório, é complicado localizar algum arquivo apenas listando todos. Para isso, podemos usar alguns artifícios do comando ls:
ls -t #organiza por tempo em vez de ordem alfabética
ls -tr #reverte a ordem anterior (mostra o mais recente por último)
ls -s #mostra o tamanho de cada arquivo em blocos
ls -sh #mostra o tamanho de cada arquivo em formato de leitura humano
ls *.zip #mostra todos os arquivos que terminam com ".zip"
ls sh* #mostra todos os arquivos que começam com "sh"
ls *lesson* #mostra todos os arquivos que contém "lesson" em algum canto do nome
Agora que achamos o arquivo com os dados do curso, vamos dezipá-lo para acessar seu conteúdo interno:
Dica: você não precisa escrever o nome do arquivo inteiro! Basta começar a escrever e pressionar ‘Tab’ que o prompt autocompletará.
Como voltar no sistema de arquivos?
Essa opção ‘..’ não está presente quando rodamos ‘ls’, mas ela está oculta em todos os diretórios e pode ser vista com:
Assim como o ‘..’, que volta um passo na árvore de arquivos, também temos o ‘.’, que representa o diretório atual. Em algumas situações, também haverão alguns arquivos de configuração (como o .gitignore, comumente visto em repositórios do git).
Para criar um diretório, você pode usar o comando ‘mkdir’, de make directory:
Não use espaços
Não comece com hífen (-)
Use apenas letras, números, ponto final, hífen, underscore
Se você precisa lidar com diretórios que não seguem essas regras, você pode colocar o nome deles entre aspas simples ’’ para mencioná-los em algum comando.
Vamos criar um arquivo a partir do terminal:
Ctrl + O, Enter - salvar alterações no arquivo
Ctrl + X - sair do editor
Ctrl + ^ - modo de seleção de texto
Alt + 6 - copia
Ctrl + U - cola
Como não vamos usar os arquivos criados em files, vamos removê-los usando ‘rm’, de remove:
O comando move é versátil e serve tanto para renomear arquivos quando para movê-los para outro caminho:
Podemos copiar arquivos usando o comando ‘cp’:
Agora que aprendemos a navegar diretórios, vamos mexer com arquivos. No diretório em que estamos, temos uma série de arquivos no formato Protein Data Bank (pdb). Vamos usar o comando ‘wc’, de word count:
Mas o que tem nesse arquivo?
Se o seu arquivo for muito grande, é melhor usar um exibidor interativo:
Às vezes, você só quer ver uma parte do arquivo. Você pode usar os comandos ‘head’ e ‘tail’:
Podemos registar o output de um comando dentro de um arquivo por meio do símbolo ‘>’:
Agora, temos um arquivo chamado lengths.txt que possui o número de linhas de todos os arquivos .pdb do diretório.
Nós podemos ordenar as linhas de um arquivo usando o comando ‘sort’:
E da mesma maneira, podemos direcionar o output do ordenamento para um novo arquivo:
Obs.: em Shell, é uma péssima prática direcionar o output de uma operação para o mesmo arquivo, isso pode comprometer a integridade dele!
Em vez de criar vários arquivos intermediários que tornam o trabalho mais confuso, podemos direcionar o output de uma operação diretamente para outra usando o pipe ‘|’:
Volte ao Home Directory
Navegue até a pasta animal-counts, dentro de exercise-data e localize o arquivo animals.csv
Inspecione o arquivo. Quantas linhas ele tem? Qual o formato do dado dele?
Gere o arquivo exercicio.txt que ordena de forma alfabética reversa as 5 primeiras linhas do arquivo animals.txt e dispõe apenas os 3 últimos resultados da ordenação.
Atividade de Pesquisa:
Experiência de ensino:
Loops ou, em bom português, laços;
Como em qualquer outra linguagem, laços permitem que você realize uma mesma ação várias vezes, em sequência.
Mão na massa! Vamos supor que temos centenas de genomas, e queremos ver identificação de cada um desses bichos, que está na segunda linha de cada genoma. Você talvez pense em:
Existem inúmeros editores de texto possíveis, mas, se você está restrito à linha de comando, provavelmente usará:
nano
vim
Para motivos didáticos, utilizaremos o nano
nos exemplos posteriores.
Vamos criar um novo script, para isso, execute:
A variável $1
indica o primeiro argumento na linha de comando quando esse script é executado, ou seja, o genoma. Também podemos usar $2
, $3
, etc… $@
se refere a todos os argumentos.
Salve o arquivo, e agora podemos executá-lo como tal:
Você notou como usamos bash
no comando anterior? Isso é um comando por si só, que diz que a linguagem bash
deve interpretar o conteúdo textual do arquivo.
Mas isso pode ser ainda mais simples! Com apenas dois passos:
chmod
pode dar a qualquer arquivo de texto a capacidade de ser executado - Isso serve não só para bash, mas também Python, R, etc.Se direcione ao diretório exercise-data/alkanes
Lá, escreva um script chamado junta_pdb.sh
. Esse script deve fazer um laço em todos os arquivos .pdb no diretório atual, concat
enando todos eles em um único arquivo. Para isso, use o direcionador de saída >>
.
Faça seu script executável (adicione o shebang e modifique as permissões).
Global Regular Expression search and Print
Uma forma de achar padrões em arquivo de texto
Um uso comum de grep:
No entanto, grep se torna realmente poderoso quando usamos expressões regulares
São formas de definir padrões de busca textual regrados.
Por exemplo, uma expressão regular para achar a palavra “Nossa” seria apenas a palavra propriamente dita. Mas para buscar “Nossa”, “Nosso”, “Nossas”, “Nossos”, você faria algo assim: Noss[a-zA-Z]*
# Expressão regular para buscar um email numa sequência de texto
grep -E '\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b' texto.txt
man grep
) para saber mais a respeito. Mas aqui uma palhinha:
xargs
é um comando que transforma a saída de outros comandos de forma a facilitar a execução encadeada. Pois a quebra de linhas ou espaços pode dificultar a execução de outro comando em sequência.parallel
é um comando que por padrão não vem em algumas distribuições, mas é super útil! Use ele para paralelizar a execução de comandos.
Por exemplo, vamos compactar vários arquivos .pdb:
Introdução à linha de comando do Linux