WSL (Windows Subsystem for Linux)
WSL (Subsistema do Windows para Linux) é uma camada de compatibilidade criada pela Microsoft que permite rodar um Linux real dentro do Windows, sem precisar de máquina virtual ou dual boot.
É possivel usar terminal Linux diretamente no Windows (bash, apt, ssh, git, etc.). Trabalhar com tecnologias como Node.js, Docker, Python, Ruby, PHP no ambiente Linux. Roda comandos e programas como se estivesse num Linux "puro". Integra arquivos entre o Windows e o Linux (/mnt/c para acessar o disco C, por exemplo).
| Versão | Diferenças principais |
|---|---|
| WSL 1 | Traduzia chamadas do Linux para chamadas do Windows (mais leve, mas menos compatível). |
| WSL 2 | Usa um kernel Linux de verdade rodando com tecnologia de máquina virtual. Muito mais compatível e poderoso. |
Para abrir os arquivos wsl manualmente digite na barra de endereço: \\wsl$
Para usar o wls em projetos Vscode, instale a extensão WSL (simbolo pinguim - da microsoft). após instalado (se aparecer open a wsl window, marque essa opção), pressione f1 (para abrir a pallete command), digite: WSL e escolha Reopen folder in WSL, escolha seu ambiente desejado (Ubuntu por exemplo). Pronto, agora a pasta que estava aberta em seu vscode irá abrir por dentro do linux do wsl.
Obs.: Para projetos grandes ou que exigem muitos arquivos, é uma boa prática mover a pasta para dentro do Ubuntu (ou seja, para o sistema de arquivos nativo do WSL).
Comandos WSL
$ wsl # Abre a distro padrão - exemplo: wsl
$ wsl -d Ubuntu # Abre uma distro específica - sintaxe: wsl -d <distro>
$ wsl -l # Lista todas as distribuições instaladas - exemplo: wsl -l
$ wsl -l -v # Lista distros com status e versão do WSL - exemplo: wsl -l -v
$ wsl --set-default Ubuntu # Define a distro padrão - sintaxe: wsl --set-default <distro>
$ wsl --install -d Debian # Instala uma nova distro - sintaxe: wsl --install -d <distro>
$ wsl --unregister Ubuntu # Remove a distro do sistema - sintaxe: wsl --unregister <distro>
$ wsl --terminate Ubuntu # Encerra uma distro em execução - sintaxe: wsl --terminate <distro>
$ wsl --shutdown # Encerra todas as distros e o WSL - exemplo: wsl --shutdown
$ wsl --version # Mostra a versão do WSL instalada - exemplo: wsl --version
$ wsl -e ls # Executa um comando direto na distro padrão - sintaxe: wsl -e <comando>
$ wsl -d Ubuntu -- uname -a # Executa um comando em uma distro específica - sintaxe: wsl -d <distro> -- <comando>
$ explorer.exe . # Abre o diretório atual no Windows Explorer (usado dentro do WSL)
$ mv /mnt/d/dev/python/meu_projeto ~/projetos/ # move seu projeto para dentro da distribuição, crie a pasta projetos em seu wsl ubuntu e mova para lá
Comandos Linux
grep (Global Regular Expression Print) é uma ferramenta usada para buscar texto dentro de arquivos ou da saída de comandos. Ele usa expressões regulares para fazer buscas avançadas por padrões em texto.$ pwd # print working directory (mostra o caminho do diretório atual)
$
$ # CHANGE DIRECTORY
$ cd . # Diretório atual
$ cd / # Diretório root ou a separação de diretórios
$ cd ~ # home (cd sem nada também vai para a home)
$ cd - # volta para o diretório que anterior
$
$ # ESTRUTURA DE ARQUIVOS
$ sudo apt install tree # instala pacote para ver estrutura de pastas e arquivos
$ tree # mostra a árvore do diretório atual
$ tree -d # diretórios
$ tree -a # mostra arquivos ocultos
$ tree -d -L 2 # mostra níveis dos diretórios nesse caso 2 níveis.
$
$ # CONCATENAR E/OU EXIBIR CONTEUDO DE ARQUIVO
$ cat nome_arquivo.ext
$ cat -n # enumera as linhas
$ # LISTAR ULTIMAS LINHAS DE UM ARQUIVO
$ tail nome_arquivo.ext
$ tail -NÚMERO` # mostra a quantidade de linhas que for adicionado em `NÚMERO`.
$ tail -f # continua assistindo o arquivo em busca de novos dados.
$
$ # DETALHES DO ARQUIVO
$ wc # conta linhas, palavras e caracteres
$ wc -l # linhas
$ wc -m # caracteres
$ wc -w # palavras
$
$ # CRIAÇÃO DE DIRETÓRIOS
$ mkdir -p pasta_pai/pasta_filho/{pasta_a,pasta_b,pasta_c} # cria um cadeia de diretórios (use aspas ou barra invertida para separar caracteres inválidos), o que está entre chaves será criado um ao lado do outro, dentro no mesmo diretório.
$
$ # SÍMBOLOS E OPERADORES ÚTEIS
$ # ; - permite executar vários comandos na mesma linha. Roda todos os comandos, mesmo se ocorrer algum erro.
$ # && - permite executar vários comandos na mesma linha. Se o comando anterior não gerar nenhum erro, continua a corrente de comandos, do contrário, para no momento que ocorrer um erro.
$ # || - permite executar vários comandos na mesma linha. Ele só executa o próximo comando se o anterior gerar um erro.
$ history | grep "python" # nesse caso pesquisa os comandos que tem a palavra python no histórico. | - Joga a saída (output) de um comando para a entrada (input) de outro. (muito usado com o grep).
$ # > - Joga a saída de um comando e redireciona para um arquivo. Apaga o arquivo todo e substitui seu conteúdo.
$ # >> - Joga a saída de um comando e redireciona para um arquivo. Não apaga o que estiver no arquivo, apenas adiciona o novo conteúdo na última linha.
$
$ # BACKGROUND E FORENGROUND
$ sleep 3000 & # & - Joga o processo para o background, fica rodando e libera o terminal.
$ jobs # mostra processos em execução
$ fg %n # leva o que estiver em background para o foreground - "n" é o id do job
$ bg %n # continua um job em background - "n" é o id do job
$ kill %n #mata um job - "n" é o id do job
$
$ # OUTROS COMANDOS
$ file arquivo.txt # mostra o tipo do arquivo
$ history # histórico de comandos já digitados
$ pkill # mata processos
$ whoami # mostra seu usuário
$ hostname # mostra o nome do seu computador
$ uname -a # mostra dados sobre o sistema
$ ps aux # mostra todos os processos rodando no sistema no momento da execução
$ source nome_script # Serve para executar um script no contexto do shell atual, sem iniciar um novo processo de shell.