quarta-feira, 30 de março de 2011

Visão Geral de um Sistema Linux

Um sistema operacional UNIX consiste de um núcleo (kernel) e alguns programas do sistema.  Há ainda aplicações que executam diversas tarefas. O kernel é o coração do sistema operacional. Ele mantem o controle dos arquivos em disco, inicializa programas e executa-os de forma concorrente, aloca memória e outros recursos para os diversos processos, recebe e envia pacotes da rede, e assim por diante. O kernel faz muito pouco sozinho, na verdade ele provê ferramentas com as quais os serviços podem ser desenvolvidos. Ele ainda evita que qualquer um possa acessar diretamente os componentes de hardware, forçando o uso das ferramentas disponíveis. Deste modo, o kernel mantem uma certa proteção entre os usuários. As ferramentas disponibilizadas pelo kernel são utilizados através das chamadas ao sistema (system calls).

Os programas de sistema utilizam as ferramentas disponibilizadas pelo kernel para implementar os diversos serviços necessários ao sistema operacional. Programas de sistema e todos os demais programas, são executados ‘sobre o kernel’, o qual é denominado modo usuário (user mode). a diferença entre programas de sistemas e aplicações esta no seu objetivo: as ultimas visam que coisas uteis sejam realizadas (brincar, caso seja um jogo), enquanto os primeiros são necessários para manter o sistema operacional funcionando. Um editor de texto é uma aplicação, o telnet é um programa de sistema. a diferença é algumas vezes muito pequena, e somente é importante para classificadores compulsivos.

Um sistema operacional pode ainda conter compiladores e suas bibliotecas correspondentes (gcc e C no caso do Linux), ainda que nem todas as linguagens devam ser parte integrante do sistema operacional. Documentação e até mesmo jogos podem fazer parte. Tradicionalmente o sistema operacional tem sido definido como o conteúdo nos discos de instalação, o que no Linux pode variar bastante, já que ele pode ser encontrado em diversos sites ao redor do mundo.

segunda-feira, 14 de março de 2011

Datas de Calendário em Informix

Datas de calendário em Banco de Dados Informix são armazenados como inteiros representando o numero de dias corridos desde 31 de dezembro de 1899. Como valores DATE são inteiros, eles podem ser usados em expressões aritméticas. Por exemplo:

SELECT order_date + 5 FROM orders

O exemplo acima adiciona cinco dias para cada data do pedido.

Quando a data é exibida por um servidor de banco de dados IBM Informix, o formato padrão é mm/dd/aaaa. Funções podem ser aplicadas para os valores armazenados em um tipo de dado DATE para modificar o modo de exibição, ou extrair o dia, dia da semana, e assim por diante.

Os tipos de dados cronológicos adicionais são:

  • DATETIME – registra um ponto exato no tempo, com precisão de um ano até uma fração de segundo. Quando você define uma coluna DATETIME. você pode especificar a sua precisão.
  • INTERVAL- armazena a medida de tempo entre dois tipos de dados DATETIME.

Algumas das funções relatadas para data e hora são listadas abaixo. Você pode usar essas funções na clausula SELECT ou na clausula WHERE de uma query. Essas funções retornam um valor que corresponde à expressão ou argumentos que você usa para chamar a função.

  • DAY (expressão date / datetime) – retorna um valor inteiro que representa o dia do mês.
  • MONTH (expressão date / datetime) – retorna um valor inteiro que representa o mês.
  • WEEKDAY (expressão date / datetime) – retorna um inteiro que representa o dia da semana (de 0 a 6, onde Domingo é 0 (zero)).
  • YEAR (expressão date / datetime) – retorna um inteiro de quatro dígitos que representa o ano.
  • DATE (expressão nondate) – retorna um valor DATE que corresponde a uma expressão caractere com a qual você chamou.
  • EXTEND (expressão date / datetime, [ primeiro ao ultimo]) – ajusta a precisão do valor DATE ou DATETIME.
  • MDY (mês, dia, ano) – retorna um DATE no formato mm/dd/aaaa com o mês, dia e ano informados.
  • CURRENT – retorna um valor DATETIME do instante corrente.

Uma expressão date / datetime é uma expressão que corresponde a um valor DATE ou DATETIME.

Exemplos:

Comparando Datas

SELECT customer_num, call_dtime
FROM cust_calls
WHERE call_dtime >= ‘2011-03-14’;

 

SELECT customer_num, call_dtime
FROM cust_calls
WHERE call_dtime >= DATE(‘03/14/2011’)

Extraindo o Mês

SELECT customer_num, MONTH(call_dtime)
FROM cust_calls

