domingo, 14 de fevereiro de 2016

Aprendendo: Comandos Básicos SQL: Parte I

Parte I: Criando o Banco de Dados e uma Tabela

SQL significa Structured Query Language. É a forma de se comunicar com os servidores de banco de dados, e é suportado por quase todos os sistemas de banco de dados.

Nesta série de tutoriais vamos aprender sobre sistemas de banco de dados relacionais e conhecer comandos SQL mais importantes.

Neste primeiro tutorial precisamos que o servidor de banco de dados já tenha sido instalado.

Para nossos exemplos vamos utilizar:

Considerações:

Para executar este estudo você precisa ter:

PostgreSQL instalado;
Um usuário para acesso ao PostgreSQL;
Acesso ao banco de dados.

Nota:
Por ser um Banco de Dados de exemplo muito das boas práticas não estamos aplicando. Com o intuito maior de aprendizagem dos comandos iniciais.

Ambiente do Tutorial:
     
Banco de Dados: PostreSQL versão 8.1.23
SO: CentOS 5.6 (Final)

  • Vamos criar o banco de dados chamado bdexemplo2;
  • Uma tabela com o nome amigos;
 Criando o banco de dados: dbexemplo2;








Acessando o banco de dados dbexemplo2;














Criando uma tabela: amigos;

CREATE TABLE amigos (
            primeironome CHAR(15),
            segundonome  CHAR(20),
            cidade       CHAR(15),
            estado       CHAR(2),
            idade        INTEGER
);














Nesta instrução SQL para criar a tabela amigos, podemos digitar todo o código minúsculo ou em uma única linha.
Analisando o código de cima para baixo temos o comando CREATE TABLE no qual solicita ao servidor a criação de uma tabela.

Após o comando inicial temos o nome da tabela "amigos seguido por um parêntese e em seguida uma lista dos nomes das colunas e seus tipos, seguido pelo fechamento do parêntese.

Os tipos que temos para os nomes das colunas neste exemplo são CHAR e INTEGER.

O PostgreSQL suporta muito mais tipos do que apenas esses dois, mas inicialmente vamos ficar com esses dois.

O comando do postgreSQL \d permite visualizar todas as tabelas de uma banco de dados ou somente uma específica se colocarmos \d nometabela.






















Neste exemplo \d exibi as tabelas pertencentes ao banco de dados dbexemplo2 e \d amigos exibe detalhes da tabela amigos.

Criamos o que é preciso para iniciarmos um estudo sobre SQL. Nos próximos artigos darei continuidade.


Até a próxima...

Raymundo César Monteiro Nunes.


Raymundo César Monteiro Nunes


Como saber a versão do CentOS

Dica do dia: 

Hoje vamos aprender como saber a versão do seu sistema operacional CentOS.

Comando: cat

Para sabermos a versão do sistema operacional CentOS, basta lermos as informações do arquivo redhat_release que fica localizado na pasta /etc/ .

Exemplo:

cat /etc/redhat_release







Até a próxima...

César Nunes
 
 

sábado, 13 de fevereiro de 2016

Comando xargs GNU/Linux

Dica do Dia:

Vamos aprender a utilizar e compreender o comando do GNU/Linux xargs.
Com este comando podemos automatizar de forma rápida é fácil alguns processos do dia a dia de um administrador de sistemas.

Comando: xargs

Sintaxe do Comando:

xargs [opçõe...] [comando[argumento inicial]]

Opções mais comuns:

-p : Pergunta ao usuário se o comando deve ser utilizado.
-r : Não executa o comando quando receber linhas vazias.
-t : Mostra o comando na tela antes de executá-lo.

1º Exemplo:

Recebi uma lista de 500 nomes de usuários no qual terei que criar pastas de acesso no sistema com o nome para cada usuário.

cat listanomes.txt | xargs mkdir
 

Explicação:

Com o comando cat leio o arquivo com os nomes e redireciono a saída para o comando xargs com o comando mkdir.
Enquanto tiver nomes o xargs vai executar o comando mkdir e criar e criar os diretórios.

2ª Exemplo:


Vamos utilizar o comando find para encontrar um arquivo especifico e com o xargs apagar somente o arquivo que corresponde ao critério passado.



 Explicação:

