Git – Por que usar? – Parte I

 

Em primeiro lugar, o que é Git?

O git é um Sistema de Controle de Versão Distribuído. Começou a ser pensado por Linus Torvalds ainda em 2005, quando ele estava tendo problemas com o Bitkeeper, sistema usado na época para o controle de versão do Kernel do Linux.

Ao pensar em um substituto a esse sistema, Linux Torvalds propôs que ele tivesse:

  • Velocidade
  • Design simples
  • Suporte robusto a desenvolvimento não linear (milhares de branches paralelos)
  • Totalmente distribuído
  • Capaz de lidar eficientemente com grandes projetos como o kernel do Linux (velocidade e volume de dados)

Além disso se procurou um sistema que fosse fácil de lidar, e que não implementasse as mudanças diretamente, mas que houvesse uma camada intermediária. Além do mais deveria proporcionar “caminhos” alternativos ao principal, para o desenvolvimento de novas características, patches de correção e etc. Leia o resto deste post »


Lidando com pacotes rpm

Algo que todo administrado linux/unix tem que fazer é lidar com pacotes. Dependendo de qual distribuição pode ser: deb, rpm, tgz…
Isto leva a duas questões:

  1. como lidar com o pacote.?
  2. como trabalhar com a ferramenta de instalação?

Aqui abordarei um pouco sobre os pacotes rpm. São usados nas distros que tem a raiz no Linux RedHat. Em primeiro lugar, vamos falar para lidar com os pacotes diretamente, via ferramentas rpm.
Quando você tem um pacote src.rpm, é necessário (re)compilar o pacote. O comando ficaria assim:

rpmbuild --rebuild --with fdr50 pacote_rpm-versao.src.rpm

Veja um exemplo, se quisermos instalar o qmail-toaster (instalação facilitada do qmail criado pelo pessoal que mantem os pacotes toaster) no fedora core 5:

rpmbuild --rebuild --with fdr50 daemontools-toaster-0.76-1.3.1.src.rpm

Este comando criaria um pacote daemontools-toaster-0.76-1.3.1.i386.rpm, no seguinte folder: /usr/src/redhat/RPMS/i386.
Outra questão que temos, é como instalar, desistalar e consultar pacotes rpm. aqui vai uma colinha dos comandos:

rpm -ivh pacote.rpm Instala pacote rpm
rpm -Uvh pacote.rpm Atualiza pacote rpm (não sobrescreve, ou deixa um bkp dos arquivos conf)
rpm -e pacote.rpm Desinstala pacote rpm
rpm -qa pacote.rpm Lista pacotes instalados
rpm -qi pacote.rpm Informações sobre o pacote
rpm -ql pacote.rpm Lista os arquivos do pacote
especiais  
rpm -ivh –replacefiles pacote.rpm Re-instala pacote rpm, sobrescrevendo os arquivos
rpm -Uvh –oldpackages pacote.rpm Atualiza por um pacote mais antigo
rpm -Vf /caminho/arquivo Verifica a qual pacote pertence o arquivo
rpm -ivh –test pacote.rpm Testa a instalação, para ver se não tem problema de dependência

Outra forma que temos para lidar com instalação de programas nos forks do RedHat é lidando com o yum (instalado por padrão). A grande vantagem, que você não precisa ficar pensando em questões de dependência de pacotes. A sintaxe dele é:

yum install programa

As opções mais usadas para o yum são: install, search, remove, list, check-update, update, provide, resolvedep.

Fonte de consulta:
Trabalhando com RPM – por Eduardo Vieira Mendes
Pacotes RPM (Infowester) – Emerson Alecrim


Renomeando arquivos no console

Estou atualizando a galeria de fotos do site e me deparei com um problema. Várias fotos do Windows acabando vindo com espaços e caracteres inválidos. Também queria uma forma de deixar todos os caracteres minúsculos.
Acabei encontando as seguintes dicas:

for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done

fonte: www.vivaolinux.com.br

Eu acabei adaptando para poder criar um script que faz tudo de uma vez só no diretório em que é rodado.


#!/bin/bash
for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done
for foo in *; do mv $foo `echo $foo | tr " " "_"` ; done


