Linux shell 101

454

Francisco Pina Martins

06/10/2015

Presenter Notes

A shell e "porque é que eu preciso disto" ?

O que é:

  • Uma interface com o computador via "linha de comandos"
  • bash (ksh zsh fish dash etc...)
  • Acede-se através de um "terminal"
  • Apesar de tudo o rato também é útil na shell


Para que é que preciso dela?

  • Servidores HPC
  • Acesso remoto
  • Interface simples
  • Automatização e reprodutibilidade de processos

Não acreditam? Vejam.

Presenter Notes

O prompt

user@machine:~$

bash-4.1$

Prompt image

Presenter Notes

Navegação e orientação

Pensem na vossa shell como um gestor de ficheiros

  1. Onde é que eu estou?
  2. O que é que há aqui?
  3. Como é que me movimento?

$ pwd

$ ls

$ cd

Significado:

  1. print working directory
  2. list
  3. call directory

Presenter Notes

O vossos novos melhores amigos

man nome_do_programa

  • TODOS os programas builtin na shell (coreutils) têm um
  • Alguns outros também

$ man ls

$ whatis ls

Tecla "Tab"

  • Completa o que estão a escrever
  • Com uma ou duas "keypress"

Teclas ↓ e ↑

  • Navegam pela lista de comandos anteriores

Presenter Notes

Caminhos (path) e convenções

Os caminhos podem ser absolutos ou relativos

Ex. de caminhos absolutos

/etc/fstab

~/Downloads/ficheiro.txt

Ex. de caminhos relativos

Downloads/ficheiro.txt

./ficheiro.txt

Convenções comuns

  • ~ -> home dir, por ex. /home/francisco
  • ./ -> "Aqui"
  • ../ -> Um diretório abaixo
  • ../../ -> Dois diretórios abaixo
  • .ficheiro -> Ficheiro "escondido"

Presenter Notes

Navegação II

  1. Como é que eu crio um novo diretório (pasta)?
  2. Como é que eu apago um diretório?
  3. Como é que eu crio um novo ficheiro?
  4. Como é que eu copio um ficheiro?
  5. Como é que eu movo um ficheiro?
  6. Como é que eu apago um ficheiro?

$ mkdir dir_name

$ rmdir dir_name

$ touch file_name

$ cp origem destino

$ mv origem destino

$ rm file_name

Presenter Notes

Intervalo!

Presenter Notes

Permissões

Todos os ficheiros têm uma série de atributos.

drwxr-xr-x 5 francisco francisco 4096 Oct 22 00:24 Desktop

drwxr-xr-x 3 francisco cobig2 4096 2013-05-20 13:55 Databases

-rw-r--r-- 1 francisco francisco 4256 Sep 15 2011 Zkill.py

  • user
  • group
  • others

Valores

  • read (4)
  • write (2)
  • execute (1)

$ groups

Presenter Notes

Permissões II

Ok, e como é que eu mudo isto?

$ chown user:group ficheiro

$ chmod mode ficheiro

Usamos as somas dos valores...

5 - read&execute (4+1)

6 - read&write (4+2)

7 - read,write&execute (4+2+1)

... em trios de UGO (UserGroupOthers):

777 ou 755 ou 640

Ou um valor "verbal"

$ chmod +x ficheiro

$ chmod o-w ficheiro

Presenter Notes

Variáveis de ambiente e outros goodies

env vars

1 i="ola"
2 echo $i
3 echo $USER
4 echo $HOME

Aliases

1 alias ll=ls -l
2 ll

Para tornar permanente basta adicionar a ~/.bashrc

Unix pipe |

Podemos "pipar" o resultado de um comando para outro

1 du -sm *
2 du -sm *| sort -rk 2
3 du -sm *| sort -n

As possibilidades são ilimitadas!

Presenter Notes

$PATH

Correr programas

  • É boa prática colocar os programas numa localização no $PATH

$ echo $PATH

  • /bin
  • /usr/bin
  • /usr/local/bin
  • ~/bin

E se o programa não estiver no $PATH?

$ ~/cool_stuff/o_meu_programa

ou

$ cd ~/cool_stuff

$ ./o_meu_programa

Presenter Notes

$PATH II

Como é que eu mudo isto?

Lembram-se das env vars?

$ echo $PATH

$ PATH=$PATH:~/bin

$ echo $PATH

E para o tornar permanente?

Sim, acrescenta-se ao ~/.bashrc !

Presenter Notes

Mais sobre programas

Correr programas com argumentos

$ ls -l

