Migrando para o Linux? O que é preciso saber além da interface? - Introdução

Migrando para o Linux? O que é preciso saber além da interface? 

Introdução

    Não vou falar de distro X ou Y, não vou falar como instalar a Steam, Wine ou Proton, os "primeiros passos após migrar" ou coisa assim, iremos falar de conceitos importantes sobre o Linux! Será apenas uma introdução.

    Caso você queira entrar nesse mundo pra valer e da forma certa, entender o Linux é a parte mais importante! Mas temos um problema, nos últimos tempos a migração para o Linux aumentou muito, por N fatores que não importam agora, mas esse não é o problema, pelo contrario é muito bom, porem o básico esta sendo ignorado, não só por quem esta chegando agora no Linux mas por quem já esta aqui a mais tempo e que deveria passar esse conhecimento adiante, a maioria dos vídeos e conteúdos atualmente voltados a iniciantes trata apenas da instalação básica com um calamares da vida e coisas como "baixar steam, baixar wine, como jogar no Linux", são conteúdos muito focados em alguma distro especifica, não entenda errado, é um conteúdo necessário que visa atender as necessidades de que está chegando agora, mas isso pula muitas etapas, simplificar muito a explicação sobre o Linux, vai causar problemas futuros aos usuários.

    Eu sei que a maioria das pessoas não quer saber como o sistema funciona por baixo dos panos mas, como eu disse caso você queira entender o Linux então temos que falar do básico. É claro que só nesse post não da pra abordar tudo nos mínimos detalhes, nem é essa a intenção neste momento, mas quero tentar mostras o suficiente para você não ficar perdido.

    Não vou falar a historia do Linux ou coisas que vocês já talvez já tenha escutado diversas vezes como "Linux é o kernel, Linux é de código aberto, Linux é gratuito, Linux é seguro" etc. Isso com certeza você já escutou e na real não explica muito, então vamos entender o que realmente isso significa de forma mais pratica:
    O kernel junto com o conjunto de ferramentas que formam um sistema usável é um sistema extremamente controlável, personalizável e transparente, é um sistema robusto.

  • Controlável porque por exemplo: você configura, gerência seu sistema Linux como quiser. 
  • Personalizável porque você pode monta-lo da forma que achar melhor, na pratica as Distribuições Linux nada mais são que um conjunto de conceitos, filosofias e princípios que alguém achou interessante e montou o seu sistema, tendo como base o Linux.
  • Transparente no sentido de que você consegue saber o que está rodando, por que está rodando e onde isso está definido, nada acontece por trás dos panos.

    Então no Linux você controla, modifica, remove ou adiciona conforme suas necessidades.
    Aprender Linux não é só decorar comandos, é aprender a conversar com o sistema, ou de uma forma melhor: conversar com a lata, sentir a lata.
    Você não é apenas o usuário é o operador.

     Outra coisa importante é que o Linux e os UNIX em geral são "case sensitive", ou seja há diferenciação entre minúsculo e maiúsculo, então um diretório "Exemplo" e "exemplo" são duas coisas diferentes, e isso aplica-se a comandos.

FHS 

    Agora vamos um pouco mais além, devemos aprender sobre arquivos e diretórios, mas porque? Temos uma frase famosa que é "No Linux tudo são arquivos", e sim realmente é, então entender arquivos e diretórios além da forma como são organizados é talvez a parte mais fundamental para entendermos esse sistema.

    Nos temos a FHS – Filesystem Hierarchy Standard (Padrão de Hierarquia do Sistema de Arquivos), não se aplica apenas ao Linux, mas a vários Unix-like, não vamos focar totalmente nas especificações da FHS, nem sempre vai ser da forma como ela descreve, mas iremos abordar o essencial, não apenas decore, entenda! Será a nossa base para que você saiba se localizar na Hierarquia de diretórios do Linux.
    Devemos entender que diferente do Windows onde cada Disco/Partição recebe uma letra como "C:" no Linux tudo fica na mesma 