Múltiplos usos do Comando Find

Quem nunca precisou editar algo em particular, em vários arquivos de uma só vez. O Nagios por exemplo, se for mudado o nome de um host no arquivos hosts.cfg, este nome deve ser mudado também no hostroups.cfg e no services.cfg. Ou então qer trocar uma váriavel em vários arquivos de um mesmo programa.

Para isto temos o comando find. A melhor utilização para mim descobri já fazem uns dois anos do site Dicas-L, do pessoal envolvido com a Unicamp.

O comando para isto é:

find ./ -maxdepth 1 -name '*.php' | xargs perl -i.bkp -p -e 's/isso/aquilo/ig;'
O isso você troca pela variável que você quer trocar, e o aquilo pelo valor a ser escrito. A opção -maxdepth 1 faz com que a substituição aconteca somente no diretório onde o comando foi executado. Se quiser que ele rode recursivamente, basta tirar esta parte do comando. Após o comando perl, a opção -i.bkp cria um backup de todo arquivo modificado.

Se você quiser mais explicações sobre este uso do find consulte no site do Dicas-L (find).

Outro uso excelente que podemos fazer é para achar aquivos “sem dono“.

find / -nouser -print
E se você quiser apagar estes arquivos pode usar o comando assim:

find / -nouser -print | xargs rm


Mais uma do comando Find

Que procurar um texto entre vários arquivos de um diretório? use este comando:

find . -type f -exec grep "antes" {} \; -print

Fonte: Dicas-L


Comando sudo

Um dos comandos mais úteis do Linux é o comando sudo.

Com ele é possível rodar programas como root sem comprometer a segurança do sistema. Assim, é possível, por exemplo, que um administrador do sistema não precisar ficar logando como root toda hora para alterar coisas importantes do sistemas. Outra aplicação é permitir que usuários sem privilégios rodem scripts, sem precisar ficar alterando estes scripts para permissão a todos os usuários.

Um exemplo de aplicação, no meu caso é rodar um script php que cadastra, remove e consulta meus usuários de email. Assim, o script php fica associado ao apache, que roda o web server, mas o comando roda um shell script que está associado ao vpopmail. Assim a segurança do servidor permanece, pois o apache só pode roda o script do vpopmail, via localhost, e somente este comando como root, mais nenhum.

Para o sudo funcionar se faz necessário editar o arquivo sudoers. Isto pode ser feito com o comando visudo. Este comando deve ser rodado como root. Após isto, abre um arquivo conf como este:

# sudoers file.## This file MUST be edited with the 'visudo' command as root.## See the sudoers man page for the details on how to write a sudoers file.## Host alias specification# User alias specification# Cmnd alias specification# Defaults specification# Runas alias specification# User privilege specificationroot ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands# %wheel ALL=(ALL) ALL # Same thing without a password# %wheel ALL=(ALL) NOPASSWD: ALL # Samples# johndoe ALL=/sbin/mount /cdrom,/sbin/umount /cdrom# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom# %users localhost=/sbin/shutdown -h now# %users localhost = NOPASSWD: /sbin/shutdown -h now

Como podemos ver, você pode definir o usuário (johndoe), ou um grupo (adicionando %, como em %users), o IP acompanhado pelo sinal de = e podendo ser com senha (do usuário) ou não, para a excecução do comando. Em outro momento vou passar uma explicação mais profunda do comando e os operados envolvidos no arquivo.

Alguns bons textos sobre o comando sudo:

LinuxSecurity

Courtesan example

sudo manual


Renomenando arquivos no console

 

Estou atualizando a galeria de fotos do site e me deparei com um problema. Várias fotos do Windows acabando vindo com espaços e caracteres inválidos. Também queria uma forma de deixar todos os caracteres minúsculos. Acabei encontando as seguintes dicas:

 for foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; done

fonte: http://www.vivaolinux.com.br

Eu acabei adaptando para poder criar um script que faz tudo de uma vez só no diretório em que é rodado.

#!/bin/bashfor foo in *; do mv $foo `echo $foo | tr /[A-Z]/ /[a-z]/` ; donefor foo in *; do mv $foo `echo $foo | tr " " "_"` ; done