Linux – Breve introdução, bom para iniciantes

Autor: Geraldo Gustavo Araújo Resende

Histórico

O que é Linux?

Linux é um clone do Unix para computadores pessoais que suporta
total multitarefa e multi-usuário, ambiente gráfico X Window, rede
TCP/IP e muito mais. Ele gerou mais excitação no mundo da computação do
que qualquer outro desenvolvimento nos últimos anos. Ele se espalhou
surpreendentemente rápido e a lealdade que ele inspira lembra os tempos
da computação "faça você mesmo" que costumava caracterizar os avanços
na tecnologia de computadores antigamente. Ironicamente ele teve
sucesso em rejuvenescer um dos mais velhos sistemas operacionais ainda
sendo usado em larga escala, o Unix. Linux é ao mesmo tempo uma nova e
uma velha tecnologia.

Falando apenas em termos técnicos, Linux é apenas o núcleo do
sistema operacional, oferecendo os serviços básicos de escalonamento de
processos, memória virtual, gerenciamento de arquivos e dispositivos de
entrada/saída. Em outras palavras, o Linux propriamente dito é a parte
de nível mais baixo do sistema operacional. Entretanto, a maior parte
das pessoas usa o termo "Linux" para se referir ao sistema completo – o
núcleo juntamente com as muitas aplicações que ele executa: um ambiente
completo de trabalho e desenvolvimento incluindo compiladores,
editores, interfaces gráficas, processadores de texto, jogos e muito
mais. Essas aplicações foram desenvolvidas, em sua maior parte, pelo
projeto GNU. Desse fato vem a explicação para muitos desenvolvedores
"chamarem" o Linux de GNU Linux.

O Linux pode transformar qualquer computador pessoal numa
estação de trabalho. Ele dá a você o poder total do Unix. Empresas
estão instalando Linux em redes inteiras de máquinas, usando o sistema
operacional para gerenciar registros financeiros e médicos, ambientes
de computação distribuída, telecomunicações e mais. Universidades no
mundo todo estão usando Linux para o ensino de programação e
desenvolvimento de sistemas operacionais. E, é claro, entusiastas da
computação em todo lugar estão usando Linux em suas casas, para
programar, produzir documentos, ou simplesmente "fuçar".

Deixando de lado as estações de trabalho e o uso pessoal
(muitas pessoas acham conveniente utilizar Linux em seus laptops),
Linux também é usado para controlar grandes servidores. Um número cada
vez maior de pessoas está descobrindo que o Linux é poderoso, estável e
flexível para lidar com grandes arrays de disco e sistemas
multiprocessados – com aplicações variando de servidores WWW a bases de
dados corporativas. Cientistas estão interligando cadeias de máquinas
Linux em enormes clusters para resolver os problemas de física e
engenharia mais intensivos computacionalmente. Com a última versão do
software Samba, o Linux pode até mesmo funcionar como um servidor de
arquivos e impressão Windows – com um desempenho melhor do que o
Windows NT!

O que torna o Linux tão diferente é que ele se trata de uma
implementação gratuita do Unix. Ele foi e ainda é desenvolvido por um
grupo de voluntários, primariamente na Internet, os quais trocam linhas
de código entre si, comunicam falhas, e resolvem os problemas num
ambiente aberto. Qualquer um é bem vindo a se juntar ao esforço de
desenvolvimento do Linux: tudo o que é necessário é o interesse em
trabalhar num clone gratuito de Unix e algum tipo de conhecimento de
programação.

O que é uma Distribuição Linux?

Pelo fato do Linux ser um
software de livre distribuição, muitas pessoas e até mesmo empresas se
empenham em organizar o núcleo (kernel) e mais uma série de aplicativos
e manuais para que o sistema fique cada vez mais amigável.

A esse conjunto de aplicativos mais o kernel dá-se o nome de
distribuição Linux. Algumas distribuições Linux são maiores que outras,
dependendo da quantidade de aplicativos e a finalidade a que se
propõem. Existem desde distribuições que cabem num disquete de 1.44MB
até distribuições que ocupam vários CDs.

Cada uma delas tem seu público-alvo e finalidades específicas.
As mini-distribuições (que cabem em poucos disquetes) têm como objetivo
desde a recuperação de um sistema danificado até o monitoramento de uma
rede de computadores.

Entre as "grandes" distribuições (vendidas em CDs) podemos
citar: Conectiva, Slackware, SuSE, Debian e Red Hat. O que diferencia
uma distribuição de outra é a maneira como são organizados e
pré-configurados os aplicativos que cada uma contém. Um exemplo: o
Conectiva Linux tem a quase totalidade de seus aplicativos traduzidos
para as seguintes línguas: português, espanhol e inglês, tendo o
português como sua base, facilitando a integração com o usuário
brasileiro. O que não quer dizer que esses aplicativos não estejam
disponíveis em inglês também. Além disso, algumas distribuições incluem
ferramentas de configuração que facilitam o trabalho do administrador
do sistema.

Qual Linux instalar?

Quando pensamos em iniciar a usar o Linux,
temos sempre esta grande dúvida: e agora, qual Linux usar? No Brasil,
algumas distribuições são bastante difundidas: Conectiva, Slackware,
Mandrake e Red Hat, mas existem outras distribuições. As diferenças
entre elas são poucas, mas principalmente nas ferramentas de instalação
e manutenção dos softwares.

Segue abaixo uma descrição das principais distribuições de Linux:

Red Hat Linux

Desenvolvida pela Red Hat Software (www.redhat.com), é a mais popular
distribuição de Linux tanto entre usuários como em desenvolvedores. Sua
instalação é fácil e rápida. O sistema de pacotes RPM torna a
atualização tão fácil quanto sua instalação. Costuma trazer as versões
mais recentes dos programas e bibliotecas, o que às vezes se traduz em
instabilidade.

Slackware Linux

Clássica distribuição Linux, já foi a mais popular, mas seu
sistema de pacotes não acompanhou os avanços de outras distribuições,
como a Debian e a Red Hat. É vendida comercialmente através da Walnut
Creek CDROM.

Debian GNU/Linux

Totalmente desenvolvida e mantida através do trabalho de
voluntários, no espírito do Linux e do projeto GNU. Suas ferramentas
avançadas de gerenciamento de pacotes permitem simples instalação e
manutenção de pacotes em sistemas individuais ou várias estações de
trabalho, o que faz com que a Debian seja a distribuição mais fácil de
se atualizar e manter atualizada. Por outro lado, novas versões não são
lançadas muito freqüentemente.

Mandrake

Feita pelo pessoal do LinuxCenter, é baseada na Red Hat e tem o
KDE como desktop. Tem como destaque o seu instalador e configurador
DrakX, que permite a instalação de acordo com o grau de conhecimento do
usuário e também a configuração do acesso à Internet durante a
instalação.

SuSE Linux

É a mais famosa distribuição na Alemanha e na Europa. A
instalação é fácil, o que a torna atraente para leigos. Baseada no
sistema RPM de pacotes, possui uma ferramenta de configuração própria
(YaST). A SuSE também escreve drivers para o projeto XFree86.

Conectiva Linux

Baseada na Red Hat. Quase totalmente traduzida para o português
e contando com uma boa documentação, essa distribuição, a única
genuinamente brasileira, é a mais famosa por aqui.

PUx

Distribuição desenvolvida no âmbito da Pontifícia Universidade Católica de Minas Gerais (PUC Minas).

Instalação do sistema Linux Conetiva 8.0