Neste exemplo temos vários arquivos no qual preciso apagar somente o arquivo tem a extensão .c.
Com o comando find pesquiso no diretório atual que é representado pelo . o critério de busca "*.c" e repasso ao xargs com o comando rm para executar a ação de deletar.
Com o ls mostro que somente o arquivo .c foi deletado.

Até o próxima...

César Nunes



quarta-feira, 10 de fevereiro de 2016

Desvendando Variáveis de Ambiente Linux Shell




  • Definição de Variáveis
  • Acessando variáveis de ambiente
  • Criando suas próprias variáveis locais
  • Removendo variáveis
  • Explorando variáveis de ambiente padrão do Shell
  • Definir uma variável de ambiente no PATH
  • Localizando variáveis de ambiente
  • Usando arrays de variáveis
Definição de Variável

Local com um nome dentro da memória do computador, criado em um algoritmo/bash/script para se armazenar um determinado dado.

Variáveis de ambiente Linux ajudam na experiência com o shell. Muitos programas e scripts usam variáveis de ambiente para obter informações do sistema e armazenar dados temporários e informações de configuração. As variáveis de ambiente são definidas em muitos lugares no sistema Linux, e você deve saber onde são esses lugares.

Explorando Variáveis de Ambiente

O shell usa um recurso chamado variáveis de ambiente para armazenar informações sobre a sessão de shell e o ambiente de trabalho (assim, o nome de variáveis de ambiente). Esse recurso também permite armazenar dados na memória que podem ser facilmente acessados por qualquer programa ou script em execução a partir do shell. É uma maneira útil para armazenar dados persistentes necessários.

Existem dois tipos de variáveis de ambiente

* Variáveis Globais
* Variáveis Locais

Observação

Mesmo que o Shell use variáveis de ambiente específicas que são consistentes podemos encontrar diferenças nas diversas distribuições GNU/Linux, nas quais adicionam suas próprias variáveis de ambiente .

Entendendo as variáveis de ambiente global

Variáveis de ambiente globais são visíveis a partir da sessão de shell e de quaisquer subshells filhos gerados. Variáveis locais estão disponíveis apenas no shell que os cria. Isto faz variáveis de ambiente global, úteis em aplicações que criam subshells filhos, que exigem informações shell pai.



O sistema Linux define várias variáveis de ambiente global, quando você começar a sua sessão bash.

As variáveis de ambiente do sistema quase sempre usam todas as letras maiúsculas para diferenciá-las das variáveis locais de ambiente de usuário.
Para visualizar as variáveis globais use os comandos:

env ou printenv


Figura 1: Visualizando as variáveis globais




Para exibir somente uma variável utilize o comando printenv:



Figura 2: Exibindo uma variável especifica









Caso você utilize o comando env para exibir uma variável específica o resultado será um erro como na Figura 3:


Figura 3: Erro ao tentar exibir uma variável específica com o comando env









Podemos usar o comando echo para exibir um valor da variável. Para isto deve usar um ($) antes do nome da variável de ambiente como na Figura 4:


Figura 4: Exibindo o valor de uma variável com o comando echo





Usando o sinal de ($) dólar, acompanhado do nome da variável faz mais do que apenas exibir sua definição atual quando usada com o comando echo. O sinal de dólar antes de um nome de variável permite que a variável a ser passado como um parâmetro de comando Figura 5:


Figura 5: Utilizando $ + Variável como parâmetro de comando


Figura 6: Comando ls com o caminho completo




Como mencionado anteriormente, as variáveis de ambiente global também estão disponíveis para qualquer processo de subshells como podemos observar na Figura 7:


Figura 7: Exibindo as variáveis de Ambiente Global em um shell filho

Na Figura 7, após descermos um subnível usando o comando bash, o valor atual variável de ambiente HOME é exibido. Ele é definido para com mesmo valor exato, /home/suporte, como era no shell pai.

Entendendo as variáveis de ambiente local

Variáveis de ambiente locais, como o nome sugere, podem ser vistas apenas no processo local no qual elas são definidas. Mesmo que elas sejam locais, são tão importantes como variáveis de ambiente global.
Na verdade, o sistema Linux também define para você variáveis de ambiente locais padrões p. No entanto, você também pode definir suas próprias variáveis locais.

Tentar ver a lista de variáveis locais é um pouco complicado no CLI. Infelizmente, não é um comando que exibe somente essas variáveis. O comando set apresenta todas as variáveis definidas para um processo específico, incluindo as variáveis de ambiente locais e globais e variáveis definidas pelo usuário:


