O Guia DEFINITIVO de UBUNTU para Devs Iniciantes
Começando aos 40: Dicas de Programação e Ambiente de Desenvolvimento
Introdução ao Vídeo
- Fabio Akita apresenta a série "Começando aos 40", focando em conceitos mal explicados como concorrência, paralelismo e gerenciamento de memória.
- Ele destaca a importância do Linux para iniciantes em programação, recomendando o Arch Linux como uma boa opção para aprendizado.
Ambiente de Desenvolvimento
- Akita menciona que muitos desenvolvedores usam máquinas virtuais com Vagrant para acessar ambientes Linux, mesmo quando estão no Mac.
- O apresentador argumenta que o melhor ambiente de desenvolvimento é sempre um sistema baseado em Linux, especialmente para aplicações web.
Considerações sobre Sistemas Operacionais
- Ele alerta que versões nativas de Python ou PHP no Windows podem não funcionar corretamente devido à falta de dependências nativas.
- A recomendação é usar um Linux como sistema operacional primário; se necessário, fazer dual-boot com Windows apenas para jogos.
Escolha da Distribuição
- O objetivo do vídeo é partir da instalação do Ubuntu e criar um ambiente de desenvolvimento funcional.
- Akita prefere a distribuição Manjaro por ser mais simples que o Arch e elogia o gerenciador de pacotes Pacman pela sua filosofia de atualizações contínuas.
Requisitos Mínimos para Desenvolvimento
- Para iniciantes, ele recomenda começar com Ubuntu devido ao suporte amplo tanto em hardware quanto software.
- O mínimo recomendado é ter 8GB de RAM; idealmente, investir em 16GB. Um processador Core i3 pode ser suficiente, mas um Core i5 é preferível.
Configuração Ideal da Máquina
- Para quem tem orçamento maior, montar uma máquina com Core i9 e SSD NVMe é ideal. No entanto, ele sugere começar com configurações mais modestas.
Comparação entre Processadores: Intel vs AMD
Desempenho e Custo-Benefício
- O vídeo discute a viabilidade de notebooks da Dell para programadores iniciantes, destacando que opções mais baratas podem sacrificar desempenho.
- A AMD Ryzen se destaca por oferecer mais núcleos em comparação com os processadores Intel equivalentes, como o Ryzen 3 com 4 núcleos versus o Intel Core i3 com 2 núcleos.
- Apesar dos Ryzen terem mais núcleos, a performance máxima de cada núcleo ainda é inferior à da Intel, especialmente em jogos. No entanto, a nova geração está começando a superar a Intel até nesse aspecto.
Turbo Boost vs Precision Boost
- As CPUs da Intel possuem Turbo Boost para picos de desempenho em tarefas intensivas, mas isso é temporário.
- Os novos processadores Ryzen utilizam Precision Boost, que oferece um aumento de clock menor que o Turbo Boost da Intel, mas mantém essa velocidade por períodos mais longos.
Experiência Pessoal e Perspectiva
- O apresentador compartilha sua experiência pessoal com notebooks caros e menciona que não é necessário investir tanto para ter um bom desempenho no desenvolvimento.
- Ele enfatiza que ter um computador topo de linha não garante produtividade se o usuário não souber como otimizar seu uso.
Importância do Aprendizado Prático
- Iniciantes devem começar em ambientes menos favoráveis para desenvolver habilidades; um bom programador pode ser produtivo mesmo com hardware modesto.
- A importância do conhecimento sobre otimização é ressaltada; entender seu próprio ambiente de trabalho é crucial para resolver problemas futuros.
Instalação do Ubuntu e Dicas Práticas
- A instalação do Ubuntu é descrita como simples; seguir instruções corretamente pode evitar muitos erros comuns entre iniciantes.
Introdução ao Ambiente Ubuntu
Tela Inicial e Workspaces
- Após a instalação, o usuário verá uma tela inicial com a opção de logar automaticamente. É recomendado se familiarizar com os workspaces, que permitem organizar janelas como se houvesse múltiplos monitores.
- O Ubuntu utiliza workspaces para facilitar a navegação entre diferentes programas abertos, semelhante aos desktops em UNIX e Linux.
Navegando entre Janelas
- Para mover janelas entre workspaces, utilize as combinações de teclas Super + Shift + Page Up/Page Down. Isso ajuda a manter os programas organizados.
- Maximizar janelas é possível usando Super + seta para cima ou organizá-las lado a lado com Super + seta para esquerda/direita.
Personalização do Ambiente
- A personalização do tema é importante; o autor sugere o tema Flat Remix como uma alternativa mais elegante ao padrão do Ubuntu.
- Para instalar novos temas e ícones, são utilizados comandos no Terminal, começando pela instalação do Git e ferramentas necessárias.
Instalando Temas e Ícones
Clonagem de Repositórios
- O processo inclui clonar repositórios do GitHub para obter ícones e temas desejados. Os comandos
git clonesão usados para baixar os arquivos necessários.
Configuração dos Temas
- Após clonar os repositórios, é necessário criar diretórios específicos para ícones e temas antes de copiar os arquivos baixados para esses diretórios.
Mudança de Aparência
- O Tweak Tool permite mudar facilmente o tema, ícones e fontes do sistema operacional. Sugestões adicionais incluem explorar outros conjuntos de temas como Material Dark.
Comandos Básicos no Terminal
Estrutura de Diretórios
- Cada usuário tem um diretório próprio em
/home/username. O comandowhoamipode ser usado para verificar qual usuário está logado.
Navegação no Sistema
- Comandos básicos como
cd,ls,ls -l, els -laajudam na navegação por diretórios. Arquivos ocultos começam com ponto (.) e não aparecem nas listagens padrão.
Criação de Arquivos
- O comando
touché utilizado para criar arquivos vazios ou atualizar a data de modificação se já existir.
Manual dos Comandos
Comandos Básicos do Shell
Significado dos Comandos
- O comando
cdsignifica "change directory" (mudar diretório), enquantomkdiré "make directory" (criar diretório). Outros comandos incluemrmpara remover, echownpara mudar a propriedade.
- O comando
whoamiinforma quem você é no sistema, epwdmostra o diretório atual ("print working directory").
Navegação entre Diretórios
- Para voltar ao diretório inicial, pode-se usar
cd $HOME, onde$HOMErepresenta uma variável de ambiente. Alternativamente, o atalhocd ~também funciona.
- A expansão de tilde permite que caminhos como
~/Documentssejam automaticamente convertidos para/home/akitaonrails/Documents.
Estrutura do Sistema de Arquivos
- O shell mais comum é o Bash (Bourne Again Shell), mas existem outros como tcshell e Z shell. É importante saber qual shell está sendo utilizado ao executar comandos.
- Ao navegar até a raiz (
cd /) e listar arquivos lá, encontramos links simbólicos como vmlinuz e initrd.img que estão relacionados ao kernel do Linux.
Links Simbólicos e Dispositivos
- Os arquivos vmlinuz (kernel do Linux) e initrd.img (RAM disk inicializado durante o boot) são links simbólicos localizados em
/boot.
- Para interagir com dispositivos como USB ou CD-ROM, eles precisam ser montados em um sistema de arquivos apropriado.
Montagem de Dispositivos
- Dispositivos devem ser montados em subdiretórios como
/mntou/media. Sistemas modernos geralmente montam dispositivos automaticamente quando conectados.
- O comando
df -hlista os dispositivos montados. Por exemplo, um pendrive pode ser detectado automaticamente pelo Ubuntu.
Estrutura dos Diretórios do Sistema
- O diretório
/rooté a home do usuário root. Outros diretórios importantes incluem/opt, onde programas externos podem ser instalados, e/bin, que contém binários essenciais do sistema.
- No diretório
/usr, encontra-se a maioria das aplicações instaladas. Ele abriga binários em/usr/bin, bibliotecas em/usr/lib, entre outros.
Configurações e Arquivos Importantes
- Antigamente existia um diretório chamado
/usr/etcpara configurações, mas atualmente as configurações costumam estar em/etc.
Estruturas de Diretórios e Processos no Linux
Diretório /var e suas Funções
- O diretório
/varcontém dados variáveis, incluindo:
/var/spool: utilizado para impressão.
/var/mail: armazena e-mails.
/var/log: onde ficam os logs do sistema.
/var/run: contém PIDs (IDs dos processos em execução).
/var/cache: usado para armazenar caches do sistema.
Explorando o Diretório /proc
- O diretório
/procrepresenta processos em execução como diretórios, permitindo a exploração através de comandos comops.
- É possível acessar informações detalhadas sobre um processo usando arquivos pseudo-localizados em
/proc, comostatuseio.
- A manipulação direta desses arquivos é uma forma prática de obter informações sem depender de APIs complexas.
Comandos Básicos para Manipulação de Arquivos
- O diretório temporário
/tmpé ideal para armazenar arquivos que não precisam ser preservados após reinicializações.
- Comandos como
touch,echo, ecatsão usados para criar, escrever e visualizar conteúdos de arquivos.
- Redirecionamentos com
>sobrescrevem o conteúdo anterior, enquanto>>permite adicionar ao final do arquivo.
Navegação em Conteúdos Longos
- O comando
morepermite visualizar conteúdos que não cabem na tela, mas carrega tudo na memória antes da exibição.
- Usar pipes (
|) conecta a saída padrão de um comando à entrada padrão de outro, facilitando a visualização sequencial com comandos comops aux | more.
- O comando moderno
lessmelhora essa funcionalidade ao permitir navegação eficiente sem carregar todo o conteúdo na memória.
Links Simbólicos e Monitoramento de Arquivos
- Links simbólicos são criados com o comando
ln -s, permitindo acesso fácil a outros arquivos sem duplicação.
- O comando
tail -fé útil para monitorar alterações em tempo real em arquivos, especialmente logs.
Manipulação de Comandos no Terminal
Filtrando Saídas com grep e ag
- O comando
ps aux | grep bashfiltra a saída do comandops, mostrando apenas as linhas que contêm a palavra "bash".
- O
ag, conhecido como Silver Searcher, é uma alternativa mais rápida aogrep, aceitando expressões regulares semelhantes.
Extraindo IDs de Processos com awk
- Para obter os PIDs dos processos bash, utiliza-se o comando:
ps aux | ag bash | awk ' print $2 '.
- O AWK é uma linguagem interpretada voltada para processamento de dados e textos, permitindo configurar separadores personalizados.
Navegando pelo Histórico de Comandos
- O Bash possui um recurso de histórico que permite acessar comandos anteriores pressionando a seta para cima.
- Para buscar comandos antigos, use Ctrl + R e digite parte do comando desejado; continue pressionando Ctrl + R para navegar pelos resultados filtrados.
Comandos Básicos para Manipulação de Arquivos
- Comandos básicos incluem:
- Apagar arquivo:
rm b.txt
- Criar diretório:
mkdir foo
- Mover arquivo:
mv a.txt foo
- Para apagar um diretório, utilize o comando forçado:
rm -f foo.
Permissões e Execução de Scripts
- O comando
chmod +x seu_script.shé utilizado para dar permissão de execução a scripts ou binários.
- É importante dominar esses conceitos básicos antes de avançar em manipulações mais complexas no terminal.
Avançando na Programação com Bash
Importância da Combinação de Comandos
- Aprender a combinar comandos usando pipes é essencial para realizar tarefas complexas, como mover arquivos com critérios específicos.
Introdução à Programação em Bash
- O Bash pode ser considerado um ambiente de programação que suporta variáveis e estruturas condicionais (como if).
Integração com Outras Linguagens
- É possível combinar o Bash com outras linguagens como AWK, Perl, Python e Ruby para criar scripts que manipulam todo o sistema.
Preparação do Ambiente de Desenvolvimento
Instalação dos Pacotes Essenciais
- A instalação inicial deve incluir pacotes essenciais como:
- build-essential
- default-jdk
- libssl-dev
Gerenciamento de Versões em Linguagens Modernas
- Linguagens modernas como Go ou JavaScript mudam frequentemente; por isso, gerenciadores específicos são necessários.
Desafios na Manutenção das Versões das Linguagens
Introdução ao Gerenciador de Versões ASDF
O que é o ASDF?
- O gerenciador de versões Universal, ASDF, é apresentado como uma solução para gerenciar diferentes versões de linguagens de programação.
- A instalação do ASDF é recomendada através da documentação disponível no GitHub, utilizando o Google para encontrar informações.
Funcionamento do ASDF
- O ASDF utiliza variáveis de ambiente do shell e não executa diretamente os binários das linguagens. Ele procura no PATH configurado.
- Para facilitar a gestão, o ASDF funciona como um framework que requer a instalação de plugins específicos para cada linguagem.
Instalação e Configuração das Linguagens
Plugins e Instalações
- Após instalar os plugins necessários, as linguagens podem ser instaladas usando o comando
asdf install linguagem versão.
- É possível definir versões globais ou locais para projetos específicos com os comandos
asdf globaleasdf local.
Atualizações e Comandos Adicionais
- Os usuários podem verificar outros comandos disponíveis com
asdf help, além de atualizar plugins comasdf plugins-updatee o próprio ASDF comasdf update.
Estrutura dos Shims
Como Funciona a Execução
- Ao executar um comando como
which ruby, observa-se que ele aponta para scripts em um diretório específico chamado reshims.
- Se houver problemas na execução de bibliotecas instaladas globalmente, pode-se usar o comando
asdf reshimpara recriar esses shims.
Instalação de Serviços Essenciais
Recomendação de Bancos de Dados
- Sugestões incluem a instalação do PostgreSQL, Redis e Memcache como serviços essenciais. MongoDB também é mencionado, mas com cautela sobre seu uso.
Instruções para Instalação do MongoDB
- A instalação do MongoDB requer seguir instruções específicas devido à falta dos pacotes nos repositórios oficiais.
- É necessário adicionar chaves públicas e repositórios ao sistema antes da instalação efetiva do MongoDB.
Gerenciamento dos Daemons
Gerenciamento de Serviços e Daemons no Linux
Comandos para Gerenciar Serviços
- O arquivo
/etc/init.d/redis-servercontém comandos como start, stop e status que podem ser utilizados diretamente comsudo /etc/init.d/redis-server status, embora o comandoserviceseja mais simples de lembrar.
- Para controlar daemons em sistemas que utilizam Systemd, utiliza-se o comando
systemctl, onde a sintaxe é inversa ao comandoservice. Por exemplo,systemctl start mongod.
Segurança e Conexão com Servidores
- Serviços como memcache, redis e mongo não requerem senha por padrão; portanto, não devem ser expostos à internet. Já o PostgreSQL exige configuração de usuários.
- Para criar um novo usuário no PostgreSQL, deve-se logar como usuário postgres e usar os comandos:
sudo su postgres
createuser --interactive
createdb akitaonrails
Desenvolvimento vs Produção
- Durante o desenvolvimento, frameworks geralmente conseguem conectar ao PostgreSQL sem necessidade de senha. Em produção, recomenda-se evitar conexões com superusuários.
- Para projetos antigos que dependem de versões específicas do PostgreSQL, pode-se utilizar ferramentas como ASDF ou Docker para gerenciar diferentes versões.
Instalação do Docker
- A instalação do Docker começa com a remoção de versões antigas (se existirem), seguida pela instalação dos pacotes necessários:
sudo apt-get install
apt-transport-https
ca-certificates
curl
gnupg-agent
software-properties-common
- É importante adicionar chaves públicas para validar pacotes externos. Isso protege contra a instalação de pacotes modificados por hackers.
Configuração Final do Docker
- Após instalar as chaves necessárias e adicionar repositórios ao APT usando
add-apt-repository, instala-se o Docker com:
sudo apt-get install docker-ce docker-ce-cli containerd.io
- O usuário deve ser adicionado ao grupo "docker" para gerenciar containers sem privilégios administrativos:
sudo usermod -aG docker $USER
Testando a Instalação do Docker
- Após reiniciar a sessão do usuário, teste a instalação executando:
docker run hello-world
Configuração do PostgreSQL com Docker
Iniciando o PostgreSQL via Docker
- O comando
mkdir -p $HOME/docker/volumes/postgrescria um diretório para armazenar volumes do PostgreSQL.
- Para garantir que a instalação nativa do PostgreSQL esteja desligada, utiliza-se
sudo service postgresql stopesudo service postgresql status.
- O PostgreSQL é iniciado no Docker com o comando:
docker run --rm --name pg-docker -e POSTGRES_PASSWORD=docker -d -p 5432:5432 -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data postgres.
- A conexão ao banco de dados pode ser feita usando o cliente nativo psql:
psql -h localhost -U postgres.
Gerenciamento de Containers
- É possível subir uma aplicação web em um container e o PostgreSQL em outro, gerenciados pelo Docker.
- O comando
ps auxpermite visualizar que o PostgreSQL está ativo na máquina.
- Esclarece que Docker não é uma máquina virtual; os processos rodam no mesmo kernel do sistema operacional.
Entendendo cgroups e a Leveza do Docker
Funcionamento dos cgroups
- Os cgroups permitem que o sistema operacional limite a visibilidade dos processos, evitando que eles enxerguem todo o sistema.
- Comparação entre a configuração de cgroup de um processo normal (bash) e como o Docker configura seus containers.
Comandos Básicos do Docker
- Recomenda-se aprender comandos básicos como
docker run,docker pull, edocker ps.
- O comando
docker stop [nome do container]é utilizado para parar containers ativos.
Introdução à Criptografia
Tipos de Tecnologias Criptográficas
- Existem três categorias principais na criptografia: algoritmos de digestão, encriptação reversível e criptografia assimétrica.
Algoritmos de Digestão
- Algoritmos como MD5, SHA1, SHA512 produzem impressões digitais fixas para qualquer entrada. Usados para verificar integridade da informação.
Encriptação Reversível
- Refere-se à criptografia simétrica onde mensagens são embaralhadas por uma chave secreta. Exemplos incluem Triple DES, Blowfish e AES.
Criptografia Assimétrica
- Utiliza pares de chaves (privada e pública). A chave privada deve ser mantida em segredo enquanto a pública pode ser compartilhada.
Importância das Chaves Públicas e Privadas
- Serviços como GitHub exigem registro da chave pública para autenticação. A chave privada é usada localmente para assinar informações.
Criando Chaves SSH
Processo de Geração de Chaves
- Para criar uma chave SSH segura usa-se:
ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/id_ed25519 -C "boss@akitaonrails.com".
Armazenamento das Chaves
- As chaves geradas são armazenadas no diretório
.ssh. A chave privada deve ser mantida em segurança; backup é essencial.
Uso do ssh-agent
Configuração de Chaves e Git
Importância da Chave Privada
- A chave privada é essencial, pois representa sua identidade digital. Se perdida, deve ser substituída em todos os serviços que você utiliza.
- Quem possui a chave privada tem acesso total às suas informações e serviços.
Configurando o Git
- Para configurar o Git, utilize os comandos:
git config --global user.name "AkitaOnRails"
git config --global user.email "boss@akitaonrails.com"
- Essa configuração global será usada em todos os commits. É possível personalizar por projeto no arquivo
.git/config.
Escolha do Editor de Texto
Preferências Pessoais
- O autor prefere usar VIM como editor de texto, mas recomenda o Visual Studio Code como uma excelente opção moderna.
- Sublime Text 3 é mencionado como leve e eficiente; Atom é considerado pesado devido ao uso do Electron.
Comparação entre Editores
- O VS Code usa componentes nativos, tornando-o mais responsivo que editores baseados apenas em Javascript.
- O GVIM oferece uma interface gráfica para usuários que preferem um ambiente visual.
Introdução ao TMUX
O Que é TMUX?
- TMUX é um multiplexer de terminal que permite múltiplas sessões dentro de um único terminal.
- Para instalar, use:
apt install tmux. Ele facilita a gestão de várias tarefas simultaneamente.
Funcionalidades Básicas do TMUX
- Comandos básicos incluem iniciar com
tmux, dividir janelas com Ctrl+b % e navegar entre painéis com Ctrl+b O.
- É possível gravar arquivos no VIM enquanto se utiliza o TMUX para gerenciar sessões.
Vantagens do Uso do TMUX
Persistência das Sessões
- Ao fechar o terminal normal, todas as atividades são perdidas; no entanto, com TMUX você pode listar sessões ativas usando
tmux ls.
Recuperação Rápida
- Comando
tmux attach-session -t 0permite retomar a sessão anterior sem perder progresso.
Utilidade em Conexões Remotas
Configurando o Ambiente de Desenvolvimento com VIM e Tilix
A Utilidade do VIM
- O VIM puro é considerado limitado, semelhante ao NANO, que é um editor simples. O autor expressa sua aversão ao NANO, mencionando sua origem no editor PICO.
- O PICO era usado em clientes de e-mail antigos como o PINE. O autor compara esses editores a ferramentas obsoletas que não são adequadas para programação moderna.
- O VIM e o Emacs são destacados por serem altamente versáteis devido à sua capacidade de script. O Emacs usa Emacs Lisp, enquanto o VIM utiliza VimScript.
Funcionalidades Modernas do VIM
- Com a capacidade de script, é possível adicionar funcionalidades modernas ao VIM, como colorização de sintaxe e autocompletar.
- O autor prefere usar Tilix como terminal e Z Shell (Zsh) em vez do Bash, destacando a importância dos dotfiles para personalização.
Instalação e Personalização
- Dotfiles são arquivos ocultos que armazenam configurações pessoais. Um exemplo famoso para Zsh é o Oh-my-ZSH; no entanto, o autor prefere os dotfiles do usuário SKWP.
- Após instalar os dotfiles desejados, temas como Solarized Dark são aplicados automaticamente ao terminal e ao VIM.
Navegação e Atalhos no Terminal
- No Tilix, o autor altera atalhos para facilitar a navegação entre janelas divididas. Ele menciona preferências pessoais sobre maximizar ou dividir telas durante o trabalho.
- A configuração permite uma experiência híbrida entre terminal gráfico (Tilix com GVim), otimizando a produtividade sem depender excessivamente do mouse.
Produtividade e Ferramentas Remotas
- Usar atalhos no TMUX e no VIM minimiza a necessidade de uso do mouse, ajudando na prevenção de lesões por esforço repetitivo (LER).
- As mesmas ferramentas utilizadas localmente podem ser usadas remotamente via SSH. Além disso, sessões do TMUX podem ser compartilhadas para programação em par.
Considerações Finais sobre Software Livre
- Para assistir vídeos online em uma nova instalação Linux, é necessário habilitar repositórios restritos instalando pacotes adicionais como ubuntu-restricted-extras.
Navegadores e Ferramentas no Ubuntu
Importância do Firefox e Diversidade de Navegadores
- O Ubuntu vem com o Firefox por padrão, sendo recomendado como navegador primário para evitar a monopolização pelo Google Chrome.
- A crescente dominância do Google Chrome é destacada, mencionando que outros navegadores como Microsoft Edge, Brave e Opera utilizam a mesma engine do Chrome.
- A preferência por mais opções de navegadores é expressa, mas reconhece-se a necessidade de compatibilidade em aplicações web.
Instalação de Aplicativos Úteis
- Para programadores web, é necessário instalar o Google Chrome ou sua versão aberta, Chromium, utilizando o comando
apt install chromium-browser.
- Sugestão para procurar "Ubuntu 18 post-install" para descobrir como instalar aplicativos úteis como Spotify, Discord e Skype após o primeiro boot.
Recursos Educacionais e Dúvidas Comuns
- O autor menciona a importância deste vídeo para referência futura sobre ferramentas essenciais como Docker, Postgres, ASDF e Vim.
- Um convite é feito aos iniciantes para que deixem suas dúvidas nos comentários abaixo do vídeo.