Antes de fazermos qualquer coisa em um sistema Linux, é necessário
que tenhamos um sistema Linux. Por isso, começaremos nosso estudo sobre
o Linux com a instalação da distribuição Conectiva 8.0. Essa
distribuição foi escolhida por diversos motivos, dentre eles o fato de
se apresentar em português e já ter sido utilizada nas máquinas que
usaremos.

A instalação de um sistema Linux evoluiu significativamente
nos últimos tempos. A necessidade que havia de se configurar seu
hardware quase que manualmente foi suprida por um sistema gráfico que
faz quase todo o trabalho sozinho. Com isso, a instalação do Linux se
tornou bastante cômoda, com exceção apenas para máquinas que possuem
hardware muito específico.

Iniciando uma instalação

Para inicializar uma instalação você
precisa apenas selecionar a mídia com a qual vai fazer esta
inicialização. As duas opções mais comuns são o CD-ROM e o disquete.
Para qualquer um dos casos será necessária a configuração da BIOS do
computador que será utilizado permitindo o boot por CD ou disquete,
conforme a escolha anterior. No nosso caso, utilizaremos o CD Conectiva
8.0 disponibilizado a todos os alunos.

Após a inicialização, o Linux disponibilizará um menu com
diversos modos de instalação. Utilizaremos o modo expert, pois ele nos
permite acompanhar melhor o que está sendo feito durante todo o
processo.

Feita a primeira escolha, será aberto um sistema gráfico de instalação.
Para começar o processo de acordo com as opções de cada usuário, este
deve selecionar várias outras opções. Dentre elas está a língua que se
pretende utilizar durante a instalação; o tipo de mouse e de teclado.
Assim chegamos à fase de particionamento do disco.

Fazendo o particionamento do disco

Uma decisão crucial que o usuário deve fazer quando da instalação de um
sistema Linux é quanto à alocação de espaço em disco onde o sistema
residirá. Aqui é necessário introduzir o conceito de partições de
disco.

Para que seja possível instalar um sistema operacional (SO) em
um computador, é necessário que este tenha, pelo menos, uma partição em
seu disco rígido (HD). Apenas um SO pode ser instalado por partição.
Assim, se a pretensão é manter dois sistemas operacionais na máquina
(Linux e Windows), serão necessárias no mínimo duas partições.

Mas o que fazer se o SO já instalado na máquina estiver
ocupando todo o espaço disponível em disco? Será necessário liberar
espaço. Isso pode ser feito por meio de programas como o fips ou o
PartitionMagic. Esses softwares são capazes de "quebrar"
(redimensionar) uma partição existente sem apagar os dados já
existentes nela. Partindo do pressuposto de que há espaço disponível em
disco, vamos voltar ao processo de instalação.

Nesta fase utilizaremos o Disk Druid, uma ferramenta
disponibilizada para facilitar o trabalho do usuário. Na tela do Disk
Druid é possível identificar as partições existentes no HD da máquina
(nesse momento deve haver apenas uma partição alocada para o Windows),
e a área livre (que ainda não foi alocada a nenhuma partição). Esta
área livre que utilizaremos para alocar ao nosso sistema Linux.

Criando novas partições

Nesta fase é necessário muito cuidado pois, com algum erro, pode-se apagar toda uma partição existente na máquina.

Foi dito anteriormente que apenas um SO pode ser instalado em
uma partição. Porém, a recíproca não é verdadeira. O Linux precisa (é
indispensável) de pelo menos duas partições. Uma partição chamada raiz
e uma partição de swap.

A área de swap é utilizada pelo SO como memória virtual, isto é, uma
extensão da memória RAM em disco rígido. É aconselhado que essa área
seja, no mínimo, igual à área de memória RAM e, se possível, que seja o
dobro dessa memória. Criaremos uma partição de swap com 256 MB. Outra
dica importante para o swap é que, para um desempenho melhor do
sistema, é aconselhado que ela fique no início do disco.

A partição raiz é onde residirá todo o sistema operacional.
Ela deverá ter espaço suficiente para todo o SO. No nosso caso,
utilizaremos uma partição raiz de aproximadamente 5GB. Ao contrário da
área de swap, para essa partição é necessário associar um "ponto de
montagem" a ela. Por se tratar da partição raiz, seu ponto de montagem
será "/".

Um ponto de montagem indica onde, na estrutura de diretórios
do sistema, a partição aparecerá. Veremos isso em mais detalhes quando
estivermos falando sobre Sistema de Arquivos.

Selecionando pacotes

Com as partições definidas, estamos
prontos para instalar realmente o software. Dependendo do desejo do
usuário, este momento pode ser considerado o mais trabalhoso de toda a
instalação. Isso porque pode-se optar por escolher cada pacote que será
instalado no sistema. Para facilitar esta tarefa o Linux disponibiliza
vários conjuntos de pacotes pré-selecionados, de acordo com o tipo de
sistema que se deseja instalar. Assim, pode-se optar por instalar um
Servidor Web, uma Estação para Trabalho Científico, um Servidor de
Arquivos dentre outros.

Nós optaremos pela Instalação Personalizada, onde decidiremos quais
pacotes deverão ser instalados. Há ainda as opções extremas de
instalação mínima, ou instalação completa. Nossa seleção de pacotes
ficará limitada à escolha de conjuntos de pacotes, e não de pacotes
individuais, visto que isso tornaria o processo bastante demorado e
entediante.

Configurando vídeo e rede

Configurando o ambiente gráfico:

Até aqui utilizamos a instalação em ambiente gráfico. Então podemos
supor que as configurações para o ambiente gráfico (placa de vídeo e
monitor) estão corretas? Ainda não. Não é tão simples assim. Durante a
instalação é utilizada uma configuração bastante básica para o ambiente
gráfico. Assim, se a intenção é alcançar melhores configurações como
mais resolução e mais cores, é necessário configurar corretamente sua
placa de vídeo e seu monitor.

A instalação da placa de vídeo é iniciada pelo sistema por meio de uma
tentativa de detecção. Se este processo de detecção funcionou
corretamente, então, para a placa de vídeo, nos problemas acabaram.
Infelizmente isso não ocorre para todas as máquinas na nossa
instalação. Com isso, precisaremos selecionar manualmente o tipo de
placa de vídeo que nosso computador possui.

Para o monitor ocorre a mesma coisa, a instalação tenta
detectar o monitor atualmente em uso. Mas dessa vez a detecção ocorre
sem problemas, facilitando o nosso trabalho.

Com o monitor e placa de vídeo selecionados, precisamos
escolher qual modo gráfico pretendemos utilizar. Para um modo gráfico
deve ser definida a resolução da tela (800×600), e a qualidade da cor
(16, 32 milhões de cores) e fazer um teste dessa configuração. Um
problema do processo de instalação do Linux pode fazer a máquina travar
durante a execução de um teste desse tipo.

Configurando a rede

A premissa para qualquer configuração de
rede é fazer com que a placa de rede da máquina esteja funcionando.
Aqui, novamente, o processo de instalação tenta identificar a placa de
rede presente na máquina – o que não ocorre sem problemas – e
disponibiliza um grande conjunto de placas para selecionarmos a que
possuímos.

Uma vez que os ajustes da placa estejam determinados, precisaremos
indicar como o sistema obterá sua identidade de rede, incluindo
endereço IP, servidor de nomes e roteador padrão. No processo
instalação, serão disponibilizadas algumas formas de obtenção da
configuração da rede, a saber: IP estático; DHCP; e outras. Como a
nossa rede não possui um servidor DHCP, utilizaremos um IP estático,
isto é, definiremos manualmente nossas informações de rede.

