Conhecendo o sistema operacional Linux
Histórico do sistema
operacional
Antes de falar sobre a
história do Sistema Operacional Linux precisamos entender o que é um sistema
operacional, que é um programa responsável por controlar o computador e faz a
comunicação entre hardware (impressora, monitor, mouse, teclado) e software
(aplicativos em geral), executando as ordens do usuário. Caso um computador
esteja sem o sistema operacional, o computador vira um conjunto de componentes
eletrônicos sem muita utilidade.
O surgimento do sistema
operacional Linux se deu a partir do Unix e a filosofia por trás era que fosse
com código fonte aberto para que o usuário pudesse adequar ou aprimorar de
acordo com a sua necessidade o sistema.
O conjunto de um kernel e
demais programas responsáveis pela comunicação com este é o que denominamos
sistema operacional. O kernel é o coração do Linux.
Kernel Linux
O kernel foi idealizado e
inicialmente desenvolvido por um estudante de computação chamado Linus
Torvalds. Atualmente, ele é desenvolvido por centenas de pessoas ao redor do
mundo sob a supervisão do seu criador.
O Linux adota a tecnologia
de kernel monolítico, ou seja, um bloco único onde estão compilados todos os
serviços disponibilizados pelo sistema. O usuário interage com o kernel através
de um shell (interpretador de comandos) ou de um ambiente operacional gráfico.
O kernel é composto por
subsistemas, onde cada subsistema é responsável por implementar algumas funções
do sistema operacional. São exemplos de subsistemas do Linux:
Process Management (PM) -
controla o acesso dos processos ao processador (CPU).
Memory Management (MM) -
controla o acesso dos processos à memória.
Virtual File System (VFS) -
fornece uma interface para os dados armazenados nos dispositivos de hardware.
Networking Layer (NL) -
permite a conexão com outros dispositivos da rede.
Interprocess Communications
(IPC) - controla a comunicação entre os processos.
Módulos
e subsistemas
Cada subsistema é formado
por um ou mais módulos, onde um módulo é um programa com a implementação de uma
determinada facilidade no sistema operacional. Por exemplo, o subsistema MM é
composto por um módulo:
Que define a interface para o hardware.
Responsável pelo mapeamento e swapping da
memória virtual.
Controla o acesso aos processos.
É possível incluir módulos
no kernel em tempo real (durante a execução do sistema). Isto permite, por
exemplo, acoplar um novo hardware à máquina sem precisar reinicializá-la (neste
caso, o módulo é um device driver).
Outra forma para incluir um
módulo consiste em recompilar o kernel com o parâmetro built-in para o módulo
desejado. Neste caso, o módulo passa a fazer parte do código do kernel (aumenta
o número das linhas de código) e a remoção só é possível com uma nova
compilação. Naturalmente, será preciso reinicializar a máquina para usar o novo
kernel.
Quando o Linux está sendo
executado, a memória RAM da máquina é divida em duas regiões:
Espaço do kernel (kernel
space) - local onde o kernel é executado.
Espaço do usuário (user
space) - local onde os processos dos usuários são executados.
Um processo é executado ou
na área do kernel ou na área do usuário. Quando um processo é executado na área
do usuário, ele tem privilégios normais e não tem autorização para fazer
algumas coisas (liberdade vigiada). Quando um processo é executado na área do
kernel, ele tem privilégios especiais e pode fazer qualquer coisa.
O kernel space pode ser
acessado por processos dos usuários através das chamadas de sistema (system
calls). Uma chamada de sistema nada mais é que um pedido ao kernel para fazer
um serviço que requer privilégios especiais como, por exemplo, uma operação de
I/O, a criação/deleção de um processo ou a alteração das permissões de um
arquivo.
Execução
do Linux sob o aspecto do kernel
As versões do kernel
liberadas em www.kernel.org são chamadas de "vanilla" (sabor básico
de sorvete) ou "mainline". Elas possuem o básico do Linux e são
usadas como matéria-prima para o desenvolvimento das distribuições Linux.
Quando uma distribuição não acrescenta novos pacotes e nem faz alterações no
código original, ela é classificada como uma distribuição vanilla. Gentoo e
Arch são exemplos deste tipo de distribuição.
Os kernels vanilla são
classificados em:
Prepatch - é também chamado de kernel rc (release
candidate), pois implementa conceitos novos, ainda em discussão, nos grupos de
desenvolvedores. Quando um kernel prepatch é liberado, ele passa a ser considerado
mainline. O próprio Linus Torvalds é o responsável pela manutenção e liberação
deste tipo de kernel.
Mainline - é a principal
linha de desenvolvimento do Linux onde novas características são introduzidas,
melhor desenvolvidas e testadas exaustivamente. Linus Torvalds é o responsável
pela manutenção e liberação deste tipo de kernel.
Stable - quando um kernel
mainline é liberado, ele passa a ser considerado estável. Entretanto, este tipo
de kernel continua a receber correções para qualquer erro detectado.
Longterm - é um kernel
estável antigo que recebe correções só para erros importantes.
EOL (End of Life) - é um
kernel que raramente recebe manutenção da equipe de desenvolvedores do kernel.
Não é aconselhável usar este tipo de kernel.
Um aspecto interessante é
que as distribuições Linux normalmente customizam o kernel para que este receba
determinadas características. Assim, os kernels liberados pelas equipes de
desenvolvimento das distribuições possuem outras identificações além do número
da versão do kernel. Por exemplo, a distribuição Ubuntu trabalha com os
seguintes projetos de kernel:
generic - é o kernel de uso
geral e é distribuído, por padrão, com o Ubuntu.
preempt - é baseado no
kernel generic, mas possui configurações diferentes para reduzir latência
(tempo de resposta do sistema operacional). É conhecido como soft real-time
kernel.
lowlatency - é similar ao
preempt kernel, mas usa uma configuração mais agressiva para reduzir a
latência. É também conhecido como soft real-time kernel.
rt - corresponde ao kernel generic com o patch
PREEMPT_RT. É conhecido como hard real-time kernel.
realtime - é similar ao rt kernel, pois usa o
generic kernel com o patch PREEMPT_RT. Entretanto, possui uma configuração mais
agressiva para permitir características de tempo real ao sistema operacional. É
também conhecido como hard real-time kernel.
Assim, a versão
3.18.1-031801-lowlatency corresponde a versão da Ubuntu para o kernel 3.18.1 em
ambientes onde a redução de latência é importante.
Caso queira saber a versão
do kernel em uso, basta digitar uname –r ou ver o conteúdo
do arquivo /proc/version.
Suponha que a saída do
comando acima seja 3.2.0-35-generic-pae.
Neste caso, temos a
distribuição Ubuntu com o kernel Linux 3.2.0. O kernel não sofreu qualquer
correção de erro, mas a distribuição Ubuntu teve 35 correções. O termo
"generic" indica que esta versão é de uso geral, enquanto o termo
"pae" significa physical address extension. A tecnologia pae permite
estender o tamanho do endereço de 32 bits para 36 bits, permitindo que sistemas
operacionais de 32 bits usem até 64 GBytes de memória RAM (mas nenhum processo
pode acessar todos os 64GBytes da memória física).
Se a resposta ao comando
acima fosse 3.18.1-031801-generic.
O sistema estaria usando a
versão 18 com nível de revisão 1. A numeração 031801 dada pela Ubuntu apenas
repete os três números da versão original e indica que esta é a versão final da
distribuição Ubuntu para o kernel 3.18.1.
Distribuições GNU/Linux
As distribuições Linux ficam
mais forte a cada dia com a presença de tantas distribuições diferentes
espalhadas pelo mundo, onde cada distribuição (distros) se adequa a um tipo de
usuário. Cada uma destas distros possuem um grande grupo de usuários, colaboradores
e desenvolvedores que trabalham de modo voluntário e específico em suas
distribuições favoritas. Distribuições Linux existem aos montes em diversos
tipos, tamanhos e formas. Por serem diferentes umas das outras, elas que suprem
todas as necessidades para cada tipo de usuário Linux e seu nicho de atuação.
Existem diferentes
distribuições de GNU/Linux, dentre eles podemos citar o Arch Bang, Arch Linux,
Backtrack, BackBox, BrazulFW, Chakra, CentOS, Coyote, Damn Small, Debian,
Epidemic, Fedora, FreeBSD, Gentoo, Kali, Kurumin, LinuxMint, Lubuntu, Mageia,
Mandriva, Manjaro, Matriux, Metamorphose, openSUSE, Puppy Linux, RedHat,
Sabayon, Salix, Satux, Slackware, Slitaz, Ubuntu, Zenwalk.
Os mais conhecidos e
utilizados são apresentados abaixo:
Debian é uma das
distribuições Linux mais antigas e populares, é uma das versões de Linux mais
estável, o que a torna ideal para servidor (segurança e estabilidade). Seu
público-alvo não são os usuários novatos, mas sim os usuários mais avançados e
administradores de sistemas. A primeira versão é de 1993 por Ian Murdock,
iniciou com poucos desenvolvedores de Software Livre, mas cresceu gradualmente
e hoje é uma comunidade grande e bem organizada de desenvolvedores e usuários.
Sua popularidade se deu pela fácil instalação e pela sua abrangência, tendo
mais de 37.500 pacotes (softwares pré-compilados e empacotados) e deu base para
mais de 100 novas distribuições Linux, como por exemplo, o Ubuntu, Kali. Seu
diferencial foi ser o pioneiro na utilização dos maravilhoso apt/aptitude para
instalar e atualizar softwares e aplicações com facilidade.
Gentoo não é somente uma
distribuição Linux e sim uma "metadistribuição" devido a sua
flexibilidade de adaptação. O Gentoo Linux pode ser utilizado como servidor,
como estação de trabalho, um sistema desktop, um sistema de jogos, um sistema
embarcado ou qualquer outra utilização que o usuário necessite. Seu maior
diferencial são seus pacotes que não são pré-compilados, ou seja, todo e
qualquer programa precisa ser compilado no sistema.
Até mesmo os usuários
avançados da comunidade do Gentoo expressam as vezes os seus raros momentos de
apuros para instalá-lo ou configurá-lo, no entanto o Gentoo Linux é considerado
o sistema perfeito para quem deseja conhecer e aprender a fundo o funcionamento
interno de um sistema operacional Linux. O Público alvo do Gentoo são os
usuários avançados que já sabem qual caminho seguir no mundo Linux.
Ubuntu tornou-se a distribuição
Linux mais conhecida nos últimos anos. Derivado do Debian este é o sistema
operacional livre mais popular e um dos mais indicados para os iniciantes. Com
sua popularidade e aceitação o Ubuntu Linux agregou novas tecnologias com o
tempo, por exemplo a computação em nuvem e a possibilidade de ser utilizado em
dispositivos móveis. Sendo um derivado do Debian GNU/Linux a maioria de seus
processos e aparência permanecem fiéis ao Debian, assim como o gerenciamento de
pacotes apt/aptitude. O Ubuntu é altamente recomendado para aqueles que na vida
nunca utilizaram um sistema Linux.
O Red Hat Enterprise Linux
(RHEL) foi a primeira distro Linux direcionada somente ao mercado comercial.
Foi lançada em várias versões para uma série de arquiteturas de processadores.
A Red Hat abre possibilidades para administradores Linux de sua distro
comercial, tirarem certificação por meio de cursos como o RHCSA/RHCE. A distro
Red Hat fornece aplicações muito, muito estáveis e atualizadas para aqueles que
adquirem um dos diversos planos de suporte da empresa. Utiliza o YUM para
gerenciamento de pacotes. O CentOS é uma distribuição “Enterprise Linux”, que
tem o foco em ambientes empresariais só que com códigos fonte distribuídosgratuitamente
pela Red Hat Enterprise Linux (RHEL) e mantida pela CentOS. Esse sistema possui
alto nível de segurança e suporte, por conta dos updates, que outras soluções
Linux Enterprise, porém sem custo. Como o RHEL, CentOS tem suporte de no mínimo
5 anos de atualizações de segurança e utiliza também o YUM para gerenciamento
de pacotes. O Fedora é uma distro Linux para aqueles que querem provar as
novidades da tecnologia de ponta antes de todos. Até 2004 era mantido pela Red
Hat, mas como a Red Hat foi para o mercado corporativo, o Projeto Fedora ficou
patrocinado pela Red Hat (RHEL) e é incubadora de novas e inovadoras
tecnologias de software livre. O Fedora também utiliza YUM para gerenciamento
de pacotes. O site oficial: http://fedoraproject.org/.
Kali Linux é uma outra distro derivada do
Debian. O Kali é destinado para testes de penetração em avaliar a segurança de
um sistema de computador ou de uma rede, simulando assim um ataque de uma fonte
maliciosa. É uma distribuição Linux extremamente nova, desde 2013. Ele é o
sucessor do finado Backtrack. Todos os pacotes binários destinados ao Debian
podem ser instalados no Kali Linux sem problema algum. Além disso, os usuários
do Debian recomendam fortemente a utilização do Kali Linux, pois junto com esta
nova distro vem uma série de ferramentas para testes de penetração (Wifi, banco
de dados etc.) e muitos outros recursos exclusivos para a segurança da
informação. Utiliza o apt/aptitude para gerenciamento de pacotes sendo o
sistema ideal para testar toda e qualquer segurança dentro ou fora de uma rede.
O Arch Linux é uma distribuição para usuários
mais avançados, por conta de sua filosofia de desenvolvimento. Essa
distribuição oferece um ambiente sem complementos adicionais, mas permite o
usuário mudar o sistema de acordo com sua necessidade, sendo assim flexível.
Ela é uma distribuição fundada por Judd Vinet, em meados de 2002, e é otimizada
para processadores i686/x86-64 e alguns AMD compatíveis.
Arch é uma distribuição onde
o sistema é atualizado continuamente, denominado rolling release. A atualização
desse sistema é através de gerenciamento de pacotes, este sistema utiliza
Pacman (Package manager) que facilita o usuário personalizar o sistema, que faz
dela a distribuição Linux preferidas dos geeks e curiosos. O número de usuários
tem crescido pela qualidade e sua filosofia de desenvolvimento.
OpenSuse é uma ótima distribuição Linux
nascida na Alemanha, mas por diversos motivos de um mundo capitalista tornou-se
Americana. O OpenSuse é uma distribuição Linux totalmente livre. Caso você
queira utilizá-la em ambientes corporativos ou comerciais existem também as
suas distribuições variantes para este nicho, como o SLES (Suse Linux
Entreprise Server) e SLED (Suse Linux Entreprise Desktop). Assim como o RedHat
possui suas distribuições com foco para empresas e a comunidade. Na teoria o
verdadeiro concorrente amigável do OpenSUSE é o Fedora+CentOS, da versão SLES é
o RHEL. Infelizmente não há uma distribuição SuSE específica para servidores
apoiada pela comunidade como no caso do CentOS. Voltando a falar do OpenSuse,
ele utiliza o fenomenal gerenciador de pacotes Yast, que torna fácil gerenciar
os aplicativos no sistema. Além utiliza o OpenSuSe como servidor o Yast irá
ajudá-lo de uma forma que você não irá acreditar. – podemos configurar um
servidor de correios, LDAP, servidor de arquivos com samba, servidor Web e
muito mais sem qualquer problema indevido ou confusão. Ele vem com um sistema
snapper o que torna possível realizar um roll-back ou usar a versão mais antiga
de algum arquivo, atualização ou configuração. Além do Yast o OpenSuse também
utiliza um outro gerenciador de pacotes muito bom para quem adora utilizar o
terminal, o zypper. – muito semelhante ao apt-get /aptitude das distros
"debianas". O OpenSUSE Linux está cada vez mais famoso entre os
admins por causa da disponibilidade do Yast e qualquer outra aplicação que
automatiza a tarefa dos administradores de sistema. – este é o recurso que
facilita o gerenciamento rápido de tarefas simples que algumas distribuições
ainda não possuem. Existem inúmeras distribuições de Linux disponibilizadas
pelo mundo, Existem distribuições sérias, difíceis, fáceis e divertidas. Nada
impede você de utilizar qualquer distribuição Linux para qualquer fim, o Linux
é Livre! Evite ficar preso a uma única distribuição, pois assim estarás
aprendendo sobre uma específica e não o Linux.
Hierarquia padrão do sistema
de arquivos
A estrutura de diretórios Linux é bem definida e está organizada em
termos lógicos. Para manter a organização, desenvolvedores de distribuições
Linux e softwares diversos seguem o Filesystem Hierarchy Standard (padrão para
sistema de arquivos hierárquico), ou FHS, uma espécie de referência que
padroniza quais pastas do sistema recebem determinados tipos de arquivo.
Existem pequenas variações
entre diferentes distribuições ou de acordo com o conteúdo instalado em seu
computador, mas são mínimas. Abaixo a listagem dos principais: diretório raiz
(/) – Neste todos os arquivos e diretórios do sistema Linux instalado no
computador partem de uma única origem: o diretório raiz. Mesmo que estejam
armazenados em outros dispositivos físicos, é a partir do diretório raiz –
representado pela barra (/) – que você poderá acessá-los. Lembrando que o único
usuário do sistema capaz de criar ou mover arquivos do diretório raiz é o root,
ou seja, o usuário-administrador. Isso evita que usuários comuns cometam erros
e acabem comprometendo a integridade de todo o sistema de arquivos. Binários executáveis: /bin este diretório
contém os binários executáveis que podem ser utilizados por qualquer usuário do
sistema. São comandos essenciais, usados para trabalhar com arquivos, textos e
alguns recursos básicos de rede, como o cp, mv, ping e grep. Esses comandos
serão visto futuramente. Binários do
sistema: /sbin. Assim como o /bin, este diretório armazena executáveis, mas com
um diferencial: são aplicativos utilizados por administradores de sistema com o
propósito de realizar funções de manutenção e outras tarefas semelhantes. Entre
os comandos disponíveis estão o ifconfig, para configurar e controlar
interfaces de rede TCP/IP, e o fdisk, que permite particionar discos rígidos,
por exemplo. Programas diversos: /usr reúne executáveis, bibliotecas e até
documentação de softwares usados pelos usuários ou administradores do sistema.
E também nesse diretório se encontra a instalação de programas que foi
compilado e instalado a partir do código-fonte. Configurações do sistema: /etc ficam arquivos
de configuração que podem ser usados por todos os softwares, além de scripts
especiais para iniciar ou interromper módulos e programas diversos. É no /etc
que se encontra, por exemplo, o arquivo resolv.conf, com uma relação de
servidores DNS que podem ser acessados pelo sistema, com os parâmetros
necessários para isso. Bibliotecas: /lib
neste ponto do sistema de arquivos ficam localizadas as bibliotecas usadas
pelos comandos presentes em /bin e /sbin. Normalmente, os arquivos de
bibliotecas começam com os prefixos ld ou lib e possuem "extensão"
so.
Opcionais: /opt contém os
aplicativos adicionais, que não são essenciais para o sistema. Arquivos pessoais: /home
No diretório / home ficam os
arquivos pessoais, como documentos e fotografias, sempre dentro de pastas que
levam o nome de cada usuário. Vale notar que o diretório pessoal do
administrador não fica no mesmo local, e sim em /root. Inicialização: /boot são arquivos relacionados
à inicialização do sistema, ou seja, o programa de inicialização do Linux – que
é executado quando o computador é ligado, fica em /boot. Volumes e mídias: /mnt e /media para acessar
os arquivos de um CD, pendrive ou disco rígido presente em outra máquina da
rede, é necessário "montar" esse conteúdo no sistema de arquivos
local, isso é, torná-lo acessível como se fosse apenas mais um diretório no
sistema. Em /media ficam montadas todas
as mídias removíveis, como dispositivos USB e DVDs de dados. Já o diretório
/mnt fica reservado aos administradores que precisam montar temporariamente um
sistema de arquivos externo. Serviços:
/srv contém os dados de servidores e serviços em execução no computador.
Arquivos de dispositivos: /dev. No Linux tudo
é apresentado na forma de arquivos. Ao plugar um pendrive no computador, por
exemplo, um arquivo será criado dentro do diretório /dev e ele servirá como
interface para acessar ou gerenciar o drive USB. Nesse diretório, você encontra
caminhos semelhantes para acessar terminais e qualquer dispositivo conectado ao
computador, como o mouse e até modems.
Arquivos variáveis: /var todo arquivo que
aumenta de tamanho ao longo do tempo está no diretório de arquivos variáveis.
Um bom exemplo são os logs do sistema, ou seja, registros em forma de texto de
atividades realizadas no Linux, como os logins feitos ao longo dos meses. Processos do sistema: /proc nesse diretório
são encontrados arquivos que revelam informações sobre os recursos e processos
em execução no sistema. Quer um exemplo? Para saber há quanto tempo o Linux
está sendo usado desde a última vez em que foi iniciado, basta ler o arquivo
/proc/uptime.
Arquivos temporários: /tmp
arquivos e diretórios criados temporariamente tanto pelo sistema quanto pelos
usuários devem ficar nesse diretório. Boa parte deles é apagada sempre que o
computador é reiniciado.
Os nomes dos
diretórios dão dicas do que pode ser encontrado em seu interior e, com alguns
meses de prática, você estará navegando por eles com facilidade.
Comentários
Postar um comentário