terça-feira, 26 de abril de 2011

HISTÓRIA DO LINUX

O nome Linux surgiu da mistura de Linus + Unix. Linus é o nome do criador do Linux, Linus Torvalds. E Unix, é o nome de um sistema operacional de grande porte, no qual contaremos sua história agora, para que você entenda melhor a do Linux.

A origem do Unix tem ligação com o sistema operacional Multics, projetado na década de 1960. Esse projeto era realizado pelo Massachusets Institute of Technology (MIT), pela General Eletric (GE) e pelos laboratórios Bell (Bell Labs) e American Telephone na Telegraph (AT&T). A intenção era de que o Multics tivesse características de tempo compartilhado (vários usuários compartilhando os recursos de um único computador), sendo assim, o sistema mais arrojado da época. Em 1969, já exisita uma versão do Multics rodando num computador GE645.] 

Ken Thompsom era um pesquisador do Multics e trabalhava na Bell Labs. No entanto, a empresa se retirou do projeto tempos depois, mas ele continuou seus estudos no sistema. Desde então, sua idéia não era continuar no Multics original e sim criar algo menor, mas que conservasse as idéias básicas do sistema. A partir daí, começa a saga do sistema Unix. Brian Kernighan, também pesquisador da Bell Labs, foi quem deu esse nome. 

Em 1973, outro pesquisador da Bell Labs, Dennis Ritchie, rescreveu todo o sistema Unix numa linguagem de alto nível, chamada C, desenvolvida por ele mesmo. Por causa disso, o sistema passou a ter grande aceitação por usuários externos à Bell Labs. 

Entre 1977 e 1981, a AT&T, alterou o Unix, fazendo algumas mudanças particulares e lançou o System III. Em 1983, após mais uma série de modificações, foi lançado o conhecido Unix System IV, que passou a ser vendido. Até hoje esse sistema é usado no mercado, tornando-se o padrão internacional do Unix. Esse sistema é comercializado por empresas como IBM, HP, Sun, etc. O Unix, é um sistema operacional muito caro e é usado em computadores poderosos (como mainframes) por diversas multinacionais. 

Qual a relação entre o Unix e o Linux, ou melhor, entre o Unix e Linus Torvalds? 

Para responder essa pergunta, é necessário falar de outro sistema operacional, o Minix. O Minix é uma versão do Unix, porém, gratuita e com o código fonte disponível. Isso significa que qualquer programador experiente pode fazer alterações nele. Ele foi criado originalmente para uso educacional, para quem quisesse estudar o Unix "em casa". No entanto, vale citar que ele foi escrito do “zero” e apesar de ser uma versão do Unix, não contém nenhum código da AT&T e por isso pode ser distribuído gratuitamente. 

A partir daí, “entra em cena” Linus Torvalds. Ele era um estudante de Ciências da Computação da Universidade de Helsinki, na Filândia e em 1991, por hobby, Linus decidiu desenvolver um sistema mais poderoso que o Minix. Para divulgar sua idéia, ele enviou uma mensagem a um grupo pela Usenet (uma espécie de antecessor da Internet). A mensagem pode ser vista no final deste artigo. No mesmo ano, ele disponibilizou a versão do kernel (núcleo dos sistemas operacionais) 0.02 e continuou trabalhando até que em 1994 disponibilizou a versão 1.0. Até o momento em que este artigo estava sendo escrito, a versão atual era a 2.6. 

O Linux é um sistema operacional livre e é uma re-implementação das especificações POSIX (padronização da IEEE, Instituto de Engenharia Elétrica e Eletrônica) para sistemas com extensões System V e BSD. Isso signfica que o Linux é bem parecido com Unix, mas não vem do mesmo lugar e foi escrito de outra forma. 


Mas porque o Linux é gratuito? 

Linus Torvalds, quando desenvolveu o Linux, não tinha a inteção de ganhar dinheiro e sim fazer um sistema para seu uso pessoal, que atendesse suas necessidades. O estilo de desenvolvimento que foi adotado foi o de ajuda coletiva. Ou seja, ele coordena os esforços coletivos de um grupo para a melhoria do sistema que criou. Milhares de pessoas contribuem gratuitamente com o desenvolvimento do Linux, simplesmente pelo prazer de fazer um sistema operacional melhor. 

Licença GPL 

O Linux está sob a licença GPL, permite que qualquer um possa usar os programas que estão sob ela, com o compromisso de não tornar os programas fechados e comercializados. Ou seja, você pode alterar qualquer parte do Linux, modificá-lo e até comercialiazá-lo, mas você não pode fechá-lo (não permitir que outros usuários o modifiquem) e vendê-lo. 