Nesse ponto precisaremos definir, para nossa máquina, um
endereço IP, uma máscara de rede, um gateway (roteador) padrão, e um
servidor de nomes principal. Ainda fazem parte das informações de rede
o nome da máquina (hostname) e o nome de domínio a que ela pertence
(domainname).

Configurando o LILO

O LILO (LInux LOader) é o carregador de
inicialização do Linux. Para que nosso sistema seja inicializado
corretamente, é necessário configurar e instalar o LILO. Ele também
possibilita a inicialização de outros SOs, permitindo ao usuário
escolher, durante o boot, qual sistema operacional deseja utilizar.

A primeira definição nesse ponto é onde instalar o LILO – na
partição Linux ou no MBR (Master Boot Record). Deve-se escolher MBR
porque assim será possível utilizar o LILO durante o boot da máquina.
Feito isso, precisamos agora definir as características restantes do
LILO. Dentre elas estão os rótulos utilizados para cada partição
inicializável. Para uma máquina com Linux e Windows instalados é comum
termos os rótulos "Linux" e "Windows". Depois é necessário escolher
qual sistema "bootável" será inicializado por padrão.

Esta é outra fase crítica do processo de instalação,
principalmente se for feita a opção por instalação no MBR. Se for feito
algo de forma errada, nenhum sistema operacional poderá ser
inicializado!

Veremos também a configuração do LILO a partir do arquivo lilo.conf, onde poderemos definir os parâmetros com mais precisão.

Processo de login

Como já foi dito anteriormente, o Linux é um sistema multitarefa e
multi-usuário. Por multi-usuário entende-se várias pessoas poderem
utilizar a mesma máquina, ao mesmo tempo. Dessa forma, o Linux precisa
de algum meio de identificar cada pessoa, e isso é feito criando-se uma
conta para cada uma. Uma conta é a maneira com a qual você se
identifica no sistema.

É como se fosse sua conta bancária que tem número e senha. Cada conta
possui seu próprio espaço, permissões e independência em relação às
demais contas. Esse sistema já vem junto com o Linux desde a sua
concepção. Vem do fato dele ser um sistema operacional voltado para
ambientes em rede. Além do fator segurança, que garante que cada
usuário faça somente aquilo que tem permissão de fazer (e não danifique
o sistema), temos o fator de identificação que garante que só você
alterará os seus documentos/arquivos.

Cada conta é identificada por um par, username e password.
Para poder utilizar um sistema Linux, a pessoa deve fornecer esse par
de informações para obter acesso ao sistema. Esse processo é
normalmente chamado de login.

Ao efetuar o login, o sistema irá abrir um shell para o usuário, para que ele possa iniciar a utilização do mesmo.

OBS: Todo sistema Linux, ou Unix em geral, já possui uma conta
padrão de acesso ao sistema, a conta de super-usuário. É identificada
por root e tem prioridade de acesso em todos os níveis de sistema. É
utilizada para instalação e manutenção do sistema. Seu uso deve ser
restringido somente a essas operações, para evitar danos acidentais ao
sistema. Nesse caso um erro de digitação pode ser catastrófico.

Shell

Ao efetuar o login, foi dito que o sistema abre um shell para o
usuário. Shell é o interpretador de comandos. É a interface entre o
usuário e o kernel do sistema. Ao entrar um comando, o shell irá
interpretar o mesmo e passar a devida instrução ao kernel. Este por sua
vez, ao terminar a execução do comando irá retornar a resposta e o
controle ao shell, que finalizando exibe os resultados do comando
(quando existir).

Existem também vários shells, cada um com suas configurações e
funcionalidades específicas. A maior parte das diferenças existentes
entre os shells mais conhecidos envolve facilidade de operação e tipos
de configuração. Como alguns exemplos de shell temos: bash, csh, ksh,
sh. O shell que utilizaremos é o bash, que é o padrão da maioria das
distribuições Linux. Você pode acrescentar diversas informações
personalizadas ao bash. Isso é feito por meio do arquivo ".bashrc" que
fica no diretório home do usuário.

Comandos Linux

No mundo Linux, qualquer arquivo executável pode ser chamado de
comando. Isso quer dizer que qualquer arquivo executável incluído no
sistema se torna um novo comando neste sistema.

Para executar um comando basta digitar o seu nome no prompt de
comando (shell). Entretanto, se o comando não estiver no PATH, ou
caminho, você precisará digitar todo o caminho e o nome do comando. Mas
o que é PATH? Esta variável do sistema, definida para cada usuário,
contém uma lista de diretórios (para visualizar: echo $PATH). Quando um
comando é executado – digitado no prompt – a lista de diretórios é
percorrida para se achar o arquivo executável associado ao comando. Se
o arquivo não for encontrado, o sistema retornará um aviso de erro,
dizendo que o comando não foi encontrado. É importante lembrar que,
dependendo do diretório em que você se encontra, este pode não estar no
PATH, sendo necessário especificar o caminho, nesse caso ".", para a
execução de comandos que se encontram no diretório atual.

Comandos iniciais no Linux:

ls – Lista os arquivos do diretório atual. Mesma função que o dir do DOS.

Atributos mais usados:

  • -a = mostra arquivos ocultos;
  • -l = mostra permissões, bytes, diretório, etc.

Exemplos:

$ ls -a
$ ls -l
$ ls -la

pwd – Informa o diretório atual, isto é, o diretório em que se está trabalhando. Exemplo:

$ pwd

cd – Permite a mudança do diretório atual para qualquer diretório acessível no sistema.Exemplos:

$ cd /usr/local
$ cd imagens

cp – Copia arquivos. Pode-se copiar um arquivo de um lugar para outro, ou fazer uma cópia desse arquivo no mesmo local.

Atributos mais usados:

  • -R = copia os arquivos recursivamente;
  • -i = pergunta ao usuário se tem certeza de realizar a operação de cópia.

Exemplos:

$ cp imagem2 /usr/local
$ cp -i imagem1 imagem1_copia

rm – Remove (apaga) arquivos.

Atributos mais usados:

  • -r = apaga um diretório cheio (recursivamente);
  • -i = pergunta ao usuário se tem certeza de realizar a operação de remoção.

Exemplos:

$ rm -r diretório1
$ rm -i imagem1_copia

mv – Move ou renomeia arquivos.

Exemplos:

$ mv imagem1 /usr/local
$ mv imagem1_copia imagem1A

more – Exibe o conteúdo de um arquivo, página por página ou, linha por linha.

Exemplos:

$ more programa1.c
$ more TrabalhoRedes.txt

less – Mesma função do comando more, mas com funções adicionais.
Permite, por exemplo, pular diretamente para uma linha e retroceder em
um arquivo.

Como foi dito, por ser um sistema multi-tarefa e
multi-usuário, cada usuário pode executar mais de um shell ao mesmo
tempo, e executar comandos diferentes em cada um, sem que um interfira
no outro (a menos que seja essa a intenção do usuário).

Para abrir mais de um shell, pode-se utilizar os vários terminais
virtuais ou consoles da estação Linux que ele estiver usando. O número
de terminais virtuais depende das configurações da estação, mas
normalmente existem sete disponíveis.

Um terminal, ou console, é o conjunto formado pelo teclado e o monitor,
que constitui o dispositivo padrão de entrada e saída de dados. Imagine
o seguinte: você tem vários conjuntos de monitor e teclado que estão
ligados na mesma CPU. Enquanto você está digitando um texto num desses
terminais o outro está executando um processo demorado, como uma
procura no disco.

