Nanocurso de Linux - Versão 4.0.4

Atenção! Este conteúdo está sendo atualizado da versão 4.0 para a versão 4.1! Os "incrementos" estão sendo marcados com as versões 4.0.X.

Download em formatos PDF e ePUB (experimental) ao final da página!

Apresentação

Este é um curso de Linux destinado principalmente a estudantes de Engenharia, Computação e Tecnologia, acompanhando disciplinas de Sistemas Operacionais e outras da área de Infraestrutura Computacional. Nada impede que profissionais e outros interessados possam acompanhá-lo, ele apenas tem uma preocupação maior em relacionar a teoria com a prática e apresentar alguns "porquês" do sistema. De toda forma o curso não possui pré-requisitos e avança até pontos mais intermediários, fornecendo uma base sólida para o estudante se aprofundar posteriormente.

O curso está formatado como um material de apoio para sala de aula, tanto deste professor, como de qualquer outro colega que possa achá-lo útil. Mas possui indicações e comentários de forma a viabilizar a autoinstrução. Ao longo do curso há propostas para pesquisa, ou discussão em sala de aula, bem como links úteis. Há material adicional no site e no canal do YouTube.

A primeira versão deste curso era apenas um roteiro de uma ou duas aulas práticas ainda em 2007 e evoluiu para esta versão, amadurecida a partir de 2018, que acompanha como parte prática uma disciplina regular de Sistemas Operacionais ao longo de um semestre.

Bom estudo!

Prof. Filippo Valiante Filho

Maio de 2020 (versão 4.x)

[versão 4.0.4 gerada em fev/2023]


Atenção! Caso não tenha uma máquina com Linux para acompanhar o curso, veja primeiro o Apêndice — Como acompanhar este curso?.

 

Introdução

O Linux é o sistema operacional mais usado do planeta e presente inclusive nos computadores da estação espacial internacional, dos foguetes das SpaceX e do Rover Curiosity da NASA em Marte. É o único sistema operacional na lista do Top500 que lista os 500 maiores supercomputadores em atividade. É o sistema operacional mais usado nos sistemas embarcados. É a base dos sistemas Android e Chrome-OS. É o sistema mais usado pelos provedores de nuvem. A infraestrutura da Amazon AWS, Google Cloud Platform, IBM Cloud, Oracle Cloud, DigitalOcean e AliBaba são baseadas em Linux, a exceção é a Microsoft Azure, porém a Microsoft é patrocinadora Platinum da Linux Foundation. De fato o único mercado onde o Linux não é dominante é o de sistemas operacionais desktop onde vidraças podem ser observadas com muito mais frequência e também avistam-se algumas macieiras…

Sendo o sistema mais usado, torna-se imprescindível ao profissional de computação, engenharia e tecnologia da informação ter bons conhecimentos sobre esse sistema operacional.

O Linux é um sistema operacional "Unix – like", open source (código aberto), criado pelo finlandês Linus Torvalds em 1991 (a versão 1.0 saiu apenas em 1994). O nome Linux significa algo como o Unix do Linus. Torvalds até hoje coordena o Kernel Linux.

Alguns assuntos para uma conversa inicial em aula, ou pesquisa inicial caso esteja seguindo este material sozinho, antes de passarmos à prática são:

Ao conhecer o Linux você automatiamente se sentirá muito à vontade em outros sistemas Unix, ou “Unix-like”, como o BSD, FreeBSD, Solaris e até o MacOS.

🌐 Conheça mais sobre as distribuições Linux em: www.distrowatch.com

🌐 Teste distribuições Linux diretamente no navegador: https://distrosea.com/ e https://www.onworks.net/runos/create-os.html.

