Comandos Unix/Linux

De Física Computacional
Ir para: navegação, pesquisa

SUGESTÃO: a melhor maneira de aprender é testar cada um no terminal de comandos.

A esquerda de <- o comando, a direita de <- o que ele faz. Entre aspas indicamos o argumento (são comandos que precisam dele), mas as aspas devem ser omitidas na prática.


Os primeiros

date                    <- dá data e hora
who                     <- responde quem está logado
finger  "nome"          <- dá informações do usuário "nome"
ping    "máquina"       <- informa se "máquina" está acessível na rede
clear                   <- limpa a tela
locate  "file"          <- mostra todos os arquivos do disco que tem "file" como parte do nome
which   "comando"       <- responde onde (em que diretório) se encontra "comando"
du  -h  "dir"           <- lista o espaço ocupado pelos diretórios abaixo do "dir". 
                           O -h é uma opção para mostrar o resultado em unidades humanas(bytes)                   

Exemplos com argumentos (alguns argumentos só funcionam no lief):

finger alex
ping pequim
locate firefox
which gnuplot
du -h /home


Básicos

ls             <- listagem do diretório
ls -l          <- idem com mais informação
ls --color     <- idem com esquema de cores 
ls -a          <- mostra arquivos ocultos do sistema (os .*)

A seguir se o comando precisa de argumento colocamos um nome genérico (ex: dir, file, etc) e sem aspas

 
mkdir  dir          <- cria o diretório  dir
cd     dir          <- troca para o diretório  dir
pwd                 <- responde onde você está (qual diretório)
cd    ..            <- volta ao diretório que está em cima
cd    ~             <- vai para o nosso diretório de partida: /home/eu
rmdir dir           <- apaga o diretório (se ele estiver vazio)  dir

cp    file1 file2      <- copia o arquivo file1 no file2
rm    file             <- apaga o file
rm    *                <- PERIGO!  Apaga tudo o que está no diretório,
rm    *.dat            <- que apaga só os .dat
rm -i *                <- apaga tudo no diretório atual, mas perguntando antes 
cp   file1 dir/file2   <- copia file1 no file2 no diretório dir 
mv   file1 file2       <- troca o nome de file1 para file2
mv    file  dir/       <- coloca o file no subdiretório dir

cat   file             <- mostra o conteúdo de file
more  file             <- também, mas página por página

O more pode ser usado para mostrar qualquer coisa na tela, uma página por vez.

Exemplo: se ls -l dá muita informação, pode-se usar more. Aí aparece a

primeira página e espera por mais (dar <space> para continuar, <enter>

avança uma linha, para sair ou <ctrl>+<c> para interromper).

ls -l | more <- dá o diretório atual página x página

Sobre arquivos

sort  file        <- ordena alfabeticamente o arquivo file
wc    file        <- conta as linhas, palavras e bytes  do arquivo file
tail  file        <- mostra as últimas 10 linhas de file
head  file        <- mostra as primeiras 10 linhas de file
diff  file file1  <- compara e mostra as diferenças entre file1 e file2

split file        <- separa file em pedaços iguais
lpr   file        <- imprime file


Editores