Cada argumento é separado por um espaço

Normalmente dá-se mais que um argumento

$ cp origem destino

Exemplo de um argumento comum e extremamente importante

$ cp --help

Mensagem a reter: Os argumentos são separados por espaços e os espaços separam sempre argumentos!

E espaços em nomes de ficheiros? Como em "ficheiro com espacos.fasta".

Os caracteres especiais têm de ser "escapados":

$ cat ficheiro\ com\ espacos.fasta

Ou

$ cat "ficheiro com espacos.fasta"

Presenter Notes

Se estão a conseguir acompanhar até aqui - parabéns. Estão aptos a navegar a shell básica

Presenter Notes

Awesome starts here

Ferramentas mais avançadas.

grep sed cat less vim nano git

Exemplos:

$ cat ficheiro.fasta

$ grep ">" ficheiro.fasta

$ sed 's/>/+/g' ficheiro.fasta

$ less ficheiro.fasta

Usem a tecla "q" para sair do less

O vim dava sozinho para mais que uma so aula.

$ nano ficheiro.fasta

O git sozinho dava para uma cadeira.

Presenter Notes

Wildcards

São caracteres especias que têm um significado diferente do seu "literal"

  • "*" - qualquer caractere, qualquer número de vezes
  • "?" - qualquer caractere, uma vez

$ ls D*

$ cp *.fasta outro/diretorio/qualquer

Presenter Notes

Redirects

É usado para redirecionar o output de um programa para um ficheiro.

Pode ser feito de várias formas, mas as mais simples são estas:

  • $ ls -l > ficheiro.txt - cria um fichiero novo e escreve lá
  • $ ls -l >> ficheiro.txt - começa a escrever no final do ficheiro

É claro que podemos combinar diversas ferramentas para obter resultados interessantes...

  • $ cat ficheiro.fasta | grep ">" > nomes_das_sequencias.txt

Ou melhor ainda:

  • $ cat ficheiro.fasta |grep ">" | sed 's/>//g' > nomes_das_sequencias2.txt

O primeiro a descobrir o que isto faz ganha uma bolacha!

Presenter Notes

Acesso remoto

Meet ssh

Significa "secure shell"

$ ssh user@machine

Isto vai abrir um nova shell na máquina a que se ligaram

O ssh é um programa enorme, com inúmeras aplicações. Vejam a página do manual para terem uma ideia


Meet scp

É como uma fusão do ssh com o cp

Significa "secure copy"

$ scp user@machine:caminho/para/ficheiro caminho/local

Para uma solução mais completa, mas mais complexa, vejam o rsync

Presenter Notes

wget

O wget é uma ferramenta para efetuar downloads via linha de comandos

É extremamente útil num servidor remoto sem acesso a um browser

$ wget http://exemplo.com/ficheiro_fixe.txt

Pode ser usado para descarregar a internet inteira!

Uma alternativa popular é o curl:

$ wget http://odin.fc.ul.pt/bcg/exemplos/sequencias.fasta

$ curl http://odin.fc.ul.pt/bcg/exemplos/sequencias.fasta > sequencias.fasta

Presenter Notes

Descomprimir ficheiros

.zip

$ unzip ficheiro.zip

.tar.gz

$ tar xvfz ficheiro.tar.gz

.tar.bz2

$ tar xvfj ficheiro.tar.bz2

Para outros formatos - o google é vosso amigo.

Presenter Notes

A vossa vez!

Acedam ao servidor "odin.fc.ul.pt"

username: alunos

password: nitUkDagwi

  1. Criem um diretório com o vosso nome no "home dir"
  2. Descarreguem as sequencias de http://odin.fc.ul.pt/bcg/exemplos/sequencias.fasta
  3. Filtrem este ficheiro para obterem:
    • Uma lista com os Assession numbers das sequências mitocondriais
      • Quantas são?
    • Uma lista com os Assession numbers das sequências nucleares
      • Quantas são?
    • Cookie points extra para quem conseguir colocar as duas listas num só ficheiro em 2 colunas.

Presenter Notes

A vossa vez!

4.Descarregem a(s) lista(s) para o vosso PC.


  1. O ficheiro "test.structure" tem um problema com as labels. Os individuos identificados como "Arg" devem ser colocados na 4ª posição (a seguir aos "Cor" e antes dos "Haz"). Façam essa alteração.

Tudo o que necessitam está nestes slides

Usem os seguintes programas:


ssh, grep, sed, wc, (paste), scp, sort

Presenter Notes

Ladies and gentleman - start your terminals!

Presenter Notes