GNU 

Mas a história do Linux não termina por aqui. É necessário também saber o que é GNU. GNU é um projeto que começou em 1984 com o objetivo de desenvolver um sistema operacional compatível com os de padrão Unix. O Linux em si, é só um kernel. Linus Torvalds, na mesma época que escrevia o código-fonte do kernel, começou a usar programas da GNU para fazer seu sistema. Gostando da idéia, resolveu deixar seu kernel dentro da mesma licença. 

Mas, o kernel por si só, não é usável. O kernel é a parte mais importante, pois é o núcleo e serve de comunicador entre o usuário e o computador. Por isso, com o uso de variantes dos sistemas GNU junto com o kernel, o Linux se tornou um sistema operacional. 

Mas você pode ter ficado confuso agora. O que é o Linux então? O que é GNU? Simplesmente, várias pessoas uma versões modificadas dos sistemas GNU, pensando que é o Linux em si. Os programadores que trabalham com ele, sabem que o Linux, é basicamente o kernel, conforme já foi dito, mas todos, chamam esse conjunto de Linux (há quem defenda o uso de GNU/Linux). 

Finalizando, o projeto GNU é um dos responsáveis pelo sucesso do Linux, pois graças à “mistura” de seus programas com o kernel desenvolvido por Linus Torvalds, o Linux vem mostrando porque é um sistema operacional digno de habilidades insuperáveis por qualquer outro sistema.

quinta-feira, 21 de abril de 2011

Dispositivos e Partições no Linux

Nesse post tentarei colocar de uma maneira simples, rápida e fácil, dicas de como lidar com suas partições e dispositivos. Procurarei manter sempre uma comparação com o Windows para ninguém se perder.

HDs
Diferente do que acontece no Windows, no Linux vê-se todos os dispositivos como colaboradores do sistema, e estes serão encontrados no diretório /dev . Sendo assim, se seu modem estiver na COM 2, no Linux ele aparecerá no diretório /dev/ttyS1 , e assim por diante. Como estamos falando de discos, farei uma rápida tabelinha para orientação.

Bios Windows Linux
Primário MasterC:/dev/hda
Primário SlaveD:/dev/hdb
Secundário MasterE:/dev/hdc
Secundário SlaveF:/dev/hdd

Claro que neste caso estamos falando de disco IDE. Para cada particão criada em um disco, diferente do Windows que gera um novo nome para a partição, o Linux da um número a mesma. Vamos imaginar que trabalharemos com o primário master ou como chamaremos sempre a partir de agora hda. Vamos supor que temos um HD de 10Gb, o dividimos em 3 partições, uma de 256Mb pra swap, uma de 4Gb para o root ("../xml/introducao-xml//"), e o resto para o /usr. Com isso seu disco ficará da seguinte forma.
/dev/hda1
/dev/hda2
/dev/hda3
Existe ainda um porém, caso queira acessar arquivos em um sistema com formato diferente do ext2, tipo uma partição Windows (vfat), DOS (msdos), CD-ROM (iso9660, joliet), entre outros, será necessário ter um kernel compilado com suporte a esses formatos.
Por exemplo, para montar sua partição Windows (vfat) localizada em /dev/hda1 use o comando:
mount -t vfat /dev/hda1 /mnt/windows
Outro ponto importante é dizer ao mount qual o tipo de partição ele está montando com a opção "-t", os tipos padrões são:
  • vfat: para partições Windows com FAT16 ou FAT32
  • msdos: para partições DOS
  • iso9660: para alguns CD-ROMs
  • joliet: também utilizado para CD-ROMs
Fiz essa introdução, para que todos pudessem entender como é o sistema de utilização de discos no 1 .

