Linux terminal
Tags: webdev, programming, linux, terminal
Published: 2023-06-19 11:25:45

## O que é uma distribuição ? qual distribuição utilizar?

A distribuição são versões modificadas do próprio linux que desenvolvedores acabaram fazendo suas próprias versões,o sistema linux acaba sendo um sistema aberto onde**(open source)** vários desenvolvedores podem aprender e ao mesmo tempo desenvolver um novo sistema.

## O que e o kernel do linux?

E o core do sistema que possibilita identificar e executar todas nossas ações quando são escritas no terminal,o kernel foi desenvolvido utilizando C e assembely  e ele e nosso comunicador com maquina.

- Gerência CPU,memoria e etc
- Faz ligação entre usuario ↔ hardware
- Responsável pela execução das aplicações e verificação das mesmas

## Assembely

Saber o que é **Assembly** e entender o que é Assembly são duas coisas diferentes. Este artigo tem o intuito de explicar claramente o que é Assembly tanto na teoria quanto na prática. E isto pode, inclusive, ajudar a aprender a linguagem.

!https://miro.medium.com/v2/resize:fit:700/1*Wg7P5CcayvbylBal_JOGLA.png

saída do [PEDA](https://github.com/longld/peda)

Assembly é uma [linguagem de programação de baixo nível](https://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o_de_baixo_n%C3%ADvel). Mas você sabe o que isso significa na prática?

Cada arquitetura de processador, por exemplo [x86](https://pt.wikipedia.org/wiki/X86) ou [ARM](https://pt.wikipedia.org/wiki/Arquitetura_ARM), tem um [código de máquina](https://pt.wikipedia.org/wiki/C%C3%B3digo_de_m%C3%A1quina) diferente com instruções diferentes.

É claro que após o trabalho de projetar uma nova arquitetura é terminado, não existem ferramentas como compiladores etc. para essa arquitetura.

Então é necessário fazer a documentação dessa arquitetura para que os desenvolvedores sejam capazes de estudá-la e projetar ferramentas para as mesmas, ou então, portar ferramentas já existentes para essa arquitetura.

No manual da arquitetura normalmente escrevem o conjunto de instruções dela, que é basicamente a lista (quase) completa de todas as instruções de código de máquina que a arquitetura tem.

Porém, o código de máquina é um tanto quanto difícil de ler. Para facilitar o entendimento e memorização pelos desenvolvedores, as instruções recebem nomes e um formato em [texto mnemônico](https://pt.wikipedia.org/wiki/Mnem%C3%B3nica) que facilita a leitura e o entendimento.

Vamos ver por exemplo essa instrução **MOV** da arquitetura x86–64 mostrada no manual para desenvolvedores da Intel, [volume 2B](https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2b-manual.html).

!https://miro.medium.com/v2/resize:fit:700/1*gOD18L61VzBYXkmsprz7ug.png

Explicação da notação utilizada na referência está no [volume 2A](https://www.intel.com.br/content/www/br/pt/architecture-and-technology/64-ia-32-architectures-software-developer-vol-2a-manual.html), capítulo 3

Perceba que existem várias instruções **MOV** na arquitetura x86–64, mas vamos nos focar na circulada em vermelho.

Sem explicar mais do que precisamos saber aqui, a notação mais a esquerda é o código de máquina. E logo a direita do código de máquina nós temos uma notação em texto que facilita o entendimento da instrução, veja:

**mov r8, imm8**

O que esta notação significa é que esta instrução **MOV** define o valor de um registrador de 8 bits (**r8**) para um valor imediato de 8 bits (**imm8**). Bem simples de entender e decorar, não é mesmo?

Bom, caso ainda não tenha percebido **isso** é Assembly. Essa notação em texto das instruções do código de máquina, isso é a linguagem Assembly.

Assembly nada mais é que uma forma mais fácil de escrever o código de máquina usando-se de uma notação em formato de texto.

**Todas** as instruções da linguagem Assembly são, na verdade, também instruções do código de máquina. São as **mesmas instruções que fazem as mesmas coisas**.

É exatamente pelo fato de Assembly ser uma notação em texto do código de máquina que cada arquitetura diferente tem uma linguagem Assembly completamente diferente.

Já que se cada arquitetura tem um código de máquina diferente, consequentemente a sua linguagem Assembly também será diferente.

Então é **por isto** que Assembly é uma linguagem de baixo nível, já que suas instruções são as mesmas instruções do código de máquina. Há uma correspondência direta com **quase nenhuma abstração** do código de máquina.

O assembley é o software que converte o código em Assembly para o código de máquina. Existem também adições que o assembler pode fazer para que facilite a programação em Assembly, como por exemplo o pré-processador do [NASM](https://nasm.us/) que oferece bastante recursos.

Isso não quer dizer que seja uma “versão diferente” da linguagem Assembly e nem torna a linguagem “mais alto nível”, isto é apenas um conforto dado pelo assembley.

## Identificando o diretorio que usuario esta no terminal

`**PWD**` → Possibilita identificar o caminho que o usuário esta.

## Para mostrar arquivos que tem naquele diretório/pasta

`**ls`** → Desta forma vamos listar todos os arquivos do nosso diretório/pasta

## Para escrevermos algo dentro de um arquivo

`**echo “Bem vindo” > Bem vindo.txt**` 

**Com o comando acima em aspas duplas estamos dizendo que sera  passado um Unico argumento…**

***`>Bem vindo.txt` →***Com o comando a seguir referenciamos o nome do arquivo e extensão do mesmo

# Alterando a senha do nosso usuário padrão

`**passwd**` → Desa forma conseguimos inserir uma nova senha para nosso usuário e logo em seguida após inserirmos a nova  senha e desligarmos a maquina a senha nova vai esta sendo pedida

## Para lermos um arquivo que acabou de ser criado no terminal utilizamos o comando

**`cat BemVindo.txt`   →**Desta forma conseguimos ler um arquivo txt no nosso terminal

## Para descobrirmos o local que estamos dentro do diretório/pasta basta dar o comando

`**ls -l**` → Desta forma vai listar todos os arquivos na pasta e etc

## Para identificarmos arquivos invisíveis dentro de repositório basta darmos o comando.

`**ls -la**` → Desta forma conseguimos identificar todos os arquivos até mesmo os invisíveis.

## Para conseguimos visualizar todos os arquivos da nossa maquina naquele disco local juntamente com suas permissões de uso

`**ls -lh**` → Com esse comando conseguimos visualizar todos nossos arquivos e ao mesmo tempo ter acesso a permissões que foram concedidas a todos eles.

## Para adicionarmos um conteúdo de um arquivo dentro de um arquivo txt e necessário escrevermos desta maneira

`**echo “conteúdo que você quer colocar” >> arquivo.txt**`

## Para excluir uma pasta do diretório

`**rmdir` →**nome da pasta ou arquivo → ira excluir do seu diretório

## Para apagarmos um pasta completa basta escrevermos

`**rm -r**` → Nome da pasta

## Para abrir um arquivo e ver o conteúdo

`**less arquivo.txt**`

## Filtro e buscas de arquivos e diretórios

## Comando head

Esse comando proporciona lermos o inicio de um arquivo de texto  podendo mostrar até mesmo a quantidade de linhas que queremos:`**head arquivo.txt**` 

Para mostrar somente a quantidade de linha que solicitamos:`**head -n quantidade de linhas que você quer que retorne arquivo.txt**`

## Comando Tail

Esse comando possibilita lermos o final de arquivo de texto:**`tail arquivo.txt`**

Para mostrar somente a quantidade de linha que queremos:**`tail -n quantidade de linhas que você quer visualizar arquivo.txt`**

## Comando  grep

Esse comando abre a porta para fazermos buscas pelo nosso arquivo de palavras especificar ou até mesmo um pequeno texto:**`grep ‘lorem’ arquivo.txt`**

Podemos também fazer uma busca em todo nosso repositório de arquivos, caso não lembrarmos na onde exatamente o arquivo esta exatamente,então vamos supor que você esta na home com isso você pode digitar o seguinte comando para localizar o arquivo que você quer:**`grep -r ‘lorem’`**

“***Dentro da aspas ‘’ simples você pode colocar a palavra que você deseja localizar dentro do arquivo com isso ele fara uma varredura dentro do seu repositório.”***

# Adicionando um novo usuário no linux

Para adicionarmos um novo usuário dentro do sistema linux e necessário utilizarmos o comando **sudo** no inicio do comando, isso acontece porque o comando **sudo** serve para executarmos o terminal como se fossemos administradores desta forma conseguimos liberar algumas opções a mais dentro do nosso terminal e também da nossa maquina.

## **Comando para criar um novo usuário:**

`**sudo adduser nome do usuário que você deseja**`

para verificarmos se o usuário esta criado basta darmos um `ls/home/` desta forma conseguimos ver se o novo usuário foi criado

---

## Podemos também deletar um usuário que foi criado anteriormente da nossa maquina

Para isso vamos utilizar o comando de administrador novamente e desta forma vamos ter acesso a alguns recursos ****privilegiado****

## Comando:

`**sudo userdel  —remove nome do usuario que você deseja deletar**`

# Mudando o nome do Display do usuário

Conseguimos mudar o nome do Display do usuário que parte visual onde quando você entra na sua maquina aparece para você colocar a sua senha e etc.

## Para alterarmos o nome do display e necessário dar esse comando:

`**sudo usermod -c ‘Nome que desejamos alterar’ Nome que você quer deixar no seu display**`

# **Mudando o nome do diretorio base e do usuário do terminal**

Para alterarmos o nome do diretório do usuário /home basta utilizarmos o comando:

**`sudo usermod -l nome que queremos colocar no nosso diretório -d /home/nome que queremos colocar no nosso -m e nome antigo que estava no seu diretório`**

## **Bloqueando e desbloqueando usuários**

Esse comando e bastante utilizado em uso corporativo quando uma pessoa sai da empresa ou algo parecido;

**`sudo usermod -l nome do usuario`**

desta forma o usuário que desejamos bloquear ira ficar invisivel e consequentemente não vamos mas conseguir visualizar ela no display ou entrar no usuário pelo terminal porque ele esta bloqueado.

## Para desbloquear basta utilizarmos o comando

**`sudo usermod -U nome do usuário que desejamos desbloquear`**

# O que e um grupo no linux?

- Contém vários usuários;
- Facilitar gerenciamento de permissões dos usuários
- Quando um usuário e adicionado ele e também adicionado a um grupo com o seu nome

**Listando todos os grupos do linux :`getent group`**

## Para criar um grupo basta darmos o comando

`**sudo goupadd -g 9999 nome do grupo**`

## **Deletando um grupo de usuários**

**`sudo groupdel nome do grupo`**

Desta forma vamos deletar o grupo de usuários que foi criado anteriormente

Conseguimos direcionar um usuário para um grupo e para isso vamos utilizar o comando: **`sudo usermod -a -G nome do grupo nome do usuário que queremos colocar dentro do grupo`**

Para remover o usuário do grupo basta  utilizarmos o comando: **`sudo gpasswf -d nome do usuario nome do grupo`**

# Como se tornar um super usuário dentro do linux?

Um super usuário terá acesso a algumas coisas especificar da distribuição que ele esta e também conseguira fazer coisas que um usuário comum não consegue fazer ou ate mesmo um usuário administrativo, para se tornamos um super usuário basta utilizarmos o comando;

`**sudo su**`

Desta forma entramos no root e conseguimos fazer qualquer comando sem utilizar o sudo no começo do código.

**“Para sairmos do super usuário basta utilizarmos o comando exit desta forma se tornamos o usuário comum do sistema  novamente.”**

# Gerenciamento e permissões dentro do linux

## O que são permissões dentro do linux ?

- Possibilidade de alterar 3 propriedades de arquivos e diretórios
- **Leitura:** Se os usuários poderão ler o arquivo (R - read)  que está bloqueado por algum motivo
- **Escrita:** Se os usuários poderão escrever no arquivo (W - write)
- **Execução:** Se os usuários poderão executar o arquivo (X - execute) isso acontece quando temos que executar um script que esta determinado a fazer algo mas esta bloqueado

# **Entendendo as permissões**

- **1 222 333 444**
- **1:** Diretório ou arquivo
- **222:** Permissões do owner (dono)
- **333:**Permissões do grupo (que o arquivo pertence)
- **444:**Permissões dos demais usuários (que não são donos do arquivo e também não fazem parte do grupo do arquivo)

## Permissões escritas na linguagem do linux como e apresentado

- 1 222 333 444 ↔ drwxr-xr-x
- 1 serve para d ou -: diretório ou arquivo
- 222:Permissões do owner(dono)
- 333:Permissões do grupo
- 444:Permissões dos usuários
- d:directory = diretório
- r:read  = ler
- w:write = escrever, editar
- x:executar = executar
- -: não há permissão

## Exemplos

- `drw-rw-r—:` diretório,owner e grupo com permissão de ler e escrever, demais só com permissão de ler
- `-r—r—r—:` arquivo, só a permissão de leitura para todos

Basicamente cada parte do código tem um significado em questão as permissões que usuários tem ao ver um arquivo ou diretório

![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/53302973-83a8-4962-972f-c09ba7aee910/Untitled.png)

# Alterando permissões - Modo numérico

- Comando para alterar permissões: `chmod xxx file/dir`
- Onde ‘x’ representa as permissões em números
- **0**:Sem permissão `—`
- **1**:Executar `—x`
- **2**:Escrever `-w-`
- **3**:Ler e executar `-wx`
- **4**: ler `r—`
- **5**:Ler e executar `r-x`
- **6**:Ler e escrever `rw-`
- **7**:Ler,escrever e executar `rwr`

Para executarmos um comando por meio de números utilizamos o **chmod** e um comando responsável por alterar as permissões por meio de números.

## Exemplos do Chmod

- **`chmod 777` arquivo**: Todos tem todas as permissões
- **`chmod 400` arquivo**: Só dono tem permissão de leitura
- **`chmod 764` arquivo**: Dono todas as permissões, grupo pode ler e alterar e demais só ler
- **`chmod 755` arquivo**: Dono tem todas as permissões, grupo e outros só ler e executar
- **`chmod 000` arquivo**: Ninguém mais tem permissão para nada, só com sudo ou root

**“O comando chmod juntamente com suas permissões só pode ser executado dentro de um diretório de arquivos.”**

O comando "chmod" (abreviação de "change mode") é usado no Linux e outros sistemas operacionais baseados em Unix para alterar as permissões de um arquivo ou diretório. As permissões determinam quem pode ler, gravar e executar um arquivo ou diretório. O comando "chmod" pode ser usado para alterar as permissões de arquivos e diretórios de forma recursiva ou não recursiva.

A sintaxe básica do comando "chmod" é:

```
cssCopy code
chmod [OPÇÃO] [PERMISSÕES] ARQUIVO/DIRETÓRIO

```

Algumas das opções mais comuns do comando "chmod" incluem:

- "-c": exibe uma mensagem somente quando as permissões são alteradas
- "-R": altera as permissões de forma recursiva, aplicando as mesmas permissões a todos os arquivos e diretórios dentro do diretório especificado
- "-v": exibe uma mensagem para cada arquivo ou diretório cujas permissões são alteradas

As permissões são especificadas usando uma notação octal ou simbólica. Na notação octal, as permissões são representadas por três dígitos, cada um representando as permissões para o proprietário do arquivo, grupo e outros usuários, respectivamente. Cada dígito é uma soma de valores, onde 4 representa permissão de leitura, 2 representa permissão de escrita e 1 representa permissão de execução. Por exemplo, 755 significa que o proprietário tem permissão total (7), enquanto o grupo e outros usuários têm permissão de leitura e execução (5).

Na notação simbólica, as permissões são representadas por um conjunto de caracteres que representam o proprietário, grupo e outros usuários, respectivamente. Cada conjunto de caracteres inclui três caracteres que representam permissões de leitura, escrita e execução. Por exemplo, "rwxr-xr-x" significa que o proprietário tem permissão total, enquanto o grupo e outros usuários têm permissão de leitura e execução.

Alguns exemplos de comandos "chmod" incluem:

- Para conceder permissão de leitura, gravação e execução para o proprietário e permissão de leitura e execução para o grupo e outros usuários:

```
bash
chmod 755 arquivo.txt

```

- Para conceder permissão total para o proprietário, permissão de leitura e execução para o grupo e permissão de leitura para outros usuários:

```
bash
chmod u+rwx,g+rx,o+r arquivo.txt

```

- Para conceder permissão total para o proprietário e permissão de leitura e execução para o grupo e outros usuários de forma recursiva em todos os arquivos e diretórios dentro de um diretório:

```
bash
chmod -R u+rwx,g+rx,o+r pasta/

```

Com esses exemplos e informações básicas, você deve ser capaz de começar a usar o comando "chmod" para alterar as permissões de arquivos e diretórios no Linux e em outros sistemas operacionais baseados em Unix. Lembre-se de sempre verificar as permissões atuais antes de alterá-las e de usar as opções e notações corretas para evitar erros.

# Alterando permissões - Modo simbólico

- Comando para alterar permissões: `chmod args file/dir`
- Onde `‘args’` pode ser representado por:
- `+`:Adiciona permissão a um arquivo ou diretório
- `-` : Remove permissão a um arquivo ou diretório
- `=` :Determina as permissões a um arquivo, substituindo as anteriores
- `u` : Dono do arquivo (`user/owner`)
- `g`: Grupo(`group`)
- `o` : Outros (`others`)
- `a` : Todos (`all`)

## Exemplos - Modo Simbólico

- `chmod o=x`- Concedendo permissão de executar para outros
- `chmod a=rwx`: Concedendo todas as permissões a todos
- `chmod g-w`:Removendo permissão de escrever para grupos
- `chmod u+rw`:Concedendo permissão de ler e escrever para o user/owner

# Alterando o proprietário/owner do arquivo

Basicamente nos conseguimos alterar o proprietário daquele arquivo então vamos supor se tivermos um arquivo txt que esta com todas as permissões concedidas, vamos conseguir alterar ele para outro proprietário a partir deste momento o usuário que antes era proprietário do arquivo passara a não ser mais e não terá nenhuma permissão perante ao arquivo.

## Para alterarmos o proprietário utilizamos o seguinte comando:

`**sudo chown nome do usuario que queremos transferir arquivo que queremos transferir**`

***outro exemplo:***

**`sudo chown kaue c.txt`**

## Passando a permissão para um grupo de usuários  que precisam ver aquele arquivo

**`sudo crown nome do usuario:grupo que desejamos dar acesso arquivo.txt`**

***outro exemplo:*** 

**`sudo crown kaue:matos arquivo.txt`**

***Mas precisamos também dar acesso a todo grupo para que arquivo consiga ser lido pelos outros usuários, para isso vamos utilizar o comando:***

`**chmod 770 arquivo.txt**`

***esse comando deve ser executado para usuários que receberam o arquivo***

## Permissão para grupo de arquivos da maneira simplificada

Para passarmos um arquivo já com as permissões concedidas para um grupo, vamos utilizar o comando 

**`sudo chgrp grupo que desejamos conceder o arquivo arquivo.txt`** 

***outro exemplo:***

**`sudo chgrp matos arquivo.txt`**

“***A partir deste comando os usuários do outro grupo tem permissões nos arquivos ou arquivo”***

# Gerenciamento básico de redes

Como a web funciona ?

1.Envio de requisição para um domínio (DNS)

- O que e DNS?

O DNS (Domain Name System – Sistema de nome de domínio) **converte nomes de domínio legíveis por humanos (por exemplo, www.amazon.com) em endereços IP legíveis por máquina (por exemplo, 192.0.2.44).**

DNS - É um IP traduzido só que simplificado para mundo real

2.Verificação do domínio (DNS = IP) 

- IP = 192.168.0.1

3.Requisição da resposta para o servidor que pertence a este domínio

***Um computador e um servidor***

![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9e1ab91b-18c8-4c6e-85fd-fa8c3c7b031b/Untitled.png)

4.Retorno da resposta a quem solicitou - **Esse retorno e resultado que aquele pessoa estava esperando que pode ser uma pagina por exemplo ou até mesmo uma pesquisa.**

# O que são Portas ?

- É um **endpoint**
- Sempre está associada a um IP

## **Exemplos de portas:**

- 20: FTP
- 22: SSH
- 80: HTTP → A requisição padrão quando e feita sem certificado de segurança nos se conectamos em site com porta 80
- 443: HTTPS → A partir do momento em que temos o certificado de segurança se conectamos na porta 443 que porta,que permite fazermos varias requisições.

## **Portas  que são padrões**

**MySQL** → 192.168.0.60:3306 

**HTTP** → 192.168.0.60.80

**API** → 192.168.0.60:4000 

***Uma API  e quando temos um dado armazenado em determinado local e la contem rotas onde podemos fazer requisições e obter esses dados***

## Isso seria uma rota que você esta fazendo requisição e obtendo o seus dados:

/login

/index

# O que e TCP?

- Transmission Control protocol = TCP
- Protocolo utilizado para transmissão de dados pela rede

**TCP** → Faz envio de pacotes pequenos de um local para outro ele e bastante utilizado por conta da sua segurança no aspecto de proteção de dados na sua transferência.

## O que utiliza o TCP?

- SMTP (Envio de E-mails);
- FTP (Transferência de arquivos);
- HTTP (Protocolo para navegar na internet);

# O que e UDP?

- User Datagram Protocol = UDP
- Espécie de irmão do TCP,serve também para enviar dados
- O UDP se preocupa mais com a velocidade do envio do que a confiabilidade
- Logo o TCP e mais seguro
- UDP  é utilizado principalmente para jogos online

# Comandos que uteis para Rede dentro do linux

Conseguimos verificar se estamos recebendo acesso a internet e também verificar se um site esta bloqueado para nosso IP ou algo parecido com isso:

Para isso utilizamos o comando:

`**ping [google.com.br](http://google.com.br)**`

E desta forma vamos ter acesso as requisições que estão sendo feitas e também ao ping da nossa internet 

<aside>
💡 **Lembrando que e possível fazer verificar também de IPS**

</aside>

## Conseguimos também ver ou mudar as verificações de redes que tem no nosso sistema

Dentro do terminal do linux e possível visualizarmos algumas configurações de rede que foram denominadas como padrão na nossa maquina para isso basta digitarmos o comando:

`**ifconfig` → Significado de ifconfig = interface configuration**

“**Desta forma conseguimos ver todas as informações da nossa rede! atual ao mesmo tempo também conseguimos verificar todas as interfaces que estamos conectados”**

## Conseguimos ver os IP atrás no DNS

Basicamente todo DNS de um site contém uma mascara por trás onde bloqueia o nosso  acesso ao IP original daquela maquina ou servidor, contudo conseguimos verificar um ip por trás do DNS utilizando o comando:

**`nslookup [google.com](http://google.com)`**

“**Desta forma conseguimos visualizar um IP por trás do DNS”**