FACULDADE DE TECNOLOGIA DE GUARATINGUETÁ
LINUX Adiel Lemos Bruno Michael Célio de Souza Eliphas Siqueira Rubens Levy Wanessa Laís
Trabalho apresentado à Faculdade de Tecnologia de Guaratinguetá, para a disciplina Sistemas Operacionais do curso de Tecnologia em Informática. Prof. José Geraldo
Guaratinguetá - SP 2009
2
SUMÁRIO 1 Introdução ................................................................................................................................ 3 1.1 Origens do sistema ........................................................................................................... 3 2 O sistema operacional Linux ................................................................................................... 6 2.1 Características ................................................................................................................... 6 2.2 Estrutura ........................................................................................................................... 6 2.2.1 Kernel ........................................................................................................................ 6 2.2.2 Shell ........................................................................................................................... 7 2.2.3 Biblioteca-Padrão ...................................................................................................... 7 2.2.4 Utilitários ................................................................................................................... 7 2.3 Gerenciamento de Processos ............................................................................................ 7 2.3.1 Processos ................................................................................................................... 8 2.3.2 Atributos de processos ............................................................................................... 9 2.3.3 Atributos de execução.............................................................................................. 10 2.3.4 Classificação dos processos ..................................................................................... 11 2.3.5 Comandos para processos........................................................................................ 13 2.4 Gerenciamento de Arquivos ........................................................................................... 14 2.4.1 Privilégios ................................................................................................................ 14 2.5 Partições e Sistemas de Arquivos ................................................................................... 15 2.5.1 Identificação de discos e partições em sistemas Linux ............................................... 16 2.5.2 Sistema de Arquivos ................................................................................................ 18 2.5.3 Características dos dispositivos montados .............................................................. 20 2.5.4 Comandos específicos ............................................................................................. 21 2.6 Utilização do Sistema Operacional................................................................................. 23 2.6.1 Live CD ................................................................................................................... 23 2.6.2 Distribuições ............................................................................................................ 26 2.6.2 Ambientes Gráficos ................................................................................................. 31 2.6.4 Comandos de Sessão ............................................................................................... 34 2.7 Gerenciamento de Usuários e Grupos ............................................................................ 35 2.7.1 Usuários e Grupos ................................................................................................... 36 2.7.2 Comandos ................................................................................................................ 40
1 Introdução Para que esses objetivos sejam traçados primeiro é elaborado o planejamento estratégico da organização que contempla um conjunto de providências a serem tomadas pelos executivos que estarão definindo as intenções da organização em relação ao mercado em que atua, e possíveis oportunidades de negócio a serem exploradas. A partir do planejamento estratégico da empresa serão traçados planejamentos a médio prazo para cada departamento, e somente aí é que será analisado e traçado os objetivos individuais.
1.1 Origens do sistema Tudo começou em 1983, pouco depois que a IBM lançou seu primeiro PC e a Microsoft sua primeira versão do DOS. Richard Stallman criava a Free Software Foundation, que ao longo da década produziu a licença GNU e toda a base filosófica relacionada a ela e, mais importante, um conjunto de ferramentas, como o editor Emacs e o compilador GCC. O Linux foi originalmente desenvolvido como um passatempo de Linus Torvalds. Ele queria um sistema operacional que fosse semelhante a um Unix, com todas as suas funcionalidades e, ainda, que pudesse utilizá-lo num PC. A partir dessa idéia, Linus começou a trabalhar nesse que seria o futuro kernel do sistema operacional que hoje denominamos Linux. Isso tudo aconteceu em meados de 1991, quando Linus cursava a faculdade de Computação na Finlândia. Em 5 de outubro de 1991 a seguinte mensagem circulou na usenet: “Como eu mencionei há um mês está trabalhando em uma versão gratuita de um sistema semelhante ao Minix para computadores AT-386. Ele já alcançou o estágio de ser usável (embora possa não ser, dependendo do que você quer fazer), e pretendo distribuir o código fonte. É apenas a versão 0.02..., mas já consegui rodar nele o bash, gcc, gnu-make,
4
gnu-sed, compress, etc." Esta mensagem era assinada por Linus Torvalds, e ninguém adivinharia que ela estaria marcando o início de um movimento que, menos de dez anos depois, já tem mais de trinta milhões de seguidores. Assim surgiu o que seria o primeiro kernel utilizável do Linux. O fato de o código fonte estar amplamente disponível e poder ser utilizado de forma muito liberal permitiu que muitos desenvolvedores passassem a trabalhar no sistema ainda em sua fase embrionária, adicionando novos recursos num ritmo muito rápido. Mas, durante os primeiros anos, o Linux ficou restrito a este círculo técnico, muito longe de ser usado em larga escala. Isso começou a mudar com o aparecimento da Internet. O Apache foi um dos primeiros servidores Web a ser lançado e tornou-se rapidamente o mais usado numa época em que existiam poucos concorrentes à altura. O Apache rodava em várias plataformas, mas o Linux tornou-se a opção mais comum, por ser rápido e estável. Pouco tempo depois veio o servidor Samba, que permitia compartilhar arquivos numa rede Windows, de forma mais estável e mais barata que usando um servidor Windows. Novamente, o Linux tornou-se a opção preferida. Depois vieram os bancos de dados e muitas outras aplicações, mas todas tinham algo em comum: sempre falávamos de servidores. Por volta do final de 1994 foi lançada a primeira versão for Linux do Xfree. Ele é um "servidor gráfico", uma interface gráfica usada em vários sistemas Unix. Basicamente, antes do Xfree o Linux tinha apenas a velha interface de modo texto, o que explicava o fato dele só ser popular entre programadores e administradores de sistemas. Nesta época começaram a surgir as primeiras distribuições Linux, que eram um jeito
5
mais "fácil" de instalar o sistema. Ao invés de ficar compilando tudo, começando pelo Kernel e passando por todos os aplicativos da Free Software Foundation e outros que você pretendesse rodar, você simplesmente passava alguns dias editando arquivos de configuração com a ajuda de alguns manuais mal escritos. A despeito de todas as dificuldades iniciais, podemos dizer que as Distribuições Linux fizeram para o software aquilo que os primeiros PCs fizeram para o hardware: A oportunidade de expansão da computação pessoal.
2 O sistema operacional Linux 2.1 Características O Linux é um sistema operacional multiprogramável, multiusuário, multiplataforma – capaz de utilizar mais de um processador, multiprocessamento – criação de threads – e implementação de memória virtual. Escrito em linguagem de alto nível, este sistema operacional possui flexibilidade, com a possibilidade de implementação de threads, suporte a mais de um protocolo de rede e várias linguagens. O Linux possui várias características que o diferem dos outros sistemas operacionais e que o aproximam do UNIX, sendo um dos motivos da sua escolha em várias aplicações nas quais são necessárias estabilidade e segurança.
2.2 Estrutura A maior parte do núcleo do sistema operacional Linux é escrita em linguagem C, e ele é capaz de implementar dois níveis de acesso, os modos kernel e shell.
2.2.1 Kernel O kernel é o núcleo do sistema operacional, é a parte que controla diretamente o hardware da máquina. Quando falamos de Linux, estamos nos referindo somente ao kernel do sistema. Tudo que existe ao redor do kernel são aplicativos que compõem uma distribuição do Linux. O Kernel seria como o cérebro e o coração de um sistema operacional. Ele sozinho não serve para nada, mas sem ele o resto do corpo também não vai muito longe. Em 1991 a Free Software Foundation ainda estava dando os primeiros passos no desenvolvimento do Hurd (que ainda hoje está muito longe se ser concluído) enquanto o Linux de Linus Torvalds era utilizável desde suas primeiras versões. O corpo encontrava o cérebro.
7
2.2.2 Shell Shell é o nome genérico de uma classe de programas que funcionam como intepretador de comandos e linguagens de programação script (interpretada) no UNIX. Os shells mas populares são bash, csh, tcsh, ksh e zsh. O shell é a interface entre o usuário e o kernel. O usuário pode escolher qual dos shells vai utilizar. O shell-padrão do Linux é o bash.
2.2.3 Biblioteca-Padrão A biblioteca padrão implementa uma interface entre o os programas e o sistema operacional.
2.2.4 Utilitários Esta é a camada mais externa do sistema é a interface com o usuário, formada por diversos programas utilitários.
2.3 Gerenciamento de Processos A gerência de processos nada mais é do que a definição, análise e melhoria contínua dos processos, com objetivo de atender as necessidades e expectativas dos clientes.
8
2.3.1 Processos Nas execuções originais de Unix, um processo era a todo o programa executar. Para cada programa, a semente mantida a par. São informações ligadas diretamente aos processos, que devem ser tratadas no gerenciamento:
A posição atual da execução (tal como a espera de uma chamada do sistema para retornar da semente), chamada freqüentemente o contexto do programa.
Que limas o programa teve o acesso.
Os credentials do programa (que o usuário e o grupo possuíram o processo, para o exemplo).
O diretório atual do programa.
Que espaço de memória o programa teve o acesso e como foi colocado para fora.
Um processo era também a unidade programando básica para o sistema operando-se. Somente os processos foram permitidos funcionar no processador central. Embora a definição de um processo possa parecer óbvia, o conceito das linhas faz tudo deste mais ou menos bem definido. Uma linha permite que um único programa funcione em lugares múltiplos ao mesmo tempo. Todas as linhas criadas (ou girou fora) por uma única parte do programa mais das características que diferenciam processos de se. Para o exemplo, linhas do múltiplo que originam da mesma informação da parte do programa em limas abertas, em credentials, no diretório atual, e na imagem da memória. Assim que uma das linhas modificar uma variável global, todas as linhas vêem o valor novo melhor que velho. Muitas execuções de Unix (licença da Canonical, incluindo o sistema V do AT&T) redesenhado para fazer a linhas a unidade programando fundamental para a semente, e a um
9
processo transformaram-se uma coleção das linhas que compartilharam de recursos. Enquanto assim muitos recursos foram compartilhados entre linhas, a semente poderia comutar entre linhas no mesmo processo mais rapidamente do que poderia executar um interruptor cheio do contexto entre processos. Isto resultou em a maioria de sementes de Unix que têm um modelo de processos two-two-tiered que se diferenciasse entre linhas e processos. De forma resumida:
Processo é um programa em execução.
O Linux é responsável por gerenciar os processos de forma a otimizar a utilização da CPU mudando o status do processo.
No diretório /proc é criado um subdiretório para cada processo em execução.
O Linux cria uma hierarquia de processos onde o processo inicial é chamado de “pai” e os criados a partir deste são chamados de “filho”.
A união de vários processos é chamada de sessão e esses processos podem ser visualizados e diferenciados.
2.3.2 Atributos de processos
Um processo pode ter prioridade variando de -20 (maior prioridade) a 19 (menor prioridade), sendo 10 (dez) o padrão.
Vários atributos controlam sua execução:
PID – Número único de Identificação do Processo
PPID – PID do processo Pai que iniciou o Processo
UID – Idenificador do Usuário que iniciou o Processo
GID – Idenificador do Grupo que iniciou o Processo
EUID – Identificação do UID do usuário efetivo que originou o Processo.
10
EGID - Identificação do GID do grupo efetivo que originou o Processo.
TTY – Terminal de console onde se originou o Processo
2.3.3 Atributos de execução
Quando um processo está sendo executado, passa por vários estados. O escalonador de tarefas do kernel decide, de acordo com a prioridade e a ordem das suas filas de execução, quando ceder a CPU a esse processo, que para o estado de running (execução);
Quando seu espaço de tempo de execução (slice) esgotar, passará novamente para o estado de ready aguardando um novo slice.;
Se este processo tentar acessar um periférico que estiver ocupado, passará então para waiting até a liberação para operações de entrada e saída;
No final da execução, o processo pode ser morto. Processos que terminam sem seu pai ser informado podem entrar no estado zombie (zumbi);
Os processos encerrados normalmente entram no estado dead (morto).
A figura abaixo ilustra graficamente como a execução dos processos acontece no Linux.
11
2.3.4 Classificação dos processos Quanto à execução:
Foreground (primeiro plano) - Inicializados no terminal de comandos, podem interagir com os usuários exibem a sua execução na saída padrão.
Background (segundo plano) - Inicializados no terminal de comandos, não interagem com os usuários e não exibem sua execução na saída padrão. Estes comandos não prendem o prompt e permitem que outros processos sejam inicializados no mesmo terminal. o Para colocar um processo em backgroud use
+ ou inicie-o pelo terminal com um & („e‟ comercial).
Quanto ao tipo, podem ser classificados como:
Interativos - Iniciados num terminal e controlados por ele.
Lote (batch) - Scripts que executam vários programas que podem ser agendados e suas saídas podem ser enviadas por email para os usuários.
12
Serviços (Daemons) - Permanecem em execução normalmente da inicialização do Linux e enquanto o Linux estiver num mesmo RunLevel. São executados em background e suas saídas são registradas nos sistemas de Log do Linux. Normalmente controlados pelo aplicativos services e chkconfig.
13
2.3.5 Comandos para processos Como quase tudo, quiçá tudo, no Linux, os processos também são controlados principalmente por comandos. Os principais comandos de processos no Linux são:
bg [JobID] o Coloca um processo em background.
fg [JobID] o Coloca um processo em foreground.
jobs [opções] o Lista os processos em execução em background.
ps [opções] o Exibe informações sobre os processos ativos.
top [opções] o Exibe os processos continuamente e interativamente.
free [opções] o Exibe informações sobre a memória física e de swap.
kill [opções] [sinal] o Finaliza um processo pelo PID mudando seu (status).
killall [opções] [sinal] <nome_do_processo> o Finaliza um processo pelo nome alterando seu status.
A lista de sinais pode ser obtida com kill -l, sendo os mais importantes: 1 – SIGHUP: Relê as configurações do processo sem finalizá-lo. 9 – SIGKILL: Encerra o processo sem aguardar a finalização dos seus subprocessos.
14
15 – SIGTERM: Termina a execução de um processo, finalizando antes, todos seus agendamentos e cancelando novas conexões.
2.4 Gerenciamento de Arquivos 2.4.1 Privilégios O gerenciamento de privilégios permite ao administrador do sistema definir políticas para acesso dos usuários e grupos aos arquivos e diretórios.
Estas proteções são organizada em três classes:
Privilégios do DONO: é aquele que criou o arquivo.
Privilégios do GRUPO: é o grupo primário a que o usuário dono pertence.
Privilégios dos OUTROS: Quando o usuário não é o DONO nem pertence ao GRUPO.
Cada classe é composta de níveis de permissões: Leitura (r), Escrita (w) e Execução (x). 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.
15
Os três números indicam respectivamente:
7 : Permissões para o dono do arquivo;
4 : Permissões para o grupo;
4 : Permissões para os demais usuários.
Cada permissão possui um número:
4 : Leitura;
2 : Gravação;
1 : 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údo;
1 : Só execução (não é possível ler o arquivo ou alterá-lo, apenas executar um programa);
4 : Apenas leitura;
6 (4+2) : Leitura + gravação;
7 (4+2+1): Controle total: leitura + gravação + execução.
2.5 Partições e Sistemas de Arquivos O Linux utiliza diretórios e arquivos para referenciar a todos os dispositivos anexados ao sistema. Quando montamos um dispositivo (CDROM, Floppy, Zip driver, partições, NFS, FTP...) este ficará acessível pelo diretório apontado na montagem. Este diretório fica conhecido por "ponto de montagem". Permissões de arquivos e diretórios Um sistema Linux geralmente tem uma estrutura de diretórios um pouco complexa. Os
16
arquivos ali dispostos obedecem a certa ordem e uma lógica fazendo com que cada diretório do sistema tenha uma finalidade específica. Cada sistema de arquivos tem uma característica em particular, mas seu propósito é o mesmo: Oferecer ao sistema operacional a estrutura necessária para ler/gravar os arquivos/diretórios.
2.5.1 Identificação de discos e partições em sistemas Linux No Linux, os dispositivos existentes em seu computador (como discos
rígidos,
disquetes, tela, portas de impressora, modem) são identificados por um arquivo referente a este dispositivo no diretório /dev. A identificação de discos rígidos no Linux é feita da seguinte forma: /dev/hda1 |
| ||
|
| | |_Número que identifica o número da partição no disco rígido.
|
| |
|
| |_Letra que identifica o disco rígido (a=primeiro, b=segundo, etc...).
|
|
|
|_Sigla que identifica o tipo do disco rígido (hd=ide, sd=SCSI, xt=XT).
| |_Diretório onde são armazenados os dispositivos existentes no sistema.
Abaixo algumas identificações de discos e partições em sistemas Linux: * _/dev/fd0_ - `Primeira unidade de disquetes'. * _/dev/fd1_ - `Segunda unidade de disquetes'. * _/dev/hda_ - `Primeiro disco rígido na primeira controladora IDE do micro (primary master)'.
17
* _/dev/hda1_ - `Primeira partição do primeiro disco rígido IDE'.
* _/dev/hdb_ - `Segundo disco rígido na primeira controladora IDE do micro (primary slave)'. * _/dev/hdb1_ - `Primeira partição do segundo disco rígido IDE'. * _/dev/sda_ - `Primeiro disco rígido na primeira controladora SCSI'. * _/dev/sda1_ - `Primeira partição do primeiro disco rígido SCSI'. * _/dev/sdb_ - `Segundo disco rígido na primeira controladora SCSI'. * _/dev/sdb1_ - `Primeira partição do segundo disco rígido SCSI'. * _/dev/sr0_ - `Primeiro CD-ROM SCSI'. * _/dev/sr1_ - `Segundo CD-ROM SCSI'. * _/dev/xda_ - `Primeiro disco rígido XT'. * _/dev/xdb_ - `Segundo disco rígido XT'.
É importante entender como os discos e partições são identificados no sistema, pois será necessário usar os parâmetros corretos para montá-los. Cada disco pode ter de uma até dezesseis partições onde cada partição é representada por um número inteiro. Por exemplo /dev/hda1 será a primeira partição se houver outra partição ela será a /dev/hda2 e assim por diante sendo que a mesma regra se pratica nos discos SCSI.
18
Existem quatro tipos de partições:
Partições primárias - Cada disco pode conter até quatro partições primárias elas contêm pelo menos um sistema de arquivos e pelo menos uma deve ser criada. Uma dessas partições deve ser marcada como ativa para que a carga do sistema operacional seja possível.
Partição estendida - Esse tipo de partição é um contêiner de partições lógicas, ele não pode conter nenhum sistema de arquivos e um disco pode ter somente uma partição estendida.
Partições lógicas - As partições lógicas são subpartições que existem em conjunto com a partição estendida, podem-se ter doze partições desse tipo e elas podem ser nomeadas á partir do número cinco até o dezesseis. Podemos ter no máximo 15 partições com sistemas de arquivos em único disco, sendo três primárias e doze lógicas.
Partições de swap - São partições que tem o objetivo de aumentar a performance do sistema, ela possibilita que o Linux tenha uma memória virtual em disco. Ela trabalha como um arquivo de troca de dados entre a memória física e o disco.
2.5.2 Sistema de Arquivos Sistema de arquivos é a forma que o sistema operacional usa para representar determinada informação em um espaço de armazenagem. É o método de identificar e indexar as informações que estão armazenadas em qualquer mídia: disquetes, discos rígidos, drives em memória, CDs, etc. Quando se prepara um disco para o trabalho através do processo de formatação física, criam-se os meios magnéticos necessários para armazenar os dados. Este processo faz uma
19
preparação do dispositivo de armazenagem para que ele possa receber um sistema de arquivos e futuramente os dados do usuário. Um sistema de arquivos, portanto, é necessário para manter padrões, para controlar o tamanho das partições, permissões de arquivos, tamanho dos arquivos e sua organização, entre muitas outras funções. O Linux possui um sistema de acesso ao sistema de arquivos através de restrições onde, a cada arquivo ou diretório, são associadas permissões para o dono, o grupo e outros usuários. Todo arquivo ou diretório são protegidos pelas suas permissões determinando assim quais usuários têm acessos a eles e com que finalidade. Entre os sistemas de arquivos existentes posso citar: * Ext2' - Usado em partições Linux Nativas para o armazenamento de arquivos. É identificado pelo código 83. Seu tamanho deve ser o suficiente para acomodar todos os arquivos e programas que deseja instalar (você encontra isto no manual de sua distribuição). * Ext3' - Este sistema de arquivos possui melhorias em relação ao ext2, como destaque o recurso de journaling. Ele também é identificado pelo tipo 83 e totalmente compatível com o ext2 em estrutura. O journal mantém um registro de todas as operações realizadas no sistema de arquivos, caso aconteça uma queda de energia elétrica (ou qualquer outra anormalidade que interrompa o funcionamento do sistema), o fsck verifica o sistema de arquivos no ponto em que estava quando houve a interrupção, evitando a demora para checar todo um sistema de arquivos, que pode levar minutos em sistemas de arquivos muito grandes. * Swap' - Usado em partições Linux Swap para oferecer memória virtual ao sistema. Note que é altamente recomendado o uso de uma partição Swap no sistema (principalmente se você tiver menos que 16MB de memória RAM). Este tipo de partição é identificado pelo código 82.
20
* proc' - Sistema de arquivos do kernel. * FAT12' - Usado em disquetes no `DOS' * FAT16' - Usado no `DOS' e oferece suporte até discos de 2GB * FAT32' - Também usado no `DOS' e oferece suporte a discos de até 2 Terabytes
2.5.3 Características dos dispositivos montados As características dos dispositivos montados ou preparados para serem montados estão em dois arquivos. /etc/fstab O arquivo /etc/fstab permite que as partições do sistema sejam montadas facilmente especificando somente o dispositivo ou o ponto de montagem. Este arquivo contém parâmetros sobre as partições que são lidas pelo comando mount. Cada linha deste arquivo contém a partição que desejamos montar, o ponto de montagem, o sistema de arquivos usado pela partição e outras opções. O arquivo "fstab" tem a seguinte forma: Dispositivo
P. Mont.
Tipo
Opcoes
dump ordem
/dev/hda1
/
ext2
defaults
0
1
/dev/hda2
/boot
ext2
defaults
0
2
/dev/hda3
/win
vfat
defaults,noauto
0
0
/dev/hdg
/cdrom
iso9660
defaults,noauto
0
0
Os campos do "/etc/fstab" são:
Dispositvo de Origem o As origens disponíveis estão no diretório "/dev" ou são sistemas externos ao computador como compartilhamentos NFS ou FTP.
21
Ponto de montagem o Destino para o dispositivo montado.
Tipo o É a indicação do tipo de arquivo montado.
Opções o Algumas das opções que indicarão como será montado o dispositivo:
exec Permite (exec) ou não (noexec) a execução de arquivos bináriosuser
Permite
(user)
ou
não
(nouser)
a
montagem/desmontagem pelo usuárioro Monta para somente leiturarw Monta para leitura e escrita auto Será (auto) ou não (noauto) montado na inicialização.
Dump o Indica (1) ou não (0) se será feito um backup do sistema em questão.
Ordem o Indica ordem em que este dispositivo será checado durante a inicialização, se usar 0 este sistema não será checado.
/etc/mtab O arquivo "/etc/mtab" contém as informações dos arquivos montados atualmente e suas características. 2.5.4 Comandos específicos mount [-fnrsvw] [-t vfstype] [-o opções] dispositivo dir Todos os arquivos acessíveis em um sistema Unix estão organizados em uma grande árvore, a hierarquia de arquivos, iniciada pelo raiz sim bolizada como /. Estes arquivos podem estar distribuídos por diversos dispositivos. O comando mount destina-se a incluir o sistema
22
de arquivos encontrado em algum dispositivo à grande árvore de arquivos. As opções mais comuns são:
a - Monta todos os dispositivos listados no "/etc/fstab"
n - Monta sem registrar em "/etc/mtab"
r - Monta somente em leitura (read only)
t - Informa o tipo (type) de sistema de arquivos que será montado.
o - Monta uma imagem com sistema de "loopback"
máquina - Informa que o recurso está em outro servidor
timeout –n - Informa o tempo, em décimos de segundos, que o cliente NFS irá esperar por uma requisição completar. O valor padrão é 0,7 segundos.
umount [diretório] Desmonta o ponto de montagem feito com o "mount". Este comando só será concluído se o usuário não estiver utilizando recursos deste diretório montado.
dd if=[origem] of=[destino] Cria uma imagem de um dispositivo. Uma imagem é uma cópia fiel do dispositivo contendo informações do conteúdo e informações físicas. Usado para criar disco de boot de instalação.
23
eject [opções] Este comando ejeta dispositivos. Sem opções é aplicado para o CDROM. Para obter sucesso neste comando não devemos estar utilizando o dispositivo. t - Fecha o CDROM r - Ejeta o CDROM
fdformat -n [dispositivo] O comando fdformat executa uma formatação de baixo nível em um disquete. Este comando executa a formatação de baixo nível (física), segundo um mapa existente em "/dev/fdnhXXXX", onde (n) é número do disquete e o (h) será minúsculo para baixa densidade ou (H) para alta densidade e (XXXX) será o tamanho do disquete em bytes. A opção "-n" desabilita a verificação que será feita após a formatação.
2.6 Utilização do Sistema Operacional 2.6.1 Live CD Um dos grandes diferenciais do Linux é que algumas versões do sistema operacional são disponibilizadas tanto para instalação quanto para rodarem como um Live CD. Segundo Morimoto (2008a), um Live CD nada mais é que "uma versão pré-instalada do sistema, que utiliza um conjunto de truques para rodar diretamente a partir do CD-ROM". Ou seja, o sistema operacional é compilado de forma que sua execução aconteça independente dos discos rígidos e de instalações. Antes de explicar como funciona o Live CD, no entanto, deve-se explicar como funciona a execução de um sistema operacional. Os sistemas operacionais convencionais, incluindo-se o Linux, utilizam o CD ou DVD
24
somente para a execução do instalador, que descompacta os arquivos contidos no disco removível e transferem para o disco rígido conforme suas configurações. Já no caso dos Live CDs, a utilização do sistema operacional acontece de forma muito diferente. Quando rodam a partir de um CD, os sistemas operacionais descompactam os arquivos on-the-fly, ou seja, apenas quando vão utilizá-los, ao contrário dos sistemas operacionais convencional, em que os arquivos permanecem descompactados, sejam eles utilizados ou não. Dessa forma, o sistema operacional que soma dois gigabytes de dados passa a caber em um CD de 700MB. Além disso, afirma Morimoto (2008a), os Live CDs são capazes de "melhorar o desempenho do sistema, aumentando a taxa de transferência efetiva do CD-ROM". Os motivos da utilização dos Live CDs são muitos, mas o principal é o fato de não haver a necessidade de instalação em disco, o que atrai os mais conservadores e que não possuem conhecimentos amplos em informática, que geralmente não acreditam na possibilidade de execução de um sistema operacional completo a partir de uma unidade de disco read-only. Essa possibilidade permite que esses usuários conheçam o sistema operacional, em especial o Linux, sem nenhum compromisso ou comprometimento de seus dados gravados no disco rígido, permitindo a eles se adaptarem aos poucos ao sistema, aprendendo a utilizá-lo gradualmente, passo-a-passo. Há também o bom desempenho do sistema, que permite que o sistema operacional que roda direto da unidade de CD obtenha a taxa de transferência de um disco rígido magnético, tornando a execução do Live CD igual à execução de sistemas operacionais instalados. "A idéia é que um CD-ROM de 52x é capaz de ler a, em média, 5.8 MB/s, pois como o CD gira sempre na mesma velocidade, as informações gravadas nas trilhas da parte externa do CD (mais longas) são lidas a mais ou menos o dobro da velocidade das do centro (que são
25
mais curtas). Um CD-ROM de 52x lê a 7.8 MB/s nas trilhas externas mas a apenas 3.9 MB/s nas internas. Como o CD-ROM é gravado a partir do centro, na maior parte do tempo ele lê os dados a 5 ou 6 MB/s. No entanto, ao ler 5 MB/s de dados compactados a uma razão de 3x, ele estará lendo, na prática, a quase 15 MB/s, um valor muito mais próximo do da taxa de transferência oferecida por um HD." (MORIMOTO, 2008a). Entretanto, para Morimoto (2008a) a "por causa da compressão o trabalho do processador passa a ser maior, pois, além de processar os dados referentes aos programas, ele tem que, ao mesmo tempo, descompactar os dados lidos pelo CD-ROM." Sendo assim, antes de partir para a utilização de um Live CD, deve-se levar em consideração a configuração de hardware do computador, pois um computador muito antigo pode comprometer a execução do sistema operacional e passar uma imagem diferente da real imagem do sistema instalado. Uma outra aplicação dos Live CDs Linux permite a recuperação de arquivos em um sistema Windows com inicialização corrompida. Morimoto (2008b) afirma que para recuperar esses arquivos "basta dar boot usando o live-CD, acessar a partição e copiar os arquivos desejados para um HD externo (ou qualquer outro dispositivo de armazenamento removível) ou para um compartilhamento de rede." Além da recuperação de arquivos, há também a recuperação dos arquivos de sistema para a inicialização do Windows, pois "você pode também substituir arquivos dentro da partição. Isso permite que você tente recuperar a partição substituindo arquivos de sistema, repare configurações manualmente, entre outras possibilidades" (MORIMOTO, 2008b).
26
2.6.2 Distribuições Outro diferencial do Linux é a possibilidade de personalização funcional e gráfica do sistema. A essas personalizações do sistema operacional dá-se o nome de distribuição, e cada uma possui serviços, aplicativos, funcionalidades e interfaces gráficas diferentes. Atualmente há disponíveis no mercado e na Internet várias distribuições, todas diferentes entre si, mas a maioria delas engloba apenas personalizações, tanto em interface gráfica quanto na lista de softwares inicialmente instalados com a distribuição. Sendo assim, as distribuições que servem de base para as demais, conhecidas como distribuições principais, são as únicas que se diferenciam entre si nos quesitos funcionalidade e interface, sendo todas as demais variações dessas distribuições principais. Partindo desse fato, podemos dividir as distribuições do Linux entre três vertentes: as derivadas do Slackware (como o Slax), as derivadas do Debian (como o Ubuntu) e as derivadas do Red Hat (como o Fedora e o Mandriva). Trataremos no decorrer do capítulo das três principais distribuições – Slackware, Red Hat e Debian, além do Gentoo Linux.
2.6.2.1 Slackware A distribuição Slackware Linux é a mais antiga em funcionamento. Ela foi lançada em 1993, e é uma distribuição extremamente conservadora, mantendo a tradição de estabilidade, organização e pouca automatização dos sistemas Unix. Morimoto (2009) afirma que o Slackware Linux é uma distribuição "que te obriga a estudar e ir mais a fundo na estrutura do sistema para conseguir usar", e por isso muitos a utilizam para aprendizado na utilização de sistemas Linux. Sua instalação é feita no modo texto, com a seleção de itens e opções e a digitação de pequenas variáveis do sistema, como senhas e aliases.
27
A figura abaixo mostra uma tela do processo de instalação.
2.6.2.2 Red Hat Lançada no final de 1994, essa distribuição do Linux foi desenvolvida para aumentar a automatização do sistema e tornar sua utilização mais fácil e agradável para o usuário (MORIMOTO, 2009). Foi a partir dessa distribuição que os pacotes de instalação tornaram-se amplamente utilizados, o que facilitava a instalação de programas, pois não havia mais a necessidade de amplos conhecimentos dos comandos no Linux para transformar os arquivos de configuração em um aplicativo. Mais tarde, por volta de 2003, houve a descontinuação da versão Desktop do Red Hat (RHD) – sendo a última versão a Red Hat 9, passando a ser desenvolvida apenas a versão Enterprise, que era uma versão comercializada voltada para empresas. A partir de então começou a ser desenvolvido o Fedora, com a participação de parte dos desenvolvedores do Red Hat Desktop e de voluntários, e o Fedora passou a ser, no lugar do RHD a distribuição com o maior número de usuários.
28
As figuras abaixo mostram os ambientes de trabalho do Red Hat Desktop e do Fedora, respectivamente.
Ainda baseado no Red Hat Linux, foi lançada em 1998 o Mandrake Linux, que passou a utilizar o ambiente gráfico KDE 1.0 (explicado no item X do próximo capítulo). Seu foco estava na facilidade de uso, e ele passou, depois de algum tempo, a ser desenvolvido de forma independente (MORIMOTO, 2009). A imagem abaixo mostra o ambiente de trabalho do Mandrake Linux 10.1.
29
30
O Conectiva Linux é a primeira distribuição Linux nacional e muito utilizada por algum tempo aqui no Brasil, voltada e utilizada tanto por empresas quanto por usuários domésticos. Em 2005, entretanto, houve a fusão entre o Conectiva Linux e o Mandrake Linux, originando o Mandriva, e as equipes de desenvolvimento uniram-se para produzir e manter o Mandriva.
2.6.2.3 Debian O Debian, para Morimoto (2009), "é provavelmente a maior distribuição Linux nãocomercial, tanto em volume de desenvolvedores quanto em número de usuários, diretos e indiretos". Trazida a público em 2003 e terminada apenas três anos depois, o Debian Linux sempre é lançado e produzido em três versões diferentes: Stable, a versão estável e com suporte e atualizações; Testing, utilizada para testes de softwares; e Unstable, uma versão que pode, a qualquer momento, deixar de funcionar, seja em razão de um software executado ou por qualquer atualização que acontecer. A filosofia das distribuições estáveis, que recebem esse nome pois param de ser desenvolvidas com novas funções, passando a serem apenas atualizadas com correções de segurança e bugs, é a de que se forem corrigidos os erros sem que nenhuma nova função seja adicionada, ao fim das correções obter-se-á um sistema livre de falhas (MORIMOTO, 2009). Além disso, o Debian, como o Slackware, é uma distribuição conservadora, e por isso é mais utilizada em servidores do que em desktops.
31
2.6.2.4 Gentoo Morimoto (2009) afirma que "o Gentoo inaugurou uma nova linhagem trazendo uma abordagem diferente das demais distribuições para a questão da instalação de programas e instalação do sistema". O Gentoo Linux, diferente das demais distribuições que utilizavam pacotes de instalação pré-compilados, utiliza um gerenciador de pacotes – Portage – que faz uso dos códigos-fonte dos programas aliados a arquivos com parâmetros de compilação. Com isso, você pode ganhar até 30% em processamento, mas perde tempo na instalação, que passa a ser mais demorada. Dentre as várias características do Gentoo está a possibilidade de três tipos de instalação: a Stage 1, onde tudo é compilado; a Stage 2, e que é instalado um sistema base pré-compilado e apenas os aplicativos são compilados; e a Stage 3, em que o sistema inteiro é instalado, como em outras distribuições (MORIMOTO, 2009).
2.6.2 Ambientes Gráficos Os ambientes gráficos são as partes mais personalizáveis do Linux. Isso porque o Linux utiliza o servidor gráfico do Linux, o Xfree, que facilita o acesso dos programas à placa de vídeo. Em outras palavras, o Xfree faz uma interface entre o gerenciador de janelas e a placa de vídeo. Dessa forma, afirma Morimoto (2009), "o gerenciador de janelas possui total liberdade para alterar a forma, aparência e decoração das janelas e a forma como você pode organizá-las e trabalhar com elas, o funcionamento da área de transferência e assim por diante".
32
Os gerenciadores de janelas mais comuns são o KDE e o GNOME, mas há outros, como o Window Maker e o BlackBox. Neste trabalho, entretanto, abordaremos apenas o KDE e o GNOME.
2.6.3.1 KDE O KDE, segundo Morimoto (2009), "é um pouquinho a mais que um simples gerenciador de janelas". Além de fazer a gerência de janelas e animá-las, o K Desktop Environment possui uma gama de softwares que o acompanham, desde editores de texto puro (Kedit), passando pelos navegadores e gerenciadores de arquivos (Konqueror), até softwares mais elaborados e funcionais, como o Kdeveloper, um software de programação visual. Pelo fato de vir acompanhado de um grande leque de softwares, pela área de transferência funcionar com todos os programas e por estar baseado em uma mesma biblioteca – Qt, o que garante um visual semelhante a todos os aplicativos, o KDE pode ser considerado um ambiente consistente (MORIMOTO, 2009).
33
A imagem abaixo mostra uma tela do ambiente KDE.
2.6.3.2 GNOME O GNU Network Object Model Environment, ou simplesmente GNOME, é, assim como o KDE, mais do que um gerenciador de janelas, e por isso é um dos mais utilizados dentre as distribuições mais conhecidas. Morimoto (2009) afirma que “os programas do KDE e do Gnome são perfeitamente intercompatíveis, você pode perfeitamente rodar o Konqueror dentro do Gnome ou o Nautilus dentro do KDE se quiser, desde que tenha tanto o Gnome quanto o KDE instalados no sistema”. Entretanto, o GNOME utiliza uma biblioteca diferente, a GTK+, e por esse motivo a utilização de softwares KDE em ambiente GNOME (e vice-versa) pode tornar-se lenta, pois além de carregar o software o sistema operacional precisa carregar também a biblioteca correspondente (Morimoto, 2009).
34
2.6.4 Comandos de Sessão No Linux, muitas as atividades rotineiras são extremamente simples utilizando-se linha de comando, possibilitando adicionar esses atalhos na área de trabalho do usuário para que ele realize essas atividades mais rapidamente. Alguns comandos de sessão, que englobam desde a troca de usuário até a reinicialização do sistema, possuem uma estrutura muitas vezes composta de apenas uma palavra. As mais importantes delas são:
Login o Esse comando termina a sessão atual e inicia uma nova.
Logoff o Termina a sessão do usuário.
Exit o Encerra o console de comandos ativo.
Clear o Limpa a tela do console em que é digitado.
Echo o Envia uma mensagem para o console.
Reboot o Reinicia o computador.
Halt o Desliga o computador.
35
Shutdown o Desliga o sistema de forma segura, enviando mensagens aos usuários conectados em terminais. Adicionando atalhos na área de trabalho, o usuário é poupado, então, de acessar menus
e de realizar vários cliques, passando apenas a ter que dar um ou dois cliques para desligar ou reiniciar o computador. Entretanto, esses ícones podem causar desligamentos acidentais, pois o usuário pode errar de ícone em sua área de trabalho e perder dados, exigindo mais atenção do usuário ao clicar em ícones em seu desktop.
2.7 Gerenciamento de Usuários e Grupos Linux é um sistema multiusuário, cujas raízes remetem aos sistemas Unix. O sistema pode ser usado por inúmeros usuários simultaneamente, sem que um atrapalhe as atividades do outro, nem que possa alterar seus arquivos. Dois exemplos extremos seriam um servidor LTSP, onde dezenas de usuários podem rodar aplicativos simultaneamente, via rede, através de terminais burros conectados ao servidor principal, e um servidor web de shared hosting, que pode hospedar milhares de sites diferentes, cada um administrado por um usuário diferente. As restrições básicas de acesso são implementadas através de um sistema de permissões simples, porém eficiente, que consiste num conjunto de três permissões de acesso (ler, gravar e executar) e três grupos (dono, grupo e outros), que combinadas permitem fazer muita coisa. Os conceitos de conta de usuário e grupo são fundamentais para entender e implementar um servidor.
36
2.7.1 Usuários e Grupos Um usuário é alguém que possui uma identificação única no sistema, um nome e um número. Uma mesma pessoa pode possuir mais de uma conta, criando nomes de acesso diferentes. Basicamente, existem dois tipos de contas:
A conta do usuário comum, que utiliza o sistema e suas ferramentas, e
A conta de super-usuário ou conta de root, com a qual é possível realizar as configurações do sistema.
Um grupo é um conjunto de usuários geralmente criado quando se deseja que usuários tenham permissão restrita a arquivos em comum. Isso é útil para garantir privacidade e segurança dos dados. Existem dois tipos de grupos:
Grupo primário o Grupo base usado nos privilégios de todos os arquivos e diretórios de usuários. (/etc/passwd e /etc/group).
Grupo secundário o Demais grupos dos usuários. (/etc/group).
2.7.1.1 Criação Para criar um usuário usam-se os dois comandos adduser (adduser <usuario> especificando uma senha inicial) e passwd (passwd <usuário>, altera a senha posteriormente) que permitem, respectivamente, adicionar novos usuários e alterar as senhas de acesso posteriormente. As características das contas ficam armazenadas no arquivo /etc/passwd e suas senhas no /etc/shadow, já os grupos ficam armazenados no /etc/group.
37
Ao criar um usuário, será criado um grupo com nome de usuário onde ele é o único membro (caso este não seja modificado), isto devido ao Linux usar um padrão UGP (Grupo Privado de Usuários). Também será criado um diretório home (guarda todas as configurações e os arquivos do usuário) para este, será copiado o perfil base constante do diretório (/etc/skel) e as propriedades de UID (Identificação do usuário), GIU e senhas seguirão o padrão do arquivo de configuração (/etc/login.defs). Quando um usuário é criado, sem qualquer opção, também será criado um grupo com o mesmo nome do usuário. Para cada usuário novo criado no computador será copiado o conteúdo do diretório /etc/skel para seu diretório home. O próprio usuário pode alterar a senha usando o comando passwd, desde que ele saiba a senha antiga. Se o usuário esqueceu a senha, ele pode definir uma nova executando o comando root, e o sistema pede a nova senha diretamente, sem solicitar a senha antiga. Por não possuir restrições de segurança, a conta de root só deve ser usada para manutenções no sistema e de preferência o menor tempo possível. Para evitar permissões desnecessárias no sistema deve-se usar uma conta normal de usuário em operações comuns. Se um arquivo for executado pelo usuário root e este contiver comandos ou códigos que causem danos ao sistema, estes danos poderão ser irreparáveis.
2.7.1.2 Exclusão Para remover um usuário anteriormente criado, utiliza-se o comando deluser (deluser <usuario>), mas o comando remove apenas a conta, sem apagar o diretório home ou outras pastas. Para remover o usuário apagando também o diretório home, adicione o parâmetro
38
--remove-home (deluser <usuario> --remove-home) ou por segurança usando a opção --backup, que cria um arquivo compactado, contendo os arquivos do usuário, salvo no diretório onde o comando for executado (deluser <usuario> --remove-home –backup).
2.7.1.3 Caracteristicas das contas As características das contas ficam armazenadas no arquivo "/etc/passwd" e suas senhas no "/etc/shadow", já os grupos ficam armazenados no "/etc/group". /etc/passwd – Arquivo que contém as informações dos usuários. – A estrutura deste arquivo é a seguinte: usuário:X:UID:GID:Descrição:Home:Shell • Usuário: é o nome em minúsculo do usuário (login name) • X: é a representação da sua senha que está no arquivo "/etc/shadow" • UID: é o número do usuário que vai de 0 "root" até 65534 "nobody" • GID: é o número do grupo primário do usuário • Descrição: uma descrição com nome, setor ou local de trabalho • Home: identifica qual será o diretório Home do usuário, normalmente "/home/user" • Shell: shell que será executado após o login do usuário (/bin/sh, /bin/bash, /bin/false)
39
/etc/group – Arquivo que contém as informações dos grupos e de seus integrante “secundariamente”. – A estrutura deste arquivo é a seguinte: grupo:X:GID:usuários • Grupo : é o nome minúsculo do grupo • X : é a representação da senha do grupo • GID : é o número do grupo • Usuários : é a lista de usuários que pertencem a este grupo separados por vírgula.
/etc/shadow – Arquivo que contém as informações das senhas dos usuários e suas validades e sua estrutura é a seguinte. • <usuários> • <senha criptografada> • • • • • • •
40
/etc/skel/ – Diretório com os arquivos-padrão utilizados como perfil durante a criação de um usuário. Alguns arquivos são: – .Xdefaults Informações para xterm – .bash_logout Executado após logout – .bash_profile Variávies de ambiente – .bashrc Aliases e funções – .xserverrc Comportamento Servidor X
/etc/login.defs – Arquivo utilizado, durante a criação de um usuário, para impor limites das senhas, definir GIU e UID.
2.7.2 Comandos
groupadd [opções] o – Adiciona um grupo. exclusivo e minúsculo.
groupdel o
Remove um grupo. Deve existir e não pode conter usuários primários.
useradd <usuário> [opções] ou [adduser] o Adiciona um usuário. <usuário> exclusivo e minúsculo. Por padrão, quando se adiciona um usuário sem opções extras, será criado um grupo com mesmo nome do usuário.
41
userdel <usuário> [opções] o Apaga um usuário. <usuário> Deve existir e não estar logado. Pode apagar também o diretório home do usuário e todos os arquivos existentes neste diretório home.
su [opções] <usuário> o Troca o id efetivo do usuário. Usado para manutenção.
passwd [opções] <usuário>
É usado para alterar a senha de autenticação de um usuário. Somente um super-usuário pode atualizar a senha de outro usuário.
chage [opções] <usuário> o Muda as informações e validades de expiração das senhas.
lastlog [opções] o Mostra o último login do usuário no sistema, pesquisando o arquivo /var/log/lastlog
w [opções] <usuário> o Mostra quem está logado e o que está executando.