CD-ROMs e floppys
Agora, falaremos como usar seu CD-ROM no Linux. Primeiro verifique onde está o seu CD-ROM. Digamos que esteja no hdc. Existem várias maneiras de acessá-lo. A primeira, na mão com o comando: mount -t iso9660 /dev/hdc /mnt/cdrom . A outra é, adicionando essa linha ao arquivo /etc/fstab :
/dev/hdc /cdrom iso9660 defaults,ro,user,noauto 0 0
E para montar o CD-ROM basta dar o comando: mount /mnt/cdrom ou mount /dev/hdc . O Linux verifica para ver se existe essa entrada no fstab e a monta. O comando mount só pode ser usado pelo super-usuário (root). Uma vez montado o cd-rom, qualquer usuário pode utilizá-lo, com as devidas permissões de uso. Quando o seu CD-ROM estiver montado, não será possível tirar o CD do driver, isto porque é incorreto fazê-lo enquanto o cd estiver sendo lido. Muitas pessoas falam: "Ahh, mais meu Windows faz isso!"../xml/introducao-xml/. Realmente, ele faz, mas a própria Microsoft, em um comunicado, diz que não se responsabiliza por danos causados pelo fato do CD estar sendo lido e um usuário abrir o driver. Para poder tirar o cd do driver é preciso desmontar o CD-ROM com o comando: umount /mnt/cdrom ou umount /dev/hdc . Feito isso, pode-se tirar o cd do driver.
Com o disquete também não é diferente, a diferença é onde o disquete fica no diretório /dev . Geralmente é no /dev/fd0 , pode-se montá-lo na mão ou então criar a entrada no /etc/fstab :
dev/fd0 /floppy auto defaults,user,noauto 0 0
Existem alguns programas que se dispõe a montar seus discos e outros dispositivos automaticamente, como o automount. Isso ajuda bastante se existem muitos usuários na máquina, se não quiser dar permissões de root para os mesmos. Ou pode-se adicioná-los no grupo do CD-ROM e do floppy também. O problema de programas como o automount é que ele realmente monta o dispositivo quando precisa ser utilizado, mas não sabe a hora correta de desmontá-lo, no próprio automount-HOWTO tem um script para fazer isso. Caso queira dar uma olhada vá em http://linuxdoc.org/HOWTO/mini/Automount.html .

terça-feira, 12 de abril de 2011

Permissões de arquivos no Linux

"O Linux é um sistema multiusuário". Você já deve ter ouvido esta frase muitas vezes. Isto significa que um mesmo PC ou servidor pode ser acessado por vários usuários simultâneamente.
Com isto, surge a necessidade de algum sistema de segurança que limite o que cada usuário pode fazer no sistema, para que não haja o risco de que um usuário possa destruir arquivos ou configurações do sistema ou de outros usuários.
Isto é feito através das permissões de arquivos. Clicando sobre as propriedades de qualquer arquivo no konqueror você verá uma janela com 9 campos, que permitem dar permissão de leitura, gravação e execução (que alguém traduziu para "inserir" na versão em Português :-) para o usuário dono do arquivo, para outros usuários que pertencem ao mesmo grupo que ele e finalmente a todos os demais usuários. O "dono" do arquivo é por default o usuário que criou o arquivo. Apenas este usuário pode alterar as permissões de acesso ao arquivo e pasta. Em seguida vem o grupo, que permite que vários usuários tenham acesso a um arquivo ou pasta, sem ter que apelar para o campo "outros" que daria acesso a qualquer um. Imagine que estamos configurando um servidor em uma empresa importante e neste servidor temos uma pasta chamada "projeto_apollo" com vários arquivos confidenciais que deverá ser acessada apenas pelos programadores que estão trabalhando no projeto. Desativaríamos de imediato o campo "todos" mantendo marcados apenas os campos "usuário" e "grupo". O próximo passo seria justamente criar um novo grupo de usuários ("apollo" por exemplo) e incluir neste grupo todos os usuários que fazem parte do projeto. A partir daí, todos os programadores passariam a ter acesso à pasta, já que fazem parte do grupo. Você pode criar novos grupos e adicionar usuários a eles através do programa "kuser" que faz parte do KDE e por isso é encontrado em quase todas as distribuições. Basta chama-lo pelo terminal.Basta clicar em "Grupo > Novo", fornecer o nome do novo grupo e em seguida clicar no botão "Edit" para marcar os usuários que farão parte dele. Caso o kuser não esteja instalado no seu sistema, uma segunda opção é o "userconf". No Mandrake você pode utilizar também o "userdrake". Você pode criar quantos usuários e quantos grupos quiser, e cada usuário pode fazer parte de quantos grupos for necessário. Ou seja, você pode por exemplo criar um grupo para cada pasta importante e adicionar no grupo apenas os usuários que tiverem acesso a ela. De fato, a configuração default da maioria das distribuições linux atuais é dar acesso de leitura para a maioria das pastas (com excessão naturalmente dos arquivos de senha e outros arquivos críticos) para todos os usuários, mas ao mesmo tempo dar acesso de gravação apenas para o diretório home de cada um. Ou seja, por default você, logado como usuário normal, poderá navegar por quase todos os diretórios do sistema, mas só poderá criar e alterar arquivos dentro da sua pasta de usuário. Nos outros lugares receberá sempre um aviso de acesso negado. Isso impede que os usuários possam fazer besteira no sistema, como por exemplo, tentar deletar a pasta de módulos do Kernel. Claro, como todas as regras, as permissões de acesso têm um única exceção: o root. Ele é o único que não possui restrições: pode alterar, executar ou deletar o que bem entender. Pode alterar o dono das pastas ou alterar as permissões de acesso. O root é o Deus do sistema. Você precisará usar o root sempre que for alterar as permissões de acesso a uma pasta do sistema ou criada por outro usuário, mas não use-o regularmente, a menos que esteja apenas brincando com o sistema e possa reinstala-lo a qualquer momento, pois além de poder destruir facilmente arquivos do sistema, usar o root abre as portas para várias brechas de segurança ao usar programas de IRC, abrir anexos em e-mails ou mesmo navegar na web.
A maioria dos problemas de segurança a que os usuários do Windows estão submetidos, decorre justamente do fato de utilizarem contas com privilégios equivalentes ao do root no Linux. Se você pode fazer o que quiser no sistema, os programas executados por você (incluindo trojans, scripts incluídos de páginas web executados pelo navegador, etc.) também poderão não terão restrições.
Se você se pergunta às vezes como alguns vírus como o Ninda e o Sircan podem se espalhar tão rapidamente, saiba que o problema é justamente este: a combinação de um sistema com um fraco controle de segurança, combinado combinado com o uso de contas administrativas por usuários sem noções de segurança. Voltando ao tema da criação de usuários, se você não gostou dos utilitários gráficos, pode adicionar novos usuários também usando os comandos "adduser" e "passwd"
Por exemplo:

