Tag Archives: ubuntu

Pequenas soluções usando linha de comandos – IV (movendo arquivos)

O comando ‘mv’ serve básicamente pra duas coisas: mover arquivos de um diretório pra outro e renomear arquivos.

Algo interessante que aprendi com o Eduardo Ramos foi como mover apenas alguns tipos de arquivos. Por exemplo, se eu precisar mover todos os arquivos com extensão .txt e .doc para um diretório ‘docs’, bastaria fazer:

mv /home/caton/{*.txt,*.doc} /home/caton/docs

Enjoy! :)

Pequenas soluções usando linha de comandos – III (Script de backup)

Nesse post vou compartilhar um script simples e eficiente pra fazer backup no Linux, usando o Rsync.

Atenção! Se você estiver fazendo backup numa partição FAT, recomendo este post do Leandro Lazarte.

Teremos dois diretórios: um diretório “fonte” contendo os arquivos os quais devem ser feito backup e outro “destino” que é onde a cópia será realizada. O Rsync é um software mais de sincronização do que de backup propriamente dito. Isso signfica que as alterações que você fizer no diretório “fonte” – ao rodar o Rsync – se refletirá no diretório “destino”, incluindo criação, alteraração ou exclusão de arquivos e pastas.

O script é este:

#! /bin/bash
#---------------------------------------
# Script que realiza backup automatizado
# by Lucas Catón
#---------------------------------------

SOURCE_DIRECTORY=/home/caton/
DESTINATION_DIRECTORY=caton@10.10.10.2:/home/anyuser/bkp

sudo rsync -Cavz --progress --partial --delete --numeric-ids --exclude="*.gvfs" $SOURCE_DIRECTORY $DESTINATION_DIRECTORY

clear
echo Backup realizado com sucesso.
echo

Explicando: as variáveis SOURCE_DIRECTORY e DESTINATION_DIRECTORY são apenas pra deixar o script mais organizado e fácil pra alterar os diretórios. Note que o segundo diretório que eu coloquei é um diretório remoto, acessado via protocolo ssh. A sintaxe é simples: usuário@ip:diretório.

Sobre os parametros utilizados (progress, partial, etc), vale a pena dar uma olhada no man pra entender e customizar, de forma que te atenda melhor. Por exemplo: comigo, às vezes dá pau em arquivos .gvfs, que ficam no /home, então eu mandei ignorá-los.

Se for interessante pra você, é possível salvar um log de cada backup:

#! /bin/bash
#---------------------------------------
# Script que realiza backup automatizado
# by Lucas Catón
#---------------------------------------

SOURCE_DIRECTORY=/home/caton/
DESTINATION_DIRECTORY=caton@10.10.10.2:/home/anyuser/bkp

LOG_FILE=~/logs/bkp_"$(date "+%F")".log
touch $LOG_FILE

sudo rsync -Cavz --progress --partial --delete --numeric-ids --exclude="*.gvfs" $SOURCE_DIRECTORY $DESTINATION_DIRECTORY > $LOG_FILE

clear
echo Backup realizado com sucesso.
echo O log encontra-se em: $LOG_FILE
echo

Outra coisa interessante é colocar esse script no cron. Assim, de tempos em tempos ele será executado automaticamente.

Pra finalizar, uma solução alternativa. Dependendo do tipo de backup, em vez de criar um script, um simples alias no ~/.bashrc já resolve:

alias runrsync='sudo rsync -Cavz --progress --partial --delete --numeric-ids --exclude="*.gvfs" /home/caton/ caton@10.10.10.2:/home/anyuser/bkp'

Afinal, “Simplicidade é a sofisticação máxima” (Leonardo da Vinci)

Pequenas soluções usando linha de comandos – II

Escrever um script que roda em daemon (backgounrd) e repete algum comando de tempos em tempos é extremamente simples e pode resolver vários problemas.

Há um tempo atrás precisei de um listening em um diretório que ficasse mudando permissões de arquivos que eram importados automáticamente. O script ficou assim:

#! /bin/bash
#Script para dar permissão de acesso aos arquivos para o faturamento
#Roda em daemon

#loop infinito
while((1)); do
  #faz o que tem que ser feito
  chown -R nobody:faturamento /home/faturamento/importacoes;
  #pausa por 5 segundos (ou quantos você quiser)
  sleep 5;