Figura 8: Comando set exibindo variáveis locais definidas pelo sistema e usuário , globais.



Todas as variáveis de ambiente globais exibidos usando o env ou comando printenv aparecem na saída do comando set. As variáveis de ambiente adicionais são de ambiente local e variáveis definidas pelo usuário.

As diferenças entre os comandos env, printenv, e set são sutis. O comando set exibe ambas as variáveis globais e locais de ambiente e variáveis definidas pelo usuário. Também classifica a exibição em ordem alfabética. O env e printenv são diferentes em definir eles não classificam as variáveis, nem incluem as de ambiente local ou variáveis definidas pelo usuário local. Usando este contexto, env e printenv produzem listagens duplicadas. No entanto, o comando env tem funcionalidade adicional que printenv não tem, tornando-se o comando ligeiramente mais poderoso.

Definindo Variáveis de Usuário

Podemos definir variáveis diretamente no shell.

Depois de iniciar um shell ou gerar um script shell, você está autorizado a criar variáveis definidas pelo usuário local que são visíveis dentro de seu processo shell. Você pode atribuir qualquer numérico ou um valor de string a uma variável de ambiente, para atribuir um valor a uma variável um nome para a variável seguido do sinal de = :


Figura 9: Criando uma variável de ambiente local


Veja na Figura 9 que com o comando echo $primeiravariavel não foi exibido nenhum valor já que não tínhamos criando a variável.
Após criarmos a variável primeiravariavel=Olá e utilizamos o comando echo $primeiravariavel foi apresentado o valor atribuído que neste caso foi a palavra Olá.



Figura 13: Acessando um subshell criando uma varável filho e tentando acessar no shell pai


Configurando Variáveis de Ambiente Global

Variáveis de ambiente global são visíveis de qualquer processo filho (subshell) criada pelo processo pai.
Para criar um variável de ambiente global:

1ª Cria uma variável de ambiente local;
2ª Depois exporta como variável global;

Para exporta uma variável de local para global utiliza-se o comando export, sem o sinal de $.
















Figura 14: Exportando variáveis locais para globais

Como podemos verificar na Figura 17.


Figura 17: Removendo variável subshell (filho)


Conhecendo Variáveis Padrão do Shell

O shell bash usa variáveis de ambientes específicas de ambiente padrões.
Podemos utilizar essas variáveis criadas no sistema GNU/Linux. Porque o shell bash é um derivado do Unix shell Bourne original, ele também inclui variáveis de ambiente originalmente definidos no shell.

Na imagem abaixo exibimos as variáveis de ambiente que o shell utiliza que são compatíveis com o shell Unix Bourne.

Tabela 1: Variáveis do Shell Bourne




Além das variáveis de ambiente padrão Bourne, o shell bash também fornece algumas variáveis
Própria, como mostrado na Tabela 2:

Variáveis de Ambiente Shell Bash














































Definindo o caminho de uma variável de ambiente

Quando digitamos comandos externos na interface de linha de comando shell (CLI), o shell deve procurar no sistema para achar o programa. A variável de ambiente PATH define os diretórios que deve ele procurar os comandos e programas.


Figura 18: Variável PATH e os diretórios de comandos e programas



Na Figura 18. Podemos observar 10 diretórios onde o shell procura por comandos ou programas.

Caso a localização de um comando ou programa não esteja incluído na variável PATH, o shell não pode achar, sem uma referência absoluta do diretório. Neste caso o shell retorna uma mensagem de erro.

Figura 19: Executando um programa que não está no PATH





O que ocorre frequentemente que as aplicações não armazenam seus programas nos diretórios que não estão na variável de ambiente PATH.
Podemos colocar novos diretórios de busca para a variável de ambiente PATH existente sem ter que reconstrui-lo a partir do zero. Os diretórios individuais listados no PATH são separados
por dois pontos. Tudo que você precisa fazer é referenciar o valor PATH original e adicionar novos diretórios para a cadeia.
Veja o exemplo!!!

Localizando variáveis de ambiente do sistema

Como mencionando o sistema GNU/Linux usa variáveis de ambiente para muitas finalidades.
Sabemos como modificar e criar nossas próprias variáveis de ambiente.
O segredo é na forma como essas variáveis se tornam persistentes.