adduser morimoto
(cria o usuário morimoto)

passwd morimoto
(altera o password do user morimoto)

O comando passwd também pode ser usado para alterar a senha. Como root você deve usar "passwd usuario" e como usuário apenas "passwd" para alterar a senha do login. Apenas o root pode adicionar novos usuários ao sistema.
Para alterar as permissões de acesso de arquivos e pastas via linha de comando você deve usar o comando chmod. A sintaxe dele parece um pouco complicada à primeira vista, mas nada que um pouco de prática não possa resolver:
# chmod 744 arquivo

Temos aqui o comando chmod propriamente dito, o arquivo ou pasta que terá suas permissões de acesso alteradas e um número de três dígitos que indica as novas permissões para o arquivo.
Os três números indicam respectivamente:
7 : Permissões para o dono do arquivo4 : Permissões para o grupo4 : Permissões para os demais usuários

Você deve lembrar que temos três permissões: leitura, gravação e execução. Como é possível representar estes três atributos através de um único número?
Bem, os programadores costumam ser muito bons em matemática e, como em outros casos, usaram um pequeno truque para resolver este problema:
Cada permissão possui um número:
4 : Leitura2 : Gravação1 : Execução

Você simplesmente soma estes números para ter o número referente ao conjunto de permissões que deseja:
0 : Sem permissão alguma, se for uma pasta o usuário sequer pode ver o conteúdo1 : Só execução (não é possível ler o arquivo ou alterá-lo, apenas executar um programa)4 : Apenas leitura6 (4+2) : Leitura + gravação7 (4+2+1): Controle total: leitura + gravação + execução

Engenhoso não é? Se você quer dar controle total do arquivo ou pasta para o dono e para o grupo, mas permissão de apenas leitura para os demais usuários, usaria o número 774; se você quisesse que todos os usuários tivessem permissão de leitura e gravação, mas sem poder executar nada, usaria o número 666, se quisesse dar controle total para todo mundo usaria 777 e assim por diante. Como disse, parece um pouco complicado, mas depois de usar o comando algumas vezes você não vai esquecer mais.
Para alterar o dono e o grupo do arquivo você deve usar o comando chown. O uso dele é simples, basta indicar qual é o novo dono e em seguida indicar o arquivo ou pasta que mudará de dono, como em:

# chown morimoto apollo

Se você quiser que a alteração se aplique a todos os arquivos e subpastas do diretório, use a opção -R (de recursivo) como em:

# chown -R morimoto apollo

Se você quiser alterar também o nome do grupo, acrescente o nome do novo grupo após o nome do dono, separando ambos por um ponto:
# chown -R morimoto.apollo apollo

Agora a pasta "apollo" passa a ser propriedade do usuário morimoto e do grupo apollo. Fizemos a mesma coisa que no exemplo anterior, mas agora usando o comando de modo texto. Você escolhe qual forma prefere.
Além dos comandos que vimos, você também pode recorrer ao mc, encontrado na maioria das distribuições. Basta chama-lo no terminal. Além de ser um gerenciador de arquivos com muitos recursos, ele permite editar arquivos de texto, mover arquivos, alterar permissões, etc.

