terça-feira, 20 de novembro de 2012

Dropbox - Linux - Command Line

Quando usar o Dropbox via command line no linux, uma boa alternativa para controlar é sar o script dropbox.py (https://www.dropbox.com/download?dl=packages/dropbox.py) para startar, parar, e verificar o status do dropbox.

Para mudar o local da pasta padrão de arquivos DropBox uma sugestão é utilizar link simbólico. Etapas:

dropbox stop 
mv ~/Dropbox /target/folder 
ln -s /target/folder/Dropbox ~/ 
dropbox start 

(dica original em http://www.dropboxwiki.com/Text_Based_Linux_Install)

quinta-feira, 1 de novembro de 2012

MySQL - Visualização / Criação / Alteração de Procedures e Functions

No MySQL para o usuário poder visualizar, criar ou alterar Procedures e Functions, são necessárias as seguintes permissões (GRANT):


-- PERMISSÃO DE LEITURA NO MYSQL PARA A TABELA DE PROCEDURES
GRANT SELECT ON mysql.proc TO '<USUARIO>'@'%';

-- CRIAÇÃO DE PROCEDURES
GRANT  CREATE ROUTINE ON <schema>.* TO '<USUARIO>'@'%';

-- ALTERAÇÃO DE PROCEDURES

GRANT  ALTER ROUTINE ON <schema>.* TO '<USUARIO>'@'%';


-- EXECUTAR PROCEDURES
GRANT  EXECUTE ON <schema>.* TO '<USUARIO>'@'%';


quinta-feira, 11 de outubro de 2012

Perl - Incluir diretorios ao @INC

O perl utiliza o array de ambiente @INC, que contém os diversos diretórios, para procurar os pacotes perl instalados.

Para acrescentar diretório(s) a este array (que na verdade é inacessível) podem ser utilizados 3 métodos:

1) Utilização da variável de ambiente PERL5LIB

Esta variável de ambiente assemelha-se a variável PATH e pode conter uma lista de diretórios.
O perl ao iniciar a execução de um programa acrescenta ao array @INC  o contéudo desta variável.

Sintraxe:
Linux/Unix/MacOsX
export PERL5LIB=/path/to/1:/path/to/2

Windows
set PERL5LIB=<unidade>:\path\to\1;<unidade>:\path\to\2


2) Comando use lib

Incluir no início do script/programa perl o comando use lib fará com que o perl acrescente ao array @INC este caminho.

Sintaxe:

use lib '/home/foobar/code';
use My::Module;

Observe que o use lib deve ser usado antes do use dos pacotes/módulos.

3) Executar o script com a opção -I

Ao executar o script usando o comando perl, passar o parâmetro -I (i maiúsculo) com o caminho desejado. O diretório será então adicionado ao array @INC apenas para a execução deste script.

Sintaxe:
perl -I /path/to/module script.pl



sexta-feira, 17 de agosto de 2012

Script DOS - IF - Teste Condicional

Esta é velha ! Bem Velha !
Para efetuar teste condicional em scripts BAT (DOS) utiliza-se o comando IF.
Sintaxe:

IF <CONDICAO> GOTO <LABEL>

onde:
<CONDICAO> condição a ser testada
<LABEL> nome do label para onde a execução do processo será desviada.

Veja o exemplo:


@echo off
SET E1=0
echo.
:exec_e1
if %E1% equ 1 goto exec_e2
echo Executando E1
:exec_e2
echo Executando E2
:end

No exemplo acima, se o valor de E1 for igual a 1 ele não executa o comando 'echo Executando E1' indo direto para a execução de 'echo Executando E2'.

quarta-feira, 15 de agosto de 2012

Linux: Administração de Usuários - via prompt

Comandos (via prompt) para administração de usuários.

1) Criação de novo usuário (adicionando-o a um novo grupo:

useradd -G <nome-grupo-1>,<nome-grupo-2>,<nome-grupo-3>,... <usuário>

onde:
<nome-grupo-1> : grupo(s) onde o usuário será incluído. Os grupos devem existir e deverão ser separados por ',' (vírgula)
<usuário> : username do usuário

exemplo:

useradd -G desenvolvedores renato

Cria o usuário 'renato' e o adiciona ao grupo desenvolvedores 

2) Verificar as credenciais de um usuário:

id <usuário>
onde:
<usuário> : username do usuário

exemplo:

id renato

3) Criação de novo grupo

groupadd <nome-grupo>

onde:
<nome-grupo> : nome do grupo que será criado

exemplo

groupadd desenvolvedores

Cria um novo grupo chamado desenvolvedores.

Os grupos existentes poderão ser verificados em /etc/group

4) Adicionar um usuário existente a um grupo

usermod -a -G <nome-grupo> <usuário>

onde:

<nome-grupo> : grupo onde o usuário será incluído. Este grupo deveŕa existir.
<usuário> : username do usuário

exemplo:

usermod -a -G desenvolvedores renato

Adiciona o usuário renato ao grupo desenvolvedores.

sexta-feira, 10 de agosto de 2012

Usando o RAR no MAC OSX