Hierarquia, começado pela "/" (root ou raiz),  uma coisa importante a salientar, no Linux todos os dispositivos de armazenamento como HDs, Pendrives, SSDs entre outros, ficam todos dentro de algum diretório especifico da mesma Raiz, diferente do Windows onde cada dispositivo de armazenamento, fica em sua própria Raiz como Disco C, D, E etc.

    Outra coisa importante é como essa Hierarquia funciona, é chamada de arvore invertida pela sua aparência, começando da Raiz que é o nível mais alto nessa Hierarquia e tudo estando abaixo dele, então para acessar a home do usuário (diretório pessoal) ficaria algo como:

    /home/user

 Onde sempre começa no "/" que é a raiz e a cada nível é usado novamente a "/" para separação, talvez você já tenha percebido que usamos a "/" (barra), não a barra invertida "\" usada no Windows.

 
/ Raiz (ROOT)  --> O primeiro diretório na Hierarquia, tudo esta dentro da raiz. 

/boot  --> Arquivos estáticos do boot loader, aqui onde fica os arquivos do GRUB, Initramdisk (Que seria o sistema de arquivos básico que o kernel usa durante o boot) e o kernel propriamente dito que é carregado no boot, além de outros arquivos. Geralmente você não vai mexer diretamente neste diretório, a outros arquivos e utilitários feitos para a sua configuração.

/etc  --> A maioria dos arquivos de configuração referente ao sistema estão aqui, como não vamos focar em interfaces diferentes mas sim apenas no Linux, esse é o lugar principal onde você vai fazer suas configurações e também inspecionar como as coisas estão configuradas.

/bin, /usr/bin, /sbin e /usr/sbin
  --> Eu sei que cada um tem seu uso, mas vou tratar todos no mesmo tópico, porque quero que você entenda o essencial, daria um artigo apenas sobre a FHS, mas não é o intuito, esses são diretórios onde estão os binários essenciais do sistema, a maioria dos comandos que você executa estão aqui. E outra coisa, geralmente estes diretórios são links para diretórios equivalentes dentre de "/usr", mas não se preocupe com isso.

/dev
  --> Aqui onde ficam os arquivos especiais e dispositivos. É aqui onde fica os dispositivos que representam por exemplo o seu HD, Geralmente algo como "/dev/sda", lembra que eu tinha falado que tudo são arquivos, aqui tudo é representado por arquivos seja o HD ou até uma webcam, geralmente todos terão seu arquivo relacionado e normalmente ficam aqui.

/lib, /usr/lib 
  --> Aqui ficam a bibliotecas e módulos do sistema, entenda biblioteca como algo essencial para os outros softwares do sistema e módulos.

/proc, /sys
  --> Estes são especiais, são sistemas de arquivos "virtuais" montados durante o boot do sistema, ou seja eles não existem no disco, é aqui onde ficam as informações do Kernel, seus processos, suas informações e configurações ficam, não configurações estáticas como no /etc, mas do kernel atual em execução, e é aqui onde você pode conversar de forma mais próxima como o Kernel e seus dispositivos, alterando parâmetros e configurações. Ex:

    cat /proc/cpuinfo 

 

Sistemas de Arquivos 

    Ok, entendemos a estrutura de diretórios do Linux, mas precisamos também saber algumas coisas sobre os seus Sistemas de arquivos, calma que não vamos nos aprofundar muito no assunto, mas ha coisas que precisamos saber.

    No Linux não temos um único sistema de arquivos, mas vários, mas vamos focar em 3: BTRFS, EXT4 e fat32.

  • BTRFS  --> É um sistema de arquivos atual e moderno, funciona muito bem em SSDs, SATA ou NVME, muitos recursos relacionados a integridade, e backup, e tem mais opções de configuração.
  • EXT4  --> É o clássico que funciona bem, não significa que seja velho ou ultrapassado, pode ser mais simples e fácil de configurar, recomendado em alguns casos.
  • FAT32  --> E sim, o FAT32, não é necessariamente um sistema do Linux, mas é muito usado por sua compatibilidade, geralmente a partição BOOT usara este sistema.

    Como eu disse, tem muitos outros, mas não precisa se preocupar, no momento estes são o suficiente. Alguns comando para ajuda-lo com Discos e Sistemas de Arquivos:

  • lsblk  --> Mostra a estrutura dos discos no sistema.
  • blkid  --> Mostra informações das partições.
  • cfdisk  --> Utilitário para particionamento via CLI, interface mais amigável. Ex: cfdisk /dev/sda
  • parted  --> Serve para manipular discos e partições como redimensionar, GPARTED é uma interface gráfica para ele.
  • df  --> Mostra o uso dos discos, útil para ver quanto espaço a disponível. Ex: df -h 

 