No Linux temos terminais virtuais que podem ser ativados e alternados
pela seqüência de teclas Ctrl-Alt-Fn, onde n é um número entre um e
sete (dependendo da configuração de cada estação). Ou seja, você tem
sete terminais virtuais nos quais pode estar trabalhando ao mesmo
tempo. Esses terminais são muito úteis, pois você pode estar digitando
um texto num terminal e lendo uma página de manual em outro.

Mais exemplos de comandos:

clear – Limpa a tela e recoloca o prompt na primeira linha da tela.

Exemplo:

$ clear

who – Mostra todos os usuários logados, na máquina local, no momento.

Exemplo:

$ who

whoami – Mostra quem você é – útil quando você esquece com qual login entrou.

finger – Procura informações sobre um usuário no sistema local ou em sistemas remotos.

Exemplo:

$ finger moraes (mostra informações sobre o usuário moraes)

$ finger moraes@host (mostra informações sobre o usuário moraes que está na máquina host)

Como estamos utilizando o bash como o shell padrão, é
interessante mostrar um recurso bastante útil que ele possui, chamado
Tab Completion. Quando se está digitando um comando ou nome de arquivo
muito longo basta que se digite os primeiros caracteres desse comando e
aperte a tecla Tab que o shell se encarrega de completar o resto do
nome.

Nem todos os nomes podem ser completados até o final pelo fato de
existirem outras opções no processo de completação. Então o shell pára
de completar e emite um bip avisando que não conseguiu completar
totalmente a sentença. Caso se aperte Tab novamente, o shell irá lhe
mostrar as opções que você tem para completar a sentença. Por exemplo:
se você está usando o comando less para mostrar o conteúdo do arquivo
"programa1.c", mas existe, no mesmo local, diversos arquivos com nomes
"programaX.c". Quando a tecla Tab for pressionada – após ter-se
começado a digitar o nome do arquivo – a completação dará como
resultado o nome "programa", e não "programa1.c", como se esperava.

Sistema de arquivos

Como todo sistema operacional, o Linux deve possuir uma maneira de
armazenar e recuperar os arquivos criados pelos usuários e pelo próprio
sistema. Chamamos isso de sistema de arquivos.

No Linux, ele funciona seguindo um conceito bem diferente do que
normalmente estamos acostumados com ambientes Windows e similares. No
Windows, todos os arquivos do disco são indexados por uma tabela,
chamada FAT (File Allocation Table) – NTFS nas versões mais novas – e
cada unidade de disco é representado por uma letra. O Linux difere
desse padrão utilizando uma estrutura semelhante a uma árvore
invertida. Na verdade isso é bem simples. Nessa estrutura todos os
arquivos e unidades de disco ficam acessíveis a partir da "raiz" da
árvore, ou diretório raiz, representado por /. Essa estrutura é a mesma
utilizada pelos sistemas Unix em geral.

As vantagens desse sistema são:

  • Não há necessidade de atribuir unidades aos discos; a única
    limitação da quantidade de discos/partições na máquina é o próprio
    hardware;

  • A fragmentação é menor, já que o espaço para os arquivos é alocado de forma mais otimizada.

Uma estrutura típica de diretórios no Linux é apresentada a seguir:

/bin

Arquivos executáveis (binários) de comandos essenciais pertencentes ao sistema e que são utilizados com freqüência.

/sbin

Arquivos de sistema essenciais.

/boot

Arquivos estáticos de boot ou inicialização.

/dev

Arquivos de dispositivos de entrada/saída.

/etc

Configuração do sistema da máquina local com arquivos diversos para a administração de sistema.

/lib

Arquivos de bibliotecas compartilhadas usadas com freqüência.

/mnt

Ponto de montagem de partição temporária.

/tmp

Arquivos temporários gerados por alguns utilitários.

/var

Ficam os arquivos de informação variável.

/home

Diretórios dos usuários.

/root

Diretório local do super-usuário (root)

/usr

Todos os arquivos de usuários devem estar aqui (Ex: quando você
instala um programa o executável geralmente fica em: /usr/local/bin).

Mais comandos:

mkdir – Criar diretório.

Exemplo:

$ mkdir imagens

rmdir – Apaga um diretório sem conteúdo.

Exemplo:

$ rm imagens

df – Mostra o espaço livre em um ou mais discos montados ou
partições. Se não for passado nenhum parâmetro, todos os sistemas de
arquivo montados serão apresentados.

Atributos disponíveis:

  • -t <fstype> = Informações apenas sobre sistemas de arquivo do tipo especificado;
  • -x <fstype> = Informações sobre todos os sistemas de arquivo, menos os do tipo especificado.

Exemplo:

$ df
$ df -t vfat

du – Apresenta um relatório de utilização de espaço em disco
para cada arquivo ou diretório especificado, assim como todos os
subdiretórios dos diretórios especificados.

Atributos disponíveis:

  • -a, –all = Mostra o espaço ocupado por todos os arquivos;
  • -b, –bytes = Mostra o espaço ocupado em bytes;
  • -h, –human = Mostra o espaço ocupado em formato legível por humanos (Kb, Mb) ao invés de usar blocos;
  • -k = Mostra o espaço ocupado em Kbytes;
  • -m = Mostra o espaço ocupado em Mbytes.

Exemplos:

$ du -h
$ du -k

Outra característica muito importante do sistema de arquivos do
Linux (e dos sistemas Unix como um todo) são as permissões. Como já foi
dito, cada conta tem permissão apenas de alterar os seus próprios
documentos. Isso é conseguido através da combinação das contas, que já
foram comentadas acima, com o conceito de grupos. Grupos são exatamente
o que o nome sugere, ou seja, grupos de usuários. Num ambiente Linux
padrão já existem grupos pré-definidos, tais como adm, daemon, sys, mas
ainda podem existir outros grupos criados pelo administrador do sistema
(exemplo: na PUC poderíamos ter alunos, professores, funcionários). As
permissões são três:

  • Permissão de leitura (read), significando que você pode examinar o conteúdo do arquivo;
  • Permissão de escrita (write), significando que você pode alterar ou apagar o arquivo;
  • Permissão de execução (execute), significando que você pode executar o arquivo como um programa.

No caso de diretórios, as permissões têm um significado diferente:

  • Permissão de leitura (read), significa que você pode listar o conteúdo do diretório;
  • Permissão de escrita (write), significa que você pode adicionar ou remover arquivos naquele diretório;
  • Permissão de execução (execute), significa que você pode listar a informação sobre os arquivos naquele diretório.

OBS: Não se preocupe com a diferença entre permissão de
leitura e execução para diretórios; basicamente elas funcionam juntas.
Ou o diretório tem as duas ou nenhuma.

Agora, combinando as permissões que acabamos de mostrar com o
conceito de usuários e grupos, temos as ferramentas necessárias para o
controle de acesso aos arquivos implementado no Linux. É bastante
simples de se ver:

$ ls -l
-rwxr-xr-x  2 user group 1024 Jan 01 00:00 file

Aqui podemos exemplificar o sistema de permissões. A primeira
coluna mostra um conjunto de 10 caracteres. Esse conjunto de caracteres
indica as permissões e o tipo do arquivo (arquivo regular, diretório,
arquivo especial, etc). A terceira coluna mostra quem é o proprietário
do arquivo. A quarta coluna mostra a que grupo pertence o arquivo. As
demais colunas contêm as outras informações como tamanho, data, nome do
arquivo.