As funções TODAY e CURRENT

SELECT customer_num, MONTH(call_dtime)

FROM cust_calls

WHERE MONTH(call_dtime) = MONTH(CURRENT)

AND YEAR(call_dtime) < YEAR(CURRENT);

SELECT customer_num, MONTH(call_dtime)

FROM cust_calls

WHERE MONTH(call_dtime) = MONTH(TODAY)

AND YEAR(call_dtime) < YEAR(TODAY);

Também as funções TODAY ou CURRENT podem ser usadas para extrair o mês, dia, ano ou dia da semana da data do sistema. Esse exemplo usa a função TODAY e CURRENT para comparar os valores da coluna call_dtime para o mesmo mês corrente, mas do ano anterior.

A função TODAY retorna a data do sistema como um tipo DATE. A função CURRENT retorna o valor como um DATETIME.

A função EXTEND

SELECT customer_num call_dtime

FROM cust_calls

SELECT customer_num, EXTEND(call_dtime, month to minute)

FROM cust_calls

O primeiro exemplo acima retorna os valores de customer_num e call_dtime da tabela cust_calls sem o uso da função EXTEND. no segundo exemplo, a função EXTEND restringe os valores DATETIME da coluna call_dtime da tabela cust_calls exibindo somente os sub-campos especificados, de um mês ate minuto. Note que o ano não é retornado nesse exemplo.

A função TO_CHAR

SELECT TO_CHAR(call_dtime, ‘%A %B %d %Y %R’)

FROM cust_calls

A função TO_CHAR converte um valor DATE ou DATETIME para uma sequencia de caractere. A sequencia de caracteres contem a data no formato requisitado. Se você omitir todos os símbolos de formato, o formato padrão de data é usado.

Símbolo:

Faixa de caractere retornada:

%A

Nome completo do dia da semana

%B

Nome completo do mês

%d

Dia do mês como um decimal

%m

Mês como um decimal

%Y

Ano como um decimal de 4 dígitos

%R

Hora do dia no formato de 24 horas

Nota: A função TO_CHAR foi introduzida com o IDS 7.3

A função TO_DATE

SELECT * FROM cust_calls

WHERE call_dtime = TO_DATE(‘2011-03-14 14:56’,’%Y-%m-%d %H:%M’)

A função TO_DATE converte uma sequencia de caracteres para um valor DATETIME. A sequencia de caracteres é convertida de acordo como o formato especificado. Os símbolos de formato para a função TO_CHAR pode ser usados, bem como:

Símbolo:

Faixa de caractere retornada:

%H

Numero de horas

%M

Numero de minutos

Se você omitir o formato, o formato padrão do DATETIME é usado para converter a expressão.

sexta-feira, 11 de março de 2011

UNIQUE ou DISTINCT?

Use DISTINCT ou UNIQUE para exigir que as colunas em que o índice baseia-se aceitar apenas os dados únicos. Se você não especificar a palavra-chave UNIQUE ou DISTINCT, o índice vai permitir valores duplicados nas colunas indexadas ( ou um conjunto de colunas indexadas). O exemplo abaixo cria um índice único:
CREATE UNIQUE INDEX c_num_ix ON customer (customer_num)
Um índice único impede valores duplicados na coluna customer_num. A coluna com um índice único pode ter, no máximo, um valor NULL.

A palavra-chave DISTINCT e UNIQUE são sinônimos neste contexto, a declaração abaixo tem o mesmo efeito da declaração acima:
CREATE DISTINCT INDEX c_num_ix ON customer (customer_num)
Os índices em ambos os exemplos é mantida em ordem ascendente, qual é a ordem padrão.

Você também pode evitar dados duplicados em uma coluna ou um conjunto de colunas criando um UNIQUE CONSTRAINT com a declaração CREATE TABLE ou ALTER TABLE.

Em uma Query você pode evitar as linhas duplicadas de dados no resultado retornado incluindo a palavra-chave DISTINCT, ou o seu sinônimo UNIQUE, em seu comando SELECT. UNIQUE é uma extensão do IBM Informix para o padrão ANSI.

Quando você usa a palavra-chave DISTINCT ou UNIQUE, você deve coloca-la imediatamente apos o comando SELECT, no inicio de seleção. Ele é aplicado para toda a linha.

A palavra-chave DISTINCT ou UNIQUE, suprime os valores duplicados.

quarta-feira, 9 de março de 2011

Usando Expressões Regulares no SquidGuard

Nunca será possível adicionar todas as paginas que deseja bloquear pelos arquivos domains e url.  Para alcançar um nível maior de segurança podemos usar o expressionlists.
Em uma expressionlist podemos entrar com palavras que provavelmente não se encontram em partes nos domains e urls. Cada domains e url  serão comparados com as entradas encontradas em expressionlist.