Quando iniciamos um shell bash, fazendo login no sistema GNU/Linux, pelo bash padrão verifica diversos arquivos para os comandos. Estes arquivos são chamados de arquivos de inicialização ou arquivos de ambiente. Os arquivos de inicialização que o bash processos dependem do método que você usa para iniciar o shell bash.
Você pode iniciar um shell bash de três maneiras:

  • Como um shell de login padrão no momento do login
  • Como um shell interativo que é iniciado por umsubshell
  • Como um shell não interativo de executar um script

Entendendo o processo de shell de login

Quando efetuamos o login no sistema Linux, o shell bash começa como um shell de login. O shell de login normalmente procura por cinco arquivos de inicialização diferentes para processar comandos a partir de:

  • /etc/profile
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.profile

O arquivo /etc/profile é o principal arquivo de inicialização padrão para o shell bash no sistema.
Todos os usuários do sistema executar esse arquivo de inicialização quando iniciar sessão.

Nota:

Esteja ciente de que algumas distribuições Linux usam módulos de autenticação conectável (PAM). Neste caso, antes do shell é iniciado, os arquivos do PAM são processados, incluindo aqueles que podem conter variáveis de ambiente. Exemplos de arquivo PAM incluem o arquivo /etc/environment e da $HOME/.pam_environment.

Os outros quatro arquivos de inicialização são específicos para cada usuário e pode ser personalizado para as necessidades de um usuário individual. Vamos dar uma olhada mais de perto esses arquivos.

Exibindo o arquivo /etc/profile

O arquivo /etc/profile é arquivo principal de inicialização do shell, sempre que efetuamos login no sistema GNU/Linux, o bash executa os comandos no /etc/profile.
Diferentes distribuições colocam diferentes comandos neste arquivo.
Em nosso exemplo é uma saída do CentOS.

Figura 22: Exibindo o arquivo /etc/profile





































Arquivos /etc/profile das diferentes distribuições usam uma determinada característica.
É uma instrução que percorre qualquer arquivos localizado no diretório /etc/profile.d.
Isso fornece um lugar para o sistema Linux para colocar arquivos de inicialização específicos do aplicativo que é executado pelo shell quando você faz login

 































Figura 23: Exibindo os arquivos do diretório /etc/profile.d/


Visualizando os arquivos $HOME

Os restantes são de arquivos de inicialização todos utilizados para a mesma função - para fornecer ao usuário específico um arquivo de inicialização para definir as variáveis de ambiente específicas do usuário.
A maioria das distribuições Linux usam apenas um ou dois desses quatro arquivos de inicialização:

$ HOME/.bash_profile
$ HOME / .bashrc
$HOME/.bash_login
$HOME/.profile

Observe que todos os quatro arquivos começam com um ponto, tornando-os arquivos ocultos (eles não aparecem em uma listagem comando ls normais). Porque eles estão no diretório home do usuário, cada usuário pode editar os arquivos e adicionar suas próprias variáveis de ambiente que estão ativas para cada sessão de shell bash que eles comecem.

Nota:

Arquivos do ambiente são uma área em que as distribuições Linux variam muito. Não cada arquivo $HOME listado nesta seção existe para cada usuário. Por exemplo, alguns usuários podem ter
apenas o arquivo $HOME /.bash_profile. Isto é normal.

 
O primeiro arquivo encontrado na lista ordenada seguinte é executado, eo resto são ignorados:
$ HOME/.bash_profile
$ HOME/.bash_login
$ HOME/.profile

Observe que $ HOME/.bashrc não está nesta lista. Isto é assim porque normalmente é executado a partir de um dos outros ficheiros.

 

























Figura 24: Visualizando o arquivo .bash_profile


Entendo processo do shell interativo

Se você iniciar um shell bash sem fazer login em um sistema (se você digitar apenas o bash em um prompt CLI, por exemplo), você começa o que é chamado um shell interativo. O shell interativo não agir como o shell de login, mas ainda fornece um prompt CLI para que você digite os comandos.

Se o bash é iniciado como um shell interativo, ele não processa o arquivo /etc/profile. Em vez disso, ele apenas verifica para o arquivo .bashrc no diretório home do usuário.

Figura 25: Visualizando o arquivo bashrc


O arquivo .bashrc faz duas coisas. Primeiro, ele verifica para um arquivo bashrc comum no diretório /etc. Em segundo lugar, ele oferece um lugar para que o usuário digite aliases de comando pessoais

Entendo processo do shell não interativo