# o "&" no final é quem faz o script rodar em daemon
done &

#por fim, mostra uma mensagem
echo 'Script rodando em daemon...'

Se você tiver outras formas de fazer isso (acredito que deva existir outras até melhores), mande através dos comentários :)

Ubuntu 10.04 + Ruby on Rails + PostgreSQL 8.4

Atenção:

Esse post é uma cópia do README de um projeto que criei no final do ano passado, afim de organizar o passo-a-passo da instalação das ferramentas que uso (como Rails e PostgreSQL) e também de alguns dotfiles. Atualmente, já existe uma versão mais atual do Ubuntu e algumas coisas deste tutorial podem não funcionar corretamente. Então, recomendo que você verifique o tutorial atualizado na página inicial do projeto: http://github.com/lucascaton/lcaton-setuplinux.

Recentemente atualizei meu Ubuntu para a versão 10.04 e esse script de instalação está atualizado para ser usado nesta versão. Esses passos incluem a instalação do Ruby através do RVM, Rails 2.3.5, PostgreSQL 8.4 e algumas outras coisas. Sempre que eu atualizar o Ubuntu ou mudar algum procedimento ou ainda um dotfile, vou alterar no projeto do github também.


Versão atual: Ubuntu 10.04 (desktop edition – 32 bits)

Instalação básica

Antes de mais nada

sudo aptitude update

Open SSH Server

sudo aptitude install openssh-server

Git & gitg

sudo aptitude install git-core gitg

Curl

sudo aptitude install curl

Suporte à arquivos compactados

sudo aptitude install rar p7zip-full

GTK Record My Desktop e Mencoder / Mplayer

sudo aptitude install gtk-recordmydesktop mplayer mencoder ffmpeg

nmap (Usage ‘sudo nmap -sS ’ pra saber as portas abertas de uma máquina remota)

sudo aptitude install nmap

Criar DVDs e converter vídeos

sudo aptitude install devede

Gimp (a partir da versão 10.04 do Ubuntu o Gimp não vem instalado por padrão)

sudo aptitude install gimp

Fonts true type

sudo aptitude install msttcorefonts

Wine

sudo aptitude install wine

Copiar arquivos deste projeto

git clone git://github.com/lucascaton/lcaton-setuplinux.git ~/.setuplinux

Instalar fonte Monaco

sudo mkdir /usr/share/fonts/truetype/myfonts
cd /usr/share/fonts/truetype/myfonts
sudo cp ~/.setuplinux/files/Monaco_Linux.ttf .
sudo chown root:root Monaco_Linux.ttf
sudo mkfontdir
cd ..
fc-cache

Gvim

sudo aptitude install vim-gnome ncurses-term exuberant-ctags

Vimfiles

mv ~/.vim ~/vim_old
git clone git://github.com/lucascaton/cmarques-vimfiles.git ~/.vim
mv ~/.vimrc ~/vimrc_old
mv ~/.vim/vimrc ~/.vimrc

Gmate

git clone git://github.com/lexrupy/gmate.git
cd gmate && sh install.sh && cd .. && rm -rf gmate

DotFiles

cp ~/.setuplinux/dotfiles/.bashrc ~
cp ~/.setuplinux/dotfiles/.fonts.conf ~
cp ~/.setuplinux/dotfiles/.gemrs ~
cp ~/.setuplinux/dotfiles/.gitconfig ~
cp ~/.setuplinux/dotfiles/.irbrc ~

PostgreSQL

sudo aptitude install postgresql postgresql-contrib libpq-dev pgadmin3

Configurar a senha do PostgreSQL

sudo passwd postgres
su - postgres
psql -c "ALTER USER postgres WITH PASSWORD 'sua_senha'" -d template1

Sqlite3

sudo aptitude install sqlite3

JDK

sudo aptitude install openjdk-6-jre-headless

Ruby on Rails

Bibliotecas necessárias

Readline headers

sudo aptitude install libreadline5-dev

C++ compiler (necessário para o Ruby)

sudo aptitude install build-essential

OpenSSL development headers (necessário para o Ruby)

sudo aptitude install libssl-dev

Sqlite support

sudo aptitude install libsqlite3-dev sqlite-dev libdbd-sqlite3-ruby libsqlite3-ruby libsqlite3-ruby1.8