Permissões de Arquivos

    Para encerrarmos esta parte sobre Dispositivos, Arquivos e Diretórios temos que falar sobre Permissões. São elas que controlam quem pode acessar ou modificar diretórios ou arquivos, e ate o que pode ser executado ou quem pode executar.

 Podemos verificar as permissões com "ls -l":

    Para executar um script ou um AppImage por exemplo, é preciso que ele tenha permissão de execução, podemos verificar isso com o comando "ls" e passando a opção "-l" e caso precise modificar use o comando "chmod".

Ex: chmod +x <arquivo> 

    Muitos erros acontecem por falta de permissão ao tentar executar algo, entender como funcionam é essencial.

    Alguns comandos úteis:

  • chmod
  • chown
  • ls

    Outra coisa que devemos tratar é a execução com privilégios administrativos, comandos/arquivos sensíveis e/ou pertencentes ao root, ate  de outros usuários, precisamos dos privilégios certos, para executarmos um comando como administrador (o chamado root) podemos usar o "sudo" que nos da privilégios temporários ou logar como "root" usando o comando "su" Ex: su root.

    Lembre-se que executar comandos ou scripts como root é sempre perigoso, só use quando realmente necessário e evite executar scripts aleatórios como root.

Terminal

    O Terminal é onde podemos interagir com um interpretador de comandos, o mais comum é o bash, terminal é uma interface para configurar e usar o sistema operacional através de comandos executados pelo usuário. Terminal, pode ser acessado dentro da interface, geralmente com CRTL + ALT + T, ou também chamando o TTY com  CRTL + ALT + F1 a 12

    Ok, mas porque aprender isso? Eu sei que pra quem esta migrando para o Linux o Terminal pode causar "medo", mas o Terminal é uma ferramenta extremamente poderosa, seja para administrar o sistema, obter informações sobre o hardware ou software e claro, automatizar o sistema através de scripts. Não usar o Terminal é desperdiçar a ferramenta mais poderosa do Linux.

    Terminal não é tão complicado quanto parece, vamos entende o essencial, essa é a aparência comum do terminal: 

    A parte mais importante para não se perder é essa:

    

    Chamado de PS1, é aqui onde você terá algumas informações essências, como usuário que esta logado no momento e o diretório atual. Alguns comandos úteis:

  • history  --> para exibir o histórico de comandos.
  • pwd  --> Mostra o diretório atual
  • cd  --> Muda o diretório atual.
  • rm  --> Apaga um ou mais arquivos.
  • cp  --> Copia um ou mais Arquivos.
  • mv  --> Move um ou mais arquivos.
  • ls  --> Lista o conteúdo de diretórios.
  • ip  --> Mostra as informações de Rede.
  • top  --> Mostra processos rodando no sistema

    E como buscar ajuda no terminal?

  • man  --> Manual do comando. Ex: man comando
  • info  --> Documentação mais detalhada que o "man". Ex: info comando
  • help  --> Help interno. Ex: no bash execute: help

    Isso é importante, por exemplo, caso você precise saber como usar o comando "ls" use:

   $ ls --help

Atalhos do terminal

     A alguns atalhos para ajuda-lo com o terminal

  •  ctrl + c - Este serve para forçar a interrupção da tarefa em execução no terminal enviando um sinal (SIGINT).
  •  ctrl + d - Para casos onde algum comando esta com o prompt aguardando a entrada do usuário.
  •  ctrl + z - Pausa uma tarefa em execução (não se preocupe com isso agora), caso o use, o comando "fg" retorna a execução.
  •  ctrl + l - Serve para limpar  a tela, também pode ser usado o comando "clear"
  • ctrl + shift + v - Serve para colar algo, não usar o "ctrl + v".
  • Outra coisa é o "Tab" que serve para auto completar um comando ou caminho de diretório, basta digitar o começo ou uma parte e usar o "Tab" para ir completando, caso tenha mais de uma correspondência ele vai exibir as opções disponíveis.
   

Entendendo os comandos

    Esta parte é importante para que você entenda como executar os comandos, não apenas copia-los.

    Vamos usar o "ls" como exemplo, o primeiro de tudo é o "--help":

$ ls --help
Uso: ls [OPÇÃO]... [ARQUIVO]...
Lista informações sobre os ARQUIVOs (no diretório atual por padrão).
Lista as entradas em ordem alfabética se não for usada nenhuma opção -cftuvSUX
nem --sort.

