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

Postagens mais visitadas