Mysql Client (necessário para a gem ‘mysql’)

sudo aptitude install libmysqlclient15-dev

libxslt (necessário para a gem ‘capybara’)

sudo aptitude install libxslt-dev

Sphinx (necessário para a gem ‘thinking-sphinx’)

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.9.tar.gz
tar -xzvf sphinx-0.9.9.tar.gz && cd sphinx-0.9.9
./configure --with-pgsql && sudo make && sudo make install
cd .. && rm -rf sphinx-0.9.9

Image Magick (necessário para a gem ‘gruff’)

sudo aptitude install imagemagick libmagick9-dev

Cups Sys (necessário para a gem ‘cups’)

sudo apt-get install libcupsys2-dev

Avahi – dnssd (necessário para a gem ‘specjour’)

sudo apt-get install libavahi-compat-libdnssd-dev

RVM

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

Atualizar RVM

rvm update --head

Rubies

rvm install ree
rvm install ruby-1.9.1
rvm install jruby

Gemset

gem sources -a http://gems.github.com
rvm gemset create caton
cp ~/.setuplinux/files/caton.gems .
rvm gemset import caton.gems
rm caton.gems
rvm --default ree@caton

Outros

Outros softwares:

  • Google Chrome
  • TweetDeck
  • Eclipse (IDE)
  • Skype

Duas pequenas soluções usando linha de comandos

Bom, este é um post curto (mas que acredito que terá outros similares) com pequenas soluções interessantes usando linha de comandos – uma quase “bala de prata” pra quem usa Linux e Mac.

Como deletar vários sub-diretórios de uma só vez

Eu precisei fazer isso quando queria retirar os sub-diretórios do svn de uma pasta, ou seja, “desversionar” um projeto.

Só pra entender melhor, um projeto versionado pelo svn, segue o padrão da seguinte estrutura de diretórios:

./.svn
./app/.svn
./app/models/.svn
./config/.svn

O comando pra remover todos estes diretórios é:

find -name ".svn" -type d -exec rm -rvf {} \;

E significa: procure por tudo que tiver o nome .svn e que for um diretório e quando encontrar, execute um comando rm -rvf nele. Os paramêtros do rm significam: r – recursive (pra apagar diretórios), v – verbose (exibir as pastas que estão sendo apagadas), f – force (não pedir confirmação pra apagar).

Como extrair uma parte de um arquivo grande pra outro menor

Eu precisei fazer isso porque o arquivo do qual seria extraído uma parte era grande demais (1,5gb) e o vim e o gedit (ou qualquer outro) teriam dificuldade pra abri-lo.

Vamos supor então que eu tenha um arquivo chamado banco.dump com 20 milhões de linhas e eu queria extraír o conteúdo das linhas 12.000.000 até a linha 12.000.500 para um outro arquivo que vou chamar de novo.txt.

O comando pra fazer isso é:

cat -n banco.dump | head -n 12000500 | tail -n 500 > novo.txt

Explicando: o paramêtro passado no head é a linha final (12000500) do range desejado. E o 500 passado no tail é quantas linhas pra trás ele deve pegar. E pra finalizar é só jogar tudo pra dentro do novo.txt.

[Tutorial] Introdução ao Flex 3 e instalação no Ubuntu

Introdução

Flex é um framework open-source mantido pela Adobe que resolve o grande problema de desenvolver RIA (aplicações de interfaces ricas) na plataforma Flash, uma vez que esta não é muito familiar para desenvolvedores, sendo mais usada por designers.

Muita gente confune achando que o Flex é uma linguagem ou uma plataforma, sendo que na verdade Flex é apenas um framework para o desenvolvimento do frontend das aplicações e o backend continuará sendo desenvolvido em qualquer linguagem, como Ruby on Rails, Java, etc. Basicamente, você utiliza o MXML para substituir o XHTML e o ActionScript 3 para substituir o JavaScript.

Neste tutorial irei explicar como instalar no Ubuntu as ferramentas necessárias para se trabalhar com Flex e uma introdução básica sobre o desenvolvimento de aplicações usando ele.

Atenção! Na data da publicação desse tutorial, segundo a Adobe Labs, a versão final do Flex Builder 3 não está disponível oficialmente para Linux, então usaremos a versão alpha 4.