Como interpretar os caracteres da primeira coluna? Bem, como
já foi explicado, o sistema de permissões do Linux se baseia em três
direitos apenas: leitura (read, indicado pela letra r), escrita (write,
indicado pela letra w) e execução (execute, indicado pela letra x).
Lendo da esquerda para direita, o primeiro caractere indica o tipo do
arquivo. No caso, o traço (-) indica que é um arquivo regular. Se fosse
um diretório, por exemplo, no lugar do traço haveria a letra d. Os
próximos três caracteres exibem as permissões para o proprietário do
arquivo (indicado na terceira coluna, no caso user). Ele tem permissões
de leitura(r), escrita(w) e execução(x). O conjunto de três caracteres
seguintes exibe as permissões para o grupo ao qual o arquivo pertence
(indicado na quarta coluna, no caso group). Aqui o grupo tem permissões
de leitura(r) e execução(x).

O conjunto restante de três caracteres exibe as permissões para todos
os demais usuários ou grupos que não são os mesmos do proprietário e do
grupo ao qual o arquivo pertence. (normalmente nos referenciamos a este
conjunto como others). Ou seja, qualquer outro usuário que não seja
user ou não faça parte de group tem permissão de leitura(r) e
execução(x) no arquivo.

Alguns comandos para manipular permissões:

chown – Muda dono de um arquivo/diretório. Opcionalmente pode
também ser usado para mudar o grupo. Você deve ter permissões de
gravação no diretório/arquivo para alterar seu dono/grupo.

Parâmetros disponíveis:

  • -v, –verbose = Mostra os arquivos enquanto são alterados;
  • -R, –recursive = Altera dono e grupo de arquivos no diretório atual e sub-diretórios.

Exemplos:

$ chown joao teste.txt
$ chown joao.users teste.txt

chmod – Altera as permissões de acesso ao arquivo. Pode-se
utilizar a letra corresponde à permissão que se deseja alterar ("r"
para leitura, "w" para escrita) ou então utilizar uma numeração
corresponde ao conjunto de permissões. Este comando será melhor
discutido em aula.

Exemplos:

Acrescentar permissão de leitura ao arquivo "teste.txt":

$ chmod +r teste.txt

Acrescentar permissões de escrita e execução ao arquivo "prog.exe":

$ chmod +wx prog.exe

Acrescentar permissões de leitura, escrita e execução ao arquivo "prog.exe":

$ chmod 777 prog.exe

Em Linux temos ainda o seguinte conceito: "Tudo pode ser
tratado como se fosse um arquivo". Assim como os arquivos, a maior
parte dos periféricos presentes numa estação Linux permite operações de
leitura e/ou escrita. Por exemplo: uma impressora. Quando os dados são
enviados para a impressora é como se o usuário estivesse escrevendo
nela.

No Linux funciona de maneira semelhante, apenas existe uma diferença, o
conteúdo que é enviado "diretamente para a impressora" é escrito num
"arquivo especial", que faz a ponte entre o computador e a impressora.
Esse sistema não existe somente para a impressora, mas para todos os
dispositivos que o Linux controla, incluindo unidades de disquetes, de
disco e leitores de CD-ROM.

Dito isso, agora introduzimos um conceito muito importante:
montar um dispositivo. Montar um dispositivo nada mais é do que
torná-lo disponível ao sistema. Já foi dito que o Linux pode tratar os
dispositivos como arquivos, porém faz uso de arquivos especiais. Quando
montamos um dispositivo, seja ele um disquete, CD-ROM ou outro
periférico, é estabelecida uma "ligação" do dispositivo com o
periférico especificado. Por exemplo: quando montamos um CD-ROM, o
kernel faz a comunicação com o leitor de CD e verifica se existe alguma
mídia no drive e tenta reconhecer o formato da mídia que está lá.

Caso ele reconheça o formato, será feita uma "ligação" do periférico
leitor de CD-ROM com o dispositivo cdrom, disponibilizando o conteúdo
da mídia no diretório especificado pelo comando de montagem. O mesmo
acontece para outros dispositivos como unidade de disquete ou fita.

Outro detalhe muito importante quando montamos um dispositivo no Linux
é que o kernel considera o dispositivo como se estivesse sendo
utilizado, até que ele seja desmontando. Isso significa que, por
exemplo, ao montar um CD, ele não irá mais responder ao botão de eject,
até que seja desmontado, mesmo que ele não esteja em uso (isso porque a
unidade de leitura de CD é controlada logicamente).

Esse tipo de proteção existe para evitar a perda de informações, pois
como foi dito, o kernel considera o dispositivo em uso e normalmente
algumas operações de escrita são deixadas para momentos nos quais o
sistema operacional está "ocioso", pois o acesso ao disquete ou unidade
de disco demora muito do ponto de vista do processador.

OBS.:O drive de disquete, por ter um meio mecânico que ejeta o
disquete, não pode ser controlado com tanta segurança, mas é muito
importante que não retiremos o disquete do drive enquanto ele estiver
montado, pois dados importantes poderão ser perdidos.

Comandos:

  • mount – Utilizado para "montar" um dispositivo.
  • umount – Utilizado para "desmontar" um dispositivo.

Montando um disquete exemplo:

$ mount /dev/fd0 /mnt/floppy

Desmontando um disquete exemplo:

$ umount /dev/fd0

Montando um cdrom exemplo:

$ mount /dev/cdrom /mnt/cdrom

Desmontando um cdrom exemplo:

$ umount /dev/cdrom

Ou seja:

mount <nome_do_dispositivo> <ponto_de_montagem>
umount <nome_do_dispositivo_montado> ou
umount <nome_do_ponto_onde_está_montado>

No Linux há algumas facilidades como o pacote mtools contendo comandos para procedimentos com disquetes.

Exemplo de comandos mtools:

  • mdir – lista os arquivos do disquete;
  • mdel – apaga arquivos do disquete;
  • mcopy – copia os arquivos do disquete ou para o disquete.

$ mcopy a:arquivo.txt /home/
ou
$ mcopy arquivo.txt a:

mcopy a:<nome_do_arquivo> <local_a_ser_copiado>

mformat – formata o disquete

$ mformat a:

Processos

No coração do Linux está o conceito de processo. Entender esse
conceito vai ajudá-lo a manter o controle de sua sessão de trabalho. Um
processo é um programa que executa independentemente e que possui seu
próprio conjunto de recursos. Por exemplo, foi dito anteriormente que o
usuário poderia abrir mais de um shell na mesma estação. A razão pela
qual o usuário pode fazer isso é porque cada shell é um processo
separado.

No Linux, e em Unix em geral, os recursos finitos do sistema,
como memória e disco, são gerenciados por um programa todo poderoso
denominado kernel. Tudo mais no sistema é um processo. Por exemplo:
antes do usuário logar, o terminal está sendo monitorado por um
processo (nesse caso o getty). Uma vez que o usuário "loga", o processo
de monitoração "morre" (ele é finalizado e um novo processo é iniciado
quando o usuário efetuar o logout) e o terminal passa a ser gerenciado
pelo shell do usuário, que é um processo diferente. O shell então cria
um novo processo cada vez que o usuário entra um comando.

Um processo pode ser executado de duas formas:

Primeiro plano – Também chamado de foreground. Quando você deve
esperar o término da execução de um processo para executar um novo
comando. Somente é mostrado o aviso de comando após o término de
execução deste processo.

Segundo plano – Também chamado de background. Quando você não
precisa esperar o término da execução de um processo para executar um
novo comando. Após iniciar um processo em background, é mostrado um
número PID (identificação do Processo), e o prompt é novamente
mostrado, permitindo o uso normal do sistema. O programa executado em
background continua sendo executado internamente.

Comandos para manipular processos:

  • CTRL+C – Cancela a execução de um processo rodando em primeiro plano.
  • CTRL+Z – Suspende a execução de um processo rodando em primeiro plano.

