# [Minicurso 2025] 02. Introdução ao Linux ###### tags: `Minicurso25` ![](https://i.imgur.com/hDRjT6P.png =500x) [TOC] ## Tabela de comandos básicos: |Comando | Função| |--------|-------| |pwd | Mostra o caminho completo até o diretório atual| |cd | Muda do diretório atual para o especificado| |ls | Lista conteúdos de um diretório| |cp | Copia arquivos| |mv | Move/ Renomeia diretórios e arquivos| |ln | Cria link simbólico (atalho) de um diretório ou arquivo| |mkdir | Cria diretório| |rmdir | Remove diretório| |rm | Remove arquivos| |tree | Exibe a árvore de diretórios e subdiretórios| |touch | Cria arquivo vazio| |locate | Procura arquivo por nome| |find | Procura arquivos em diretórios específicos| |grep | Procura por padrões específicos dentro de um arquivo de texto| |cat | Mostra um arquivo de texto por completo| |head | Mostra as primeiras linhas de um arquivo de texto| |tail | Mostra as últimas linhas de um arquivo de texto| |more | Mostra um arquivo de texto completo, mas uma página por vez| |less | Similar ao ‘more’, mas mais simplificado| |wc | Conta o número de linhas, palavras e caracteres| |df | Exibe o espaço livre de armazenamento| |du | Exibe o espaço em uso de armazenamento| |chmod | Altera as autorizações de um arquivo ou diretório| |chown | Altera o dono de um arquivo ou diretório| |top | Lista os processos que mais estão consumindo CPU/RAM| |ps | Lista todos os processos vigentes| |kill | Interrompe um processo| |history | Lista os últimos comandos realizados| |wget | Permite o download de arquivos da Web| |uname | Revela informações sobre o sistema operacional| |ping | Mede o tempo de resposta de um servidor| |hostname | Revela informações da rede| |zip/unzip | Compacta/Descompacta diretórios e arquivos| |exit | Encerra a sessão| |sed | Editor de texto em linha| |vim | Editor de texto em tela cheia| |cut | Exibe colunas específicas de arquivos delimitados| |sort | Ordena informações alfanumericamente| |uniq | Suprime informações repetidas| |time | Mede o tempo de execução de programas| |clear | Limpa a tela do terminal| ## Parte I: Atividades dos comandos básicos 1. Liste os arquivos de um diretório com o comando `ls` :::spoiler ```bash= # Lista arquivos de um diretório ls ``` ::: --- 2. Alguns comandos podem receber parâmetros adicionais. Normalmente, é feito pela adição de um `-` ou `--`. Teste o comando `ls -a`, o que ocorreu? :::spoiler ```bash= # Visualização de arquivos ocultos ls -a ``` ::: --- 3. Teste as variações: `ls -l`, `ls -la`, `ls -lat`. O que mudou? :::spoiler ```bash= # Listar em forma de lista ls -l # Listar em forma de lista incluindo arq. ocultos ls -la # Listar em forma de lista, incluindo arq. ocultos, em ordem cronológica ls -lat ``` ::: --- 4. Acesse o manual do comando `ls`, adicionando o parâmetro: `ls --help`. :::spoiler ```bash= # Ajuda pode ser obtida com o parâmetro --help ls --help ``` ::: --- 5. Teste o comando `pwd`, o que ele informa? :::spoiler ```bash= # pwd = print working directory - mostra o diretório atual pwd ``` ::: --- 6. Crie um diretório chamado `teste` com o comando `mkdir` (make directory). :::spoiler ```bash= # Criar diretório mkdir teste ``` ::: --- 7. O comando `cd` (change directory) serve para nos mover na árvore de diretórios. ![](https://i.imgur.com/UriK4j2.png) --- 8. Entre no diretório recém-criado com o comando `cd`. :::spoiler ```bash= # Mover para o diretório "teste" cd teste/ ``` ::: --- 9. Caminhos podem ser **relativos** ou **absolutos**. Volte ao diretório anterior utilizando o caminho **relativo** (`cd ..`) e avance para ela, novamente, utilizando o caminho **absoluto**. :::spoiler ```bash= # Voltar para o diretório anterior: cd ../ # Voltar ao "teste" com o caminho absoluto: cd /home/<usuario>/teste/ ``` ::: --- 10. Crie um arquivo vazio chamado `arquivo.txt` com o comando `touch`. Liste os conteúdos com o comando `ls`. :::spoiler ```bash= # Criando arquivo vazio touch arquivo.txt # Checando a presença do arquivo ls ``` ::: --- 11. Crie uma cópia do arquivo chamada `arquivo2.txt` com o comando `cp` (copy). :::spoiler ```bash= # Criando cópia do 'arquivo.txt' com o nome 'arquivo2.txt' cp arquivo.txt arquivo2.txt ``` ::: --- 12. Mude o nome do `arquivo.txt` para `arquivo1.txt` com o comando `mv` (move). :::spoiler ```bash= # Renomeando 'arquivo.txt' como 'arquivo1.txt' mv arquivo.txt arquivo1.txt ``` ::: --- 13. Sem sair do diretório atual ("teste"), crie uma cópia (`cp`) do `arquivo1.txt` como `arquivo3.txt` no diretório anterior (seu "home"), então mova-a para o diretório atual com o comando `mv`. :::spoiler ```bash= # Criando uma cópia no diretório anterior: cp arquivo1.txt ../arquivo3.txt # Movendo a cópia para o diretório atual: mv ../arquivo3.txt ./ ``` ::: --- ::: danger 14. Remova os arquivos criados com o comando `rm` (remove). ::: :::spoiler ```bash= # Removendo arquivos rm arquivo1.txt arquivo2.txt arquivo3.txt # Ou... rm arquivo* ``` ::: --- :::danger 15. Retorne ao "home" (`cd ~`) e apague o diretório 'teste'. O `rm` funciona? Tente o `rmdir` ou `rm -rf`. ::: :::spoiler ```bash= # Removendo diretório 'teste' rmdir teste/ # Ou... rm -rf teste/ # PS: arquivos apagado no linux não podem ser recuperados! ``` ::: --- 16. Copie os arquivos `amostra1.fastq` e `amostra2.fastq` do diretório `/srv/cibioinfo/tutoriais/` para a sua "home". Dica: utilize caractere coringa `*` para copiar ambos de uma vez só! :::spoiler ```bash= # Copiando arquivos para o tutorial: cp /srv/cibioinfo/tutoriais/amostra1.fastq ~/ cp /srv/cibioinfo/tutoriais/amostra2.fastq ~/ # Ou... cp /srv/cibioinfo/tutoriais/amostra*.fastq ~/ ``` ::: --- 17. Visualize os arquivos com os comandos: `head`, `tail`, `more`, `less` e `cat`. Quais as diferenças? :::spoiler ```bash= # head: primeiras linhas. Por padrão são 10, podem ser específicadas head -5 amostra1.fastq # tail: head inverso tail -5 amostra1.fastq # more: visualizar arquivo de forma paginada (aperte 'q' para sair) more amostra1.fastq # less: similar ao 'more', controle com setas ou pg up/pg down. Teste com o parâmetro '-S' para uma visualização mais natural less amostra1.fastq less -S amostra1.fastq # cat: abre o arquivo do começo ao fim cat amostra1.fastq ``` ::: --- 18. Use o comando `wc` e descubra quantas linhas e quantas sequências temos nessas bibliotecas. :::spoiler ```bash= # wc (word count) mostra: linhas(-l)/palavras(-w)/caracteres(-c) wc amostra1.fastq wc -l amostra1.fastq ``` ::: --- 19. Use o comando `grep` para encontrar padrões nos arquivos. É possível identificar o número de sequências presentes? Dica: Encontre um padrão único! :::spoiler ```bash= # GREP - procura padrão dentro de arquivos de texto. # Seq. qualquer: grep "AAAAT" amostra1.fastq # IDs de sequências: grep "@" amostra1.fastq # Algumas qualidades apresentam '@' grep "@SRR" amostra1.fastq # Isolamento dos IDs ``` ::: --- 20. Combine comandos em sequência com o "pipe" (`|`). Para testar, combine o comando `grep` com o `wc -l`. :::spoiler ```bash= # Carregando os IDs e contando as linhas: grep "@SRR" amostra1.fastq | wc -l ``` ::: --- 21. A saída das execuções podem ser redirecionadas para um arquivo com o `>` (sobrescrever) ou `>>` (adicionar). Salve os IDs das sequências de cada biblioteca em um arquivo a parte (`IDs1.txt`, `IDs2.txt`), combinando o `grep` com o redirecionador `>`. :::spoiler ```bash= # Carregando os IDs e repassando a um arquivo: grep "@SRR" amostra1.fastq > IDs1.txt grep "@SRR" amostra2.fastq > IDs2.txt ``` ::: --- 22. O comando `cat` pode concatenar múltiplos arquivos em sequência. Utilize-o com os IDs e repasse tudo para um único arquivo. :::spoiler ```bash= # Concatenando e salvando IDs de múltiplos arquivos cat IDs1.txt IDs2.txt > IDs.txt # Ou... cat IDs*.txt > IDs.txt ``` ::: --- 23. Vamos observar se há IDs repetidas entre as bibliotecas. Para isso, vamos ordenar o arquivo `IDs.txt` com o comando `sort` e combina-lo com o **reverso** do comando `uniq` (`uniq -d`). Salve o resultado em um novo arquivo: `IDs_duplicados.txt` :::spoiler ```bash= # Ordenando IDs (alfabeticamente) e detectando duplicados: sort IDs.txt | uniq -d # Salvando a saída: sort IDs.txt | uniq -d > IDs_duplicados.txt ``` ::: --- 24. Por fim, vamos rodar o programa `pullseq` para obter essas sequências e salva-las em um novo arquivo. Contudo, o `pullseq` não tolera o caractere especial inicial das sequências (Ex. ">" ou "@") e, portanto, precisamos remove-lo. Para isso, utilizaremos o editor de texto em linha `sed` com o parâmetro `'s/@//g'` (lê-se: "substitua o '@' por nada") e salvar a saída no arquivo: `IDs_duplicados2.txt`. :::spoiler ```bash= # SED é um editor de texto capaz de alterar o conteúdo diretamente na sua saída. sed 's/@/AAAAAA/g' IDs_duplicados.txt # Removendo o '@' e salvando em um novo arquivo: sed 's/@//g' IDs_duplicados.txt > IDs_duplicados2.txt ``` ::: --- 25. Rode o `pullseq` passando o caminho da biblioteca com as sequências (`--input`) e do arquivo com os IDs (`--names`). Repasse a saída para um arquivo (`>`). :::spoiler ```bash= # Conheça o 'pullseq' com o comando 'pullseq --help' pullseq --help # Rodando o 'pullseq': pullseq --input amostra1.fastq --names IDs_duplicados2.txt # Rodando o 'pullseq' e salvando o resultado: pullseq --input amostra1.fastq --names IDs_duplicados2.txt > seqs_duplicadas.fastq ``` ::: --- 26. Crie um diretório chamado `tutorial_linux` e repasse os arquivos gerados até aqui para lá, combiando o comando `mv` com o caractere coringa (`*`) + a extensão dos arquivos. :::spoiler ```bash= # Criando o diretório: mkdir tutorial_linux # Movendo arquivos: mv *fastq ./tutorial_linux mv *txt ./tutorial_linux ``` ::: --- ## Parte II: Screen - Uma das vantagens de se processar dados em um servidor é a possíbilidade de executar as tarefas em *background*, ou seja, sem a necessidade de estar diretamente ligado à tarefa, ou mesmo com a interface ligada. Contudo, isso não é feito de forma automática e requer alguns comando específicos. - Uma forma mais simples é a utilização do programa `screen`. Esse utilitário, permite a abertura de uma tela paralela, com o adicional de possuir múltiplas abas, e que pode ser facilmente "desacoplada" e "acoplada" novamente. Dessa forma, jogando processos longos para o *background* sem risco de interrompe-los. - Agora, vamos abrir um novo screen nomeado com o comando abaixo: ```bash= screen -S teste ``` - Vamos treinar o ato de sair e voltar, novamente, para o screen. Para isso, utilizaremos primeiro a função de *"detach"*. Pressione as teclas `CTRL + A` seguido da tecla `D`. Note que você voltou para a tela sem screen. - Para retornar ao screen, utilize o comando: ```bash= screen -r teste ``` - Alguns atalhos utéis p/ `screen` são: | Atalho | Função | |--------|--------| | `CTRL+A` + `D` | Desacopla `screen`, voltando a tela normal | | `CTRL+A` + `C` | Cria uma nova aba | | `CTRL+A` + `A` | Retorna para a última aba usada | | `CTRL+A` + `N` | Avança para a próxima aba | | `CTRL+A` + `P` | Volta para a aba anterior | | `CTRL+A` + `[0-9]` | Vai para aba específica | | `CTRL+A` + `K` | Mata a aba atual | | `CTRL+A` + `Esc` | Libera o cursor, permitindo mover a visualização | - Alguns comandos utéis p/ `screen` são: | Comando | Função | |---------|--------| | `screen` | Abre uma screen não-nomeada | | `screen -S <nome>` | Abre uma screen com o nome `<nome>` | | `screen -r` | Retorna para a screen desacoplada, se só existir uma aberta | | `screen -r <nome>` | Retorna para screen desacoplada `<nome>` | | `screen -X <nome>` | Retorna para uma screen acoplada `<nome>` (múltiplas janelas) | | `screen -ls` | Lista todas as screens abertas, acopladas ou não | | `screen -wipe <nome>` | Elimina uma screen travada (só se ela estiver "morta") | | `screen -X -S <nome> quit` | Elimina uma screen travada (não-morta) | | `exit` | (Dentro da screen) Fecha aba/ Finaliza screen se for única aba | | `screen --help` | Mostra todos os comandos possíveis do `screen` | ## Parte III: Preparação do ambiente para o minicurso ### 1. Criação da estrutura de diretórios O projeto será executado em uma estrutura de diretórios que se divide em 4 pastas principais: - **`dados`**: Dados originais obtidos pelo processo de sequenciamento. Devem ser mantidos como um "backup" e nunca serem editados diretamente. - **`info`**: Alguns arquivos acessórios que serão pontualmente importantes para algumas análises. - **`analises`**: Resultados das tranformações dos dados serão localizados nas subpastas desse diretório. - **`scripts`**: Arquivos para automação do processamento dos dados. Daqui serão rodados a maior parte dos comandos (QG da análise!). Agora vamos criar as pastas: ```bash= # Criando as pastas principais: mkdir -p ~/projeto/{dados,info,analises,scripts} # Criando as subpastas das análises: mkdir -p ~/projeto/analises/{atropos,dada2,fastp,fastqc,flash,usearch/{findadapt,meanee,trimsize}} ``` ![](https://i.imgur.com/WcNRZAP.png) ### 2. "Copiando" dados Dados de sequenciamento são, geralmente, grandes em tamanho. Portanto, é comum a utilização de links simbólicos (similar aos atalhos do windows) para substituir cópias "sólidas" nos HDs. O comando `ln` permite a criação de atalhos que apontam para dados originais, servindo como um "marcador de posição" (placeholder) nas análises que virão. Entre na pasta do `projeto` e execute o comando abaixo: ```bash= # Sintaxe: ln -s <pasta/arquivo_de_origem> <pasta_de_destino> ln -s /srv/cibioinfo/projeto/data/*.fastq ~/projeto/dados/ ``` ### 3. Copiando scripts Processar uma ou duas bibliotecas pode ser simples e rápido. Mas quando lidamos com uma grande quantidade de amostras (ou a necessidade de repetir a mesma análise múltiplas vezes) é comum a utilização de scripts. Scripts são comandos em série associados com controles de fluxo (loops), capazes de executar a mesma função para cada arquivo (for) ou enquanto uma condição se manter verdadeira (while). Embora conheceremos e executaremos todos os programas necessários, as repetições serão feitas através de scripts. Então vamos copia-los para a pasta `scripts`. ```bash= cp /srv/cibioinfo/projeto/scripts/*sh ~/projeto/scripts/ ``` ### 4. Copiando informativos Alguns arquivos adicionais como contagens, metadados e os primers biológicos utilizados na obtenção dos amplicons. ```bash= cp /srv/cibioinfo/projeto/info/* ~/projeto/info/ ``` ### 5. Checklist Cheque se está tudo certo com o comando `tree` dentro da pasta do projeto: ```bash= cd ~/projeto tree ``` ![](https://i.imgur.com/u8MvKF4.jpg) ### 6. Conheça o delineamento experimental Na pasta `info` encontra-se o arquivo `metadados.txt`. Visualize-o para conhecer os fatores estudados nesse experimento. ```bash= less -S ~/projeto/info/metadados.txt ```