O último tipo de concha é um subshell não-interativo. Este é o shell onde o sistema pode começar a executar um script shell. Isto é diferente na medida em que não há uma linha de CLI que se preocupar. No entanto, você pode querer executar comandos de inicialização específicas cada vez que inicia um script no seu sistema.

Para acomodar essa situação, o shell bash fornece a variável de ambiente BASH_ENV.
Quando o shell inicia um processo subshell não-interativo, ele verifica essa variável de ambiente para o nome do arquivo de inicialização para executar. Se um estiver presente, o shell executa os comandos do arquivo, que geralmente incluem variáveis definidas para os shell scripts.
 






 
Por exemplo, se o shell pai era um shell de login e teve variáveis definidas e exportados no arquivo /etc/profile, etc /profile.d/*.sh, e a $HOME /.bashrc , o shell para a filho herda essas variáveis.

No entanto, lembre-se que todas as variáveis definidas, mas não exportados pelo shell pai são variáveis locais. As variáveis locais não são herdadas por um subnível.

Para os scripts que não iniciam um subnível, as variáveis já estão disponíveis no shell atual. Assim, mesmo se BASH_ENV não está definido, ambas as variáveis locais e globais do shell atualestão presentes para ser utilizado.
Adicionando variáveis de ambiente persistente

Agora que você sabe que caminho em torno dos vários tipos de processo shell e seus vários arquivos do ambiente, introduzindo as variáveis de ambiente permanente é muito mais fácil. Você também pode definir suas próprias variáveis globais ou locais permanentes utilizando esses arquivos.

Para variáveis de ambiente globais (aquelas variáveis necessárias para todos os usuários em um sistema Linux), pode ser tentador colocar ajustes variáveis novas ou modificadas no arquivo /etc/ profile, mas isso é uma má ideia.

O arquivo pode ser alterado quando sua distribuição é atualizado, e você perderia todas as definições de variáveis personalizadas.

É uma idéia melhor para criar um arquivo terminando com .sh no diretório /etc/profile.d. Nesse arquivo, coloque todas as suas configurações novas ou modificadas de variáveis de ambiente global

Na maioria das distribuições, o melhor lugar para armazenar variáveis shell bash persistentes de um usuário individual está no arquivo $HOME/.bashrc. Isto é verdade para todos os tipos de processo shell. No entanto, se a variável BASH_ENV está definido, tenha em mente que a menos que ele aponta para $HOME/ bashrc, pode ser necessário para armazenar variáveis de um usuário para tipos de shell não interativos em outros lugares.
 

Aprendendo arrays de variáveis de ambiente
 

Uma característica muito legal de variáveis de ambiente é que eles podem ser usados como matrizes. Uma matriz é uma variável que pode conter vários valores. Os valores podem ser consultados individualmente ou como um todo para a matriz inteira. Para definir vários valores para uma variável de ambiente, basta incluí-los entre parênteses, com valores separados por espaços:

Para definir vários valores para uma variável de ambiente, basta incluí-los entre parênteses, com valores separados por espaços:
 








Se exibirmos a matriz como uma variável de ambiente normal, não terá o resultado esperado.







Somente o primeiro valor na matriz aparece. Para fazer referência a um elemento de matriz individual, você deve usar um valor índice numérico, o que representa o seu lugar na matriz. O valor numérico é entre colchetes:
 





Nota:
Arrays de variáveis de ambiente começar com um valor de índice com valor zero. Isso pode ser confuso.

Para exibir uma variável de matriz inteira, você usar o caractere curinga asterisco como o valor do índice:
 




Você também pode alterar o valor de uma posição de índice individual:
 





 

Você ainda pode usar o comando unset para remover um valor individual dentro da matriz, mas tenha cuidado, porque isso fica complicado.









 



Este exemplo usa o comando unset para remover o valor pelo valor de índice 2. Quando você exibe a matriz, parece que os outros valores de índice caiu apenas um. No entanto, se você exibir especificamente os dados no valor de índice 2, você vê que esse local está vazio.

Finalmente, você pode remover a matriz inteira apenas usando o nome da matriz no comando unset:




Conclusão:

Estudamos neste extenso tutorial toda teoria e prática sobre variáveis de ambiente local como também global em ambientes shell bash.
Espero que após a leitura seus conhecimentos sobre variáveis estejam ampliados para resolução de problemas como também para um melhor aperfeiçoamento da administração de ambientes GNU/Linux.