fg – Permite fazer um processo rodando em segundo plano ou
parado, rodar em primeiro plano. Para tanto, deve ser passado como
parâmetro o número do processo que se pretende manipular.

Exemplos:

$ fg 1
$ fg 239

bg – Permite fazer um processo rodando em primeiro plano ou
parado, rodar em segundo plano. Também deve ser passado o número do
processo.

Exemplos:

$ bg 1
$ bg 239

ps – Mostra quais processos estão sendo executados no
computador, além de qual usuário executou o programa, hora que o
processo foi iniciado, etc.

Atributos disponíveis:

  • -a = Mostra os processos criados por você e de outros usuários do sistema;
  • -x = Mostra processos que não são controlados pelo terminal;
  • -u = Mostra o nome de usuário que iniciou o processo e hora em que o processo foi iniciado;
  • -f = Mostra a árvore de execução de comandos (comandos que são chamados por outros comandos);
  • -e = Mostra variáveis de ambiente no momento da inicialização do processo.

Exemplos:

$ ps -ef
$ ps -aux

Quando há muitos processos para serem listados, é melhor usar:

ps <opção> | more
ou
ps <opção> | grep <nome_do_processo>

Colocando um processo em background "&":

$ netscape &

Matar um processo (muito usado quando alguma aplicação trava):

$ kill -9 <id do processo>

top – Mostra os programas em execução ativos, parados, tempo
usado na CPU, detalhes sobre o uso da memória RAM, swap,
disponibilidade do sistema para execução de programas, etc. O top é um
processo que fica em execução mostrando continuamente todos os
processos que estão rodando na máquina naquele momento e os recursos
utilizados por eles. Para sair do top, pressione a tecla q.

Comandos disponíveis:

  • -d [tempo] = Atualiza a tela após o [tempo] (em segundos);
  • -i = Inicia o top ignorando o tempo de processos zumbis;
  • -c = Mostra a linha de comando ao invés do nome do programa.

Exemplos:

$ top
$ top -c

Rede

Então, qual o próximo passo? Eventualmente você irá querer se
comunicar com outros sistemas – Linux ou não – e o correio não será
suficiente.

Felizmente, o Linux suporta um grande número de métodos para
comunicação de dados e redes. O que será abordado a seguir é o TCP/IP
(Transmission Control Protocol/Internet Protocol), que o Linux possui
toda a implementação de forma nativa. Além disso, o Linux suporta
comunicação serial (modems) e UUCP (Unix to Unix Copy).

O protocolo TCP/IP se tornou o mais bem sucedido mecanismo
para comunicação via rede de computadores no mundo. Com o Linux e uma
placa de rede, você pode conectar sua máquina a uma rede local
(LAN-Local Area Network) ou à Internet, a rede mundial TCP/IP (desde
que com as devidas conexões de rede).

O suporte TCP/IP do Linux tem seus altos e baixos. Afinal de
contas, implementar uma pilha completa de protocolos a partir do nada
não é algo que alguém faz por diversão da noite para o dia. Por outro
lado, o código TCP/IP do Linux se beneficiou enormemente da multidão de
beta testers e desenvolvedores que cruzaram seu caminho, e com o tempo,
erros e problemas de configuração foram sanados.

A atual implementação do TCP/IP e protocolos relacionados para
Linux, suporta praticamente todas as características que você poderia
esperar de uma implementação TCP/IP para Unix e uma grande variedade de
equipamentos de rede.

De forma a compreender e melhor utilizar o poder do TCP/IP, é
necessário se familiarizar com seus princípios. O TCP/IP (Transmission
Control Protocol/Internet Protocol) é um conjunto de protocolos que
definem como as máquinas devem se comunicar umas com as outras através
da rede, bem como internamente para as outras camadas do protocolo. Em
uma rede TCP/IP, a cada máquina é associado um endereço IP, o qual é um
número de 32-bits que identifica de forma única a máquina. O endereço
IP é normalmente representado por quatro números em notação decimal,
separados por pontos. Por exemplo: 192.168.100.26.

Um endereço IP é dividido em duas partes: o endereço de rede e
o endereço do host. O endereço de rede consiste dos bits mais
significativos do endereço IP e o endereço do host dos demais bits. O
tamanho desses dois campos depende da rede em questão. Durante nosso
curso não abordaremos esse tema.

Processos, sejam na mesma máquina ou em máquinas diferentes,
que precisam se comunicar via TCP/IP, normalmente especificam o
endereço IP da máquina destino, assim como um endereço de porta. O
endereço IP é usado obviamente para enviar os dados para a máquina
destino. O endereço de porta é um número de 16-bits que especifica um
serviço particular ou aplicação na máquina destino que deve receber os
dados.

Por exemplo, o programa telnet permite um usuário em uma máquina
iniciar uma sessão de login em outra. Na máquina remota, existe um
outro programa, chamado de daemon, nesse caso o telnet daemon ou
telnetd, o qual está esperando por conexões em uma porta específica,
nesse caso a 23.

O usuário executando o telnet especifica o endereço da máquina
onde quer efetuar o login, e o programa tenta abrir uma conexão na
porta 23 da máquina destino. Se for bem sucedida, o telnet e telnetd
são capazes de se comunicar um com o outro para prover o login remoto
para o usuário em questão.

Note que o cliente de telnet tem uma porta própria na máquina
local. Este endereço de porta é alocado para o cliente dinamicamente
quando este inicia sua execução. Isso porque o telnetd remoto não
precisa saber de antemão o número da porta da conexão do cliente de
telnet. Quando o cliente inicia a conexão, parte da informação que
envia para o telnetd é seu número de porta.

Como dissemos, o TCP/IP é um conjunto de protocolos. Além do
TCP que é responsável por prover uma comunicação orientada a conexão
confiável entre dois processos, existe o UDP (User Datagram Protocol),
que é similar ao TCP, mas que não é orientado a conexão e não
confiável. Processos que usam UDP devem implementar suas próprias
rotinas de verificação e sincronismo se necessário.

TCP e UDP transmitem e recebem dados em unidades conhecidas
como pacotes. Cada pacote contém um pedaço da informação a ser enviada
para outra máquina, bem como os cabeçalhos especificando o endereço de
destino.

O IP (Internet Protocol) fica abaixo do TCP e UDP na
hierarquia de protocolos. É responsável pela transmissão e roteamento
dos pacotes TCP e UDP pela rede. De forma a fazer isso, o IP encapsula
cada pacote TCP ou UDP dentro de outro pacote (conhecido como datagrama
IP), o qual inclui um cabeçalho com as informações de roteamento e
destino. O cabeçalho do datagrama IP inclui o endereço IP das máquinas
de origem e destino. Notem que o IP não sabe nada sobre endereços de
porta, que são responsabilidade do TCP e UDP. Da mesma forma, o TCP e
UDP não lidam com endereços IP. Existe uma independência entre os
protocolos.

De forma a tornar mais humano a especificação das máquinas na
Internet, as máquinas normalmente recebem nomes assim como endereços
IP. O serviço de DNS (Domain Name Service) cuida de traduzir os nomes
para endereços IP e vice-versa, assim como a propagação dessas
informações através da Internet. DNS é uma base de dados enorme,
distribuída pelo mundo todo. Cada organização mantém uma pequena parte
dessa base, listando suas máquinas.

Comandos que utilizam a rede:

ping – Permite o envio de pacotes de controle na rede a fim de verificar se uma determinada máquina está "na rede".

Exemplos:

$ ping 200.224.10.13
$ ping http://www.yahoo.com.br
$ ping arccrcl403