Criando Pastas no Linux

Na aula de GSO nessa terça, aprendemos um pouco sobre a criação e alteração de propriedades de pastas. Com isso, resolvi fazer uma postagem com esse assunto relacionado ao nosso tema, que é o Sistema Operacional Linux. Segue ai uma pequena introdução desse recurso no Linux:


O sistema Linux, quando se inicializa, assim como todo sistema operacional ele interage com o hardware do computador, preparando e deixando pronto para uso os recursos da máquina, para que você possa rodar seus programas. O Linux "puro" seria sem uma "interface gráfica", sem janelas de programas, por exemplo. 


Primeiro choque para quem está chegando agora é a estrutura de diretórios do Linux, que não lembra em nada o que temos no Windows. Basicamente, no Windows temos os arquivos do sistema concentrados nas pastas C:\Windows\ e C:\Arquivos de programas\ e você pode criar e organizar suas pastas da forma que quiser.

No Linux é basicamente o contrário. O diretório raiz está tomado pelas pastas do sistema e espera-se que você armazene seus arquivos pessoais dentro da sua pasta no diretório /home.

Mas, as diferenças não param por aí. Para onde vão os programas que são instalados se não existe uma pasta central como a arquivos de programas? E para onde vão os arquivos de configuração se o Linux não possui nada semelhante ao registro do Windows?

A primeira coisa com que você precisa se habituar é que no Linux os discos e partições não aparecem necessariamente como unidades diferentes, como o C:, D:, E: do Windows. Tudo faz parte de um único diretório, chamado diretório raiz ou simplesmente "/".

Dentro deste diretório temos não apenas todos arquivos e as partições de disco, mas também o CD-ROM, drive de disquete e outros dispositivos, formando a estrutura que você está vê quando abre o gerenciador de arquivos.

O diretório */bin* armazena os executáveis de alguns comandos básicos do sistema, como o su, tar, cat, rm, pwd, etc. Geralmente isto soma de 5 a 7 MB, pouca coisa. O grosso dos programas ficam instalados dentro do diretório */usr* (de "Unix System Resources"). Este é de longe o diretório com mais arquivos em qualquer distribuição Linux, pois é aqui que ficam os executáveis e bibliotecas de todos os principais programas. A pasta */usr/bin* (bin de binário) por exemplo armazena cerca de 2.000 programas e atalhos para programas numa instalação típica do Linux. Se você tiver que chutar em que pasta está o executável de um programa qualquer, o melhor chute seria justamente a pasta /usr/bin :-)

Outro diretório populado é o */usr/lib*, onde ficam armazenadas bibliotecas usadas pelos programas. A função destas bibliotecas lembra um pouco a dos arquivos .dll no Windows. As bibliotecas com extensão .a são bibliotecas estáticas, enquanto as terminadas em .so.versão (zzz.so.1, yyy.so.3, etc.) são bibliotecas compartilhadas, usadas por vários programas.

Subindo de novo, a pasta */boot* armazena (como era de se esperar) o Kernel ("coração" do sistema) e alguns arquivos usados pelo Lilo (o gerenciador de boot do sistema, caso você esteja utilizando o Lilo), que são carregados na fase inicial da inicialização do computadoer. Estes arquivos são pequenos, geralmente ocupam menos de 5 MB.

Logo abaixo temos o diretório /dev, que é de longe o exemplo mais exótico de estrutura de diretório no Linux. Todos os arquivos contidos aqui, como por exemplo /dev/hda, /dev/dsp, /dev/modem, etc. não são arquivos armazenados no HD, mas sim "links" para dispositivos de hardware. Por exemplo, todos os arquivos gravados no "arquivo" */dev/dsp* serão reproduzidos pela placa de som, enquanto o "arquivo" */dev/ttyS0* contém os dados enviados pelo mouse (ou outro dispositivo conectado na porta serial 1).

Esta organização visa facilitar a vida dos programadores, que podem acessar o hardware do micro simplesmente fazendo seus programas lerem e gravarem em arquivos. Não é preciso nenhum comando esdrúxulo para tocar um arquivo em Wav, basta "copiá-lo" para o arquivo */dev/dsp*, o resto do trabalho é feito pelo próprio sistema. O mesmo se aplica ao enviar um arquivo pela rede, ler as teclas do teclado ou os clicks do mouse e assim por diante.