O emacs fornece um ambiente de edição adequado ao tipo de arquivo (manual mínimo em html ou nos formatos pdf e ps em ftp://lief.if.ufrgs.br/ftp/pub/emacs/).

Existem editores mais simples como jed, versão reduzida do emacs Ou o gedit, editor gráfico do desktop gnome. Isso significa que, navegando nos arquivos, ao clicar em um, o mesmo será editado com o gedit. Desktop é o nome do sistema gerenciador de janelas, que faz a interface gráfica amigável do sistema operacional.

O vi pode resultar pouco amigável, porém é o único que não falta em nenhum sistema que rode Linux ou Unix

vi               <- chama o vi e depois ...
a                <- para inserir texto 
<esc>            <- para desativar a função
No vi você não pode começar a digitar sem antes digitar "a" 
/palavra <enter> <- para procurar palavra
x                <- para apagar por letra
dd               <- apaga uma linha
:w               <- para salvar
:q               <- para sair
:q!              <- para sair sem salvar
:wq              <- para sair salvando

Um dos principais problemas encontrados por usuários do vi é descobrir como se faz para substituir palavras no texto. Isto é feito com as mesmas expressões regulares válidas no editor sed. Assim para substituir a palavra word1 por word2 se faz

:s/word1/word2/g   <- substitui word1 por word2 (uma por vez)
:%s/word1/word2/g  <- substitui todas as ocorrencias de word1 por word2

Mais comandos

write colega  <- estabelece comunicação on-line com o colega, se estiver logado na mesma máquina
man   comando <- dá informação a respeito do comando
import nome_arq1.jpg  <-  importa da tela uma imagem selecionada (com o mouse) e gera um arquivo com nome "nome_arq1" e extensão jpg
import nome_arq2.ps   <-  importa da tela uma imagem selecionada (com o mouse) e gera um arquivo com nome "nome_arq2" e extensão ps
convert arq.jpg arq.ps <- converte o arquivo "arq" do formato "jpg" para "ps"

Comandos especiais

grep

grep  kk   file

verifica se a palvra kk está no arquivo file
Muito útil quando se procura um arquivo perdido com um determinado assunto.
Exemplo: você não sabe qual o arquivo com o relatório sobre "decaimento".
Então digita:

grep  decai  *

e vai mostrar os arquivos (se tiver algum), contendo a palavra decai.
Se você procura duas palavras juntas deve usar aspas. Por exemplo:

grep  "pi ="  *.tex

mostra os arquivos tex contendo pi =

sed

sed 's/word1/word2/g' file

troca word1 por word2 no arquivo file. O resultado vai para a tela

sed 's/word1/word2/g' file > file2

faz o mesmo salvando o resultado no arquivo file2camante

awk

awk é um processador de linhas de arquivo com muita funcionalidade. Ele opera assim: lei uma a uma as linhas de um arquivo (pp por exemplo) e dessas linhas podemos decidir o que imprimir e quando imprimir ouate imprimir as linhas modificadas (por uma opração matemática ou por substituição de palavras) A melhor forma de entender como funciona como sempre é através de exemplos:

awk '{print $1, $4}' notas

neste exemplo o awk imprime a primeira ($1) e quarta($4) colunas de cada linha do arquivo notas Se o conteúdo desse arquivo são as notas de uma turma:

juan    4 8  6
pedro   7 4 10
mateus  7 8  5
felipe  8 3  7

depois de executar a linha da awk acima teremos

juan 6
pedro 10
mateus 5
felipe 7

Aparece aqui um conceito importante da linguagem de comandos: as variáveis, neste caso $1, $2 indicam a primeira, segunda, etc palavras (podem ser números ou combinações dos dois). Como sabe o awk onde termina uma e começa a outra? Pelo espaço em branco (pode ser um ou mais espaços) que definem o fim de uma e começo da seguinte.

Outro detalhe, compare as duas linhas quase idênticas:

awk '{print $1, $3, $4}' notas
awk '{print $1, $3  $4}' notas

A vírgula (,) entre as variáveis ($3 e $4) faz toda a diferença!

Mas este, se bem é muito prático é apenas uma amostra do que awk pode fazer Ele pode filtrar de acordo a critérios. Por exemplo para imprimir as notas dos alunos que tiraram mais de 7 na primeira:

awk '{ if ($2 >= 7) print $1, $2, $3, $4}' notas

Vários

echo alo, alo      <- é um eco mesmo, devolve o que se manda para ele
cal                <- mostra um calendário, teste agora e verá
cal 2000           <- aqui terá o ano inteiro

Sessões remotas e transferência de arquivos

ssh  usuario@maquina.dominio                                <- programa para entrar em máquina e fazer sessão remota
scp  usuario@máquina.dominio:arquivo-remoto arquivo-local   <- comunicação para troca de arquivos

Monitoramento de processos

ps x                  <- mostra seus processos, incluindo ssh, etc
ps aux                <- o mesmo do sistema todo
top                   <- o mesmo com mais informação
kill -9               <- mata o processo que não está dando certo

Compactado e armazenado de arquivos

gzip file                                <- comprime os arquivos
tar  cvf todos_meus_dados.tar  *.dat     <- arquiva um conjunto de arquivos (no exemplo todos os .dat)
tar  cvfz todos_meus_dados.tgz *.dat     <- faz o mesmo criando um arquivo ja comprimido
tar  xvf todos_meus_dados.tar            <- desarquiva (explode) o conjunto de dados
tar  xvfz todos_meus_dados.tgz           <- faz o mesmo de um arquivo comprimido

Mais

chmod +x  file            <- dá a file permissão para ser executado
ln -s file dir/           <- cria um atalho (link) de file no diretório dir/
alias                     <- mostra os alias que estão definidos
alias dir='ls -l --color' <- define um alias

Caracteres de significado especial no UNIX

> redirecionando a saída padrão (tela)
< redirecionando a entrada padrão (teclado)
>> adicionando a saída padrão à um arquivo existente
|
pipe (duto) passa a saída padrão de um comando para o próximo
& coloca o programa em "background" devolvendo controle do terminal
$ para referir-se a variáveis
* é o curinga para referência de nomes de arquivos

Programas de uso corrente

(requerem de sessão gráfica)

xterm      <- abre um terminal de comandos
gv  exemplo.ps    <- visualiza um arquivo postscript (ex: exemplo.ps)

evince ou okular  <- visualizador de arquivos gráficos: tif, gif, jpg, etc
xfig              <- programa para fazer desenhos simples (tipo paintbrush do win)
gimp              <- programa para tratamento de imagens

iceweasel, firefox ou chrome  <- navegadorores de páginas web

Discutidos em capítulos separados

  • gnuplot, xmgrace: para fazer gráficos
  • LaTex: para processar texto com qualidade de publicação
  • gcc, f77 ou f90: compiladores C e FORTRAN