Como sobreviver ao

Linux

Criado por Rafael Ruggiero

Por que eu deveria me importar?

  1. Porque você não tem opção, se for trabalhar com pesquisa.
  2. Ambiente de desenvolvimento superior.
  3. Mais rápido.
  4. Mais seguro.
  5. Customizável.
  6. Software livre.

Desculpas comuns para não usar

“Não tem jogo para Linux”

“Não funciona <algo> no meu laptop”

Tente instalar os drivers mais atuais!!!

“É difícil”

Só no começo.

Distribuições

Recomendo

  • Debian: quase não tem bugs, comunidade ativa e repositório amplo.
  • Xubuntu: polido e sem o bloatware do Ubuntu.
  • Arch Linux: minimalista, com repositório próprio e tem o melhor wiki de todos.
  • Linux Mint (?): tá na moda.

NÃO RECOMENDO

  • Ubuntu

Para explorar: DistroWatch

Ambientes de trabalho

GNOME

O mais popular de todos.

Xfce

Leve e funcional.

KDE

Bonito e pesado.

LXDE

Roda até no PC da Xuxa.

Awesomewm/Evilwm/Fluxbox/Outros

Extremamente leves, mas você precisa saber o que está fazendo.

Programas

Windows Linux
Navegador Firefox, Chrome Firefox, Chrome
Office Microsoft Office LibreOffice
PDF Acrobat Reader Evince, Okular, Zathura
Mensagem Skype Skype, Pidgin
Mídia Windows Media Player, VLC Mplayer, mpv, VLC
Imagens Windows Photo Viewer Ristretto, Feh
Windows Linux
Edição de imagem Photoshop, GIMP GIMP
Editor de texto Notepad Gedit, Vim, Emacs, Nano
E-mail Outlook Thunderbird
Torrent µTorrent Deluge, Transmission, Rtorrent
Paint Microsoft Paint Pinta, KolourPaint

Instalação

Resultado final de um dual boot de Windows/Linux:

Liberando espaço para o Linux

Note que 1 GB = 1024 MB. Recomendo liberar ao menos 20 GB.

Preparando a mídia

  1. Baixe a imagem .iso da sua distribuição.
  2. Grave um CD ou DVD usando seu programa preferido, ou faça um live USB com o UNetbootin.

Bootando a mídia

  1. Coloque o disco gravado no drive de CD ou conecte o live USB.
  2. Reinicie o sistema e abra a BIOS (em geral apertando Delete logo que ligar).
  3. Procure a seção 'Boot', mova a sua mídia para o primeiro lugar e aperte F10 para salvar e reiniciar.
  4. Espere o instalador iniciar.

Next, next, next...

Particionamento

Escolha particionamento manual, e recomendo criar 3 partições: uma de ao menos 20 GB para a /, outra de uns 2 GB para a swap e outra com o espaço que sobrar para a /home/.

Next, next, next...

Voilà!

Comandos

Manipulação de arquivos e pastas

ls                       mostra o conteúdo da pasta atual
cd PASTA                 entra em uma pasta
pwd                      mostra onde você está
mkdir PASTA              cria uma pasta
rmdir PASTA              apaga uma pasta vazia
cp ARQUIVO DESTINO       copia um arquivo
mv ARQUIVO DESTINO       move para outro lugar ou renomeia um arquivo
rm ARQUIVO               apaga um arquivo
rm -r PASTA              apaga uma pasta com coisas dentro
du -h ALGO               diz o tamanho de um arquivo ou pasta
file ARQUIVO             descreve o seu arquivo
cat ARQUIVO              vomita o conteúdo do arquivo no terminal
less ARQUIVO             para ler arquivos podendo subir/descer
ln ARQUIVO DESTINO       cria um link (hard) para um arquivo
ln -s ARQUIVO DESTINO    cria um link (simbólico) para um arquivo
find LUGAR -name NOME    encontra arquivos com um dado nome em um dado lugar
chown NOME:NOME ARQUIVO  muda o dono:grupo de um arquivo
chmod XXX arquivo        muda as permissões de um arquivo
diff ARQUIVO1 ARQUIVO2   mostra as diferenças entre dois arquivos

