GmailDrive
Umas das grandes vantagens do Gmail, al?m do espa?o de 1GB para armazenamento de e-mails, agora voc? pode armazenar arquivos.
Est? disponiv?l para plataformas Windows e Gnu/Linux.
Em nossos mirrors voc? j? encontra para download:
Umas das grandes vantagens do Gmail, al?m do espa?o de 1GB para armazenamento de e-mails, agora voc? pode armazenar arquivos.
Est? disponiv?l para plataformas Windows e Gnu/Linux.
Em nossos mirrors voc? j? encontra para download:
Para instalar o SoulSeek em sua m?quina com Debian Gnu/Linux siga os seguintes passos.
echo “#Mirror SoulSeek” >> /etc/apt/sources.list
echo “deb http://www.arrakis.es/~frigola/pyslsk wooky/” >> /etc/apt/sources.list
apt-get update
apt-get install pyslsk
4JHAN-3R3AP-X2H4Q-4KJVH, name: Cr4ck3d bY d4rk5t4r, company: Cr4ck3d bY d4rk5t4r
Configurando sistema de LVM ( Logical Managing Volumes).
Considera??es inicicais
Sistema Operacional: Debian Gnu/Linux (Woody) 3.0 R2
Kernel: 2.4.28
M?dulos do Kernel utilizados: lvm-mod, md e linear
Hardware utilizado para o LVM: 4 discos rig?dos de 80 GB - Ultra-ATA modelo Seagate Barracuda.
Disponibilidade das parti??es de disco no sistema:
Disco 1:
/dev/hda1 /boot
/dev/hda2 /swap
/dev/hda3 /
/dev/hda4 LVM
Disco 2:
/dev/hdb1 LVM
Disco3:
/dev/hdc1 LVM
Disco4:
/dev/hdd1 LVM
Agora estaremos dividindo em etapas todos processos para cria??o da LVM.
1) Preparando o sistema operacional para LVM.
Todos os m?dulos necess?rios para cria??o de um sistema de LVM, j? se encontram no Kernel do Gnu/Linux.
Na distribui??o Debian Gnu/Linux podemos manipular estes m?dulos atrav?s de um aplicativo chamado modconf, com ele iremos instalar os m?dulos necess?rios para que nosso projeto de continuidade, para isso entre no terminal e digite:
#modconf
Entre na sess?o kernel/drivers/md
selecione lvm-mod e pressione quatro vezes a tecla “Return” para poder instalar os m?dulos, siga este mesmo exemplo e instale os m?dulos md e linear que ficam na mesma sess?o.
Os pacotes necess?rios para o projeto de cria??o do LVM ser?o o lvm10 e lvm-common, para isso usaremos o aplicativo Apt-Get para instalar os pacotes:
#apt-get install lvm10 e lvm-common
Caso voc? n?o encontre alguns dos pacotes mencionados acima, adicione em seu /etc/apt/sources.list o Mirror:
deb http://mirrors.kernel.org/debian/ stable main
deb-src http://mirrors.kernel.org/debian/ stable main
e depois use o apt-get update para atualizar o banco de dados do Apt.
2) Particionando os discos no sistema
Levando em considera??o o aspecto de hardware mostrado no in?cio deste artigo, iremos trabalhar com as parti??es que deveram ser configuradas para LVM, ou seja: /dev/hda4, /dev/hdb1, /dev/hdc1 e /dev/hdd1.
Para isso usaremos o aplicativo fdisk para particionar os discos, entre no terminal e digite
#fdisk /dev/hda
digite “n” para nova parti??o, na sequ?ncia digite “p” para parti??o prim?ria e “4″ para o partition number (n?mero da parti??o).
Agora devemos mudar o tipo de parti??o que criamos, para isso ainda no fdisk digite “t” depois “4″ para o partition number, ser? solicitado o Hex code ( c?digo hexa), para isso digite “8e” que refere-se ao id da parti??o LVM.
Para gravar todas as altera??es no disco devemos ent?o digitar “w” e depois “q” para sair.
Seguiremos o exemplo para particionamento dos outros discos, levando em considera??o a mudan?a do partition number nos discos.
3) Criando os grupos fis?cos para o LVM:
Agora que j? particionamos nossos discos, iremos agrupar as parti??es fis?cas de nosso LVM, para isso usaremos o aplicativo pvcreate:
#pvcreate /dev/hda4 /dev/hdb1
#pvcreate /dev/hdc1 /dev/hdd1
4) Criando os volumes para o LVM
Tendo os discos j? agrupados, agora iremos criar os volumes dos grupos, para isso usaremos o comando vgcreate
#vgcreate lvm_ab /dev/hda4 /dev/hdb1
#vgcreate lvm_cd /dev/hdc1 /dev/hdd1
Os nomes “lvm_ab” e “lvm_cd” respectivamente podem ser alterados para os de sua escolha, neste caso optei por identificar os volumes pelas associa??es dos dispositivos agrupados com seus id’s do tipo: HDA e HDB com isso o nome “lvm_ab” .
4) Verificando informa??es sobre os volumes criados:
Temos agora que verificar a disponibilidade do tamanho m?ximo para o LVM, para isso usaremos o comando vgdisplay
#vgdisplay
*procure pela linha VG Size, nela est? descrito o tamanho m?ximo a ser usador para os volumes, em nosso exemplo a sa?da do comando ficaria:
VG Size 152.01 GB
5) Criando os volumes l?gicos:
Agora que j? verificamos a disponibilidade m?xima dos volumes, iremos criar os volumes l?gicos seguindo o valor do VG Size:
#lvcreate -L150G -nvol1 lvm_ab
#lvcreate -L150G -nvol1 lvm_cd
Explicando as flags do lvcreate:
-L: tamanho do volume l?gico
-n: nome para o volume
6) Criando o sistema de arquivos no volume criados
Agora que j? temos um volume l?gico criado, devemos formatar os mesmos, no meu caso resolvi usar o File System EXT3.
Para formatar para EXT3 usaremos o aplicativo Mke2fs, para isso entre no terminal e digite
#mke2fs -j -b 4096 /dev/lvm_ab/vol1
#mke2fs -j -b 4096 /dev/lvm_cd/vol1
Explicando as flags do mke2fs:
-j : Cria o file system usando o EXT3 como padr?o.
-b: “Block Size” tamanho do bloco
7) Disponibilizando os volumes na inicializa??o do sistema.
Para disponibilizarmos os volumes na inicializa??o do sistema devemos informar no arquivo /etc/fstab os volumes LVM.
Antes de editar o arquivo crie os pontos de montagem para os volumes, em meu exemplo usarei:
mkdir -p /mnt/LVM/lvm_ab ; mkdir -p /mnt/LVM/lvm_cd
na sequ?ncia, fa?a um backup do arquivo /etc/fstab como seguran?a e depois edite com o arquivo usando seu editor preferido:
#vi /etc/fstab
*adicione as linhas:
/dev/lvm_ab/vol1 /mnt/LVM/lvm_ab ext3 defaults 0 1
/dev/lvm_cd/vol1 /mnt/LVM/lvm_cd ext3 defaults 0 1
Tendo executado todos os passos com sucesso seu sistema de LVM estar? pronta para produ??o.
Mais informa??es sobre LVM podem ser encontradas em:
http://fsbox.org/
http://www.freelinuxcdrom.com/LDP/HOWTO/LVM-HOWTO/initscriptdebian.html
http://elibrary.fultus.com/technical/index.jsp?topic=/com.fultus.linux.howtos/howtos/LVM-HOWTO/cover.html
Qualquer d?vida entrem em contato: jaccon@gmail.com
At? a pr?xima.
Caso voc? um dia tenha este problema voc? entra com a senha do usu?rio comun e o sistema pede para aguardar alguns minutos e depois diz que o tempo para login este esgotado, verifique se exite um arquivo chamado
/etc/nologin e /etc/nologin.boot, caso tenha remova os dois arquivos.
Desta forma voc? poder? logar normalmente.
Nesta entrevista ao site CRN, Torvalds mostra suas id?ias em uma entrevista muito interessante.
http://www.crn.com/sections/special/top25/top25_03.jhtml?ArticleID=52601051
As vezes temos problemas para desmontar um disposito, que um umount n?o resolve.
Exemplo pr?tico disto ? quando montamos um volume de um servidor NFS por problemas o volume ca? ficando o disco montado na m?quina.
Para identificar os processos em andamento deste volume montado use o comando FUSER.
ex:
#fuser -mv /mnt/NFS
a sa?da deste comando seria algo como
USER PID COMMAND
/mnt/NFS eu 193 mount.nfs
Colabora??o: Ederson Leme Corr?a
Quem n?o gosta de um desktop bonito ?
Bom, eu pelo menos gosto. Acho que d? mais ?nimo pra ficar
horas em frente ao micro. E nessa minha busca por tornar meu
desktop mais atraente aos olhos, acabei por encontrar v?rios
temas para o GDM (Gerenciador de Login para o Gnome) e como
um bom indeciso que sou, fiquei na d?vida de qual usar.
Ent?o pensei: Por qu? n?o usar todos ?
Mas ficar trocando manualmente ? muito chato e
“trabalhoso”, ent?o ap?s algumas consultas ao Or?culo
(http://www.google.com.br), acabei por encontrar um script que
ap?s pequenas altera??es ficou perfeito para o meu prop?sito.
Chega de papo, e vamos ao que interessa: O script:
#!/bin/bash
#
# Description: This script modifies the GDM theme for other randomly chosen.
# Description: Based in script posted by va7dav in http://gnome-hacks.jodrell.net/hacks.html?id=17
#
# Autor: Ederson L. Correa
# Date: 04 November 2004
# File: /etc/rc.d/rc.gdmrandom
# Last update: 04/11/2004
#
THEME_DIR=/usr/share/gdm/themes
THEMES=`ls -1 “$THEME_DIR”`
N=`echo $THEMES | wc -w`
((N=RANDOM%N+1))
# The -i.old option creates a backup copy called
# gdm.conf.old
sed -i.old s/GraphicalTheme=.*/GraphicalTheme=`echo $THEMES | cut -d ‘ ‘ -f $N`/ /etc/X11/gdm/gdm.conf
O que esse script faz ? escolher “aleatoriamente” um dentre os
temas disponiveis no diret?rio configurado em THEME_DIR. Assim,
cada vez que esse script for executado (como root) o tema do
GDM ser? trocado.
Voc? pode colocar esse script para rodar no cron de tempos em
tempos, ou na hora do boot, ou na hora do reboot, ou a cada
vez que voc? deslogar ou logar numa sess?o gr?fica. Isso fica
a gosto do fregu?s.
No meu caso, como eu ligo o PC de manh? e este permanece ligado
e logado o dia todo, preferi colocar esse script para rodar no
boot, assim, todo dia tenho uma tela de login diferente …
Para isso fiz o seguinte no meu Slack:
1. Criei um arquivo chamado /etc/rc.d/rc.gdmrandom com o conte?do do script acima.
2. Tornei execut?vel: chmod +x /etc/rc.d/rc.gdmrandom
3. Acrescentei as seguintes linhas ao /etc/rc.d/rc.local:
# Pequeno Script que troca o tema do GDM aleatoriamente
if [ -x /etc/rc.d/rc.gdmrandom ]; then
echo “Changing the GDM Theme for a random one: “
. /etc/rc.d/rc.gdmrandom
fi
Assim, quando eu quiser desabilitar a mudan?a dos temas basta
eu retirar a permiss?o de execu??o do rc.gdmrandom.
Voc? pode adaptar isso para a sua distro.
Pra finalizar queria indicar alguns temas que eu achei muito
legais.
Baseados em Animes
==================
- Rurouni Kenshin (http://themes.freshmeat.net/projects/samuraix-gdmtheme/)
- Blue Rei GDM (http://themes.freshmeat.net/projects/bluereigdm/)
- I am not a doll (http://themes.freshmeat.net/projects/notadoll/)
- Dita and Hibiki from Vandread (http://themes.freshmeat.net/projects/ditaandhibiki/)
- Dita (http://themes.freshmeat.net/projects/dita/)
- Super Vandread (http://themes.freshmeat.net/projects/vandread/)
- Magna Carta GDM (http://www.gnome-look.org/content/show.php?content=13563)
- GDM Gartoon theme (http://www.gnome-look.org/content/show.php?content=13510)
Baseados em Filmes
==================
- [Fly Spider (http://www.gnome-look.org/content/show.php?content=17386]
- [Octopus GDM (http://www.gnome-look.org/content/show.php?content=13451]
- [The Matrix Reloaded (http://www.gnome-look.org/content/show.php?content=13381]
- [Matrix Reloaded GDM Theme (http://themes.freshmeat.net/projects/matrix_gdm/]
- [The Two Towers (http://themes.freshmeat.net/projects/thetwotowers/]
Diversos
========
- [SamothAngel GDM (http://themes.freshmeat.net/projects/angelgdmtheme/]
- [Shogun (http://themes.freshmeat.net/projects/shogun/]
- [Penguin Computing (http://art.gnome.org/themes/gdm_greeter/272/]
- [Angel (http://art.gnome.org/themes/gdm_greeter/89/]
Bom, voc?s tamb?m podem achar muito outros temas em:
- [GNOME-Look.org (http://www.gnome-look.org/index.php?xcontentmode=150]
- [art.gnome.org (http://art.gnome.org/themes/gdm_greeter/]
- [freshmeat.net (http://themes.freshmeat.net/browse/991/]
——————————————————————–
Colabore com a Dicas-L. Publique seu coment?rio sobre esta mensagem
em http://www.Dicas-L.unicamp.br/dicas-l/20041124.php
——————————————————————–
As mensagens da lista Dicas-L s?o veiculadas diariamente
para 26010 assinantes.
Todas as mensagens da Dicas-L ficam armazenadas em
http://www.Dicas-L.unicamp.br/dicas-l/
A redistribui??o desta e outras mensagens da lista Dicas-L pode
ser feita livremente, desde que o conte?do, inclusive esta nota,
n?o sejam modificados.
——————————————————————–
.———————————-.
| Programa??o em Bourne-Again Shell `————————————,
| Por MELEU
`————————————————————————’
- = < ? N D I C E > = -
0. Intro
1. Come?ando
2. Vari?veis e Par?metros
2.1. Vari?veis do Usu?rio
2.1.1. Vari?veis Array
2.2. Vari?veis do Shell
2.3. Vari?veis Somente-Leitura
2.4. Par?metros
2.4.1. shift
2.4.2. set (para editar par?metros)
2.5. Substitui??o de Vari?veis
3. Entrada e Sa?da (I/O)
3.1. echo
3.1.1 Sequ?ncias de Escape ANSI
3.2. read
3.3. Redirecionamento
3.3.1. Pipe
3.3.1.1. Comandos ?teis com o Pipe
4. Comandos de Tomadas de Decis?o
4.1. if-then-else e afins
4.1.1. test
4.1.2. let
4.2. case
4.3. Tomadas de decis?o com && e ||
4.3.1. Listas
5. Comandos de Loop
5.1. for
5.1.1 “for” como na linguagem C
5.2. while
5.3. until
5.4. break e continue
5.5. Redirecionando loops
6. Fun??es
6.1 Fun??es como comandos
7. Tornando seu Script Amig?vel
7.1. getopts
7.2. select
7.3. dialog
8. Coisas ?teis de se aprender
9. Exemplos Variados
9.1. backup.sh
9.2. howto.sh
9.3. todo.sh
9.4. inseretxt.sh
9.5. Mextract.sh
10. Refer?ncias
11. Considera??es Finais
————————————————————————–
0. Intro
*****
***** PRIMEIRO DE TUDO **************************************************
* *
* Esta ? a primeira vers?o do texto e ele est? relativamente grande *
* para que um ?nico mortal revise-o por inteiro, com o agravante de que *
* este mortal ? um vestibulando. Por favor, se voc? achar algum erro, *
* algo mal explicado, ou tem alguma sugest?o para que o texto fique *
* melhor mande-me um email: meleu@meleu.cjb.net *
* Quando eu tiver tempo eu acrescentarei mais coisas… *
* *
*************************************************************************
Well… aqui estamos de volta… Dessa vez o assunto ? shell script…
Estou partindo do princ?pio de que ningu?m aqui tem d?vidas quanto a
utilidade de um shell script. Roubando uma cita??o de um amigo:
“Em alguns casos, uma rede pode nao possuir um compilador
(Vide Conectiva 5.0), logo, voce precisa se virar com o que tem,
e os Shell Scripts podem suprir a sua necessidade em muitos casos.”
Eu j? procurei um bocado de material sobre shell script em portugu?s na
net e encontrei v?rios. Por?m a maioria sobre Korn Shell, C Shell, poucos
eram sobre bash. E os de bash eram muito superficiais. Explicavam s? o
come?o de como criar seus shellscripts. Ent?o o que eu pretendo aqui ?
entrar no assunto desde o in?cio e com alguns detalhes (talvez n?o
muitos). Note tamb?m que muitas coisas explicadas aqui podem ser usadas em
outros shells.
Minhas fontes de pesquisa ser?o muito ?teis para voc?, que ? um newbie
dedicado. Portanto consulte a se??o de refer?ncias que voc? vai achar
muita coisa boa.
O ?nico pr?-requisito para o entendimento deste texto ? que o leitor
tenha alguma familiaridade com os comandos UNIX. Uma no??ozinha de
programa??o (algoritmos) cairia bem. Se voc? n?o tem (ou acha que n?o
tem) o pr?-requisito acima citado, voc? pode adquir?-lo lendo o focalinux
comandos, uso, configura??o, etc. do GNU/Linux. Leitura recomendada!
Se voc? sabe usar Express?es Regulares fica melhor ainda! Se n?o sabe
aprenda a usar! Veja um guia sobre esse assunto na se??o de refer?ncias.
? de extrema import?ncia que voc? v? praticando assim que aprender
algo novo, isso ajuda a se familiarizar e memorizar as coisas.
Por favor, n?o pense que sou um expert ou um guru em shell scripting!
Eu s? estava aprendendo e resolvi escrever isso pra ajudar quem tamb?m
est? afim de aprender.
N?o se esque?a: O aprendizado ? eterno!
A maioria dos scripts chamam programas existentes no sistema, n?o
ficarei explicando o que faz cada comando. Se voc? quer saber o que ele
faz, sua sintaxe e etc. procure na p?gina man. Se voc? tiver alguma
d?vida sobre o bash use: “help” ou “man bash”. A manpage ? bastante
completa (e grande tamb?m)! Use-a como refer?ncia.
Para sua comodidade eu coloquei os c?digos entre as tags do Phrack
Extraction Utility. Voc? pode encontr?-lo na ?ltima edi??o da phrack em
c?digos baseado no Phrack Extraction Utility, chama-se Meleu Extraction
Utility (hehehe… qualquer semelhan?a N?O ? mera coincid?ncia). Ele se
encontra no t?pico “9.5. Mextract.sh” e tamb?m em
O esquema de organiza??o ? o seguinte: exemplos bestas ficam no
diret?rio “BashScript/” os exemplos bacanas ficam no diret?rio
“BashScript/bacanas/”.
* Aten??o na vers?o em que eu fiz os meus testes, pois em vers?es antigas
algumas coisas podem n?o funcionar (este e ? o que vem na instala??o do
Slackware 8.0):
/* -=-=-=-=-= version =-=-=-=-=- */
meleu@meleu:~$ bash –version
GNU bash, version 2.05.0(1)-release (i386-slackware-linux-gnu)
Copyright 2000 Free Software Foundation, Inc.
/* -=-=-=-=-= version =-=-=-=-=- */
Agradecimentos: A todos que fazem um esforcinho para publicar informa??es
de qualidade em portugu?s.
Especialmente para meus amiguinhos(as): lucipher, klogd, module, eSc2,
xf, Emmanuele, Mana_Laura, NashLeon, Hekodangews, Blind_Bard, clausen,
Renato
tamb?m ? um dinossauro-amante-do-modo-texto), ?s pessoas que levam a
Unsekurity Scene
da EoH Team
lembrar agora mas que tamb?m s?o meus camaradas. ? l?gico que tamb?m devo
agradecimentos a toda a comunidade Open Source, sem a qual tudo isso aqui
n?o existiria! Amo voc?s! =D
LICENSA: N?o quero nenhuma exclusividade! Quero ? informa??o fluindo!
Pegue este texto e espalhe em todo lugar em que ele for bem-vindo.
Se quiser extrair trechos dele e puder fazer o favor de citar de onde
foi extra?do, eu me sentiria agradecido.
————————————————————————–
1. Come?ando
*********
Como voc? j? deve saber, um shell script ? um arquivo em formato texto
puro que cont?m comandos/instru??es para serem executados em uma
determinada shell. O que vou tentar passar neste texto ? como fazer shell
script para o Bourne-Again Shell, ou bash. Esta ? uma linguagem
interpretada (voc? n?o precisa compilar para ter o execut?vel) e o bash ?
o interpretador.
Veja um exemplo de script:
/* ————— */
< ++> BashScript/primeiroexemplo.sh
#!/bin/bash
echo ‘Alo mam?e!’
echo
echo ‘Agora executarei um simples “ls -l”, veja: ‘
echo
ls -l
< -->
/* ————— */
Para que se possa executar um shell script ? necess?rio permiss?o de
execu??o (mais sobre permiss?es em http://meleu.da.ru/index.html#textos ).
Para que somente voc? (dono do arquivo) tenha permiss?o de execu??o
para o primeiroexemplo.sh voc? faz:
$ chmod u+x primeiroexemplo.sh
Agora voc? pode executar o script da seguinte forma:
$ ./primeiroexemplo.sh
Veja outro exemplo de apenas um comando:
/* —————– */
< ++> BashScript/procura_suid.sh
#!/bin/bash
# script para procurar arquivos suid
# que perten?am a determinado usu?rio
find / -user $1 -perm -4000 2> /dev/null
< -->
/* —————– */
Agora vamos a uma r?pida explica??o sobre o c?digo…
- Na primeira linha n?s dizemos qual ser? o nosso intrepretador de
comandos (o shell). Voc? deve come?ar a linha com um “#!” (conhecido como
sha-bang) e depois o caminho inteiro para o bash.
- Nas segunda e terceira linhas s?o usados coment?rios, todo
coment?rio come?a com uma cerquilha (#) e vai at? o final da linha;
- A ?ltima linha que ? realmente o comando, o $1 significa o primeiro
par?metro dado na linha de comando (ser? falado mais sobre isso daqui
a pouco), por exemplo:
$ ./procura_suid.sh level5
ir? procurar por todos os arquivos suid que perten?am ao usu?rio level5.
Como voc? deve ter reparado, esse shell script ? ?til nos wargames (veja
10. Refer?ncias), mas tem que ser muito pregui?oso pra fazer um shell
script de um comando s?!
De vez em quando ? bom observar o que o script est? fazendo. Para isso
voc? pode usar alguns par?metros junto com o shell para executar seu
script. Veja:
/* -=-=-=-=-=-= debugar =-=-=-=-=-=- */
$ bash -x BashScript/primeiroexemplo.sh
+ echo ‘Alo mam?e!’
Alo mam?e!
+ echo
+ echo ‘Agora executarei um simples “ls -l”, veja: ‘
Agora executarei um simples “ls -l”, veja:
+ echo
+ ls -l
total 12
drwxr-xr-x 5 meleu users 4096 Aug 18 15:28 GNUstep
drwxr-xr-x 2 meleu users 4096 Aug 19 23:11 progs
drwxr-xr-x 2 meleu users 4096 Aug 19 22:57 txts
/* -=-=-=-=-=-= debugar =-=-=-=-=-=- */
O par?metro “-x” faz com que seja exibido o comando e depois a sa?da do
comando.
Outros par?metros interessantes para a “debuaga??o” do script s?o:
-n n?o executa os comandos, apenas verifica
erros de sintaxe (noexec);
-v mostra o script e depois executa-o
(verbose);
Outra coisa que devemos saber ? que quando um shell script ? executado
ele usa OUTRA SHELL e N?O USA A SHELL ATUAL. Desculpem eu estar berrando
deste jeito…
mas ? importante termos isso em mente quando formos usar
vari?veis.
Falando em vari?veis…
————————————————————————–
2. Vari?veis e Par?metros
**********************
Ao contr?rio das outras linguagens, o bash n?o possui “tipos de dados”,
todas as vari?veis s?o strings. O bash usa strings para representar todos
os dados que ser?o usados pelas vari?veis. A seguir falaremos sobre os
*tipos de vari?veis* (e n?o “tipos de dados”).
Se voc? conhece alguma outra linguagem de programa??o sabe que os
identificadores possuem algumas regras quanto a sua nomeclatura. Pois no
bash as regras s?o parecid?ssimas:
* S? se pode usar caracteres alfanum?ricos e underline;
* S? se pode come?ar com letra ou underline (n?mero n?o pode);
* N?o pode conter espa?os em branco;
E uma coisa que n?s, falantes da l?ngua portuguesa temos que saber ?:
* Os identificadores N?O podem conter acentos!
enfim… todas aquelas regrinhas para identificadores de linguagens de
programa??o tamb?m se aplica aqui, exceto aquela famosa sobre palavras
reservadas. Voc? pode por exemplo fazer “if=lalala” que funcionar?
perfeitamente. A ?nica coisa que n?o pode ? usar um nome que j? tenha sido
definido para uma outra vari?vel e que esta seja “readonly” (mais sobre
isso adiante). Tamb?m deve-se tomar cuidado para n?o fazer bobagens com
as vari?veis do shell (explicados no t?pico 2.2.).
2.1. Vari?veis do Usu?rio
====================
As vari?veis do usu?rio s?o as vari?veis que voc? pode declarar, ler,
inicializar e modificar. No exemplo abaixo n?s criamos uma vari?vel
chamada “nome” e atribu?mos a ela o valor “Meleu”. Veja:
$ nome=Meleu
N?o pode haver espa?os nem antes nem depois do sinal de ‘=’! Se voc?
quiser atribuir um valor que contenha espa?os ? necess?rio usar as
‘aspas simples’.
Veja:
$ nome=’Meleu nao eh meleca!’
Agora para usar a vari?vel ? s? voc? colocar um cifr?o ‘$’ antes do
nome dela. Olhe um exemplo com e sem o ‘$’:
$ echo nome
nome
$ echo $nome
Meleu n?o eh meleca!
Existe diferen?a entre usar ‘aspas simples’, “aspas duplas”, `crases` e
n?o usar nada.
Veja isto:
/* -=-=-=-=-= exemplos =-=-=-=-=- */
$ caminho=’O meu path eh: $PATH’
$ echo $caminho
O meu path eh: $PATH
$ caminho=”O meu path eh: $PATH”
$ echo $caminho
O meu path eh: /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/openwin/bin
$ teste=`ls $HOME`
$ echo $teste
GNUstep/ progs/ textos/
$ conteudo_dir=”Meu diretorio home contem: `ls $HOME`”
$ echo $conteudo_dir
Meu diretorio home contem: GNUstep/ progs/ textos/
$ teste=isso nao eh valido
bash: nao: command not found
$ teste=mas_isso_eh_valido
$ echo $teste
mas_isso_eh_valido
/* -=-=-=-=-= exemplos =-=-=-=-=- */
Os mais espertos j? perceberam as diferen?as… mas para os mais
lerdinhos (como eu) a? vai uma explica??o.
+ ‘aspas simples’: atribuem ? vari?vel EXATAMENTE o que est? entre elas;
+ `crases`: atribuem ? vari?vel a *sa?da do comando* que est? entre elas,
tem a capacidade de ver o conte?do de uma vari?vel
(no exemplo acima, a vari?vel de ambiente $HOME);
+ “aspas duplas”: atribuem ? vari?vel a string, o valor das vari?veis que
porventura podem estar entre elas (no segundo exemplo, a
vari?vel de ambiente $PATH), e tamb?m a sa?da de comandos
que estejam entre `crases`;
+ nada: similar as aspas duplas, por?m ignora espa?os excedentes.
Podemos usar $(cifr?o-par?nteses) no lugar das crases. Em alguns casos
? melhor usar $(cifr?o-par?nteses) mas eu n?o vou falar em quais, voc?
vai descobrir quando.
Veja estes exemplo:
/* -=-=-= exemplo =-=-=- */
$ dir_atual=$(pwd)
$ echo $dir_atual
/home/meleu
$ echo $(ls $HOME)
GNUstep/ progs/ textos/
$ tar czvf backup_$(date +%d-%m-%Y).tgz arquivo
/* -=-=-= exemplo =-=-=- */
Outra coisa interessante ? o uso das {chaves}. Voc? pode usar as chaves
para exibir uma vari?vel (ex.: echo ${teste}), isso ? ?til quando voc?
precisa separar a vari?vel do que vem depois dela. Veja isto:
/* -=-=-=-=-= exemplo =-=-=-=-=- */
$ name=coracao
$ echo ${name}deleao
coracaodeleao
/* -=-=-=-=-= exemplo =-=-=-=-=- */
Como eu disse anteriormente, quando executamos um shell script ele usa
outro shell, portanto toda vari?vel que for criada/inicializada num shell
script perder? seu valor no final da execu??o do mesmo. No entanto, voc?
pode fazer um shell script usar vari?veis de usu?rio exportando-a
com o comando “export” (ver man page do bash). Um exemplo simples:
/* -=-=-=-=-= exemplo =-=-=-=-=- */
$ cat teste.sh
#!/bin/bash
echo “$VAR”
$ export VAR=’Um abraco para os gajos de Portugal! :)’
$ ./teste.sh
Um abraco para os gajos de Portugal!
$ export VAR=’–> mudei a variavel < --'
$ ./teste.sh
–> mudei a variavel < --
/* -=-=-=-=-= exemplo =-=-=-=-=- */
2.1.1. Vari?veis Array
—————
Tamb?m conhecidas como vetores. Este tipo de vari?vel serve para se
armazenar v?rios valores sob um nome e um ?ndice. A maneira de declarar
vari?veis array ? a seguinte:
NomeDaVariavel[Indice]=Valor
sendo que Indice deve ser necessariamente um valor inteiro.
Imaginemos que EvilLord queira armazenar uma lista de suas frutas
favoritas em uma vari?vel array. Para isso ele faria o seguinte:
/* -=-=-= exemplo =-=-=- */
$ FRUTA[0]=goiaba
$ FRUTA[1]=manga
$ FRUTA[2]=pera
$ FRUTA[3]=laranja
/* -=-=-= exemplo =-=-=- */
Supondo que ele colocou esta lista em ordem decrescente de gosto, para
sabermos qual ? a sua fruta favorita basta digitarmos:
$ echo ${FRUTA[0]}
Bacana n?o acham?
Agora vejamos uma coisa interessante. Se eu declarar uma frut… ops!
digo, se eu declarar uma vari?vel assim:
$ FRUTA=goiaba
e depois quiser fazer um array com o nome FRUTA eu posso fazer assim:
$ FRUTA[1]=manga
Desta maneira ‘goiaba’ passa a ser armazenada em FRUTA[0]
Outra coisa interessante ? que podemos declarar um array inteiro numa
?nica linha de comando. Para isto usamos a sintaxe:
NomeDoArray=(valor1 valor2 … valorn)
Desta maneira o EvilLord economizaria teclado (?!) digitando isto:
$ FRUTA=(goiaba manga pera laranja)
E para vermos toda a lista de uma vez s?, podemos usar o seguinte comando:
$ echo ${FRUTA[*]}
Existem v?rias outras especifica??es para arrays mas quero passar aqui
s? o b?sico. E se voc? precisar usar arrays de maneira mais complexa que
isso: v? procurar a documenta??o oficial do bash!
2.2. Vari?veis do Shell
==================
Existem vari?veis que o shell usa constantemente para um melhor
funcionamento. O pr?prio shell inicializa algumas destas vari?veis, que
podem ser lidas e alteradas pelo usu?rio, estas s?o conhecidas como
vari?veis do shell. Servem para determinar qual ? o seu diret?rio home, em
qual diret?rio o shell vai procurar por comandos que voc? digitar, seu
prompt… enfim… um bocado de coisas. Voc? pode atribuir novos valores
para estas vari?veis (uma boa ? fazer isso no seu ~/.bashrc ou
~/.bash_profile).
Vamos ver algumas destas vari?veis mais importantes e suas respectivas
fun??es.
–> HOME
Esta vari?vel tem um nome bem descritivo n?o acham? Bem… como n?s j?
sabemos, o nosso diret?rio home ? o diret?rio em que “ca?mos” assim que
nos logamos (sabemos tamb?m que esta informa??o se encontra em
/etc/passwd). Quando voc? se loga no sistema o bash pega o nome do
diret?rio que voc? est? e o atribui ? vari?vel HOME.
Voc? j? deve ter percebido que quando voc? d? um “cd” sem nenhum
argumento voc? vai para o seu diret?rio home. Pois o que o cd faz ? o
mesmo que “cd $HOME”. Se voc? alterar o valor de HOME, quando voc?
digitar cd sem nenhum argumento o bash vai tentar te levar para o $HOME.
Veja:
/* -=-=-=-=-= exemplo =-=-=-=-=- */
meleu:/usr/doc$ echo $HOME
/home/meleu
meleu:/usr/doc$ cd
meleu:~$ pwd
/home/meleu
meleu:~$ HOME=/tmp
meleu:/home/meleu$ cd
meleu:~$ pwd
/tmp
meleu:~$ HOME=lalala
meleu:/tmp$ cd
bash: cd: lalala: No such file or directory
/* -=-=-=-=-= exemplo =-=-=-=-=- */
Voc? tamb?m j? deve ter reparado que quando estamos no nosso home
aparece um til (~) logo antes do prompt. Observe este detalhe no exemplo
acima.
–> PATH
Esta vari?vel armazena o caminho (path) que o shell ir? percorrer para
procurar um comando digitado pelo usu?rio. Exemplo:
/* -=-=-= exemplo =-=-=- */
meleu@meleu:/tmp$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:/usr/share/texmf/bin
/* -=-=-= exemplo =-=-=- */
Portanto se eu digitar um “ls” o shell ir? procurar pelo “ls” em
/usr/local/bin depois em /usr/bin e da? em diante.
Esta vari?vel algumas vezes nos ? ?til no hacking!
Imagine que um
programador inexperiente tenha feito um programa suid que usa a fun??o
system() (ou qualquer outra fun??o que sirva para executar um comando
externo), e nesta fun??o ele n?o usa o caminho completo do programa, e
sim apenas o nome do programa, supondo que o programa est? no seu PATH
normal. Voc? pode alterar o PATH e executar um outro programa de sua
prefer?ncia.
Vamos supor que o cara use:
system (”date”);
no lugar de:
system(”/bin/date”);
A? voc? faz um programa ou um shell script e nomeia ele como “date”.
Agora ? s? alterar o PATH para que procure primeiro no diret?rio onde
voc? salvou o SEU date, e ent?o executar o programa suid feito pelo
incompetente programador. Fa?a uns testes a? que voc? vai me
entender melhor.
Esta situa??o ? bem dif?cil de se encontrar hoje em dia, resolvi
colocar aqui por quest?es hist?ricas.
–> PS1
Esta ? a “Prompt String 1″ ou “Primary Prompt String”. Nada mais ? do
que o prompt que nos mostra que o shell est? esperando um comando. Quando
voc? muda PS1 voc? muda a aparencia do prompt. Na minha m?quina o padr?o ?
‘\u@\h:\w\$ ‘ onde \u significa o nome do usuario, \h significa o nome do
host e \w ? o diret?rio atual, o que d? a seguinte apar?ncia:
meleu@meleu:/usr/doc/Linux-HOWTOs$
Veja algumas possibilidades (na man page do bash tem mais):
\d mostra a data atual
\h mostra o hostname
\s o nome do shell
\t a hora atual (no estilo 24 horas)
\T a hora atual (no estilo 12 horas)
\u nome do usu?rio que est? usando o shell
\w nome do diret?rio atual (caminho todo)
\W nome do diret?rio atual (somente o nome do diret?rio)
Se voc? estiver afim de ter a impress?o de que est? no shell do root
basta trocar o ‘$’ por ‘#’ (bah! que bobagem!
).
Para aprender a fazer um monte de gracinhas com o PS1 d? uma lida no
Bash-Prompt-HOWTO (ver 10. Refer?ncias)
–> PS2
Esta ? a “Secondary Prompt String”. ? usada quando um comando usa mais
de uma linha. Por exemplo:
/* -=-=-= exemplo =-=-=- */
$ echo m\
> e\
> l\
> e\
> u
meleu
$ echo ‘m
> e
> l
> e
> u’
m
e
l
e
u
/* -=-=-= exemplo =-=-=- */
Este sinal ‘> ‘ (maior-espa?o) ? o PS2. Voc? pode usar os mesmos
caracteres especiais que o PS1 usa.
Nada mais ? do que o arquivo onde s?o guardados seus emails. Aqui na
minha m?quina eu uso o sendmail como servidor de email, portanto:
/* -=-=-= MAIL =-=-=- */
meleu@meleu:~$ echo $MAIL
/var/spool/mail/meleu
/* -=-=-= MAIL =-=-=- */
por?m se estivesse usando qmail seria:
/* -=-=-= MAIL =-=-=- */
meleu@meleu:~$ echo $MAIL
/home/meleu/Mailbox
/* -=-=-= MAIL =-=-=- */
–> SHLVL
Esta vari?vel armazena quantos shells voc? executou a partir da
primeira shell.
Confuso? Vamos a um exemplo.
Imagine que voc? est? usando o bash e executou o bash de novo, nesta
situa??o o seu SHLVL vale 2. Veja isto:
/* -=-=-= exemplo =-=-=- */
$ echo $SHLVL
1
$ bash # estou executando o bash a partir do bash
$ echo $SHLVL
2
$ exit # sa? do segundo bash
exit
$ echo $SHLVL
1
/* -=-=-= exemplo =-=-=- */
Quando voc? inicializa scripts a partir do comando “source” o script ?
executado no shell pai, portanto se tiver um “exit” no script voc? vai
executar um logoff. ? a? que est? a utilidade da vari?vel SHLVL. Quando
voc? est? no shell prim?rio o valor de SHLVL ? 1. Ent?o voc? pode, atrav?s
de um “if” por exemplo, executar o “exit” s? se SHLVL for diferente de 1
(mais informa??es sobre o source em “6.1 Fun??es como comandos”).
–> PROMPT_COMMAND
Esta ? bem interessante. Ela armazena um comando que ser? executado
toda hora que o prompt ? exibido. Veja:
/* -=-=-= exemplo =-=-=- */
$ PROMPT_COMMAND=”date +%T”
19:24:13
$ cd
19:24:17
$ ls
GNUstep/ bons.txt pratica/ teste worldwritable.txt
Mail/ hacking/ progs/ txts/
19:24:19
$
19:24:32
$ # isso eh uma linha sem nenhum comando
19:24:49
$
/* -=-=-= exemplo =-=-=- */
Esta vari?vel ? ?til quando queremos brincar com o prompt, para
aprender mais sobre isso leia o Bash-Prompt-HOWTO (v. 10. Refer?ncias).
–> IFS
O shell usa esta vari?vel para dividir uma string em palavras
separadas. Normalmente o IFS ? um espa?o, uma tabula??o (Tab) e um
caractere nova linha (\n). Desta maneira:
isto eh uma string
s?o quatro palavras, pois IFS ? um espa?o e as palavras est?o separadas
por espa?o. Agora se eu mudar IFS para um ‘:’ desta maneira:
IFS=’:’
ent?o a string:
isto:eh:uma:string
conter? quatro palavras. Isto ? ?til para casos como neste exemplo:
/* —————– */
< ++> BashScript/path.sh
#!/bin/bash
IFS=’:’
for item in $PATH ; do
echo $item
done
< -->
/* —————– */
Se IFS for uma vari?vel nula (vazia), tudo ser? considerado uma ?nica
palavra. Por exemplo:
se o IFS for nulo, toda essa linha ser? considerada uma ?nica palavra
–> RANDOM
Quando voc? exibe esta vari?vel (”echo $RANDOM”) ? exibido um n?mero
aleat?rio entre 0 e 32767.
Pra que serve isso?
Sei l?! V?rias coisas. Quem ? criativo sempre precisa de um n?mero
aleat?rio… Imagine que voc? queira um n?mero de telefone celular
qualquer (sei l? pra qu?!), voc? pode fazer um script que gera um n?mero
desse pra voc?. Aqui na minha regi?o estes n?meros come?am com 99 ou 98,
e t?m um total de 8 d?gitos. O script a seguir gera n?meros que comecem
com 98 somente:
/* —————– */
< ++> BashScript/cellnumbergen.sh
#!/bin/bash
NUM=”98$(echo $RANDOM)0″
CONT=$(echo -n $NUM | wc -c) # quantos digitos tem?
while [ $CONT -lt 8 ]; do # se nao tiver 8 digitos acrescenta 0’s
NUM=${NUM}0
CONT=$(echo -n $NUM | wc -c)
done
echo $NUM
< -->
/* ————