História do Linux
O UNIX é muito utilizado hoje no ambiente corporativo, educacional e agora no ambiente desktop.
Linux é uma cópia do Unix feito por Linus Torvalds, junto com um grupo de hackers pela Internet. Pretende-se que ele siga conforme com o padrão POSIX, padrão
usado pelas estações UNIX.
Linus Torvalds que na época era um estudante de ciência da computação na Finlândia criou um clone do sistema Minix (sistema operacional desenvolvido por
Andrew Tannenbaun que era semelhante ao UNIX) que o chamou de Linux. Hoje ele ainda detém o controle do Kernel do sistema.
Entre 1990 até março de 1992 surgiu a versão 1.0 do Linus. Estima-se que sua base de usuários se situe hoje em torno de 10 milhões. Ele ainda não se enquadra
como sendo um sistema operacional UNIX.
Ele inclui proteção entre processos (crash protection), carregamento por demanda, redes TCP/IP, além de nomes de arquivos com até 255 caracteres, multi-tarefa
real, suporte a UNICODE, shared libraries, memória virtual, etc.
As distribuições de Linux
Algumas firmas e organizações de voluntários decidiram juntar os programas do Linux em “pacotes" próprios aos quais elas dão suporte. Esses “pacotes" são
chamados distribuições, dentre as mais famosas e usadas, destacam-se: Debian, RedHat, Slackware, SuSE, Caldera e Stampede.
O conjunto de aplicativos que são executados no Kernel se chamam distribuição. A função do Kernel é ser a interface entre o Hardware e os sistemas de
gerenciamento de tarefas e aplicativos.
O Kernel do Linux é mais leve que o de outros sistemas operacionais para servidores. São 12 milhões de linhas de código, enquanto outras versões do Unix têm
30 milhões e o Windows NT, 50 milhões. ”Isso significa que o Linux é três vezes mais rápido que outros Unix e até cinco vezes mais rápido que o Windows NT”.
Multiusuário: Permite que vários usuários possam rodar o sistema operacional, e não possui restrições quanto à licença. Permite vários usuários
simultâneos, utilizando integralmente os recursos de multitarefa. A vantagem disso é que o Linux pode ser distribuído como um servidor de
aplicativos. Usuários podem acessar um servidor Linux através da rede local e executar aplicativos no próprio servidor.
Multiplataforma: O Linux roda em diversos tipos de computadores, sejam eles RISC ou CISC.
Multitarefa: Permite que diversos programas rodem ao mesmo tempo, ou seja, você pode estar imprimindo uma carta para sua vovó enquanto
trabalha na planilha de vendas, por exemplo. Sem contar os inúmeros serviços disponibilizados pelo Sistema que estão rodando em background e você
provavelmente nem sabe.
Multiprocessador: Permite o uso de mais de um processador. Já é discutida, há muitos anos, a capacidade do Linux de poder reconhecer mais de um
processador e inclusive trabalhar com SMP, clusters de máquinas, na qual uma máquina central controla os processadores das outras para formar uma
só máquina.
Protocolos: Pode trabalhar com diversos protocolos de rede (incluindo o TCP/IP que é nativo Unix).
Sistemas de arquivos: Suporta diversos sistemas de arquivos, incluindo o EXT, HPFS, DOS, CD-ROM, Netware, Xenix, Minix, etc.
Observação: Sistema de arquivos é uma forma de armazenamento de arquivos em estruturas (na maneira hierárquica) de diretórios. Assim, o usuário não
necessita conhecer detalhes técnicos do meio de armazenamento. Ele apenas precisa conhecer a estrutura (árvore) de diretórios para poder navegar dentro dela e
acessar suas informações.
Licença do Linux
O documento especifica que o programa pode ser usado e modificado por quem quer que seja, desde que as modificações efetuadas sejam também
disponibilizadas em código fonte. Esse documento chama-se GPL(licença publica geral)/GNU (General Public License).
O Kernel do Linux, associado a esses programas, tornou possível a milhões de pessoas o acesso a um excelente ambiente computacional de trabalho e que
melhora a cada dia.
Ao "kernel" é freqüentemente acrescentada uma série de aplicações, formando um sistema ou distribuição Linux.
Distribuição nada mais é que um pacote do kernel do sistema operacional mais os programas que o acompanham. Este pacote, incluindo as ferramentas
necessárias para sua instalação, é chamado de distribuição.
LINUX
As distribuições podem ser produzidas em diferentes versões do Kernel, podem incluir diferentes conjuntos de aplicativos, utilitários, ferramentas e módulos de
driver, e podem oferecer diferentes programas de instalação e atualização para facilitar o gerenciamento do sistema.
Na maioria das distribuições existe um conjunto comum de programas básicos, utilitários e bibliotecas, que os projetistas de aplicativos podem esperar encontrar
em um sistema Linux.
As principais distribuições
Red Hat – Famoso por suas ferramentas de instalação e atualização do sistema operacional e por seu sistema bem projetado de instalação,
desinstalação e controle de pacotes de aplicativos de software.
Slackware – Era a distribuição mais popular. Não vem com RPM. Ganha em performance, mas peca ma interatividade. Usado mais para servidores de
rede.
Caldera OpenLink – O OpenLink 1.3 inclui o “K” Desktop Environment, uma licença não-comercial do StarOffice for Linux, Suporte Netware, uma
licença do DR-DOS para compatibilidade DOS.
S.u.S.E Linux – É uma conhecida distribuição de Linux, disponível principalmente na Europa e oferecida nas versões em inglês e alemão.
Debian / GNU – Não possui uma organização comercial patrocinadora. É produzida por uma equipe de voluntários. Utiliza seu próprio sistema de
gerenciamento de pacotes.
Introdução
As permissões são um dos aspectos mais importantes do Linux (na verdade, de todos os sistemas baseadosem Unix). Elas são usadas para vários fins, mas servem
principalmente para proteger o sistema e os arquivos dos usuários. Manipular as permissões é algo muito interessante, tanto quanto complexo.
Mas tal complexidade não deve ser interpretada como dificuldade e sim como grande variedade de configurações, o que permite criar vários tipos de proteção de
arquivos e diretórios.
Como você deve saber, somente o super-usuário (root) tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração,
administração e manutenção do Linux. Cabe a ele por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc. Naturalmente, a forma usada para
determinar o que o usuário pode fazer é a determinação de permissões. Este artigo visa explicar as configurações de permissões de arquivos e diretórios, assim como
modificá-las.
Entendendo as permissões
As linhas acima representam um comando digitado (ls -l) para listar um diretório e suas permissões. O primeiro item que aparece na linha (drwx----- e -rw-rw-r-) é
a forma usada para mostrar as permissões que o diretório Arquivos e o arquivo notas.txt têm. É esse item, que recebe o nome de string, que vamos estudar. Um ponto
interessante de citar é que o Linux trata todos os diretórios como arquivo também, portanto, as permissões se aplicam de igual forma para ambos. Tais permissões podem
ser divididas em quatro partes para indicar: tipo, proprietário, grupo e outras permissões. O primeiro caractere da string indica o tipo de arquivo: se for "d" representa um
diretório, se for "-" equivale a um arquivo.
Entretanto, outros caracteres podem aparecer, já que existem outros tipos de arquivo no Linux, conforme mostra a tabela abaixo:
d=>diretório
b=>arquivo de bloco
c => arquivo especial de caractere
p => canal
s => socket
- => arquivo normal
Repare agora que no restante da string temos 9 caracteres. Você já sabe o que significa o primeiro. Os demais são em 3 grupos de 3, cada um representado o
proprietário, o grupo e todos os demais respectivamente.
Vamos entender agora o que significa esses caracteres (r, w, x, -). Existem 3 tipos básicos de permissões: leitura, gravação e execução. Leitura permite aos
usuários ler o conteúdo do arquivo mas não altera-lo. Gravação permite que os usuários alterem o arquivo. Execução, como o nome diz, permite que o usuário execute o
arquivo, no caso de ser executável. Mas acontece que as permissões não funcionam isoladamente, ou seja, ou o usuário tem permissão de leitura ou de gravação ou de
execução.
As permissões funcionam em conjunto. Isso quer dizer que cada arquivo/diretório tem as 3 permissões, cabendo ao dono determinar qual dessas permissões é
habilitada para os usuários ou não. Pode ser que uma determinada quantidade de usuários tenha permissão para alterar um arquivo, mas outros não. Daí a necessidade
de se usar grupos. Neste caso, a permissão de gravação desse arquivo será dada ao grupo e todo usuário membro dele poderá alterar o arquivo.
É necessário ter um certo cuidado com as permissões. Por exemplo, do que adianta o usuário ter permissão de gravação se ele não tem permissão de leitura
habilitada? Ele poderá ler o arquivo para poder modificá-lo? Não! De certo, isso tem utilidade em arquivos de log. Fazendo associação com as letras r, w, x e o caractere -,
vamos entender cada uma:
A ordem em que as permissões devem aparecer é rwx. Sendo assim, vamos entender as strings do nosso exemplo, dividindo-a em 4 partes:
Linha 1:
é um diretório (d);
Linha 2:
é um arquivo (-);
o proprietário pode altera-lo, grava-lo, mas não executável. Como este arquivo não é executável, a permissão de execução aparece desabilitada (rw-);
o usuário somente tem permissão de ler o arquivo, não pode altera-lo (r--)
Acima, você dever tido pelo menos uma noção do que são permissões e sua importância no Linux.
Chegou a hora de aprender a configurar permissões e isso é feito através do comando chmod (de change mode). Um detalhe interessante deste comando é que
você pode configurar permissões de duas maneiras:
Para ter uma visão mais clara da forma simbólica com o chmod, imagine que tais símbolos se encontram em duas listas, e a combinação deles gera a permissão:
Lista 1
Símbolo
u => usuário
g => grupo
LINUX
O (letra o maiúscula) => outro
a => todos
Lista 2
Símbolo
r => leitura
w => gravação
x => execução
Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo teste.old para um usuário. Então o
comando a ser digitado será:
O "u" indica que a permissão será dada a um usuário, o sinal de adição (+) indica que está sendo adicionada a permissão e "w" indica que a permissão que está
sendo dada é de gravação.
Caso você queira dar permissões de leitura e execução ao seu grupo, o comando será:
Agora, vamos supor que o arquivo teste.old deverá estar com todas as permissões disponíveis para o grupo. Podemos usar então:
Dica: crie arquivos e diretórios e teste a combinação de permissões com chmod. Isso lhe ajudará muito no entendimento deste conceito.
Comandos do Linux
Se o Linux que você utiliza entra direto no modo gráfico ao ser inicializado, é possível inserir comandos no sistema através de uma aplicação de terminal. Esse
recurso é facilmente localizável em qualquer distribuição.
Se o computador que você acessa não estiver com o modo gráfico ativado, será possível digitar comandos diretamente, bastando se logar. Quando o comando é
inserido, cabe ao interpretador de comandos (também conhecido como shell) executá-lo. O Linux conta com mais de um, sendo os mais conhecidos o bash e o sh.
Quando um terminal é acessado, uma informação aparece no campo de inserção de comandos. É importante saber interpretá-la. Para isso, veja os exemplos
abaixo:
Observação: dependendo de sua distribuição e de seu shell, a linha de comandos pode ter um formato ligeiramente diferente do que é mostrado nos exemplos.
No Ubuntu Linux, por exemplo, o segundo exemplo fica na seguinte forma:
proffabricio@prof: ~$
Nos exemplos, a palavra existente antes do símbolo @ diz qual o nome do usuário que está usando o terminal (lembre-se de que no Linux é necessário ter um
usuário para utilizar o sistema). Os nomes que aparecem depois do @ indicam o computador que está sendo acessado seguido do diretório.
O caractere que aparece no final indica qual o poder do usuário. Se o símbolo for #, significa que usuário tem poderes de administrador ( root). Por outro lado, se
o símbolo for $, significa que este é um usuário comum, incapaz de acessar todos os recursos que um administrador acessa. Independente de qual seja, é depois do
caractere que o usuário pode digitar os comandos.
Agora que você já sabe como agir em um terminal, vamos aos comandos do Linux mais comuns. Para utilizá-los, basta digitá-los e pressionar a tecla Enter de seu
teclado. É importante frisar que, dependendo de sua distribuição Linux, um ou outro comando pode estar indisponível. Além disso, alguns comandos só podem ser
executados por usuários com privilégios de administrador.
cat arquivo: mostra o conteúdo de um arquivo. Por exemplo, para ver o arquivo concurso.txt, basta digitar cat concurso.txt;
LINUX
cd diretório: abre um diretório. Por exemplo, para abrir a pasta /mnt, basta digitar cd /mnt. Para ir ao diretório raiz a partir de qualquer outro, digite apenas cd;
clear: elimina todo o conteúdo visível, deixando a linha de comando no topo, como se o sistema acabasse de ter sido acessado;
cp origem destino: copia um arquivo ou diretório para outro local. Por exemplo, para copiar o arquivo concurso.txt com o nome concurso2.txt para /home, basta
digitar cp concurso.txt /home/ concurso 2.txt;
diff arquivo1 arquivo2: indica as diferenças entre dois arquivos, por exemplo: diff calc.c calc2.c;
find diretório parâmetro termo: o comando find serve para localizar informações. Para isso, deve-se digitar o comando seguido do diretório da pesquisa mais um
parâmetro (ver lista abaixo) e o termo da busca. Parâmetros:
mv origem destino: tem a mesma função do comando cp, só que ao invés de copiar, move o arquivo ou o diretório para o destino especificado;
mkdir diretório: cria um diretório, por exemplo, mkdir concursos cria uma pasta de nome concurso;
passwd: altera sua senha. Para um administrador mudar a senha de um usuário, basta digitar passwd seguido do nome deste;
O parâmetro now pode ser mudado. Por exemplo: digite shutdown -r +10 e o sistema irá reiniciar daqui a 10 minutos;
su: passa para o usuário administrador, isto é, root (perceba que o símbolo $ mudará para #);
telnet: ativa o serviço de Telnet em uma máquina. Para acessar esse computador a partir de outros por Telnet, basta digitar telnet nomedamáquina ou telnet IP.
Por exemplo: telnet 192.168.0.10. Após abrir o Telnet, digite help para conhecer suas funções;
uptime: Mostra o tempo de execução do sistema desde que o computador foi ligado.
uname: mostra informações do sistema operacional e do computador. Digite uname -a para obter mais detalhes;
useradd usuário: cria uma nova conta usuário, por exemplo, useradd aluno cria o usuário aluno;
userdel usuário: apaga a conta do usuário especificado;
whereis nome: procura pelo binário do arquivo indicado, útil para conhecer seu diretório ou se ele existe no sistema;
Finalizando
Praticamente todos os comandos citados possuem parâmetros que permitem incrementar suas funcionalidades. Por exemplo, se você digitar o comando ls com o
parâmetro -R (ls -R), este mostrará todos os arquivos do diretório, inclusive os ocultos.
A melhor forma de conhecer os parâmetros adicionais de cada comando é consultando as informações de ajuda. Para isso, pode-se usar o recurso --help. Veja o
exemplo para o comando ls:
ls –help
Também é possível utilizar o comando man (desde que seu conteúdo esteja instalado), que geralmente fornece informações mais detalhadas. Par usar o man
para obter detalhes do comando cp, por exemplo, a sintaxe é:
man cp
Se você estiver utilizando o bash, pode-se aplicar o comando help ou info da mesma forma que o comando man:
help cp
info cp
Assim como conhecer os comandos básicos do Linux é importante, também o é saber como acessar seus recursos de ajuda, pois isso te desobriga de decorar as
seqüências das funcionalidades extras. Sabendo usar todos os recursos, você certamente terá boa produtividade em suas tarefas no Linux.
Esses comandos são digitados em um terminal XWindow, como por exemplo o xterm, o rxvt ou no console, em modo texto.
LINUX
Não é preciso se preocupar em guardar todas as combinações de parâmetros e opções de todos os comandos.
Com o tempo, é possível memorizá-los. O manual online serve para ajudar na hora de descobrir a função de um comando e suas opções. Para saber mais sobre
um comando digite: man comando
Uma das características mais importantes do LINUX é o poder de combinar vários comandos para obter uma informação Isso é conseguido mandando dados
serem transmitidos para um arquivo, para a tela ou para um programa e obtidos de um arquivo, teclado ou programa, sempre de uma forma padrão.
A saída de um comando pode ser direcionada para um arquivo ou para a tela.
Além disso, a saída de um comando pode ser diretamente mandada como entrada de outro.
Símbolo Redireção
> Redireção para saída
>> Redireção da saída para o fim do arquivo
| Redireção da saída de um comando para a entrada de outro
> Redireção da entrada
Outro exemplo:
O arquivo1 _e criado _a partir do que digitarmos no teclado. É o editor de textos mais simples que se poderia ter no Linux.
startx 2¿ erros
Esse comando vai iniciar o XWindow a partir do console jogando todos os erros no arquivo: erros.
Por último, a idéia mais importante de redireção de arquivos: o pipe. O que sai de um comando é a entrada de outro comando.
Por exemplo, digamos que você digita ls e existem muitos arquivos e o resultado passa muito rápido na tela. Você pode jogar a saída do comando ls para o
comando more que pagina um arquivo para a tela.
ls | more
Sistema de arquivos
A lista de sistemas de arquivos suportados pelo Linux é muito grande mas, neste artigo, discutirei somente os mais comuns.
Atualmente, uma importante característica dos atuais sistemas de arquivos é o "journaling". Sistemas de arquivos que possuem essa característica são preferidos
em detrimento aos que não possuem.
Journaling é um recurso que permite recuperar um sistema após um desastre no disco (ex.: quando um disco está sujo) em uma velocidade muito maior que nos
sistemas de arquivos sem journaling.
Segue abaixo uma breve descrição sobre os sistemas de arquivos mais comuns disponíveis para o Linux:
O Linux é muito versátil quando o assunto é sistema de arquivos e por isso, é muito importante o entendimento de suas funcionalidades. Um exemplo disso é a
possibilidade de criar e manter arquivos em diferentes tipos de partições, discos, dispositivos e computadores remotos. Além disso, o Linux dá suporte há vários tipos de
sistemas de arquivos (EXT2, EXT3, EXT4, FAT, NTFS, ReiserFS e Reiser4 entre outros).
O ext2 é um sistema de arquivos de disco de alta performance usado pelo Linux para dispositivos de armazenamento, como discos rígidos e mídias removíveis.
O sistema de arquivos Second Extended Filesystem foi desenhado como uma extensão de Extended Filesystem (ext). O ext2 oferece a melhor performance (em
termos de velocidade e uso da CPU) entre todos os sistemas de arquivos suportados pelo Linux.
Ext2 é um sistema de arquivos muito rápido pelo fato de não possuir um journal, sendo assim os dados são gravados diretamente. Quando ocorre algum crash, o
fsck é acionado para a verificação do sistema, corrigindo eventuais perdas de dados.
O ext3 (que significa "Third Extended File System") faz parte da nova geração de sistemas de gestão de arquivos do Linux. A sua maior vantagem é o suporte de
journaling, que consiste em guardar informação sobre as transações de escrita, permitindo uma recuperação rápida e confiável em caso de interrupção súbita (por
exemplo, por falta de Eletricidade).
Na maioria dos casos, comparado ao ext2, o uso deste sistema de arquivos melhora o desempenho do sistema de arquivos através da gravação sequencial dos
dados na área de metadados e acesso mhash da sua árvore de diretórios.
A estrutura da partição ext3 é semelhante à da ext2, pelo que a migração de um formato para o outro é simples. A adição do journaling é feita em um arquivo
chamado journal que fica oculto pelo código ext3 na partição (desta forma ele não poderá ser apagada, o que comprometeria o funcionamento do sistema). A estrutura
idêntica da partição ext3 com a ext2 torna mais fácil a manutenção do sistema, já que todas as ferramentas para recuperação ext2 funcionarão sem problemas, sendo
mesmo possível montar uma partição ext3 como se fosse ext2.
ReiserFS
O sistema de arquivos ReiserFS foi criado recentemente. Mas atualmente quase todas as distribuições Linux o suportam.
Sua performance é muito boa, principalmente para um número muito grande de arquivos pequenos.
XFS
LINUX
O sistema de arquivos XFS também possui suporte a journaling. Foi desenvolvido originalmente pela Silicon Graphics e posteriormente disponibilizado o código
fonte. O XFS é considerado um dos melhores sistemas de arquivos para banco de dados, pois é muito rápido na gravação.
XFS utiliza muitos recursos de cache com memória RAM, e para utilizar XFS é recomendado utilizar sistemas que possuem redundância de energia.
SWAP
Em alguns lugares ele não é mencionado como um Sistema de Arquivos, mas resolvi descrever aqui, pois faz parte deste artigo.
VFAT
O sistema de arquivos VFAT não possui suporte a journaling. É utilizado normalmente para transferir dados entre sistemas M$ Windows e o Linux instalados no
mesmo disco, pois pode ser lido e escrito por ambos os sistemas operacionais.
O sistema de arquivos VFAT está longe de ser um sistema de arquivos utilizado para Sistemas Linux, exceto para compartilhamento/compatibilidade entre o M$
Windows e Linux.
Se você utilizar VFAT no Linux, esteja certo de perder alguns atributos, tais como: permissão de execução, links simbólicos, entre outras coisas.
Ambos os sistemas de arquivos ext3 e ReiserFS são maduros o bastante para serem utilizados como padrão no Linux. Esses dois são os mais utilizados pelas
distribuições Linux.
Enquanto no Windows a partição raiz geralmente é “C:\”, os programas são instalados em “C:\Arquivos de Programas” e os arquivos do sistema em
C:\WINDOWS, no GNU/Linux é basicamente o contrário: o diretório raiz é representado pela barra “/”, que pode ficar armazenado no disco físico ou em uma unidade de
rede, e todos os arquivos e pastas do sistema ficam dentro dele.
/ - Diretório raiz, armazena todos os outros;
/bin – Armazena os executáveis dos comandos básicos do sistema;
/boot – É onde ficam o kernel e os arquivos de boot (inicialização) do sistema;
/dev – Dispositivos de entrada/saída (disquete, disco rígido, paca de som, etc). Todos os arquivos contidos nesse diretório (/dev/hda, /dev/dsp, /dev/fd0, etc) são
ponteiros para dispositivos de hardware.
/etc – Armazena os arquivos de configuração do sistema, como se fossem o arquivo de registro do Windows;
/home – Aqui ficam as pastas e os arquivos dos usuários. O root tem acesso a todas elas, mas cada usuário só tem acesso às suas próprias pastas.
/lib – Bibliotecas do sistema, como se fosse o diretório System32 do Windows;
/mnt – Ponto de montagem para dispositivos de hardware que estão em /dev. O leitor de disquetes encontrado em /dev/fd0, por exemplo, será montado em /mnt/floppy.
Ao contrário do Windows, onde os discos e partições aparecem como C:, D:, E:, no GNU/Linux eles aparecem como hda1, hda2, hdb, sdb, cdrom, etc;
/opt – Possui os softwares que não fazer parte da instalação padrão do GNU/Linux;
LINUX
/proc – É criado na memória (portanto, não ocupa espaço em disco) pelo kernel e fornece informações sobre ele e os processos ativos;
/root – Diretório local do superusuário (root);
/sbin – Contém arquivos referentes à administração e manutenção de hardware e software;
/tmp – Arquivos temporários;
/usr – É o diretório com o maior número de arquivos, incluindo bibliotecas (/usr/lib) e executáveis (/usr/bin) dos principais programas;
/usr/X11 – arquivos do sistema do gerenciador de janelas;
/usr/man – manuais online;
/var – Arquivos variáveis, que mudam com freqüência.
Windows Linux
A: /dev/fd0
B: /dev/fd1
C: /dev/HDA1