Pré-requisitos

No Mac e no Windows, é possível instalar o Flex Builder de duas maneiras: baixando uma IDE baseada no Eclipse pronta para ser usada ou caso você já tenha o Eclipse (versão 3.3 ou superior) instalado, é possível baixar um plugin para ele. No Linux, como ainda está na versão alpha4, apenas a segunda maneira está disponível, e só funciona com o Eclipse 3.3. Teoricamente até funcionaria na versão 3.4 ou 3.5, mas existem alguns bugs e embora exista algumas gambiarras soluções alternativas, algumas pessoas (e eu também) relatam que isto não resolve 100% dos problemas, então irei instalar a versão 3.3 do Eclipse, com a qual funciona muito bem:
http://www.eclipse.org/downloads/moreinfo/custom.php

Obviamente que para rodar o Eclipse você precisará do JDK instalado, porém não irei explicar como fazer isto aqui, para não fugir do escopo do tutorial, mas você pode encontrar facilmente como fazer isso no Google :)

Depois, baixe o Flex Builder para Linux (atualmente na versão alpha 4):
http://labs.adobe.com/downloads/flexbuilder_linux.html

Instalação

Primeiramente vamos instalar o Eclipse. Para isto, basta descompactar o arquivo .tar.gz que você baixou e pronto, está feito (irei descompactá-lo na pasta /opt/eclipse, mas isto não é obrigatório).

Pra instalar o Flex Builder, abra um terminal, vá até a pasta com o arquivo que você baixou e execute os comandos:

chmod +x flexbuilder_linux_install_a4_081408.bin
sudo ./flexbuilder_linux_install_a4_081408.bin

O primeiro comando é para dar permissão de execução para o arquivo e o segundo para rodar a instalação. Aparecerá um assistente. Clique em ‘Next’, aceite os termos da licença, escolha o diretório de instalação (eu usei /opt/flex_builder), diga onde você instalou o Eclipse (eu o fiz em /opt/eclipse) e siga até o final da instalação.

Criando um “Hello world”

Depois de tudo instalado, abra o Eclipse e crie um novo projeto em: “File/New/Project” e selecione “Flex Builder/Flex Project”. Feito isto, clique em “Next”, selecione um nome para o projeto e clique em “Finish”. Pronto: seu primeiro projeto Flex está criado!

Como eu já falei, no Flex os MXMLs substituem o XHTML e o ActionScript 3 substitui o Javascript – basicamente. A partir disto, vamos então criar um “hello world”:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			public function helloWorld():void{
				Alert.show("Hello World!");
			}
		]]>
	</mx:Script>
	<mx:Button x="300" y="150" label="Hello World" click="helloWorld()" />
</mx:Application>

Aperte Ctrl+F11 e pronto!

Avançando um pouco mais

No Flex 3 Component Explorer, você pode ver os componentes que poderão ser usados em suas aplicações. Ele pode ser seu melhor amigo no começo de seus estudos.

Vou colocar mais um código aqui, que pega um texto digitado num editor de texto rico e o transforma em um texto comum ou gera código html. Compile e veja como fica:

<?xml version="1.0" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="center" verticalAlign="middle">

  <mx:Script>
    <![CDATA[
      public function setText(obj:Object,type:String):void{
        if(type=="text"){
          obj.text=rte.text;
        }else if(type=="html"){
          obj.text=rte.htmlText;
        }
      }
    ]]>
  </mx:Script>

  <mx:RichTextEditor id="rte" title="RichTextEditor" width="80%" height="75%" />
  <mx:HBox>
    <mx:Button label="Show Plain Text" click="setText(ta,'text');" />
    <mx:Button label="Show HTML Markup" click="setText(ta,'html');" />
  </mx:HBox>

  <mx:TextArea id="ta" width="80%" height="25%" />

</mx:Application>

Links interessantes

1. Flex in a Week

Mantido pela Adobe Flex Developer Center, são vídeos e tutoriais do tipo “aprenda em uma semana”:
http://www.adobe.com/devnet/flex/videotraining/

2. RestfulX

Se você vai usar Ruby on Rails, Merb, Sinatra, CouchDB ou Google App Engine no seu backend, experimente o RestfulX, o qual irá facilitar muito sua vida:
http://restfulx.github.com/