|
| 1 | +--- |
| 2 | +title: Introdução ao Linux |
| 3 | +--- |
| 4 | + |
| 5 | +# Introdução ao Sistema Operacional Linux |
| 6 | + |
| 7 | +Nesse capítulo você vai aprender sobre as distribuições GNU/Linux. |
| 8 | + |
| 9 | +**** |
| 10 | + |
| 11 | +**Objetivos**: Nesse capítulo você vai aprender como: |
| 12 | + |
| 13 | +:heavy_check_mark: Descrever os recursos e possíveis arquiteturas de um sistema operacional. |
| 14 | +:heavy_check_mark: Recontar a história do UNIX e GNU/Linux. |
| 15 | +:heavy_check_mark: Escolher a distribuição mais apropriada às suas necessidades. |
| 16 | +:heavy_check_mark: Explicar a filosofia do Software de Código-Aberto e Livre. |
| 17 | +:heavy_check_mark: Descobrir a utilidade do shell. |
| 18 | + |
| 19 | +:checkered_flag: **generalidades**, **linux**, **distribuições** |
| 20 | + |
| 21 | +**Conhecimento**: :star: |
| 22 | +**Complexidade**: :star: |
| 23 | + |
| 24 | +**Tempo de leitura**: 10 minutos |
| 25 | + |
| 26 | +**** |
| 27 | + |
| 28 | +## O que é um sistema operacional? |
| 29 | + |
| 30 | +Linux, UNIX, BSD, Windows, e MacOS são todos **sistemas operacionais**. |
| 31 | + |
| 32 | +!!! resumo |
| 33 | + |
| 34 | + Um sistema operacional é um **conjunto de programas que gerencia os recursos disponíveis de um computador**. |
| 35 | + |
| 36 | +Como parte desse gerenciamento de recursos, o sistema operacional tem que: |
| 37 | + |
| 38 | +* Gerenciar a memória **física** ou **virtual**. |
| 39 | + * A **memória física** é o conjunto de barramentos de RAM e memória cache do processador, que são utilizados para a execução dos programas. |
| 40 | + * A **memória virtual** é um local no disco rígido (a partição de **swap**) que permite o descarregamento da memória física e salvamento do estado atual do sistema em caso de um desligamento do computador por queda de energia. |
| 41 | +* Impedir **acesso aos periféricos**. Raramente um programa tem permissão para acessar o hardware diretamente (exceto placas de vídeo em casos específicos). |
| 42 | +* Fornecer às aplicações um **gerenciamento de tarefas** aequado. O sistema operacional é responsável por ordenar os processos para ocupar o processador. |
| 43 | +* **Proteger os arquivos** de acesso não autorizado. |
| 44 | +* **Coletar informações** de programas em uso ou em andamento. |
| 45 | + |
| 46 | + |
| 47 | + |
| 48 | +## Generalidades UNIX - GNU/Linux |
| 49 | + |
| 50 | +### História |
| 51 | + |
| 52 | +#### UNIX |
| 53 | + |
| 54 | +* **1964 — 1968**: O MULTICS (Serviço Computacional e Informação MULTiplexada) é desenvolvido por MIT, Bell Labs (AT&T) e General Electric. |
| 55 | + |
| 56 | +* **1969 — 1971**: Após a saída da Bell (1969) e da General Electric do projeto, dois desenvolvedores, Ken Thompson e Dennis Ritchie (seguidos posteriormente por Brian Kernighan), achando o MULTICS muito complexo, iniciaram o desenvolvimento do UNIX (Serviço Computacional e Informação UNiplexada). Embora tenha sido criado originalmente em Assembly, os criadores do UNIX desenvolveram a linguagem B e depois a linguagem C (1971) e reescreveram completamente o UNIX. Como foi desenvolvido em 1970, a data de referência (época) para o início dos sistemas UNIX/Linux foi definida em 1 de janeiro de 1970. |
| 57 | + |
| 58 | +A linguagem C permanece como uma das mais linguagens de programação populares hoje. Uma linguagem a nível de hardware que permite a adaptação do sistema operacional a qualquer arquitetura de máquina que tenha um compilador C. |
| 59 | + |
| 60 | +O UNIX é um sistema operacional aberto e em evolução que tem desempenhado um papel de destaque na história da computação. Ele forma a base de vários outros sistemas, como Linux, BSD, MacOS, entre outros. |
| 61 | + |
| 62 | +O UNIX ainda tem relevância atualmente (HP-UX, AIX, Solaris, etc.). |
| 63 | + |
| 64 | +#### Projeto GNU |
| 65 | + |
| 66 | +* **1984**: Richard Matthew Stallman lançou o Projeto GNU (GNU Não é Unix), que visava criar um sistema Unix **livre** e **aberto**, onde as ferramentas mais importantes eram: compilador gcc, shell bash, editor Emacs e assim por diante. O GNU é um sistema operacional do tipo Unix. O desenvolvimento do GNU, iniciado em janeiro de 1984, é conhecido como Projeto GNU. Muitos dos programas no GNU foram liberados sob as diretrizes do Projeto GNU; chamamos esses programas de pacotes GNU. |
| 67 | + |
| 68 | +* **1990**: O kernel próprio do GNU, o GNU Hurd, foi iniciado em 1990 (antes do início do Linux). |
| 69 | + |
| 70 | +#### MINIX |
| 71 | + |
| 72 | +* **1987**: Andrew S. Tanenbaum desenvolve o MINIX, um UNIX simplificado, para ensinar sistemas operacionais de uma maneira simples. O Sr. Tanenbaum disponibiliza o código-fonte do seu sistema operacional. |
| 73 | + |
| 74 | +#### Linux |
| 75 | + |
| 76 | +* **1991**: Um estudante finlandês, **Linus Torvalds**, cria um sistema operacional que roda em seu computador pessoal e o chama de Linux. Ele publica sua primeira versão, chamada 0.02, num fórum de discussão da Usenet e outros desenvolvedores ajudam-no a melhorar seu sistema. O termo Linux é um trocadilho entre o primeiro nome do fundador, Linux, e UNIX. |
| 77 | + |
| 78 | +* **1993**: A distribuição Debian é criada. O Debian é uma distribuição não comercial baseada na comunidade. Originalmente criada para uso em servidores, foi adequada para essa função; entretanto é um sistema universal, sendo possível utilizar em um computador pessoal também. O Debian forma a base para várias outras distribuições, como Mint ou Ubuntu. |
| 79 | + |
| 80 | +* **1994**: A distribuição comercial Red Hat é criada pela companhia Red Hat, que é hoje a principal distribuidora do sistema operacional GNU/Linux. A Red Hat apoia a versão da comunidade do Fedora e, até recentemente, a distribuição gratuita CentOS. |
| 81 | + |
| 82 | +* **1997**: O ambiente gráfico KDE é criado. Ele é baseado na biblioteca de componentes Qt e na linguagem de programação C++. |
| 83 | + |
| 84 | +* **1999**: O ambiente gráfico GNOME é criado. Ele é baseado na biblioteca de componentes GTK+. |
| 85 | + |
| 86 | +* **2002**: A distribuição Arch é criada. Seu diferencial é que ela oferece lançamentos constantes (atualização contínua). |
| 87 | + |
| 88 | +* **2004**: O Ubuntu é criado pela companhia Canonical company (Mark Shuttleworth). Ele é baseado em Debian, mas inclui software livre proprietário. |
| 89 | + |
| 90 | +* **2021**: O Rocky Linux é criado, baseado na distribuição Red Hat. |
| 91 | + |
| 92 | +!!! informação |
| 93 | + |
| 94 | + Disputa sobre o nome: embora as pessoas estejam acostumadas a chamar o Linux de sistema operacional, o Linux é apenas um kernel. Também não podemos esquecer da contribuição e desenvolvimento do projeto GNU para a causa do código aberto! Prefiro chamá-lo sistema operacional GNU/Linux. |
| 95 | + |
| 96 | +### Participação de mercado |
| 97 | + |
| 98 | +<!-- |
| 99 | +TODO: graphics with market share for servers and pc. |
| 100 | +--> |
| 101 | + |
| 102 | +Apesar da sua relevância, o Linux permanece relativamente desconhecido do público em geral. O Linux está escondido em **smartfones**, **televisões**, **modems de internet**, etc. Quase **70% dos sites** do mundo são hospedados em um servidor Linux ou UNIX! |
| 103 | + |
| 104 | +O Linux está instalado em cerca de **3% dos computadores pessoais**, mas em mais de **82% dos smartfones**. O sistema operacional **Android**, por exemplo, utiliza um kernel Linux. |
| 105 | + |
| 106 | +<!-- TODO: review those stats --> |
| 107 | + |
| 108 | +O Linux está instalado em 100% dos 500 principais supercomputadores desde 2018. Um supercomputador é um computador criado para alcançar o maior desempenho possível com as técnicas conhecidas no momento de sua concepção, especialmente no que diz respeito à velocidade computacional. |
| 109 | + |
| 110 | +### Projeto arquitetônico |
| 111 | + |
| 112 | +* O **kernel** é o primeiro componente do software. |
| 113 | + * Ele é o coração do sistema Linux. |
| 114 | + * Ele gerencia os recursos físicos do sistema. |
| 115 | + * Os outros programas devem passar por ele para ter acesso ao hardware. |
| 116 | +* O **shell** é um utilitário que interpreta comandos do usuário e garante sua execução. |
| 117 | + * Principais shells: Bourne shell, C shell, Korn shell and Bourne-Again shell (bash). |
| 118 | +* **Aplicações** são programas de usuários, incluindo, mas não limitados a: |
| 119 | + * Navegadores de internet |
| 120 | + * Editores de texto |
| 121 | + * Editores de planilhas |
| 122 | + |
| 123 | +#### Multi-tarefa |
| 124 | + |
| 125 | +O Linux pertence à família de sistemas operacionais que compartilham processamento. Ele divide o processamento entre diversos programas, alternando entre um e outro de maneira transparente para o usuário. Isso implica em: |
| 126 | + |
| 127 | +* Execução simultânea de diversos progrmas. |
| 128 | +* Distribuição do processamento de CPU pelo controlador. |
| 129 | +* Redução dos problemas causados pela falha de uma aplicação. |
| 130 | +* Redução de performance no caso de muitos programas em execução. |
| 131 | + |
| 132 | +#### Multi-usuário |
| 133 | + |
| 134 | +O propósito do MULTICS era permitir diversos usuários trabalharem de diversos terminais (teclado e mouse) a partir de um único computador (muito caro na época). O Linux, inspirado por esse sistema operacional, manteve essa habilidade de trabalhar com diversos usuários simultaneamente e independentemente, cada um tendo sua própria conta de usuário com memória e direitos de acesso a arquivos e sistemas. |
| 135 | + |
| 136 | +#### Multi-processador |
| 137 | + |
| 138 | +O Linux consegue trabalhar com computadores de multi-processadores ou processadores multi-núcleos. |
| 139 | + |
| 140 | +#### Multi-plataforma |
| 141 | + |
| 142 | +O Lnux é escrito em uma linguagem de alto nível que pode ser adaptada a diferentes tipos de plataformas durante a compilação. Isso permite que ele seja executado em: |
| 143 | + |
| 144 | +* Computadores domésticos (PC e notebook) |
| 145 | +* Servidores (dados e aplicações) |
| 146 | +* Dispositivos portáteis (smartfones e tablets) |
| 147 | +* Sistemas embarcados (computadores de bordo automotivos) |
| 148 | +* Dispositivos de rede (roteadores e switches) |
| 149 | +* Aparelhos domésticos (TVs e refrigeradores) |
| 150 | + |
| 151 | +#### Aberto |
| 152 | + |
| 153 | +O Linux é baseado em padrões reconhecidos, como [POSIX](http://en.wikipedia.org/wiki/POSIX), [TCP/IP](https://en.wikipedia.org/wiki/Internet_protocol_suite), [NFS](https://en.wikipedia.org/wiki/Network_File_System), e [Samba](https://en.wikipedia.org/wiki/Samba_(software)), que lhe permite compartilhar dados e serviços com outros sistemas. |
| 154 | + |
| 155 | +### A Filosofia UNIX/Linux |
| 156 | + |
| 157 | +* Tratar tudo como arquivo. |
| 158 | +* Valorizar a portabilidade. |
| 159 | +* Fazer uma coisa e fazê-la bem feita. |
| 160 | +* KISS: Mantnha Isso Simples, Idiota (Keep It Simple, Stupid). |
| 161 | +* "O UNIX é basicamente um sistema operacional, mas você precisa ser um gênio para entender a simplicidade." (__Dennis Ritchie__) |
| 162 | +* "O Unix é amigável. Ele apenas não é claro a respeito de com quem será amigável." (__Steven King__) |
| 163 | + |
| 164 | +## As distribuições GNU/Linux |
| 165 | + |
| 166 | +Uma distribuição Linux é um **conjunto consistente de software** montado em torno do kernel do Linux, pronto para ser instalado juntamente com os componentes para eu gerenciamento (instalação, remoção, configuração). Existem distribuições **associativas** ou **comunitárias** (Debian, Rocky) e distribuições **comerciais** (Red Hat, Ubuntu). |
| 167 | + |
| 168 | +Cada distribuição oferece um ou mais **ambientes gráficos** e fornece um conjunto de programas pré-instalados e uma biblioteca de programas adicional. As opções de configuração (kernel ou opções de serviços, por exemplo) são específicas para cada distribuição. |
| 169 | + |
| 170 | +Este princípio permite que as distribuições sejam adaptadas para **iniciantes** (Ubuntu, Linux Mint...), ou totalmente personalizáveis para **usuários avançados** (Gentoo, Arch); as distribuições também podem ser mais adequadas para **servidores** (Debian, Red Hat), ou **estações de trabalho** (Fedora). |
| 171 | + |
| 172 | +### Ambientes gráficos |
| 173 | + |
| 174 | +Existem muitos ambientes gráficos, como **GNOME**, **KDE**, **LXDE**, **XFCE**, etc. Existem interfaces para todos, e a sua **ergonomia** não perde em nada para os sistemas Microsoft ou Apple. |
| 175 | + |
| 176 | +Então por que há tão pouco entusiasmo em relação ao Linux, sendo que este sistema é praticamente **livre de vírus**? Pode ser porque muitos editores (Adobe) e fabricantes (Nvidia) não aderem ao jogo do software livre e não fornecem uma versão de seus programas ou __drivers__ para GNU/Linux? Talvez seja medo da mudança, ou a dificuldade de encontrar onde comprar um computador com Linux, ou poucos jogos distribuídos para Linux. Essa última justificativa, pelo menos, não deve durar muito, com o advento do motor de jogo da Steam para Linux. |
| 177 | + |
| 178 | + |
| 179 | + |
| 180 | +O ambiente **GNOME 3** não usa mais o conceito de área de trabalho, mas sim o de GNOME Shell (não deve ser confundido com a linha de comando shell). Ele serve como área de trabalho, painel de controle, área de notificações e um seletor de janela. O ambiente de trabalho GNOME é baseado na biblioteca de componentes **GTK+**. |
| 181 | + |
| 182 | + |
| 183 | + |
| 184 | +O ambiente gráfico **KDE** é baseado na biblioteca de componentes **Qt**. Ele é normalmente recomendado para usuários familiarizados com ambiente Windows. |
| 185 | + |
| 186 | + |
| 187 | + |
| 188 | +### Livre / Código Aberto |
| 189 | + |
| 190 | +Um usuário de um sistema operacional Windows ou Mac deve comprar uma licença para a utilização do sistema. Essa licença tem um custo, embora geralmente não apareça (o preço da licença está incluído no preço do computador). |
| 191 | + |
| 192 | +No universo **GNU/Linux**, o movimento Software Livre fornece principalmente distribuições livres. |
| 193 | + |
| 194 | +**Livre** não significa grátis! |
| 195 | + |
| 196 | +**Código Aberto**: o código-fonte é disponibilizado, por isso é possível consultá-lo e modificá-lo sob certas condições. |
| 197 | + |
| 198 | +Um software livre é necessariamente de código aberto, mas o oposto não é verdade, já que o software de código aberto é diferente da liberdade oferecida pela licença GPL. |
| 199 | + |
| 200 | +#### GNU GPL (Licença Pública Geral GNU) |
| 201 | + |
| 202 | +A **GPL** garante ao autor de um software a sua propriedade intelectual, mas permite modificação, redistribuição ou revenda do programa por terceiros, desde que o código-fonte esteja incluído no software. A GPL é a licença que veio do projeto **GNU** (GNU Não é UNIX), que foi fundamental na criação do Linux. |
| 203 | + |
| 204 | +Isso implica: |
| 205 | + |
| 206 | +* A liberdade de executar o programa, para qualquer finalidade. |
| 207 | +* A liberdade para estudar como o programa funciona e adaptá-lo às suas necessidades. |
| 208 | +* A liberdade para redistribuir cópias. |
| 209 | +* A liberdade para melhorar o programa e publicar essas melhorias para o benefício de toda a comunidade. |
| 210 | + |
| 211 | +Por outro lado, até mesmo os produtos licenciados sob a GPL podem ter um custo. Isto não é para o produto em si, mas a **garantia que uma equipe de programadores continuará trabalhando nele para fazer com que evolua e resolver problemas, ou até mesmo fornecer suporte a usuários**. |
| 212 | + |
| 213 | +## Áreas de uso |
| 214 | + |
| 215 | +Uma distribuição Linux é ideal para: |
| 216 | + |
| 217 | +* **Servidores**: HTTP, email, programas colaborativos, compartilhamento de arquivos, etc. |
| 218 | +* **Segurança**: Gateway, firewall, roteador, proxy, etc. |
| 219 | +* **Computadores centrais**: Bancos, seguradoras, indústria, etc. |
| 220 | +* **Sistemas embarcados**: Roteadores, Modems de Internet, SmartTVs, etc. |
| 221 | + |
| 222 | +O Linux é uma escolha adequada para hospedar bancos de dados ou sites web, ou como um servidor de correio eletrônico, DNS ou firewall. Resumindo, o Linux pode fazer praticamente qualquer coisa, o que explica a quantidade de distribuições específicas. |
| 223 | + |
| 224 | +## Shell |
| 225 | + |
| 226 | +### Geral |
| 227 | + |
| 228 | +O **shell**, conhecido como _linha de comando_, permite que os usuários enviem comandos para o sistema operacional. É menos visível hoje, desde a implementação dos ambientes gráficos, mas continua a ser um meio privilegiado em sistemas Linux, onde nem todos possuem interfaces gráficas e cujos serviços nem sempre têm uma interface de configuração. |
| 229 | + |
| 230 | +Oferece uma verdadeira linguagem de programação, incluindo as estruturas clássicas (loops de repetição, estruturas condicionais) e os constituintes comuns (variáveis, passagem de parâmetros e subprogramas). Permite a criação de scripts para automatizar determinadas ações (backups, criação de usuários, monitoramento de sistemas, etc.). |
| 231 | + |
| 232 | +Existem vários tipos de shells disponíveis e configuráveis em uma plataforma ou conforme a preferência do usuário. Alguns exemplos incluem: |
| 233 | + |
| 234 | +* sh, o shell padrão do POSIX |
| 235 | +* csh, shell orientado a comando em C |
| 236 | +* bash, Bourne-Again Shell, shell Linux |
| 237 | + |
| 238 | +### Funcionalidades |
| 239 | + |
| 240 | +* Execução de comando (verifica o comando informado e o executa). |
| 241 | +* Redirecionamento de Entrada/Saída (salva os dados em um arquivo, ao invés de exibi-los na tela). |
| 242 | +* Processo de conexão (gerencia a conexão do usuário). |
| 243 | +* Interpretação de linguagem de programação (permitindo a criação de scripts). |
| 244 | +* Variáveis de ambiente (acesso a informações específicas do sistema durante a operação). |
| 245 | + |
| 246 | +### Base |
| 247 | + |
| 248 | + |
| 249 | + |
| 250 | +## Teste os seus conhecimentos |
| 251 | + |
| 252 | +:heavy_check_mark: Um sistema operacional é um conjunto de programas para gerenciar os recursos disponíveis de um computador: |
| 253 | + |
| 254 | +- [ ] Verdadeiro |
| 255 | +- [ ] Falso |
| 256 | + |
| 257 | +:heavy_check_mark: O sistema operacional é necessário para: |
| 258 | + |
| 259 | +- [ ] Gerenciar a memória física e virtual |
| 260 | +- [ ] Permitir acesso direto aos periféricos |
| 261 | +- [ ] Terceirizar o gerenciamento de tarefas para o processador |
| 262 | +- [ ] Coletar informações sobre os programas utilizados ou em uso |
| 263 | + |
| 264 | +:heavy_check_mark: Dentre essas personalidades, quais participaram do desenvolvimento do UNIX: |
| 265 | + |
| 266 | +- [ ] Linus Torvalds |
| 267 | +- [ ] Ken Thompson |
| 268 | +- [ ] Lionel Richie |
| 269 | +- [ ] Brian Kernighan |
| 270 | +- [ ] Andrew Stuart Tanenbaum |
| 271 | + |
| 272 | +:heavy_check_mark: A nacionalidade original de Linus Torvalds, criador do kernel Linux, é: |
| 273 | + |
| 274 | +- [ ] Sueca |
| 275 | +- [ ] Finlandesa |
| 276 | +- [ ] Norueguesa |
| 277 | +- [ ] Flamenga |
| 278 | +- [ ] Francesa |
| 279 | + |
| 280 | +:heavy_check_mark: Qual das seguintes distribuições é a mais antiga: |
| 281 | + |
| 282 | +- [ ] Debian |
| 283 | +- [ ] Slackware |
| 284 | +- [ ] Red Hat |
| 285 | +- [ ] Arch |
| 286 | + |
| 287 | +:heavy_check_mark: O kernel Linux é: |
| 288 | + |
| 289 | +- [ ] Multi-tarefa |
| 290 | +- [ ] Multi-usuário |
| 291 | +- [ ] Multiprocessador |
| 292 | +- [ ] Multi-core |
| 293 | +- [ ] Multiplataforma |
| 294 | +- [ ] Aberto |
| 295 | + |
| 296 | +:heavy_check_mark: O software livre é necessariamente de código aberto? |
| 297 | + |
| 298 | +- [ ] Verdadeiro |
| 299 | +- [ ] Falso |
| 300 | + |
| 301 | +:heavy_check_mark: O software de código aberto é necessariamente livre? |
| 302 | + |
| 303 | +- [ ] Verdadeiro |
| 304 | +- [ ] Falso |
| 305 | + |
| 306 | +:heavy_check_mark: Qual dos seguintes não é um shell: |
| 307 | + |
| 308 | +- [ ] Jason |
| 309 | +- [ ] Jason-Bourne shell (jbsh) |
| 310 | +- [ ] Bourne-Again shell (bash) |
| 311 | +- [ ] C shell (csh) |
| 312 | +- [ ] Korn shell (ksh) |
0 commit comments