Para instalar o RAR no MAC OSX considere:

UnRarX (Interface com gui)- http://www.unrarx.com/index.html

Unrar - via port (prompt) :

sudo port selfupdate
sudo port install unrar

comandos (dicas obtidas em http://www.keleko.com/2010/extracting-rar-files-from-the-command-line-in-linux-unix-or-mac-osx/):


Extrai arquivo no diretório (sem manter o path original)
unrar e file.rar

Extrai arquivo no diretório (mantendo o path original)
unrar x file.rar

Listar arquivos
unrar l file.rar

Extrair arquivo com senha
unrar e -pPASSWORD file.rar

Extrair diversos arquivos com a mesma senha
find . -type f -name "*.part1.rar" -exec unrar e -pPASSWORD {} \;

terça-feira, 31 de julho de 2012

Atenção com SORT em LINUX

Por default, algumas compilações/distribuições LINUX (como o CentOS), tem o seu ambiente definido de modo com que o aplicativo SORT considere em seu processo de ordenação apenas os caracteres válidos em dicionário - ou seja, caracteres alfanuméricos (a/A-z/N e 0-9), sem pontuações (! ? , . <espaço>, etc). Caso você necessite que tais caracteres sejam considerados na ordenação deve-se, independente dos parâmetros do próprio SORT (como -d -g e outros) alterar a variável de ambiente LC_ALL para C, e na sequência executar o SORT. Veja como:

export LC_ALL=C; sort <parâmetros>

Esta observação faz parte inclusive da documentação do GNU-SORT, conforme texto abaixo:

*** WARNING *** The locale specified by the environment affects sort order.  Set LC_ALL=C  to  get  the  traditional sort order that uses native byte values.


segunda-feira, 30 de julho de 2012

Executando programas/jobs em Background

Para executar e controlar programas/scripts como jobs em background em ambiente Linux, utiliza-se os comandos bg, fg e jobs.

Para colocar um programa em background, pode-se fazer de duas maneiras:

1) Usando o & ao final do comando:
exemplo:

$ vi teste.txt &
[2] 6865


2) Após o início da execução do programa, usar o conjunto de teclas <CTRL-Z>

$ man fg


[1]+  Stopped                 man fg


Para verificar os jobs sendo executados utiliza-se o comando jobs
exemplo:
jobs

[1]-  Stopped                 man fg
[2]+  Stopped                 vi teste.txt


jobs -l
[1]-  6836 Stopped                 man fg
[2]+  6865 Stopped (tty output)    vi teste.txt



3) Para colocar o programa para ser executado em background utiliza-se o comando bg <job>
exemplo:

$ jobs
[1]-  Stopped                 man fg
[3]+  Stopped                 gedit teste.txt



$ bg 3
[3]+ gedit teste.txt &

$ jobs -l
[1]+  6918 Stopped                 man fg
[3]-  6942 Running                 gedit teste.txt &



4) Para trazer um programa que está sendo executado em background para foreground (pra frente) utiliza-se o comando fg <job>.
exemplo;
fg 1

quinta-feira, 26 de julho de 2012

Executar um comando periodicamente

Para executar um comando a cada tempo, pode-se usar o comando watch do linux:

Sintaxe

watch -n <segundos> '<comando>'

onde:
<segundos> intervalo de tempo (em segundos) - Default 2 segundos
<comando> comando a ser executado

Exemplo

watch 'ls -lhtr' -> Lista o diretório a cada 2 segundos


Compactar arquivos usando Multi Thread

Para compactar (e descompactar) arquivos em máquinas com mais de um núcleo a sugestão é utilizar o utilitário pigz (http://zlib.net/pigz/) que possui os mesmos paramêtros do gzip e trabalha com diversas threads !

terça-feira, 24 de julho de 2012

Como mover os "n" primeiros arquivos de um diretório para outro

O problema é simples:  você tem um diretório com MUITOS (mas muitos mesmo!) arquivos e, por simplicidade, você quer separá-los em "n" diretórios.

a solução?

mv `ls | head -100` ./subdir1/

a linha acima move os 100 primeiros arquivos listados no ls para o diretório subdir1.  Se você executar novamente, vai pegar os próximos 100 e assim sucessivamente...


quarta-feira, 18 de julho de 2012

Contando e calculando percentuais em MySQL

Queremos contar o número de chamadas no banco que tenham determinado comprimento ("len" do campo) e calcular seu percentual em relação ao total.  Como fazer?


select length(ass_a),count(*) as cont, count(*)*t.factor as pct from tabela_1
join (select 100/count(*) as factor from tabela_1) as t
group by 1;

O resultado:
Length(ass_a)    |    cont    |  pct
2                        |     683    | 0.2049
11                      | 284592  | 85.3776
(...)

terça-feira, 17 de julho de 2012

OpenVPN no Linux

Algumas dicas para uso do OpenVPN no Linux:

1) lembre-se de que no linux o ambiente é case-sensitive, por isso se no seu arquivo de configuração você apontar para Arquivo.crt ele deverá existir com este nome e não como arquivo.crt, por exemplo;