Argumentos obrigatórios para opções longas também o são para opções curtas.
 -a, --all                  não ignora entradas começando com .
 -A, --almost-all           não lista as entradas implícitas . e ..
     --author               com -l, emite o autor de cada arquivo
 -b, --escape               emite escapes no estilo C para caracteres não-
                              gráficos
     --block-size=TAMANHO
         com -l, escala tamanhos por TAMANHO ao imprimir;
         e.g., "--block-size=M"; veja o formato de TAMANHO abaixo
[...]
         pré-definido para blocos de 1024-byte para uso do sistema de ficheiros;
         só é usado com -s e totais por pasta

 -l                         usa o formato de lista longa
 -L, --dereference
         ao mostrar informação de ficheiro para uma ligação
         simbólica, imprime informação do ficheiro referenciado
         em vez de informação da própria ligação
[...]

     Eu suprimi a maior parte da saída, para simplificar, mas a estrutura padrão de um comando segue essa lógica:

comando [opção] [argumentos] 

     Por exemplo o "ls"

ls -l /home 

     Estou chamando o "ls" passando a opção "-l" e o argumento "/home", estou dizendo: liste tudo usando o formato "lista longa" no diretório "/home", A maioria dos comandos funciona assim, mas para ter certeza sempre use o "--help".

    Outra coisa é sobre scripts e programas externos como um AppImage, é que sempre é preciso passa o caminho completo para ele (também chamado de PATH), por exemplo vamos considerar o script "exemplo.sh" que esta no diretório "/home/user/Documentos", e que estamos no mesmo diretório, para chama-lo não basta apenas chamar seu nome como outros comandos, isso porque os comandos usados no terminal estão no "PATH" padrão então não é preciso escrever todo o caminho para ele.

    Nesse caso de comandos/scripts que estejam fora do "PATH" padrão como nosso exemplo temos algumas formas para chama-lo:

/home/user/Documentos/exemplo.sh

    Esta é a forma mais tradicional, onde passamos o caminho completo, mas caso você esteja no mesmo diretório como tinha dito antes para o nosso exemplo basta uso o famoso "./" , ficaria assim:

   ./exemplo.sh

     O . (ponto) quando falamos em diretórios significa o diretório atual, é um atalho para não precisar especificar o caminho completo, outros exemplos:

  • . (ponto) - Diretório atual, no nosso exemplo seria "/home/user/Documentos"
  • .. (dois pontos) - Diretório pai (diretório acima), no nosso exemplo seria o "/home/user"
  • - (hífen) - Diretório acessado anteriormente
  • ~ (Til) - Diretório pessoal do usuário logado, no nosso exemplo "/home/user"
  • / (Barra) - A raiz

Gerenciadores de pacotes

     Outra coisa que confunde são os gerenciadores de pacotes como o apt, dnf etc. Cada sistema pode usar um diferente e em consequência usar uma forma de empacotamento diferente como ".deb", ".tar.xz" entre outros (equivalentes ao .exe).

    Alem disso ainda existem formatos universais que funcionam em praticamente qualquer distribuição como o "flatpak", "snap" e o "AppImage".

    Não vou me aprofundar muito, apenas a estrutura básica. A forma de instalação pode variar mas segue uma estrutura parecida:

    apt install <pacote>

    pacman -S <pacote>

    flatpak install <pacote>

E a forma de remover

    apt uninstall <pacote>

    pacman -R <pacote>

    flatpak uninstall <pacote>

     No geral é bem intuitivo como "install" para instalar e "uninstall" para remover, mas nem sempre segue esta logica, como no caso do pacman, porem seguindo a dica anterior do "--help" podemos aprender a usar.

     Lembrando que alteração desse tipo geralmente é preciso de privilégios administrativos, como o "sudo".

Conclusão

    Acredite se quiser, esse seria o básico e resumido :-D. Pode assustar no começo mas são informações importantes para você entender o Linux, e como focamos no Shell/Terminal isso vai ajuda-lo independente de Distribuição.

    Como tinha dito, não tem todas as informações aqui, é uma introdução, mas caso gostem posso fazer disso uma serie me aprofundando cada vez mais no Linux, só comentar ai e sugestões e criticas também podem comentar.















Comentários

Postar um comentário

Deixe sua opinião ou duvida.

Postagens mais visitadas deste blog

Definição PCismo

Entendendo o Arch Linux

PcismoOS