🔎 Procure vídeos com o título "evolution of desktop" para entender melhor o conceito de sistema desktop.

     ___________________

   < Olá, eu sou o Tux!  >

   < O mascote do Linux! >

   <     Bom curso!!!    >

    --------------------

      \

       \

           .--.

          |o_o |

          |:_/ |

         //   \ \

        (|     | )

       /'\_   _/`\

       \___)=(___/

Terminal – Comandos básicos para familiarização

Para iniciar o terminal, o programa que permite a interação com o sistema operacional através da digitação de comandos, procure terminal no menu, ou use o atalho <ctrl> + <alt> + <t> que funciona na maior parte das distribuições.

O sinal de $ é chamado de prompt e indica que o terminal está pronto para receber um comando.

Nosso padrão neste material será:

Atenção, o Linux é case sensitive! Isto é, diferencia MAIÚSCULAS e minúsculas.

Abra um terminal para testar alguns comandos básicos.

Mas com tantas opções nos comandos, como saber o que faz cada uma delas? Precisamos de ajuda!

Em tempo, o comando exit sai do terminal, ou faz “logoff” conforme o caso.

Obtendo ajuda no terminal

🌐 Ajuda de linhas de comando bash, powershell, bancos de dados, etc.: https://ss64.com/

🌐 Digite um comando e obtenha uma explicação detalhada: https://explainshell.com/

Desligando e (re)inicializando a máquina

Ah, sim! Para iniciar a máquina aperte o botão de energia, seja físico, seja virtual!8^P

Dicas práticas de terminal

Há alguns atalhos muito úteis usando as teclas...

Além desses atalhos...

Obtendo informações sobre o sistema (hardware e software)

Estes comandos talvez não sejam os mais usados no dia a dia, mas são muito úteis para verificar as configurações de uma máquina em que se esteja trabalhando pela primeira vez, ou checar algumas dessas configurações e informações conforme a necessidade. Também permitem visualizar um pouco melhor alguns detalhes do sistema operacional e do hardware.

Há uma série de comandos que, além de fornecer informações sobre o sistema, permitem administrar alguns detalhes do sistema. São comandos que finalizam com “ctl”, remetendo a controle, e que estão ligados à inicialização do sistema operacional. Alguns deles que vocês pode testar:

Há alguns comandos que permitem visualizar um pouco mais dos bastidores do sistema, ou se aproximar um pouco mais do núcleo:

O superusuário (root) e os outros usuários

O usuário “administrador” é um usuário privilegiado, que pode realizar modificações no sistema. Nos sistemas “Unix-like” ele é o usuário “root”, ou superusuário. Em servidores muitas vezes é requerido que haja um usuário root, com senha, que possa efetuar login normalmente. Porém em ambientes desktop é mais seguro não ter uma conta administrativa com senha atribuída, tendo apenas a conta de usuário comum. Mas é preciso um mecanismo para executar comandos como administrador, então pedimos “Super User DO...”.

Gerenciamento de pacotes (software)

Pacotes são a forma de manipular (instalar, remover, atualizar) software (aplicações) no Linux.

No Ubuntu e demais derivados do Debian (Mint, etc.) o comando chave é o apt.

Faça uma atualização do sistema. Somente quando você quiser, mas faça com frequência!

Os comandos dpkg e apt-get podem ser úteis em algumas situações.

No Fedora, RedHat, CentOS e derivados deve-se usar o comando dnf (similar ao apt) e, eventualmente, os comandos rpm (similar ao dpkg) e yum (substituído recentemente pelo dnf).

As ferramentas de gerenciamento de pacotes são das diferenças mais marcantes entre as distribuições Linux. Há novos formatos de distribuição de software através de containers de aplicação, que consistem basicamente em se encapsular uma aplicação com todas as suas dependências, de forma que ela possa ser instalada em qualquer distribuição e conviver com aplicações em um mesmo sistema mesmo que tenham dependências conflitantes, já que ficam isoladas umas das outras. Eles também possuem a vantagem de serem “multidistribuição”, eliminando a necessidade dos desenvolvedores criarem uma infinidade de pacotes para distribuir seu software. Há principalmente três dessas soluções hoje: Snapcraft (padrão do Ubuntu), Flatpak e AppImage. Muitas distribuições estão migrando dos aplicativos tradicionais para um ou mais desses formatos.

🌐 Saiba mais sobre esses formatos em: https://snapcraft.io - https://flatpak.org - https://appimage.org

Gerenciamento do sistema de arquivos

De volta ao diretório home (~)... Como esta é uma tarefa das mais corriqueiras em um sistema operacional, já vimos diversos comandos relacionados nas primeiras seções. Então recorde os comandos cd, dir, pwd e ls vistos na Introdução e que permitem navegar por entre os diretórios e listar seus conteúdos. E também dos comandos df, lsblk e fdisk e considerações sobre a memória secundária em Obtendo informações sobre o sistema (hardware e software)

Agora vejamos comandos adicionais para o gerenciamento do sistema de arquivos.

Os arquivos de configuração ficam em /etc. Aproveite que você já conhece os comandos para visualizá-los! Nós já fizemos isto neste curso...

Outro detalhe que já utilizamos mas não custa ressaltar é o fato de que não precisamos ir ao diretório específico para executar um comando. A partir do diretório atual você pode usar, p.ex.: ls /etc, ou cat /etc/nomedoarquivo, ou cd /etc/nomedodiretorio.

🔎 Quer sincronizar diretórios? Pesquise o comando rsync.

🔎 O comando wget permite fazer o download de arquivos, mas mais poderoso ainda é o comando curl que além de downloads e uploads pode ser usado para interagir com APIs e é extremamente flexível.

🔎 Pesquise sobre arquivamento e compactação de arquivos com tar e os diversos "zips" e "unzips" (gzip e gunzip, bzip2 e bunzip2, xz e unxz, zip e unzip, 7z).

🔎 Pesquise como realizar a montagem manual de partições com mount. Isso pode ser necessário quando você adicionar um dispositivo de bloco (HD, SSD, pen drive, etc.).

🔎 Em um servidor normalmente usa-se um arranjo redundante de discos independentes, o chamado RAID. Ele é um conjunto de unidades de armazenamento (HDs e/ou SSDs) agrupados de modo a aumentar a disponibilidade e o desempenho. O comando mdadm possibilita implementar RAID via software no Linux. Mais informações sobre RAID podem ser obtidas no próprio manual com man md

🔎 O comando dd permite copiar discos inteiros e realizar uma grande variedade de opções para conversão e cópia de arquivos.

Editando arquivos, criando o primeiro script e conhecendo as permissões de arquivos

A maior parte dos arquivos em um sistema Unix e Linux é texto. E para editar o conteúdo desses arquivos é preciso, obviamente, um editor de texto...

Crie um arquivo chamado meuprimeiroscript e digite alguns comandos, um em cada linha. Salve-o. Cheque as permissões desse arquivo com ls -l.

As permissões de arquivo seguem o padrão -rwxrwxrwx para arquivo e drwxrwxrwx para diretório. Ou seja, o “d” no início caracteriza um diretório. Também é possível encontrar um “l” aí no começo como referência a um link para outro arquivo ou diretório e algumas outras possibilidades bem específicas.

Cada uma das sequências “rwx” corresponde a usuário proprietário (user/owner), grupo (group) e outros (others/all/world). Às vezes essa sequência é referida como “ugo” (user group others). Já quanto ao “rwx” em si temos que “r” é read, “w” é write e “x” é execute.

Caso se depare com um “s” no lugar do x no bloco de controle do usuário significa que o programa será executado com o usuário do proprietário do arquivo e não com o usuário atual. Esse é um truque útil para executar programas como root, por exemplo.

Usa-se muito a notação decimal (a rigor octal) equivalente ao binário correspondente de cada grupo conforme os parâmetros ligados. Assim 777 é rwxrwxrwx (111 111 111) e 644 é rw-r—r-- (110 100 100).

Voltando ao script, agora é preciso tornar o arquivo executável:

Cheque com ls -l. E finalmente pode-se executar o script (sim, tem um ponto no início mesmo!):

Brinque um pouco com a atribuição de permissões. Você pode usar as opções +x, -x, +w, -w, +r e -r para mudar as permissões para o usuário atual. Usar chmod o+x para tornar atribuir a um arquivo a permissão de execução para “qualquer um”, o que é muito útil em um servidor por exemplo. Usar chmod g-w para retirar a permissão de escrita (edição e exclusão) para o grupo. E também usar algo como chmod 644 para atribuir de uma vez permissões para owner, group e other.

A rigor o arquivo do script deve começar com #!/bin/bash, para indicar que trata-se de um script a ser interpretado usando o bash (a shell, ou interpretador de comandos padrão da maioria das distribuições Linux), e não outra shell, ou perl, ou python, etc. Por curiosidade o #! é lido "shebang"!:s

O símbolo # sozinho em um arquivo de script ou configuração define um comentário. Teste um comando qualquer no terminal iniciando com #.

Embora não seja obrigatório o uso de extensão no nome de arquivo, nomear um arquivo usando a extensão ".sh" torna mais claro para os usuários que o arquivo se trata de um script.

Digite help no terminal e veja o que mais é possível usar em um script. Você encontrará comandos como case, if, for, while, etc. Comandos típicos de uma linguagem de programação. Não é à toa que se diz programação Shell Script. É uma poderosa ferramenta para automação de tarefas em um sistema.

🌐 Este professor mantém alguns modelos de script bastante úteis em seu GitHub, confira: https://github.com/filippovf/exemplos_de_scripts

A propósito basta usar git clone https://github.com/filippovf/exemplos_de_scripts e então testar os scripts.

🌐 Além de acompanhar este curso praticando, aproveite para realizar alguns pequenos desafios presentes na seção “Sugestões de Atividades”:

https://prof.valiante.info/aulas/especial-nanocurso-de-linux/sugest%C3%B5es-de-atividades 

Gerenciamento de processos

Monitorando processos e threads

Cada processo possui seu próprio pseudodiretório em /proc. É uma forma de acessar os blocos de controle de processo (PCBs). Verifique o número do PID do processo e acesse /proc/#PID para verificar seu conteúdo.

Sinais e chamadas de sistema

🔎 Verifique o comando nohup. Dica: ele pode ser útil para disparar tarefas em um servidor remoto.

Background e foreground

Execute um processo em segundo plano, verifique o número do processo (PID) e use kill #PID para terminar o processo.

Outro teste interessante para entender a diferença entre os processos em 1º e 2º plano é executar uma listagem recursiva dos arquivos com “ls -R /”, usar <Ctrl> + <z> para suspender o processo (ele está parado), usar bg para fazê-lo executar em background. Neste ponto você provavelmente verá a listagem correr no seu terminal, mas mesmo que pressione <Ctrl> + <z> novamente não conseguirá suspendê-lo. Digite fg e tecle <Enter>, então você poderá suspender o processo novamente.


Prioridade


Redirecionando e conectando processos (pipe)

O pipe "|" conecta o canal de saída (stdout) de um processo à entrada (stdin) de outro. Use conforme os exemplos:

É possível também redirecionar os canais de saída (>) e entrada (<) de um processo. Repare também no >>.

Execute a sequência a seguir:

Para perceber bem a diferença entre > e >>.

Além do canal de saída padrão (stdout) temos um segundo canal de saída para o erro padrão (stderror). Normalmente vemos a saída do erro padrão no terminal mesmo, misturada à saída padrão, mas para compreender melhor as diferenças e como manipular ambos os canais de saída faça esses testes:

O 2 antes do > representa o 2º canal de saída que é o stderror. Já 2>&1 significa concatenar o stderror com o 1º canal de saída que é stdout. Esse é o comportamento padrão observado no terminal.

O diretório /dev contém os arquivos relacionados aos dispositivos. Há um “dispositivo” especial que pode ser acessado através de /dev/null que serve como uma espécie de “buraco negro” do sistema. Qualquer escrita direcionada para esse dispositivo será irremediavelmente descartada. Então tome muito cuidado com qualquer “> dev/null”, mas ele às vezes pode ser um bom destino para os erros.

E já que ainda estamos cuidando da tubulação, muitas vezes nosso encanamento precisa de um “T”. O comando tee permite redirecionar a saída para a tela e um arquivo ao mesmo tempo. Ele se usa normalmente após um pipe:

Teste o tee sozinho, sem o pipe, fornecendo o nome de um arquivo. Você precisará usar <Ctrl> + <d> para encerrar a leitura do terminal. Compare o que você viu na tela do terminal e o conteúdo armazenado no arquivo.

O "&&" permite encadear comandos (processos) na sequência, desde que nenhum deles dê erro. Tem gente que chama isso de “script de uma linha”.

Já "||" encadeia comandos, mas só realiza o seguinte se o primeiro apresentar erro.

Pode-se inclusive combinar "&&" e "||"

E já que dobramos caracteres, digitar !! repete o último comando, mas você já deveria ter descoberto isso quando pesquisou sobre como repetir comandos do histórico... É muito útil quando esquecemos o sudo e precisamos repetir o comando, basta usar “sudo !!.

Gerenciamento de memória

🔎 Verifique também os comandos lsmem, pmap, vmstat, getconf -a, procinfo e perf.

🌐 Este professor mantém no GitHub um script que exibe informações e algumas dicas sobre a hierarquia de memória e memória virtual do sistema. Ele está comentado e é um bom exemplo de script avançado. Confira em: https://github.com/filippovf/memory-hierarchy.

Mais manipulações de arquivos e buscas

Rede

O principal comando para rede é justamente o comando ip:

É bem provável que suas placas sejam referidas como enpXsY e wlpXsY, sendo en — Ethernet, wl — wlan e ww — wwan; o p corresponde ao barramento e o s ao slot.

Obs.: Os comandos ifconfig, ifup e ifdown não estão disponíveis nas distribuições mais recentes e não convém instalá-los, mas é bom saber de sua existência pois podem constar em alguma distro ou outros Unixes.

🔎 Para obter informações mais avançadas e realizar testes e diagnósticos ao longo das diversas camadas de rede são muito úteis os comandos: ping, mtr, tracepath (e tracepath -6 para testar com Ipv6), nslookup, ss, tcpdump, nmap e whois.

O arquivo de configuração de rede nas versões mais recentes do Ubuntu está em /etc/netplan/nomedoarquivo.yaml em outras versões, ou distribuições, ele pode estar em: /etc/network/interfaces.  Se estiver em um servidor confira também /etc/cloud.

Antes de editá-lo, faça um backup. Assim como para a maior parte dos arquivos de configuração do sistema, é necessário privilégio administrativo para editar o arquivo. Para configurar DHCP, IP fixo, etc., consulte a documentação, especialmente os exemplos na parte final da man page, usando man netplan. Depois de editar o arquivo aplique as configurações com sudo netplan apply.

🔎 Pesquise o papel dos arquivos /etc/hosts e /etc/resolv.conf.

🔎 O kernel Linux incorpora o módulo de firewall chamado netfilter. O comando “padrão” para manipulá-lo é o iptables. O Ubuntu inclui o comando ufw (uncomplicated firewall) um pouco mais fácil de usar.

🔎 O programa wavemon permite monitorar redes sem fio no terminal. Pode não parecer muito útil em um servidor de data center, mas caso seu servidor seja um sistema embarcado será de grande ajuda.

Entradas e Saídas

As questões mais práticas sobre Entradas e Saídas (E/S ou I/O na sigla em inglês) foram abordadas nos itens anteriores envolvendo rede e sistema de arquivos, com os discos por tabela. Mas há mais alguns detalhes que podem ser interessantes para compreender melhor o funcionamento do sistema. Os dispositivos de E/S em um sistema Unix e Linux podem sem do tipo bloco (block) e caracteres (character) e são acessados como se fossem arquivos. Discos são o principal exemplo do primeiro tipo, enquanto terminais e impressoras do segundo.

Execute os seguintes comandos:

O diretório /dev permite aos processos utilizarem os dispositivos, enquanto o diretório /sys/devices permite administrar e visualizar informações dos dispositivos. Repare que a flag inicial retornada para os dispositivos são “b” para os de bloco e “c” para os de caractere.

Para monitorar as mensagens de gerenciamento de E/S dos discos, tanto as mensagens do kernel como as enviadas para outros processos no espaço do usuário, execute o comando udevadm monitor e em seguida insira um pen drive ou HD externo, monte ou desmonte uma partição, etc.

Curiosidades e diversão

O comando script pode ser usado para gravar em arquivo uma sessão do terminal.

Obtenha a previsão do tempo no terminal acessando a API do wttr.in com o comando curl: curl wttr.in, curl pt.wttr.in (para português), ou curl v2.wttr.in (nova versão), curl pt.wttr.in/Avenida+Paulista e curl pt.wttr.in/moon

Faça contas com o comando bc. Use bc -l para iniciar e digite quit para sair. Pode-se usar dentro de um script por meio de um pipe. P.ex.: echo 2.25^2 | bc -l

Sentindo falta de um gerenciador de arquivos visual, editor de texto e outros utilitários no terminal? Tente o Midnight Commander. Ele é acessado com o comando mc.

É possível navegar na Internet em modo texto com o lynx.

Também é possível tocar mp3 ou um CD de áudio no terminal.

O comando youtube-dl permite fazer o download de vídeos do YouTube e outros sites.

Instale e teste os divertidos comandos sl, fortune, cowsay, xcowsay (versão gráfica), cmatrix e figlet.

Se você estiver se sentindo assertivo teste o comando yes, do contrário teste yes no

E que tal assistir StarWars no terminal? Tente telnet towel.blinkenlights.nl

🌐 Há várias formas de acrescentar um toque de Linux ao seu Windows: https://prof.valiante.info/aulas/especial-nanocurso-de-linux/sites-uteis 

🌐 No Android é possível utilizar um terminal Linux com o Termux, mas como toda aplicação no Android, ele não possui uma visão geral do sistema, pois é executado de forma isolada, em seu próprio contêiner. Link: www.termux.com

E já que é uma seção de curiosidades, este curso chama “nanocurso” por causa de seu tamanho inicial para cerca de 2 aulas de laboratório lá em 2007 e também porque em contraste com outros editores complicados e pouco amigáveis, o editor de textos nano surgia como uma alternativa nova, fácil e voltada ao usuário comum.

Outros – Ou pra não dizer que não falei dos peixes...

Afinal o Tux, mascote do Linux, come peixes. Há muitas outras coisas que poderiam ter sido abordadas aqui, mas você pode continuar a investigar...

Caso você tenha seguido este material por conta, é interessante que instale e teste a versão para servidores (Ubuntu Server). Crie uma rede virtual, ou utilize a rede local, para realizar seus testes.

Notas biográficas e bibliográficas

Comecei a utilizar Linux em algum momento no início da faculdade de engenharia, ainda no milênio passado. Era uma ferramenta imprescindível para executar aplicações específicas de engenharia na faculdade. Aprendíamos em revistas e com os colegas.

Profissionalmente, atuando na área de Telecomunicações à época, ali na virada do milênio, o Unix SUN Solaris, executando em plataformas SPARC / UltraSPARC, era muito usado para executar as principais ferramentas de monitoramento e gerenciamento de redes. Nessa época realizei meu primeiro curso de Linux na 4Linux, em 2001, e pratiquei muito tanto com Linux como com Solaris.

De lá pra cá sempre usei o Linux como uma ferramenta ora para o estudo, ora para a profissão, ora para uso pessoal. Em 2005 comecei a atuar como professor no ensino superior nas áreas de Computação, Engenharia e Tecnologia, o que faço com amor até hoje. Em 2007 vieram as primeiras aulas mais formais de Linux, um nanocurso de 8 aulas inserido como prática nas aulas. Esse nanocurso deixou de fazer jus ao nome pelo tamanho a partir de 2018, mas como o nano é um editor mais (acessível a) humano, ao invés dos tradicionais, poderosos e complicados emacs ou vim, o nome acabou sendo ressignificado.

Além das revistas, do primeiro curso feito na 4Linux, das muitas páginas de manual, das documentações oficiais de muitas distribuições que já usei (OpenSuse, CentOS, RedHat, Mandriva, Mandrake, Conectiva, Kurumin, Knoppix, Caldera, TurboLinux e deve ter tido mais alguma), livros antigos (especialmente de Marcelo, Antonio e Nemeth, Snyder e Hein) e da ajuda mútua dos amigos e colegas que sempre continua, a expansão deste nanocurso contou com algumas referências mais recentes que também valem como indicações bibliográficas:

Apêndice A — Como acompanhar este curso?

A melhor forma de acompanhar este curso é ter o Linux Ubuntu instalado em uma máquina virtual, ou mesmo diretamente no computador (bare-metal), o que pode também pode ser feito como dual-boot, isto é, mantendo o Windows, MacOS, ou outro sistema pré-instalado. Para executar confortavelmente a versão padrão do Ubuntu, seja em uma máquina virtual, seja no computador, é recomendável 2 CPUs e 4 GB de memória principal, além de pelo menos 25 GB de espaço em disco.

Caso não goste muito da interface padrão do Ubuntu, a Gnome, sugiro que tente o Kubuntu, versão com o ambiente KDE. Na verdade é esta opção que uso. Download em www.kubuntu.org.

Caso não possua nenhuma ferramenta de virtualização instalada recomendo o VirtualBox que é open source e multiplataforma. Download em www.virtualbox.org.

🌐 Confira a instalação do Linux em uma máquina virtual no YouTube do professor: https://www.youtube.com/playlist?list=PLsEw4hV6d-gXySYQ9aek4T-s6xJy0jbVh

Mas e se eu não puder instalar a versão padrão do Ubuntu, ou Kubuntu, o que fazer? Verifique algumas sugestões conforme o caso:

🌐 Para saber mais sobre virtualização visite https://prof.valiante.info/aulas/arquitetura-de-computadores/m%C3%A1quinas-virtuais-e-containers.

Clique no link para acessar.


Clique no link para acessar.


__________________________________

/ Há material adicional no site do \

\ professor e no canal do YouTube! /

----------------------------------

      \

       \

           .--.

          |o_o |

          |:_/ |

         //   \ \

        (|     | )

       /'\_   _/`\

       \___)=(___/

Download deste material!