2) Script para usar o OpenVPN como serviço:

#!/bin/sh
#
# openvpn       This shell script takes care of starting and stopping
#               openvpn on RedHat or other chkconfig-based system.
#
# chkconfig: - 24 76
#
# processname: openvpn
# description: OpenVPN is a robust and highly flexible tunneling \
#              application that uses all of the encryption, \
#              authentication, and certification features of the OpenSSL \
#              library to securely tunnel IP networks over a single UDP \
#              port.
#

### BEGIN INIT INFO
# Provides: openvpn
# Required-Start: $network
# Required-Stop: $network
# Short-Description: start and stop openvpn
# Description: OpenVPN is a robust and highly flexible tunneling \
#              application that uses all of the encryption, \
#              authentication, and certification features of the OpenSSL \
#              library to securely tunnel IP networks over a single UDP \
#              port.
### END INIT INFO


# Contributed to the OpenVPN project by
# Douglas Keller <doug@voidstar.dyndns.org>
# 2002.05.15

# To install:
#   copy this file to /etc/rc.d/init.d/openvpn
#   shell> chkconfig --add openvpn
#   shell> mkdir /etc/openvpn
#   make .conf or .sh files in /etc/openvpn (see below)

# To uninstall:
#   run: chkconfig --del openvpn

# Author's Notes:
#
# I have created an /etc/init.d init script and enhanced openvpn.spec to
# automatically register the init script.  Once the RPM is installed you
# can start and stop OpenVPN with "service openvpn start" and "service
# openvpn stop".
#
# The init script does the following:
#
# - Starts an openvpn process for each .conf file it finds in
#   /etc/openvpn.
#
# - If /etc/openvpn/xxx.sh exists for a xxx.conf file then it executes
#   it before starting openvpn (useful for doing openvpn --mktun...).
#
# - In addition to start/stop you can do:
#
#   service openvpn reload - SIGHUP
#   service openvpn reopen - SIGUSR1
#   service openvpn status - SIGUSR2
#
# Modifications:
#
# 2003.05.02
#   * Changed == to = for sh compliance (Bishop Clark).
#   * If condrestart|reload|reopen|status, check that we were
#     actually started (James Yonan).
#   * Added lock, piddir, and work variables (James Yonan).
#   * If start is attempted twice, without an intervening stop, or
#     if start is attempted when previous start was not properly
#     shut down, then kill any previously started processes, before
#     commencing new start operation (James Yonan).
#   * Do a better job of flagging errors on start, and properly
#     returning success or failure status to caller (James Yonan).
#
# 2005.04.04
#   * Added openvpn-startup and openvpn-shutdown script calls
#     (James Yonan).
#

# Location of openvpn binary
openvpn=""
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
for location in $openvpn_locations
do
  if [ -f "$location" ]
  then
    openvpn=$location
  fi
done

# Lockfile
lock="/var/lock/subsys/openvpn"

# PID directory
piddir="/var/run/openvpn"

# Our working directory
work=/etc/openvpn

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
  echo "Networking is down"
  exit 0
fi

# Check that binary exists
if ! [ -f  $openvpn ] 
then
  echo "openvpn binary not found"
  exit 0
fi

