Quero usar linux, por onde eu começo?
Tags: linux, architecture, devops
Published: 2021-05-24 23:31:43

Seja por pura curiosidade ou então por necessidade, diferentes motivos podem levar você a querer entrar nesse mundo.

Talvez você já tenha ouvido falar que a maior parte dos servidores mundiais são máquinas Linux, talvez você só queira um ambiente mais customizável.

O fato é que não importa qual a sua motivação, a base ainda é a mesma.

Nesse artigo vou tentar mostrar um pouco por onde começar,  de forma resumida, pois acredito que o aprendizado real vem no uso diário dessa ferramenta.


Antes de começar a passar o pouco que sei, acho importante citar o que **NÃO** está no escopo deste artigo: 

- Comparações entre distros
- Redes
- Gerenciamento de serviços
- Uma abordagem profunda

A ideia é realmente passar apenas o suficiente pra você começar a usar hoje, sem se sentir sobrecarregado e consequentemente desistir. E por isso me basearei no Ubuntu por ser a distro mais popular.

Caso você queira, também pode navegar diretamente para a sessão através dos links:

- [Comandos básicos](#comandos-básicos)
- [Estrutura de diretórios](#estrutura-de-diretórios)
- [Permissões](#permissões)
- [Gerenciador de pacotes](#gerenciador-de-pacotes)

Dito isso, vamos lá.

---

## Comandos básicos

**man**
Consulta os manuais online do sistema.
```shell
$  man ls
```

**whereis**
Localiza o binário, código-fonte e o manual para um comando.

```shell 
$  whereis rpm 
```
*Exibe o caminho do binário, código-fonte e o manual*

**tree**
Exibe a árvore de diretórios.
```shell
$  tree /var/lib
```

**find**
Localiza arquivos e palavras dentro destes.


| Opções  |           |                                                                                                                                        |
|---------|-----------|----------------------------------------------------------------------------------------------------------------------------------------|
| Comando | Argumento | Descrição                                                                                                                              |
| -name   | padrão    | procura arquivos cujos nomes sejam iguais ao padrão                                                                                    |
| -exec   | comando   | procura arquivos e executa um comando                                                                                                  |
| -type   | x         | procura por arquivos do tipo especificado, onde x pode ser um dos seguintes valores:  f = Arquivos d = Diretórios l = Links simbólicos |



```shell 
$  find / -name arquivo1.doc
```
*Procura o arquivo1.doc dentro do diretório /*

```shell
$  find /etc -type f -exec grep -i `mouse` {} \;
```
*Procura todos os arquivos abaixo de /etc que possuem a palavra `mouse`*
 
**ln**
Cria links para arquivos e/ou diretórios. Cria tanto links simbólicos (soft links) quanto diretos (hard links). O padrão são links diretos.
OBS: cuidado ao criar hard links, pois isso significa que se você apagar o link, o arquivo também será deletado.

Opções:
 -s — Cria um link simbólico.

```shell
$  ln -s /arquivo1.doc link1.doc
```
*Cria o link simbólico link1.doc. Se o link for deletado o arquivo original permanece*

**head**
Exibe no terminal uma quantidade de linhas de texto a partir do início do arquivo. 

```shell
$  head -5 /etc/mtools.conf
```
*Exibe as cinco primeiras linhas do arquivo /etc/mtool.conf*

**tail**
Exibe uma quantidade de linhas a partir do final do arquivo.

```shell 
$  tail -5 /etc/mtools.conf
```
*Exibe as cinco últimas linhas do arquivo.*

**tee**
Exibe a saída de um programa e a escreve em um arquivo simultaneamente.

```shell
$  ls -l /bin | tee ls.out
```
*lista o conteúdo do diretório bin e escreve o resultado no arquivo ls.out*

### Comandos de compactação e descompactação

**tar** — Armazena ou extrai arquivos e diretórios dentro de um único arquivo ou dispositivo.

| Opções  |                                                                      |
|---------|----------------------------------------------------------------------|
| Comando | Descrição                                                            |
| -c      | Cria um novo arquivo .tar e adiciona a ele os arquivos especificados |
| -x      | Retira os arquivos agrupados no arquivo .tar.                        |
| -f      | Indica que o destino é um arquivo em disco e não uma fita magnética  |
| -z      | compacta ou descompacta arquivos utilizando o comando gzip           |
 
 ```shell
$  tar -xvf documentos.tar 
 ```
*Extrai o conteúdo do arquivo documentos.tar*
 
```shell 
$  tar -cvzf textos.tar.gz documentos1
```
*Gera um arquivo de backup compactado com gzip do diretório documentos1*

```shell
$  tar -xvzf textos.tar.gz
```
*Extrai o conteúdo do arquivo textos.tar.gz*


### Comandos de montagem e desmontagem

**mount** — Monta discos  
  
| Opções  |                                                                 |
|---------|-----------------------------------------------------------------|
| Comando | Descrição                                                       |
| -a      | monta todos os dispositivos referenciados no arquivo /etc/fstab |
| -h      | exibe uma mensagem de ajuda                                     |
| -w      | monta o dispositivo para leitura e gravação                     |
| -t      | especifica o tipo de sistema de arquivo no dispositivo          |


ex:  
```shell
$  mount -t ext4 /dev/fd0 /media  
```
*monta o disco fd0, que tem como tipo de sistema de arquivo ext4, no diretório /media*

**unmount** — Desmonta discos  
  
ex: 
```shell
$  umount /dev/fd0
```

### O sistema de arquivos
No linux não existem extensões. Os arquivos executáveis são marcados com um `asterisco` no final, arquivos de backup são marcados com `~`, arquivos de diretórios com `/`, links simbólicos com `@` e diretórios ocultos começam com `.`.

Para visualizar essas terminações, utilizamos o comando ls -F.

```shell
$ ls -F
```
--- 

## Estrutura de diretórios

O sistema **GNU/Linux** possui a seguinte estrutura básica de diretórios organizados segundo o FHS (Filesystem Hierarchy Standard).

| Diretório            | Descrição                                                                                                                                                                                                                                                                                           |
|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **/bin**             | Contém arquivos programas do sistema que são usados com freqüência pelos usuários.                                                                                                                                                                                                                  |
| **/boot**            | Contém arquivos necessários para a inicialização do sistema.                                                                                                                                                                                                                                        |
| **/cdrom**           | Ponto de montagem da unidade de CD-ROM.                                                                                                                                                                                                                                                             |
| **/media**           | Ponto de montagem de dispositivos diversos do sistema (rede, pen-drives...).                                                                                                                                                                                                                        |
| **/dev**             | Contém arquivos usados para acessar dispositivos (periféricos) existentes no computador.                                                                                                                                                                                                            |
| **/etc**             | Arquivos de configuração de seu computador local.                                                                                                                                                                                                                                                   |
| **/etc/X11**         | Configuração do X Window System.                                                                                                                                                                                                                                                                    |
| **/floppy**          | Ponto de montagem de unidade de disquetes.                                                                                                                                                                                                                                                          |
| **/home**            | Diretórios contendo os arquivos dos usuários.                                                                                                                                                                                                                                                       |
| **/lib**             | Bibliotecas compartilhadas pelos programas do sistema e módulos do kernel.                                                                                                                                                                                                                          |
| **/lost+found**      | Local para a gravação de arquivos/diretórios recuperados pelo utilitário **fsck.ext2**. Cada partição possui seu próprio diretório lost+found.                                                                                                                                                      |
| **/mnt**             | Ponto de montagem temporário.                                                                                                                                                                                                                                                                       |
| **/proc**            | Sistema de arquivos do kernel. Este diretório não existe em seu disco rígido, ele é colocado lá pelo kernel e usado por diversos programas que fazem sua leitura, verificam configurações do sistema ou modificar o funcionamento de dispositivos do sistema através da alteração em seus arquivos. |
| **/sys**             | Sistema de arquivos do kernel. Este diretório não existe em seu disco rígido, ele é colocado lá pelo kernel e usado por diversos programas que fazem sua leitura, verificam configurações do sistema ou modificar o funcionamento de dispositivos do sistema através da alteração em seus arquivos. |
| **/root**            | Diretório do usuário root.                                                                                                                                                                                                                                                                          |
| **/sbin**            | Diretório de arquivos programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema.                                                                                                                                                                          |
| **/tmp**             | Diretório para armazenamento de arquivos temporários criados por programas.                                                                                                                                                                                                                         |
| **/usr**             | Contém maior parte de seus programas. Normalmente acessível somente como leitura. Icones de desktop ficam em: /usr/share/applications                                                                                                                                                               |
| **/usr/bin**         | Comandos não essenciais do sistema.                                                                                                                                                                                                                                                                 |
| **/usr/local/share** | Hierarquia local independente da arquitetura.                                                                                                                                                                                                                                                       |
| **/var**             | Contém maior parte dos arquivos que são gravados com freqüência pelos programas do sistema, e-mails, spool de impressora, cache, etc.                                                                                                                                                               |

## Permissões

### Arquivos e diretórios

- /etc/passwd - Armazena informações sobre os usuários (não inclui a senha)
A sintaxe do arquvio é: 
**usuário:senhaCriptografada:UID:GID:comentário:HOME:shell**


### Comandos para gerenciamento de usuários e grupos

adduser *usuário* [opções]

**passwd** — Define uma senha para um usuário

```shell
$  passwd usuário
```

**usermod** — Modifica características de um usuário

A síntaxe é: *usermod opções usuário*

Opções:
-d dir_home — Novo diretório home do usuário que está sendo modificado.
-s programa — Novo shell
-g novo_grupo — Novo grupo

**userdel** — Elimina um usuário do sistema

A sintaxe é: *userdel opção usuário*

Opções:
-r — Remove todos os arquivos do usuário

### Permissões e privilégios

Quando é feita a listagem com a opção `-l` são mostradas informações extras e com elas vem as informações de permissões e privilégios.

A primeira coluna indica sempre o tipo de arquivo seguidas de nove posições que indicam as chaves de permissão. 

É possível identificar as chaves ativas se ao invés de um traço tiver uma letra.

As primeiras três posições são para proprietário, as próximas três ao grupo que o arquivo pertence e as três últimas aos outros usuários. Cada grupo de chaves contém uma chave de leitura, uma de escrita e uma de execução, sempre nessa ordem.

A letra utilizada para identificar as chaves são as seguintes:

r — read
w — write
x — execution

#### Comandos para gerenciamento de privilégios

**chmod** — Altera permissões de acesso a arquivos

A sintaxe é:
*chmod opção modo_arquivo arquivo*

Opções:
-c — Mostra informações sobre os arquivos modificados
-f — Não imprime mensagem de erro
-R — Recursivo

**Modo simbólico** — É uma lista de expressões na forma:
*identificador operando valor*

Identificadores:
u — Usuário
g — Grupo
o — Outros
a — Todos

Operandos:
\+ — Adiciona permissões às permissões já existentes.
\- — Retira permissões das permissões existentes.
\= — Atribui uma nova permissão, sobrescrevendo as outras existentes.

Valores:
r — Permissão para leitura
w — Permissão para escrita
x — Permissão para execução


**chwon** — Muda o dono de um arquivo

*chwon opção novo_dono[.novo_grupo] arquivo*

ex:
```shell
$ chown claudio.teses monografia.doc
```
*Muda o dono e o grupo do arquivo monografia.doc*

## Gerenciador de pacotes

O Ubuntu tem como seu gerenciador de pacotes o DPKG, que ele herdou do Debian e como uma extensão do DPKG, o APT.

### DPKG

**dpkg** opção nome_pacote

Opções:
 -i — Instalação simples
 -P — Desinstala o pacote (todos os arquivos do pacote)
 -l — Exibe os pacotes que estão instalados
 -help — Exibe uma mensagem de ajuda

Opções:
--to-deb ou -d — converte o pacote para o formato .deb.

### APT

Arquivos de configuração: 
- /etc/apt/apt.conf — configuração padrão do APT.
- /etc/apt/sources.list — Repositórios que o APT utiliza para buscar info dos pacotes a serem instalados ou atualizados.

Sintaxe do sources.list:
tipo *URI* parâmetros 

- tipo — tipo do pacote: deb ou deb-src.
- URI — localização do repositório.
- parâmetros — info adicionais sobre a localização dos pacotes dentro do repositório.

#### APT-CACHE:

**apt-cache** search [package a procurar]

#### COMANDOS APT-GET:

**apt-get** opção comando

Opções:
 -h — Ajuda.
 -y — Assume "yes" pra todas as perguntas e não exibe prompt.
 update — Atualiza o banco de dados local do apt-get com a lista de pacotes do servidor.
 install — Instala um ou mais pacotes.
 remove — Remove um ou mais pacotes.
 upgrade — Efetua a atualização dos pacotes instalados.

---

Bom, tentei ao máximo sintetizar para também não estender muito. Acredito que hoje existem recursos que possibilitam um aprofundamento muito maior, mas entendo que existem pessoas que desejam apenas começar.

Por hoje é isso, qualquer feedback, deixem nos comentários ou se quiserem trocar uma ideia é só me chamar lá no twitter! :)