Processamento de texto

tac                      igual ao cat só que de trás pra frente
grep PADRÃO              pega as linhas que contenham determinado padrão
sed 's/ANTES/DEPOIS/g'   troca todas as ocorrências de ANTES por DEPOIS
cut -d ' ' -f N          pega a N-ésima coluna, delimitando por espaços
sort                     ordena as linhas
wc -[lc]                 conta as linhas (-l) ou caracteres (-c)
uniq                     pega as linhas únicas
head                     mostra as primeiras linhas
tail                     mostra as últimas linhas
fmt                      ajeita as colunas, útil para formatar texto
awk                      processamento de texto avançado, tutorial aqui

Podem ser usados ou colocando o nome do arquivo no fim do comando, ou com pipes (vou introduzir daqui a pouco)

Compactação/descompactação

Descompactar:
unzip ARQUIVO       arquivos .zip
unrar x ARQUIVO     arquivos .rar
tar -xzf ARQUIVO    arquivos .tar.gz
tar -xjf ARQUIVO    arquivos .tar.bz2
tar -xJf ARQUIVO    arquivos .tar.xz
gunzip ARQUIVO      arquivos .gz

Compactar:
zip ARQUIVO.zip ORIGEM
rar a ARQUIVO.rar ORIGEM
tar -czf ARQUIVO.tar.gz ORIGEM
tar -cjf ARQUIVO.tar.bz2 ORIGEM
tar -cJf ARQUIVO.tar.xz ORIGEM
gzip ORIGEM

Coisas sortidas

sudo COMANDO                 executar comando como root
su                           logar como root
reboot                       reiniciar
poweroff                     desligar
mount /dev/algo PASTAVAZIA   monta uma dada partição em uma pasta vazia
umount /dev/algo             desmonta uma partição
echo TEXTO                   só mostra o texto na tela
date                         mostra a data e hora
apropos PADRÃO               procura programas que tenham PADRÃO em sua descrição
sleep N                      dorme por N segundos
w                            mostra as pessoas logadas no sistema
last                         mostra as últimas pessoas a terem logado
uptime                       mostra há quanto tempo o sistema está ligado
time COMANDO                 roda um comando medindo seu tempo de execução
top                          monitor em tempo real de processos
watch COMANDO                executa um dado comando a cada alguns segundos
convert img.algo img.outro   converte uma imagem, por exemplo jpg->png
df -h                        mostra as partições montadas e o uso delas
fdisk -l                     mostra todas as partições
exit                         fecha o terminal
history                      mostra o histórico de comandos do terminal
passwd                       muda a senha
free -m                      mostra quanta memória o sistema está usando

Controle de fluxo

Acho que o mais fácil aqui é dar exemplos.

if [ -a a.txt ]; then echo "a.txt existe"; fi    referência para uso do if
for i in {1..50}; do echo $i; done               iterando sobre valores
for i in mp3 mp4; do ls *.$i; done               iterando sobre nomes
while [ $(date +%d/%m) != "25/12" ]; do sleep 1h; done; echo "Feliz natal!"
    verifica de hora em hora se já é natal

Rede

ping SERVIDOR                        pinga um servidor (ctrl+C para matar o processo)
ssh USER@SERVIDOR                    login remoto encriptado em um servidor
scp USER@SERVIDOR:ORIGEM DESTINO     copiar arquivos de um servidor
rsync USER@SERVIDOR:ORIGEM DESTINO   copiar apenas arquivos alterados de um servidor
wget SITE                            baixa uma página ou arquivo por HTTP
elinks                               navegador para terminal

Exemplos:
ssh jose@proccm.redealuno.usp.br
ssh jose@fleming.cecm.usp.br
scp jose@proccm.redealuno.usp.br:~/meuarquivo.txt .
rsync -az jose@proccm.redealuno.usp.br:~/pastaquemuda .

Processos

ps aux             mostra os processos em execução 
pgrep PROGRAMA     mostra os IDs dos processos de um dado programa
kill PID           mata um processo
kill -9 PID        mata um processo (versão overkill)
killall PROGRAMA   mata todos os processos de um dado programa