# See how we were called.
case "$1" in
  start)
 echo -n $"Starting openvpn: "

 /sbin/modprobe tun >/dev/null 2>&1

 # From a security perspective, I think it makes
 # sense to remove this, and have users who need
 # it explictly enable in their --up scripts or
 # firewall setups.

 #echo 1 > /proc/sys/net/ipv4/ip_forward

 # Run startup script, if defined
 if [ -f $work/openvpn-startup ]; then
     $work/openvpn-startup
 fi

 if [ ! -d  $piddir ]; then
     mkdir $piddir
 fi

 if [ -f $lock ]; then
     # we were not shut down correctly
     for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
       if [ -s $pidf ]; then
  kill `cat $pidf` >/dev/null 2>&1
       fi
       rm -f $pidf
     done
     rm -f $lock
     sleep 2
 fi

 rm -f $piddir/*.pid
 cd $work

 # Start every .conf in $work and run .sh if exists
 errors=0
 successes=0
 for c in `/bin/ls *.conf 2>/dev/null`; do
     bn=${c%%.conf}
     if [ -f "$bn.sh" ]; then
  . ./$bn.sh
     fi
     rm -f $piddir/$bn.pid
            # Handle backward compatibility, see Red Hat Bugzilla ID #458594
            script_security=''
            if [ -z "$( grep '^[[:space:]]*script-security[[:space:]]' $c )" ]; then
                script_security="--script-security 2"
            fi
     $openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd $work $script_security
     if [ $? = 0 ]; then
  successes=1
     else
  errors=1
     fi
 done

 if [ $errors = 1 ]; then
     failure; echo
 else
     success; echo
 fi

 if [ $successes = 1 ]; then
     touch $lock
 fi
 ;;
  stop)
 echo -n $"Shutting down openvpn: "
 for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
   if [ -s $pidf ]; then
     kill `cat $pidf` >/dev/null 2>&1
   fi
   rm -f $pidf
 done

 # Run shutdown script, if defined
 if [ -f $work/openvpn-shutdown ]; then
     $work/openvpn-shutdown
 fi

 success; echo
 rm -f $lock
 ;;
  restart)
 $0 stop
 sleep 2
 $0 start
 ;;
  reload)
 if [ -f $lock ]; then
     for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
  if [ -s $pidf ]; then
      kill -HUP `cat $pidf` >/dev/null 2>&1
  fi
     done
 else
     echo "openvpn: service not started"
     exit 1
 fi
 ;;
  reopen)
 if [ -f $lock ]; then
     for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
  if [ -s $pidf ]; then
      kill -USR1 `cat $pidf` >/dev/null 2>&1
  fi
     done
 else
     echo "openvpn: service not started"
     exit 1
 fi
 ;;
  condrestart)
 if [ -f $lock ]; then
     $0 stop
     # avoid race
     sleep 2
     $0 start
 fi
 ;;
  status)
 if [ -f $lock ]; then
     for pidf in `/bin/ls $piddir/*.pid 2>/dev/null`; do
  if [ -s $pidf ]; then
      kill -USR2 `cat $pidf` >/dev/null 2>&1
  fi
     done
     echo "Status written to /var/log/messages"
 else
     echo "openvpn: service not started"
     exit 1
 fi
        ;;
  *)
 echo "Usage: openvpn {start|stop|restart|condrestart|reload|reopen|status}"
 exit 1
 ;;
esac
exit 0

Para instalar:
- Copiar este arquivo para /etc/init.d/openvpn
- Setar a configuração deste arquivo como executavel (chmod +x)
- Criar o serviço (chkconfig --add openvpn)
- Os arquivos de configuração devem estar em /etc/openvpn


terça-feira, 3 de julho de 2012

Habilitar SSH no Ubuntu

Para habilitar o acesso SSH ao Ubuntu (10.04 LTS) deve-se instalar o pacote OpenSSH

sudo apt-get install openssh-server

Após instalado o serviço, pode-se controlar o start / stop a partir do comando service ou ainda a partir do próprio script de do ssh

sudo service ssh start | stop | restart
sudo /etc/init.d/ssh start | stop |restart

O arquivo de configuração do SSH fica em:

/etc/ssh/sshd_config

sexta-feira, 29 de junho de 2012

PHP - Erro na Interpretação

Em um servidor apache, caso o php não esteja sendo devidamente interpretado - devido o arquivo php não possuir a diretiva <?php no início - deve-se alterar no arquivo php.ini (normalmente encontrado em /etc ) o parâmetro short_open_tag para On, conforme abaixo:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
short_open_tag = On

Importante: Após a alteração, o serviço apache (httpd no fedora/CentOS) deverá ser restartado.

Desabilitar o SELINUX

Caso deseje desabilitar o SELINUX (segundo o Wikipedia: "SELinux provê uma política de segurança sobre todos os processos e objetos do sistema baseando suas decisões em etiquetas contendo uma variedade de informações relevantes à segurança. A lógica da política de tomada de decisões é encapsulada dentro de um simples componente conhecido como servidor de segurança ('security server') com uma interface geral de segurança." - http://pt.wikipedia.org/wiki/SELinux) no FEDORA ou no CentOS.

Definitivo:
Alterar o arquivo /etc/selinux/config, mudando o parâmetro SELINUX para disabled. Certifique-se de ter acesso ao arquivo.

Temporário:
No modo root, usar o seguinte comando:
echo 0 > /selinux/enforce

Serviços no Linux

Para iniciar automaticamente alguns serviços (ou mesmo para executar alguns serviços quando do encerramento do sistema) utiliza-se o comando chkconfig, conforme abaixo (lembre-se de executá-lo com a devida permissão de root - sudo)

Para adicionar o serviço: chkconfig --add
Sintaxe:

chkconfig --add <serviço>

<serviço> - Nome do serviço (programa) que será executado.


Para configurar o status do serviço
Sintaxe

chkconfig --runlevel <level0 a level6> <serviço> [on|off]

Onde, runlevel
0 - Halt -> Desliga o Sistema

1 - Mono-tarefa (Single-User Mode) -> Não inicia os daemons (serviços), multi-tarefa
2 - Multi-tarefa (Multi-User Mode) -> Inicia o sistema em modo de texto, multi-tarefa, multi-utilizador
3 - Multi-tarefa com Rede (Multi-User Mode with Network) -> Inicia o sistema em modo de texto, multi-tarefa, multi-utilizador e com suporte de rede
4 - Não usado
5 -  Modo Gráfico (X Window System) -> Runlevel 3 + X Window System. Modo gráfico, multi-tarefa, multi-utilizador e com suporte de rede
6 -  Reboot -> Reinicia o sistema

<serviço> - Nome do serviço (programa) que será executado.

on - Ligado (start)
off - Parado (stop)

Exemplo:

Configurar o serviço do MySQL para start automático no modo multi-tarefa:


chkconfig --add mysqld
chkconfig --level 35 mysqld on

quinta-feira, 28 de junho de 2012

Shell - renomear vários arquivos

Em ambiente Unix-like, para renomear vários arquivos uma boa dica é usar o comando script for com awk.

Sintaxe:
for i in (ls <máscara_arquivos>); do echo $i  | awk '{a=$0; b=a; gsub(".txt",".pl",b); print "mv " a " "b;}' | bash; done

Exemplo:

for i in $(ls *.txt); do echo $i | awk '{a=$0; b=a; gsub(".txt",".pl",b); print "mv " a " "b;}' | bash; done

terça-feira, 26 de junho de 2012

Ubuntu - Atualização/Instalação de Pacotes

Para manter atualizada a distribuição UBUNTU, através do terminal (prompt) use os seguintes comandos, que deverão ser executados com perfil de root (ou seja, deve ser usado o comando sudo):

sudo apt-get update -> Atualiza os repositórios locais da máquina com as informações a respeito de atualizações de pacotes

sudo apt-get upgrade -> Efetua o update dos pacotes

Para simplificar o processo, pode ser executado da seguinte forma:

sudo apt-get update; sudo apt-get upgrade

Para instalar novos pacotes, use o parâmetro Install

sudo apt-get install <pacote>

Exemplo:

sudo apt-get install apache2

Para pesquisar pacotes uso o comando apt-cache com o parâmetro search

sudo apt-cache search <termo>

Exemplo:

sudo apt-cache search mysql

Caso deseje saber mais sobre um pacote use o comando apt-cache com o parâmetro show

sudo apt-cache show <pacote>

Exemplo:

sudo apt-cache show apache2

quinta-feira, 19 de abril de 2012

Linux - Habilitar acesso SSH

De modo a liberar o acesso a uma máquina através de SSH basta 'startar' o serviço SSHD e desabilitar os serviços de controle de ips - iptables e ip6tables

sudo service sshd start
sudo service iptables stop
sudo service ip6tables stop

De modo a deixar o processo automático quando o SO for carregado:

** Executar os comandos como root **

chkconfig sshd on
chkconfig iptables off
chkconfig ip6tables off

MySQL - Alterar Senha

Para o usuário alterar a própria senha:
SET PASSWORD = PASSWORD('<senha>');

Para o administrador (root) alterar a senha de um usuário:
SET PASSWORD FOR '<usuario>'@'localhost' = PASSWORD('<senha>');

Via prompt:
mysqladmin -u <usuario> -h <host> password "<senha>"

MySQL - Criando Usuarios

O passo-a-passo abaixo mostra como criar um usuário no MySQL, com um banco de dados (schema) próprio e também com acesso de leitura ao demais bancos (schemas) e acesso de Load de dados.

** Conectar como root **

** Criação de usuário Local e criação de um banco de dados (schema) para o usuário
CREATE DATABASE <usuario>;
CREATE USER '<usuario>'@'localhost' IDENTIFIED BY '<senha>';

GRANT ALL PRIVILEGES ON <banco>.* TO '<usuario>'@'localhost';
GRANT SELECT ON *.* TO '<usuario>'@'localhost';

GRANT FILE ON *.* TO '<usuario>'@'localhost';

** Criação de usuário para acesso remoto de qualquer ponto (%) - substituir o 'localhost' por '%'
CREATE USER '<usuario>'@'%' IDENTIFIED BY '<senha>';

GRANT ALL PRIVILEGES ON <banco>.* TO '<usuario>'@'%';
GRANT SELECT ON *.* TO '<usuario>'@'%';

GRANT FILE ON *.* TO '<usuario>'@'%';



quarta-feira, 18 de abril de 2012

iMac - CentOS - Configuracao de Video

Passo a passo para instalar em uma maquina iMac com CentOS o adaptador de Video:

** O comandos dever ser executado de preferencia usando o usuario ROOT **

Pre-requisitos:
1) GCC (Gnu C)
2) Make
3) Kernel-devel

Passo-a-passo
1) Baixar o adaptador do site (normalmente da AMD - ver modelo do video)
2) Executar o adapatador (bash ./<arquivo>)
3) Verificar o log da instalacao (normalmente em /usr/share/ati/fglrx-install.log)
4) Editar o arquivo /etc/modprobe.d/blacklist.conf, incluindo no final do mesmo  as linhas:
 blacklist radeon
 blacklist radeonhd
5) Executar o comando aticonfig para criar os parametros do X11/xorg.conf
 aticonfig --initial
6) Editar o arquivo criado /etc/X11/xorg.conf incluindo no mesmo os seguintes parametros:
 na secao "Device" incluir Option <tab> "SWCursor" "true"
7) Rebotar a maquina
8) Verificar se foi criado no menu System/Preferences link(s) para o aplicativo de controle de video


### ATENCAO ###
Estes passos deverao ser refeitos a toda atualizacao de Kernel
### ATENCAO ###

sexta-feira, 13 de abril de 2012

Fone de Ouvido USB + iMac com CentOS

No trabalho, uso um iMac com o CentOs como sistema operacional.

Precisei usar um fone de ouvido usb, já que o jack de fone de ouvido comum teima em não funcionar (ToDo: descobrir o que ocorre). Enfim, para isso fiz:

Localizei o módulo de som:
> lsmod | grep snd
snd_hda_intel

E desabilitei ele adicionando a linha "blacklist snd_hda_intel" ao fim do arquivo "/etc/modprobe.d/blacklist.conf"
> vi /etc/modprobe.d/blacklist.conf
blacklist snd_hda_intel

Depois... só reiniciar... ;D

Bash FOR + AWK

Esses tempos me deparei com a necessidade de concatenar diversos arquivos de um diretório, com base em um filtro, que estavam, originalmente, compactados, adicionando ao ínicio da linha um sequencial e ao fim da linha o nome do arquivo de origem e número da linha neste arquivo.

Para isso usei:

for i in $(ls arquivos/*.gz); do gzip -dc $i > $i.temp; awk 'substr($0, 34,6)=="201111"{print $0 "|" FILENAME "|" NR}' $i.temp;rm $i.temp; done | awk 'BEGIN{c=1}{printf ("%010d%s\n", c++, $0)}' > arquivo_concatenado.txt

Onde:
for i in $(ls arquivos/*.gz) #itens de (ls arquivos/*.gz) para a variavel i
do #início do laço
gzip -dc $i > $i.temp; #descompacta o arquivo para nomedoarquivo.temp
awk 'substr($0, 34,6)=="201111"{print $0 "|" FILENAME "|" NR}' $i.temp; #com o awk filtra-se a linhas onde o substring atenda a condição desejada (substr($0, 34,6)=="201111") e imprime-se o conteúdo da linha + pipe + NOME DO ARQUIVO + pipe + NUMERO DA LINHA
rm $i.temp; #remove o arquivo temporario criado na descompactação
done < fim do laço

[]'s

Oracle - Problemas com o Start do Listener

Se o serviço de Listener do Oracle não estiver 'startando' uma boa forma de tentar descobrir o que acontece é usando o programa lsnrctl via prompt, e digitando o comando start. Ele exibirá então na tela, caso ocorra algum erro, os arquivos de parâmetros que estão sendo lidos para o start do Listener.

Em tempo, normalmente são os parâmetros configurados nos arquivos listener.ora, sqlnet.ora e tnsnames.ora que ficam dentro do subdiretório Network/Admin

Resumindo:
lsnrctl
start

quinta-feira, 12 de abril de 2012

MAC - Variáveis de ambiente

se vc tiver erros do tipo: "library not found: .DYLIB" etc e tal... tente corrigir da seguinte forma:

1) Localize no seu MAC o .DYLIB que apareceu no erro;
2) digite "export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:[diretorio dylib]"
3) Tente de novo..
4) Funcionou? Coloque a linha no arquivo ~/.bash_profile.

Se não funcionar... well... funcionou para mim... vc vai ter que continuar investigando.

segunda-feira, 9 de abril de 2012

CentOS - HPFS+

Para habilitar a leitura e gravação de filesystens no formato HPFS+ (default do Mac OS X) basta instalar o pacote kmod-hfsplus do repositório Elrepo.org (http://elrepo.org/tiki/tiki-index.php)

Passo a passo (Instalação do repositório e do pacote) :

rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm
yum install kmod-hfsplus

quinta-feira, 5 de abril de 2012

MYSQL - UPDATE com Tabelas Cruzadas

Exemplos de Update no MySQL com cruzamento de tabelas:


UPDATE product p, productPrice pp
SET pp.price = pp.price * 0.8
WHERE p.productId = pp.productId
AND p.dateCreated < '2004-01-01'



UPDATE product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8
WHERE p.dateCreated < '2004-01-01'



UPDATE product p
LEFT JOIN productPrice pp
ON p.productId = pp.productId
SET p.deleted = 1
WHERE pp.productId IS null



UPDATE product p
INNER JOIN productPrice pp
ON p.productId = pp.productId
SET pp.price = pp.price * 0.8,
p.dateUpdate = CURDATE()
WHERE p.dateCreated < '2004-01-01'

sexta-feira, 23 de março de 2012

MySQL - RowNum

O MySQL (até a versão 5.1, pelo menos) não possui uma coluna que retorna o número da linha, semelhante ao ROWNUM do Oracle. Para 'driblar' esta situação, podemos criar uma variável auxiliar, iniciando-a com zero e a cada linha retornada, acrescentar 1 a ela. Veja como:

Sintaxe 1:

SET @<variavel>:=0;
SELECT @<variavel>:=@<variavel>+1, <col-1>, <col-2>, ..., <col-n> from <tabela>;


Exemplo:

SET @rownum:=0;
SELECT @rownum:=@rownum+1 as rownum, t.* from tabelinha t;


Atenção:
A variável deve ser reiniciada (zerada) a cada execução do select !


Sintaxe 2:



SELECT @<variavel>:=@<variavel>+1, <col-1>, <col-2>, ..., <col-n> from <tabela>, (select @<variavel>:=0) r;

Exemplo:

SELECT @rownum:=@rownum+1 as rownum, t.* from tabelinha t, (select @rownum:=0) r;

MySQL - Incluir Sequence em Tabela

Para incluir um sequence (chave primária) em uma tabela já existente, basta alterar a tabela inserindo a coluna e adicionando a chave primária. Sintaxe:


alter table <database>.<tabela>
    add <coluna> int unsigned not null auto_increment first,
    add primary key (<coluna>);

Exemplo:


alter table tabelinha
    add rec_id int unsigned not null auto_increment first,
    add primary key (rec_id);

quinta-feira, 22 de março de 2012

Linux - MySQL e AWK facilitam sua vida

Podemos usar comandos bash (script), awk e mysql juntos para de modo a facilitar o dia-a-dia do usuário.
Comandos bash, mysql e awk podem ser concatenados através de pipe '|'. Abaixo alguns exemplos:

- Efetuar o 'dump' de algumas tabelas de um banco de dados:
echo "show tables like 'abobrinha%'" | mysqlrk -qs | awk '{print $1}' | mysqldump <db> -u <user> -p > <arquivo_dump>.sql

1) Cria um 'comando-mysql' usando o comando echo (bash), que irá gerar uma lista de todas as tabelas iniciadas por abobrinha
echo "show tables like 'abobrinha%'" | mysqlrk -qs | awk '{print $1}' | mysqldump <db> -u <user> -p > <arquivo_dump>.sql


2) O alias mysqlrk chama o mysql usando o comando gerado pelo bash:
echo "show tables like 'abobrinha%'" | mysqlrk -qs | awk '{print $1}' | mysqldump <db> -u <user> -p > <arquivo_dump>.sql


3) O resultado do mysql (relação de tabelas) é passado para o awk, que apenas imprime linha a linha (na verdade, este comando não se faz necessário, mas eu o coloquei como uma forma ilustrativa do que pode ser feito:
echo "show tables like 'abobrinha%'" | mysqlrk -qs | awk '{print $1}' | mysqldump <db> -u <user> -p > <arquivo_dump>.sql


4) A saída do awk é então enviada ao comando mysqldump que gera um dump das tabelas informadas, direcionando estas informações para o arquivo indicado:
echo "show tables like 'abobrinha%'" | mysqlrk -qs | awk '{print $1}' | mysqldump <db> -u <user> -p > <arquivo_dump>.sql



- Excluir tabelas de um banco de dados:

echo "show tables like 'abobrinha%old'" | mysqlrk -qs | awk '{print "drop table " $1 ";"}' | mysqlrk -q --verbose --verbose > mysql.log


1) Cria um 'comando-mysql' usando o comando echo (bash), que irá gerar uma lista de todas as tabelas iniciadas por abobrinha e terminada por old
echo "show tables like 'abobrinha%old'" | mysqlrk -qs | awk '{print "drop table " $1 ";"}' | mysqlrk -q --verbose --verbose > mysql.log

2) O alias mysqlrk chama o mysql usando o comando gerado pelo bash:

echo "show tables like 'abobrinha%old'" | mysqlrk -qs | awk '{print "drop table " $1 ";"}' | mysqlrk -q --verbose --verbose > mysql.log



3) O resultado do mysql (relação de tabelas) é passado para o awk, que concatena a cada nome de tabela a instrução de exclusão da tabela (drop table):

echo "show tables like 'abobrinha%old'" | mysqlrk -qs | awk '{print "drop table " $1 ";"}'mysqlrk -q --verbose --verbose > mysql.log



4) A saída do awk é então enviada ao alias mysqldrk que executa as instruções recebidas, e grava o log no arquivo de log

echo "show tables like 'abobrinha%old'" | mysqlrk -qs | awk '{print "drop table " $1 ";"}' | mysqlrk -q --verbose --verbose > mysql.log




Linux -Alias

Criar 'alias' (apelidos) para comandos mais usados é uma técnica bem legal no ambiente linux. Para tanto basta incluir o 'alias' no arquivo .bash_profile.

Sintaxe:
alias <apelido>='<comando com parâmetros>' (entre aspas simples)

Exemplos:
alias mysqlrk='mysql rkolbe -u rkolbe -p****' - Este comando cria um apelido chamado mysqlrk que na verdade se trata da chamada ao prompt mysql com alguns parâmetros, como banco/schema, usuário de acesso e senha.

sexta-feira, 16 de março de 2012

Divx videos em Linux - Fedora e CentOS

Para assistir filmes no formato divx (xsub) no Linux, usar o programa console ffplay (instalado junto com o pacote ffmpeg)

Sintaxe: ffplay -sst <n> <arquivo.divx>, onde <n> é o número da legenda, sendo 0 a primeira
Exemplo: ffplay -sst 0 Planet.Hulk.divx

Codecs de Video e Musica - Fedora e CentOS

Codecs MP3, DIVX e outros nas distribuicoes CentOS e Fedora (baseadas em Red Hat)

GStreamer - Codecs Vídeo e Áudio (http://gstreamer.freedesktop.org)

Módulos disponíveis no repositório RPMFusion (http://rpmfusion.org/ e http://repoforge.org/)
gstreamer-ffmpeg
gstreamer-plugins-bad
gstreamer-plugins-ugly

quinta-feira, 16 de fevereiro de 2012

Script MySQL via prompt

Para executar um script mysql via prompt:

mysql <database> -u <usuario> -p<senha> --verbose --verbose < <script> > <arquivo_log>, onde:

<database> database ou schema
<usuario> usuario mysql
<senha> senha do usuário
<script> arquivo com o(s) script(s) para execução
<arquivo_log> arquivo de log da execução do script

Compactando e Descompactando Arquivos - GZIP

Compactar arquivo, substituindo o arquivo original pelo arquivo compactado:
gzip <arquivo>, onde <arquivo> pode inclusive aceitar wildcars como * e ? - Observação cada arquivo será compactado individualmente e o arquivo original será substituído por <arquivo>.gz

Compactação de arquivo sem a substituição do arquivo original (redirecionamento do arquivo compactado):
gzip -c <arquivo> > <arquivo_compactado>

Descompactação de arquivo, substituindo o arquivo original pelo arquivo descompactado:
gzip -d <arquivo>.gz, onde <arquivo>.gz pode inclusive aceitar wildcars como * e ? - Observação cada arquivo será descompactado individualmente e o arquivo original será substituído por <arquivo>

Descompactação de arquivo sem a substituição do arquivo original (redirecionamento do arquivo descompactado):
gzip -dc <arquivo>.gz > <arquivo_descompactado>

quinta-feira, 26 de janeiro de 2012

Fedora e CentOS - Repositórios Úteis

Para as distribuições linux FEDORA um bom repositório de softwares é o RPM Fusion http://rpmfusion.org !

Para instalar o acesso ao repositório basta acessar a página http://rpmfusion.org/Configuration e clicar no link respectivo a versão do Fedora/CentOS que você está usando !

Outro lugar legar para procurar softwares é o ATprms - http://packages.atrpms.net/ . Neste você encontra os softwares distribuídos por versão e classificados de acordo com a 'estabilidade' do mesmo.

Um terceiro repositorio interessante (principalmente para o CentOS) e o RPMForge - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge e http://repoforge.org/

Existe ainda um outro repositório onde podem ser encontrados outros pacotes interessantes: El Repo - http://elrepo.org/tiki/tiki-index.php .

Linux - Mapeamento de Unidades

Mapear Unidades (mount)

Mapear unidade de partição windows
1) Criar estrutura de diretório para fazer o mapeamento (p. ex: /windows/c)
2) Para mapeamento definitivo - alterar o arquivo /etc/fstab incluindo no final do mesmo a nova unidade a ser mapeada (ex./dev/sda1 /windows/C ntfs defaults 0 0)

Mapear unidade de rede
1) Criar estrutura de diretório para fazer o mapeamento (p. ex: /rede/transferencia)
2) Para mapeamento definitivo - alterar o arquivo /etc/fstab incluindo no final do mesmo a nova unidade a ser mapeada, usando como tipo cifs e passando como parametros username, password e dominio (//<servidor>/transferencia /rede/transferencia cifs dom=<dominio>,user=<usuario>,pass=<senha> 0 0)

Ativar MySQL - no Linux

Após instalar o mysql deve-se executar o mysqladmin para configurar a senha de root conforme abaixo:
/usr/bin/mysqladmin -u root password <'senha'> (entre aspas simples)
/usr/bin/mysqladmin -u root -h localhost.localdomain password <'senha'> (entre aspas simples)

Linux - Comandos Úteis - Parte 1

ls -lhtr - Listar Arquivos em ordem decrescente de data
mv <arquivo/diretorio> - move ou renomeia <arquivo/diretorio>
split - divide arquivo em partes (exemplo: split --lines=50000 --numeric-suffixes --suffix-length=10 tap_nconc.txt CDRROAMING20110524)
wc -l <arquivo> - Conta a quantidade de linhas
wc -L <arquivo> - Número de bytes da maior linha
wc -c <arquivo> - Quantidade de bytes
wc -m <arquivo> Quantidade de caracters
df - Ver consumo do filesystem
tar -xvzf <arquivo> - Descompactar (gzip+tar)
rm -fr <diretorio> - Apaga contéudo de diretório recursivo
service <servico> [start|stop] - Inicia ou para serviços
chkconfig --level [012345] <servico> [off|on] - Configura o início automático de serviço
sha1sum <arquivo> - Gera hash de 160 bits
md5sum <arquivo> - Gera hash de 128 bits
dos2unix - converte arquivos dos para unix
unix2dos - converte arquivos unix para dos
wget - efetua download de link na internet

Dicas de TI - O Começo

Com mais de 20 anos de experiência em Desenvolvimento de Sistemas de TI, resolvi começar este blog incluindo diversas dicas - que na verdade são lembretes para mim mesmo - em TI. Estas dicas vão desde comandos básicos em sistemas operacionais (Linux, Windows) até alguns truques que precisei usar para contornar situações diversas.