telnet – Permite acesso a um computador remoto. É mostrada uma
tela de acesso correspondente ao computador local onde deve ser feita a
autenticação do usuário para entrar no sistema. Muito útil, mas devem
ser tomados cuidados ao disponibilizar este serviço para evitar riscos
de segurança.

Parâmetros disponíveis:

  • -a = Tenta um login automático, enviando o nome do usuário lido da variável de ambiente USER;
  • -d = Ativa o modo de debug;
  • -l [usuário] = Faz a conexão usando [usuário] como nome de usuário.

Exemplos:

$ telnet 10.1.13.112
$ telnet arccrcl404
$ telnet arccrcl404 23

finger – Já ilustrado neste documento.

ftp – Permite a transferência de arquivos do computador
remoto/local e vice versa. O ftp é o sistema de transmissão de arquivos
mais usado na Internet. É requerida a autenticação do usuário para que
seja permitida a conexão. Muitos servidores ftp disponibilizam acesso
anônimo aos usuários, com acesso restrito. Uma vez conectado a um
servidor ftp, você pode usar a maioria dos comandos do Linux para
operá-lo.

Abaixo alguns dos comandos mais usados no FTP:

  • ls – Lista arquivos do diretório atual;
  • cd [diretório] – Entra em um diretório;
  • get [arquivo] – Copia um arquivo do servidor ftp para o
    computador local. O arquivo é gravado, por padrão, no diretório onde o
    program ftp foi executado;

  • send [arquivo] – Envia um arquivo para o diretório atual do servidor FTP.

Exemplo:

$ ftp ftp.br.debian.org

dnsdomainname – Mostra o nome do domínio DNS de seu sistema.

hostname – Mostra o nome de seu computador na rede.

talk – Inicia conversa com outro usuário. Talk é um programa de conversação onde a pessoa vê o que a outra escreve em tempo real.

Exemplos:

$ talk <usuário> <tty>
ou
$ talk <usuário@host>

ssh – Possui, basicamente, a mesma função do telnet (acesso a um
computador remoto) mas, com a considerável diferença de fazer uso de
conexões seguras. Dessa forma, tudo o que é transmitido por uma conexão
ssh, é feito de forma criptografada.

Exemplos:

$ ssh arccrcl410
$ ssh moraes@arccrcl410
$ ssh -l moraes arccrcl410

traceroute – Permite a identificação de cada ponto existente no caminho entre a máquina local e o destino passado como parâmetro.

Exemplos:

$ traceroute http://www.pucminas.br
$ traceroute 10.1.13.5

Porém além das formas de interação entre as máquinas já
mostradas anteriormente, existe a forma mais difundida de comunicação
entre usuários de redes TCP/IP, o correio eletrônico, ou simplesmente
e-mail. Através do e-mail é possível entrar em contato com qualquer
pessoa, a qualquer hora, em qualquer lugar do mundo, bastando para isso
que ela tenha acesso a um endereço eletrônico e um servidor de e-mail.
Todo endereço eletrônico é composto da seguinte forma:

usuário@servidor.de.email

O Linux possui os programas que servem tanto para enviar quanto
para receber e-mails. São os chamados MTAs (Mail Transport Agents)
(exemplo: sendmail, postfix, qmail), que são os servidores utilizados
para enviar e-mails; e os MUAs (Mail User Agents) (exemplo: mail,
pine), que são os clientes utilizados para ler e escrever e-mails.

Utilitários para arquivamento e compressão

Quando você estiver instalando ou atualizando softwares em
sistemas Unix, as primeiras ferramentas com as quais se deve estar
familiarizado são as de compressão e arquivamento. Existem dúzias de
tais utilitários disponíveis. Alguns desses (tar e compress) datam dos
primórdios do Unix, outros (gzip) são relativamente novos. O objetivo
principal destes utilitários é colocar muitos arquivos juntos em um
único arquivo, facilitando o transporte ou backup e comprimir os mesmos
(reduzir a quantidade de espaço em disco necessário para armazenar um
arquivo ou um conjunto de arquivos).

Iremos agora discutir os formatos de arquivo mais comuns e os
utilitários que você provavelmente irá encontrar. Por exemplo, uma
convenção quase universal no mundo Unix é transportar arquivos ou
softwares como um arquivo tar, comprimido usando compress ou gzip. De
forma a poder criar ou desempacotar esses arquivos você mesmo, é
necessário conhecer as ferramentas.

Usando gzip

Gzip é um programa rápido e eficiente para compressão distribuído pelo
projeto GNU. A função básica do gzip é pegar um arquivo, comprimí-lo,
salvar a versão comprimida como arquivo.gz e remover o original. O
arquivo original somente é removido se a operação de compressão é bem
sucedida. É muito difícil acidentalmente apagar um arquivo dessa forma.
É claro, sendo um software GNU, gzip tem mais opções do que você pode
imaginar, e muitos aspectos de seu comportamento podem ser modificados
usando essas opções.

Primeiramente, digamos que temos um grande arquivo chamado lixo.txt:

$ ls -l lixo.txt
-rw-r–r–    1 mdw      hack       312996 Nov 17 21:44 lixo.txt

Para comprimir esse arquivo, simplesmente usamos o comando:

$ gzip lixo.txt

Isto substitui o arquivo lixo.txt pela versão comprimida lixo.txt.gz. Dessa forma:

$ ls -l lixo.txt.gz
-rw-r–r–   1 mdw      hack       103441 Nov 17 21:44 lixo.txt.gz

Perceba que lixo.txt é removido ao final da execução do gzip.

Você pode dar ao gzip uma lista de nomes de arquivos; ele irá
comprimir cada arquivo listado, armazenando cada um com um extensão
".gz". A eficiência da compressão do arquivo depende de seu formato e
conteúdo. Por exemplo, muitos formatos de arquivos gráficos (tais como
GIF e JPEG) já são bem comprimidos, e o gzip terá pouco ou nenhum
efeito neles. Arquivos que comprimem bem geralmente incluem arquivos de
texto puro e arquivos binários tais como executáveis e bibliotecas.
Você pode obter informações sobre um arquivo "gzipado" usando gzip -l.
Por exemplo:

$ gzip -l lixo.txt.gz
compressed  uncompr. ratio uncompressed_name
   103115    312996  67.0% lixo.txt

Para obter o arquivo original a partir da versão comprimida, usamos gunzip:

$ gunzip lixo.txt.gz
$ ls -l lixo.txt

-rw-r–r–   1 mdw      hack       312996 Nov 17 21:44 lixo.txt

O qual é idêntico ao arquivo original. Note que quando você
utiliza o gunzip em um arquivo, a versão comprimida é removida uma vez
que a descompressão está completa.

O gzip armazena o nome do arquivo original juntamente com a
versão comprimida, para poder restaurá-lo durante a descompressão. Para
isso utilizamos a opção -N juntamente com gunzip. Considere a seguinte
seqüência de comandos:

$ gzip lixo.txt
$ mv lixo.txt.gz rubbish.txt.gz

Se utilizássemos gunzip rubbish.txt.gz nesse ponto, o arquivo
descomprimido iria ser nomeado rubbish.txt. Entretanto com a opção -N
obtemos:

$ gunzip -N rubbish.txt.gz
$ ls -l lixo.txt

-rw-r–r–   1 mdw      hack       312996 Nov 17 21:44 lixo.txt

Usando o tar

O comando tar é um utilitário capaz de empacotar
diversos arquivos dentro de um só, mantendo todas as informações, como
permissões e propriedade. O nome "tar" vem tape archive, porque essa
ferramenta foi desenvolvida originalmente para gerar backups em fitas.
Atualmente, o uso do tar está bastante difundido, como veremos.