Atenção: Somente use o expressionlist se você tem certeza que não se enquadram em sites inocentes. Além disso o uso dessas listas podem impactar na performance do sistema.

  1. Adicionando listas de expressões na configuração.
    Listas de Expressões são incluídas na tag dest. O exemplo abaixo mostra como fica o arquivo de configuração do squidGuad:

    Usando a lista de expressões para bloquear porn

    dest porn {
          domainlist        porn/domains
          urllist                porn/urls
          expressionlist   porn/expressions
    }
    Podemos adicionar a lista de expressões para cada destino definido (lembre-se: Performance!). SquidGuard procura pelo arquivo de expressões definido em dbhome.
  2. Sintaxe das listas de expressões
    O formato do arquivo expressionlist são linhas com expressões regulares:

    .

    Corresponde a qualquer caracter (use “\.” para corresponder a um “.”)

    [abc] Corresponde a um dos caracteres (“[abc]” corresponde a um dos caracteres “a” ou “b” ou “c”).
    [c-g] Corresponde a um dos caracteres no range (“[c-g]” corresponde a um dos caracteres “c” ou “d” ou “e” ou “f” ou “g”.
    ”[a-z0-9]” corresponde a qualquer letra ou digito.
    ”[-/.:?]” corresponde a um único “-“ ou “/” ou “.” ou “:” ou “?”).
    ? Nenhum ou um dos anteriores (“words?” corresponderá “word” e “words”
    ”[abc]?” corresponderá há “a” ou “b” ou “c” ou nada (“”))
    * Nenhum ou mais das anteriores (“words*” corresponderá há “word”, “words” e “wordssssss”. “.*” correspondera a qualquer coisa incluindo nada)
    + Um ou mais das anteriores (“xxx+” correspondera a uma sequencia de 3 ou mais “x”).
    (expr1|expr2) Uma das expressões. Uma expressão similar (“(foo|bar)” correspondera há “foo” ou “bar”.
    ”(foo|bar)?” correspondera a “foo” ou “bar” ou nada (“”)).
    $ Final da linha (“(foo|bar)$” correspondera a “foo” ou “bar” somente no final da linha.
    \x Desativar o significado especial de x, where x é caráter especial em regex “.?*+()^$[]{}\” (“\.” correspondera a um unico “.”, “\\” a um unico “\”, etc…)
     

As entradas para as listas de expressões são cleartext. Assim, um começo para bloquear um possivel material sexual, corresponde à expressão poderia parecer:

(^|[-\?+=/_])(bondage|boobs?|busty?|hardcore|porno?|sex|xxx+)([-\?+=/_]|$)

 

até mais.

sexta-feira, 18 de fevereiro de 2011

Configuração Básica com squidGuard

Neste artigo não vou abordar a instalação do squidGuard e sim a configuração do squidguard.conf. Depois do squidGuard instalado com sucesso, você pode configurar o software de acordo com suas necessidades. abaixo alguns exemplos de configurações básicas.

1. Uma configuração simples: uma categoria, uma regra para todos.

#
# Arquivo de Configuração para o squidGuard
#
dbhome  /var/lib/squidGuard/db
logdir     /var/log/squidGuard

dest porno {
                 domainlist   blacklist/domains
                 urllist         blacklist/urls
                 }
acl {
          default {
                        pass !porno all
                        redirect http://10.0.1.8/block.html
                      }
       }

As entradas tem o seguinte significado:

dbhome Local onde se encontra os arquivos de controle, por exemplo (blacklist ou whitelist);
logdir Local onde serão armazenados os arquivos de logs.
dest Definição das categorias. Nessas categorias você pode definir os arquivos arquivos com domínios, urls e expressões regulares.
acl Definições de bloqueios. Em nosso exemplo somente  a acl default foi definida. Você pode definir mais que uma acl. A categoria porno que definimos em dest é bloqueada pela expressão !porno. Temos que adicionar o identificador all depois dos blocklist ou os usuários não conseguirão navegar.
A diretiva redirect é mandatória, o squid mostrará um html avisando sobre o aviso do bloqueio.

2. Bloqueando mais de uma categoria:

Primeiro defina as categorias, como fizemos anteriormente, por exemplo: definindo 3 categorias

dest ads        {
                domainlist      blacklists/ads/domains
                urllist            blacklists/ads/urls
                }

dest agressivo  {
                domainlist      blacklists/aggressive/domains
                urllist            blacklists/aggressive/urls
                }

dest aud-vid    {
                domainlist      blacklists/audio-video/domains
                urllist            blacklists/audio-video/urls
                }

Agora veja como fica a acl

acl {
         default {
                        pass !ads !agressivo !aud-vid all
                        redirect http://10.0.1.8/block.html
                      }
      }

3. Whitelist

As vezes é necessario liberar determinados sites, em corporações é normal a liberação de sites de bancos por exemplo.

dest bancos {
                 domainlist   whitelist/bancos/domains
                 urllist         whitelist/bancos/urls
                 }
acl {
          default {
                        pass bancos !ads !agressivo !aud-vid all
all
                        redirect http://10.0.1.8/block.html
                      }
       }
No exemplo acima nos assumimos que a whitelist esta localizada no diretório whitelist e determinamos um subdiretório bancos e tambem repare que nao usamos a exclamação para negar nesse caso.

segunda-feira, 29 de novembro de 2010

Como utilizar o zypper com o OpenSuSE

Instalando e removendo software

Para instalar um pacote registrado no repositorio use:

mozart:/etc/samba # zypper install samba-doc
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following NEW package is going to be installed:
  samba-doc

1 new package to install.
Overall download size: 13.3 MiB. After the operation, additional 24.2 MiB will be used.
Continue? [y/n/?] (y): y
Retrieving package samba-doc-3.4.3-3.6.1.noarch (1/1), 13.3 MiB (24.2 MiB unpacked)
Retrieving: samba-doc-3.4.3-3.6.1.noarch.rpm [done (82.1 KiB/s)]
Installing: samba-doc-3.4.3-3.6.1 [done]
mozart:/etc/samba #

Para remover um pacote instalado use:

mozart:/etc/samba # zypper remove augeas-lenses
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be REMOVED:
  augeas-lenses

1 package to remove.
After the operation, 151.0 KiB will be freed.
Continue? [y/n/?] (y): y
Removing augeas-lenses-0.5.0-2.2 [done]
There are some running programs that use files deleted by recent upgrade. You may wish to restart some of them. Run 'zypper ps' to list these programs.
mozart:/etc/samba #

Atualizando Pacotes:

Há duas maneiras de atualizar os pacotes com zypper. Para atualizar todas as correções oficiais, rode o comando abaixo:

mozart:/etc/samba # zypper update

nesse caso, todos os patches que estão disponiveis no repositorio serao verificados e instalados, se necessario.

Para à atualização de um único pacote, rode o comando abaixo:

mozart:/etc/samba # zypper update aaa_base
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following package is going to be upgraded:
  aaa_base

1 package to upgrade.
Overall download size: 148.0 KiB. No additional space will be used or freed after the operation.
Continue? [y/n/?] (y): y

Retrieving package aaa_base-11.2-43.46.1.x86_64 (1/1), 148.0 KiB (319.0 KiB unpacked)
Retrieving delta: ./rpm/x86_64/aaa_base-11.2-43.45.1_43.46.1.x86_64.delta.rpm, 93.0 KiB
Retrieving: aaa_base-11.2-43.45.1_43.46.1.x86_64.delta.rpm [done (8.9 KiB/s)]
Applying delta: ./aaa_base-11.2-43.45.1_43.46.1.x86_64.delta.rpm [done]
Installing: aaa_base-11.2-43.46.1 [done]
Additional rpm output:
insserv: warning: script 'K01bilogix' missing LSB tags and overrides
insserv: warning: script 'bilogix' missing LSB tags and overrides
Updating etc/sysconfig/language...
Updating etc/sysconfig/backup...
Updating etc/sysconfig/boot...
Updating etc/sysconfig/kernel...
Updating etc/sysconfig/suseconfig...
Updating etc/sysconfig/clock...
Updating etc/sysconfig/proxy...
Updating etc/sysconfig/windowmanager...
Updating etc/sysconfig/sysctl...
Updating etc/sysconfig/cron...
Updating etc/sysconfig/news...
Updating etc/sysconfig/shutdown...
Updating etc/passwd...unchanged
Updating etc/group...unchanged
Updating etc/shadow...unchanged
insserv: warning: script 'K01bilogix' missing LSB tags and overrides
insserv: warning: script 'bilogix' missing LSB tags and overrides


There are some running programs that use files deleted by recent upgrade. You may wish to restart some of them. Run 'zypper ps' to list these programs.

mozart:/etc/samba #

Para verificar os pacotes de atualizacao no repositorio registrado, verifique com o comando abaixo:

mozart:/etc/samba # zypper list-updates
Loading repository data...
Reading installed packages...
S | Repository           | Name                                | Current Version | Available Version | Arch
--+----------------------+-------------------------------------+-----------------+-------------------+-------
v | openSUSE-11.2-Update | aria2                               | 1.5.2-2.3.1     | 1.9.3-0.1.1       | x86_64
v | openSUSE-11.2-Update | autofs                             | 5.0.4-6.1       | 5.0.4-6.2.1       | x86_64
v | openSUSE-11.2-Update | bash                               | 4.0-18.3        | 4.0-18.4.1        | x86_64
v | openSUSE-11.2-Update | bash-doc                         | 4.0-18.3        | 4.0-18.4.1        | x86_64
v | openSUSE-11.2-Update | bzip2                               | 1.0.5-36.6      | 1.0.5-36.7.1      | x86_64
v | openSUSE-11.2-Update | cifs-mount                       | 3.4.2-1.1.3.1   | 3.4.3-3.6.1       | x86_64
v | openSUSE-11.2-Update | cpio                                | 2.10-4.2        | 2.10-4.3.1        | x86_64
v | openSUSE-11.2-Update | cron                                | 4.1-195.196.1   | 4.1-195.197.1     | x86_64
v | openSUSE-11.2-Update | cups                                | 1.3.11-4.1      | 1.3.11-4.5.1      | x86_64
v | openSUSE-11.2-Update | cups-client                       | 1.3.11-4.1      | 1.3.11-4.5.1      | x86_64
v | openSUSE-11.2-Update | cups-libs                          | 1.3.11-4.1      | 1.3.11-4.5.1      | x86_64
v | openSUSE-11.2-Update | desktop-translations           | 11.2-11.13.1    | 11.2-11.16.1      | noarch
v | openSUSE-11.2-Update | device-mapper                   | 1.02.31-11.2    | 1.02.31-11.3.1    | x86_64
v | openSUSE-11.2-Update | dhcpcd                             | 3.2.3-47.2      | 3.2.3-47.4.1      | x86_64
v | openSUSE-11.2-Update | ethtool                             | 6-79.2          | 6-79.3.1          | x86_64
v | openSUSE-11.2-Update | findutils                            | 4.4.0-46.2      | 4.4.0-46.3.1      | x86_64
v | openSUSE-11.2-Update | freetype2                          | 2.3.9-2.2       | 2.3.9-2.4.1       | x86_64

terça-feira, 23 de novembro de 2010

onstat–b (Mostra informações do buffer em uso)

Use a opção onstat -b para exibir informações do buffers que estão em uso, incluindo o número total de páginas residentes na área de buffer.

Sintaxe:

informix@isis:~> onstat –b

O número máximo de buffers disponíveis especificado no parâmetro de configuração BUFFERPOOL do ONCONFIG.

O comando onstat -b também fornece informações resumidas dos número de buffers modificados, o número total de páginas residentes na área de buffer, o numero total de buffer disponível, o numero total de hash buckets disponíveis e o tamanho do buffer em bytes (tamanho da pagina).

informix@isis:~> onstat -b

IBM Informix Dynamic Server Version 11.50.FC6WE -- On-Line -- Up 14 days 06:16:07 -- 303184 Kbytes

Buffers
address           userthread        flgs pagenum          memaddr           nslots pgflgs xflgs owner             waitlist

Buffer pool page size: 2048
1 modified, 50000 total, 65536 hash buckets, 2048 buffer size

informix@isis:~>

Nota: Informações geradas pelo onstat –b são paginas sendo modificadas por uma thread. Não confundir com paginas usadas.

O tamanho da pagina é a menor unidade de I/O no sistema e determinada no momento da transferência.

Atualmente, o campo userthread é sempre 0.

O numero de hash buckets é a menor potencia de dois no buffers.

Buffer hash buckets aponta para o buffer headers. Cada buffer header contem um ponteiro para um pagina no buffer que mantem informações sobre o status de paginas lidas e escritas para a pagina de buffer. Haverá um cabeçalho de buffer para cada reserva na área de buffer.

As chamadas são feitas para determinar a validade das informações contidas na página do buffer para cada I/O executado.

O número de páginas modificadas se torna zero quando o buffer pool é liberado com um checkpoint ou quando as paginas são limpadas.

Cada uma das páginas dentro do buffer pool pode ser exibida ao executar o comando onstat –g dmp com o valor memaddr e o pagesize ( exemplo onstat-g dmp 0xa088000 2048).

Não confundir o bloqueio de uma página da área de buffer com o bloqueio de uma página de banco de dados.

Páginas dentro da área de buffer será fechada e liberada como páginas (de qualquer tipo) que são lidas do disco e colocada no buffer.