Table of Contents
|
GNU/Linux
O GNU/Linux é um sistema operacional livre baseado no sistema UNIX, foi construído com a colaboração de pessoas do mundo todo e é disponível sob a Licença Pública Geral GNU (assim como a Wikipédia).
Sistemas operacionais baseados em UNIX® são sistemas multiusuários e são amplamente utilizados como Servidores e Estações de Trabalho pois possuem ferramentas poderosas para o controle e gerenciamento do sistema e também manipulação de arquivos.
Guia básico do sistema
Uma das grandes vantagens de usar o GNU/Linux, é a gama de ferramentas nativas do sistema, a maioria delas herdada do sistema UNIX®. Se pode fazer praticamente tudo através de comandos simples ou de rotinas (scripts). Tarefas repetitivas e/ou complexas podem ser realizadas e automatizadas através destas rotinas. Estas rotinas são geralmente executadas manualmente por um terminal do sistema ou agendadas para ser executadas automaticamente num determinado horário.
Algumas das questões que surgem quando abrimos um Terminal
: Quem somos, Onde estamos, Para onde vamos e Qual é o sentido da vida? Bom, o terminal nos dá a resposta pelo menos para as três primeiras questões com os comandos whoami (Who am I?) , pwd (Print Working Directory) e cd (Change Directory):
guilherme@kolmogorov:~$ whoami
guilherme
guilherme@kolmogorov:~$ pwd
/home/guilherme
guilherme@kolmogorov:~$ cd Artigos
guilherme@kolmogorov:~$ pwd
/home/guilherme/Artigos
guilherme@kolmogorov:~$ cd ..
guilherme@kolmogorov:~$ pwd
/home/guilherme
Como vemos, a estrutura de diretórios se apresenta delimitada por uma barra / que indica a hierarquia dos diretórios. O diretório raíz (root) é a própria barra /. Para saber quais arquivos e diretórios se encontram no diretório atual de trabalho, usa-se o comando ls (List). Ao Digitarmos ls *.txt no terminal, são exibidos todos os arquivos cujos últimos quatro caracteres são .txt, digitando ls beatles*.mp3 são exibidos todos os aquivos que começam com beatles e terminam com .mp3 e assim por diante.
O comando mkdir (Make Directory) cria um novo diretório, por exemplo,
guilherme@kolmogorov:~$ mkdir Dados
guilherme@kolmogorov:~$ cd dados
-bash: cd: dados: No such file or directory
guilherme@kolmogorov:~$ cd Dados
guilherme@kolmogorov:~$ pwd
/home/guilherme/Dados
ah, é sensível à letras maiúsculas, minúsculas e acentos etc. Para copiar arquivos é simples, a sintaxe é cp <arquivo_origem> <arquivo_destino> caso estejam na mesma pasta, senão colocamos o caminho dos arquivos
guilherme@kolmogorov:~$ cp /home/guilherme/Calice.mp3 /mnt/sda4/musicas/MPB/
Para copiar todos os arquivos de uma determinada pasta para o atual diretório de trabalho pode-se fazer da seguinte forma
guilherme@kolmogorov:~$ cp -r /mnt/sda4/trabalho/* .
O atributo -r refere-se a recursividade, o seja, copia todos os arquivos e diretórios dentro da /mnt/sda4/trabalho/ para o diretório de trabalho que está indicado pelo ponto. Da mesma maneira funciona o comando mv (move) que também pode ser usado para renomear arquivos (caso o <arquivo_origem> e o <arquivo_destino> estejam no mesmo diretório).
guilherme@kolmogorov:~$ cd /mnt/sda4/musicas/MPB/
guilherme@kolmogorov:~$ mv Calice.mp3 Chico_Buarque-Calice.mp3
Mais informações sobre um determinado comando ou atributos dos comandos podem ser acessados pelo comando man (Manual)
guilherme@kolmogorov:~$ man cp
CP(1) User Commands
NAME
cp - copy files and directories
SYNOPSIS
cp [OPTION]... [-T] SOURCE DEST
cp [OPTION]... SOURCE... DIRECTORY
cp [OPTION]... -t DIRECTORY SOURCE...
DESCRIPTION
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
Mandatory arguments to long options are mandatory for short options too.
-a, --archive
same as -dpPR
--backup[=CONTROL]
make a backup of each existing destination file
lines 1-22
para navegar use as setas para baixo e para cima e para sair aperte a tecla Q.
Programando em Shell Script:
Mas por que digitar se eu posso fazer tudo clicando?
É claro que nenhuma dessas tarefas simples como criar diretórios, navegar entre diretórios e visualizar aquivos necessariamente precisa ser feita pelo terminal. Pode-se fazer usando o Ambiente Gráfico clicando aqui e ali como usualmente se faz. A questão que queremos abordar aqui é que, com ajuda do terminal, pode-se realizar tarefas repetitivas, complicadas e sujeitas a erros de maneira simples e rápida.
Podemos escrever uma determinada sequência de comandos e salvá-las dentro de um arquivo, e depois executá-las através de um interpretador chamado Shell. Essa rotina é geralmente chamada de script, neste caso de Shell Script. Além disso, podemos usar variáveis como qualquer outra linguagem de programação, vejamos dois exemplos simples:
guilherme@kolmogorov:~$ eu=$USER
guilherme@kolmogorov:~$ pasta=$(pwd)
guilherme@kolmogorov:~$ data=($(date))
guilherme@kolmogorov:~$ pasta=$(pwd)
guilherme@kolmogorov:~$ echo "Olá, eu sou o" $eu"."
Olá, eu sou o guilherme.
guilherme@kolmogorov:~$ echo "Eu estou no diretório" $pasta
Eu estou no diretório /home/guilherme
guilherme@kolmogorov:~$ echo "Agora são "${data[3]} "horas"
Agora são 16:36:33 horas
guilherme@kolmogorov:~$ echo "Hoje é dia" ${data[2]} "do mês" ${data[1]} "de" ${data[5]}
Hoje é dia 29 do mês Maio de 2008
Note que para acessar o valor de uma variável usa-se o símbolo $ junto à variável, e a variável USER não foi definida porque ela é uma variável do sistema. E agora um exemplo de como usar um laço.
guilherme@kolmogorov:~$ for i in 10 9 8 7 6 5 4 3 2 1 0; do echo $i; done
10
9
8
7
6
5
4
3
2
1
0
guilherme@kolmogorov:~$
[guilherme@kolmogorov ~]$ for pasta in $(ls -d */);do echo $pasta; done
amsn_received/
Desktop/
trabalho/
Exemplo 1
Por exemplo, vamos supor que temos que numa pasta, digamos na pasta /home/guilherme/dados, temos 99 arquivos para cada letra do alfabeto, para cada mês do ano e do ano 2001 até o ano 2007. Ou seja, 26 letras x 7 anos x 12 meses x 99 arquivos = 216216 arquivos. A nossa tarefa é separar os 99 arquivos em pastas correspondentes organizadas da seguinte forma: uma pasta para cada ano, dentro de cada ano uma pasta para cada mês e dentro de cada mês uma pasta para cada tipo. Ou seja, devemos criar 2184 pastas e copiar os 99 arquivos correspondentes para cada uma delas. Isso pode ser bastante torduoso, repetitivo e sujeito a erros. Para nossa sorte a nomenclatura segue uma ordem: <tipo>_<ano>_<mês>-<numeração> .txt.
Por exemplo, o comando ls a*1*jan_3* dentro da pasta de trabalho exibe
guilherme@kolmogorov:~$ ls a*1*jan_3*
a_2001_jan_30.txt a_2001_jan_31.txt a_2001_jan_32.txt a_2001_jan_32.txt
a_2001_jan_33.txt a_2001_jan_34.txt a_2001_jan_35.txt a_2001_jan_36.txt
a_2001_jan_37.txt a_2001_jan_38.txt a_2001_jan_39.txt
O uso de seqüências pode ser muito útil na nomeação e de arquivos ou pastas, a seguir alguns exemplos :
guilherme@kolmogorov:~$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
guilherme@kolmogorov:~$ echo {2005..1999}
2005 2004 2003 2002 2001 2000 1999
guilherme@kolmogorov:~$ echo {a..h}
a b c d e f g h
guilherme@kolmogorov:~$ echo {A..D}{a..d}
Aa Ab Ac Ad Ba Bb Bc Bd Ca Cb Cc Cd Da Db Dc Dd
Comandos básicos
pwd
Informa o atual diretório de trabalho. Por exemplo
$pwd
/home/guilherme
whoami
Informa a identidade do usuário
ls
Lista os arquivos e diretórios do atual diretório de trabalho
mkdir
Cria um novo diretório:
$mkdir nova_pasta
Alguns Comandos úteis
split
O comando split é usado para dividir determinado arquivo em pedaços menores, muito útil quando se tem dois disquetes e um arquivo de 2 Mb,por exemplo. Dividi-se o treco em dois pedaços de 1 Mb e manda pro baú.
Você tem duas opções ao dividir um arquivo: por número de linhas ounúmero de bytes. Para dividir por número de linhas, use a seguinte sintaxe:
$split --lines=1000 arquivo.txt
Isso irá gerar N arquivos com 1000 linhas cada. Se optar pelaquantidade de bytes, use:
$split --bytes=1073741824 backup.tar.gz
Que irá gerar N arquivos com 1 Mb cada.
chmod
O comando chmod muda as permissões de arquivos e pastas. Ele tem a flexibilidade de trabalhar com valores decimais de 0 a 7. Cada valor tem uma combinação de permissões pelos 3 grupos de caracteres:
0 : (nenhuma permissão)
1 : (somente execução)
2 : (somente escrita)
3 : (escrita e execução)
4 : (somente leitura)
5 : (leitura e execução)
6 : (leitura e escrita)
7 : (leitura, escrita e execução)
Utilitários de ompactação e descompactação
Para descompactar estes formatos de arquivos, os comandos são simples:
gzip:
gunzip nomedoarquivo
rar:
rar x nomedoarquivo
tar.gz:
tar -vzxf nomedoarquivo
tar.bz2:
tar -vxjpf nomedoarquivo
Gravar CD/DVD por linha de comando
Criar uma imagem .iso
$mkisofs -r -J -o nome_do_arquivo.iso /diretorio_de_origem/
Onde:
- mkisofs: é o comando que chama o programa.
- -r: permite que qualquer cliente possa ler o conteúdo do arquivo. Evita problemas ao tentar ler o arquivo no Windows.
- -J: mais uma opção para manter compatibilidade como Windows. Ativa as extensões Joilet.
- -o: especifica o nome do arquivo ISO que será criado.
- nome_do_arquivo.iso: o nome do arquivo propriamente dito. Não se esqueça de sempre incluir a extensão .iso. O arquivo é sempre gravado no diretório corrente.
- /diretório_de_origem/: o diretório onde estão os arquivos que serão incluídos na imagem. Você pode especificar vários diretórios separados por espaços, como em: /home/morimoto/livros/ /home/morimoto/Mail/.
Para reconhecer onde esta o CD
$cdrecord -scanbus dev=/dev/hdd
Para gravar a imagem de CD
$cdrecord -v -fs=16M speed=8 dev=0,0,0 -data nome_da_imagem.iso
Para apagar
$cdrecord dev=/dev/hdd:1,1,0 speed=4k blank=fast
Para gravar uma imagem de DVD
$growisofs -dvd-compat -Z /dev/cdrom=nova_da_imagem.iso
Wget
geral:
wget http://www.qualquercoisa,com,br
recursivamente
wget -r
continuar
wget -c
não copiar os diretórios pais
wget -np
copiar um determinado tipo de arquivo
wget -A ".jpg"
ImageMagik (convert)
AWK
Shell Scripts Úteis
Converter arquivo texto ISO8859_1 em UTF8
ls *.tex | \
while read arq
do
echo $arq
iconv --from-code=ISO-8859-1 --to-code=UTF-8 $arq > foo
mv foo $arq
done
Cuidado Rodar o script uma única vez!
Converter um formato de Vídeo em outro
#!\bin\bash
## convert_video.sh
mencoder -oac mp3lame -lameopts cbr:br=64:vol=2 -srate 22050 -ovc xvid -sws 1 -xvidencopts bitrate=500:max_key_interval=120:vhq=4 -ofps 30 -vf scale=640:360 $1 -o $2
por exemplo
./convert_video.sh filme.rmvb filme.avi
Backup Arquivos e pastas
#!/bin/bash
PWD=($(pwd))
cd $PWD
data=($(date +%Y%b%d_%H%M))
file=${1%/}
tar cvzf $file"_"$data".tar.gz" $file
cd -