Voltando ao exemplo do arquivo de lixo, suponhamos agora que
há, não um, mas vários arquivos de lixo, todos chamados
lixo<n>.txt. Antes de compactá-los, um a um, podemos juntá-los em
um só arquivo, usando o comando tar, assim:

$ tar -cvf lixo.tar lixo?.txt

Isto faz com que todos os arquivos que correspondem à máscara
"lixo?.txt" sejam empacotados – juntados – em um só arquivo, intitulado
lixo.tar.

As opções mais comuns para o comando tar são:

  • -c, –create = Criar um novo arquivo;
  • -t, –list = Listar o conteúdo de um arquivo tar;
  • -x, –extract, –get = Extrair o conteúdo de um arquivo tar;
  • -v, –verbose = Utilizar modo "verbose".

Dessa forma, para extrair os arquivos empacotados pelo comando tar, pode-se utilizar:

$ tar -xvf lixo.tar

Usando o tar com o gzip

O comando tar não compacta os dados
armazenados no arquivo. Se você estiver criando um arquivo tar, a
partir de três arquivos de 200KB, o seu arquivo resultante terá em
torno de 600KB. Para a compactação, pode ser utilizado o gzip (ou
qualquer outro programa de compactação). Exemplo:

$ tar -cvf lixo.tar lixo?.txt
$ gzip lixo.tar

Como resultado da execução desses dois comandos é apresentado
um arquivo "empacotado" e "compactado" (lixo.tar.gz). A utilização em
conjunto, dos comandos tar e gzip, se tornou bastante comum, o que
levou ao desenvolvimento de uma forma de uní-los. Assim, por meio de
parâmetros passados ao comando tar, é possível empacotar e compactar os
dados de uma só vez. Com isso, os dois comandos acima podem ser
resumidos da seguinte forma:

$ tar -czvf lixo.tar.gz lixo?.txt
ou
$ tar -czvf lixo.tgz lixo?.txt

Para descompactar um arquivo com extensões .tar.gz, ou extensão .tgz, pode-se utilizar:

$ gunzip lixo.tar.gz

e depois:

$ tar -xvf lixo.tar

Pode-se também utilizar os comandos em conjunto:

$ tar -xzvf lixo.tgz

Alguns utilitários gráficos

kpackage

Quando falamos sobre as diferentes distribuições do
Linux, ressaltamos como uma vantagem do Red Hat, seu sistema de
gerenciamento de pacotes. Como o Conectiva 8.0, que estamos usando, é
baseado no Red Hat, ele também possui este sistema de pacotes.

Este método de gerenciamento (instalação, atualização e
remoção) do sistema, facilita em muito a tarefa do administrador. Ele
torna possível a instalação ou remoção de um software a parir de um
simples comando. Os pacotes, também conhecidos como "pacotes rpm" podem
ser manipulados em linha de comando por meio do comando rpm.
Entretanto, há uma forma gráfica, mais amigável para se fazer isso, o
kpackage.

O kpackage é um software disponibilizado junto com o
gerenciador de janelas KDE e possibilita a manipulação de todos os
softwares que foram ou serão instalados no sistema a partir de um
pacote rpm. Assim, quando se deseja instalar ou atualizar um software,
basta obter o pacote rpm dese software e manipulá-lo com o kpackage. Da
mesma forma pode-se escolher um software já instalado e removê-lo do
sistema.

SysV Init Editor

O editor de inicialização do sistema é outro
importante aliado no gerenciamento de todo o SO. Ele é mais um software
disponibilizado junto com o gerenciador de janelas KDE e possibilita a
manipulação dos serviços que devem ser iniciados durante a
inicialização do sistema.

Quando abrimos o SysV Init Editor nos deparamos com várias
pequenas janelas, cada uma correspondendo a um runlevel. Um runlevel
pode ser entendido como um método de inicialização e funcionamento do
sistema – será discutido com mais detalhes em aula. O editor mostra 7
runlevels (0 – 6), cada um com a sua finalidade específica. Os mais
importantes para nós são o 3 (sistema carregado em modo multiusuário) e
o 5 (modo multiusuário mais o ambiente gráfico).

Quando queremos adicionar um serviço ao nosso computador, e
queremos que este serviço seja executado sempre que ligarmos a máquina,
devemos incluí-lo no conjunto de serviços inicializados no runlevel que
desejamos. Por exemplo: se quisermos que nossa máquina receba conexões
ssh de outros computadores devemos colocar o serviço sshd para ser
executado toda vez que ligarmos a máquina. Isso é muito simples com a
utilização do SysV Init Editor pois a tarefa se resume a clicar na
tarefa (sshd) e arrastá-la até a janela do runlevel desejado.

Obtendo ajuda no sistema

Dúvidas são comuns durante o uso do Linux e existem várias maneiras de
obter ajuda no sistema. O Linux é um sistema bem documentado,
provavelmente tudo o que imaginar fazer ou aprender já esta disponível
para leitura e aprendizado. Abaixo segue algumas formas úteis de
procurar a solução de sua dúvida, vale a pena conhecê-las.

Páginas de manual

As páginas de manual acompanham todos os
programas distribuídos com o Linux. Elas trazem uma descrição básica do
comando e detalhes sobre o funcionamento de cada opção. Uma página de
manual é visualizada na forma de texto único com rolagem vertical.
Também documenta parâmetros usados em alguns arquivos de configuração.
A utilização da página de manual é simples.

Exemplos:

$ man ls
$ man less
$ man 2 printf

Info pages

Idênticas às páginas de manual, mas é utilizado um
método de navegação entre as seções com referências a outras páginas.
As info pages são úteis quando sabemos o nome do comando e queremos
saber para o que ele serve. Também traz explicações detalhadas sobre
uso, opções e comandos.

Exemplos:

$ info hostname
$ info

Help on line

Ajuda rápida sobre um comando/programa, é útil
principalmente para sabermos quais opções podem ser usadas. Quase todos
os comandos/programas Linux oferecem este recurso que é útil para
consultas rápidas (e quando não precisamos dos detalhes das páginas de
manual). É útil quando se sabe o nome do programa, mas deseja-se saber
quais são as opções disponíveis e para quê cada uma serve.

Exemplos:

$ ls –help
$ ssh –help

How-To’s

São documentos em formato texto, html, etc, que
explicam como fazer determinada tarefa ou como um programa funciona.
Eles trazem explicações detalhadas desde como usar um simples comando
ou como instalar um modem. Os how-tos são comumente instalados em:

/usr/doc/how-to

Documentação de programas

São documentos instalados junto com
os programas, alguns também trazem seu HOW-TO e FAQ (caso esteja
disponível nestes tipos de documentação). Seu princípio é o mesmo do
how-to; documentar o programa. Costumam trazer arquivos de aviso de
copyright, changelogs, modelos, scripts, exemplos, etc. Estes arquivos
estão localizados em:

/usr/doc/<programa>

FAQ

FAQ é um arquivo de perguntas e respostas mais freqüentes sobre o programa. Os arquivos de FAQ estão normalmente localizados em:

/usr/doc/FAQ/<programa>


http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7290

3 comentários sobre “Linux – Breve introdução, bom para iniciantes

  1. Hi,Do you need advertising displays, advertising player and LCD displays? Please go Here:www.amberdigital.com.hk(Amberdigital).we have explored and developed the international market with professionalism. We have built a widespread marketing network, and set up a capable management team dedicated to provide beyond-expectation services to our customers.
    amberdigital Contact Us
    E-mail:sstar@netvigator.com
    website:www.amberdigital.com.hk
    alibaba:amberdigital.en.alibaba.com[bhbibi

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s