Gerenciamento de pacotes (Debian e derivados)

aptitude install PROGRAMA    instala um programa
apt-get install PROGRAMA     mesma coisa
dpkg -i programa.deb         instala um programa a partir de um arquivo .deb
apt-cache search PADRÃO      procura programas que tenham PADRÃO na descrição

Sistema

Pipes e redirecionamentos

A saída de um comando pode ser redirecionada para um arquivo desse jeito:

COMANDO > saida.txt
    Exemplo: grep 'batata' frutas.txt > batata.txt

E um comando pode receber um arquivo como entrada desse jeito:

COMANDO < entrada.txt
    Exemplo: grep 'batata' < frutas.txt

O mais interessante é que você pode redirecionar a saída de um comando para a entrada de outro:

COMANDO1 | COMANDO2
    Exemplo: cat frutas.txt | grep 'batata' | sed 's/batata/repolho/g' > repolho.txt

Dá para realizar tarefas bastante complexas com isso!

Apelidos no terminal

~              sua home
.              o diretório atual
..             o diretório acima do atual
-              o diretório onde você estava antes

Wildcards no terminal

?   um caractere qualquer.
      Exemplo: ls ?.txt mostraria arquivos como a.txt, b.txt, 0.txt, etc

*   qualquer coisa.
      Exemplo: ls *.txt mostraria qualquer arquivo terminado em .txt

[]  especifica um intervalo.
      Exemplo: [0-9] bate com qualquer número de 0 a 9, [a-z] com qualquer
      letra minúscula, e [xyz] com qualquer letra entre x, y e z.

[!] igual ao anterior, só que negação. Exemplo: [!a-z].

{}  uma coisa ou outra.
      Exemplo: ls *.{txt,mp3} mostraria todos os arquivos .mp3 ou .txt no
      diretório atual.

Expressões regulares

Todo um assunto. Só vou deixar aqui um tutorial.

Permissões e propriedade

Arquivos no Linux têm dono e permissões. Por exemplo:

$ ls -l index.html
-rw-r--r-- 1 rafael rafael 30750 Nov  5 23:48 index.html

Isso diz que index.html pertence ao usuário 'rafael' e ao grupo 'rafael';
que o dono do arquivo pode ler (r) e escrever (w) esse arquivo (rw-);
que ele só pode ser lido pelo seu grupo (r--); e que ele só pode ser
lido pelos demais usuários do sistema (r--). A terceira letra seria
'x', de executável.

Codificando r=4, w=2 e x=1, a permissão rw-r--r-- torna-se 644, e poderia
ser alterada com o chmod:

$ chmod 755 index.html
$ ls -l index.html
-rwxr-xr-x 1 rafael rafael 31334 Nov  5 23:54 index.html

O dono pode ser mudado com o comando chown:
$ sudo chown root:root index.html
-rwxr-xr-x 1 root root 31334 Nov  5 23:54 index.html

Extensões

Só servem para você. O sistema em geral não as usa. Você pode chamar um pdf de paper.mp3 que ninguém vai reclamar.

Partições

Elas são representadas por arquivos, que ficam em /dev/. /dev/sda1 é a partição '1' do disco 'a', /dev/sdb2 a partição '2' do disco 'b', etc.

Lembrando que elas podem ser montadas/desmontadas com os comandos mount/umount.

Pastas do sistema

Tem várias, mas o mais importante para o dia a dia é saber que:

/home/ é onde ficam as homes dos usuários
/etc/ é onde ficam os arquivos de configurações dos programas
/root/ é a home do root
/media/ é onde são montados automaticamente dispositivos removíveis

Uma descrição das demais pastas pode ser encontrada aqui.

Scripts

Você pode escrever uma sequência qualquer de comandos em um arquivo de texto, um por linha, e executá-lo como um script:

bash meus_comandos.txt

Execução automática de comandos

  • at: comando para agendar a execução de um comando/script em uma data/hora específica.
  • crontab -e: para agendar execução periódica de um comando/script.

Fim

Linux se aprende usando!